New Upstream Release - thonny

Ready changes

Summary

Merged new upstream version: 4.1.1 (was: 4.0.1).

Resulting package

Built on 2023-07-26T22:08 (took 7m45s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases thonny

Lintian Result

Diff

diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 4d2b2c4..745d3ff 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -2,6 +2,111 @@
 Version history
 ===============
 
+4.1.1 (2023-06-11)
+==================
+* Fix warning for the cases where Thonny avoids user module shadowing a library module (#384)
+* Fix installing from local file in ESP flashing dialog (#2811)
+* Use a tilde to separate pre-release versions in the AppData (#2807), by @jwillikers
+* Use bigger initial width in simple mode
+* Big progress with Italian translation, by mapi68, Ribezzz and sailslack
+* Updated Chinese (TW) and English (UK) translations
+
+
+4.1.0 (2023-06-03)
+==================
+* Fix MicroPython config page regression introduced in 4.1.0b1 (#2724, #2763)
+* Fix remote Python 3 (SSH) connection error (regression introduced in 4.1.0b1)
+* Fix code completion shortcut displayed in macOS menu
+* Add command "Show esptool version" for ESP flasher
+* Don't disconnect for ESP flasher commands which don't touch the device
+* Close tab on middle click (#2767) by @mrexodia
+* Make package manager support new micropython-lib index (#2777)
+* Report macOS version instead of Darwin version in the About box
+* Implement more flexible Raspberry Pi detection
+* Enable thonny to open and save files with zenity 3.91+ (#2786) by @befeleme
+* Make dbus_next dependency optional (#2771)
+* Recognize ESP32 as possible CircuitPython device
+* Add menu indicator for back-end switcher
+* Allow WebREPL for RP2040 backend (experimental)
+* Use correct MicroPython start address (0x0 instead of 0x1000) when flashing ESP32-S3
+* Recognize ESP32 devices by VID 0x303A
+* Don't show irrelevant ports in port selector (e.g. /dev/cu.Bluetooth-Incoming-Port)
+* Allow setting --flash-size in ESP flasher, #2801
+* Rename "Raspberry Pi" initial settings to "Raspberry Pi (simple)"
+* Update several translations
+* Add en_GB translation
+* Attempt to overcome "window was deleted before its visibility changed" error
+* Fix pipkin directory creation in paste mode (e.g. package installation via WebREPL)
+* Upgrade bundled websockets, paramiko, docutils, mypy, Send2Trash, esptool to latest versions
+
+
+4.1.0b1 (2023-04-23)
+====================
+
+New
+---
+* Enhance esptool GUI (propose known MicroPython and CircuitPython downloads; allow setting baud rate and start address; allow querying device info), #2707, #1600, #2536, #1171, #2657
+* Ensure Thonny's backends don't get confused by other installations, #2616
+* Detect and warn if user module is shadowing a library module, #384
+* Make serial port description in interpreter selection menu more descriptive
+* Added pt_BR translation for all help pages, #2673, by @mgmalheiros
+* Add Pololu MicroPython downloads to UF2 flasher
+* Use UDisks to find mounted filesystems on Linux, #2683 by jwillikers
+
+Dependency changes
+------------------
+* Upgrade bundled Python from 3.10.9 to 3.10.11
+* Upgrade bundled Tk from 8.6.12 to 8.6.13
+* Upgrade bundled Pylint from 2.15 to 2.17
+* Upgrade bundled MyPy from 0.991 to 1.2
+
+Fixes
+-----
+* Fix a potential autocompletion error, #2162
+* Experiment with better MicroPython raw paste fallback, #2624
+* Fix sys.sdtout.write return value, #2629
+* Remove unnecessary shebangs, #2645
+* Add option for saving unnamed editors before Run/Debug, #2619
+* Fix blank editors in macOS, again, #2425
+* Fix todo view, #2681, by @kr-g
+* Minor corrections for English help pages, #2674, by @mgmalheiros
+* Upgrade bundled esptool from 4.4 to 4.5
+* Allow Linux installer to use existing Python 3.11 and 3.12, #2676
+* Require saving before using fast debugger, #2699, by @michaellass
+* Add missing translation sites in editors.py, #2705 by @nicolasdespres
+* Restore MicroPython completions in the shell, #2467, #2419
+* Don't use deprecated FLASK_ENV environment variable.
+* Add better shortcut for increasing font size in macOS, #2725
+* Avoid falling back to Python menu in simple mode on macOS, #2729
+* Various improvements to "Kind of Aqua" UI theme, #2760
+* Fix double paste with Command-V when CapsLock on, #2753
+* Fix Cut with Command-X when CapsLock on, #2753
+
+
+4.0.2 (2023-01-14)
+==================
+* Fix Mypy logging error in the Assistant, #2491 by @kr-g and @solsword
+* Fix AttributeError on save, #2454
+* Add Thonny version as environment value for user programs, #2494 by @kr-g
+* Make `__file__` contain absolute path, #2497
+* Start SSH preparation command with space to avoid adding it to shell history, #2563 by @isaacl
+* Bump pipkin version to 1.0b8 and fix various bugs with MicroPython package installation, including not being able to update a package (#2555)
+* Restore Find/Replace dialog close button and non-dialog behavior, #2461, #2550
+* Make Find/Replace dialog non-modal again, #2550
+* Fix Find/Replace seeding, #2356, #2550
+* Restore focus after using file dialogs, #2501
+* Don't remove stacktrace links after closing the process, #2471
+* Never clear shell when Stop/Restart is used for stopping a process, #2456
+* Treat .toml, .gitignore and .env as text files
+* Fix expression box glitch (lower frame box remaining visible) when debugging on macOS
+* Ignore disk flushing errors in the end of UF2 installation
+* Make port finding in the end of UF2 installation process more robust
+* Don't enable variant and version selection in UF2 dialog before variants get downloaded
+* Add Vietnamese translation, by Bui Huy Quang
+* Update several translations
+* Fix the name for Slowenian, #2611
+* Update several deps in Thonny + Python bundles (asttokens, mypy, pylint, esptool, paramiko)
+
 4.0.1 (2022-09-11)
 ==================
 * Fix error when running script with closed Shell, #2412
diff --git a/CREDITS.rst b/CREDITS.rst
index d7636a1..bc6fe9f 100644
--- a/CREDITS.rst
+++ b/CREDITS.rst
@@ -42,6 +42,7 @@ Libraries, resources and tools
 * 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.
+* https://github.com/hlovatt/PyBoardTypeshed
 
 Source contributors, sponsors, advisors, translators and frequent bug-reporters
 -------------------------------------------------------------------------------
@@ -55,6 +56,7 @@ Source contributors, sponsors, advisors, translators and frequent bug-reporters
 * Algent Albrahimi
 * Anatoly Techtonik
 * Anders Pamdal
+* Andrea Ferrari
 * Andrew Scheller
 * André Roberge
 * Andy Piper
@@ -65,7 +67,9 @@ Source contributors, sponsors, advisors, translators and frequent bug-reporters
 * Austin Bart
 * Avag. sayan
 * badukaire
+* Bui Huy Quang
 * borpol
+* CADTEC GmbH (cadtec.ch)
 * cefn
 * Celso Isayah Dias
 * Chad Purdy
@@ -77,6 +81,7 @@ Source contributors, sponsors, advisors, translators and frequent bug-reporters
 * Dominic Twyman
 * Dominik George
 * Donald Butt
+* Duncan Ogilvie (@mrexodia)
 * Eliot Blennerhassett
 * Emanuel Angelo
 * Fabianus.c
@@ -92,6 +97,7 @@ Source contributors, sponsors, advisors, translators and frequent bug-reporters
 * Hyungseok Choi
 * IhorNehrutsa
 * Ingo Blechschmidt
+* Isaac Levy (@isaacl)
 * Ivanhercaz
 * Ivan.schamann
 * Илья Кругликов
@@ -99,10 +105,12 @@ Source contributors, sponsors, advisors, translators and frequent bug-reporters
 * Jens Diemer
 * jharris1993
 * Juan Falgueras
+* Juhan Oskar Hennoste (@FeldrinH)
 * Jonathan Campbell
 * Jordan Williams
 * jose1711
 * José Carlos García
+* Karolina Surma (@befeleme)
 * Kaspar Papli
 * Kauri Raba
 * kr-g
@@ -110,14 +118,17 @@ Source contributors, sponsors, advisors, translators and frequent bug-reporters
 * Lrasinen
 * M Burak Kalkan
 * Marcelo de Gomensoro Malheiros
+* Marian-Silviu Iuga
 * Marie Roald
 * Marko Ristin
+* Martin Rommel
 * Matt Iversen
 * Miro Hrončok
 * NathanBnm
 * Nicolas Despres
 * Pavel Minaev
 * Peter Marshall
+* Peter Mawhorter (@solsword)
 * Petr. moses
 * Phil Duby
 * phr0gger
@@ -129,18 +140,21 @@ Source contributors, sponsors, advisors, translators and frequent bug-reporters
 * Sam Warmuth
 * Sami Almuhammady
 * sailslack
+* Scott Blackledge
 * segalion
 * Simon Gijsen
 * Simon Long
 * sourceperl
 * speedy-10
 * Stefan Rothe
+* Stewart Russell (@scruss)
 * Suk-Hyung Hwang
 * Sven Duzont
 * Syed Nasim
 * Taavi Ilp
 * tabreturn
 * TANAKA Masayuki
+* Thomas Helmuth
 * TooLazy0x00
 * Toomas Mölder
 * Tristan Bunn
diff --git a/LICENSE.txt b/LICENSE.txt
index e72b574..3412dad 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2022 Aivar Annamaa
+Copyright (c) 2023 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
diff --git a/PKG-INFO b/PKG-INFO
index eee1078..38612ab 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: thonny
-Version: 4.0.1
+Version: 4.1.1
 Summary: Python IDE for beginners
 Home-page: https://thonny.org
 Author: Aivar Annamaa and others
@@ -32,6 +32,8 @@ Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
 Classifier: Topic :: Education
 Classifier: Topic :: Software Development
 Classifier: Topic :: Software Development :: Debuggers
@@ -40,4 +42,3 @@ Requires-Python: >=3.8
 License-File: LICENSE.txt
 
 Thonny is a simple Python IDE with features useful for learning programming. See https://thonny.org for more info.
-
diff --git a/debian/changelog b/debian/changelog
index 55df893..929baba 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+thonny (4.1.1-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Wed, 26 Jul 2023 22:02:12 -0000
+
 thonny (4.0.1-1) unstable; urgency=medium
 
   [ Aivar Annamaa ]
diff --git a/packaging/linux/org.thonny.Thonny.appdata.xml b/packaging/linux/org.thonny.Thonny.appdata.xml
index 59a0d2d..78bf163 100644
--- a/packaging/linux/org.thonny.Thonny.appdata.xml
+++ b/packaging/linux/org.thonny.Thonny.appdata.xml
@@ -44,6 +44,27 @@
   <content_rating type="oars-1.1" />
 
   <releases>
+    <release version="4.1.1" date="2023-06-11">
+      <description>
+        <p>
+          Bug-fix release.
+        </p>
+      </description>
+    </release>
+    <release version="4.1.0" date="2023-06-03">
+      <description>
+        <p>
+          Feature and bug-fix release.
+        </p>
+      </description>
+    </release>
+    <release version="4.1.0~b1" date="2023-04-23">
+      <description>
+        <p>
+          Feature pre-release.
+        </p>
+      </description>
+    </release>
     <release version="4.0.1" date="2022-09-11">
       <description>
         <p>
diff --git a/setup.py b/setup.py
index dffa27a..b361aad 100644
--- a/setup.py
+++ b/setup.py
@@ -8,12 +8,12 @@ def recursive_files(directory):
     paths = []
     for (path, _, filenames) in os.walk(directory):
         for filename in filenames:
-            if not filename.endswith(".pyc"):
+            if not filename.endswith(".pyc") and filename != "registered.json":
                 paths.append(os.path.join('..', path, filename))
     return paths
 
-if sys.version_info < (3, 6):
-    raise RuntimeError("Thonny requires Python 3.6 or later")
+if sys.version_info < (3, 8):
+    raise RuntimeError("Thonny requires Python 3.8 or later")
 
 setupdir = os.path.dirname(__file__)
 
@@ -55,6 +55,8 @@ setup(
         "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: 3.9",
         "Programming Language :: Python :: 3.10",
+        "Programming Language :: Python :: 3.11",
+        "Programming Language :: Python :: 3.12",
         "Topic :: Education",
         "Topic :: Software Development",
         "Topic :: Software Development :: Debuggers",
@@ -70,7 +72,7 @@ setup(
     python_requires=">=3.8",
     packages=find_packages(),
     package_data={
-        "": ["VERSION", "defaults.ini", "res/*"]
+        "": ["VERSION", "defaults.ini", "res/*", "dbus/*"]
             + recursive_files("thonny/locale")
             + recursive_files("thonny/vendored_libs"),
         "thonny.plugins.help": ["*.rst"],
diff --git a/thonny.egg-info/PKG-INFO b/thonny.egg-info/PKG-INFO
index eee1078..38612ab 100644
--- a/thonny.egg-info/PKG-INFO
+++ b/thonny.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: thonny
-Version: 4.0.1
+Version: 4.1.1
 Summary: Python IDE for beginners
 Home-page: https://thonny.org
 Author: Aivar Annamaa and others
@@ -32,6 +32,8 @@ Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
 Classifier: Topic :: Education
 Classifier: Topic :: Software Development
 Classifier: Topic :: Software Development :: Debuggers
@@ -40,4 +42,3 @@ Requires-Python: >=3.8
 License-File: LICENSE.txt
 
 Thonny is a simple Python IDE with features useful for learning programming. See https://thonny.org for more info.
-
diff --git a/thonny.egg-info/SOURCES.txt b/thonny.egg-info/SOURCES.txt
index d7f73e6..cca704c 100644
--- a/thonny.egg-info/SOURCES.txt
+++ b/thonny.egg-info/SOURCES.txt
@@ -47,6 +47,7 @@ thonny/shell.py
 thonny/terminal.py
 thonny/tktextext.py
 thonny/token_utils.py
+thonny/udisks.py
 thonny/ui_utils.py
 thonny/workbench.py
 thonny/workdlg.py
@@ -56,7 +57,10 @@ thonny.egg-info/dependency_links.txt
 thonny.egg-info/entry_points.txt
 thonny.egg-info/requires.txt
 thonny.egg-info/top_level.txt
+thonny/dbus/org.freedesktop.DBus.ObjectManager.xml
+thonny/dbus/org.freedesktop.UDisks2.xml
 thonny/locale/compile_mo.bat
+thonny/locale/register_updates.py
 thonny/locale/thonny.pot
 thonny/locale/update_pot.bat
 thonny/locale/ar_AR/LC_MESSAGES/thonny.mo
@@ -67,6 +71,8 @@ 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_GB/LC_MESSAGES/thonny.mo
+thonny/locale/en_GB/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
@@ -132,6 +138,20 @@ 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/HELP_CONTENT/assistant.rst
+thonny/locale/pt_BR/HELP_CONTENT/birdseye.rst
+thonny/locale/pt_BR/HELP_CONTENT/debuggers.rst
+thonny/locale/pt_BR/HELP_CONTENT/debugging.rst
+thonny/locale/pt_BR/HELP_CONTENT/dock.rst
+thonny/locale/pt_BR/HELP_CONTENT/errors.rst
+thonny/locale/pt_BR/HELP_CONTENT/flask.rst
+thonny/locale/pt_BR/HELP_CONTENT/index.rst
+thonny/locale/pt_BR/HELP_CONTENT/modes.rst
+thonny/locale/pt_BR/HELP_CONTENT/packages.rst
+thonny/locale/pt_BR/HELP_CONTENT/plotter.rst
+thonny/locale/pt_BR/HELP_CONTENT/program_arguments.rst
+thonny/locale/pt_BR/HELP_CONTENT/shell.rst
+thonny/locale/pt_BR/HELP_CONTENT/turtle.rst
 thonny/locale/pt_BR/LC_MESSAGES/thonny.mo
 thonny/locale/pt_BR/LC_MESSAGES/thonny.po
 thonny/locale/pt_PT/LC_MESSAGES/thonny.mo
@@ -156,6 +176,8 @@ 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/vi_VN/LC_MESSAGES/thonny.mo
+thonny/locale/vi_VN/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
@@ -254,7 +276,6 @@ thonny/plugins/microbit/microbit_back.py
 thonny/plugins/microbit/api_stubs/antigravity.pyi
 thonny/plugins/microbit/api_stubs/array.pyi
 thonny/plugins/microbit/api_stubs/audio.pyi
-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.pyi
@@ -278,7 +299,9 @@ thonny/plugins/microbit/api_stubs/ustruct.pyi
 thonny/plugins/microbit/api_stubs/utime.pyi
 thonny/plugins/micropython/__init__.py
 thonny/plugins/micropython/bare_metal_backend.py
+thonny/plugins/micropython/base_flashing_dialog.py
 thonny/plugins/micropython/connection.py
+thonny/plugins/micropython/esptool_dialog.py
 thonny/plugins/micropython/miniterm_wrapper.py
 thonny/plugins/micropython/mp_back.py
 thonny/plugins/micropython/mp_common.py
diff --git a/thonny.egg-info/entry_points.txt b/thonny.egg-info/entry_points.txt
index 619f42a..af087a9 100644
--- a/thonny.egg-info/entry_points.txt
+++ b/thonny.egg-info/entry_points.txt
@@ -1,3 +1,2 @@
 [gui_scripts]
 thonny = thonny:launch
-
diff --git a/thonny/VERSION b/thonny/VERSION
index cc868b6..2582ddd 100644
--- a/thonny/VERSION
+++ b/thonny/VERSION
@@ -1 +1 @@
-4.0.1
\ No newline at end of file
+4.1.1
\ No newline at end of file
diff --git a/thonny/__init__.py b/thonny/__init__.py
index 78a5cb8..d1ed9f4 100644
--- a/thonny/__init__.py
+++ b/thonny/__init__.py
@@ -143,11 +143,18 @@ def is_portable():
         return abs_location.startswith("/media/") or abs_location.startswith("/mnt/")
 
 
+_THONNY_VERSION = None
+
+
 def get_version():
+    global _THONNY_VERSION
+    if _THONNY_VERSION:
+        return _THONNY_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()
+            _THONNY_VERSION = fp.read().strip()
+            return _THONNY_VERSION
     except Exception:
         return "0.0.0"
 
@@ -414,7 +421,7 @@ def _get_orig_argv() -> Optional[List[str]]:
 
 def _configure_logging(log_file, console_level=None):
     logFormatter = logging.Formatter(
-        "%(asctime)s.%(msecs)03d %(levelname)-7s %(name)s: %(message)s", "%H:%M:%S"
+        "%(asctime)s.%(msecs)03d [%(threadName)s] %(levelname)-7s %(name)s: %(message)s", "%H:%M:%S"
     )
 
     file_handler = logging.FileHandler(log_file, encoding="UTF-8", mode="w")
diff --git a/thonny/assistance.py b/thonny/assistance.py
index b4b6076..714b712 100644
--- a/thonny/assistance.py
+++ b/thonny/assistance.py
@@ -255,7 +255,6 @@ class AssistantView(tktextext.TextFrame):
         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():
@@ -287,7 +286,6 @@ class AssistantView(tktextext.TextFrame):
             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")
@@ -402,7 +400,6 @@ class AssistantView(tktextext.TextFrame):
         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
@@ -444,7 +441,6 @@ class Helper:
 
 class ErrorHelper(Helper):
     def __init__(self, error_info):
-
         # TODO: don't repeat all this for all error helpers
         self.error_info = error_info
 
diff --git a/thonny/backend.py b/thonny/backend.py
index 1ceec42..ae10bc9 100644
--- a/thonny/backend.py
+++ b/thonny/backend.py
@@ -16,9 +16,10 @@ from typing import Any, BinaryIO, Callable, Dict, Iterable, List, Optional, Tupl
 
 import thonny
 from thonny import report_time
-from thonny.common import BackendEvent  # TODO: try to get rid of this
-from thonny.common import (
+from thonny.common import (  # TODO: try to get rid of this
     IGNORED_FILES_AND_DIRS,
+    PROCESS_ACK,
+    BackendEvent,
     CommandToBackend,
     EOFCommand,
     ImmediateCommand,
@@ -29,6 +30,7 @@ from thonny.common import (
     ToplevelCommand,
     ToplevelResponse,
     UserError,
+    is_local_path,
     parse_message,
     read_one_incoming_message_str,
     serialize_message,
@@ -353,13 +355,22 @@ class MainBackend(BaseBackend, ABC):
         try:
             from thonny import jedi_utils
 
+            sys_path = self._get_sys_path_for_analysis()
+
+            # add current dir for local files
+            """
+            if cmd.filename and is_local_path(cmd.filename):
+                sys_path.insert(0, os.getcwd())
+                logger.debug("editor autocomplete with %r", sys_path)
+            """
+
             with warnings.catch_warnings():
                 completions = jedi_utils.get_script_completions(
                     cmd.source,
                     cmd.row,
                     cmd.column,
                     cmd.filename,
-                    sys_path=self._get_sys_path_for_analysis(),
+                    sys_path=sys_path,
                 )
         except ImportError:
             completions = []
@@ -588,7 +599,6 @@ class UploadDownloadMixin(ABC):
         cmd,
         target_path_class,
     ) -> List[str]:
-
         total_cost = 0
         for item in items:
             if item["kind"] == "file":
@@ -799,6 +809,9 @@ class SshMixin(UploadDownloadMixin):
 
         # stderr gets directed to stdout because of pty
         pid = stdout.readline().strip()
+        ack = stdout.readline().strip()
+        if ack != PROCESS_ACK:
+            raise RuntimeError(f"Got {ack!r} instead of expected {PROCESS_ACK!r}")
         channel = stdout.channel
 
         return RemoteProcess(self._client, channel, stdin, stdout, pid)
@@ -821,7 +834,6 @@ class SshMixin(UploadDownloadMixin):
         pass
 
     def _get_sftp(self, fresh: bool):
-
         if fresh and self._sftp is not None:
             self._sftp.close()
             self._sftp = None
@@ -924,7 +936,6 @@ def ensure_posix_directory(
         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:
diff --git a/thonny/base_file_browser.py b/thonny/base_file_browser.py
index 4338c02..7baddcf 100644
--- a/thonny/base_file_browser.py
+++ b/thonny/base_file_browser.py
@@ -12,7 +12,7 @@ from typing import Optional
 from thonny import get_runner, get_workbench, misc_utils, tktextext
 from thonny.common import InlineCommand, UserError, get_dirs_children_info
 from thonny.languages import tr
-from thonny.misc_utils import running_on_mac_os, running_on_windows, sizeof_fmt
+from thonny.misc_utils import get_menu_char, running_on_mac_os, running_on_windows, sizeof_fmt
 from thonny.ui_utils import (
     CommonDialog,
     ask_one_from_choices,
@@ -21,6 +21,7 @@ from thonny.ui_utils import (
     ems_to_pixels,
     get_hyperlink_cursor,
     lookup_style_option,
+    open_with_default_app,
     scrollbar_style,
     show_dialog,
 )
@@ -172,7 +173,10 @@ class BaseFileBrowser(ttk.Frame):
 
         # 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
+            header_frame,
+            text=f" {get_menu_char()} ",
+            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)
@@ -1574,15 +1578,6 @@ def get_local_files_root_text():
     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
 
diff --git a/thonny/codeview.py b/thonny/codeview.py
index 3cb956e..48576f4 100644
--- a/thonny/codeview.py
+++ b/thonny/codeview.py
@@ -118,7 +118,6 @@ class CodeViewText(EnhancedTextWithLogging, SyntaxText):
     """Provides opportunities for monkey-patching by plugins"""
 
     def __init__(self, master=None, cnf={}, **kw):
-
         super().__init__(
             master=master,
             tag_current_line=get_workbench().get_option("view.highlight_current_line"),
@@ -233,7 +232,6 @@ class CodeView(tktextext.EnhancedTextFrame):
         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)
         logger.debug("Detected encoding %s", encoding)
         while True:
diff --git a/thonny/common.py b/thonny/common.py
index 4dee089..e44af85 100644
--- a/thonny/common.py
+++ b/thonny/common.py
@@ -18,6 +18,8 @@ REPL_PSEUDO_FILENAME = "<stdin>"
 MESSAGE_MARKER = "\x02"
 OBJECT_LINK_START = "[object_link_for_thonny=%d]"
 OBJECT_LINK_END = "[/object_link_for_thonny]"
+REMOTE_PATH_MARKER = " :: "
+PROCESS_ACK = "OK"
 
 IGNORED_FILES_AND_DIRS = [
     "System Volume Information",
@@ -442,6 +444,8 @@ class CompletionInfo:
     prefix_length: int  # the number of chars to be deleted before inserting name
     signatures: Optional[List[SignatureInfo]]
     docstring: Optional[str]
+    module_name: Optional[str]
+    module_path: Optional[str]
 
 
 @dataclass
@@ -721,13 +725,11 @@ def universal_relpath(path: str, context: str) -> str:
         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]
+def get_python_version_string():
+    result = sys.version.split()[0]
 
-    if maxsize is not None:
-        result += " (" + ("64" if sys.maxsize > 2**32 else "32") + " bit)"
+    if sys.maxsize <= 2**32:
+        result += ", 32-bit"
 
     return result
 
@@ -795,3 +797,11 @@ def is_private_python(executable):
     result = os.path.exists(os.path.join(os.path.dirname(executable), "thonny_python.ini"))
     logger.debug("is_private_python(%r) == %r", executable, result)
     return result
+
+
+def is_remote_path(s: str) -> bool:
+    return REMOTE_PATH_MARKER in s
+
+
+def is_local_path(s: str) -> bool:
+    return not is_remote_path(s) and not s.startswith("<")
diff --git a/thonny/dbus/org.freedesktop.DBus.ObjectManager.xml b/thonny/dbus/org.freedesktop.DBus.ObjectManager.xml
new file mode 100644
index 0000000..9946e78
--- /dev/null
+++ b/thonny/dbus/org.freedesktop.DBus.ObjectManager.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+  <interface name="org.freedesktop.DBus.ObjectManager">
+    <method name="GetManagedObjects">
+      <arg type="a{oa{sa{sv}}}" name="object_paths_interfaces_and_properties" direction="out" />
+    </method>
+    <signal name="InterfacesAdded">
+      <arg type="o" name="object_path" />
+      <arg type="a{sa{sv}}" name="interfaces_and_properties" />
+    </signal>
+    <signal name="InterfacesRemoved">
+      <arg type="o" name="object_path" />
+      <arg type="as" name="interfaces" />
+    </signal>
+  </interface>
+</node>
\ No newline at end of file
diff --git a/thonny/dbus/org.freedesktop.UDisks2.xml b/thonny/dbus/org.freedesktop.UDisks2.xml
new file mode 100644
index 0000000..63122ef
--- /dev/null
+++ b/thonny/dbus/org.freedesktop.UDisks2.xml
@@ -0,0 +1,226 @@
+<?xml version="1.0"?>
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+    <interface name="org.freedesktop.UDisks2.Manager">
+        <method name="CanFormat">
+            <arg type="s" name="type" direction="in" />
+            <arg type="(bs)" name="available" direction="out" />
+        </method>
+        <method name="CanResize">
+            <arg type="s" name="type" direction="in" />
+            <arg type="(bts)" name="available" direction="out" />
+        </method>
+        <method name="CanCheck">
+            <arg type="s" name="type" direction="in" />
+            <arg type="(bs)" name="available" direction="out" />
+        </method>
+        <method name="CanRepair">
+            <arg type="s" name="type" direction="in" />
+            <arg type="(bs)" name="available" direction="out" />
+        </method>
+        <method name="LoopSetup">
+            <arg type="h" name="fd" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="o" name="resulting_device" direction="out" />
+        </method>
+        <method name="MDRaidCreate">
+            <arg type="ao" name="blocks" direction="in" />
+            <arg type="s" name="level" direction="in" />
+            <arg type="s" name="name" direction="in" />
+            <arg type="t" name="chunk" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="o" name="resulting_array" direction="out" />
+        </method>
+        <method name="EnableModules">
+            <annotation name="org.freedesktop.DBus.Deprecated" value="true" />
+            <arg type="b" name="enable" direction="in" />
+        </method>
+        <method name="EnableModule">
+            <arg type="s" name="name" direction="in" />
+            <arg type="b" name="enable" direction="in" />
+        </method>
+        <method name="GetBlockDevices">
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="ao" name="block_objects" direction="out" />
+        </method>
+        <method name="ResolveDevice">
+            <arg type="a{sv}" name="devspec" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="ao" name="devices" direction="out" />
+        </method>
+        <property type="s" name="Version" access="read" />
+        <property type="as" name="SupportedFilesystems" access="read" />
+        <property type="as" name="SupportedEncryptionTypes" access="read" />
+        <property type="s" name="DefaultEncryptionType" access="read" />
+    </interface>
+    <interface name="org.freedesktop.UDisks2.Drive">
+        <method name="Eject">
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="SetConfiguration">
+            <arg type="a{sv}" name="value" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="PowerOff">
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <property type="s" name="Vendor" access="read" />
+        <property type="s" name="Model" access="read" />
+        <property type="s" name="Revision" access="read" />
+        <property type="s" name="Serial" access="read" />
+        <property type="s" name="WWN" access="read" />
+        <property type="s" name="Id" access="read" />
+        <property type="a{sv}" name="Configuration" access="read" />
+        <property type="s" name="Media" access="read" />
+        <property type="as" name="MediaCompatibility" access="read" />
+        <property type="b" name="MediaRemovable" access="read" />
+        <property type="b" name="MediaAvailable" access="read" />
+        <property type="b" name="MediaChangeDetected" access="read" />
+        <property type="t" name="Size" access="read" />
+        <property type="t" name="TimeDetected" access="read" />
+        <property type="t" name="TimeMediaDetected" access="read" />
+        <property type="b" name="Optical" access="read" />
+        <property type="b" name="OpticalBlank" access="read" />
+        <property type="u" name="OpticalNumTracks" access="read" />
+        <property type="u" name="OpticalNumAudioTracks" access="read" />
+        <property type="u" name="OpticalNumDataTracks" access="read" />
+        <property type="u" name="OpticalNumSessions" access="read" />
+        <property type="i" name="RotationRate" access="read" />
+        <property type="s" name="ConnectionBus" access="read" />
+        <property type="s" name="Seat" access="read" />
+        <property type="b" name="Removable" access="read" />
+        <property type="b" name="Ejectable" access="read" />
+        <property type="s" name="SortKey" access="read" />
+        <property type="b" name="CanPowerOff" access="read" />
+        <property type="s" name="SiblingId" access="read" />
+    </interface>
+    <interface name="org.freedesktop.UDisks2.Filesystem">
+        <method name="SetLabel">
+            <arg type="s" name="label" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="Mount">
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="s" name="mount_path" direction="out" />
+        </method>
+        <method name="Unmount">
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="Resize">
+            <arg type="t" name="size" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="Check">
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="b" name="consistent" direction="out" />
+        </method>
+        <method name="Repair">
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="b" name="repaired" direction="out" />
+        </method>
+        <method name="TakeOwnership">
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <property type="aay" name="MountPoints" access="read" />
+        <property type="t" name="Size" access="read" />
+    </interface>
+    <interface name="org.freedesktop.UDisks2.Partition">
+        <method name="SetType">
+            <arg type="s" name="type" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="SetName">
+            <arg type="s" name="name" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="SetFlags">
+            <arg type="t" name="flags" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="Resize">
+            <arg type="t" name="size" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="Delete">
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <property type="u" name="Number" access="read" />
+        <property type="s" name="Type" access="read" />
+        <property type="t" name="Flags" access="read" />
+        <property type="t" name="Offset" access="read" />
+        <property type="t" name="Size" access="read" />
+        <property type="s" name="Name" access="read" />
+        <property type="s" name="UUID" access="read" />
+        <property type="o" name="Table" access="read" />
+        <property type="b" name="IsContainer" access="read" />
+        <property type="b" name="IsContained" access="read" />
+    </interface>
+    <interface name="org.freedesktop.UDisks2.Block">
+        <method name="AddConfigurationItem">
+            <arg type="(sa{sv})" name="item" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="RemoveConfigurationItem">
+            <arg type="(sa{sv})" name="item" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="UpdateConfigurationItem">
+            <arg type="(sa{sv})" name="old_item" direction="in" />
+            <arg type="(sa{sv})" name="new_item" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="GetSecretConfiguration">
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="a(sa{sv})" name="configuration" direction="out" />
+        </method>
+        <method name="Format">
+            <arg type="s" name="type" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <method name="OpenForBackup">
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="h" name="fd" direction="out" />
+        </method>
+        <method name="OpenForRestore">
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="h" name="fd" direction="out" />
+        </method>
+        <method name="OpenForBenchmark">
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="h" name="fd" direction="out" />
+        </method>
+        <method name="OpenDevice">
+            <arg type="s" name="mode" direction="in" />
+            <arg type="a{sv}" name="options" direction="in" />
+            <arg type="h" name="fd" direction="out" />
+        </method>
+        <method name="Rescan">
+            <arg type="a{sv}" name="options" direction="in" />
+        </method>
+        <property type="ay" name="Device" access="read" />
+        <property type="ay" name="PreferredDevice" access="read" />
+        <property type="aay" name="Symlinks" access="read" />
+        <property type="t" name="DeviceNumber" access="read" />
+        <property type="s" name="Id" access="read" />
+        <property type="t" name="Size" access="read" />
+        <property type="b" name="ReadOnly" access="read" />
+        <property type="o" name="Drive" access="read" />
+        <property type="o" name="MDRaid" access="read" />
+        <property type="o" name="MDRaidMember" access="read" />
+        <property type="s" name="IdUsage" access="read" />
+        <property type="s" name="IdType" access="read" />
+        <property type="s" name="IdVersion" access="read" />
+        <property type="s" name="IdLabel" access="read" />
+        <property type="s" name="IdUUID" access="read" />
+        <property type="a(sa{sv})" name="Configuration" access="read" />
+        <property type="o" name="CryptoBackingDevice" access="read" />
+        <property type="b" name="HintPartitionable" access="read" />
+        <property type="b" name="HintSystem" access="read" />
+        <property type="b" name="HintIgnore" access="read" />
+        <property type="b" name="HintAuto" access="read" />
+        <property type="s" name="HintName" access="read" />
+        <property type="s" name="HintIconName" access="read" />
+        <property type="s" name="HintSymbolicIconName" access="read" />
+        <property type="as" name="UserspaceMountOptions" access="read" />
+    </interface>
+</node>
\ No newline at end of file
diff --git a/thonny/editor_helpers.py b/thonny/editor_helpers.py
index c2015b5..5e159be 100644
--- a/thonny/editor_helpers.py
+++ b/thonny/editor_helpers.py
@@ -279,7 +279,6 @@ class DocuBoxBase(EditorInfoBox):
             self._append_chars(sig.return_type, ["annotation"])
 
     def render_parameter(self, param: SignatureParameter, active: bool) -> None:
-
         if active:
             base_tags = ["active"]
         else:
diff --git a/thonny/editors.py b/thonny/editors.py
index 205d552..a2266ee 100644
--- a/thonny/editors.py
+++ b/thonny/editors.py
@@ -14,9 +14,12 @@ 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 BinaryFileException, CodeView, CodeViewText
 from thonny.common import (
+    REMOTE_PATH_MARKER,
     InlineCommand,
     TextRange,
     ToplevelResponse,
+    is_local_path,
+    is_remote_path,
     is_same_path,
     normpath_with_actual_case,
     universal_dirname,
@@ -35,7 +38,6 @@ from thonny.ui_utils import (
 PYTHON_FILES_STR = tr("Python files")
 _dialog_filetypes = [(PYTHON_FILES_STR, ".py .pyw .pyi"), (tr("all files"), ".*")]
 
-REMOTE_PATH_MARKER = " :: "
 PYTHON_EXTENSIONS = {"py", "pyw", "pyi"}
 PYTHONLIKE_EXTENSIONS = set()
 
@@ -46,7 +48,6 @@ class EditorCodeViewText(CodeViewText):
     """Allows separate class binding for CodeViewTexts which are inside editors"""
 
     def __init__(self, master=None, cnf={}, **kw):
-
         super().__init__(
             master=master,
             cnf=cnf,
@@ -184,7 +185,6 @@ class Editor(ttk.Frame):
             self._last_known_mtime = os.path.getmtime(self._filename)
 
     def get_long_description(self):
-
         if self._filename is None:
             result = tr("<untitled>")
         else:
@@ -210,15 +210,17 @@ class Editor(ttk.Frame):
                     return False
         except BinaryFileException:
             messagebox.showerror(
-                "Problem", "%s doesn't look like a text file" % filename, master=self
+                tr("Problem"), tr("%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.",
+                tr("Problem loading file"),
+                tr(
+                    "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
@@ -290,10 +292,12 @@ class Editor(ttk.Frame):
 
             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!",
+                    tr("File is open"),
+                    tr(
+                        "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
@@ -342,7 +346,9 @@ class Editor(ttk.Frame):
             )
         except PermissionError:
             messagebox.showerror(
-                "Permission Error", "Looks like this file or folder is not writable.", master=self
+                tr("Permission Error"),
+                tr("Looks like this file or folder is not writable."),
+                master=self,
             )
             return False
 
@@ -405,12 +411,12 @@ class Editor(ttk.Frame):
             get_workbench().event_generate("RemoteFilesChanged")
             return True
         else:
-            messagebox.showerror(tr("Could not save"), "Back-end is not ready")
+            messagebox.showerror(tr("Could not save"), tr("Back-end is not ready"))
             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?")
+            node = choose_node_for_file_operations(self.winfo_toplevel(), tr("Where to save to?"))
         if not node:
             return None
 
@@ -479,14 +485,16 @@ class Editor(ttk.Frame):
                 "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
+                    tr("Potential problem"),
+                    tr(
+                        "If you name your script '%s', "
+                        "you won't be able to import the library module named '%s'"
+                    )
+                    % (base, mod_name)
                     + ".\n\n"
-                    + "Do you still want to use this name for your script?",
+                    + tr("Do you still want to use this name for your script?"),
                     master=self,
                 ):
                     return self.ask_new_local_path()
@@ -634,10 +642,10 @@ class EditorNotebook(ui_utils.ClosableNotebook):
         if sys.platform == "darwin":
             # Since Tk 8.6.11, after closing an editor, the previous editor re-appeared with
             # widgets disappeared, at least on Aivar's machine.
-            child = self.get_current_child()
-            if child:
+            for child in self.get_all_editors():
                 assert isinstance(child, Editor)
                 child.get_code_view().grid_main_widgets()
+            self.update_idletasks()
 
     def _init_commands(self):
         # TODO: do these commands have to be in EditorNotebook ??
@@ -896,7 +904,6 @@ class EditorNotebook(ui_utils.ClosableNotebook):
         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
@@ -1043,11 +1050,11 @@ class EditorNotebook(ui_utils.ClosableNotebook):
             editor = self.get_editor(filename, True)
         except PermissionError:
             logger.exception("Loading " + filename)
-            msg = "Got permission error when trying to load\n" + filename
+            msg = tr("Got permission error when trying to load\n%s") % (filename,)
             if running_on_mac_os() and propose_dialog:
-                msg += "\n\nTry opening it with File => Open."
+                msg += "\n\n" + tr("Try opening it with File => Open.")
 
-            messagebox.showerror("Permission error", msg, master=self)
+            messagebox.showerror(tr("Permission error"), msg, master=self)
             return None
 
         if editor is None:
@@ -1211,14 +1218,6 @@ def get_saved_current_script_filename(force=True):
     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)
diff --git a/thonny/first_run.py b/thonny/first_run.py
index b4f2e88..053742a 100644
--- a/thonny/first_run.py
+++ b/thonny/first_run.py
@@ -5,7 +5,7 @@ from tkinter import ttk
 from thonny import is_portable, languages, ui_utils
 
 STD_MODE_TEXT = "Standard"
-RPI_MODE_TEXT = "Raspberry Pi"
+RPI_MODE_TEXT = "Raspberry Pi (simple)"
 
 
 class FirstRunWindow(tk.Tk):
diff --git a/thonny/jedi_utils.py b/thonny/jedi_utils.py
index 3f17f52..77fee9b 100644
--- a/thonny/jedi_utils.py
+++ b/thonny/jedi_utils.py
@@ -1,13 +1,20 @@
 """
 Utils to handle different jedi versions
 """
+import os.path
 from logging import getLogger
 from typing import Dict, List, Optional
 
 import jedi.api.classes
 from jedi.api.classes import BaseSignature, ParamName
 
-from thonny.common import CompletionInfo, NameReference, SignatureInfo, SignatureParameter
+from thonny.common import (
+    CompletionInfo,
+    NameReference,
+    SignatureInfo,
+    SignatureParameter,
+    is_local_path,
+)
 
 logger = getLogger(__name__)
 
@@ -72,6 +79,8 @@ def get_completion_details(full_name: str) -> Optional[CompletionInfo]:
                     prefix_length=completion.get_completion_prefix_length(),
                     signatures=signatures,
                     docstring=completion.docstring(raw=raw_docstring),
+                    module_name=completion.module_name,
+                    module_path=completion.module_path and str(completion.module_path),
                 )
     except Exception:
         logger.exception("Jedi error")
@@ -148,10 +157,17 @@ def get_references(
 
 
 def _create_script(source: str, filename: str, sys_path: List[str]) -> jedi.api.Script:
-    if sys_path:
-        project = jedi.Project(path=sys_path[0], sys_path=sys_path, smart_sys_path=False)
+    # Beside local scripts, this is also used for MicroPython remote scripts and also in MP shell
+    if filename and is_local_path(filename) or filename is None:
+        # local and unnamed files
+        project_path = os.getcwd()
+        smart_sys_path = True
     else:
-        project = None
+        # remote files and shell
+        project_path = None
+        smart_sys_path = False
+
+    project = jedi.Project(path=project_path, sys_path=sys_path, smart_sys_path=smart_sys_path)
 
     return jedi.Script(
         code=source,
@@ -163,10 +179,8 @@ def _create_script(source: str, filename: str, sys_path: List[str]) -> jedi.api.
 def _create_interpreter(
     source: str, namespaces: List[Dict], sys_path: Optional[List[str]]
 ) -> jedi.api.Interpreter:
-    if sys_path:
-        project = jedi.Project(path=sys_path[0], sys_path=sys_path, smart_sys_path=False)
-    else:
-        project = None
+    # not using this method for remote MicroPython, therefore it's OK to use cwd as project path
+    project = jedi.Project(path=os.getcwd(), sys_path=sys_path)
     return jedi.Interpreter(source, namespaces, project=project)
 
 
@@ -177,7 +191,6 @@ def _export_completions(completions: List[jedi.api.classes.Completion]) -> List[
 def _filter_completions(
     completions: List[jedi.api.classes.Completion], sys_path: Optional[List[str]]
 ) -> List[jedi.api.classes.Completion]:
-
     if sys_path is None:
         return completions
 
@@ -193,7 +206,10 @@ def _filter_completions(
 
 def _export_completion(completion: jedi.api.classes.Completion) -> CompletionInfo:
     # 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.
+    # since 0.16 it does.
+    # When older jedi versions were supported, I needed to ensure similar result for all supported
+    # versions.
+    # Also, for MicroPython there are some completions which are not created by jedi.
 
     return CompletionInfo(
         name=completion.name and completion.name.strip("="),
@@ -203,6 +219,8 @@ def _export_completion(completion: jedi.api.classes.Completion) -> CompletionInf
         prefix_length=completion.get_completion_prefix_length(),
         signatures=None,  # must be queried separately
         docstring=None,  # must be queried separately
+        module_name=completion.module_name,
+        module_path=completion.module_path and str(completion.module_path),
     )
 
 
diff --git a/thonny/languages.py b/thonny/languages.py
index ea90feb..662e662 100644
--- a/thonny/languages.py
+++ b/thonny/languages.py
@@ -5,7 +5,7 @@ from logging import getLogger
 logger = getLogger(__name__)
 
 BASE_LANGUAGE_CODE = "en_US"
-BASE_LANGUAGE_NAME = "English"
+BASE_LANGUAGE_NAME = "English (US) [default]"
 
 # https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
 
@@ -13,6 +13,7 @@ LANGUAGES_DICT = {
     "cs_CZ": "Čeština [BETA]",
     "de_DE": "Deutsch",
     "et_EE": "Eesti",
+    "en_GB": "English (UK)",
     BASE_LANGUAGE_CODE: BASE_LANGUAGE_NAME,
     "es_ES": "Español",
     "fr_FR": "Français",
@@ -27,11 +28,12 @@ LANGUAGES_DICT = {
     "pt_BR": "Português (BR)",
     "ro_RO": "Român",
     "ru_RU": "Русский",
-    "sl_SI": "Slovène",
+    "sl_SI": "Slovenščina",
     "sk_SK": "Slovenčina [BETA]",
     "fi_FI": "Suomi [BETA]",
     "sv_SE": "Svenska [BETA]",
     "sq_AL": "Shqip [ALPHA]",
+    "vi_VN": "Tiếng Việt",
     "tr_TR": "Türkçe [BETA]",
     "uk_UA": "Українська",
     "zh_TW": "繁體中文-TW",
diff --git a/thonny/locale/ar_AR/LC_MESSAGES/thonny.mo b/thonny/locale/ar_AR/LC_MESSAGES/thonny.mo
index 2ddee28..6d87df7 100644
Binary files a/thonny/locale/ar_AR/LC_MESSAGES/thonny.mo and b/thonny/locale/ar_AR/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/cs_CZ/LC_MESSAGES/thonny.mo b/thonny/locale/cs_CZ/LC_MESSAGES/thonny.mo
index 5de07ce..2302b61 100644
Binary files a/thonny/locale/cs_CZ/LC_MESSAGES/thonny.mo and b/thonny/locale/cs_CZ/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/de_DE/LC_MESSAGES/thonny.mo b/thonny/locale/de_DE/LC_MESSAGES/thonny.mo
index 6397ac1..6cb518e 100644
Binary files a/thonny/locale/de_DE/LC_MESSAGES/thonny.mo and b/thonny/locale/de_DE/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/de_DE/LC_MESSAGES/thonny.po b/thonny/locale/de_DE/LC_MESSAGES/thonny.po
index 20e25e8..4ca1055 100644
--- a/thonny/locale/de_DE/LC_MESSAGES/thonny.po
+++ b/thonny/locale/de_DE/LC_MESSAGES/thonny.po
@@ -7,64 +7,64 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: de\n"
 
-#: thonny/workbench.py:369
+#: thonny/workbench.py:375
 msgid "File"
 msgstr "Datei"
 
-#: thonny/workbench.py:370
+#: thonny/workbench.py:376
 msgid "Edit"
 msgstr "Bearbeiten"
 
-#: thonny/workbench.py:371
+#: thonny/workbench.py:377
 msgid "View"
 msgstr "Ansicht"
 
-#: thonny/running.py:116 thonny/workbench.py:372
+#: thonny/running.py:161 thonny/workbench.py:378
 msgid "Run"
 msgstr "Ausführen"
 
-#: thonny/workbench.py:373
+#: thonny/workbench.py:379
 msgid "Tools"
-msgstr "Extras"
+msgstr "Werkzeuge"
 
-#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:374
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
 msgid "Help"
 msgstr "Hilfe"
 
-#: thonny/workbench.py:591
+#: thonny/workbench.py:598
 msgid "Exit"
 msgstr "Beenden"
 
-#: thonny/workbench.py:618
+#: thonny/workbench.py:625
 msgid "Decrease font size"
 msgstr "Schrift verkleinern"
 
 #. Cursor in Editor workspace -> DE: Cursor in Editorfenster aktivieren
-#: thonny/workbench.py:630
+#: thonny/workbench.py:637
 msgid "Focus editor"
-msgstr "Editor aktivieren"
+msgstr "Den Cursor im Editor aktivieren"
 
-#: thonny/workbench.py:639
+#: thonny/workbench.py:646
 msgid "Focus shell"
-msgstr "Terminal aktivieren"
+msgstr "Den Cursor der Shell aktivieren"
 
-#: thonny/workbench.py:650
+#: thonny/workbench.py:656
 msgid "Maximize view"
 msgstr "Ansicht maximieren"
 
-#: thonny/workbench.py:662
+#: thonny/workbench.py:668
 msgid "Full screen"
 msgstr "Vollbild"
 
-#: thonny/workbench.py:1465
+#: thonny/workbench.py:1467
 msgid "Program arguments"
 msgstr "Programm-Argumente"
 
-#: thonny/plugins/about.py:24 thonny/plugins/about.py:151
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
 msgid "About Thonny"
 msgstr "Über Thonny"
 
-#: thonny/plugins/about.py:77
+#: thonny/plugins/about.py:81
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -78,7 +78,7 @@ msgstr "Hergestellt an der\n"
 "Raspberry Pi Foundation\n"
 "und Cybernetica AS"
 
-#: thonny/plugins/about.py:97
+#: thonny/plugins/about.py:101
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -87,11 +87,11 @@ msgid "This program comes with\n"
 "for details"
 msgstr "Diese Programm wird ohne Gewährleistung zur Verfügung gestellt. Es ist freie Software, die du unter bestimmte Bedingungen weiterverbreiten kannst, siehe https://opensource.org/licenses/MIT für weitere Information"
 
-#: thonny/plugins/about.py:140
+#: thonny/plugins/about.py:142
 msgid "Version history"
-msgstr "Versionshinweise"
+msgstr "Versionsgeschichte"
 
-#: thonny/plugins/about.py:147
+#: thonny/plugins/about.py:149
 msgid "Report problems"
 msgstr "Probleme melden"
 
@@ -115,15 +115,15 @@ msgstr "MyPy-Überprüfungen durchführen"
 msgid "Disabled checks (one id per line)"
 msgstr "Abgewählte Prüfungen (eine ID per Zeile)"
 
-#: thonny/assistance.py:985 thonny/plugins/assistant_config_page.py:74
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Assistent"
 
-#: thonny/plugins/autocomplete.py:522
+#: thonny/plugins/autocomplete.py:529
 msgid "Auto-complete"
 msgstr "Autovervollständigen"
 
-#: thonny/plugins/backend_config_page.py:337
+#: thonny/plugins/backend_config_page.py:335
 msgid "Interpreter"
 msgstr "Interpreter"
 
@@ -143,15 +143,15 @@ msgstr "Birdseye ist ein Python-Debugger, der separat installiert werden muss.\n
 msgid "Debug current script (birdseye)"
 msgstr "Aktuelles Skript debuggen (birdseye)"
 
-#: thonny/plugins/commenting_indenting.py:172
+#: thonny/plugins/commenting_indenting.py:171
 msgid "Toggle comment"
 msgstr "Kommentar umschalten"
 
-#: thonny/plugins/commenting_indenting.py:182
+#: thonny/plugins/commenting_indenting.py:181
 msgid "Comment out"
 msgstr "Auskommentieren"
 
-#: thonny/plugins/commenting_indenting.py:192
+#: thonny/plugins/commenting_indenting.py:191
 msgid "Uncomment"
 msgstr "Entkommentieren"
 
@@ -163,18 +163,18 @@ msgstr "Rückgängig"
 msgid "Redo"
 msgstr "Wiederherstellen"
 
-#: thonny/base_file_browser.py:724 thonny/plugins/common_editing_commands.py:49
-#: thonny/ui_utils.py:2295
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
 msgid "Cut"
 msgstr "Ausschneiden"
 
-#: thonny/base_file_browser.py:725 thonny/plugins/common_editing_commands.py:61
-#: thonny/ui_utils.py:2296
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
 msgid "Copy"
 msgstr "Kopieren"
 
-#: thonny/base_file_browser.py:727 thonny/base_file_browser.py:733
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2297
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
 msgid "Paste"
 msgstr "Einfügen"
 
@@ -182,15 +182,15 @@ msgstr "Einfügen"
 msgid "Select all"
 msgstr "Alles auswählen"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1401
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
 msgid "Run to cursor"
-msgstr "Bis Cursor ausführen"
+msgstr "Bis zum Cursor ausführen"
 
-#: thonny/plugins/debugger.py:982
+#: thonny/plugins/debugger.py:985
 msgid "Can't close yet"
 msgstr "Schließen noch nicht möglich"
 
-#: thonny/plugins/debugger.py:983
+#: thonny/plugins/debugger.py:986
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr "Verwende den Befehl \"Stopp\", wenn du das Debuggen abbrechen möchtest"
 
@@ -226,7 +226,7 @@ msgstr "Zeilennummern anzeigen"
 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.)"
+"(auf 0 einstellen, um die Randlinie auszuschalten)"
 
 #: thonny/plugins/editor_config_page.py:104
 msgid "Editor"
@@ -244,7 +244,7 @@ msgstr "Ereignisse"
 msgid "Files"
 msgstr "Dateien"
 
-#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:437
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
 msgid "Find & Replace"
 msgstr "Suchen & Ersetzen"
 
@@ -252,43 +252,43 @@ msgstr "Suchen & Ersetzen"
 msgid "Find:"
 msgstr "Suchen:"
 
-#: thonny/plugins/find_replace.py:87
+#: thonny/plugins/find_replace.py:90
 msgid "Replace with:"
 msgstr "Ersetzen durch:"
 
-#: thonny/plugins/find_replace.py:105
+#: thonny/plugins/find_replace.py:108
 msgid "Case sensitive"
 msgstr "Groß-/Kleinschreibung beachten"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:115
 msgid "Up"
 msgstr "Oben"
 
-#: thonny/plugins/find_replace.py:116
+#: thonny/plugins/find_replace.py:119
 msgid "Down"
 msgstr "Unten"
 
-#: thonny/plugins/find_replace.py:125
+#: thonny/plugins/find_replace.py:128
 msgid "Find"
 msgstr "Suchen"
 
-#: thonny/plugins/find_replace.py:135
+#: thonny/plugins/find_replace.py:138
 msgid "Replace"
 msgstr "Ersetzen"
 
-#: thonny/plugins/find_replace.py:143
+#: thonny/plugins/find_replace.py:146
 msgid "Replace+Find"
 msgstr "Ersetzen+Suchen"
 
-#: thonny/plugins/find_replace.py:153
+#: thonny/plugins/find_replace.py:156
 msgid "Replace all"
-msgstr "Alle ersetzen"
+msgstr "Alles ersetzen"
 
-#: thonny/plugins/find_replace.py:253
+#: thonny/plugins/find_replace.py:254
 msgid "Enter string to be replaced."
 msgstr "Gib die zu ersetzende Zeichenkette ein."
 
-#: thonny/plugins/find_replace.py:338
+#: thonny/plugins/find_replace.py:339
 msgid "The specified text was not found!"
 msgstr "Der angegebene Text wurde nicht gefunden!"
 
@@ -322,13 +322,14 @@ msgstr "Heap"
 msgid "Language"
 msgstr "Sprache"
 
+#. Question for consistence:  Is there consent how to translate "you" in this project? The more formal "Sie", or the "Du".  It depends on personal custom, yet for me "Sie" leans more to the professional side.
 #: 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"
+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"
@@ -346,24 +347,24 @@ msgstr "Vorheriges Objekt"
 msgid "Next object"
 msgstr "Nächstes Objekt"
 
-#: thonny/plugins/object_inspector.py:733
+#: thonny/plugins/object_inspector.py:732
 msgid "Object inspector"
 msgstr "Objektinspektor"
 
 #: thonny/plugins/outline.py:148
 msgid "Outline"
-msgstr "Umriss"
+msgstr "Gliederung"
 
 #: thonny/plugins/pgzero_frontend.py:27
 msgid "Pygame Zero mode"
 msgstr "Pygame Zero-Modus"
 
-#: thonny/plugins/pip_gui.py:79
+#: thonny/plugins/pip_gui.py:80
 msgid "Uninstall"
 msgstr "Deinstallieren"
 
-#: thonny/editors.py:685 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
-#: thonny/ui_utils.py:1872 thonny/workdlg.py:162
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
 msgid "Close"
 msgstr "Schließen"
 
@@ -375,133 +376,134 @@ msgstr "Klick "
 msgid "here"
 msgstr "hier"
 
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:77
 msgid "Upgrade"
 msgstr "Aktualisieren"
 
-#: thonny/plugins/esp/__init__.py:349
-#: thonny/plugins/micropython/uf2dialog.py:410 thonny/plugins/pip_gui.py:73
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
 msgid "Install"
 msgstr "Installieren"
 
-#: thonny/plugins/pip_gui.py:535
+#: thonny/plugins/pip_gui.py:570
 msgid "Could not find the package from PyPI."
-msgstr "Das Paket konnte nicht in PyPI gefunden werden."
+msgstr "Das Paket konnte nicht im PyPI gefunden werden."
 
-#: thonny/plugins/pip_gui.py:557
+#: thonny/plugins/pip_gui.py:592
 msgid "Latest stable version"
 msgstr "Neueste stabile Version"
 
-#: thonny/plugins/pip_gui.py:559
+#: thonny/plugins/pip_gui.py:594
 msgid "Latest version"
 msgstr "Neueste Version"
 
-#: thonny/plugins/pip_gui.py:561
+#: thonny/plugins/pip_gui.py:596
 msgid "Summary"
 msgstr "Zusammenfassung"
 
-#: thonny/plugins/pip_gui.py:563
+#: thonny/plugins/pip_gui.py:598
 msgid "Author"
 msgstr "Autor"
 
-#: thonny/plugins/pip_gui.py:565
+#: thonny/plugins/pip_gui.py:602
 msgid "Homepage"
 msgstr "Homepage"
 
-#: thonny/plugins/pip_gui.py:567
+#: thonny/plugins/pip_gui.py:604
 msgid "Bugtracker"
 msgstr "Bugtracker"
 
-#: thonny/plugins/pip_gui.py:569
+#: thonny/plugins/pip_gui.py:606
 msgid "Documentation"
 msgstr "Dokumentation"
 
-#: thonny/plugins/pip_gui.py:571
+#: thonny/plugins/pip_gui.py:608
 msgid "PyPI page"
-msgstr "PyPi-Seite"
+msgstr "PyPI-Seite"
 
-#: thonny/plugins/pip_gui.py:611
+#: thonny/plugins/pip_gui.py:648
 msgid "Requires"
 msgstr "Benötigt"
 
-#: thonny/plugins/pip_gui.py:743
+#: thonny/plugins/pip_gui.py:802
 msgid "Really uninstall?"
 msgstr "Wirklich deinstallieren?"
 
-#: thonny/plugins/pip_gui.py:748
+#: thonny/plugins/pip_gui.py:807
 msgid "Are you sure you want to uninstall it?"
 msgstr "Bist du sicher, dass du es deinstallieren möchtest?"
 
 #: thonny/plugins/variables.py:22
 msgid "Back to\n"
 "current frame"
-msgstr "Zurück zum aktuellen Frame"
+msgstr "Zurück zum\n"
+"aktuellen Frame"
 
 #: thonny/plugins/variables.py:80 thonny/plugins/variables.py:82
 #: thonny/plugins/variables.py:145
 msgid "Variables"
 msgstr "Variablen"
 
-#: thonny/base_file_browser.py:1572
+#: thonny/base_file_browser.py:1576
 msgid "This computer"
 msgstr "Dieser Computer"
 
-#: thonny/base_file_browser.py:644
+#: thonny/base_file_browser.py:648
 msgid "Refresh"
 msgstr "Aktualisieren"
 
 #. Fokus means cursor active in ...
-#: thonny/base_file_browser.py:653
+#: thonny/base_file_browser.py:657
 msgid "Focus into"
 msgstr "Cursor in"
 
-#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
-#: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
 msgid "Error"
 msgstr "Fehler"
 
-#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
 msgid "You need to select a file!"
 msgstr "Selektiere eine Datei!"
 
-#: thonny/base_file_browser.py:1423
+#: thonny/base_file_browser.py:1427
 msgid "Overwrite?"
 msgstr "Überschreiben?"
 
-#: thonny/base_file_browser.py:1423
+#: thonny/base_file_browser.py:1427
 msgid "Do you want to overwrite '%s' ?"
 msgstr "Wollen Sie '%s' überschreiben?"
 
-#: thonny/editors.py:650 thonny/editors.py:652
+#: thonny/editors.py:658 thonny/editors.py:660
 msgid "New"
 msgstr "Neu"
 
-#: thonny/editors.py:663
+#: thonny/editors.py:671
 msgid "Open..."
 msgstr "Öffnen ..."
 
-#: thonny/editors.py:665
+#: thonny/editors.py:673
 msgid "Load"
 msgstr "Laden"
 
 #. Edited files is better.
-#: thonny/editors.py:674
+#: thonny/editors.py:682
 msgid "Recent files"
 msgstr "Zuletzt verwendet"
 
-#: thonny/editors.py:696 thonny/ui_utils.py:493
+#: thonny/editors.py:704 thonny/ui_utils.py:498
 msgid "Close all"
 msgstr "Alle schließen"
 
-#: thonny/editors.py:706 thonny/editors.py:708
+#: thonny/editors.py:714 thonny/editors.py:716
 msgid "Save"
 msgstr "Speichern"
 
-#: thonny/editors.py:731
+#: thonny/editors.py:739
 msgid "Save as..."
 msgstr "Speichern unter ..."
 
-#: thonny/editors.py:742
+#: thonny/editors.py:750
 msgid "Save copy..."
 msgstr "Kopie speichern ..."
 
@@ -509,60 +511,61 @@ msgstr "Kopie speichern ..."
 msgid "Thonny options"
 msgstr "Thonny Extras"
 
-#: thonny/running.py:115
+#: thonny/running.py:160
 msgid "Run current script"
 msgstr "Aktuelles Skript ausführen"
 
-#: thonny/running.py:146
+#: thonny/running.py:191
 msgid "Run current script in terminal"
 msgstr "Aktuelles Skript in Terminal ausführen"
 
 #. What means "backend" in English? from beginning? From Line start?
-#: thonny/running.py:159
+#: thonny/running.py:204
 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:160
+#: thonny/running.py:205
 msgid "Stop"
 msgstr "Ausführung beenden"
 
-#: thonny/running.py:171
+#: thonny/running.py:216
 msgid "Interrupt execution"
 msgstr "Ausführung abbrechen"
 
-#: thonny/running.py:184
+#: thonny/running.py:229
 msgid "Send EOF / Soft reboot"
 msgstr "EOF senden / Neustart"
 
-#: thonny/running.py:195
+#: thonny/running.py:240
 msgid "Disconnect"
 msgstr "Verbindung unterbrechen"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:269
+#: thonny/plugins/cpython_frontend/cp_front.py:295
 msgid "Python interpreters"
 msgstr "Python-Interpreter"
 
-#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:270
-#: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
 msgid "all files"
 msgstr "Alle Dateien"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:298
+#: thonny/plugins/cpython_frontend/cp_front.py:324
 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_frontend/cp_front.py:305
+#: thonny/plugins/cpython_frontend/cp_front.py:331
 msgid "Bad directory"
 msgstr "Ordner nicht leer"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:306
+#: thonny/plugins/cpython_frontend/cp_front.py:332
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
-msgstr "Ordner ist nicht leer, wähle einen Anderen oder breche ab."
+msgstr "Der ausgewählte Ordner ist nicht leer.\n"
+"Wählen Sie einen anderen oder brechen Sie ab."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:323
+#: thonny/plugins/cpython_frontend/cp_front.py:349
 msgid "Creating virtual environment"
 msgstr "Virtuelle Umgebung erzeugen"
 
@@ -583,43 +586,43 @@ msgstr "Leeren"
 msgid "Show Plotter"
 msgstr "Drucker anzeigen"
 
-#: thonny/shell.py:1659
+#: thonny/shell.py:1660
 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 "Aus Performancegründen werden sehr lange Zeilen nicht vollständig gezeigt (siehe Extras > Optionen > Kommandozeile).\n"
 "Hier können Sie den originalen Textabschnitt beeinflussen."
 
-#: thonny/shell.py:1670
+#: thonny/shell.py:1671
 msgid "Wrap text (may be slow)"
 msgstr "Text einklappen (kann langsam sein)"
 
-#: thonny/ui_utils.py:1867
+#: thonny/ui_utils.py:1879
 msgid "Copy to clipboard"
 msgstr "Kopie in Zwischenablage"
 
-#: thonny/shell.py:1712
+#: thonny/shell.py:1713
 msgid "Squeezed text (%d characters)"
 msgstr "gekürzter Text (%d Zeichen)"
 
 #. What does this mean?
-#: thonny/shell.py:1882
+#: thonny/shell.py:1883
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr "Drucker visualisiert Anzahl von Nummern im Terminal."
 
-#: thonny/shell.py:1884
+#: thonny/shell.py:1885
 msgid "See Help for details."
-msgstr "Details siehe Hilfe"
+msgstr "Konsultieren Sie die Hilfe für Details."
 
-#: thonny/ui_utils.py:492
+#: thonny/ui_utils.py:497
 msgid "Close others"
 msgstr "Andere schließen"
 
-#: thonny/ui_utils.py:1722
+#: thonny/ui_utils.py:1734
 msgid "Copying"
 msgstr "Kopieren"
 
-#: thonny/ui_utils.py:1725
+#: thonny/ui_utils.py:1737
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -629,140 +632,145 @@ msgstr "Kopiere\n"
 "nach\n"
 "%s"
 
-#: thonny/base_file_browser.py:1378 thonny/config_ui.py:42 thonny/export.py:28
-#: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
-#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1819
-#: thonny/workdlg.py:164 thonny/workdlg.py:209
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: thonny/base_file_browser.py:1369 thonny/config_ui.py:41 thonny/export.py:25
-#: thonny/plugins/about.py:111 thonny/plugins/backend_config_page.py:285
-#: thonny/ui_utils.py:154 thonny/ui_utils.py:1816 thonny/workdlg.py:206
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
 msgid "OK"
 msgstr "OK"
 
-#: thonny/ui_utils.py:2301
+#: thonny/ui_utils.py:2345
 msgid "Select All"
 msgstr "Alles auswählen"
 
 #: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
-#: thonny/workbench.py:162
+#: thonny/workbench.py:164
 msgid "Shell"
 msgstr "Kommandozeile"
 
-#: thonny/workbench.py:601
+#: thonny/workbench.py:608
 msgid "Options..."
 msgstr "Optionen..."
 
-#: thonny/workbench.py:608
+#: thonny/workbench.py:615
 msgid "Increase font size"
 msgstr "Schrift vergrößern"
 
-#: thonny/workbench.py:673
+#: thonny/workbench.py:679
 msgid "Change font size"
 msgstr "Schriftgröße ändern"
 
-#: thonny/workbench.py:674
+#: thonny/workbench.py:680
 msgid "Zoom"
 msgstr "Zoom"
 
-#: thonny/workbench.py:683
+#: thonny/workbench.py:689
 msgid "Exit Thonny"
 msgstr "Thonny schließen"
 
-#: thonny/workbench.py:686
+#: thonny/workbench.py:692
 msgid "Quit"
 msgstr "Beenden"
 
-#: thonny/workbench.py:1244 thonny/workbench.py:1252
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
 msgid "Overwriting theme '%s'"
-msgstr "Theme überschreiben ' %s'"
+msgstr "Theme überschreiben '%s'"
 
-#: thonny/workbench.py:1436
+#: thonny/workbench.py:1438
 msgid "Program arguments:"
-msgstr "Programm-Argumente:"
+msgstr "Programmargumente:"
 
-#: thonny/workbench.py:1490
+#: thonny/workbench.py:1492
 msgid "Regular mode"
 msgstr "Standard-Modus"
 
-#: thonny/workbench.py:1491
+#: thonny/workbench.py:1493
 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-Modus zu arbeiten.\n"
-"(siehe \"Extras > Optionen > Allgemeines\" wenn Sie sich anders entscheiden"
+msgstr "Die Konfiguration wurde aktualisiert. Starten Sie Thonny starten erneut, um im Standard-Modus zu arbeiten.\n"
+"\n"
+"(siehe 'Extras → Optionen → Allgemeines' wenn Sie sich anders entscheiden.)"
 
-#: thonny/plugins/ast_view.py:212
+#: thonny/plugins/ast_view.py:211
 msgid "Program tree"
 msgstr "Programmbaum"
 
-#: thonny/plugins/debugger.py:1283
+#: thonny/plugins/debugger.py:1284
 msgid "Resume"
 msgstr "Fortfahren"
 
-#: thonny/plugins/debugger.py:1299
+#: thonny/plugins/debugger.py:1300
 msgid "Run / resume"
 msgstr "Ausführen / fortfahren"
 
-#: thonny/plugins/debugger.py:1314
+#: thonny/plugins/debugger.py:1315
 msgid "Debug current script"
 msgstr "Aktuelles Skript debuggen"
 
 #. = Fehlersuche , but I think Debug is very common in Germany
-#: thonny/plugins/debugger.py:1316
+#: thonny/plugins/debugger.py:1317
 msgid "Debug"
 msgstr "Debuggen"
 
 #. nice means better (besser) or only cosmetic (schöner)?
-#: thonny/plugins/debugger.py:1327
+#: thonny/plugins/debugger.py:1328
 msgid "Debug current script (nicer)"
-msgstr "Aktuelles Skript debuggen (besser)\n"
-""
+msgstr "Aktuelles Skript debuggen (besser)"
 
-#: thonny/plugins/debugger.py:1339
+#: thonny/plugins/debugger.py:1340
 msgid "Debug current script (faster)"
 msgstr "Aktuelles Skript debuggen (schneller)"
 
-#: thonny/plugins/debugger.py:1350
+#: thonny/plugins/debugger.py:1351
 msgid "Step over"
 msgstr "Einzelschritt"
 
-#: thonny/plugins/debugger.py:1352
+#: thonny/plugins/debugger.py:1353
 msgid "Over"
 msgstr "Über"
 
-#: thonny/plugins/debugger.py:1363
+#: thonny/plugins/debugger.py:1364
 msgid "Step into"
 msgstr "Eintreten"
 
-#: thonny/plugins/debugger.py:1365
+#: thonny/plugins/debugger.py:1366
 msgid "Into"
 msgstr "Into"
 
-#: thonny/plugins/debugger.py:1376
+#: thonny/plugins/debugger.py:1377
 msgid "Step out"
 msgstr "Verlassen"
 
-#: thonny/plugins/debugger.py:1378
+#: thonny/plugins/debugger.py:1379
 msgid "Out"
 msgstr "Heraus"
 
-#: thonny/plugins/debugger.py:1413
+#: thonny/plugins/debugger.py:1414
 msgid "Step back"
 msgstr "Zurück schreiten"
 
-#: thonny/plugins/debugger.py:1415
+#: thonny/plugins/debugger.py:1416
 msgid "Back"
 msgstr "Zurück"
 
 #. Stapelspeicher
-#: thonny/plugins/debugger.py:1421
+#: thonny/plugins/debugger.py:1422
 msgid "Stack"
 msgstr "Stack"
 
-#: thonny/plugins/debugger.py:1422
+#. I (-> German) think "Exceptions" (in english) and "Ausnahmen" (in German) should be plural.
+#. 
+#. Alternatively one could use "Ausnahmebehandlung" (= "exception handling") in German (singular, more precise, but considerably longer).
+#. 
+#. What do you think?
+#: thonny/plugins/debugger.py:1423
 msgid "Exception"
 msgstr "Ausnahme"
 
@@ -784,7 +792,7 @@ msgstr "UI-Skalierungsfaktor"
 
 #: thonny/plugins/general_config_page.py:114
 msgid "NB! Restart Thonny after changing these options!"
-msgstr "Notiz: Thonny nach Änderung dieser Optionen neu starten!"
+msgstr "Hinweis: Thonny nach Änderung dieser Optionen neu starten!"
 
 #: thonny/plugins/general_config_page.py:148
 msgid "General"
@@ -802,7 +810,7 @@ msgstr "Pakete durchsuchen"
 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 ...\" "
+"Zum Installieren, Aktualisieren oder Deinstallieren nutzen Sie \"Extras → Systemterminal öffnen ...\""
 
 #: thonny/plugins/pip_gui.py:378
 msgid "Packages' directory"
@@ -810,12 +818,11 @@ msgstr "Ordner für Pakete"
 
 #: thonny/plugins/pip_gui.py:382
 msgid "Install from PyPI"
-msgstr "Installiere von PyPI"
+msgstr "Installiere vom PyPI"
 
 #: thonny/plugins/pip_gui.py:385
 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"
-"."
+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."
 
 #: thonny/plugins/pip_gui.py:402
 msgid "to locate requirements.txt file and install the packages specified in it."
@@ -827,79 +834,67 @@ msgstr "Klick"
 
 #: thonny/plugins/pip_gui.py:413
 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)"
+msgstr "Finde und installiere die Paketdatei (üblicherweise mit der Endung .whl, .tar.gz oder .zip)."
 
 #: thonny/plugins/pip_gui.py:420
 msgid "Upgrade or uninstall"
-msgstr "Upgrade oder Deinstallation"
+msgstr "Aktualisierung oder Deinstallation"
 
 #: thonny/plugins/pip_gui.py:422
 msgid "Start by selecting the package from the left."
-msgstr "Beginne links die Pakete auszuwählen"
-
-#: thonny/plugins/pip_gui.py:410
-msgid "Target:"
-msgstr "Ziel"
-
-#: thonny/plugins/pip_gui.py:414
-msgid "virtual environment"
-msgstr "Virtuelle Umgebung"
-
-#: thonny/plugins/pip_gui.py:412
-msgid "user site packages"
-msgstr "Benutzerspezifische Pakete"
+msgstr "Beginne mit der Auswahl mit dem Paket links."
 
 #: thonny/plugins/pip_gui.py:430
 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"
+msgstr "Dieser Dialog führt alle verfügbaren Pakete auf, erlaubt die Aktualisierung oder Deinstallation von Paketen aber nur von"
 
 #: thonny/plugins/pip_gui.py:440
 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:485
+#: thonny/plugins/pip_gui.py:493
 msgid "Installed version:"
-msgstr "Installierte Version"
+msgstr "Installierte Version:"
 
-#: thonny/plugins/pip_gui.py:487
+#: thonny/plugins/pip_gui.py:495
 msgid "Installed to:"
-msgstr "Installiert in"
+msgstr "Installiert in:"
 
-#: thonny/plugins/pip_gui.py:538
+#: thonny/plugins/pip_gui.py:573
 msgid "Please check your spelling!"
 msgstr "Bitte überprüfen Sie Ihre Rechtschreibung!"
 
-#: thonny/plugins/pip_gui.py:542
+#: thonny/plugins/pip_gui.py:577
 msgid "Could not find the package info from PyPI."
-msgstr "Paketinformation von PyPI kann nicht gefunden werden"
+msgstr "Paketinformation kann nicht im PyPI gefunden werden."
 
-#: thonny/plugins/pip_gui.py:544 thonny/plugins/pip_gui.py:1326
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
 msgid "Error code:"
 msgstr "Fehler-Code:"
 
-#: thonny/plugins/pip_gui.py:689
+#: thonny/plugins/pip_gui.py:748
 msgid "Can't find package name from the list:"
 msgstr "Paketname kann in der Liste nicht gefunden werden:"
 
-#: thonny/plugins/pip_gui.py:744
+#: thonny/plugins/pip_gui.py:803
 msgid "Package '{}' is required for installing and uninstalling other packages."
-msgstr "Zur Installation und Deinstallation ist Paket '{}' notwendig. "
+msgstr "Das Paket '{}' wird für die Installation und Deinstallation weiterer Pakete benötigt."
 
-#: thonny/plugins/pip_gui.py:789
+#: thonny/plugins/pip_gui.py:848
 msgid "Package"
 msgstr "Paket"
 
-#: thonny/plugins/pip_gui.py:902
+#: thonny/plugins/pip_gui.py:960
 msgid "Manage packages for %s"
 msgstr "Verwalte Pakete für %s"
 
-#: thonny/editors.py:579 thonny/plugins/micropython/pip_gui.py:23
-#: thonny/plugins/pip_gui.py:953
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
 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:954
+#: thonny/plugins/pip_gui.py:1035
 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"
@@ -907,119 +902,120 @@ msgid "Looks like you are installing a Thonny-related package.\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"
+"'Extras → Verwalte Plug-ins...'\n"
 "\n"
 "Sind Sie sicher, dass Sie %s als Backend installieren wollen?"
 
-#: thonny/plugins/pip_gui.py:1059
+#: thonny/plugins/pip_gui.py:1141
 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: Möglicherweise ist eine andere kompatible Version für Ihre Thonny-Version verfügbar. Klicken Sie den '...'-Button um die zu installierende Version auszuwählen."
 
-#: thonny/plugins/pip_gui.py:1067
+#: thonny/plugins/pip_gui.py:1149
 msgid "Thonny plugin without requirements"
 msgstr "Thonny-Plugin ohne Anforderungen"
 
-#: thonny/plugins/pip_gui.py:1083
+#: thonny/plugins/pip_gui.py:1165
 msgid "Unsuitable requirements"
 msgstr "Ungeeignete Anforderungen"
 
-#: thonny/plugins/pip_gui.py:1084
+#: thonny/plugins/pip_gui.py:1166
 msgid "This package requires different Thonny version:"
 msgstr "Dieses Paket erfordert eine andere Version von Thonny:"
 
-#: thonny/plugins/pip_gui.py:1088
+#: thonny/plugins/pip_gui.py:1170
 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. "
+msgstr "Falls Sie das trotzdem möchten, dann benutzen Sie bitte die Kommandozeile."
 
-#: thonny/plugins/pip_gui.py:1125
+#: thonny/plugins/pip_gui.py:1207
 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 Plugins neu starten."
 
 #. or "Zusatzmodule", but I thin Plug-in is more clear.
-#: thonny/plugins/pip_gui.py:1135
+#: thonny/plugins/pip_gui.py:1217
 msgid "Thonny plug-ins"
 msgstr "Thonny-Plugins"
 
-#: thonny/plugins/pip_gui.py:1171
+#: thonny/plugins/pip_gui.py:1253
 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:1180
+#: thonny/plugins/pip_gui.py:1262
 msgid "Desired version"
 msgstr "Gewünschte Version"
 
-#: thonny/plugins/pip_gui.py:1239
+#: thonny/plugins/pip_gui.py:1321
 msgid "Upgrade dependencies"
 msgstr "Abhängigkeiten bei Aktualisierung"
 
-#: thonny/plugins/pip_gui.py:1324
+#: thonny/plugins/pip_gui.py:1406
 msgid "Requires:"
 msgstr "Benötigt:"
 
-#: thonny/plugins/pip_gui.py:1328
+#: thonny/plugins/pip_gui.py:1410
 msgid "Error:"
 msgstr "Fehler:"
 
-#: thonny/plugins/pip_gui.py:1541
+#: thonny/plugins/pip_gui.py:1601
 msgid "Manage packages..."
 msgstr "Verwalte Pakete ..."
 
-#: thonny/plugins/pip_gui.py:1547
+#: thonny/plugins/pip_gui.py:1607
 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
+#: thonny/plugins/replayer.py:364
 msgid "Open replayer..."
-msgstr "Logdatei schreiben"
+msgstr "Logdatei schreiben..."
 
-#: thonny/plugins/run_debug_config_page.py:14
+#: thonny/plugins/run_debug_config_page.py:21
 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
+#: thonny/plugins/run_debug_config_page.py:35
 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
+#: thonny/plugins/run_debug_config_page.py:36
 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
+#: thonny/plugins/run_debug_config_page.py:42
 msgid "Open and close Stack view automatically"
 msgstr "Stack View automatisch öffnen und schließen"
 
-#: thonny/plugins/run_debug_config_page.py:30
+#: thonny/plugins/run_debug_config_page.py:43
 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
+#. In German, "d.h." has to periods.  The English (well, Latin "i.e." frequently read as "that is") currently misses a period here.
+#: thonny/plugins/run_debug_config_page.py:52
 msgid "Allow stepping into libraries (ie. outside of main script directory)"
-msgstr "Wechseln in Bibliotheken erlauben (dh außerhalb des Hauptskriptverzeichnisses)"
+msgstr "Wechseln in Bibliotheken erlauben (d.h. außerhalb des Hauptskriptverzeichnisses)"
 
-#: thonny/plugins/run_debug_config_page.py:40
+#: thonny/plugins/run_debug_config_page.py:53
 msgid "May make debugging slower."
 msgstr "Kann das Debuggen verzögern."
 
-#: thonny/plugins/run_debug_config_page.py:45
+#: thonny/plugins/run_debug_config_page.py:58
 msgid "Preferred debugger"
 msgstr "Bevorzugter Debugger"
 
-#: thonny/plugins/run_debug_config_page.py:57
+#: thonny/plugins/run_debug_config_page.py:70
 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
+#: thonny/plugins/run_debug_config_page.py:75
 msgid "Birdseye port"
 msgstr "Birdseye port"
 
-#: thonny/plugins/run_debug_config_page.py:66
+#: thonny/plugins/run_debug_config_page.py:79
 msgid "(restart Thonny after changing this)"
 msgstr "(Nach dieser Änderung Thonny neu starten)"
 
-#: thonny/plugins/run_debug_config_page.py:74
+#: thonny/plugins/run_debug_config_page.py:87
 msgid "Run & Debug"
 msgstr "Ausführen & Debuggen"
 
@@ -1050,12 +1046,13 @@ 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."
+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."
+msgstr "Nach Programmende Terminal geöffnet lassen"
 
+#. @Aivar A search in the English GUI of Thonny 4.0.1 (including Tools -> Options, and Tools -> Manage Plug-ins) was not successful to retrieve this string.  May you provide a hint, please?
 #: 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)"
@@ -1065,52 +1062,52 @@ msgstr "Hinweis: Das automatische Schließen muss in den Einstellungen des Termi
 msgid "Terminal"
 msgstr "Terminal"
 
-#: thonny/plugins/theme_and_font_config_page.py:40
+#: thonny/plugins/theme_and_font_config_page.py:39
 msgid "UI theme"
 msgstr "UI Theme"
 
-#: thonny/plugins/theme_and_font_config_page.py:53
+#: thonny/plugins/theme_and_font_config_page.py:52
 msgid "Syntax theme"
 msgstr "Syntax Theme"
 
-#: thonny/plugins/theme_and_font_config_page.py:85
+#: thonny/plugins/theme_and_font_config_page.py:84
 msgid "Editor font"
-msgstr "Schriftart Editor "
+msgstr "Schriftart im Editor"
 
-#: thonny/plugins/theme_and_font_config_page.py:108
+#: thonny/plugins/theme_and_font_config_page.py:107
 msgid "IO font"
-msgstr "Schriftart Terminal"
+msgstr "Schriftart im Terminal"
 
-#: thonny/plugins/theme_and_font_config_page.py:133
+#: thonny/plugins/theme_and_font_config_page.py:132
 msgid "Preview"
 msgstr "Vorschau"
 
-#: thonny/plugins/theme_and_font_config_page.py:151
+#: thonny/plugins/theme_and_font_config_page.py:150
 msgid "This is a comment"
-msgstr "Dies ist ein Kommentar"
+msgstr "Das ist ein Kommentar"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:153
 msgid "The answer is"
 msgstr "Die Antwort ist"
 
-#: thonny/plugins/theme_and_font_config_page.py:158
+#: thonny/plugins/theme_and_font_config_page.py:157
 msgid "unclosed_string"
 msgstr "offene_Zeichenfolge"
 
 #. Do you realy mean Blah Blah ??? :-)
-#: thonny/plugins/theme_and_font_config_page.py:160
+#: thonny/plugins/theme_and_font_config_page.py:159
 msgid "blah, blah"
 msgstr "bla, bla"
 
-#: thonny/plugins/theme_and_font_config_page.py:184
+#: thonny/plugins/theme_and_font_config_page.py:183
 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:223
+#: thonny/plugins/theme_and_font_config_page.py:222
 msgid "Enter an integer"
 msgstr "Ganzzahl eingeben"
 
-#: thonny/plugins/theme_and_font_config_page.py:236
+#: thonny/plugins/theme_and_font_config_page.py:235
 msgid "Theme & Font"
 msgstr "Theme & Schriftart"
 
@@ -1138,27 +1135,27 @@ msgstr "CircuitPython device"
 msgid "MicroPython device"
 msgstr "MicroPython device"
 
-#: thonny/plugins/micropython/mp_front.py:547
+#: thonny/plugins/micropython/mp_front.py:558
 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/mp_front.py:550
+#: thonny/plugins/micropython/mp_front.py:561
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "Suchen Sie nach Ihrer Geräteschnittstelle \"USB Serial\" oder \"UART\""
 
-#: thonny/plugins/micropython/mp_front.py:552
+#: thonny/plugins/micropython/mp_front.py:563
 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."
+msgstr "Falls Sie es nicht finden, müssen Sie möglicherweise erst den richtigen USB-Treiber installieren."
 
-#: thonny/plugins/micropython/mp_front.py:444
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port"
 msgstr "Port"
 
-#: thonny/plugins/micropython/mp_front.py:454
+#: thonny/plugins/micropython/mp_front.py:458
 msgid "Try to detect port automatically"
 msgstr "Versuche den Port automatisch zu erkennen"
 
-#: thonny/plugins/micropython/__init__.py:25
+#: thonny/plugins/micropython/__init__.py:24
 msgid "MicroPython (generic)"
 msgstr "MicroPython (generic)"
 
@@ -1170,20 +1167,20 @@ msgstr "Drucken ..."
 msgid "Open system shell..."
 msgstr "System Terminal öffnen ..."
 
-#: thonny/plugins/backend_config_page.py:110
+#: thonny/plugins/backend_config_page.py:109
 msgid "Details"
 msgstr "Details"
 
 #. (requirements.txt)
 #: thonny/plugins/pip_gui.py:395
 msgid "Install from requirements file"
-msgstr "Installieren mit requirements.txt Datei"
+msgstr "Installieren mit requirements Datei"
 
 #: thonny/plugins/pip_gui.py:407
 msgid "Install from local file"
 msgstr "Installieren mit lokalen Dateien"
 
-#: thonny/plugins/pip_gui.py:1118
+#: thonny/plugins/pip_gui.py:1200
 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"
@@ -1194,16 +1191,16 @@ msgstr "In diesem Fenster werden Thonny Plug-ins und Ihre Korrespondierenden Pak
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (generic)"
 
-#: thonny/plugins/commenting_indenting.py:143
+#: thonny/plugins/commenting_indenting.py:142
 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
+#: thonny/plugins/commenting_indenting.py:152
 msgid "Dedent selected lines"
-msgstr "Dedent selektierte Zeilen (entf. Leerzeichen am Zeilenanfang)"
+msgstr "Entferne in den ausgewählten Zeilen führende Leerzeichen"
 
-#: thonny/workbench.py:1479
+#: thonny/workbench.py:1481
 msgid "Switch to\n"
 "regular\n"
 "mode"
@@ -1211,88 +1208,84 @@ msgstr "Wechsle zu\n"
 "Standard\n"
 "Mode"
 
-#: thonny/plugins/microbit/__init__.py:58
+#: thonny/plugins/microbit/__init__.py:62
 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:60
+#: thonny/plugins/microbit/__init__.py:64
 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:44
-msgid "please wait"
-msgstr "bitte warten"
-
-#: thonny/misc_utils.py:151
+#: thonny/misc_utils.py:177
 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?"
+msgstr "Konnte Laufwerk '%s'  nicht finden. Möchten Sie das Laufwerk selbst suchen?"
 
-#: thonny/misc_utils.py:154
+#: thonny/misc_utils.py:180
 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?"
+msgstr "Es wurden mehrere '%s' Laufwerke gefunden. Möchten Sie selbst eines auswählen?"
 
-#: thonny/misc_utils.py:170
+#: thonny/misc_utils.py:196
 msgid "Can't find suitable disk"
 msgstr "Geeignetes Laufwerk kann nicht gefunden werden"
 
-#: thonny/base_file_browser.py:290
+#: thonny/base_file_browser.py:294
 msgid "%d items"
 msgstr "%d Elemente"
 
 #. same as recycle bin ?
-#: thonny/base_file_browser.py:739
+#: thonny/base_file_browser.py:743
 msgid "Move to Trash"
 msgstr "In den Papierkorb verschieben"
 
-#: thonny/base_file_browser.py:742
+#: thonny/base_file_browser.py:746
 msgid "Delete"
 msgstr "Löschen"
 
-#: thonny/base_file_browser.py:721 thonny/base_file_browser.py:874
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
 msgid "New directory"
 msgstr "Neuer Ordner"
 
-#: thonny/base_file_browser.py:745
+#: thonny/base_file_browser.py:749
 msgid "Properties"
 msgstr "Eigenschaften"
 
-#: thonny/base_file_browser.py:747
+#: thonny/base_file_browser.py:751
 msgid "Storage space"
 msgstr "Speicherplatz"
 
-#: thonny/base_file_browser.py:757
+#: thonny/base_file_browser.py:761
 msgid "Path"
 msgstr "Pfad"
 
-#: thonny/base_file_browser.py:759
+#: thonny/base_file_browser.py:763
 msgid "Directory properties"
-msgstr "Ordner Eigenschaften"
+msgstr "Eigenschaften des Ordners"
 
-#: thonny/base_file_browser.py:761
+#: thonny/base_file_browser.py:765
 msgid "File properties"
-msgstr "Datei Eigenschaften"
+msgstr "Eigenschaften der Datei"
 
-#: thonny/base_file_browser.py:763
+#: thonny/base_file_browser.py:767
 msgid "bytes"
 msgstr "Bytes"
 
-#: thonny/base_file_browser.py:766
+#: thonny/base_file_browser.py:770
 msgid "Size"
 msgstr "Größe"
 
-#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:777
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
 msgid "Modified"
 msgstr "Geändert"
 
-#: thonny/base_file_browser.py:838
+#: thonny/base_file_browser.py:842
 msgid "Deleting %s"
 msgstr "%s löschen"
 
-#: thonny/editors.py:260
+#: thonny/editors.py:262
 msgid "Loading"
 msgstr "wird geladen"
 
-#: thonny/editors.py:389
+#: thonny/editors.py:395
 msgid "Saving"
 msgstr "speichern läuft"
 
@@ -1302,145 +1295,146 @@ msgstr "Upload nach %s"
 
 #: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
-msgstr "Downloading %s nach %s"
+msgstr "Download von %s nach %s"
 
 #: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr "Download nach %s"
 
-#: thonny/base_file_browser.py:646
+#: thonny/base_file_browser.py:650
 msgid "Open in system file manager"
 msgstr "Im Systemdateimanager öffnen"
 
-#: thonny/base_file_browser.py:674
+#: thonny/base_file_browser.py:678
 msgid "Hide hidden files"
-msgstr "Versteckte Dateien ausblenden"
+msgstr "Verborgene Dateien ausblenden"
 
-#: thonny/base_file_browser.py:674
+#: thonny/base_file_browser.py:678
 msgid "Show hidden files"
-msgstr "Versteckte Dateien anzeigen"
+msgstr "Verborgene Dateien anzeigen"
 
-#: thonny/base_file_browser.py:657
+#: thonny/base_file_browser.py:661
 msgid "Open in Thonny"
 msgstr "Öffnen in Thonny"
 
-#: thonny/base_file_browser.py:688
+#: thonny/base_file_browser.py:692
 msgid "Open in system default app"
 msgstr "Öffnen in der Systemstandard-App"
 
-#: thonny/base_file_browser.py:669 thonny/base_file_browser.py:696
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
 msgid "Configure %s files"
 msgstr "Konfiguriere %s Dateien"
 
-#: thonny/base_file_browser.py:697
+#. The suggested revision now reads more like «what action is associated with a double click in Thonny's file browser?»
+#: thonny/base_file_browser.py:701
 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?"
+msgstr "Wie soll mit einer %s Datei umgegangen werden, wenn Sie in Thonnys Dateibrowser darauf doppelklicken?"
 
-#: thonny/base_file_browser.py:1254 thonny/editors.py:979 thonny/editors.py:981
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
 msgid "Deleting"
 msgstr "Löschen"
 
-#: thonny/base_file_browser.py:1261
+#: thonny/base_file_browser.py:1265
 msgid "Creating directory"
-msgstr "Erstelle Verzeichnis"
+msgstr "Erstelle ein Verzeichnis"
 
-#: thonny/editors.py:258
+#: thonny/editors.py:260
 msgid "Loading %s"
 msgstr "Lade %s"
 
-#: thonny/editors.py:384
+#: thonny/editors.py:390
 msgid "Saving to %s"
 msgstr "Speichern nach %s"
 
-#: thonny/editors.py:720 thonny/editors.py:722
+#: thonny/editors.py:728 thonny/editors.py:730
 msgid "Save All files"
-msgstr "Speicher Alle Dateien"
+msgstr "Speicher alle Dateien"
 
-#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:877
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
 msgid "Configure interpreter..."
-msgstr "Den Interpreter konfigurieren ..."
+msgstr "Konfiguriere den Interpreter ..."
 
-#: thonny/workbench.py:1589
+#: thonny/workbench.py:1591
 msgid "Device"
 msgstr "Gerät"
 
-#: thonny/workdlg.py:193
+#: thonny/workdlg.py:234
 msgid "Cancelling"
 msgstr "Abbrechen"
 
-#: thonny/workdlg.py:220
+#: thonny/workdlg.py:270
 msgid "Starting"
 msgstr "Beginnen"
 
-#: thonny/plugins/backend_config_page.py:251
+#: thonny/plugins/backend_config_page.py:249
 msgid "Authentication"
 msgstr "Authentifizierung"
 
-#: thonny/plugins/backend_config_page.py:253
+#: thonny/plugins/backend_config_page.py:251
 msgid "Enter the passphrase of your private key for\n"
 "{}"
 msgstr "Geben sie Ihren persönlichen Passwort-Satz für\n"
 "{} ein"
 
-#: thonny/plugins/backend_config_page.py:256
+#: thonny/plugins/backend_config_page.py:254
 msgid "Enter your password for\n"
 "{}"
 msgstr "geben Sie hier Ihr Passwort für\n"
 "{} ein"
 
-#: thonny/plugins/object_inspector.py:487
+#: thonny/plugins/object_inspector.py:486
 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s"
-msgstr "Der gezeigte Wert ist dieser Floatingpoint-Zahl ähnlich. Der genaue gespeicherte Wert ist %s, was ungefähr %s entspricht"
+msgstr "Der angezeigte Wert ist ein Schätzwert dieser Gleitkommazahl. Der genaue gespeicherte Wert ist %s, was ungefähr %s entspricht"
 
-#: thonny/plugins/pip_gui.py:645
+#: thonny/plugins/pip_gui.py:682
 msgid "Search results"
 msgstr "Suchergebnisse"
 
-#: thonny/plugins/pip_gui.py:646
+#: thonny/plugins/pip_gui.py:683
 msgid "Searching"
 msgstr "Suchen"
 
-#: thonny/plugins/pip_gui.py:728 thonny/plugins/pip_gui.py:817
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
 msgid "Installing '%s'"
 msgstr "Installiere '%s'"
 
-#: thonny/plugins/pip_gui.py:734
+#: thonny/plugins/pip_gui.py:793
 msgid "Upgrading '%s'"
-msgstr "Neuere Version von \"%s\""
+msgstr "Aktualisieren von '%s'"
 
-#: thonny/plugins/pip_gui.py:741
+#: thonny/plugins/pip_gui.py:800
 msgid "Uninstalling '%s'"
 msgstr "Deinstalliere '%s'"
 
-#: thonny/plugins/pip_gui.py:755
+#: thonny/plugins/pip_gui.py:814
 msgid "Installing"
 msgstr "Installiere"
 
-#: thonny/plugins/pip_gui.py:1502
+#: thonny/plugins/pip_gui.py:1562
 msgid "Package manager is not available for this interpreter"
 msgstr "für diesen Interpreter ist kein Package-Manager verfügbar"
 
-#: thonny/base_file_browser.py:1205 thonny/plugins/pip_gui.py:1516
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
 msgid "Not supported"
 msgstr "Nicht unterstützt"
 
-#: thonny/plugins/micropython/pip_gui.py:100 thonny/plugins/pip_gui.py:1521
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
 msgid "Not available"
 msgstr "Nicht verfügbar"
 
-#: thonny/plugins/pip_gui.py:1522
+#: thonny/plugins/pip_gui.py:1582
 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:73
 msgid "Open evaluated values in Object inspector"
-msgstr "Sehen Sie  den  Wert des Ausdruckes im Objekt-Inspektor"
+msgstr "Sehen Sie den Wert des Ausdruckes im Objekt-Inspektor"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:209
+#: thonny/plugins/cpython_frontend/cp_front.py:234
 msgid "Python executable"
 msgstr "Ausführbares Python-Programm"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:232
+#: thonny/plugins/cpython_frontend/cp_front.py:258
 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)!"
@@ -1448,90 +1442,53 @@ msgstr "Hinweis: Die Dateiauswahl funktioniert möglicherweise nicht richtig,  w
 
 #: thonny/plugins/cpython_ssh/__init__.py:17
 msgid "Remote Python 3 (SSH)"
-msgstr "Nichtlokales Python 3 über SSH"
+msgstr "Nichtlokales Python 3 (über SSH)"
 
 #: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
 msgstr "Nicht verbunden"
 
-#: thonny/plugins/micropython/mp_front.py:521
-msgid "Advanced options"
-msgstr "Erweiterte Optionen"
-
-#: thonny/plugins/micropython/mp_front.py:547
-msgid "Install or update firmware"
-msgstr "Installieren oder aktualisieren Sie die Firmware"
-
-#: thonny/plugins/micropython/__init__.py:36
+#: thonny/plugins/micropython/__init__.py:35
 msgid "MicroPython (local)"
 msgstr "MicroPython (lokal)"
 
-#: thonny/plugins/micropython/__init__.py:47
+#: thonny/plugins/micropython/__init__.py:46
 msgid "MicroPython (SSH)"
 msgstr "MicroPython(über SSH)"
 
-#: thonny/plugins/micropython/pip_gui.py:77
-msgid "Scope"
-msgstr "Geltungsbereich"
-
-#: thonny/plugins/micropython/pip_gui.py:90
-msgid "This dialog lists top-level modules from following directories:\n"
-""
-msgstr "Dieser Dialog listet die Top-Level Module in den folgenden Verzeichnissen:"
-
-#: thonny/plugins/micropython/pip_gui.py:99
-msgid "New packages will be installed to"
-msgstr "Neue Pakete werden installiert in"
-
-#: thonny/plugins/micropython/pip_gui.py:102
+#: thonny/plugins/micropython/pip_gui.py:144
 msgid "no absolute lib directory in sys.path"
-msgstr "es gibt kein -lib-Verzeichnis im sys-pfad"
-
-#: thonny/plugins/micropython/uf2dialog.py:39
-msgid "Version to be installed"
-msgstr "Zu installierende Version"
-
-#: thonny/plugins/micropython/uf2dialog.py:47
-msgid "Target device location"
-msgstr "Ort im Ziel-Gerät"
+msgstr "es gibt kein lib-Verzeichnis im sys.pfad"
 
-#: thonny/plugins/micropython/uf2dialog.py:58
-msgid "Target device model"
-msgstr "Modell des Ziel-Gerätes"
-
-#: thonny/plugins/micropython/uf2dialog.py:146
-msgid "Please wait"
-msgstr "Bitte warten"
-
-#: thonny/plugins/pip_gui.py:70
+#: thonny/plugins/pip_gui.py:71
 msgid "Search on PyPI"
-msgstr "Suche auf PyPI"
+msgstr "Suche im PyPI"
 
-#: thonny/base_file_browser.py:689
+#: thonny/base_file_browser.py:693
 msgid "Open in Thonny's text editor"
 msgstr "In Thonnys Texteditor öffnen"
 
-#: thonny/base_file_browser.py:342
+#: thonny/base_file_browser.py:346
 msgid "Storage space on this drive or filesystem"
 msgstr "Speicherplatz auf diesem Laufwerk oder Dateisystem"
 
-#: thonny/base_file_browser.py:343
+#: thonny/base_file_browser.py:347
 msgid "total space"
 msgstr "Speicherplatz total"
 
-#: thonny/base_file_browser.py:345
+#: thonny/base_file_browser.py:349
 msgid "used space"
 msgstr "benutzter Speicherplatz"
 
-#: thonny/base_file_browser.py:346
+#: thonny/base_file_browser.py:350
 msgid "free space"
 msgstr "freier Speicherplatz"
 
-#: thonny/base_file_browser.py:353
+#: thonny/base_file_browser.py:357
 msgid "Storage info"
 msgstr "Speicherinformation"
 
-#: thonny/plugins/commenting_indenting.py:163
+#: thonny/plugins/commenting_indenting.py:162
 msgid "Replace tabs with spaces"
 msgstr "Ersetze Tabulatoren durch Leerzeichen"
 
@@ -1543,73 +1500,74 @@ msgstr "Hebe Tabulatorzeichen hervor"
 msgid "Indent with tab characters (not recommended for Python)"
 msgstr "Einrücken mit Tab (für Python nicht empfohlen)"
 
-#: thonny/base_file_browser.py:91 thonny/memory.py:63
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
 msgid "Name"
 msgstr "Name"
 
-#: thonny/base_file_browser.py:95
+#: thonny/base_file_browser.py:96
 msgid "Size (bytes)"
 msgstr "Größe (Bytes)"
 
-#: thonny/base_file_browser.py:875
+#: thonny/base_file_browser.py:879
 msgid "Enter name for new directory under\n"
 "%s"
-msgstr "Gebe einen Namen für ein neues Verzeichnis ein unter %s"
+msgstr "Bestimmen Sie einen Namen für ein neues Verzeichnis unter\n"
+"%s"
 
-#: thonny/base_file_browser.py:898
+#: thonny/base_file_browser.py:902
 msgid "Nothing selected"
 msgstr "Nichts ausgewählt"
 
-#: thonny/base_file_browser.py:898
+#: thonny/base_file_browser.py:902
 msgid "Select an item and try again!"
 msgstr "Wählen Sie ein Item und versuchen Sie es erneut!"
 
-#: thonny/base_file_browser.py:1325
+#: thonny/base_file_browser.py:1329
 msgid "Open from %s"
 msgstr "Öffnen von %s"
 
-#: thonny/base_file_browser.py:1328
+#: thonny/base_file_browser.py:1332
 msgid "Save to %s"
 msgstr "Speichern nach %s"
 
-#: thonny/base_file_browser.py:1347
+#: thonny/base_file_browser.py:1351
 msgid "File name:"
 msgstr "Dateiname:"
 
-#: thonny/memory.py:64 thonny/plugins/object_inspector.py:539
-#: thonny/plugins/object_inspector.py:618
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
 msgid "Value ID"
 msgstr "ID-Wert"
 
 #: thonny/memory.py:65 thonny/plugins/heap.py:23
-#: thonny/plugins/object_inspector.py:540
-#: thonny/plugins/object_inspector.py:619
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
 msgid "Value"
 msgstr "Wert"
 
-#: thonny/plugins/backend_config_page.py:274
+#: thonny/plugins/backend_config_page.py:272
 msgid "Save password"
-msgstr "Passwort Speichern"
+msgstr "Passwort speichern"
 
-#: thonny/plugins/debugger.py:553
+#: thonny/plugins/debugger.py:557
 msgid "Function call at %s"
 msgstr "Funktionsaufruf bei %s"
 
-#: thonny/plugins/debugger.py:1003
+#: thonny/plugins/debugger.py:1006
 msgid "Local variables"
 msgstr "Lokale Variablen"
 
-#: thonny/plugins/debugger.py:1035
+#: thonny/plugins/debugger.py:1038
 msgid "Function"
 msgstr "Funktion"
 
-#: thonny/plugins/debugger.py:1036
+#: thonny/plugins/debugger.py:1039
 msgid "Location"
 msgstr "Ort"
 
-#: thonny/plugins/debugger.py:1112
+#: thonny/plugins/debugger.py:1115
 msgid "If last command raised an exception then this view will show the stacktrace."
-msgstr "Falls das letzte Kommando eine Exception (interrupt) ausgelöst hat, dann wird in diesem Fenster der zugehörige Stack gezeigt"
+msgstr "Falls das letzte Kommando eine Exception (interrupt) ausgelöst hat, dann wird in diesem Fenster der zugehörige Stack gezeigt."
 
 #: thonny/plugins/heap.py:22
 msgid "ID"
@@ -1623,32 +1581,33 @@ msgstr "Daten"
 msgid "Attributes"
 msgstr "Attribute"
 
-#: thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:537
 msgid "Index"
 msgstr "Index"
 
-#: thonny/plugins/object_inspector.py:616
+#: thonny/plugins/object_inspector.py:615
 msgid "Key ID"
 msgstr "Schlüssel-ID"
 
-#: thonny/plugins/object_inspector.py:617
+#: thonny/plugins/object_inspector.py:616
 msgid "Key"
 msgstr "Schlüssel"
 
 #: thonny/plugins/variables.py:39
 msgid "Back to\n"
 "%s"
-msgstr "Zurück nach %s"
+msgstr "Zurück nach\n"
+"%s"
 
-#: thonny/plugins/micropython/mp_front.py:444
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port or WebREPL"
-msgstr "Port oder WebREBL"
+msgstr "Port oder WebREPL"
 
-#: thonny/plugins/micropython/mp_front.py:589
+#: thonny/plugins/micropython/mp_front.py:599
 msgid "Password"
 msgstr "Passwort"
 
-#: thonny/plugins/debugger.py:961
+#: thonny/plugins/debugger.py:964
 msgid "Source code"
 msgstr "Quellcode"
 
@@ -1658,113 +1617,116 @@ msgstr "Benutzen Sie die TK-Dateiauswahl anstelle von Zenity"
 
 #: thonny/plugins/general_config_page.py:30
 msgid "Select if the file dialogs end up behind the main window"
-msgstr "Wähle aus, falls Dialoge hinter dem Hauptfenster verschwinden"
+msgstr "Auswählen, falls Dialoge hinter dem Hauptfenster verschwinden"
 
 #: thonny/plugins/general_config_page.py:97
 msgid "Environment variables (one KEY=VALUE per line)"
 msgstr "Umgebungs-Variablen  (jeweils eine pro Zeile)"
 
-#: thonny/base_file_browser.py:718
+#: thonny/base_file_browser.py:722
 msgid "New file"
 msgstr "Neue Datei"
 
-#: thonny/base_file_browser.py:736
+#: thonny/base_file_browser.py:740
 msgid "Rename"
 msgstr "Umbenennen"
 
-#: thonny/base_file_browser.py:924
+#: thonny/base_file_browser.py:928
 msgid "Rename '%s'"
 msgstr "Benenne '%s' um"
 
-#: thonny/base_file_browser.py:924
+#: thonny/base_file_browser.py:928
 msgid "Enter new name"
 msgstr "Neuen Namen eingeben"
 
-#: thonny/base_file_browser.py:1012
+#: thonny/base_file_browser.py:1016
 msgid "Paste failed"
 msgstr "Einfügen gescheitert"
 
-#: thonny/base_file_browser.py:1012
+#: thonny/base_file_browser.py:1016
 msgid "There are conflicting folders"
 msgstr "Es gibt sich widersprechende Ordner"
 
-#: thonny/base_file_browser.py:1140
+#: thonny/base_file_browser.py:1144
 msgid "File already exists"
 msgstr "Datei existiert bereits"
 
-#: thonny/base_file_browser.py:1208
+#. In the English GUI (Thonny 4.0.1), I did not identify an entry in lines of Configure -> Files
+#: thonny/base_file_browser.py:1212
 msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
-msgstr "Wenn dies eine Textdatei ist, kannst Du es automatisch mit Thonny öffnen, indem Du rechts klickst und 'Konfiguriere ... Dateien' wählst"
+msgstr "Wenn es eine Textdatei ist, kannst Du sie in Thonny öffnen, indem Du rechts klickst und 'Konfiguriere ... Dateien' wählst."
 
-#: thonny/editors.py:35
+#: thonny/editors.py:38
 msgid "Python files"
 msgstr "Python-Dateien"
 
-#: thonny/editors.py:122 thonny/editors.py:189
+#: thonny/editors.py:123 thonny/editors.py:189
 msgid "<untitled>"
 msgstr "<unbenannt>"
 
-#: thonny/editors.py:149
+#: thonny/editors.py:150
 msgid "File is gone"
 msgstr "Datei ist verschwunden"
 
-#: thonny/editors.py:152
+#: thonny/editors.py:153
 msgid "Do you want to also close the editor?"
 msgstr "Willst Du auch den Editor schließen?"
 
-#: thonny/editors.py:168
+#: thonny/editors.py:169
 msgid "External modification"
 msgstr "Externe Veränderung"
 
-#: thonny/editors.py:171
+#. Gibt es eine Konvention hier, wie man den Nutzer anspricht? Du, du, Sie, sie? Ich bevorzuge 'Du', weil ich 'Sie' altmodisch finde und den Großbuchstaben respektvoller. Manche finden die Großschreibung altmodisch, für mich ist es der schönste Kompromiss. Aber ich bin ja auch schon alt (Boomer ;-) ).
+#: thonny/editors.py:172
 msgid "Do you want to discard current editor content and reload the file from disk?"
-msgstr "Willst Du den jetzigen Editor-Inhalt verwerfen und die Datei von der Platte neu laden?"
+msgstr "Wollen Sie den jetzigen Editor-Inhalt verwerfen und die Datei von der Platte neu laden?"
 
-#: thonny/editors.py:580
+#: thonny/editors.py:588
 msgid "Python files usually have .py extension."
-msgstr "Python-Dateien haben üblicherweise die Endung '.py'."
+msgstr "Python-Dateien haben üblicherweise die Endung .py."
 
-#: thonny/editors.py:582
+#: thonny/editors.py:590
 msgid "Did you mean '%s'?"
-msgstr "Meintest Du '%s'?"
+msgstr "Meinten Sie '%s'?"
 
-#: thonny/editors.py:751
+#: thonny/editors.py:759
 msgid "Move / rename..."
 msgstr "Verschieben / Umbenennen von ..."
 
-#: thonny/editors.py:760
+#: thonny/editors.py:768
 msgid "Go to line..."
 msgstr "Gehe zu Zeile ..."
 
-#: thonny/editors.py:1003
+#: thonny/editors.py:1010
 msgid "Line number"
 msgstr "Zeilennummer"
 
-#: thonny/editors.py:1149
+#: thonny/editors.py:1156
 msgid "Do you want to save files before closing?"
-msgstr "Willst Du die Dateien vor dem Schließen speichern?"
+msgstr "Wollen Sie die Dateien vor dem Schließen speichern?"
 
-#: thonny/editors.py:1151
+#. Suggestion for the English pattern: "Do you want to save the file before closing?" (additional "the")
+#: thonny/editors.py:1158
 msgid "Do you want to save file before closing?"
-msgstr "Willst Du vor dem Schließen speichern?"
+msgstr "Wollen Sie die Datei vor dem Schließen speichern?"
 
-#: thonny/editors.py:1154
+#: thonny/editors.py:1161
 msgid "Save On Close"
 msgstr "Beim Schließen speichern"
 
-#: thonny/misc_utils.py:513
+#: thonny/misc_utils.py:539
 msgid "Command not available"
 msgstr "Befehl nicht verfügbar"
 
-#: thonny/misc_utils.py:514
+#: thonny/misc_utils.py:540
 msgid "This command is not available if Thonny is run via Flatpak"
 msgstr "Dieser Befehl ist nicht unter Flatpack verfügbar"
 
-#: thonny/workbench.py:694 thonny/workbench.py:794
+#: thonny/workbench.py:700 thonny/workbench.py:799
 msgid "Support Ukraine"
-msgstr "Unterstütze die Ukraine"
+msgstr "Unterstützen Sie die Ukraine"
 
-#: thonny/plugins/backend_config_page.py:91
+#: thonny/plugins/backend_config_page.py:90
 msgid "Which kind of interpreter should Thonny use for running your code?"
 msgstr "Welche Art von Interpreter soll Thonny zur Ausführung Deines Codes benutzen?"
 
@@ -1782,7 +1744,7 @@ msgstr "Biete beim Tippen Auto-Vervollständigen an"
 
 #: thonny/plugins/editor_config_page.py:52
 msgid "Automatically show documentation for completions"
-msgstr "Zeige automatisch Doku für Vervollständigungen"
+msgstr "Zeige automatisch Dokumentation für Vervollständigungen"
 
 #: thonny/plugins/editor_config_page.py:57
 msgid "Request completions with Tab-key in editors"
@@ -1792,7 +1754,7 @@ msgstr "Autovervollständigen mit Tab im Editor"
 msgid "Request completions with Tab-key in Shell"
 msgstr "Autovervollständigen mit Tab in der Shell"
 
-#: thonny/plugins/goto_definition.py:58
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
 msgid "Problem"
 msgstr "Problem"
 
@@ -1802,79 +1764,80 @@ msgstr "Definition nicht gefunden"
 
 #: thonny/plugins/shell_config_page.py:17
 msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
-msgstr "Leere Terminal-Fenster vor Start des neuen Prozesses (ausführen, debuggen, Stop/Restart, ...) "
+msgstr "Leere das Terminal-Fenster vor dem Start des neuen Prozesses (ausführen, debuggen, Stop/Restart, ...)"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:171
+#: thonny/plugins/cpython_frontend/cp_front.py:196
 msgid "Thonny's Python"
 msgstr "Thonnys Python"
 
-#: thonny/plugins/micropython/mp_front.py:492
+#: thonny/plugins/micropython/mp_front.py:496
 msgid "Interrupt working program on connect"
 msgstr "Beim Verbinden laufendes Programm unterbrechen"
 
-#: thonny/plugins/micropython/mp_front.py:500
+#: thonny/plugins/micropython/mp_front.py:504
 msgid "Synchronize device's real time clock"
 msgstr "Synchronisiere die Echtzeituhr des Geräts"
 
-#: thonny/plugins/micropython/mp_front.py:506
+#: thonny/plugins/micropython/mp_front.py:510
 msgid "Use local time in real time clock"
 msgstr "Benutze lokale Zeit in Echtzeituhr"
 
-#: thonny/plugins/micropython/mp_front.py:512
+#: thonny/plugins/micropython/mp_front.py:516
 msgid "Restart interpreter before running a script"
 msgstr "Vor Start des Skript Interpreter neu starten"
 
-#: thonny/plugins/micropython/pip_gui.py:24
+#: thonny/plugins/micropython/pip_gui.py:26
 msgid "This doesn't look like MicroPython/CircuitPython package.\n"
 "Are you sure you want to install it?"
-msgstr "Dies scheint kein Micro-/CircuitPython-Paket zu sein.\n"
-"Willst Du es wirklich installieren?"
+msgstr "Das scheint kein Micro-/CircuitPython-Paket zu sein.\n"
+"Wollen Sie es wirklich installieren?"
 
-#: thonny/base_file_browser.py:849
+#: thonny/base_file_browser.py:853
 msgid "Moving to Trash"
-msgstr "In den Papierkorb schieben"
+msgstr "In den Papierkorb verschieben"
 
-#: thonny/base_file_browser.py:850
+#: thonny/base_file_browser.py:854
 msgid "Move %s to Trash?"
-msgstr "%s in den Papierkorb schieben?"
+msgstr "%s in den Papierkorb verschieben?"
 
-#: thonny/base_file_browser.py:857
+#: thonny/base_file_browser.py:861
 msgid "Moving %s to Trash"
-msgstr "Schiebe %s in den Papierkorb"
+msgstr "Verschiebe %s in den Papierkorb"
 
-#: thonny/base_file_browser.py:662
+#: thonny/base_file_browser.py:666
 msgid "Open in default external app"
 msgstr "Öffne in externer Standard-App"
 
-#: thonny/base_file_browser.py:1206
+#: thonny/base_file_browser.py:1210
 msgid "Opening remote files in external app is not supported."
 msgstr "Remote-Dateien können nicht in externer App geöffnet werden."
 
-#: thonny/base_file_browser.py:1213
+#: thonny/base_file_browser.py:1217
 msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
-msgstr "Wenn die Datei in einer externen App, geöffnet werden muss, dann lade sie in ein lokales Verzeichnis und öffne sie von dort!"
+msgstr "Wenn die Datei von einer externen App geöffnet werden muss, dann speichere sie in einem lokalen Verzeichnis und öffne sie von dort!"
 
-#: thonny/editors.py:150
+#: thonny/editors.py:151
 msgid "Looks like '%s' was deleted or moved."
 msgstr "Anscheinend wurde '%s' gelöscht oder verschoben."
 
-#: thonny/editors.py:169
+#: thonny/editors.py:170
 msgid "Looks like '%s' was modified outside of the editor."
 msgstr "Anscheinend wurde '%s' außerhalb des Editors geändert."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:230
+#. German "Hinweis:" is more gentle (such as "hint") than imperative verb with exclamation mark.
+#: thonny/plugins/cpython_frontend/cp_front.py:256
 msgid "NB! Thonny only supports Python %s and later"
-msgstr "Achtung! Thonny unterstützt nur Python %s und neuer"
+msgstr "Hinweis: Thonny unterstützt nur Python %s und neuer"
 
-#: thonny/editors.py:1003
+#: thonny/editors.py:1010
 msgid "Go to line"
 msgstr "Gehe zu Zeile"
 
-#: thonny/workbench.py:697
+#: thonny/workbench.py:703
 msgid "Support"
 msgstr "Unterstützung"
 
-#: thonny/editors.py:393 thonny/editors.py:408
+#: thonny/editors.py:399 thonny/editors.py:414
 msgid "Could not save"
 msgstr "Konnte nicht gespeichert werden"
 
@@ -1886,17 +1849,17 @@ msgstr "Warnung"
 msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
 "Did you intend this?"
 msgstr "Wenn der Wert einer Umgebungsvariable in Anführungszeichen gesetzt wird, werden die Anführungszeichen Teil des Werts.\n"
-"Ist das beabsichtigt?"
+"War das beabsichtigt?"
 
-#: thonny/workbench.py:867
+#: thonny/workbench.py:870
 msgid "Install MicroPython"
 msgstr "MicroPython installieren"
 
-#: thonny/workbench.py:871
+#: thonny/workbench.py:874
 msgid "Install CircuitPython"
 msgstr "CircuitPython installieren"
 
-#: thonny/plugins/backend_config_page.py:212
+#: thonny/plugins/backend_config_page.py:210
 msgid "Make uploaded shebang scripts executable"
 msgstr "Hochgeladene Shebang-Skripte ausführbar machen"
 
@@ -1908,7 +1871,7 @@ msgstr "Gespeicherte Shebang-Skripte ausführbar machen"
 msgid "Activate virtual environment"
 msgstr "Virtuelle Umgebung aktivieren"
 
-#: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
 msgid "Target"
 msgstr "Ziel"
 
@@ -1916,24 +1879,24 @@ msgstr "Ziel"
 msgid "Visualize current script at Python Tutor"
 msgstr "Aktuelles Skript im Python Tutor visualisieren"
 
-#: thonny/plugins/todo_view.py:44
+#: thonny/plugins/todo_view.py:43
 msgid "Line"
 msgstr "Zeile"
 
-#: thonny/plugins/todo_view.py:45
+#: thonny/plugins/todo_view.py:44
 msgid "Info"
 msgstr "Info"
 
-#: thonny/plugins/todo_view.py:123
+#: thonny/plugins/todo_view.py:121
 msgid "No line marked with #todo found"
 msgstr "Keine mit #todo markierte Zeile gefunden"
 
-#: thonny/plugins/todo_view.py:143
+#: thonny/plugins/todo_view.py:141
 msgid "TODO"
 msgstr "ToDo"
 
-#: thonny/plugins/circuitpython/cirpy_front.py:98
-#: thonny/plugins/micropython/mp_front.py:536
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
 msgid "Install or update %s"
 msgstr "%s installieren oder aktualisieren"
 
@@ -1941,7 +1904,7 @@ msgstr "%s installieren oder aktualisieren"
 msgid "Local Python 3"
 msgstr "Lokales Python 3"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:240
+#: thonny/plugins/cpython_frontend/cp_front.py:266
 msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
 msgstr "Es kann eine vorhandene virtuelle Umgebung auch über das Rechtsklick-Kontextmenü in der Dateinavigation aktiviert werden, wenn ein virtueller Umgebungsordner oder die darin enthaltene Datei 'pyveng.cfg' ausgewählt wird."
 
@@ -1953,11 +1916,94 @@ msgstr "Vorbereitungen (überspringe den VS-Code-Teil)"
 msgid "Default password"
 msgstr "Standard-Passwort"
 
-#: thonny/running.py:338
+#: thonny/running.py:392
 msgid "Information"
-msgstr ""
+msgstr "Information"
 
-#: thonny/running.py:339
+#. Would it be old-fashioned to add a comma before "muss"? I would prefer it.
+#: thonny/running.py:393
 msgid "For debugging the program must be saved first."
+msgstr "Um den Programmfehler zu korrigieren muss das Program zuerst gespeichert werden."
+
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr "%s sieht nicht wie eine Textdatei aus"
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr "Problem beim Laden der Datei"
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr ""
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr "Datei ist geöffnet"
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr ""
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr "Berechtigungsfehler"
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr "Es sieht so aus, als ob diese Datei oder dieser Ordner nicht beschreibbar ist."
+
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr ""
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr "Wohin soll gespeichert werden?"
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr "Mögliches Problem"
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr ""
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr "Möchtest du diesen Namen weiterhin für dein Skript verwenden?"
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr ""
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr "Versuche, sie mit Datei => Öffnen zu öffnen."
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr "Berechtigungsfehler"
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr "Ausführung unbenannter Programme erlauben"
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
 msgstr ""
 
diff --git a/thonny/locale/el_GR/LC_MESSAGES/thonny.mo b/thonny/locale/el_GR/LC_MESSAGES/thonny.mo
index b182262..449b31e 100644
Binary files a/thonny/locale/el_GR/LC_MESSAGES/thonny.mo and b/thonny/locale/el_GR/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/en_GB/LC_MESSAGES/thonny.mo b/thonny/locale/en_GB/LC_MESSAGES/thonny.mo
new file mode 100644
index 0000000..9400cec
Binary files /dev/null and b/thonny/locale/en_GB/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/en_GB/LC_MESSAGES/thonny.po b/thonny/locale/en_GB/LC_MESSAGES/thonny.po
new file mode 100644
index 0000000..a70165a
--- /dev/null
+++ b/thonny/locale/en_GB/LC_MESSAGES/thonny.po
@@ -0,0 +1,1988 @@
+msgid ""
+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-gb\n"
+
+#: thonny/workbench.py:375
+msgid "File"
+msgstr "File"
+
+#: thonny/workbench.py:376
+msgid "Edit"
+msgstr "Edit"
+
+#: thonny/workbench.py:377
+msgid "View"
+msgstr "View"
+
+#: thonny/running.py:161 thonny/workbench.py:378
+msgid "Run"
+msgstr "Run"
+
+#: thonny/workbench.py:379
+msgid "Tools"
+msgstr "Tools"
+
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
+msgid "Help"
+msgstr "Help"
+
+#: thonny/workbench.py:598
+msgid "Exit"
+msgstr "Exit"
+
+#: thonny/workbench.py:625
+msgid "Decrease font size"
+msgstr "Decrease font size"
+
+#: thonny/workbench.py:637
+msgid "Focus editor"
+msgstr "Focus editor"
+
+#: thonny/workbench.py:646
+msgid "Focus shell"
+msgstr "Focus shell"
+
+#: thonny/workbench.py:656
+msgid "Maximize view"
+msgstr "Maximize view"
+
+#: thonny/workbench.py:668
+msgid "Full screen"
+msgstr "Full screen"
+
+#: thonny/workbench.py:1467
+msgid "Program arguments"
+msgstr "Program arguments"
+
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
+msgid "About Thonny"
+msgstr "About 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 "Made in\n"
+"University of Tartu, Estonia,\n"
+"with the help from\n"
+"open-source community,\n"
+"Raspberry Pi Foundation\n"
+"and Cybernetica AS"
+
+#: thonny/plugins/about.py:101
+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 "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"
+
+#: thonny/plugins/about.py:142
+msgid "Version history"
+msgstr "Version history"
+
+#: thonny/plugins/about.py:149
+msgid "Report problems"
+msgstr "Report problems"
+
+#: thonny/plugins/assistant_config_page.py:16
+msgid "Open Assistant automatically when program crashes with an exception"
+msgstr "Open Assistant automatically when program crashes with an exception"
+
+#: thonny/plugins/assistant_config_page.py:23
+msgid "Open Assistant automatically when it has warnings for your code"
+msgstr "Open Assistant automatically when it has warnings for your code"
+
+#: thonny/plugins/assistant_config_page.py:30
+msgid "Perform selected Pylint checks"
+msgstr "Perform selected Pylint checks"
+
+#: thonny/plugins/assistant_config_page.py:34
+msgid "Perform MyPy checks"
+msgstr "Perform MyPy checks"
+
+#: thonny/plugins/assistant_config_page.py:36
+msgid "Disabled checks (one id per line)"
+msgstr "Disabled checks (one id per line)"
+
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
+msgid "Assistant"
+msgstr "Assistant"
+
+#: thonny/plugins/autocomplete.py:529
+msgid "Auto-complete"
+msgstr "Auto-complete"
+
+#: thonny/plugins/backend_config_page.py:335
+msgid "Interpreter"
+msgstr "Interpreter"
+
+#: thonny/plugins/birdseye_frontend.py:55
+msgid "About Birdseye"
+msgstr "About Birdseye"
+
+#: thonny/plugins/birdseye_frontend.py:56
+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 is a Python debugger which needs to be installed separately.\n"
+"\n"
+"Do you want to open the help page and learn more?"
+
+#: thonny/plugins/birdseye_frontend.py:84
+msgid "Debug current script (birdseye)"
+msgstr "Debug current script (birdseye)"
+
+#: thonny/plugins/commenting_indenting.py:171
+msgid "Toggle comment"
+msgstr "Toggle comment"
+
+#: thonny/plugins/commenting_indenting.py:181
+msgid "Comment out"
+msgstr "Comment out"
+
+#: thonny/plugins/commenting_indenting.py:191
+msgid "Uncomment"
+msgstr "Uncomment"
+
+#: thonny/plugins/common_editing_commands.py:21
+msgid "Undo"
+msgstr "Undo"
+
+#: thonny/plugins/common_editing_commands.py:33
+msgid "Redo"
+msgstr "Redo"
+
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
+msgid "Cut"
+msgstr "Cut"
+
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
+msgid "Copy"
+msgstr "Copy"
+
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
+msgid "Paste"
+msgstr "Paste"
+
+#: thonny/plugins/common_editing_commands.py:85 thonny/plugins/debugger.py:152
+msgid "Select all"
+msgstr "Select all"
+
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
+msgid "Run to cursor"
+msgstr "Run to cursor"
+
+#: thonny/plugins/debugger.py:985
+msgid "Can't close yet"
+msgstr "Can't close yet"
+
+#: thonny/plugins/debugger.py:986
+msgid "Use \"Stop\" command if you want to cancel debugging"
+msgstr "Use \"Stop\" command if you want to cancel debugging"
+
+#: thonny/plugins/dock_user_windows_frontend.py:28
+msgid "Dock user windows"
+msgstr "Dock user windows"
+
+#: thonny/plugins/editor_config_page.py:20
+msgid "Highlight matching names"
+msgstr "Highlight matching names"
+
+#: thonny/plugins/editor_config_page.py:26
+msgid "Highlight local variables"
+msgstr "Highlight local variables"
+
+#: thonny/plugins/editor_config_page.py:31
+msgid "Highlight parentheses"
+msgstr "Highlight parentheses"
+
+#: thonny/plugins/editor_config_page.py:32
+msgid "Highlight syntax elements"
+msgstr "Highlight syntax elements"
+
+#: thonny/plugins/editor_config_page.py:36
+msgid "Highlight current line (requires reopening the editor)"
+msgstr "Highlight current line (requires reopening the editor)"
+
+#: thonny/plugins/editor_config_page.py:73
+msgid "Show line numbers"
+msgstr "Show line numbers"
+
+#: thonny/plugins/editor_config_page.py:76
+msgid "Recommended maximum line length\n"
+"(Set to 0 to turn off margin line)"
+msgstr "Recommended maximum line length\n"
+"(Set to 0 to turn off margin line)"
+
+#: thonny/plugins/editor_config_page.py:104
+msgid "Editor"
+msgstr "Editor"
+
+#: thonny/plugins/event_logging.py:207
+msgid "Export usage logs..."
+msgstr "Export usage logs..."
+
+#: thonny/plugins/event_view.py:39
+msgid "Events"
+msgstr "Events"
+
+#: thonny/plugins/files.py:609
+msgid "Files"
+msgstr "Files"
+
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
+msgid "Find & Replace"
+msgstr "Find & Replace"
+
+#: thonny/plugins/find_replace.py:66
+msgid "Find:"
+msgstr "Find:"
+
+#: thonny/plugins/find_replace.py:90
+msgid "Replace with:"
+msgstr "Replace with:"
+
+#: thonny/plugins/find_replace.py:108
+msgid "Case sensitive"
+msgstr "Case sensitive"
+
+#: thonny/plugins/find_replace.py:115
+msgid "Up"
+msgstr "Up"
+
+#: thonny/plugins/find_replace.py:119
+msgid "Down"
+msgstr "Down"
+
+#: thonny/plugins/find_replace.py:128
+msgid "Find"
+msgstr "Find"
+
+#: thonny/plugins/find_replace.py:138
+msgid "Replace"
+msgstr "Replace"
+
+#: thonny/plugins/find_replace.py:146
+msgid "Replace+Find"
+msgstr "Replace+Find"
+
+#: thonny/plugins/find_replace.py:156
+msgid "Replace all"
+msgstr "Replace all"
+
+#: thonny/plugins/find_replace.py:254
+msgid "Enter string to be replaced."
+msgstr "Enter string to be replaced."
+
+#: thonny/plugins/find_replace.py:339
+msgid "The specified text was not found!"
+msgstr "The specified text was not found!"
+
+#: thonny/plugins/general_config_page.py:15
+msgid "Allow only single Thonny instance"
+msgstr "Allow only single Thonny instance"
+
+#: thonny/plugins/general_config_page.py:22
+msgid "Reopen all files from previous session"
+msgstr "Reopen all files from previous session"
+
+#: thonny/plugins/general_config_page.py:37
+msgid "Disable notification sound"
+msgstr "Disable notification sound"
+
+#: thonny/plugins/general_config_page.py:86
+msgid "Font scaling mode"
+msgstr "Font scaling mode"
+
+#: thonny/plugins/heap.py:37
+msgid "Heap mode is on.\n"
+"Close Heap view to turn it off."
+msgstr "Heap mode is on.\n"
+"Close Heap view to turn it off."
+
+#: thonny/plugins/heap.py:86
+msgid "Heap"
+msgstr "Heap"
+
+#: thonny/plugins/general_config_page.py:53
+msgid "Language"
+msgstr "Language"
+
+#: 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 "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."
+
+#: thonny/plugins/notes.py:63
+msgid "Notes"
+msgstr "Notes"
+
+#: thonny/plugins/object_inspector.py:116
+msgid "Previous object"
+msgstr "Previous object"
+
+#: thonny/plugins/object_inspector.py:119
+msgid "Next object"
+msgstr "Next object"
+
+#: thonny/plugins/object_inspector.py:732
+msgid "Object inspector"
+msgstr "Object inspector"
+
+#: thonny/plugins/outline.py:148
+msgid "Outline"
+msgstr "Outline"
+
+#: thonny/plugins/pgzero_frontend.py:27
+msgid "Pygame Zero mode"
+msgstr "Pygame Zero mode"
+
+#: thonny/plugins/pip_gui.py:80
+msgid "Uninstall"
+msgstr "Uninstall"
+
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
+msgid "Close"
+msgstr "Close"
+
+#: thonny/plugins/pip_gui.py:397
+msgid "Click "
+msgstr "Click "
+
+#: thonny/plugins/pip_gui.py:398 thonny/plugins/pip_gui.py:409
+msgid "here"
+msgstr "here"
+
+#: thonny/plugins/pip_gui.py:77
+msgid "Upgrade"
+msgstr "Upgrade"
+
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
+msgid "Install"
+msgstr "Install"
+
+#: thonny/plugins/pip_gui.py:570
+msgid "Could not find the package from PyPI."
+msgstr "Could not find the package from PyPI."
+
+#: thonny/plugins/pip_gui.py:592
+msgid "Latest stable version"
+msgstr "Latest stable version"
+
+#: thonny/plugins/pip_gui.py:594
+msgid "Latest version"
+msgstr "Latest version"
+
+#: thonny/plugins/pip_gui.py:596
+msgid "Summary"
+msgstr "Summary"
+
+#: thonny/plugins/pip_gui.py:598
+msgid "Author"
+msgstr "Author"
+
+#: thonny/plugins/pip_gui.py:602
+msgid "Homepage"
+msgstr "Homepage"
+
+#: thonny/plugins/pip_gui.py:604
+msgid "Bugtracker"
+msgstr "Bugtracker"
+
+#: thonny/plugins/pip_gui.py:606
+msgid "Documentation"
+msgstr "Documentation"
+
+#: thonny/plugins/pip_gui.py:608
+msgid "PyPI page"
+msgstr "PyPI page"
+
+#: thonny/plugins/pip_gui.py:648
+msgid "Requires"
+msgstr "Requires"
+
+#: thonny/plugins/pip_gui.py:802
+msgid "Really uninstall?"
+msgstr "Really uninstall?"
+
+#: thonny/plugins/pip_gui.py:807
+msgid "Are you sure you want to uninstall it?"
+msgstr "Are you sure you want to uninstall it?"
+
+#: thonny/plugins/variables.py:22
+msgid "Back to\n"
+"current frame"
+msgstr "Back to\n"
+"current frame"
+
+#: thonny/plugins/variables.py:80 thonny/plugins/variables.py:82
+#: thonny/plugins/variables.py:145
+msgid "Variables"
+msgstr "Variables"
+
+#: thonny/base_file_browser.py:1576
+msgid "This computer"
+msgstr "This computer"
+
+#: thonny/base_file_browser.py:648
+msgid "Refresh"
+msgstr "Refresh"
+
+#: thonny/base_file_browser.py:657
+msgid "Focus into"
+msgstr "Focus into"
+
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
+msgid "Error"
+msgstr "Error"
+
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+msgid "You need to select a file!"
+msgstr "You need to select a file!"
+
+#: thonny/base_file_browser.py:1427
+msgid "Overwrite?"
+msgstr "Overwrite?"
+
+#: thonny/base_file_browser.py:1427
+msgid "Do you want to overwrite '%s' ?"
+msgstr "Do you want to overwrite '%s' ?"
+
+#: thonny/editors.py:658 thonny/editors.py:660
+msgid "New"
+msgstr "New"
+
+#: thonny/editors.py:671
+msgid "Open..."
+msgstr "Open..."
+
+#: thonny/editors.py:673
+msgid "Load"
+msgstr "Load"
+
+#: thonny/editors.py:682
+msgid "Recent files"
+msgstr "Recent files"
+
+#: thonny/editors.py:704 thonny/ui_utils.py:498
+msgid "Close all"
+msgstr "Close all"
+
+#: thonny/editors.py:714 thonny/editors.py:716
+msgid "Save"
+msgstr "Save"
+
+#: thonny/editors.py:739
+msgid "Save as..."
+msgstr "Save as..."
+
+#: thonny/editors.py:750
+msgid "Save copy..."
+msgstr "Save copy..."
+
+#: thonny/config_ui.py:18
+msgid "Thonny options"
+msgstr "Thonny options"
+
+#: thonny/running.py:160
+msgid "Run current script"
+msgstr "Run current script"
+
+#: thonny/running.py:191
+msgid "Run current script in terminal"
+msgstr "Run current script in terminal"
+
+#: thonny/running.py:204
+msgid "Stop/Restart backend"
+msgstr "Stop/Restart backend"
+
+#: thonny/running.py:205
+msgid "Stop"
+msgstr "Stop"
+
+#: thonny/running.py:216
+msgid "Interrupt execution"
+msgstr "Interrupt execution"
+
+#: thonny/running.py:229
+msgid "Send EOF / Soft reboot"
+msgstr "Send EOF / Soft reboot"
+
+#: thonny/running.py:240
+msgid "Disconnect"
+msgstr "Disconnect"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:295
+msgid "Python interpreters"
+msgstr "Python interpreters"
+
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
+msgid "all files"
+msgstr "all files"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:324
+msgid "Select empty directory for new virtual environment"
+msgstr "Select empty directory for new virtual environment"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:331
+msgid "Bad directory"
+msgstr "Bad directory"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:332
+msgid "Selected directory is not empty.\n"
+"Select another or cancel."
+msgstr "Selected directory is not empty.\n"
+"Select another or cancel."
+
+#: thonny/plugins/cpython_frontend/cp_front.py:349
+msgid "Creating virtual environment"
+msgstr "Creating virtual environment"
+
+#: thonny/shell.py:101
+msgid "Clear shell"
+msgstr "Clear shell"
+
+#: thonny/shell.py:185
+msgid "Plotter"
+msgstr "Plotter"
+
+#: thonny/shell.py:317
+msgid "Clear"
+msgstr "Clear"
+
+#: thonny/shell.py:330
+msgid "Show Plotter"
+msgstr "Show Plotter"
+
+#: thonny/shell.py:1660
+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 "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."
+
+#: thonny/shell.py:1671
+msgid "Wrap text (may be slow)"
+msgstr "Wrap text (may be slow)"
+
+#: thonny/ui_utils.py:1879
+msgid "Copy to clipboard"
+msgstr "Copy to clipboard"
+
+#: thonny/shell.py:1713
+msgid "Squeezed text (%d characters)"
+msgstr "Squeezed text (%d characters)"
+
+#: thonny/shell.py:1883
+msgid "Plotter visualizes series of\n"
+"numbers printed to the Shell."
+msgstr "Plotter visualises series of\n"
+"numbers printed to the Shell."
+
+#: thonny/shell.py:1885
+msgid "See Help for details."
+msgstr "See Help for details."
+
+#: thonny/ui_utils.py:497
+msgid "Close others"
+msgstr "Close others"
+
+#: thonny/ui_utils.py:1734
+msgid "Copying"
+msgstr "Copying"
+
+#: thonny/ui_utils.py:1737
+msgid "Copying\n"
+"  %s\n"
+"to\n"
+"  %s"
+msgstr "Copying\n"
+"  %s\n"
+"to\n"
+"  %s"
+
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
+msgid "Cancel"
+msgstr "Cancel"
+
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
+msgid "OK"
+msgstr "OK"
+
+#: thonny/ui_utils.py:2345
+msgid "Select All"
+msgstr "Select All"
+
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:164
+msgid "Shell"
+msgstr "Shell"
+
+#: thonny/workbench.py:608
+msgid "Options..."
+msgstr "Options..."
+
+#: thonny/workbench.py:615
+msgid "Increase font size"
+msgstr "Increase font size"
+
+#: thonny/workbench.py:679
+msgid "Change font size"
+msgstr "Change font size"
+
+#: thonny/workbench.py:680
+msgid "Zoom"
+msgstr "Zoom"
+
+#: thonny/workbench.py:689
+msgid "Exit Thonny"
+msgstr "Exit Thonny"
+
+#: thonny/workbench.py:692
+msgid "Quit"
+msgstr "Quit"
+
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
+msgid "Overwriting theme '%s'"
+msgstr "Overwriting theme '%s'"
+
+#: thonny/workbench.py:1438
+msgid "Program arguments:"
+msgstr "Program arguments:"
+
+#: thonny/workbench.py:1492
+msgid "Regular mode"
+msgstr "Regular mode"
+
+#: thonny/workbench.py:1493
+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 "Configuration has been updated. Restart Thonny to start working in regular mode.\n"
+"\n"
+"(See 'Tools → Options → General' if you change your mind later.)"
+
+#: thonny/plugins/ast_view.py:211
+msgid "Program tree"
+msgstr "Program tree"
+
+#: thonny/plugins/debugger.py:1284
+msgid "Resume"
+msgstr "Resume"
+
+#: thonny/plugins/debugger.py:1300
+msgid "Run / resume"
+msgstr "Run / resume"
+
+#: thonny/plugins/debugger.py:1315
+msgid "Debug current script"
+msgstr "Debug current script"
+
+#: thonny/plugins/debugger.py:1317
+msgid "Debug"
+msgstr "Debug"
+
+#: thonny/plugins/debugger.py:1328
+msgid "Debug current script (nicer)"
+msgstr "Debug current script (nicer)"
+
+#: thonny/plugins/debugger.py:1340
+msgid "Debug current script (faster)"
+msgstr "Debug current script (faster)"
+
+#: thonny/plugins/debugger.py:1351
+msgid "Step over"
+msgstr "Step over"
+
+#: thonny/plugins/debugger.py:1353
+msgid "Over"
+msgstr "Over"
+
+#: thonny/plugins/debugger.py:1364
+msgid "Step into"
+msgstr "Step into"
+
+#: thonny/plugins/debugger.py:1366
+msgid "Into"
+msgstr "Into"
+
+#: thonny/plugins/debugger.py:1377
+msgid "Step out"
+msgstr "Step out"
+
+#: thonny/plugins/debugger.py:1379
+msgid "Out"
+msgstr "Out"
+
+#: thonny/plugins/debugger.py:1414
+msgid "Step back"
+msgstr "Step back"
+
+#: thonny/plugins/debugger.py:1416
+msgid "Back"
+msgstr "Back"
+
+#: thonny/plugins/debugger.py:1422
+msgid "Stack"
+msgstr "Stack"
+
+#: thonny/plugins/debugger.py:1423
+msgid "Exception"
+msgstr "Exception"
+
+#: thonny/plugins/general_config_page.py:18
+msgid "Log program usage events"
+msgstr "Log program usage events"
+
+#: thonny/plugins/general_config_page.py:43
+msgid "Debug mode (provides more detailed diagnostic logs)"
+msgstr "Debug mode (provides more detailed diagnostic logs)"
+
+#: 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 scaling factor"
+
+#: thonny/plugins/general_config_page.py:114
+msgid "NB! Restart Thonny after changing these options!"
+msgstr "NB! Restart Thonny after changing these options!"
+
+#: thonny/plugins/general_config_page.py:148
+msgid "General"
+msgstr "General"
+
+#: thonny/plugins/pip_gui.py:142
+msgid "INSTALL"
+msgstr "INSTALL"
+
+#: thonny/plugins/pip_gui.py:367
+msgid "Browse the packages"
+msgstr "Browse the packages"
+
+#: thonny/plugins/pip_gui.py:370
+msgid "With current interpreter you can only browse the packages here.\n"
+"Use 'Tools → Open system shell...' for installing, upgrading or uninstalling."
+msgstr "With current interpreter you can only browse the packages here.\n"
+"Use 'Tools → Open system shell...' for installing, upgrading or uninstalling."
+
+#: thonny/plugins/pip_gui.py:378
+msgid "Packages' directory"
+msgstr "Packages' directory"
+
+#: thonny/plugins/pip_gui.py:382
+msgid "Install from PyPI"
+msgstr "Install from PyPI"
+
+#: thonny/plugins/pip_gui.py:385
+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 "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."
+
+#: thonny/plugins/pip_gui.py:402
+msgid "to locate requirements.txt file and install the packages specified in it."
+msgstr "to locate requirements.txt file and install the packages specified in it."
+
+#: thonny/plugins/pip_gui.py:408
+msgid "Click"
+msgstr "Click"
+
+#: thonny/plugins/pip_gui.py:413
+msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
+msgstr "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
+
+#: thonny/plugins/pip_gui.py:420
+msgid "Upgrade or uninstall"
+msgstr "Upgrade or uninstall"
+
+#: thonny/plugins/pip_gui.py:422
+msgid "Start by selecting the package from the left."
+msgstr "Start by selecting the package from the left."
+
+#: thonny/plugins/pip_gui.py:430
+msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
+msgstr "This dialogue lists all available packages, but allows upgrading and uninstalling only packages from"
+
+#: thonny/plugins/pip_gui.py:440
+msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means."
+msgstr "New packages will be also installed into this directory. Other locations must be managed by alternative means."
+
+#: thonny/plugins/pip_gui.py:493
+msgid "Installed version:"
+msgstr "Installed version:"
+
+#: thonny/plugins/pip_gui.py:495
+msgid "Installed to:"
+msgstr "Installed to:"
+
+#: thonny/plugins/pip_gui.py:573
+msgid "Please check your spelling!"
+msgstr "Please check your spelling!"
+
+#: thonny/plugins/pip_gui.py:577
+msgid "Could not find the package info from PyPI."
+msgstr "Could not find the package info from PyPI."
+
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
+msgid "Error code:"
+msgstr "Error code:"
+
+#: thonny/plugins/pip_gui.py:748
+msgid "Can't find package name from the list:"
+msgstr "Can't find package name from the list:"
+
+#: thonny/plugins/pip_gui.py:803
+msgid "Package '{}' is required for installing and uninstalling other packages."
+msgstr "Package '{}' is required for installing and uninstalling other packages."
+
+#: thonny/plugins/pip_gui.py:848
+msgid "Package"
+msgstr "Package"
+
+#: thonny/plugins/pip_gui.py:960
+msgid "Manage packages for %s"
+msgstr "Manage packages for %s"
+
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
+msgid "Confirmation"
+msgstr "Confirmation"
+
+#: thonny/plugins/pip_gui.py:1035
+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 "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?"
+
+#: thonny/plugins/pip_gui.py:1141
+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! There may be another version available which is compatible with current Thonny version. Click on '...' button to choose the version to install."
+
+#: thonny/plugins/pip_gui.py:1149
+msgid "Thonny plugin without requirements"
+msgstr "Thonny plugin without requirements"
+
+#: thonny/plugins/pip_gui.py:1165
+msgid "Unsuitable requirements"
+msgstr "Unsuitable requirements"
+
+#: thonny/plugins/pip_gui.py:1166
+msgid "This package requires different Thonny version:"
+msgstr "This package requires different Thonny version:"
+
+#: thonny/plugins/pip_gui.py:1170
+msgid "If you still want it, then please install it from the command line."
+msgstr "If you still want it, then please install it from the command line."
+
+#: thonny/plugins/pip_gui.py:1207
+msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
+msgstr "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
+
+#: thonny/plugins/pip_gui.py:1217
+msgid "Thonny plug-ins"
+msgstr "Thonny plug-ins"
+
+#: thonny/plugins/pip_gui.py:1253
+msgid "Advanced install / upgrade / downgrade"
+msgstr "Advanced install / upgrade / downgrade"
+
+#: thonny/plugins/pip_gui.py:1262
+msgid "Desired version"
+msgstr "Desired version"
+
+#: thonny/plugins/pip_gui.py:1321
+msgid "Upgrade dependencies"
+msgstr "Upgrade dependencies"
+
+#: thonny/plugins/pip_gui.py:1406
+msgid "Requires:"
+msgstr "Requires:"
+
+#: thonny/plugins/pip_gui.py:1410
+msgid "Error:"
+msgstr "Error:"
+
+#: thonny/plugins/pip_gui.py:1601
+msgid "Manage packages..."
+msgstr "Manage packages..."
+
+#: thonny/plugins/pip_gui.py:1607
+msgid "Manage plug-ins..."
+msgstr "Manage plug-ins..."
+
+#: thonny/plugins/replayer.py:364
+msgid "Open replayer..."
+msgstr "Open replayer..."
+
+#: thonny/plugins/run_debug_config_page.py:21
+msgid "Change working directory to script directory on Run / Debug"
+msgstr "Change working directory to script directory on Run / Debug"
+
+#: thonny/plugins/run_debug_config_page.py:35
+msgid "Show function calls (frames) in separate windows"
+msgstr "Show function calls (frames) in separate windows"
+
+#: thonny/plugins/run_debug_config_page.py:36
+msgid "Uncheck if you want more traditional experience."
+msgstr "Uncheck if you want more traditional experience."
+
+#: thonny/plugins/run_debug_config_page.py:42
+msgid "Open and close Stack view automatically"
+msgstr "Open and close Stack view automatically"
+
+#: thonny/plugins/run_debug_config_page.py:43
+msgid "Opens the Stack view on first call and closes it when program returns to main frame."
+msgstr "Opens the Stack view on first call and closes it when program returns to main frame."
+
+#: thonny/plugins/run_debug_config_page.py:52
+msgid "Allow stepping into libraries (ie. outside of main script directory)"
+msgstr "Allow stepping into libraries (ie. outside of main script directory)"
+
+#: thonny/plugins/run_debug_config_page.py:53
+msgid "May make debugging slower."
+msgstr "May make debugging slower."
+
+#: thonny/plugins/run_debug_config_page.py:58
+msgid "Preferred debugger"
+msgstr "Preferred debugger"
+
+#: thonny/plugins/run_debug_config_page.py:70
+msgid "(used when clicking Debug toolbar button)"
+msgstr "(used when clicking Debug toolbar button)"
+
+#: thonny/plugins/run_debug_config_page.py:75
+msgid "Birdseye port"
+msgstr "Birdseye port"
+
+#: thonny/plugins/run_debug_config_page.py:79
+msgid "(restart Thonny after changing this)"
+msgstr "(restart Thonny after changing this)"
+
+#: thonny/plugins/run_debug_config_page.py:87
+msgid "Run & Debug"
+msgstr "Run & Debug"
+
+#: thonny/plugins/shell_config_page.py:26
+msgid "Terminal emulation"
+msgstr "Terminal emulation"
+
+#: thonny/plugins/shell_config_page.py:28
+msgid "supports basic ANSI-colors and styles"
+msgstr "supports basic ANSI-colours and styles"
+
+#: thonny/plugins/shell_config_page.py:40
+msgid "Maximum number of lines to keep."
+msgstr "Maximum number of lines to keep."
+
+#: thonny/plugins/shell_config_page.py:42
+msgid "NB! Large values may cause poor performance!"
+msgstr "NB! Large values may cause poor performance!"
+
+#: thonny/plugins/shell_config_page.py:58
+msgid "Maximum length of line fragments before squeezing"
+msgstr "Maximum length of line fragments before squeezing"
+
+#: thonny/plugins/terminal_config_page.py:12
+msgid "Running current script in terminal"
+msgstr "Running current script in terminal"
+
+#: thonny/plugins/terminal_config_page.py:17
+msgid "Present Python REPL after program ends"
+msgstr "Present Python REPL after program ends"
+
+#: thonny/plugins/terminal_config_page.py:24
+msgid "Keep terminal window open after Python process ends"
+msgstr "Keep terminal window open after Python process ends"
+
+#: 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! Automatic closing needs to be enabled in Terminal's settings\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:39
+msgid "UI theme"
+msgstr "UI theme"
+
+#: thonny/plugins/theme_and_font_config_page.py:52
+msgid "Syntax theme"
+msgstr "Syntax theme"
+
+#: thonny/plugins/theme_and_font_config_page.py:84
+msgid "Editor font"
+msgstr "Editor font"
+
+#: thonny/plugins/theme_and_font_config_page.py:107
+msgid "IO font"
+msgstr "IO font"
+
+#: thonny/plugins/theme_and_font_config_page.py:132
+msgid "Preview"
+msgstr "Preview"
+
+#: thonny/plugins/theme_and_font_config_page.py:150
+msgid "This is a comment"
+msgstr "This is a comment"
+
+#: thonny/plugins/theme_and_font_config_page.py:153
+msgid "The answer is"
+msgstr "The answer is"
+
+#: thonny/plugins/theme_and_font_config_page.py:157
+msgid "unclosed_string"
+msgstr "unclosed_string"
+
+#: thonny/plugins/theme_and_font_config_page.py:159
+msgid "blah, blah"
+msgstr "blah, blah"
+
+#: thonny/plugins/theme_and_font_config_page.py:183
+msgid "NB! Some style elements change only after restarting Thonny!"
+msgstr "NB! Some style elements change only after restarting Thonny!"
+
+#: thonny/plugins/theme_and_font_config_page.py:222
+msgid "Enter an integer"
+msgstr "Enter an integer"
+
+#: thonny/plugins/theme_and_font_config_page.py:235
+msgid "Theme & Font"
+msgstr "Theme & Font"
+
+#: thonny/plugins/thonny_folders.py:19
+msgid "Open Thonny program folder..."
+msgstr "Open Thonny program folder..."
+
+#: thonny/plugins/thonny_folders.py:24
+msgid "Open Thonny data folder..."
+msgstr "Open Thonny data folder..."
+
+#: thonny/plugins/help/__init__.py:70
+msgid "Home"
+msgstr "Home"
+
+#: thonny/plugins/help/__init__.py:81
+msgid "Help contents"
+msgstr "Help contents"
+
+#: thonny/plugins/micropython/mp_front.py:303
+msgid "CircuitPython device"
+msgstr "CircuitPython device"
+
+#: thonny/plugins/micropython/mp_front.py:307
+msgid "MicroPython device"
+msgstr "MicroPython device"
+
+#: thonny/plugins/micropython/mp_front.py:558
+msgid "Connect your device to the computer and select corresponding port below"
+msgstr "Connect your device to the computer and select corresponding port below"
+
+#: thonny/plugins/micropython/mp_front.py:561
+msgid "look for your device name, \"USB Serial\" or \"UART\""
+msgstr "look for your device name, \"USB Serial\" or \"UART\""
+
+#: thonny/plugins/micropython/mp_front.py:563
+msgid "If you can't find it, you may need to install proper USB driver first."
+msgstr "If you can't find it, you may need to install proper USB driver first."
+
+#: thonny/plugins/micropython/mp_front.py:453
+msgid "Port"
+msgstr "Port"
+
+#: thonny/plugins/micropython/mp_front.py:458
+msgid "Try to detect port automatically"
+msgstr "Try to detect port automatically"
+
+#: thonny/plugins/micropython/__init__.py:24
+msgid "MicroPython (generic)"
+msgstr "MicroPython (generic)"
+
+#: thonny/plugins/printing/__init__.py:98
+msgid "Print..."
+msgstr "Print..."
+
+#: thonny/plugins/system_shell/__init__.py:63
+msgid "Open system shell..."
+msgstr "Open system shell..."
+
+#: thonny/plugins/backend_config_page.py:109
+msgid "Details"
+msgstr "Details"
+
+#: thonny/plugins/pip_gui.py:395
+msgid "Install from requirements file"
+msgstr "Install from requirements file"
+
+#: thonny/plugins/pip_gui.py:407
+msgid "Install from local file"
+msgstr "Install from local file"
+
+#: thonny/plugins/pip_gui.py:1200
+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 "This dialogue 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...'"
+
+#: thonny/plugins/circuitpython/__init__.py:10
+msgid "CircuitPython (generic)"
+msgstr "CircuitPython (generic)"
+
+#: thonny/plugins/commenting_indenting.py:142
+msgid "Indent selected lines"
+msgstr "Indent selected lines"
+
+#: thonny/plugins/commenting_indenting.py:152
+msgid "Dedent selected lines"
+msgstr "Dedent selected lines"
+
+#: thonny/workbench.py:1481
+msgid "Switch to\n"
+"regular\n"
+"mode"
+msgstr "Switch to\n"
+"regular\n"
+"mode"
+
+#: thonny/plugins/microbit/__init__.py:62
+msgid "Make sure MicroPython has been installed to your micro:bit."
+msgstr "Make sure MicroPython has been installed to your micro:bit."
+
+#: thonny/plugins/microbit/__init__.py:64
+msgid "Don't forget that main.py only works without embedded main script."
+msgstr "Don't forget that main.py only works without embedded main script."
+
+#: thonny/misc_utils.py:177
+msgid "Could not find disk '%s'. Do you want to locate it yourself?"
+msgstr "Could not find disk '%s'. Do you want to locate it yourself?"
+
+#: thonny/misc_utils.py:180
+msgid "Found several '%s' disks. Do you want to choose one yourself?"
+msgstr "Found several '%s' disks. Do you want to choose one yourself?"
+
+#: thonny/misc_utils.py:196
+msgid "Can't find suitable disk"
+msgstr "Can't find suitable disk"
+
+#: thonny/base_file_browser.py:294
+msgid "%d items"
+msgstr "%d items"
+
+#: thonny/base_file_browser.py:743
+msgid "Move to Trash"
+msgstr "Move to Rubbish Bin"
+
+#: thonny/base_file_browser.py:746
+msgid "Delete"
+msgstr "Delete"
+
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
+msgid "New directory"
+msgstr "New directory"
+
+#: thonny/base_file_browser.py:749
+msgid "Properties"
+msgstr "Properties"
+
+#: thonny/base_file_browser.py:751
+msgid "Storage space"
+msgstr "Storage space"
+
+#: thonny/base_file_browser.py:761
+msgid "Path"
+msgstr "Path"
+
+#: thonny/base_file_browser.py:763
+msgid "Directory properties"
+msgstr "Directory properties"
+
+#: thonny/base_file_browser.py:765
+msgid "File properties"
+msgstr "File properties"
+
+#: thonny/base_file_browser.py:767
+msgid "bytes"
+msgstr "bytes"
+
+#: thonny/base_file_browser.py:770
+msgid "Size"
+msgstr "Size"
+
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
+msgid "Modified"
+msgstr "Modified"
+
+#: thonny/base_file_browser.py:842
+msgid "Deleting %s"
+msgstr "Deleting %s"
+
+#: thonny/editors.py:262
+msgid "Loading"
+msgstr "Loading"
+
+#: thonny/editors.py:395
+msgid "Saving"
+msgstr "Saving"
+
+#: thonny/plugins/files.py:219
+msgid "Upload to %s"
+msgstr "Upload to %s"
+
+#: thonny/plugins/files.py:420
+msgid "Downloading %s to %s"
+msgstr "Downloading %s to %s"
+
+#: thonny/plugins/files.py:326
+msgid "Download to %s"
+msgstr "Download to %s"
+
+#: thonny/base_file_browser.py:650
+msgid "Open in system file manager"
+msgstr "Open in system file manager"
+
+#: thonny/base_file_browser.py:678
+msgid "Hide hidden files"
+msgstr "Hide hidden files"
+
+#: thonny/base_file_browser.py:678
+msgid "Show hidden files"
+msgstr "Show hidden files"
+
+#: thonny/base_file_browser.py:661
+msgid "Open in Thonny"
+msgstr "Open in Thonny"
+
+#: thonny/base_file_browser.py:692
+msgid "Open in system default app"
+msgstr "Open in system default app"
+
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
+msgid "Configure %s files"
+msgstr "Configure %s files"
+
+#: thonny/base_file_browser.py:701
+msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
+msgstr "What to do with a %s file when you double-click it in Thonny's file browser?"
+
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
+msgid "Deleting"
+msgstr "Deleting"
+
+#: thonny/base_file_browser.py:1265
+msgid "Creating directory"
+msgstr "Creating directory"
+
+#: thonny/editors.py:260
+msgid "Loading %s"
+msgstr "Loading %s"
+
+#: thonny/editors.py:390
+msgid "Saving to %s"
+msgstr "Saving to %s"
+
+#: thonny/editors.py:728 thonny/editors.py:730
+msgid "Save All files"
+msgstr "Save All files"
+
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
+msgid "Configure interpreter..."
+msgstr "Configure interpreter..."
+
+#: thonny/workbench.py:1591
+msgid "Device"
+msgstr "Device"
+
+#: thonny/workdlg.py:234
+msgid "Cancelling"
+msgstr "Cancelling"
+
+#: thonny/workdlg.py:270
+msgid "Starting"
+msgstr "Starting"
+
+#: thonny/plugins/backend_config_page.py:249
+msgid "Authentication"
+msgstr "Authentication"
+
+#: thonny/plugins/backend_config_page.py:251
+msgid "Enter the passphrase of your private key for\n"
+"{}"
+msgstr "Enter the passphrase of your private key for\n"
+"{}"
+
+#: thonny/plugins/backend_config_page.py:254
+msgid "Enter your password for\n"
+"{}"
+msgstr "Enter your password for\n"
+"{}"
+
+#: thonny/plugins/object_inspector.py:486
+msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s"
+msgstr "The representation above is an approximate value of this float. The exact stored value is %s which is about %s"
+
+#: thonny/plugins/pip_gui.py:682
+msgid "Search results"
+msgstr "Search results"
+
+#: thonny/plugins/pip_gui.py:683
+msgid "Searching"
+msgstr "Searching"
+
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
+msgid "Installing '%s'"
+msgstr "Installing '%s'"
+
+#: thonny/plugins/pip_gui.py:793
+msgid "Upgrading '%s'"
+msgstr "Upgrading '%s'"
+
+#: thonny/plugins/pip_gui.py:800
+msgid "Uninstalling '%s'"
+msgstr "Uninstalling '%s'"
+
+#: thonny/plugins/pip_gui.py:814
+msgid "Installing"
+msgstr "Installing"
+
+#: thonny/plugins/pip_gui.py:1562
+msgid "Package manager is not available for this interpreter"
+msgstr "Package manager is not available for this interpreter"
+
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
+msgid "Not supported"
+msgstr "Not supported"
+
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
+msgid "Not available"
+msgstr "Not available"
+
+#: thonny/plugins/pip_gui.py:1582
+msgid "You need to stop your program before launching the package manager."
+msgstr "You need to stop your program before launching the package manager."
+
+#: thonny/plugins/shell_config_page.py:73
+msgid "Open evaluated values in Object inspector"
+msgstr "Open evaluated values in Object inspector"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:234
+msgid "Python executable"
+msgstr "Python executable"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:258
+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! 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)!"
+
+#: thonny/plugins/cpython_ssh/__init__.py:17
+msgid "Remote Python 3 (SSH)"
+msgstr "Remote Python 3 (SSH)"
+
+#: thonny/plugins/micropython/mp_front.py:313
+msgid "Not connected"
+msgstr "Not connected"
+
+#: thonny/plugins/micropython/__init__.py:35
+msgid "MicroPython (local)"
+msgstr "MicroPython (local)"
+
+#: thonny/plugins/micropython/__init__.py:46
+msgid "MicroPython (SSH)"
+msgstr "MicroPython (SSH)"
+
+#: thonny/plugins/micropython/pip_gui.py:144
+msgid "no absolute lib directory in sys.path"
+msgstr "no absolute lib directory in sys.path"
+
+#: thonny/plugins/pip_gui.py:71
+msgid "Search on PyPI"
+msgstr "Search on PyPI"
+
+#: thonny/base_file_browser.py:693
+msgid "Open in Thonny's text editor"
+msgstr "Open in Thonny's text editor"
+
+#: thonny/base_file_browser.py:346
+msgid "Storage space on this drive or filesystem"
+msgstr "Storage space on this drive or filesystem"
+
+#: thonny/base_file_browser.py:347
+msgid "total space"
+msgstr "total space"
+
+#: thonny/base_file_browser.py:349
+msgid "used space"
+msgstr "used space"
+
+#: thonny/base_file_browser.py:350
+msgid "free space"
+msgstr "free space"
+
+#: thonny/base_file_browser.py:357
+msgid "Storage info"
+msgstr "Storage info"
+
+#: thonny/plugins/commenting_indenting.py:162
+msgid "Replace tabs with spaces"
+msgstr "Replace tabs with spaces"
+
+#: thonny/plugins/editor_config_page.py:33
+msgid "Highlight tab characters"
+msgstr "Highlight tab characters"
+
+#: thonny/plugins/editor_config_page.py:68
+msgid "Indent with tab characters (not recommended for Python)"
+msgstr "Indent with tab characters (not recommended for Python)"
+
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
+msgid "Name"
+msgstr "Name"
+
+#: thonny/base_file_browser.py:96
+msgid "Size (bytes)"
+msgstr "Size (bytes)"
+
+#: thonny/base_file_browser.py:879
+msgid "Enter name for new directory under\n"
+"%s"
+msgstr "Enter name for new directory under\n"
+"%s"
+
+#: thonny/base_file_browser.py:902
+msgid "Nothing selected"
+msgstr "Nothing selected"
+
+#: thonny/base_file_browser.py:902
+msgid "Select an item and try again!"
+msgstr "Select an item and try again!"
+
+#: thonny/base_file_browser.py:1329
+msgid "Open from %s"
+msgstr "Open from %s"
+
+#: thonny/base_file_browser.py:1332
+msgid "Save to %s"
+msgstr "Save to %s"
+
+#: thonny/base_file_browser.py:1351
+msgid "File name:"
+msgstr "File name:"
+
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
+msgid "Value ID"
+msgstr "Value ID"
+
+#: thonny/memory.py:65 thonny/plugins/heap.py:23
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
+msgid "Value"
+msgstr "Value"
+
+#: thonny/plugins/backend_config_page.py:272
+msgid "Save password"
+msgstr "Save password"
+
+#: thonny/plugins/debugger.py:557
+msgid "Function call at %s"
+msgstr "Function call at %s"
+
+#: thonny/plugins/debugger.py:1006
+msgid "Local variables"
+msgstr "Local variables"
+
+#: thonny/plugins/debugger.py:1038
+msgid "Function"
+msgstr "Function"
+
+#: thonny/plugins/debugger.py:1039
+msgid "Location"
+msgstr "Location"
+
+#: thonny/plugins/debugger.py:1115
+msgid "If last command raised an exception then this view will show the stacktrace."
+msgstr "If last command raised an exception then this view will show the stacktrace."
+
+#: thonny/plugins/heap.py:22
+msgid "ID"
+msgstr "ID"
+
+#: thonny/plugins/object_inspector.py:92
+msgid "Data"
+msgstr "Data"
+
+#: thonny/plugins/object_inspector.py:93
+msgid "Attributes"
+msgstr "Attributes"
+
+#: thonny/plugins/object_inspector.py:537
+msgid "Index"
+msgstr "Index"
+
+#: thonny/plugins/object_inspector.py:615
+msgid "Key ID"
+msgstr "Key ID"
+
+#: thonny/plugins/object_inspector.py:616
+msgid "Key"
+msgstr "Key"
+
+#: thonny/plugins/variables.py:39
+msgid "Back to\n"
+"%s"
+msgstr "Back to\n"
+"%s"
+
+#: thonny/plugins/micropython/mp_front.py:453
+msgid "Port or WebREPL"
+msgstr "Port or WebREPL"
+
+#: thonny/plugins/micropython/mp_front.py:599
+msgid "Password"
+msgstr "Password"
+
+#: thonny/plugins/debugger.py:964
+msgid "Source code"
+msgstr "Source code"
+
+#: thonny/plugins/general_config_page.py:29
+msgid "Use Tk file dialogs instead of Zenity"
+msgstr "Use Tk file dialogues instead of Zenity"
+
+#: thonny/plugins/general_config_page.py:30
+msgid "Select if the file dialogs end up behind the main window"
+msgstr "Select if the file dialogues end up behind the main window"
+
+#: thonny/plugins/general_config_page.py:97
+msgid "Environment variables (one KEY=VALUE per line)"
+msgstr "Environment variables (one KEY=VALUE per line)"
+
+#: thonny/base_file_browser.py:722
+msgid "New file"
+msgstr "New file"
+
+#: thonny/base_file_browser.py:740
+msgid "Rename"
+msgstr "Rename"
+
+#: thonny/base_file_browser.py:928
+msgid "Rename '%s'"
+msgstr "Rename '%s'"
+
+#: thonny/base_file_browser.py:928
+msgid "Enter new name"
+msgstr "Enter new name"
+
+#: thonny/base_file_browser.py:1016
+msgid "Paste failed"
+msgstr "Paste failed"
+
+#: thonny/base_file_browser.py:1016
+msgid "There are conflicting folders"
+msgstr "There are conflicting folders"
+
+#: thonny/base_file_browser.py:1144
+msgid "File already exists"
+msgstr "File already exists"
+
+#: thonny/base_file_browser.py:1212
+msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
+msgstr "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
+
+#: thonny/editors.py:38
+msgid "Python files"
+msgstr "Python files"
+
+#: thonny/editors.py:123 thonny/editors.py:189
+msgid "<untitled>"
+msgstr "<untitled>"
+
+#: thonny/editors.py:150
+msgid "File is gone"
+msgstr "File is gone"
+
+#: thonny/editors.py:153
+msgid "Do you want to also close the editor?"
+msgstr "Do you want to also close the editor?"
+
+#: thonny/editors.py:169
+msgid "External modification"
+msgstr "External modification"
+
+#: thonny/editors.py:172
+msgid "Do you want to discard current editor content and reload the file from disk?"
+msgstr "Do you want to discard current editor content and reload the file from disk?"
+
+#: thonny/editors.py:588
+msgid "Python files usually have .py extension."
+msgstr "Python files usually have .py extension."
+
+#: thonny/editors.py:590
+msgid "Did you mean '%s'?"
+msgstr "Did you mean '%s'?"
+
+#: thonny/editors.py:759
+msgid "Move / rename..."
+msgstr "Move / rename..."
+
+#: thonny/editors.py:768
+msgid "Go to line..."
+msgstr "Go to line..."
+
+#: thonny/editors.py:1010
+msgid "Line number"
+msgstr "Line number"
+
+#: thonny/editors.py:1156
+msgid "Do you want to save files before closing?"
+msgstr "Do you want to save files before closing?"
+
+#: thonny/editors.py:1158
+msgid "Do you want to save file before closing?"
+msgstr "Do you want to save file before closing?"
+
+#: thonny/editors.py:1161
+msgid "Save On Close"
+msgstr "Save On Close"
+
+#: thonny/misc_utils.py:539
+msgid "Command not available"
+msgstr "Command not available"
+
+#: thonny/misc_utils.py:540
+msgid "This command is not available if Thonny is run via Flatpak"
+msgstr "This command is not available if Thonny is run via Flatpak"
+
+#: thonny/workbench.py:700 thonny/workbench.py:799
+msgid "Support Ukraine"
+msgstr "Support Ukraine"
+
+#: thonny/plugins/backend_config_page.py:90
+msgid "Which kind of interpreter should Thonny use for running your code?"
+msgstr "Which kind of interpreter should Thonny use for running your code?"
+
+#: thonny/plugins/calltip.py:159
+msgid "Show parameter info"
+msgstr "Show parameter info"
+
+#: thonny/plugins/editor_config_page.py:41
+msgid "Automatically show parameter info after typing '('"
+msgstr "Automatically show parameter info after typing '('"
+
+#: thonny/plugins/editor_config_page.py:47
+msgid "Automatically propose completions while typing"
+msgstr "Automatically propose completions while typing"
+
+#: thonny/plugins/editor_config_page.py:52
+msgid "Automatically show documentation for completions"
+msgstr "Automatically show documentation for completions"
+
+#: thonny/plugins/editor_config_page.py:57
+msgid "Request completions with Tab-key in editors"
+msgstr "Request completions with Tab-key in editors"
+
+#: thonny/plugins/editor_config_page.py:62
+msgid "Request completions with Tab-key in Shell"
+msgstr "Request completions with Tab-key in Shell"
+
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
+msgid "Problem"
+msgstr "Problem"
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Could not find definition"
+msgstr "Could not find definition"
+
+#: thonny/plugins/shell_config_page.py:17
+msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
+msgstr "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:196
+msgid "Thonny's Python"
+msgstr "Thonny's Python"
+
+#: thonny/plugins/micropython/mp_front.py:496
+msgid "Interrupt working program on connect"
+msgstr "Interrupt working program on connect"
+
+#: thonny/plugins/micropython/mp_front.py:504
+msgid "Synchronize device's real time clock"
+msgstr "Synchronize device's real time clock"
+
+#: thonny/plugins/micropython/mp_front.py:510
+msgid "Use local time in real time clock"
+msgstr "Use local time in real time clock"
+
+#: thonny/plugins/micropython/mp_front.py:516
+msgid "Restart interpreter before running a script"
+msgstr "Restart interpreter before running a script"
+
+#: thonny/plugins/micropython/pip_gui.py:26
+msgid "This doesn't look like MicroPython/CircuitPython package.\n"
+"Are you sure you want to install it?"
+msgstr "This doesn't look like MicroPython/CircuitPython package.\n"
+"Are you sure you want to install it?"
+
+#: thonny/base_file_browser.py:853
+msgid "Moving to Trash"
+msgstr "Moving to Trash"
+
+#: thonny/base_file_browser.py:854
+msgid "Move %s to Trash?"
+msgstr "Move %s to Trash?"
+
+#: thonny/base_file_browser.py:861
+msgid "Moving %s to Trash"
+msgstr "Moving %s to Trash"
+
+#: thonny/base_file_browser.py:666
+msgid "Open in default external app"
+msgstr "Open in default external app"
+
+#: thonny/base_file_browser.py:1210
+msgid "Opening remote files in external app is not supported."
+msgstr "Opening remote files in external app is not supported."
+
+#: thonny/base_file_browser.py:1217
+msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
+msgstr "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
+
+#: thonny/editors.py:151
+msgid "Looks like '%s' was deleted or moved."
+msgstr "Looks like '%s' was deleted or moved."
+
+#: thonny/editors.py:170
+msgid "Looks like '%s' was modified outside of the editor."
+msgstr "Looks like '%s' was modified outside of the editor."
+
+#: thonny/plugins/cpython_frontend/cp_front.py:256
+msgid "NB! Thonny only supports Python %s and later"
+msgstr "NB! Thonny only supports Python %s and later"
+
+#: thonny/editors.py:1010
+msgid "Go to line"
+msgstr "Go to line"
+
+#: thonny/workbench.py:703
+msgid "Support"
+msgstr "Support"
+
+#: thonny/editors.py:399 thonny/editors.py:414
+msgid "Could not save"
+msgstr "Could not save"
+
+#: thonny/plugins/general_config_page.py:135
+msgid "Warning"
+msgstr "Warning"
+
+#: thonny/plugins/general_config_page.py:136
+msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
+"Did you intend this?"
+msgstr "If you quote the value of an environment variable, the quotes will be part of the value.\n"
+"Did you intend this?"
+
+#: thonny/workbench.py:870
+msgid "Install MicroPython"
+msgstr "Install MicroPython"
+
+#: thonny/workbench.py:874
+msgid "Install CircuitPython"
+msgstr "Install CircuitPython"
+
+#: thonny/plugins/backend_config_page.py:210
+msgid "Make uploaded shebang scripts executable"
+msgstr "Make uploaded shebang scripts executable"
+
+#: thonny/plugins/editor_config_page.py:91
+msgid "Make saved shebang scripts executable"
+msgstr "Make saved shebang scripts executable"
+
+#: thonny/plugins/files.py:224
+msgid "Activate virtual environment"
+msgstr "Activate virtual environment"
+
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
+msgid "Target"
+msgstr "Target"
+
+#: thonny/plugins/pythontutor.py:41
+msgid "Visualize current script at Python Tutor"
+msgstr "Visualize current script at Python Tutor"
+
+#: thonny/plugins/todo_view.py:43
+msgid "Line"
+msgstr "Line"
+
+#: thonny/plugins/todo_view.py:44
+msgid "Info"
+msgstr "Info"
+
+#: thonny/plugins/todo_view.py:121
+msgid "No line marked with #todo found"
+msgstr "No line marked with #todo found"
+
+#: thonny/plugins/todo_view.py:141
+msgid "TODO"
+msgstr "TODO"
+
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
+msgid "Install or update %s"
+msgstr "Install or update %s"
+
+#: thonny/plugins/cpython_frontend/__init__.py:24
+msgid "Local Python 3"
+msgstr "Local Python 3"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:266
+msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+msgstr "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+
+#: thonny/plugins/ev3/__init__.py:72
+msgid "Preparations (skip the VS Code part)"
+msgstr "Preparations (skip the VS Code part)"
+
+#: thonny/plugins/ev3/__init__.py:78
+msgid "Default password"
+msgstr "Default password"
+
+#: thonny/running.py:392
+msgid "Information"
+msgstr "Information"
+
+#: thonny/running.py:393
+msgid "For debugging the program must be saved first."
+msgstr "For debugging the program must be saved first."
+
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr "%s doesn't look like a text file"
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr "Problem loading file"
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr "File is open"
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr "Permission Error"
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr "Looks like this file or folder is not writable."
+
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr "Back-end is not ready"
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr "Where to save to?"
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr "Potential problem"
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr "If you name your script '%s', you won't be able to import the library module named '%s'"
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr "Do you still want to use this name for your script?"
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr "Got permission error when trying to load\n"
+"%s"
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr "Try opening it with File => Open."
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr "Permission error"
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr "Allow running unnamed programs"
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr "Licence"
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr "Warn if a user module shadows a library module"
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
+msgstr "Search micropython-lib and PyPI"
+
diff --git a/thonny/locale/en_US/LC_MESSAGES/thonny.mo b/thonny/locale/en_US/LC_MESSAGES/thonny.mo
index db34ad1..07b8064 100644
Binary files a/thonny/locale/en_US/LC_MESSAGES/thonny.mo and b/thonny/locale/en_US/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/es_ES/LC_MESSAGES/thonny.mo b/thonny/locale/es_ES/LC_MESSAGES/thonny.mo
index f85bb4c..7ee3af7 100644
Binary files a/thonny/locale/es_ES/LC_MESSAGES/thonny.mo and b/thonny/locale/es_ES/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/es_ES/LC_MESSAGES/thonny.po b/thonny/locale/es_ES/LC_MESSAGES/thonny.po
index 19c04fb..2319d6c 100644
--- a/thonny/locale/es_ES/LC_MESSAGES/thonny.po
+++ b/thonny/locale/es_ES/LC_MESSAGES/thonny.po
@@ -7,63 +7,63 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: es\n"
 
-#: thonny/workbench.py:361
+#: thonny/workbench.py:375
 msgid "File"
 msgstr "Fichero"
 
-#: thonny/workbench.py:362
+#: thonny/workbench.py:376
 msgid "Edit"
 msgstr "Editar"
 
-#: thonny/workbench.py:363
+#: thonny/workbench.py:377
 msgid "View"
-msgstr "Visualización"
+msgstr "Visualizar"
 
-#: thonny/running.py:116 thonny/workbench.py:364
+#: thonny/running.py:161 thonny/workbench.py:378
 msgid "Run"
 msgstr "Ejecutar"
 
-#: thonny/workbench.py:365
+#: thonny/workbench.py:379
 msgid "Tools"
 msgstr "Herramientas"
 
-#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:366
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
 msgid "Help"
 msgstr "Ayuda"
 
-#: thonny/workbench.py:583
+#: thonny/workbench.py:598
 msgid "Exit"
 msgstr "Salir"
 
-#: thonny/workbench.py:610
+#: thonny/workbench.py:625
 msgid "Decrease font size"
 msgstr "Disminuir el tamaño de la fuente"
 
-#: thonny/workbench.py:622
+#: thonny/workbench.py:637
 msgid "Focus editor"
 msgstr "Ir al editor"
 
-#: thonny/workbench.py:631
+#: thonny/workbench.py:646
 msgid "Focus shell"
 msgstr "Ir al terminal"
 
-#: thonny/workbench.py:642
+#: thonny/workbench.py:656
 msgid "Maximize view"
 msgstr "Maximizar vista"
 
-#: thonny/workbench.py:654
+#: thonny/workbench.py:668
 msgid "Full screen"
 msgstr "Pantalla completa"
 
-#: thonny/workbench.py:1457
+#: thonny/workbench.py:1467
 msgid "Program arguments"
 msgstr "Parámetros de ejecución del programa"
 
-#: thonny/plugins/about.py:21 thonny/plugins/about.py:140
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
 msgid "About Thonny"
 msgstr "Acerca de Thonny"
 
-#: thonny/plugins/about.py:66
+#: thonny/plugins/about.py:81
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -72,7 +72,7 @@ msgid "Made in\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:86
+#: thonny/plugins/about.py:101
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -81,11 +81,11 @@ msgid "This program comes with\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:129
+#: thonny/plugins/about.py:142
 msgid "Version history"
 msgstr "Historial de versiones"
 
-#: thonny/plugins/about.py:136
+#: thonny/plugins/about.py:149
 msgid "Report problems"
 msgstr "Informar de un problema"
 
@@ -109,15 +109,15 @@ msgstr "Realizar comprobaciones MyPy"
 msgid "Disabled checks (one id per line)"
 msgstr "Desactivar comprobaciones (un id por línea)"
 
-#: thonny/assistance.py:985 thonny/plugins/assistant_config_page.py:74
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Asistente"
 
-#: thonny/plugins/autocomplete.py:512
+#: thonny/plugins/autocomplete.py:529
 msgid "Auto-complete"
 msgstr "Autocompletar"
 
-#: thonny/plugins/backend_config_page.py:337
+#: thonny/plugins/backend_config_page.py:335
 msgid "Interpreter"
 msgstr "Intérprete"
 
@@ -135,17 +135,17 @@ msgstr "Birdseye es un depurador de Python que debe instalarse por separado.\n"
 
 #: thonny/plugins/birdseye_frontend.py:84
 msgid "Debug current script (birdseye)"
-msgstr "Depura el script actual (birdseye)"
+msgstr "Depurar el script actual (birdseye)"
 
-#: thonny/plugins/commenting_indenting.py:172
+#: thonny/plugins/commenting_indenting.py:171
 msgid "Toggle comment"
 msgstr "Activar/desactivar como comentario"
 
-#: thonny/plugins/commenting_indenting.py:182
+#: thonny/plugins/commenting_indenting.py:181
 msgid "Comment out"
 msgstr "Convertir en comentario"
 
-#: thonny/plugins/commenting_indenting.py:192
+#: thonny/plugins/commenting_indenting.py:191
 msgid "Uncomment"
 msgstr "Desactivar como comentario"
 
@@ -157,18 +157,18 @@ msgstr "Deshacer"
 msgid "Redo"
 msgstr "Rehacer"
 
-#: thonny/base_file_browser.py:721 thonny/plugins/common_editing_commands.py:49
-#: thonny/ui_utils.py:2294
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
 msgid "Cut"
 msgstr "Cortar"
 
-#: thonny/base_file_browser.py:722 thonny/plugins/common_editing_commands.py:61
-#: thonny/ui_utils.py:2295
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
 msgid "Copy"
 msgstr "Copiar"
 
-#: thonny/base_file_browser.py:724 thonny/base_file_browser.py:730
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2296
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
 msgid "Paste"
 msgstr "Pegar"
 
@@ -176,15 +176,15 @@ msgstr "Pegar"
 msgid "Select all"
 msgstr "Seleccionar todo"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1401
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
 msgid "Run to cursor"
 msgstr "Ejecutar hasta el cursor"
 
-#: thonny/plugins/debugger.py:982
+#: thonny/plugins/debugger.py:985
 msgid "Can't close yet"
 msgstr "Aún no se puede cerrar"
 
-#: thonny/plugins/debugger.py:983
+#: thonny/plugins/debugger.py:986
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr "Utiliza la orden \"Stop\" si desea cancelar la depuración"
 
@@ -233,11 +233,11 @@ msgstr "Exportar registros de uso..."
 msgid "Events"
 msgstr "Eventos"
 
-#: thonny/plugins/files.py:606
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "Archivos"
 
-#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:430
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
 msgid "Find & Replace"
 msgstr "Encontrar y reemplazar…"
 
@@ -245,43 +245,43 @@ msgstr "Encontrar y reemplazar…"
 msgid "Find:"
 msgstr "Encontrar:"
 
-#: thonny/plugins/find_replace.py:87
+#: thonny/plugins/find_replace.py:90
 msgid "Replace with:"
 msgstr "Reemplazar por:"
 
-#: thonny/plugins/find_replace.py:105
+#: thonny/plugins/find_replace.py:108
 msgid "Case sensitive"
 msgstr "Sensible a mayúsculas"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:115
 msgid "Up"
 msgstr "Arriba"
 
-#: thonny/plugins/find_replace.py:116
+#: thonny/plugins/find_replace.py:119
 msgid "Down"
 msgstr "Abajo"
 
-#: thonny/plugins/find_replace.py:125
+#: thonny/plugins/find_replace.py:128
 msgid "Find"
 msgstr "Encontrar"
 
-#: thonny/plugins/find_replace.py:135
+#: thonny/plugins/find_replace.py:138
 msgid "Replace"
 msgstr "Reemplazar"
 
-#: thonny/plugins/find_replace.py:143
+#: thonny/plugins/find_replace.py:146
 msgid "Replace+Find"
 msgstr "Reemplazar+Encontrar"
 
-#: thonny/plugins/find_replace.py:153
+#: thonny/plugins/find_replace.py:156
 msgid "Replace all"
 msgstr "Reemplazar todo"
 
-#: thonny/plugins/find_replace.py:249
+#: thonny/plugins/find_replace.py:254
 msgid "Enter string to be replaced."
 msgstr "Introducir la cadena a sustituir."
 
-#: thonny/plugins/find_replace.py:333
+#: thonny/plugins/find_replace.py:339
 msgid "The specified text was not found!"
 msgstr "No se ha encontrado el texto especificado"
 
@@ -339,7 +339,7 @@ msgstr "Objeto anterior"
 msgid "Next object"
 msgstr "Objeto siguiente"
 
-#: thonny/plugins/object_inspector.py:733
+#: thonny/plugins/object_inspector.py:732
 msgid "Object inspector"
 msgstr "Inspector de objetos"
 
@@ -351,12 +351,12 @@ msgstr "Esquema"
 msgid "Pygame Zero mode"
 msgstr "Modo Pygame Zero"
 
-#: thonny/plugins/pip_gui.py:79
+#: thonny/plugins/pip_gui.py:80
 msgid "Uninstall"
 msgstr "Desinstalar"
 
-#: thonny/editors.py:667 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
-#: thonny/ui_utils.py:1871 thonny/workdlg.py:162
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
 msgid "Close"
 msgstr "Cerrar"
 
@@ -368,60 +368,60 @@ msgstr "Clic "
 msgid "here"
 msgstr "aquí"
 
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:77
 msgid "Upgrade"
 msgstr "Actualizar"
 
-#: thonny/plugins/esp/__init__.py:349
-#: thonny/plugins/micropython/uf2dialog.py:348 thonny/plugins/pip_gui.py:73
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
 msgid "Install"
 msgstr "Instalar"
 
-#: thonny/plugins/pip_gui.py:535
+#: thonny/plugins/pip_gui.py:570
 msgid "Could not find the package from PyPI."
 msgstr "No se ha podido encontrar el paquete en PyPI."
 
-#: thonny/plugins/pip_gui.py:557
+#: thonny/plugins/pip_gui.py:592
 msgid "Latest stable version"
 msgstr "Última versión estable"
 
-#: thonny/plugins/pip_gui.py:559
+#: thonny/plugins/pip_gui.py:594
 msgid "Latest version"
 msgstr "Última versión"
 
-#: thonny/plugins/pip_gui.py:561
+#: thonny/plugins/pip_gui.py:596
 msgid "Summary"
 msgstr "Resumen"
 
-#: thonny/plugins/pip_gui.py:563
+#: thonny/plugins/pip_gui.py:598
 msgid "Author"
 msgstr "Autor"
 
-#: thonny/plugins/pip_gui.py:565
+#: thonny/plugins/pip_gui.py:602
 msgid "Homepage"
 msgstr "Página principal"
 
-#: thonny/plugins/pip_gui.py:567
+#: thonny/plugins/pip_gui.py:604
 msgid "Bugtracker"
 msgstr "Rastreador de errores"
 
-#: thonny/plugins/pip_gui.py:569
+#: thonny/plugins/pip_gui.py:606
 msgid "Documentation"
 msgstr "Documentación"
 
-#: thonny/plugins/pip_gui.py:571
+#: thonny/plugins/pip_gui.py:608
 msgid "PyPI page"
 msgstr "Página de PyPI"
 
-#: thonny/plugins/pip_gui.py:611
+#: thonny/plugins/pip_gui.py:648
 msgid "Requires"
 msgstr "Requiere"
 
-#: thonny/plugins/pip_gui.py:743
+#: thonny/plugins/pip_gui.py:802
 msgid "Really uninstall?"
 msgstr "¿Desea desinstalarlo?"
 
-#: thonny/plugins/pip_gui.py:748
+#: thonny/plugins/pip_gui.py:807
 msgid "Are you sure you want to uninstall it?"
 msgstr "¿Está seguro de que desea desinstalarlo?"
 
@@ -435,64 +435,64 @@ msgstr "Volver al marco actual"
 msgid "Variables"
 msgstr "Variables"
 
-#: thonny/base_file_browser.py:1558
+#: thonny/base_file_browser.py:1576
 msgid "This computer"
 msgstr "Este computador"
 
-#: thonny/base_file_browser.py:641
+#: thonny/base_file_browser.py:648
 msgid "Refresh"
 msgstr "Refrescar"
 
-#: thonny/base_file_browser.py:650
+#: thonny/base_file_browser.py:657
 msgid "Focus into"
 msgstr "Centrarse en"
 
-#: thonny/base_file_browser.py:1393 thonny/base_file_browser.py:1405
-#: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
 msgid "Error"
 msgstr "Error"
 
-#: thonny/base_file_browser.py:1393 thonny/base_file_browser.py:1405
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
 msgid "You need to select a file!"
 msgstr "¡Debes seleccionar un archivo!"
 
-#: thonny/base_file_browser.py:1409
+#: thonny/base_file_browser.py:1427
 msgid "Overwrite?"
 msgstr "¿Sobreescribir?"
 
-#: thonny/base_file_browser.py:1409
+#: thonny/base_file_browser.py:1427
 msgid "Do you want to overwrite '%s' ?"
 msgstr "¿Quieres sobreescribir '%s'?"
 
-#: thonny/editors.py:632 thonny/editors.py:634
+#: thonny/editors.py:658 thonny/editors.py:660
 msgid "New"
 msgstr "Nuevo programa"
 
-#: thonny/editors.py:645
+#: thonny/editors.py:671
 msgid "Open..."
 msgstr "Abrir fichero..."
 
-#: thonny/editors.py:647
+#: thonny/editors.py:673
 msgid "Load"
 msgstr "Cargar"
 
-#: thonny/editors.py:656
+#: thonny/editors.py:682
 msgid "Recent files"
 msgstr "Archivos recientes"
 
-#: thonny/editors.py:678 thonny/ui_utils.py:493
+#: thonny/editors.py:704 thonny/ui_utils.py:498
 msgid "Close all"
 msgstr "Cerrar todos"
 
-#: thonny/editors.py:688 thonny/editors.py:690
+#: thonny/editors.py:714 thonny/editors.py:716
 msgid "Save"
 msgstr "Guardar"
 
-#: thonny/editors.py:713
+#: thonny/editors.py:739
 msgid "Save as..."
 msgstr "Guardar como..."
 
-#: thonny/editors.py:724
+#: thonny/editors.py:750
 msgid "Save copy..."
 msgstr "Guardar una copia..."
 
@@ -500,113 +500,113 @@ msgstr "Guardar una copia..."
 msgid "Thonny options"
 msgstr "Opciones de Thonny"
 
-#: thonny/running.py:115
+#: thonny/running.py:160
 msgid "Run current script"
 msgstr "Ejecutar el script actual"
 
-#: thonny/running.py:146
+#: thonny/running.py:191
 msgid "Run current script in terminal"
 msgstr "Ejecutar el script actual en terminal"
 
-#: thonny/running.py:159
+#: thonny/running.py:204
 msgid "Stop/Restart backend"
 msgstr "Detener/Reiniciar back-end"
 
-#: thonny/running.py:160
+#: thonny/running.py:205
 msgid "Stop"
 msgstr "Detener"
 
-#: thonny/running.py:171
+#: thonny/running.py:216
 msgid "Interrupt execution"
 msgstr "Interrumpir ejecución"
 
-#: thonny/running.py:184
+#: thonny/running.py:229
 msgid "Send EOF / Soft reboot"
 msgstr "Envía EOF / Reinicio suave"
 
-#: thonny/running.py:195
+#: thonny/running.py:240
 msgid "Disconnect"
 msgstr "Desconectar"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:268
+#: thonny/plugins/cpython_frontend/cp_front.py:295
 msgid "Python interpreters"
 msgstr "Intérpretes de Python"
 
-#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:269
-#: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
 msgid "all files"
 msgstr "todos los archivos"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:297
+#: thonny/plugins/cpython_frontend/cp_front.py:324
 msgid "Select empty directory for new virtual environment"
 msgstr "Seleccione un directorio vacío para el nuevo entorno virtual."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:304
+#: thonny/plugins/cpython_frontend/cp_front.py:331
 msgid "Bad directory"
 msgstr "Directorio incorrecto"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:305
+#: thonny/plugins/cpython_frontend/cp_front.py:332
 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_frontend/cp_front.py:322
+#: thonny/plugins/cpython_frontend/cp_front.py:349
 msgid "Creating virtual environment"
 msgstr "Creando ambiente virtual."
 
-#: thonny/shell.py:100
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "Limpiar consola"
 
-#: thonny/shell.py:174
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "Plóter"
 
-#: thonny/shell.py:306
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "Limpiar"
 
-#: thonny/shell.py:319
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "Muestra Plotter"
 
-#: thonny/shell.py:1648
+#: thonny/shell.py:1660
 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:1659
+#: thonny/shell.py:1671
 msgid "Wrap text (may be slow)"
 msgstr "Ajustar texto (puede ser lento)"
 
-#: thonny/ui_utils.py:1866
+#: thonny/ui_utils.py:1879
 msgid "Copy to clipboard"
 msgstr "Copiar al portapapeles"
 
-#: thonny/shell.py:1701
+#: thonny/shell.py:1713
 msgid "Squeezed text (%d characters)"
 msgstr "Texto reducido (%d caracteres)"
 
-#: thonny/shell.py:1871
+#: thonny/shell.py:1883
 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:1873
+#: thonny/shell.py:1885
 msgid "See Help for details."
 msgstr "Vea Ayuda para detalles."
 
-#: thonny/ui_utils.py:492
+#: thonny/ui_utils.py:497
 msgid "Close others"
 msgstr "Cerrar otros"
 
-#: thonny/ui_utils.py:1722
+#: thonny/ui_utils.py:1734
 msgid "Copying"
 msgstr "Copiando"
 
-#: thonny/ui_utils.py:1725
+#: thonny/ui_utils.py:1737
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -616,65 +616,65 @@ msgstr "Copiando\n"
 "a\n"
 "   %s"
 
-#: thonny/base_file_browser.py:1364 thonny/config_ui.py:42 thonny/export.py:28
-#: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
-#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1818
-#: thonny/workdlg.py:164 thonny/workdlg.py:209
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: thonny/base_file_browser.py:1355 thonny/config_ui.py:41 thonny/export.py:25
-#: thonny/plugins/about.py:100 thonny/plugins/backend_config_page.py:285
-#: thonny/ui_utils.py:154 thonny/ui_utils.py:1815 thonny/workdlg.py:206
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
 msgid "OK"
 msgstr "Ok"
 
-#: thonny/ui_utils.py:2300
+#: thonny/ui_utils.py:2345
 msgid "Select All"
 msgstr "Seleccionar todo"
 
-#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:155
-#: thonny/workbench.py:162
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:164
 msgid "Shell"
 msgstr "Consola"
 
-#: thonny/workbench.py:593
+#: thonny/workbench.py:608
 msgid "Options..."
 msgstr "Opciones..."
 
-#: thonny/workbench.py:600
+#: thonny/workbench.py:615
 msgid "Increase font size"
 msgstr "Aumentar tamaño de fuente"
 
-#: thonny/workbench.py:665
+#: thonny/workbench.py:679
 msgid "Change font size"
 msgstr "Cambiar tamaño de fuente"
 
-#: thonny/workbench.py:666
+#: thonny/workbench.py:680
 msgid "Zoom"
 msgstr "Zoom"
 
-#: thonny/workbench.py:675
+#: thonny/workbench.py:689
 msgid "Exit Thonny"
 msgstr "Salir de Thonny"
 
-#: thonny/workbench.py:678
+#: thonny/workbench.py:692
 msgid "Quit"
 msgstr "Salir"
 
-#: thonny/workbench.py:1236 thonny/workbench.py:1244
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
 msgid "Overwriting theme '%s'"
 msgstr "Sobrescribir tema '%s "
 
-#: thonny/workbench.py:1428
+#: thonny/workbench.py:1438
 msgid "Program arguments:"
 msgstr "Argumentos del programa:"
 
-#: thonny/workbench.py:1482
+#: thonny/workbench.py:1492
 msgid "Regular mode"
 msgstr "Modo regular"
 
-#: thonny/workbench.py:1483
+#: thonny/workbench.py:1493
 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.)"
@@ -682,71 +682,71 @@ msgstr "La configuración ha sido actualizada. Reinicia Thonny para empezar a tr
 "\n"
 "(Ver 'Herramientas → Opciones → General' si cambias de opinión más tarde.)"
 
-#: thonny/plugins/ast_view.py:212
+#: thonny/plugins/ast_view.py:211
 msgid "Program tree"
 msgstr "Árbol del programa"
 
-#: thonny/plugins/debugger.py:1283
+#: thonny/plugins/debugger.py:1284
 msgid "Resume"
 msgstr "Reanudar"
 
-#: thonny/plugins/debugger.py:1299
+#: thonny/plugins/debugger.py:1300
 msgid "Run / resume"
 msgstr "Ejecutar / reanudar"
 
-#: thonny/plugins/debugger.py:1314
+#: thonny/plugins/debugger.py:1315
 msgid "Debug current script"
-msgstr "Depura el script actual"
+msgstr "Depurar el script actual"
 
-#: thonny/plugins/debugger.py:1316
+#: thonny/plugins/debugger.py:1317
 msgid "Debug"
 msgstr "Depurar"
 
-#: thonny/plugins/debugger.py:1327
+#: thonny/plugins/debugger.py:1328
 msgid "Debug current script (nicer)"
-msgstr "Depura el guión actual (mejor)"
+msgstr "Depurar el script actual (mejor)"
 
-#: thonny/plugins/debugger.py:1339
+#: thonny/plugins/debugger.py:1340
 msgid "Debug current script (faster)"
-msgstr "Depura el script actual (rápidamente)"
+msgstr "Depurar el script actual (rápidamente)"
 
-#: thonny/plugins/debugger.py:1350
+#: thonny/plugins/debugger.py:1351
 msgid "Step over"
-msgstr "Saltando"
+msgstr "Saltar"
 
-#: thonny/plugins/debugger.py:1352
+#: thonny/plugins/debugger.py:1353
 msgid "Over"
 msgstr "Saltar"
 
-#: thonny/plugins/debugger.py:1363
+#: thonny/plugins/debugger.py:1364
 msgid "Step into"
-msgstr "Entrando"
+msgstr "Entrar"
 
-#: thonny/plugins/debugger.py:1365
+#: thonny/plugins/debugger.py:1366
 msgid "Into"
 msgstr "Dentro"
 
-#: thonny/plugins/debugger.py:1376
+#: thonny/plugins/debugger.py:1377
 msgid "Step out"
-msgstr "Saliendo"
+msgstr "Salir"
 
-#: thonny/plugins/debugger.py:1378
+#: thonny/plugins/debugger.py:1379
 msgid "Out"
 msgstr "Salir"
 
-#: thonny/plugins/debugger.py:1413
+#: thonny/plugins/debugger.py:1414
 msgid "Step back"
 msgstr "Volver atrás"
 
-#: thonny/plugins/debugger.py:1415
+#: thonny/plugins/debugger.py:1416
 msgid "Back"
 msgstr "Atrás"
 
-#: thonny/plugins/debugger.py:1421
+#: thonny/plugins/debugger.py:1422
 msgid "Stack"
 msgstr "Pila (stack)"
 
-#: thonny/plugins/debugger.py:1422
+#: thonny/plugins/debugger.py:1423
 msgid "Exception"
 msgstr "Excepción"
 
@@ -820,18 +820,6 @@ msgstr "Actualiza o desinstala"
 msgid "Start by selecting the package from the left."
 msgstr "Comience seleccionando el paquete de la izquierda"
 
-#: thonny/plugins/pip_gui.py:410
-msgid "Target:"
-msgstr "Objetivo:"
-
-#: thonny/plugins/pip_gui.py:414
-msgid "virtual environment"
-msgstr "entorno virtual"
-
-#: thonny/plugins/pip_gui.py:412
-msgid "user site packages"
-msgstr "paquetes del sitio del usuario"
-
 #: thonny/plugins/pip_gui.py:430
 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"
@@ -840,48 +828,48 @@ msgstr "Este diálogo lista todos los paquetes disponibles, pero sólo actualiza
 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:485
+#: thonny/plugins/pip_gui.py:493
 msgid "Installed version:"
 msgstr "Versión instalada:"
 
-#: thonny/plugins/pip_gui.py:487
+#: thonny/plugins/pip_gui.py:495
 msgid "Installed to:"
 msgstr "Instalado en:"
 
-#: thonny/plugins/pip_gui.py:538
+#: thonny/plugins/pip_gui.py:573
 msgid "Please check your spelling!"
 msgstr "¡Por favor revisa tu ortografía!"
 
-#: thonny/plugins/pip_gui.py:542
+#: thonny/plugins/pip_gui.py:577
 msgid "Could not find the package info from PyPI."
 msgstr "No se encontró información del paquete en PyPI."
 
-#: thonny/plugins/pip_gui.py:544 thonny/plugins/pip_gui.py:1326
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
 msgid "Error code:"
 msgstr "Código de error:"
 
-#: thonny/plugins/pip_gui.py:689
+#: thonny/plugins/pip_gui.py:748
 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:744
+#: thonny/plugins/pip_gui.py:803
 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:789
+#: thonny/plugins/pip_gui.py:848
 msgid "Package"
 msgstr "Paquete"
 
-#: thonny/plugins/pip_gui.py:902
+#: thonny/plugins/pip_gui.py:960
 msgid "Manage packages for %s"
 msgstr "Administrar paquetes para %s"
 
-#: thonny/editors.py:571 thonny/plugins/micropython/pip_gui.py:23
-#: thonny/plugins/pip_gui.py:953
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
 msgid "Confirmation"
 msgstr "Confirmación"
 
-#: thonny/plugins/pip_gui.py:954
+#: thonny/plugins/pip_gui.py:1035
 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"
@@ -891,111 +879,111 @@ msgstr "Parece que estás instalando un paquete relacionado con Thonny. Si lo qu
 "\n"
 "¿Seguro que quieres instalar %s para el back-end?"
 
-#: thonny/plugins/pip_gui.py:1059
+#: thonny/plugins/pip_gui.py:1141
 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:1067
+#: thonny/plugins/pip_gui.py:1149
 msgid "Thonny plugin without requirements"
 msgstr "Plugin the Thonny sin requisitos"
 
-#: thonny/plugins/pip_gui.py:1083
+#: thonny/plugins/pip_gui.py:1165
 msgid "Unsuitable requirements"
 msgstr "Requisitos inadecuados"
 
-#: thonny/plugins/pip_gui.py:1084
+#: thonny/plugins/pip_gui.py:1166
 msgid "This package requires different Thonny version:"
 msgstr "Este paquete requiere una versión diferente de Thonny:"
 
-#: thonny/plugins/pip_gui.py:1088
+#: thonny/plugins/pip_gui.py:1170
 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:1125
+#: thonny/plugins/pip_gui.py:1207
 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:1135
+#: thonny/plugins/pip_gui.py:1217
 msgid "Thonny plug-ins"
 msgstr "Plug-ins de Thonny"
 
-#: thonny/plugins/pip_gui.py:1171
+#: thonny/plugins/pip_gui.py:1253
 msgid "Advanced install / upgrade / downgrade"
 msgstr "Instalación / Actualización / Desactualización avanzadas"
 
-#: thonny/plugins/pip_gui.py:1180
+#: thonny/plugins/pip_gui.py:1262
 msgid "Desired version"
 msgstr "Versión deseada"
 
-#: thonny/plugins/pip_gui.py:1239
+#: thonny/plugins/pip_gui.py:1321
 msgid "Upgrade dependencies"
 msgstr "Actualizar dependencias"
 
-#: thonny/plugins/pip_gui.py:1324
+#: thonny/plugins/pip_gui.py:1406
 msgid "Requires:"
 msgstr "Requiere:"
 
-#: thonny/plugins/pip_gui.py:1328
+#: thonny/plugins/pip_gui.py:1410
 msgid "Error:"
 msgstr "Error:"
 
-#: thonny/plugins/pip_gui.py:1541
+#: thonny/plugins/pip_gui.py:1601
 msgid "Manage packages..."
 msgstr "Gestionar paquetes..."
 
-#: thonny/plugins/pip_gui.py:1547
+#: thonny/plugins/pip_gui.py:1607
 msgid "Manage plug-ins..."
-msgstr "Administra plug-ings…"
+msgstr "Administra plugins…"
 
-#: thonny/plugins/replayer.py:365
+#: thonny/plugins/replayer.py:364
 msgid "Open replayer..."
 msgstr "Abrir moviola…"
 
-#: thonny/plugins/run_debug_config_page.py:14
+#: thonny/plugins/run_debug_config_page.py:21
 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
+#: thonny/plugins/run_debug_config_page.py:35
 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
+#: thonny/plugins/run_debug_config_page.py:36
 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
+#: thonny/plugins/run_debug_config_page.py:42
 msgid "Open and close Stack view automatically"
 msgstr "Abrir y cerrar el Stack automáticamente"
 
-#: thonny/plugins/run_debug_config_page.py:30
+#: thonny/plugins/run_debug_config_page.py:43
 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
+#: thonny/plugins/run_debug_config_page.py:52
 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
+#: thonny/plugins/run_debug_config_page.py:53
 msgid "May make debugging slower."
 msgstr "Tal vez haga de la depuración más lenta."
 
-#: thonny/plugins/run_debug_config_page.py:45
+#: thonny/plugins/run_debug_config_page.py:58
 msgid "Preferred debugger"
 msgstr "Depurador preferido"
 
-#: thonny/plugins/run_debug_config_page.py:57
+#: thonny/plugins/run_debug_config_page.py:70
 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
+#: thonny/plugins/run_debug_config_page.py:75
 msgid "Birdseye port"
 msgstr "Puerto para Birdsye"
 
-#: thonny/plugins/run_debug_config_page.py:66
+#: thonny/plugins/run_debug_config_page.py:79
 msgid "(restart Thonny after changing this)"
 msgstr "(Reinicia Thonny luego de cambiar esto)"
 
-#: thonny/plugins/run_debug_config_page.py:74
+#: thonny/plugins/run_debug_config_page.py:87
 msgid "Run & Debug"
 msgstr "Ejecutar y Depurar"
 
@@ -1040,61 +1028,61 @@ msgstr "¡Aviso! El cierre automático debe estar habilitado en la configuració
 msgid "Terminal"
 msgstr "Terminal"
 
-#: thonny/plugins/theme_and_font_config_page.py:40
+#: thonny/plugins/theme_and_font_config_page.py:39
 msgid "UI theme"
 msgstr "Aspecto"
 
-#: thonny/plugins/theme_and_font_config_page.py:53
+#: thonny/plugins/theme_and_font_config_page.py:52
 msgid "Syntax theme"
 msgstr "Color Sintaxis"
 
-#: thonny/plugins/theme_and_font_config_page.py:85
+#: thonny/plugins/theme_and_font_config_page.py:84
 msgid "Editor font"
 msgstr "Letra editor"
 
-#: thonny/plugins/theme_and_font_config_page.py:108
+#: thonny/plugins/theme_and_font_config_page.py:107
 msgid "IO font"
 msgstr "Letra Ent/Sal"
 
-#: thonny/plugins/theme_and_font_config_page.py:133
+#: thonny/plugins/theme_and_font_config_page.py:132
 msgid "Preview"
 msgstr "Previsualizar"
 
-#: thonny/plugins/theme_and_font_config_page.py:151
+#: thonny/plugins/theme_and_font_config_page.py:150
 msgid "This is a comment"
 msgstr "Este es un comentario"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:153
 msgid "The answer is"
 msgstr "La respuesta es"
 
-#: thonny/plugins/theme_and_font_config_page.py:158
+#: thonny/plugins/theme_and_font_config_page.py:157
 msgid "unclosed_string"
 msgstr "string_sin_cerrar"
 
-#: thonny/plugins/theme_and_font_config_page.py:160
+#: thonny/plugins/theme_and_font_config_page.py:159
 msgid "blah, blah"
 msgstr "bla, bla"
 
-#: thonny/plugins/theme_and_font_config_page.py:184
+#: thonny/plugins/theme_and_font_config_page.py:183
 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:223
+#: thonny/plugins/theme_and_font_config_page.py:222
 msgid "Enter an integer"
 msgstr "Ingresa un número entero"
 
-#: thonny/plugins/theme_and_font_config_page.py:236
+#: thonny/plugins/theme_and_font_config_page.py:235
 msgid "Theme & Font"
 msgstr "Temas y Fuentes"
 
 #: thonny/plugins/thonny_folders.py:19
 msgid "Open Thonny program folder..."
-msgstr "Abre la carpeta Thonny program…"
+msgstr "Abre la carpeta del código de Thonny…"
 
 #: thonny/plugins/thonny_folders.py:24
 msgid "Open Thonny data folder..."
-msgstr "Abre la carpeta Thonny data…"
+msgstr "Abre la carpeta de datos de Thonny…"
 
 #: thonny/plugins/help/__init__.py:70
 msgid "Home"
@@ -1104,35 +1092,35 @@ msgstr "Inicio"
 msgid "Help contents"
 msgstr "Contenidos de la Ayuda"
 
-#: thonny/plugins/micropython/mp_front.py:300
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "Dispositivo CircuitPython"
 
-#: thonny/plugins/micropython/mp_front.py:304
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "Dispositivo MicroPython"
 
-#: thonny/plugins/micropython/mp_front.py:541
+#: thonny/plugins/micropython/mp_front.py:558
 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/mp_front.py:544
+#: thonny/plugins/micropython/mp_front.py:561
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "buscar por un nombre de dispositivo, \"USB Serial\" o \"UART\""
 
-#: thonny/plugins/micropython/mp_front.py:546
+#: thonny/plugins/micropython/mp_front.py:563
 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/mp_front.py:439
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port"
 msgstr "Puerto"
 
-#: thonny/plugins/micropython/mp_front.py:449
+#: thonny/plugins/micropython/mp_front.py:458
 msgid "Try to detect port automatically"
 msgstr "Intenta detectar el puerto automáticamente"
 
-#: thonny/plugins/micropython/__init__.py:25
+#: thonny/plugins/micropython/__init__.py:24
 msgid "MicroPython (generic)"
 msgstr "MicroPython (genérico)"
 
@@ -1144,7 +1132,7 @@ msgstr "Imprimir..."
 msgid "Open system shell..."
 msgstr "Abre el shell del sistema…"
 
-#: thonny/plugins/backend_config_page.py:110
+#: thonny/plugins/backend_config_page.py:109
 msgid "Details"
 msgstr "Detalles"
 
@@ -1156,7 +1144,7 @@ msgstr "Instalar desde archivo \"requirements.txt\""
 msgid "Install from local file"
 msgstr "Instalar desde archivo local"
 
-#: thonny/plugins/pip_gui.py:1118
+#: thonny/plugins/pip_gui.py:1200
 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"
@@ -1166,101 +1154,97 @@ msgstr "Este cuadro de diálogo es para administrar los complementos de Thonny y
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (genérico)"
 
-#: thonny/plugins/commenting_indenting.py:143
+#: thonny/plugins/commenting_indenting.py:142
 msgid "Indent selected lines"
 msgstr "Indentar las líneas seleccionadas"
 
-#: thonny/plugins/commenting_indenting.py:153
+#: thonny/plugins/commenting_indenting.py:152
 msgid "Dedent selected lines"
 msgstr "Des-indentar las líneas seleccionadas"
 
-#: thonny/workbench.py:1471
+#: thonny/workbench.py:1481
 msgid "Switch to\n"
 "regular\n"
 "mode"
 msgstr "Cambiar a modo regular"
 
-#: thonny/plugins/microbit/__init__.py:58
+#: thonny/plugins/microbit/__init__.py:62
 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:60
+#: thonny/plugins/microbit/__init__.py:64
 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:44
-msgid "please wait"
-msgstr "por favor espere"
-
-#: thonny/misc_utils.py:151
+#: thonny/misc_utils.py:177
 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:154
+#: thonny/misc_utils.py:180
 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:170
+#: thonny/misc_utils.py:196
 msgid "Can't find suitable disk"
 msgstr "No es posible encontrar un disco apropiado"
 
-#: thonny/base_file_browser.py:287
+#: thonny/base_file_browser.py:294
 msgid "%d items"
 msgstr "%d ítemes"
 
-#: thonny/base_file_browser.py:736
+#: thonny/base_file_browser.py:743
 msgid "Move to Trash"
 msgstr "Mover al basurero"
 
-#: thonny/base_file_browser.py:739
+#: thonny/base_file_browser.py:746
 msgid "Delete"
 msgstr "Eliminar"
 
-#: thonny/base_file_browser.py:718 thonny/base_file_browser.py:869
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
 msgid "New directory"
 msgstr "Nuevo Directorio"
 
-#: thonny/base_file_browser.py:742
+#: thonny/base_file_browser.py:749
 msgid "Properties"
 msgstr "Propiedades"
 
-#: thonny/base_file_browser.py:744
+#: thonny/base_file_browser.py:751
 msgid "Storage space"
 msgstr "Espacio de almacenamiento"
 
-#: thonny/base_file_browser.py:754
+#: thonny/base_file_browser.py:761
 msgid "Path"
 msgstr "Ruta"
 
-#: thonny/base_file_browser.py:756
+#: thonny/base_file_browser.py:763
 msgid "Directory properties"
 msgstr "Propiedades del directorio"
 
-#: thonny/base_file_browser.py:758
+#: thonny/base_file_browser.py:765
 msgid "File properties"
 msgstr "Propiedades del archivo"
 
-#: thonny/base_file_browser.py:760
+#: thonny/base_file_browser.py:767
 msgid "bytes"
 msgstr "bytes"
 
-#: thonny/base_file_browser.py:763
+#: thonny/base_file_browser.py:770
 msgid "Size"
 msgstr "Tamaño"
 
-#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:774
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
 msgid "Modified"
 msgstr "Modificado"
 
-#: thonny/base_file_browser.py:833
+#: thonny/base_file_browser.py:842
 msgid "Deleting %s"
 msgstr "Borrando %s"
 
-#: thonny/editors.py:253
+#: thonny/editors.py:262
 msgid "Loading"
 msgstr "Cargando"
 
-#: thonny/editors.py:382
+#: thonny/editors.py:395
 msgid "Saving"
 msgstr "Guardando"
 
@@ -1268,135 +1252,135 @@ msgstr "Guardando"
 msgid "Upload to %s"
 msgstr "Subir a %s"
 
-#: thonny/plugins/files.py:417
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
 msgstr "Descargando %s a %s"
 
-#: thonny/plugins/files.py:323
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr "Descargar a %s"
 
-#: thonny/base_file_browser.py:643
+#: thonny/base_file_browser.py:650
 msgid "Open in system file manager"
 msgstr "Abrir en gestor de archivos"
 
-#: thonny/base_file_browser.py:671
+#: thonny/base_file_browser.py:678
 msgid "Hide hidden files"
 msgstr "No mostrar archivos ocultos"
 
-#: thonny/base_file_browser.py:671
+#: thonny/base_file_browser.py:678
 msgid "Show hidden files"
 msgstr "Mostrar archivos ocultos"
 
-#: thonny/base_file_browser.py:654
+#: thonny/base_file_browser.py:661
 msgid "Open in Thonny"
 msgstr "Abrir en Thonny"
 
-#: thonny/base_file_browser.py:685
+#: thonny/base_file_browser.py:692
 msgid "Open in system default app"
 msgstr "Abrir en la aplicación predeterminada del sistema"
 
-#: thonny/base_file_browser.py:666 thonny/base_file_browser.py:693
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
 msgid "Configure %s files"
 msgstr "Configurando %s archivos"
 
-#: thonny/base_file_browser.py:694
+#: thonny/base_file_browser.py:701
 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:1240 thonny/editors.py:953 thonny/editors.py:955
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
 msgid "Deleting"
 msgstr "Borrando"
 
-#: thonny/base_file_browser.py:1247
+#: thonny/base_file_browser.py:1265
 msgid "Creating directory"
 msgstr "Creando directorio"
 
-#: thonny/editors.py:251
+#: thonny/editors.py:260
 msgid "Loading %s"
 msgstr "Cargando %s"
 
-#: thonny/editors.py:377
+#: thonny/editors.py:390
 msgid "Saving to %s"
 msgstr "Guardando a %s"
 
-#: thonny/editors.py:702 thonny/editors.py:704
+#: thonny/editors.py:728 thonny/editors.py:730
 msgid "Save All files"
-msgstr "Salvar todos los ficheros"
+msgstr "Guardar todos los ficheros"
 
-#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:869
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
 msgid "Configure interpreter..."
 msgstr "Configurar interprete..."
 
-#: thonny/workbench.py:1581
+#: thonny/workbench.py:1591
 msgid "Device"
 msgstr "Dispositivo"
 
-#: thonny/workdlg.py:193
+#: thonny/workdlg.py:234
 msgid "Cancelling"
 msgstr "Cancelando"
 
-#: thonny/workdlg.py:220
+#: thonny/workdlg.py:270
 msgid "Starting"
 msgstr "Iniciando"
 
-#: thonny/plugins/backend_config_page.py:251
+#: thonny/plugins/backend_config_page.py:249
 msgid "Authentication"
 msgstr "Autenticación"
 
-#: thonny/plugins/backend_config_page.py:253
+#: thonny/plugins/backend_config_page.py:251
 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:256
+#: thonny/plugins/backend_config_page.py:254
 msgid "Enter your password for\n"
 "{}"
 msgstr "Ingrese su contraseña para\n"
 "{}"
 
-#: thonny/plugins/object_inspector.py:487
+#: thonny/plugins/object_inspector.py:486
 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:645
+#: thonny/plugins/pip_gui.py:682
 msgid "Search results"
 msgstr "Resultados de la búsqueda"
 
-#: thonny/plugins/pip_gui.py:646
+#: thonny/plugins/pip_gui.py:683
 msgid "Searching"
 msgstr "Buscando"
 
-#: thonny/plugins/pip_gui.py:728 thonny/plugins/pip_gui.py:817
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
 msgid "Installing '%s'"
 msgstr "Instalando '%s'"
 
-#: thonny/plugins/pip_gui.py:734
+#: thonny/plugins/pip_gui.py:793
 msgid "Upgrading '%s'"
 msgstr "Actualizando '%s'"
 
-#: thonny/plugins/pip_gui.py:741
+#: thonny/plugins/pip_gui.py:800
 msgid "Uninstalling '%s'"
 msgstr "Desinstalando '%s'"
 
-#: thonny/plugins/pip_gui.py:755
+#: thonny/plugins/pip_gui.py:814
 msgid "Installing"
 msgstr "Instalando"
 
-#: thonny/plugins/pip_gui.py:1502
+#: thonny/plugins/pip_gui.py:1562
 msgid "Package manager is not available for this interpreter"
 msgstr "El administrador de paquetes no está disponible para este intérprete"
 
-#: thonny/base_file_browser.py:1191 thonny/plugins/pip_gui.py:1516
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
 msgid "Not supported"
 msgstr "No soportado"
 
-#: thonny/plugins/micropython/pip_gui.py:100 thonny/plugins/pip_gui.py:1521
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
 msgid "Not available"
 msgstr "No disponible"
 
-#: thonny/plugins/pip_gui.py:1522
+#: thonny/plugins/pip_gui.py:1582
 msgid "You need to stop your program before launching the package manager."
 msgstr "Debe detener su programa antes de iniciar el administrador de paquetes."
 
@@ -1404,11 +1388,11 @@ msgstr "Debe detener su programa antes de iniciar el administrador de paquetes."
 msgid "Open evaluated values in Object inspector"
 msgstr "Abrir valores evaluados en el inspector de objetos"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:208
+#: thonny/plugins/cpython_frontend/cp_front.py:234
 msgid "Python executable"
 msgstr "Ejecutable de Python"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:231
+#: thonny/plugins/cpython_frontend/cp_front.py:258
 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)!"
@@ -1418,88 +1402,51 @@ msgstr "NB: El botón de selección de ficheros puede que no funcione bien cuand
 msgid "Remote Python 3 (SSH)"
 msgstr "Python 3 Remoto (SSH)"
 
-#: thonny/plugins/micropython/mp_front.py:310
+#: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
 msgstr "No conectado"
 
-#: thonny/plugins/micropython/mp_front.py:515
-msgid "Advanced options"
-msgstr "Opciones avanzadas"
-
-#: thonny/plugins/micropython/mp_front.py:547
-msgid "Install or update firmware"
-msgstr "Instalar o actualizar el firmware"
-
-#: thonny/plugins/micropython/__init__.py:36
+#: thonny/plugins/micropython/__init__.py:35
 msgid "MicroPython (local)"
 msgstr "MicroPython (local)"
 
-#: thonny/plugins/micropython/__init__.py:47
+#: thonny/plugins/micropython/__init__.py:46
 msgid "MicroPython (SSH)"
 msgstr "MicroPython (SSH)"
 
-#: thonny/plugins/micropython/pip_gui.py:77
-msgid "Scope"
-msgstr "Alcance"
-
-#: thonny/plugins/micropython/pip_gui.py:90
-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:99
-msgid "New packages will be installed to"
-msgstr "Los nuevos paquetes serán instalados en"
-
-#: thonny/plugins/micropython/pip_gui.py:102
+#: thonny/plugins/micropython/pip_gui.py:144
 msgid "no absolute lib directory in sys.path"
 msgstr "Sin directorio lib absoluto en 'sys.path'"
 
-#: thonny/plugins/micropython/uf2dialog.py:39
-msgid "Version to be installed"
-msgstr "Versión a ser instalada"
-
-#: thonny/plugins/micropython/uf2dialog.py:47
-msgid "Target device location"
-msgstr "Ubicación del dispositivo de destino"
-
-#: thonny/plugins/micropython/uf2dialog.py:58
-msgid "Target device model"
-msgstr "Modelo de dispositivo de destino"
-
-#: thonny/plugins/micropython/uf2dialog.py:146
-msgid "Please wait"
-msgstr "Espere por favor"
-
-#: thonny/plugins/pip_gui.py:70
+#: thonny/plugins/pip_gui.py:71
 msgid "Search on PyPI"
 msgstr "Buscar en PyPI"
 
-#: thonny/base_file_browser.py:686
+#: thonny/base_file_browser.py:693
 msgid "Open in Thonny's text editor"
 msgstr "Abrir en el editor de texto de Thonny"
 
-#: thonny/base_file_browser.py:339
+#: thonny/base_file_browser.py:346
 msgid "Storage space on this drive or filesystem"
 msgstr "Espacio de almacenamiento en esta unidad o sistema de archivos"
 
-#: thonny/base_file_browser.py:340
+#: thonny/base_file_browser.py:347
 msgid "total space"
 msgstr "espacio total"
 
-#: thonny/base_file_browser.py:342
+#: thonny/base_file_browser.py:349
 msgid "used space"
 msgstr "espacio ocupado"
 
-#: thonny/base_file_browser.py:343
+#: thonny/base_file_browser.py:350
 msgid "free space"
 msgstr "espacio libre"
 
-#: thonny/base_file_browser.py:350
+#: thonny/base_file_browser.py:357
 msgid "Storage info"
 msgstr "Información de almacenamiento"
 
-#: thonny/plugins/commenting_indenting.py:163
+#: thonny/plugins/commenting_indenting.py:162
 msgid "Replace tabs with spaces"
 msgstr "Reemplazar los tabuladores por espacios"
 
@@ -1511,72 +1458,72 @@ msgstr "Resaltar los caracteres tabulador"
 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:91 thonny/memory.py:63
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
 msgid "Name"
 msgstr "Nombre"
 
-#: thonny/base_file_browser.py:95
+#: thonny/base_file_browser.py:96
 msgid "Size (bytes)"
 msgstr "Tamaño (bytes)"
 
-#: thonny/base_file_browser.py:870
+#: thonny/base_file_browser.py:879
 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:893
+#: thonny/base_file_browser.py:902
 msgid "Nothing selected"
 msgstr "Nada seleccionado"
 
-#: thonny/base_file_browser.py:893
+#: thonny/base_file_browser.py:902
 msgid "Select an item and try again!"
 msgstr "Seleccione un artículo y vuelva a intentarlo."
 
-#: thonny/base_file_browser.py:1311
+#: thonny/base_file_browser.py:1329
 msgid "Open from %s"
 msgstr "Abrir de %s"
 
-#: thonny/base_file_browser.py:1314
+#: thonny/base_file_browser.py:1332
 msgid "Save to %s"
 msgstr "Guardar a %s"
 
-#: thonny/base_file_browser.py:1333
+#: thonny/base_file_browser.py:1351
 msgid "File name:"
 msgstr "Nombre de archivo:"
 
-#: thonny/memory.py:64 thonny/plugins/object_inspector.py:539
-#: thonny/plugins/object_inspector.py:618
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
 msgid "Value ID"
 msgstr "ID de valor"
 
 #: thonny/memory.py:65 thonny/plugins/heap.py:23
-#: thonny/plugins/object_inspector.py:540
-#: thonny/plugins/object_inspector.py:619
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
 msgid "Value"
 msgstr "Valor"
 
-#: thonny/plugins/backend_config_page.py:274
+#: thonny/plugins/backend_config_page.py:272
 msgid "Save password"
 msgstr "Guardar contraseña"
 
-#: thonny/plugins/debugger.py:553
+#: thonny/plugins/debugger.py:557
 msgid "Function call at %s"
 msgstr "Llamada de función en %s"
 
-#: thonny/plugins/debugger.py:1003
+#: thonny/plugins/debugger.py:1006
 msgid "Local variables"
 msgstr "Variables locales"
 
-#: thonny/plugins/debugger.py:1035
+#: thonny/plugins/debugger.py:1038
 msgid "Function"
 msgstr "Función"
 
-#: thonny/plugins/debugger.py:1036
+#: thonny/plugins/debugger.py:1039
 msgid "Location"
 msgstr "Ubicación"
 
-#: thonny/plugins/debugger.py:1112
+#: thonny/plugins/debugger.py:1115
 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)."
 
@@ -1592,15 +1539,15 @@ msgstr "Datos"
 msgid "Attributes"
 msgstr "Atributos"
 
-#: thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:537
 msgid "Index"
 msgstr "Índice"
 
-#: thonny/plugins/object_inspector.py:616
+#: thonny/plugins/object_inspector.py:615
 msgid "Key ID"
 msgstr "ID de Llave"
 
-#: thonny/plugins/object_inspector.py:617
+#: thonny/plugins/object_inspector.py:616
 msgid "Key"
 msgstr "Llave"
 
@@ -1610,15 +1557,15 @@ msgid "Back to\n"
 msgstr "Volver a\n"
 "%s"
 
-#: thonny/plugins/micropython/mp_front.py:439
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port or WebREPL"
 msgstr "Puerto o WebREPL"
 
-#: thonny/plugins/micropython/mp_front.py:583
+#: thonny/plugins/micropython/mp_front.py:599
 msgid "Password"
 msgstr "Contraseña"
 
-#: thonny/plugins/debugger.py:961
+#: thonny/plugins/debugger.py:964
 msgid "Source code"
 msgstr "Código fuente"
 
@@ -1634,107 +1581,107 @@ msgstr "Seleccione si los cuadros de diálogo del archivo terminan detrás de la
 msgid "Environment variables (one KEY=VALUE per line)"
 msgstr "Variables de Entorno (una CLAVE=VALOR por línea)"
 
-#: thonny/base_file_browser.py:715
+#: thonny/base_file_browser.py:722
 msgid "New file"
 msgstr "Archivo nuevo"
 
-#: thonny/base_file_browser.py:733
+#: thonny/base_file_browser.py:740
 msgid "Rename"
 msgstr "Renombrar"
 
-#: thonny/base_file_browser.py:919
+#: thonny/base_file_browser.py:928
 msgid "Rename '%s'"
 msgstr "Renombrar '%s'"
 
-#: thonny/base_file_browser.py:919
+#: thonny/base_file_browser.py:928
 msgid "Enter new name"
 msgstr "Ingresa un nuevo nombre"
 
-#: thonny/base_file_browser.py:1007
+#: thonny/base_file_browser.py:1016
 msgid "Paste failed"
 msgstr "Fallo de pegado"
 
-#: thonny/base_file_browser.py:1007
+#: thonny/base_file_browser.py:1016
 msgid "There are conflicting folders"
 msgstr "Hay carpetas con conflictos"
 
-#: thonny/base_file_browser.py:1129
+#: thonny/base_file_browser.py:1144
 msgid "File already exists"
 msgstr "El archivo ya existe"
 
-#: thonny/base_file_browser.py:1194
+#: thonny/base_file_browser.py:1212
 msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
 msgstr "Si se trata de un archivo de texto, puede configurarlo para que se abra en Thonny haciendo clic con el botón derecho y seleccionando \"Configurar... archivos\"."
 
-#: thonny/editors.py:35
+#: thonny/editors.py:38
 msgid "Python files"
 msgstr "Archivos Python"
 
-#: thonny/editors.py:119 thonny/editors.py:182
+#: thonny/editors.py:123 thonny/editors.py:189
 msgid "<untitled>"
 msgstr "<sin nombre>"
 
-#: thonny/editors.py:146
+#: thonny/editors.py:150
 msgid "File is gone"
 msgstr "El archivo no está"
 
-#: thonny/editors.py:149
+#: thonny/editors.py:153
 msgid "Do you want to also close the editor?"
 msgstr "¿Quieres cerrar también el editor?"
 
-#: thonny/editors.py:165
+#: thonny/editors.py:169
 msgid "External modification"
 msgstr "Modificación externa"
 
-#: thonny/editors.py:168
+#: thonny/editors.py:172
 msgid "Do you want to discard current editor content and reload the file from disk?"
 msgstr "¿Quieres descartar el contenido actual del editor y volver a cargar el archivo desde el disco?"
 
-#: thonny/editors.py:572
+#: thonny/editors.py:588
 msgid "Python files usually have .py extension."
 msgstr "Los archivos de Python suelen llevar la extensión .py."
 
-#: thonny/editors.py:574
+#: thonny/editors.py:590
 msgid "Did you mean '%s'?"
 msgstr " ¿Quisiste decir '%s'? "
 
-#: thonny/editors.py:733
+#: thonny/editors.py:759
 msgid "Move / rename..."
 msgstr "Mover / renombrar..."
 
-#: thonny/editors.py:742
+#: thonny/editors.py:768
 msgid "Go to line..."
 msgstr "Ir a la línea..."
 
-#: thonny/editors.py:977
+#: thonny/editors.py:1010
 msgid "Line number"
 msgstr "Número de línea"
 
-#: thonny/editors.py:1123
+#: thonny/editors.py:1156
 msgid "Do you want to save files before closing?"
 msgstr "¿Desea guardar los archivos antes de cerrarlos?"
 
-#: thonny/editors.py:1125
+#: thonny/editors.py:1158
 msgid "Do you want to save file before closing?"
 msgstr "¿Desea guardar los archivos antes de cerrarlos?"
 
-#: thonny/editors.py:1128
+#: thonny/editors.py:1161
 msgid "Save On Close"
 msgstr "Guardar al cerrar"
 
-#: thonny/misc_utils.py:513
+#: thonny/misc_utils.py:539
 msgid "Command not available"
 msgstr "Comando no disponible"
 
-#: thonny/misc_utils.py:514
+#: thonny/misc_utils.py:540
 msgid "This command is not available if Thonny is run via Flatpak"
 msgstr "Este comando no está disponible si Thonny se ejecuta a través de Flatpak"
 
-#: thonny/workbench.py:686 thonny/workbench.py:786
+#: thonny/workbench.py:700 thonny/workbench.py:799
 msgid "Support Ukraine"
 msgstr "Apoya a Ucrania"
 
-#: thonny/plugins/backend_config_page.py:91
+#: thonny/plugins/backend_config_page.py:90
 msgid "Which kind of interpreter should Thonny use for running your code?"
 msgstr "¿Qué tipo de intérprete debe utilizar Thonny para ejecutar su código? "
 
@@ -1762,7 +1709,7 @@ msgstr "Pedir que se complete con la tecla Tab en los editores"
 msgid "Request completions with Tab-key in Shell"
 msgstr "Pedir que se complete con la tecla Tab en la consola"
 
-#: thonny/plugins/goto_definition.py:58
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
 msgid "Problem"
 msgstr "Problema"
 
@@ -1774,77 +1721,77 @@ msgstr "Definición no encontrada"
 msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
 msgstr "Limpiar Consola antes de iniciar un nuevo proceso (Ejecutar, Depurar, Detener/Reiniciar, ...)"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:170
+#: thonny/plugins/cpython_frontend/cp_front.py:196
 msgid "Thonny's Python"
 msgstr "El Python de Thonny"
 
-#: thonny/plugins/micropython/mp_front.py:487
+#: thonny/plugins/micropython/mp_front.py:496
 msgid "Interrupt working program on connect"
 msgstr "Interrumpir el programa de en funcionamiento al conectarse"
 
-#: thonny/plugins/micropython/mp_front.py:494
+#: thonny/plugins/micropython/mp_front.py:504
 msgid "Synchronize device's real time clock"
 msgstr "Sincronizar el reloj de tiempo real del dispositivo"
 
-#: thonny/plugins/micropython/mp_front.py:500
+#: thonny/plugins/micropython/mp_front.py:510
 msgid "Use local time in real time clock"
 msgstr "Utilizar la hora local en el reloj de tiempo real "
 
-#: thonny/plugins/micropython/mp_front.py:506
+#: thonny/plugins/micropython/mp_front.py:516
 msgid "Restart interpreter before running a script"
 msgstr "Reiniciar el intérprete antes de ejecutar un script"
 
-#: thonny/plugins/micropython/pip_gui.py:24
+#: thonny/plugins/micropython/pip_gui.py:26
 msgid "This doesn't look like MicroPython/CircuitPython package.\n"
 "Are you sure you want to install it?"
 msgstr "Esto no se parece al paquete MicroPython/CircuitPython.\n"
 "¿Está seguro de que quiere instalarlo?"
 
-#: thonny/base_file_browser.py:844
+#: thonny/base_file_browser.py:853
 msgid "Moving to Trash"
 msgstr "Mover a la papelera"
 
-#: thonny/base_file_browser.py:845
+#: thonny/base_file_browser.py:854
 msgid "Move %s to Trash?"
 msgstr "¿Mover %s a la papelera?"
 
-#: thonny/base_file_browser.py:852
+#: thonny/base_file_browser.py:861
 msgid "Moving %s to Trash"
 msgstr "Moviendo %s a la papelera"
 
-#: thonny/base_file_browser.py:659
+#: thonny/base_file_browser.py:666
 msgid "Open in default external app"
 msgstr "Abrir en la aplicación externa por defecto"
 
-#: thonny/base_file_browser.py:1192
+#: thonny/base_file_browser.py:1210
 msgid "Opening remote files in external app is not supported."
 msgstr "No es posible abrir archivos remotos en una aplicación externa."
 
-#: thonny/base_file_browser.py:1199
+#: thonny/base_file_browser.py:1217
 msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
 msgstr "Si el archivo debe abrirse en una aplicación externa, descárgalo en un directorio local y ábrelo desde allí."
 
-#: thonny/editors.py:147
+#: thonny/editors.py:151
 msgid "Looks like '%s' was deleted or moved."
 msgstr "Parece que '%s' fue borrado o movido."
 
-#: thonny/editors.py:166
+#: thonny/editors.py:170
 msgid "Looks like '%s' was modified outside of the editor."
 msgstr "Parece que '%s' fue modificado fuera del editor."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:229
+#: thonny/plugins/cpython_frontend/cp_front.py:256
 msgid "NB! Thonny only supports Python %s and later"
 msgstr "Nota: Thonny solo soporta Python %s y posteriores"
 
-#: thonny/editors.py:977
+#: thonny/editors.py:1010
 msgid "Go to line"
 msgstr "Ir a la línea"
 
-#: thonny/workbench.py:689
+#: thonny/workbench.py:703
 msgid "Support"
 msgstr "Soporte"
 
-#: thonny/editors.py:386 thonny/editors.py:401
+#: thonny/editors.py:399 thonny/editors.py:414
 msgid "Could not save"
 msgstr "No se ha podido guardar"
 
@@ -1858,68 +1805,158 @@ msgid "If you quote the value of an environment variable, the quotes will be par
 msgstr "Si se entrecomilla el valor de una variable de entorno, las mismas formarán parte del valor.\n"
 "¿Es esto lo que querías?"
 
-#: thonny/workbench.py:859
+#: thonny/workbench.py:870
 msgid "Install MicroPython"
-msgstr ""
+msgstr "Instala MicroPython"
 
-#: thonny/workbench.py:863
+#: thonny/workbench.py:874
 msgid "Install CircuitPython"
-msgstr ""
+msgstr "Instala CircuitPython"
 
-#: thonny/plugins/backend_config_page.py:212
+#: thonny/plugins/backend_config_page.py:210
 msgid "Make uploaded shebang scripts executable"
-msgstr ""
+msgstr "Convierte los scripts con shebang cargados en ejecutables"
 
 #: thonny/plugins/editor_config_page.py:91
 msgid "Make saved shebang scripts executable"
-msgstr ""
+msgstr "Convierte los scripts con shebang guardados en ejecutables"
 
 #: thonny/plugins/files.py:224
 msgid "Activate virtual environment"
-msgstr ""
+msgstr "Activa entorno virtual"
 
-#: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
 msgid "Target"
-msgstr ""
+msgstr "Destino"
 
 #: thonny/plugins/pythontutor.py:41
 msgid "Visualize current script at Python Tutor"
-msgstr ""
+msgstr "Visualiza el script en Python Tutor"
 
-#: thonny/plugins/todo_view.py:42
+#: thonny/plugins/todo_view.py:43
 msgid "Line"
-msgstr ""
+msgstr "Línea"
 
-#: thonny/plugins/todo_view.py:43
+#: thonny/plugins/todo_view.py:44
 msgid "Info"
-msgstr ""
+msgstr "Info"
 
 #: thonny/plugins/todo_view.py:121
 msgid "No line marked with #todo found"
-msgstr ""
+msgstr "No se encontraron líneas marcadas con #todo"
 
 #: thonny/plugins/todo_view.py:141
 msgid "TODO"
-msgstr ""
+msgstr "PORHACER"
 
-#: thonny/plugins/circuitpython/cirpy_front.py:98
-#: thonny/plugins/micropython/mp_front.py:530
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
 msgid "Install or update %s"
-msgstr ""
+msgstr "Instala o actualiza %s"
 
 #: thonny/plugins/cpython_frontend/__init__.py:24
 msgid "Local Python 3"
-msgstr ""
+msgstr "Python 3 local"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:239
+#: thonny/plugins/cpython_frontend/cp_front.py:266
 msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
-msgstr ""
+msgstr "Puedes activar un entorno virtual existente vía menú contextual haciendo click derecho en la navegación de ficheros cuando selecciones una carpeta de entorno virtual o el fichero 'pyveng.cfg' incluido."
 
 #: thonny/plugins/ev3/__init__.py:72
 msgid "Preparations (skip the VS Code part)"
-msgstr ""
+msgstr "Preparaciones (salta la parte de VS Code)"
 
 #: thonny/plugins/ev3/__init__.py:78
 msgid "Default password"
+msgstr "Contraseña por defecto"
+
+#: thonny/running.py:392
+msgid "Information"
+msgstr "Información"
+
+#: thonny/running.py:393
+msgid "For debugging the program must be saved first."
+msgstr "Para depurar se debe guardar primero el programa."
+
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr ""
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr ""
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr ""
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr ""
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr ""
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr ""
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr ""
+
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr ""
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr ""
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr ""
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr ""
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr ""
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr ""
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr ""
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr ""
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
 msgstr ""
 
diff --git a/thonny/locale/et_EE/LC_MESSAGES/thonny.mo b/thonny/locale/et_EE/LC_MESSAGES/thonny.mo
index cddd688..29cc419 100644
Binary files a/thonny/locale/et_EE/LC_MESSAGES/thonny.mo and b/thonny/locale/et_EE/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/et_EE/LC_MESSAGES/thonny.po b/thonny/locale/et_EE/LC_MESSAGES/thonny.po
index ccf3ca3..c0bba87 100644
--- a/thonny/locale/et_EE/LC_MESSAGES/thonny.po
+++ b/thonny/locale/et_EE/LC_MESSAGES/thonny.po
@@ -7,63 +7,63 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: et\n"
 
-#: thonny/workbench.py:369
+#: thonny/workbench.py:375
 msgid "File"
 msgstr "Fail"
 
-#: thonny/workbench.py:370
+#: thonny/workbench.py:376
 msgid "Edit"
 msgstr "Redigeeri"
 
-#: thonny/workbench.py:371
+#: thonny/workbench.py:377
 msgid "View"
 msgstr "Vaated"
 
-#: thonny/running.py:116 thonny/workbench.py:372
+#: thonny/running.py:161 thonny/workbench.py:378
 msgid "Run"
 msgstr "Käivita"
 
-#: thonny/workbench.py:373
+#: thonny/workbench.py:379
 msgid "Tools"
 msgstr "Tööriistad"
 
-#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:374
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
 msgid "Help"
 msgstr "Abiinfo"
 
-#: thonny/workbench.py:591
+#: thonny/workbench.py:598
 msgid "Exit"
 msgstr "Välju"
 
-#: thonny/workbench.py:618
+#: thonny/workbench.py:625
 msgid "Decrease font size"
 msgstr "Vähenda fondi suurust"
 
-#: thonny/workbench.py:630
+#: thonny/workbench.py:637
 msgid "Focus editor"
 msgstr "Mine redaktorisse"
 
-#: thonny/workbench.py:639
+#: thonny/workbench.py:646
 msgid "Focus shell"
 msgstr "Mine käsureale"
 
-#: thonny/workbench.py:650
+#: thonny/workbench.py:656
 msgid "Maximize view"
 msgstr "Suurenda vaade"
 
-#: thonny/workbench.py:662
+#: thonny/workbench.py:668
 msgid "Full screen"
 msgstr "Täisekraan"
 
-#: thonny/workbench.py:1465
+#: thonny/workbench.py:1467
 msgid "Program arguments"
 msgstr "Programmi argumendid"
 
-#: thonny/plugins/about.py:24 thonny/plugins/about.py:151
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
 msgid "About Thonny"
 msgstr "Info Thonny kohta"
 
-#: thonny/plugins/about.py:77
+#: thonny/plugins/about.py:81
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -77,7 +77,7 @@ msgstr "Loodud\n"
 "Raspberry Pi Foundation\n"
 "ja Cybernetica AS"
 
-#: thonny/plugins/about.py:97
+#: thonny/plugins/about.py:101
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -91,11 +91,11 @@ msgstr "Selle programmi toimimise\n"
 "Vaata täpsemalt\n"
 "https://opensource.org/licenses/MIT"
 
-#: thonny/plugins/about.py:140
+#: thonny/plugins/about.py:142
 msgid "Version history"
 msgstr "Versioonide ajalugu"
 
-#: thonny/plugins/about.py:147
+#: thonny/plugins/about.py:149
 msgid "Report problems"
 msgstr "Teata probleemidest"
 
@@ -119,15 +119,15 @@ msgstr "Teosta MyPy kontrolle"
 msgid "Disabled checks (one id per line)"
 msgstr "Tühistatud kontrollid (üks identifikaator rea kohta)"
 
-#: thonny/assistance.py:985 thonny/plugins/assistant_config_page.py:74
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Juhendaja"
 
-#: thonny/plugins/autocomplete.py:522
+#: thonny/plugins/autocomplete.py:529
 msgid "Auto-complete"
 msgstr "Lõpeta sõna automaatselt"
 
-#: thonny/plugins/backend_config_page.py:337
+#: thonny/plugins/backend_config_page.py:335
 msgid "Interpreter"
 msgstr "Interpretaator"
 
@@ -147,15 +147,15 @@ msgstr "Birdseye on Pythoni silur, mis tuleb eraldi paigaldada.\n"
 msgid "Debug current script (birdseye)"
 msgstr "Silu käesolevat skripti (birdseye)"
 
-#: thonny/plugins/commenting_indenting.py:172
+#: thonny/plugins/commenting_indenting.py:171
 msgid "Toggle comment"
 msgstr "Lülita kommentaar sisse/välja"
 
-#: thonny/plugins/commenting_indenting.py:182
+#: thonny/plugins/commenting_indenting.py:181
 msgid "Comment out"
 msgstr "Kommenteeri"
 
-#: thonny/plugins/commenting_indenting.py:192
+#: thonny/plugins/commenting_indenting.py:191
 msgid "Uncomment"
 msgstr "Eemalda kommentaar"
 
@@ -167,18 +167,18 @@ msgstr "Võta muudatus tagasi"
 msgid "Redo"
 msgstr "Rakenda tagasivõetud muudatus uuesti"
 
-#: thonny/base_file_browser.py:724 thonny/plugins/common_editing_commands.py:49
-#: thonny/ui_utils.py:2295
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
 msgid "Cut"
 msgstr "Lõika"
 
-#: thonny/base_file_browser.py:725 thonny/plugins/common_editing_commands.py:61
-#: thonny/ui_utils.py:2296
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
 msgid "Copy"
 msgstr "Kopeeri"
 
-#: thonny/base_file_browser.py:727 thonny/base_file_browser.py:733
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2297
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
 msgid "Paste"
 msgstr "Kleebi"
 
@@ -186,15 +186,15 @@ msgstr "Kleebi"
 msgid "Select all"
 msgstr "Vali kõik"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1401
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
 msgid "Run to cursor"
 msgstr "Jooksuta kursorini"
 
-#: thonny/plugins/debugger.py:982
+#: thonny/plugins/debugger.py:985
 msgid "Can't close yet"
 msgstr "Ei saa veel sulgeda"
 
-#: thonny/plugins/debugger.py:983
+#: thonny/plugins/debugger.py:986
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr "Kui soovid silumist lõpetada, siis kasuta \"Stop\" käsku"
 
@@ -248,7 +248,7 @@ msgstr "Sündmused"
 msgid "Files"
 msgstr "Failid"
 
-#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:437
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
 msgid "Find & Replace"
 msgstr "Otsi ja asenda"
 
@@ -256,43 +256,43 @@ msgstr "Otsi ja asenda"
 msgid "Find:"
 msgstr "Otsi:"
 
-#: thonny/plugins/find_replace.py:87
+#: thonny/plugins/find_replace.py:90
 msgid "Replace with:"
 msgstr "Asenda:"
 
-#: thonny/plugins/find_replace.py:105
+#: thonny/plugins/find_replace.py:108
 msgid "Case sensitive"
 msgstr "Tõstutundlik"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:115
 msgid "Up"
 msgstr "Üles"
 
-#: thonny/plugins/find_replace.py:116
+#: thonny/plugins/find_replace.py:119
 msgid "Down"
 msgstr "Alla"
 
-#: thonny/plugins/find_replace.py:125
+#: thonny/plugins/find_replace.py:128
 msgid "Find"
 msgstr "Otsi"
 
-#: thonny/plugins/find_replace.py:135
+#: thonny/plugins/find_replace.py:138
 msgid "Replace"
 msgstr "Asenda"
 
-#: thonny/plugins/find_replace.py:143
+#: thonny/plugins/find_replace.py:146
 msgid "Replace+Find"
 msgstr "Otsi ja asenda"
 
-#: thonny/plugins/find_replace.py:153
+#: thonny/plugins/find_replace.py:156
 msgid "Replace all"
 msgstr "Asenda kõik"
 
-#: thonny/plugins/find_replace.py:253
+#: thonny/plugins/find_replace.py:254
 msgid "Enter string to be replaced."
 msgstr "Sisesta asendatav sõne"
 
-#: thonny/plugins/find_replace.py:338
+#: thonny/plugins/find_replace.py:339
 msgid "The specified text was not found!"
 msgstr "Otsitavat teksti ei leitud!"
 
@@ -350,7 +350,7 @@ msgstr "Eelmine objekt"
 msgid "Next object"
 msgstr "Järgmine objekt"
 
-#: thonny/plugins/object_inspector.py:733
+#: thonny/plugins/object_inspector.py:732
 msgid "Object inspector"
 msgstr "Objektivaatur"
 
@@ -362,12 +362,12 @@ msgstr "Struktuur"
 msgid "Pygame Zero mode"
 msgstr "Pygame Zero režiim"
 
-#: thonny/plugins/pip_gui.py:79
+#: thonny/plugins/pip_gui.py:80
 msgid "Uninstall"
 msgstr "Desinstalli"
 
-#: thonny/editors.py:685 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
-#: thonny/ui_utils.py:1872 thonny/workdlg.py:162
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
 msgid "Close"
 msgstr "Sulge"
 
@@ -379,60 +379,60 @@ msgstr "Klõpsa "
 msgid "here"
 msgstr "siia"
 
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:77
 msgid "Upgrade"
 msgstr "Uuenda"
 
-#: thonny/plugins/esp/__init__.py:349
-#: thonny/plugins/micropython/uf2dialog.py:410 thonny/plugins/pip_gui.py:73
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
 msgid "Install"
 msgstr "Installi"
 
-#: thonny/plugins/pip_gui.py:535
+#: thonny/plugins/pip_gui.py:570
 msgid "Could not find the package from PyPI."
 msgstr "Ei leidnud PyPI-st sellist pakki"
 
-#: thonny/plugins/pip_gui.py:557
+#: thonny/plugins/pip_gui.py:592
 msgid "Latest stable version"
 msgstr "Viimane stabiilne versioon"
 
-#: thonny/plugins/pip_gui.py:559
+#: thonny/plugins/pip_gui.py:594
 msgid "Latest version"
 msgstr "Viimane versioon"
 
-#: thonny/plugins/pip_gui.py:561
+#: thonny/plugins/pip_gui.py:596
 msgid "Summary"
 msgstr "Kokkuvõte"
 
-#: thonny/plugins/pip_gui.py:563
+#: thonny/plugins/pip_gui.py:598
 msgid "Author"
 msgstr "Autor"
 
-#: thonny/plugins/pip_gui.py:565
+#: thonny/plugins/pip_gui.py:602
 msgid "Homepage"
 msgstr "Koduleht"
 
-#: thonny/plugins/pip_gui.py:567
+#: thonny/plugins/pip_gui.py:604
 msgid "Bugtracker"
 msgstr "Vigade register"
 
-#: thonny/plugins/pip_gui.py:569
+#: thonny/plugins/pip_gui.py:606
 msgid "Documentation"
 msgstr "Dokumentatsioon"
 
-#: thonny/plugins/pip_gui.py:571
+#: thonny/plugins/pip_gui.py:608
 msgid "PyPI page"
 msgstr "PyPI leht"
 
-#: thonny/plugins/pip_gui.py:611
+#: thonny/plugins/pip_gui.py:648
 msgid "Requires"
 msgstr "Nõuab"
 
-#: thonny/plugins/pip_gui.py:743
+#: thonny/plugins/pip_gui.py:802
 msgid "Really uninstall?"
 msgstr "Desinstallida?"
 
-#: thonny/plugins/pip_gui.py:748
+#: thonny/plugins/pip_gui.py:807
 msgid "Are you sure you want to uninstall it?"
 msgstr "Kas oled kindel, et soovid seda desinstallida?"
 
@@ -447,64 +447,64 @@ msgstr "Tagasi\n"
 msgid "Variables"
 msgstr "Muutujad"
 
-#: thonny/base_file_browser.py:1572
+#: thonny/base_file_browser.py:1576
 msgid "This computer"
 msgstr "See arvuti"
 
-#: thonny/base_file_browser.py:644
+#: thonny/base_file_browser.py:648
 msgid "Refresh"
 msgstr "Värskenda"
 
-#: thonny/base_file_browser.py:653
+#: thonny/base_file_browser.py:657
 msgid "Focus into"
 msgstr "Mine sisse"
 
-#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
-#: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
 msgid "Error"
 msgstr "Viga"
 
-#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
 msgid "You need to select a file!"
 msgstr "Sa peand valima faili!"
 
-#: thonny/base_file_browser.py:1423
+#: thonny/base_file_browser.py:1427
 msgid "Overwrite?"
 msgstr "Kirjutada üle?"
 
-#: thonny/base_file_browser.py:1423
+#: thonny/base_file_browser.py:1427
 msgid "Do you want to overwrite '%s' ?"
 msgstr "Kas soovid '%s' üle kirjutada?"
 
-#: thonny/editors.py:650 thonny/editors.py:652
+#: thonny/editors.py:658 thonny/editors.py:660
 msgid "New"
 msgstr "Uus"
 
-#: thonny/editors.py:663
+#: thonny/editors.py:671
 msgid "Open..."
 msgstr "Ava..."
 
-#: thonny/editors.py:665
+#: thonny/editors.py:673
 msgid "Load"
 msgstr "Lae"
 
-#: thonny/editors.py:674
+#: thonny/editors.py:682
 msgid "Recent files"
 msgstr "Hiljutised failid"
 
-#: thonny/editors.py:696 thonny/ui_utils.py:493
+#: thonny/editors.py:704 thonny/ui_utils.py:498
 msgid "Close all"
 msgstr "Sulge kõik"
 
-#: thonny/editors.py:706 thonny/editors.py:708
+#: thonny/editors.py:714 thonny/editors.py:716
 msgid "Save"
 msgstr "Salvesta"
 
-#: thonny/editors.py:731
+#: thonny/editors.py:739
 msgid "Save as..."
 msgstr "Salvesta nimega..."
 
-#: thonny/editors.py:742
+#: thonny/editors.py:750
 msgid "Save copy..."
 msgstr "Salvesta koopia..."
 
@@ -512,58 +512,58 @@ msgstr "Salvesta koopia..."
 msgid "Thonny options"
 msgstr "Thonny seaded"
 
-#: thonny/running.py:115
+#: thonny/running.py:160
 msgid "Run current script"
 msgstr "Jooksuta käesolev skript"
 
-#: thonny/running.py:146
+#: thonny/running.py:191
 msgid "Run current script in terminal"
 msgstr "Jooksuta käesolev skript terminalis"
 
-#: thonny/running.py:159
+#: thonny/running.py:204
 msgid "Stop/Restart backend"
 msgstr "Peata/taaskäivita interpretaator"
 
-#: thonny/running.py:160
+#: thonny/running.py:205
 msgid "Stop"
 msgstr "Peata"
 
-#: thonny/running.py:171
+#: thonny/running.py:216
 msgid "Interrupt execution"
 msgstr "Katkesta programm"
 
-#: thonny/running.py:184
+#: thonny/running.py:229
 msgid "Send EOF / Soft reboot"
 msgstr "Saada EOF / Soft reboot"
 
-#: thonny/running.py:195
+#: thonny/running.py:240
 msgid "Disconnect"
 msgstr "Ühenda lahti"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:269
+#: thonny/plugins/cpython_frontend/cp_front.py:295
 msgid "Python interpreters"
 msgstr "Pythoni interpretaatord"
 
-#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:270
-#: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
 msgid "all files"
 msgstr "kõik failid"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:298
+#: thonny/plugins/cpython_frontend/cp_front.py:324
 msgid "Select empty directory for new virtual environment"
 msgstr "Vali uue virtuaalkeskkonna jaoks tühi kaust"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:305
+#: thonny/plugins/cpython_frontend/cp_front.py:331
 msgid "Bad directory"
 msgstr "Halb kaust"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:306
+#: thonny/plugins/cpython_frontend/cp_front.py:332
 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_frontend/cp_front.py:323
+#: thonny/plugins/cpython_frontend/cp_front.py:349
 msgid "Creating virtual environment"
 msgstr "Loon virtuaalkeskkonda"
 
@@ -583,44 +583,44 @@ msgstr "Puhasta"
 msgid "Show Plotter"
 msgstr "Ava Plotter"
 
-#: thonny/shell.py:1659
+#: thonny/shell.py:1660
 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:1670
+#: thonny/shell.py:1671
 msgid "Wrap text (may be slow)"
 msgstr "Murra rida (võib olla aeglane)"
 
-#: thonny/ui_utils.py:1867
+#: thonny/ui_utils.py:1879
 msgid "Copy to clipboard"
 msgstr "Kopeeri lõikepuhvrisse"
 
-#: thonny/shell.py:1712
+#: thonny/shell.py:1713
 msgid "Squeezed text (%d characters)"
 msgstr "Kokkupressitud tekst (%d sümbolit)"
 
-#: thonny/shell.py:1882
+#: thonny/shell.py:1883
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr "Plotter visualiseerib käsureale\n"
 "prinditud numbrijadasid."
 
-#: thonny/shell.py:1884
+#: thonny/shell.py:1885
 msgid "See Help for details."
 msgstr "Täpsemalt vaata abiinfost."
 
-#: thonny/ui_utils.py:492
+#: thonny/ui_utils.py:497
 msgid "Close others"
 msgstr "Sulge ülejäänud"
 
-#: thonny/ui_utils.py:1722
+#: thonny/ui_utils.py:1734
 msgid "Copying"
 msgstr "Kopeerin"
 
-#: thonny/ui_utils.py:1725
+#: thonny/ui_utils.py:1737
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -630,65 +630,65 @@ msgstr "Kopeerin\n"
 "=> \n"
 "  %s"
 
-#: thonny/base_file_browser.py:1378 thonny/config_ui.py:42 thonny/export.py:28
-#: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
-#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1819
-#: thonny/workdlg.py:164 thonny/workdlg.py:209
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
 msgid "Cancel"
 msgstr "Tühista"
 
-#: thonny/base_file_browser.py:1369 thonny/config_ui.py:41 thonny/export.py:25
-#: thonny/plugins/about.py:111 thonny/plugins/backend_config_page.py:285
-#: thonny/ui_utils.py:154 thonny/ui_utils.py:1816 thonny/workdlg.py:206
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
 msgid "OK"
 msgstr "Sobib"
 
-#: thonny/ui_utils.py:2301
+#: thonny/ui_utils.py:2345
 msgid "Select All"
 msgstr "Vali kõik"
 
 #: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
-#: thonny/workbench.py:162
+#: thonny/workbench.py:164
 msgid "Shell"
 msgstr "Käsurida"
 
-#: thonny/workbench.py:601
+#: thonny/workbench.py:608
 msgid "Options..."
 msgstr "Seaded..."
 
-#: thonny/workbench.py:608
+#: thonny/workbench.py:615
 msgid "Increase font size"
 msgstr "Suurenda kirja suurust"
 
-#: thonny/workbench.py:673
+#: thonny/workbench.py:679
 msgid "Change font size"
 msgstr "Muuda kirja suurust"
 
-#: thonny/workbench.py:674
+#: thonny/workbench.py:680
 msgid "Zoom"
 msgstr "Suurus"
 
-#: thonny/workbench.py:683
+#: thonny/workbench.py:689
 msgid "Exit Thonny"
 msgstr "Välju Thonnyst"
 
-#: thonny/workbench.py:686
+#: thonny/workbench.py:692
 msgid "Quit"
 msgstr "Välju"
 
-#: thonny/workbench.py:1244 thonny/workbench.py:1252
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
 msgid "Overwriting theme '%s'"
 msgstr "Kirjutan üle teemat nimega '%s'"
 
-#: thonny/workbench.py:1436
+#: thonny/workbench.py:1438
 msgid "Program arguments:"
 msgstr "Programmi argumendid:"
 
-#: thonny/workbench.py:1490
+#: thonny/workbench.py:1492
 msgid "Regular mode"
 msgstr "Tavarežiim"
 
-#: thonny/workbench.py:1491
+#: thonny/workbench.py:1493
 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.)"
@@ -696,71 +696,71 @@ 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:212
+#: thonny/plugins/ast_view.py:211
 msgid "Program tree"
 msgstr "Programmipuu"
 
-#: thonny/plugins/debugger.py:1283
+#: thonny/plugins/debugger.py:1284
 msgid "Resume"
 msgstr "Naase"
 
-#: thonny/plugins/debugger.py:1299
+#: thonny/plugins/debugger.py:1300
 msgid "Run / resume"
 msgstr "Jooksuta / naase"
 
-#: thonny/plugins/debugger.py:1314
+#: thonny/plugins/debugger.py:1315
 msgid "Debug current script"
 msgstr "Silu käesolevat skripti"
 
-#: thonny/plugins/debugger.py:1316
+#: thonny/plugins/debugger.py:1317
 msgid "Debug"
 msgstr "Silu"
 
-#: thonny/plugins/debugger.py:1327
+#: thonny/plugins/debugger.py:1328
 msgid "Debug current script (nicer)"
 msgstr "Silu käesolevat skripti (ägedam)"
 
-#: thonny/plugins/debugger.py:1339
+#: thonny/plugins/debugger.py:1340
 msgid "Debug current script (faster)"
 msgstr "Silu käesolevat skripti (kiirem)"
 
-#: thonny/plugins/debugger.py:1350
+#: thonny/plugins/debugger.py:1351
 msgid "Step over"
 msgstr "Astu üle"
 
-#: thonny/plugins/debugger.py:1352
+#: thonny/plugins/debugger.py:1353
 msgid "Over"
 msgstr "Üle"
 
-#: thonny/plugins/debugger.py:1363
+#: thonny/plugins/debugger.py:1364
 msgid "Step into"
-msgstr "Asti sisse"
+msgstr "Astu sisse"
 
-#: thonny/plugins/debugger.py:1365
+#: thonny/plugins/debugger.py:1366
 msgid "Into"
 msgstr "Sisse"
 
-#: thonny/plugins/debugger.py:1376
+#: thonny/plugins/debugger.py:1377
 msgid "Step out"
 msgstr "Astu välja"
 
-#: thonny/plugins/debugger.py:1378
+#: thonny/plugins/debugger.py:1379
 msgid "Out"
 msgstr "Välja"
 
-#: thonny/plugins/debugger.py:1413
+#: thonny/plugins/debugger.py:1414
 msgid "Step back"
 msgstr "Astu tagasi"
 
-#: thonny/plugins/debugger.py:1415
+#: thonny/plugins/debugger.py:1416
 msgid "Back"
 msgstr "Tagasi"
 
-#: thonny/plugins/debugger.py:1421
+#: thonny/plugins/debugger.py:1422
 msgid "Stack"
 msgstr "Pinu"
 
-#: thonny/plugins/debugger.py:1422
+#: thonny/plugins/debugger.py:1423
 msgid "Exception"
 msgstr "Erind"
 
@@ -837,18 +837,6 @@ msgstr "Uuenda või desinstalli"
 msgid "Start by selecting the package from the left."
 msgstr "Alustuseks vali vasakult huvipakkuv pakk"
 
-#: thonny/plugins/pip_gui.py:410
-msgid "Target:"
-msgstr "Sihtkoht:"
-
-#: thonny/plugins/pip_gui.py:414
-msgid "virtual environment"
-msgstr "virtuaalkeskkond"
-
-#: thonny/plugins/pip_gui.py:412
-msgid "user site packages"
-msgstr "kasutaja \"site-packages\""
-
 #: thonny/plugins/pip_gui.py:430
 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"
@@ -859,48 +847,48 @@ msgid "New packages will be also installed into this directory. Other locations
 msgstr "Uued pakid installitakse ka sellesse kausta. Teisi asukohti\n"
 "tuleb hallata teiste vahenditega"
 
-#: thonny/plugins/pip_gui.py:485
+#: thonny/plugins/pip_gui.py:493
 msgid "Installed version:"
 msgstr "Installitud versioon:"
 
-#: thonny/plugins/pip_gui.py:487
+#: thonny/plugins/pip_gui.py:495
 msgid "Installed to:"
 msgstr "Installimise asukoht:"
 
-#: thonny/plugins/pip_gui.py:538
+#: thonny/plugins/pip_gui.py:573
 msgid "Please check your spelling!"
 msgstr "Kontrolli kas kirjutasid paki nime õigesti!"
 
-#: thonny/plugins/pip_gui.py:542
+#: thonny/plugins/pip_gui.py:577
 msgid "Could not find the package info from PyPI."
 msgstr "Ei leidnud sellist pakki PyPI-st"
 
-#: thonny/plugins/pip_gui.py:544 thonny/plugins/pip_gui.py:1326
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
 msgid "Error code:"
 msgstr "Veakood:"
 
-#: thonny/plugins/pip_gui.py:689
+#: thonny/plugins/pip_gui.py:748
 msgid "Can't find package name from the list:"
 msgstr "Ei leia paki nime nimekirjast:"
 
-#: thonny/plugins/pip_gui.py:744
+#: thonny/plugins/pip_gui.py:803
 msgid "Package '{}' is required for installing and uninstalling other packages."
 msgstr "Pakk '{}' on vajalik teiste pakkide installimiseks ja uuendamisks"
 
-#: thonny/plugins/pip_gui.py:789
+#: thonny/plugins/pip_gui.py:848
 msgid "Package"
 msgstr "Pakk"
 
-#: thonny/plugins/pip_gui.py:902
+#: thonny/plugins/pip_gui.py:960
 msgid "Manage packages for %s"
 msgstr "Halda %s pakke"
 
-#: thonny/editors.py:579 thonny/plugins/micropython/pip_gui.py:23
-#: thonny/plugins/pip_gui.py:953
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
 msgid "Confirmation"
 msgstr "Kinnitus"
 
-#: thonny/plugins/pip_gui.py:954
+#: thonny/plugins/pip_gui.py:1035
 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"
@@ -911,112 +899,112 @@ msgstr "Paistab, et soovid installida Thonny pistikprogrammi.\n"
 "\n"
 "Oled sa kindel, et tahad installida %s siin?"
 
-#: thonny/plugins/pip_gui.py:1059
+#: thonny/plugins/pip_gui.py:1141
 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:1067
+#: thonny/plugins/pip_gui.py:1149
 msgid "Thonny plugin without requirements"
 msgstr "Thonny pistikprogramm ilma sõltuvusteta"
 
-#: thonny/plugins/pip_gui.py:1083
+#: thonny/plugins/pip_gui.py:1165
 msgid "Unsuitable requirements"
 msgstr "Ebasobivad sõltuvused"
 
-#: thonny/plugins/pip_gui.py:1084
+#: thonny/plugins/pip_gui.py:1166
 msgid "This package requires different Thonny version:"
 msgstr "See pakk vajab teistsugust Thonny versiooni:"
 
-#: thonny/plugins/pip_gui.py:1088
+#: thonny/plugins/pip_gui.py:1170
 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:1125
+#: thonny/plugins/pip_gui.py:1207
 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:1135
+#: thonny/plugins/pip_gui.py:1217
 msgid "Thonny plug-ins"
 msgstr "Thonny pistikprogrammid"
 
-#: thonny/plugins/pip_gui.py:1171
+#: thonny/plugins/pip_gui.py:1253
 msgid "Advanced install / upgrade / downgrade"
 msgstr "Täpsem install / versiooni valik"
 
-#: thonny/plugins/pip_gui.py:1180
+#: thonny/plugins/pip_gui.py:1262
 msgid "Desired version"
 msgstr "Soovitud versioon"
 
-#: thonny/plugins/pip_gui.py:1239
+#: thonny/plugins/pip_gui.py:1321
 msgid "Upgrade dependencies"
 msgstr "Uuenda sõltuvused"
 
-#: thonny/plugins/pip_gui.py:1324
+#: thonny/plugins/pip_gui.py:1406
 msgid "Requires:"
 msgstr "Nõuab:"
 
-#: thonny/plugins/pip_gui.py:1328
+#: thonny/plugins/pip_gui.py:1410
 msgid "Error:"
 msgstr "Viga:"
 
-#: thonny/plugins/pip_gui.py:1541
+#: thonny/plugins/pip_gui.py:1601
 msgid "Manage packages..."
 msgstr "Halda lisapakke..."
 
-#: thonny/plugins/pip_gui.py:1547
+#: thonny/plugins/pip_gui.py:1607
 msgid "Manage plug-ins..."
 msgstr "Halda pistikprogramme..."
 
-#: thonny/plugins/replayer.py:365
+#: thonny/plugins/replayer.py:364
 msgid "Open replayer..."
 msgstr "Ava Taasesitaja..."
 
-#: thonny/plugins/run_debug_config_page.py:14
+#: thonny/plugins/run_debug_config_page.py:21
 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
+#: thonny/plugins/run_debug_config_page.py:35
 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
+#: thonny/plugins/run_debug_config_page.py:36
 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
+#: thonny/plugins/run_debug_config_page.py:42
 msgid "Open and close Stack view automatically"
 msgstr "Ava ja sulge Pinu vaade automaatselt"
 
-#: thonny/plugins/run_debug_config_page.py:30
+#: thonny/plugins/run_debug_config_page.py:43
 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
+#: thonny/plugins/run_debug_config_page.py:52
 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
+#: thonny/plugins/run_debug_config_page.py:53
 msgid "May make debugging slower."
 msgstr "Võib teha silumise aeglasemaks."
 
-#: thonny/plugins/run_debug_config_page.py:45
+#: thonny/plugins/run_debug_config_page.py:58
 msgid "Preferred debugger"
 msgstr "Eelistatud silur"
 
-#: thonny/plugins/run_debug_config_page.py:57
+#: thonny/plugins/run_debug_config_page.py:70
 msgid "(used when clicking Debug toolbar button)"
 msgstr "(rakendatakse \"Silur\" tööriistariba nupu klõpsamisel)"
 
-#: thonny/plugins/run_debug_config_page.py:62
+#: thonny/plugins/run_debug_config_page.py:75
 msgid "Birdseye port"
 msgstr "Birdseye port"
 
-#: thonny/plugins/run_debug_config_page.py:66
+#: thonny/plugins/run_debug_config_page.py:79
 msgid "(restart Thonny after changing this)"
 msgstr "(taaskäivita Thonny peale selle muutmist)"
 
-#: thonny/plugins/run_debug_config_page.py:74
+#: thonny/plugins/run_debug_config_page.py:87
 msgid "Run & Debug"
 msgstr "Käivitamine"
 
@@ -1062,51 +1050,51 @@ msgstr "NB! Automaatset sulgemist tuleb lubada Terminali seadetes\n"
 msgid "Terminal"
 msgstr "Terminal"
 
-#: thonny/plugins/theme_and_font_config_page.py:40
+#: thonny/plugins/theme_and_font_config_page.py:39
 msgid "UI theme"
 msgstr "Kasutajaliidese stiil"
 
-#: thonny/plugins/theme_and_font_config_page.py:53
+#: thonny/plugins/theme_and_font_config_page.py:52
 msgid "Syntax theme"
 msgstr "Süntaksi stiil"
 
-#: thonny/plugins/theme_and_font_config_page.py:85
+#: thonny/plugins/theme_and_font_config_page.py:84
 msgid "Editor font"
 msgstr "Redaktori font"
 
-#: thonny/plugins/theme_and_font_config_page.py:108
+#: thonny/plugins/theme_and_font_config_page.py:107
 msgid "IO font"
 msgstr "Sisend/väljund font"
 
-#: thonny/plugins/theme_and_font_config_page.py:133
+#: thonny/plugins/theme_and_font_config_page.py:132
 msgid "Preview"
 msgstr "Eelvaade"
 
-#: thonny/plugins/theme_and_font_config_page.py:151
+#: thonny/plugins/theme_and_font_config_page.py:150
 msgid "This is a comment"
 msgstr "See on kommentaar"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:153
 msgid "The answer is"
 msgstr "Vastus on"
 
-#: thonny/plugins/theme_and_font_config_page.py:158
+#: thonny/plugins/theme_and_font_config_page.py:157
 msgid "unclosed_string"
 msgstr "sulgemata_string"
 
-#: thonny/plugins/theme_and_font_config_page.py:160
+#: thonny/plugins/theme_and_font_config_page.py:159
 msgid "blah, blah"
 msgstr "blaa, blaa"
 
-#: thonny/plugins/theme_and_font_config_page.py:184
+#: thonny/plugins/theme_and_font_config_page.py:183
 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:223
+#: thonny/plugins/theme_and_font_config_page.py:222
 msgid "Enter an integer"
 msgstr "Sisesta täisarv"
 
-#: thonny/plugins/theme_and_font_config_page.py:236
+#: thonny/plugins/theme_and_font_config_page.py:235
 msgid "Theme & Font"
 msgstr "Stiil & font"
 
@@ -1134,27 +1122,27 @@ msgstr "CircuitPythoni seade"
 msgid "MicroPython device"
 msgstr "MicroPythoni seade"
 
-#: thonny/plugins/micropython/mp_front.py:547
+#: thonny/plugins/micropython/mp_front.py:558
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "Ühenda seade arvutiga ja vali allpoolt selle port"
 
-#: thonny/plugins/micropython/mp_front.py:550
+#: thonny/plugins/micropython/mp_front.py:561
 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/mp_front.py:552
+#: thonny/plugins/micropython/mp_front.py:563
 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/mp_front.py:444
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port"
 msgstr "Port"
 
-#: thonny/plugins/micropython/mp_front.py:454
+#: thonny/plugins/micropython/mp_front.py:458
 msgid "Try to detect port automatically"
 msgstr "Proovi tuvastada port automaatselt"
 
-#: thonny/plugins/micropython/__init__.py:25
+#: thonny/plugins/micropython/__init__.py:24
 msgid "MicroPython (generic)"
 msgstr "MicroPython (üldine)"
 
@@ -1166,7 +1154,7 @@ msgstr "Prindi..."
 msgid "Open system shell..."
 msgstr "Ava süsteemi käsurida / terminal"
 
-#: thonny/plugins/backend_config_page.py:110
+#: thonny/plugins/backend_config_page.py:109
 msgid "Details"
 msgstr "Detailid"
 
@@ -1178,7 +1166,7 @@ msgstr "Installi sõltuvusfaili järgi"
 msgid "Install from local file"
 msgstr "Installi lokaalsest failist"
 
-#: thonny/plugins/pip_gui.py:1118
+#: thonny/plugins/pip_gui.py:1200
 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"
@@ -1188,15 +1176,15 @@ msgstr "See dialoog on mõeldud Thonny pistiprogrammide haldamiseks.\n"
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (üldine)"
 
-#: thonny/plugins/commenting_indenting.py:143
+#: thonny/plugins/commenting_indenting.py:142
 msgid "Indent selected lines"
 msgstr "Suurenda ridade taanet"
 
-#: thonny/plugins/commenting_indenting.py:153
+#: thonny/plugins/commenting_indenting.py:152
 msgid "Dedent selected lines"
 msgstr "Vähenda ridade taanet"
 
-#: thonny/workbench.py:1479
+#: thonny/workbench.py:1481
 msgid "Switch to\n"
 "regular\n"
 "mode"
@@ -1204,87 +1192,83 @@ msgstr "Mine\n"
 "tavalisse\n"
 "režiimi"
 
-#: thonny/plugins/microbit/__init__.py:58
+#: thonny/plugins/microbit/__init__.py:62
 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:60
+#: thonny/plugins/microbit/__init__.py:64
 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:44
-msgid "please wait"
-msgstr "palun oota"
-
-#: thonny/misc_utils.py:151
+#: thonny/misc_utils.py:177
 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:154
+#: thonny/misc_utils.py:180
 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:170
+#: thonny/misc_utils.py:196
 msgid "Can't find suitable disk"
 msgstr "Ei leia sobivat draivi."
 
-#: thonny/base_file_browser.py:290
+#: thonny/base_file_browser.py:294
 msgid "%d items"
 msgstr "%d üksust"
 
-#: thonny/base_file_browser.py:739
+#: thonny/base_file_browser.py:743
 msgid "Move to Trash"
 msgstr "Liiguta Prügikasti"
 
-#: thonny/base_file_browser.py:742
+#: thonny/base_file_browser.py:746
 msgid "Delete"
 msgstr "Kustuta"
 
-#: thonny/base_file_browser.py:721 thonny/base_file_browser.py:874
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
 msgid "New directory"
 msgstr "Uus kaust"
 
-#: thonny/base_file_browser.py:745
+#: thonny/base_file_browser.py:749
 msgid "Properties"
 msgstr "Omadused"
 
-#: thonny/base_file_browser.py:747
+#: thonny/base_file_browser.py:751
 msgid "Storage space"
 msgstr "Salvestusruum"
 
-#: thonny/base_file_browser.py:757
+#: thonny/base_file_browser.py:761
 msgid "Path"
 msgstr "Tee"
 
-#: thonny/base_file_browser.py:759
+#: thonny/base_file_browser.py:763
 msgid "Directory properties"
 msgstr "Kausta omadused"
 
-#: thonny/base_file_browser.py:761
+#: thonny/base_file_browser.py:765
 msgid "File properties"
 msgstr "Faili omadused"
 
-#: thonny/base_file_browser.py:763
+#: thonny/base_file_browser.py:767
 msgid "bytes"
 msgstr "baiti"
 
-#: thonny/base_file_browser.py:766
+#: thonny/base_file_browser.py:770
 msgid "Size"
 msgstr "Suurus"
 
-#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:777
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
 msgid "Modified"
 msgstr "Muudetud"
 
-#: thonny/base_file_browser.py:838
+#: thonny/base_file_browser.py:842
 msgid "Deleting %s"
 msgstr "Kustutan %s"
 
-#: thonny/editors.py:260
+#: thonny/editors.py:262
 msgid "Loading"
 msgstr "Laadin"
 
-#: thonny/editors.py:389
+#: thonny/editors.py:395
 msgid "Saving"
 msgstr "Salvestan"
 
@@ -1300,125 +1284,125 @@ msgstr "Laadi %s alla kausta %s"
 msgid "Download to %s"
 msgstr "Laadi alla kausta %s"
 
-#: thonny/base_file_browser.py:646
+#: thonny/base_file_browser.py:650
 msgid "Open in system file manager"
 msgstr "Ava süsteemi failihalduris"
 
-#: thonny/base_file_browser.py:674
+#: thonny/base_file_browser.py:678
 msgid "Hide hidden files"
 msgstr "Peida varjatud failid"
 
-#: thonny/base_file_browser.py:674
+#: thonny/base_file_browser.py:678
 msgid "Show hidden files"
 msgstr "Näita varjatud faile"
 
-#: thonny/base_file_browser.py:657
+#: thonny/base_file_browser.py:661
 msgid "Open in Thonny"
 msgstr "Ava Thonnys"
 
-#: thonny/base_file_browser.py:688
+#: thonny/base_file_browser.py:692
 msgid "Open in system default app"
 msgstr "Ava süsteemi vaikerakendusega"
 
-#: thonny/base_file_browser.py:669 thonny/base_file_browser.py:696
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
 msgid "Configure %s files"
 msgstr "Seadista %s failid"
 
-#: thonny/base_file_browser.py:697
+#: thonny/base_file_browser.py:701
 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:1254 thonny/editors.py:979 thonny/editors.py:981
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
 msgid "Deleting"
 msgstr "Kustutan"
 
-#: thonny/base_file_browser.py:1261
+#: thonny/base_file_browser.py:1265
 msgid "Creating directory"
 msgstr "Loon kausta"
 
-#: thonny/editors.py:258
+#: thonny/editors.py:260
 msgid "Loading %s"
 msgstr "Laadin %s"
 
-#: thonny/editors.py:384
+#: thonny/editors.py:390
 msgid "Saving to %s"
 msgstr "Salvestan %s"
 
-#: thonny/editors.py:720 thonny/editors.py:722
+#: thonny/editors.py:728 thonny/editors.py:730
 msgid "Save All files"
 msgstr "Salvesta kõik failid"
 
-#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:877
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
 msgid "Configure interpreter..."
 msgstr "Seadista interpretaator..."
 
-#: thonny/workbench.py:1589
+#: thonny/workbench.py:1591
 msgid "Device"
 msgstr "Seade"
 
-#: thonny/workdlg.py:193
+#: thonny/workdlg.py:234
 msgid "Cancelling"
 msgstr "Tühistan"
 
-#: thonny/workdlg.py:220
+#: thonny/workdlg.py:270
 msgid "Starting"
 msgstr "Alustan"
 
-#: thonny/plugins/backend_config_page.py:251
+#: thonny/plugins/backend_config_page.py:249
 msgid "Authentication"
 msgstr "Autentimine"
 
-#: thonny/plugins/backend_config_page.py:253
+#: thonny/plugins/backend_config_page.py:251
 msgid "Enter the passphrase of your private key for\n"
 "{}"
 msgstr "Sisesta oma privaatvõtme parool {} jaoks"
 
-#: thonny/plugins/backend_config_page.py:256
+#: thonny/plugins/backend_config_page.py:254
 msgid "Enter your password for\n"
 "{}"
 msgstr "Sisesta parool {} jaoks"
 
-#: thonny/plugins/object_inspector.py:487
+#: thonny/plugins/object_inspector.py:486
 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:645
+#: thonny/plugins/pip_gui.py:682
 msgid "Search results"
 msgstr "Otsingutulemused"
 
-#: thonny/plugins/pip_gui.py:646
+#: thonny/plugins/pip_gui.py:683
 msgid "Searching"
 msgstr "Otsin"
 
-#: thonny/plugins/pip_gui.py:728 thonny/plugins/pip_gui.py:817
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
 msgid "Installing '%s'"
 msgstr "Installin '%s'"
 
-#: thonny/plugins/pip_gui.py:734
+#: thonny/plugins/pip_gui.py:793
 msgid "Upgrading '%s'"
 msgstr "Uendan '%s'"
 
-#: thonny/plugins/pip_gui.py:741
+#: thonny/plugins/pip_gui.py:800
 msgid "Uninstalling '%s'"
 msgstr "Deinstallin '%s'"
 
-#: thonny/plugins/pip_gui.py:755
+#: thonny/plugins/pip_gui.py:814
 msgid "Installing"
 msgstr "Installin"
 
-#: thonny/plugins/pip_gui.py:1502
+#: thonny/plugins/pip_gui.py:1562
 msgid "Package manager is not available for this interpreter"
 msgstr "Pakihaldur pole selle interpretaatori jaoks kättesaadav"
 
-#: thonny/base_file_browser.py:1205 thonny/plugins/pip_gui.py:1516
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
 msgid "Not supported"
 msgstr "Pole toetatud"
 
-#: thonny/plugins/micropython/pip_gui.py:100 thonny/plugins/pip_gui.py:1521
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
 msgid "Not available"
 msgstr "Pole kättesaadav"
 
-#: thonny/plugins/pip_gui.py:1522
+#: thonny/plugins/pip_gui.py:1582
 msgid "You need to stop your program before launching the package manager."
 msgstr "Enne pakihalduri avamist pead oma programmi töö lõpetama"
 
@@ -1426,11 +1410,11 @@ msgstr "Enne pakihalduri avamist pead oma programmi töö lõpetama"
 msgid "Open evaluated values in Object inspector"
 msgstr "Ava väärtused Objektivaaturis"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:209
+#: thonny/plugins/cpython_frontend/cp_front.py:234
 msgid "Python executable"
 msgstr "Pythoni käivitusfail"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:232
+#: thonny/plugins/cpython_frontend/cp_front.py:258
 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)!"
@@ -1446,84 +1430,47 @@ msgstr "Python 3 teises masinas (SSH)"
 msgid "Not connected"
 msgstr "Pole ühendatud"
 
-#: thonny/plugins/micropython/mp_front.py:521
-msgid "Advanced options"
-msgstr "Lisaseaded"
-
-#: thonny/plugins/micropython/mp_front.py:547
-msgid "Install or update firmware"
-msgstr "Paigalda või uuenda püsivara"
-
-#: thonny/plugins/micropython/__init__.py:36
+#: thonny/plugins/micropython/__init__.py:35
 msgid "MicroPython (local)"
 msgstr "MicroPython (lokaalne)"
 
-#: thonny/plugins/micropython/__init__.py:47
+#: thonny/plugins/micropython/__init__.py:46
 msgid "MicroPython (SSH)"
 msgstr "MicroPython (SSH)"
 
-#: thonny/plugins/micropython/pip_gui.py:77
-msgid "Scope"
-msgstr "Skoop"
-
-#: thonny/plugins/micropython/pip_gui.py:90
-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:99
-msgid "New packages will be installed to"
-msgstr "Uued pakid installitakse kausta"
-
-#: thonny/plugins/micropython/pip_gui.py:102
+#: thonny/plugins/micropython/pip_gui.py:144
 msgid "no absolute lib directory in sys.path"
 msgstr "sys.path ei sisalda absoluutset lib kausta"
 
-#: thonny/plugins/micropython/uf2dialog.py:39
-msgid "Version to be installed"
-msgstr "Installitav versioon"
-
-#: thonny/plugins/micropython/uf2dialog.py:47
-msgid "Target device location"
-msgstr "Seadme asukoht"
-
-#: thonny/plugins/micropython/uf2dialog.py:58
-msgid "Target device model"
-msgstr "Seadme mudel"
-
-#: thonny/plugins/micropython/uf2dialog.py:146
-msgid "Please wait"
-msgstr "Palun oota"
-
-#: thonny/plugins/pip_gui.py:70
+#: thonny/plugins/pip_gui.py:71
 msgid "Search on PyPI"
 msgstr "Otsi PyPI-st"
 
-#: thonny/base_file_browser.py:689
+#: thonny/base_file_browser.py:693
 msgid "Open in Thonny's text editor"
 msgstr "Ava Thonny tekstiredaktoris"
 
-#: thonny/base_file_browser.py:342
+#: thonny/base_file_browser.py:346
 msgid "Storage space on this drive or filesystem"
 msgstr "Salvestusruum sellel kettal või failisüsteemis"
 
-#: thonny/base_file_browser.py:343
+#: thonny/base_file_browser.py:347
 msgid "total space"
 msgstr "koguruum"
 
-#: thonny/base_file_browser.py:345
+#: thonny/base_file_browser.py:349
 msgid "used space"
 msgstr "kasutatud ruum"
 
-#: thonny/base_file_browser.py:346
+#: thonny/base_file_browser.py:350
 msgid "free space"
 msgstr "vaba ruum"
 
-#: thonny/base_file_browser.py:353
+#: thonny/base_file_browser.py:357
 msgid "Storage info"
 msgstr "Salvestusruumi info"
 
-#: thonny/plugins/commenting_indenting.py:163
+#: thonny/plugins/commenting_indenting.py:162
 msgid "Replace tabs with spaces"
 msgstr "Asenda tab-sümbolid tühikutega"
 
@@ -1535,72 +1482,72 @@ msgstr "Too tab-sümbolid esile"
 msgid "Indent with tab characters (not recommended for Python)"
 msgstr "Taanda tab-sümbolitega (mittesoovitav Pythoni koodis)"
 
-#: thonny/base_file_browser.py:91 thonny/memory.py:63
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
 msgid "Name"
 msgstr "Nimi"
 
-#: thonny/base_file_browser.py:95
+#: thonny/base_file_browser.py:96
 msgid "Size (bytes)"
 msgstr "Suurus (baitides)"
 
-#: thonny/base_file_browser.py:875
+#: thonny/base_file_browser.py:879
 msgid "Enter name for new directory under\n"
 "%s"
 msgstr "Sisesta uue kausta nimi \n"
 "(%s all)"
 
-#: thonny/base_file_browser.py:898
+#: thonny/base_file_browser.py:902
 msgid "Nothing selected"
 msgstr "Midagi pole märgitud"
 
-#: thonny/base_file_browser.py:898
+#: thonny/base_file_browser.py:902
 msgid "Select an item and try again!"
 msgstr "Märgi midagi ja proovi uuesti"
 
-#: thonny/base_file_browser.py:1325
+#: thonny/base_file_browser.py:1329
 msgid "Open from %s"
 msgstr "Ava asukohast %s"
 
-#: thonny/base_file_browser.py:1328
+#: thonny/base_file_browser.py:1332
 msgid "Save to %s"
 msgstr "Salvesta %s alla"
 
-#: thonny/base_file_browser.py:1347
+#: thonny/base_file_browser.py:1351
 msgid "File name:"
 msgstr "Faili nimi:"
 
-#: thonny/memory.py:64 thonny/plugins/object_inspector.py:539
-#: thonny/plugins/object_inspector.py:618
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
 msgid "Value ID"
 msgstr "Väärtuse ID"
 
 #: thonny/memory.py:65 thonny/plugins/heap.py:23
-#: thonny/plugins/object_inspector.py:540
-#: thonny/plugins/object_inspector.py:619
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
 msgid "Value"
 msgstr "Väärtus"
 
-#: thonny/plugins/backend_config_page.py:274
+#: thonny/plugins/backend_config_page.py:272
 msgid "Save password"
 msgstr "Salvesta parool"
 
-#: thonny/plugins/debugger.py:553
+#: thonny/plugins/debugger.py:557
 msgid "Function call at %s"
 msgstr "Funktsiooni väljakutse (%s)"
 
-#: thonny/plugins/debugger.py:1003
+#: thonny/plugins/debugger.py:1006
 msgid "Local variables"
 msgstr "Lokaalsed muutujad"
 
-#: thonny/plugins/debugger.py:1035
+#: thonny/plugins/debugger.py:1038
 msgid "Function"
 msgstr "Funktsioon"
 
-#: thonny/plugins/debugger.py:1036
+#: thonny/plugins/debugger.py:1039
 msgid "Location"
 msgstr "Asukoht"
 
-#: thonny/plugins/debugger.py:1112
+#: thonny/plugins/debugger.py:1115
 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."
 
@@ -1616,15 +1563,15 @@ msgstr "Andmed"
 msgid "Attributes"
 msgstr "Atribuudid"
 
-#: thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:537
 msgid "Index"
 msgstr "Indeks"
 
-#: thonny/plugins/object_inspector.py:616
+#: thonny/plugins/object_inspector.py:615
 msgid "Key ID"
 msgstr "Võtme ID"
 
-#: thonny/plugins/object_inspector.py:617
+#: thonny/plugins/object_inspector.py:616
 msgid "Key"
 msgstr "Võti"
 
@@ -1634,15 +1581,15 @@ msgid "Back to\n"
 msgstr "Tagasi\n"
 "%s"
 
-#: thonny/plugins/micropython/mp_front.py:444
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port or WebREPL"
 msgstr "Port või WebREPL"
 
-#: thonny/plugins/micropython/mp_front.py:589
+#: thonny/plugins/micropython/mp_front.py:599
 msgid "Password"
 msgstr "Parool"
 
-#: thonny/plugins/debugger.py:961
+#: thonny/plugins/debugger.py:964
 msgid "Source code"
 msgstr "Lähtekood"
 
@@ -1658,107 +1605,107 @@ msgstr "Vali kui failidialoogid satuvad peaakna taha"
 msgid "Environment variables (one KEY=VALUE per line)"
 msgstr "Keskkonnamuutujad (üks VÕTI=VÄÄRTUS ühel real)"
 
-#: thonny/base_file_browser.py:718
+#: thonny/base_file_browser.py:722
 msgid "New file"
 msgstr "Uus fail"
 
-#: thonny/base_file_browser.py:736
+#: thonny/base_file_browser.py:740
 msgid "Rename"
 msgstr "Nimeta ümber"
 
-#: thonny/base_file_browser.py:924
+#: thonny/base_file_browser.py:928
 msgid "Rename '%s'"
 msgstr "Nimeta '%s' ümber"
 
-#: thonny/base_file_browser.py:924
+#: thonny/base_file_browser.py:928
 msgid "Enter new name"
 msgstr "Sisesta uus nimi"
 
-#: thonny/base_file_browser.py:1012
+#: thonny/base_file_browser.py:1016
 msgid "Paste failed"
 msgstr "Kleepimine ebaõnnestus"
 
-#: thonny/base_file_browser.py:1012
+#: thonny/base_file_browser.py:1016
 msgid "There are conflicting folders"
 msgstr "Kaustades on konflikte"
 
-#: thonny/base_file_browser.py:1140
+#: thonny/base_file_browser.py:1144
 msgid "File already exists"
 msgstr "Fail juba eksisteerib"
 
-#: thonny/base_file_browser.py:1208
+#: thonny/base_file_browser.py:1212
 msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
 msgstr "Kui tegemist on tekstifailiga, siis Sa saad seadistada Thonny seda avama kui teed paremklõpsu ja valid 'Seadista ... failid'."
 
-#: thonny/editors.py:35
+#: thonny/editors.py:38
 msgid "Python files"
 msgstr "Pythoni failid"
 
-#: thonny/editors.py:122 thonny/editors.py:189
+#: thonny/editors.py:123 thonny/editors.py:189
 msgid "<untitled>"
 msgstr "<nimetu>"
 
-#: thonny/editors.py:149
+#: thonny/editors.py:150
 msgid "File is gone"
 msgstr "Faili ei leitud"
 
-#: thonny/editors.py:152
+#: thonny/editors.py:153
 msgid "Do you want to also close the editor?"
 msgstr "Kas soovid redaktorit sulgeda?"
 
-#: thonny/editors.py:168
+#: thonny/editors.py:169
 msgid "External modification"
 msgstr "Väline muudatus"
 
-#: thonny/editors.py:171
+#: thonny/editors.py:172
 msgid "Do you want to discard current editor content and reload the file from disk?"
 msgstr "Kas soovid redaktori praeguse sisu tühistada ja laadida faili kettalt uuesti?"
 
-#: thonny/editors.py:580
+#: thonny/editors.py:588
 msgid "Python files usually have .py extension."
 msgstr "Pythoni failidel on tavaliselt .py laiend."
 
-#: thonny/editors.py:582
+#: thonny/editors.py:590
 msgid "Did you mean '%s'?"
 msgstr "Kas mõtlesid '%s'?"
 
-#: thonny/editors.py:751
+#: thonny/editors.py:759
 msgid "Move / rename..."
 msgstr "Liiguta / nimeta ümber..."
 
-#: thonny/editors.py:760
+#: thonny/editors.py:768
 msgid "Go to line..."
 msgstr "Mine reale..."
 
-#: thonny/editors.py:1003
+#: thonny/editors.py:1010
 msgid "Line number"
 msgstr "Rea number"
 
-#: thonny/editors.py:1149
+#: thonny/editors.py:1156
 msgid "Do you want to save files before closing?"
 msgstr "Kas soovid enne sulgemist failid salvestada?"
 
-#: thonny/editors.py:1151
+#: thonny/editors.py:1158
 msgid "Do you want to save file before closing?"
 msgstr "Kas soovid enne sulgemist faili salvestada?"
 
-#: thonny/editors.py:1154
+#: thonny/editors.py:1161
 msgid "Save On Close"
 msgstr "Sulgemisel salvestamine"
 
-#: thonny/misc_utils.py:513
+#: thonny/misc_utils.py:539
 msgid "Command not available"
 msgstr "Käsk pole saadaval"
 
-#: thonny/misc_utils.py:514
+#: thonny/misc_utils.py:540
 msgid "This command is not available if Thonny is run via Flatpak"
 msgstr "See käsk pole saadaval, kui Thonny jooksutatakse Flatpak-i kaudu"
 
-#: thonny/workbench.py:694 thonny/workbench.py:794
+#: thonny/workbench.py:700 thonny/workbench.py:799
 msgid "Support Ukraine"
 msgstr "Toeta Ukrainat"
 
-#: thonny/plugins/backend_config_page.py:91
+#: thonny/plugins/backend_config_page.py:90
 msgid "Which kind of interpreter should Thonny use for running your code?"
 msgstr "Millist tüüpi interpretaatoriga peaks Thonny Su koodi jooksutama?"
 
@@ -1786,7 +1733,7 @@ msgstr "Luba küsida sõnade lõpetamisi Tab-klahviga redaktoris"
 msgid "Request completions with Tab-key in Shell"
 msgstr "Luba küsida sõnade lõpetamisi Tab-klahviga Käsureal"
 
-#: thonny/plugins/goto_definition.py:58
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
 msgid "Problem"
 msgstr "Probleem"
 
@@ -1798,76 +1745,76 @@ msgstr "Ei leidnud definitsiooni"
 msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
 msgstr "Tühjenda Käsurida enne uue protsessi käivitamist (Jooksuta, Silu, Peata/taaskäivita, ...)"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:171
+#: thonny/plugins/cpython_frontend/cp_front.py:196
 msgid "Thonny's Python"
 msgstr "Thonny Pyhton"
 
-#: thonny/plugins/micropython/mp_front.py:492
+#: thonny/plugins/micropython/mp_front.py:496
 msgid "Interrupt working program on connect"
 msgstr "Katkesta ühendumisel töötav programm"
 
-#: thonny/plugins/micropython/mp_front.py:500
+#: thonny/plugins/micropython/mp_front.py:504
 msgid "Synchronize device's real time clock"
 msgstr "Sünkroniseeri seadme kell"
 
-#: thonny/plugins/micropython/mp_front.py:506
+#: thonny/plugins/micropython/mp_front.py:510
 msgid "Use local time in real time clock"
 msgstr "Kasuta seadme kellas lokaalset aega"
 
-#: thonny/plugins/micropython/mp_front.py:512
+#: thonny/plugins/micropython/mp_front.py:516
 msgid "Restart interpreter before running a script"
 msgstr "Taaskäivita interpretaator enne skripti jooksutamist"
 
-#: thonny/plugins/micropython/pip_gui.py:24
+#: thonny/plugins/micropython/pip_gui.py:26
 msgid "This doesn't look like MicroPython/CircuitPython package.\n"
 "Are you sure you want to install it?"
 msgstr "See ei paista olevat MicroPythoni või CircuitPythoni pakk. Oled kindel, et soovid seda installida?"
 
-#: thonny/base_file_browser.py:849
+#: thonny/base_file_browser.py:853
 msgid "Moving to Trash"
 msgstr "Liigutan Prügikasti"
 
-#: thonny/base_file_browser.py:850
+#: thonny/base_file_browser.py:854
 msgid "Move %s to Trash?"
 msgstr "Kas liigutan %s Prügikasti?"
 
-#: thonny/base_file_browser.py:857
+#: thonny/base_file_browser.py:861
 msgid "Moving %s to Trash"
 msgstr "Liigutan %s Prügikasti"
 
-#: thonny/base_file_browser.py:662
+#: thonny/base_file_browser.py:666
 msgid "Open in default external app"
 msgstr "Ava välises vaikerakenduses"
 
-#: thonny/base_file_browser.py:1206
+#: thonny/base_file_browser.py:1210
 msgid "Opening remote files in external app is not supported."
 msgstr "Välises rakenduses ei saa avada mittelokaalseid faile."
 
-#: thonny/base_file_browser.py:1213
+#: thonny/base_file_browser.py:1217
 msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
 msgstr "Kui faili on vaja avada välises rakenduses, siis lae see kõigepealt alla lokaalsesse kausta ja ava sealt!"
 
-#: thonny/editors.py:150
+#: thonny/editors.py:151
 msgid "Looks like '%s' was deleted or moved."
 msgstr "Näib, et '%s' on kustutatud või ümberpaigutatud."
 
-#: thonny/editors.py:169
+#: thonny/editors.py:170
 msgid "Looks like '%s' was modified outside of the editor."
 msgstr "Näib, et '%s' on muudetud väljaspool redaktorit."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:230
+#: thonny/plugins/cpython_frontend/cp_front.py:256
 msgid "NB! Thonny only supports Python %s and later"
 msgstr "NB! Thonny toetab ainult Python %s ja sellest uuemaid"
 
-#: thonny/editors.py:1003
+#: thonny/editors.py:1010
 msgid "Go to line"
 msgstr "Mine reale"
 
-#: thonny/workbench.py:697
+#: thonny/workbench.py:703
 msgid "Support"
 msgstr "Toeta"
 
-#: thonny/editors.py:393 thonny/editors.py:408
+#: thonny/editors.py:399 thonny/editors.py:414
 msgid "Could not save"
 msgstr "Salvestamine ei õnnestunud"
 
@@ -1881,15 +1828,15 @@ msgid "If you quote the value of an environment variable, the quotes will be par
 msgstr "Kui Sa paned keskkonnamuutuja väärtuse jutumärkidesse, siis jutumärgid saavad väärtuse osaks.\n"
 "Kas soovisid nii?"
 
-#: thonny/workbench.py:867
+#: thonny/workbench.py:870
 msgid "Install MicroPython"
 msgstr "Installi MicroPython"
 
-#: thonny/workbench.py:871
+#: thonny/workbench.py:874
 msgid "Install CircuitPython"
 msgstr "Installi CircuitPython"
 
-#: thonny/plugins/backend_config_page.py:212
+#: thonny/plugins/backend_config_page.py:210
 msgid "Make uploaded shebang scripts executable"
 msgstr "Tee üleslaetud shebang-skriptid käivitatavaks"
 
@@ -1901,7 +1848,7 @@ msgstr "Tee salvestatud shebang-skriptid käivitatavaks"
 msgid "Activate virtual environment"
 msgstr "Aktiveeri virtuaalkeskkond"
 
-#: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
 msgid "Target"
 msgstr "Sihtkoht"
 
@@ -1909,24 +1856,24 @@ msgstr "Sihtkoht"
 msgid "Visualize current script at Python Tutor"
 msgstr "Visualiseeri käesolev skript Python Tutor-is"
 
-#: thonny/plugins/todo_view.py:44
+#: thonny/plugins/todo_view.py:43
 msgid "Line"
 msgstr "Rida"
 
-#: thonny/plugins/todo_view.py:45
+#: thonny/plugins/todo_view.py:44
 msgid "Info"
 msgstr "Info"
 
-#: thonny/plugins/todo_view.py:123
+#: thonny/plugins/todo_view.py:121
 msgid "No line marked with #todo found"
 msgstr "Ei leidnud ühtki #todo rida"
 
-#: thonny/plugins/todo_view.py:143
+#: thonny/plugins/todo_view.py:141
 msgid "TODO"
 msgstr "TODO"
 
-#: thonny/plugins/circuitpython/cirpy_front.py:98
-#: thonny/plugins/micropython/mp_front.py:536
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
 msgid "Install or update %s"
 msgstr "Installi või uuenda %s"
 
@@ -1934,7 +1881,7 @@ msgstr "Installi või uuenda %s"
 msgid "Local Python 3"
 msgstr "Kohalik Python 3"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:240
+#: thonny/plugins/cpython_frontend/cp_front.py:266
 msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
 msgstr "Virtuaalkeskkonna saab aktiveerida ka paremklõpsuga failibrauseris keskkonna kaustal või pyvenv.cfg failil"
 
@@ -1946,11 +1893,99 @@ msgstr "Ettevalmistused (ignoreeri VS Code osa)"
 msgid "Default password"
 msgstr "Vaikeparool"
 
-#: thonny/running.py:338
+#: thonny/running.py:392
 msgid "Information"
 msgstr "Informatsioon"
 
-#: thonny/running.py:339
+#: thonny/running.py:393
 msgid "For debugging the program must be saved first."
 msgstr "Silumiseks tuleb programm enne salvestada."
 
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr "%s ei paista olevat tekstifail"
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr "Faili laadimise probleem"
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr "Sellel failil paistab olevat probleem kodeeringuga.\n"
+"\n"
+"Veendu, et see oleks UTF-8 kodeeringus või et tal oleks sobiv kodeeringumarker."
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr "Fail on avatud"
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr "See fail on juba Thonnys avatud.\n"
+"\n"
+"Kui soovid salvestada sellise nimega,\n"
+"siis sulge esmalt vastav redaktor!"
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr "Ligipääsu viga"
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr "Paistab, et see fail või kaust ei ole muudetav."
+
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr "Tagasüsteem pole valmis"
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr "Kuhu salvestada?"
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr "Potentsiaalne probleem"
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr "Kui Sa paned oma skripti nimeks '%s', siis ei saa sa importida teegi moodulit '%s'"
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr "Kas soovid siiski kasutada oma skripti jaoks seda nime?"
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr "Sain ligipääsu vea, kui proovisin laadida\n"
+"%s"
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr "Proovi seda avada \"Fail => Ava\" abil."
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr "Ligipääsu viga"
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr "Luba jooksutada nimetuid programme"
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr "Litsents"
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr "Hoiata, kui kasutajamoodul varjab mõne teegimooduli"
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
+msgstr "Otsi (micropython-lib ja PyPI)"
+
diff --git a/thonny/locale/fa_IR/LC_MESSAGES/thonny.mo b/thonny/locale/fa_IR/LC_MESSAGES/thonny.mo
index 6c91611..c7eea68 100644
Binary files a/thonny/locale/fa_IR/LC_MESSAGES/thonny.mo and b/thonny/locale/fa_IR/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/fi_FI/LC_MESSAGES/thonny.mo b/thonny/locale/fi_FI/LC_MESSAGES/thonny.mo
index f5eb93e..ae9bcb2 100644
Binary files a/thonny/locale/fi_FI/LC_MESSAGES/thonny.mo and b/thonny/locale/fi_FI/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/fi_FI/LC_MESSAGES/thonny.po b/thonny/locale/fi_FI/LC_MESSAGES/thonny.po
index 4d949c4..29d1e3a 100644
--- a/thonny/locale/fi_FI/LC_MESSAGES/thonny.po
+++ b/thonny/locale/fi_FI/LC_MESSAGES/thonny.po
@@ -7,71 +7,63 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: fi\n"
 
-#: thonny/workbench.py:357
+#: thonny/workbench.py:369
 msgid "File"
 msgstr "Tiedosto"
 
-#: thonny/workbench.py:358
+#: thonny/workbench.py:370
 msgid "Edit"
 msgstr "Muokkaa"
 
-#: thonny/workbench.py:359
+#: thonny/workbench.py:371
 msgid "View"
 msgstr "Näytä"
 
-#: thonny/running.py:122 thonny/workbench.py:360
+#: thonny/running.py:116 thonny/workbench.py:372
 msgid "Run"
 msgstr "Suorita"
 
-#: thonny/workbench.py:361
+#: thonny/workbench.py:373
 msgid "Tools"
 msgstr "Työkalut"
 
-#: thonny/plugins/help/__init__.py:74 thonny/workbench.py:362
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:374
 msgid "Help"
 msgstr "Ohje"
 
-#: thonny/plugins/cpython/__init__.py:610
-msgid "Alternative Python 3 interpreter or virtual environment"
-msgstr "Vaihtoehtoinen Python 3 -tulkki tai virtuaaliympäristö"
-
-#: thonny/plugins/cpython/__init__.py:618
-msgid "A special virtual environment (deprecated)"
-msgstr "Erityinen virtuaaliympäristö"
-
-#: thonny/workbench.py:582
+#: thonny/workbench.py:591
 msgid "Exit"
 msgstr "Lopeta"
 
-#: thonny/workbench.py:609
+#: thonny/workbench.py:618
 msgid "Decrease font size"
 msgstr "Pienennä tekstin kokoa"
 
-#: thonny/workbench.py:621
+#: thonny/workbench.py:630
 msgid "Focus editor"
 msgstr "Vie kursori editoriin"
 
-#: thonny/workbench.py:630
+#: thonny/workbench.py:639
 msgid "Focus shell"
 msgstr "Vie kursori komentoriville"
 
-#: thonny/workbench.py:641
+#: thonny/workbench.py:650
 msgid "Maximize view"
-msgstr "Maksimoi näkymä"
+msgstr "Suurenna näkymä"
 
-#: thonny/workbench.py:653
+#: thonny/workbench.py:662
 msgid "Full screen"
-msgstr "Koko ruudun tila"
+msgstr "Koko näytön tila"
 
-#: thonny/workbench.py:1377
+#: thonny/workbench.py:1465
 msgid "Program arguments"
-msgstr ""
+msgstr "Ohjelman argumentit"
 
-#: thonny/plugins/about.py:28 thonny/plugins/about.py:163
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:151
 msgid "About Thonny"
 msgstr "Tietoja Thonnystä"
 
-#: thonny/plugins/about.py:81
+#: thonny/plugins/about.py:77
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -85,7 +77,7 @@ msgstr "Tehty\n"
 "ja Cybernetica AS:n\n"
 "avustuksella"
 
-#: thonny/plugins/about.py:107
+#: thonny/plugins/about.py:97
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -99,11 +91,11 @@ msgstr "Tällä ohjelmalla\n"
 "https://opensource.org/licenses/MIT\n"
 "-sivulta lisätietoja"
 
-#: thonny/plugins/about.py:152
+#: thonny/plugins/about.py:140
 msgid "Version history"
 msgstr "Versiohistoria"
 
-#: thonny/plugins/about.py:159
+#: thonny/plugins/about.py:147
 msgid "Report problems"
 msgstr "Raportoi virhe"
 
@@ -127,27 +119,23 @@ msgstr "Suorita MyPy-tarkistukset"
 msgid "Disabled checks (one id per line)"
 msgstr "Älä käytä seuraavia tarkistuksia (yksi tunnus riviä kohti)"
 
-#: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:73
+#: thonny/assistance.py:985 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Avustaja"
 
-#: thonny/plugins/autocomplete.py:333
+#: thonny/plugins/autocomplete.py:522
 msgid "Auto-complete"
 msgstr "Automaattitäydennys"
 
-#: thonny/plugins/backend_config_page.py:84
-msgid "Which interpreter or device should Thonny use for running your code?"
-msgstr "Mitä tulkkia tai laitetta Thonnyn pitäisi käyttää suorittaessaan koodiasi?"
-
-#: thonny/plugins/backend_config_page.py:320
+#: thonny/plugins/backend_config_page.py:337
 msgid "Interpreter"
 msgstr "Tulkki"
 
-#: thonny/plugins/birdseye_frontend.py:54
+#: thonny/plugins/birdseye_frontend.py:55
 msgid "About Birdseye"
 msgstr "Tietoa Birdseyestä"
 
-#: thonny/plugins/birdseye_frontend.py:55
+#: thonny/plugins/birdseye_frontend.py:56
 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?"
@@ -155,21 +143,21 @@ msgstr "Birdseye on Python-virheenjäljitin, joka pitää asentaa erikseen.\n"
 "\n"
 "Haluatko avata apusivun ja tietää asiasta enemmän?"
 
-#: thonny/plugins/birdseye_frontend.py:83
+#: thonny/plugins/birdseye_frontend.py:84
 msgid "Debug current script (birdseye)"
 msgstr "Suorita nykyinen skripti virheenjäljittäjässä (birdseye)"
 
 #: thonny/plugins/commenting_indenting.py:172
 msgid "Toggle comment"
-msgstr ""
+msgstr "Merkitse kommentiksi / poista kommenttimerkintä"
 
 #: thonny/plugins/commenting_indenting.py:182
 msgid "Comment out"
-msgstr ""
+msgstr "Lisää kommenttimerkintä"
 
 #: thonny/plugins/commenting_indenting.py:192
 msgid "Uncomment"
-msgstr ""
+msgstr "Poista kommenttimerkintä"
 
 #: thonny/plugins/common_editing_commands.py:21
 msgid "Undo"
@@ -179,15 +167,18 @@ msgstr "Kumoa"
 msgid "Redo"
 msgstr "Tee uudelleen"
 
-#: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2176
+#: thonny/base_file_browser.py:724 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2295
 msgid "Cut"
 msgstr "Leikkaa"
 
-#: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2177
+#: thonny/base_file_browser.py:725 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2296
 msgid "Copy"
 msgstr "Kopioi"
 
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2178
+#: thonny/base_file_browser.py:727 thonny/base_file_browser.py:733
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2297
 msgid "Paste"
 msgstr "Liitä"
 
@@ -195,65 +186,57 @@ msgstr "Liitä"
 msgid "Select all"
 msgstr "Valitse kaikki"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1398
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1401
 msgid "Run to cursor"
 msgstr "Suorita kursoriin asti"
 
-#: thonny/plugins/debugger.py:980
+#: thonny/plugins/debugger.py:982
 msgid "Can't close yet"
 msgstr "Ei voi sulkea"
 
-#: thonny/plugins/debugger.py:981
+#: thonny/plugins/debugger.py:983
 msgid "Use \"Stop\" command if you want to cancel debugging"
-msgstr ""
+msgstr "Käytä \"Seis\"-komentoa jos haluat peruuttaa vianjäljityksen"
 
 #: thonny/plugins/dock_user_windows_frontend.py:28
 msgid "Dock user windows"
-msgstr ""
+msgstr "Telakoi käyttäjän ikkunat"
 
-#: thonny/plugins/editor_config_page.py:15
+#: thonny/plugins/editor_config_page.py:20
 msgid "Highlight matching names"
 msgstr "Korosta vastaavat muuttujanimet"
 
-#: thonny/plugins/editor_config_page.py:21
+#: thonny/plugins/editor_config_page.py:26
 msgid "Highlight local variables"
 msgstr "Korosta paikallasia muuttujia"
 
-#: thonny/plugins/editor_config_page.py:26
+#: thonny/plugins/editor_config_page.py:31
 msgid "Highlight parentheses"
 msgstr "Korosta sulkuja"
 
-#: thonny/plugins/editor_config_page.py:27
+#: thonny/plugins/editor_config_page.py:32
 msgid "Highlight syntax elements"
 msgstr "Korosta syntaksirakenteita"
 
-#: thonny/plugins/editor_config_page.py:31
+#: thonny/plugins/editor_config_page.py:36
 msgid "Highlight current line (requires reopening the editor)"
 msgstr "Korosta nykyinen rivi (vaatii editorin uudelleenavaamisen)"
 
-#: thonny/plugins/editor_config_page.py:36
-msgid "Allow code completion with Tab-key in editors"
-msgstr "Salli koodin täydentäminen tab-näppäimellä editoreissa"
-
-#: thonny/plugins/editor_config_page.py:42
-msgid "Allow code completion with Tab-key in Shell"
-msgstr "Salli koodin täydentäminen tab-näppäimellä tulkissa"
-
-#: thonny/plugins/editor_config_page.py:51
+#: thonny/plugins/editor_config_page.py:73
 msgid "Show line numbers"
 msgstr "Näytä rivinumerot"
 
-#: thonny/plugins/editor_config_page.py:54
+#: thonny/plugins/editor_config_page.py:76
 msgid "Recommended maximum line length\n"
 "(Set to 0 to turn off margin line)"
 msgstr "Suositeltu maksimirivinpituus\n"
 "(aseta 0:aan kytkeäksesi marginaaliviivan pois päältä)"
 
-#: thonny/plugins/editor_config_page.py:75
+#: thonny/plugins/editor_config_page.py:104
 msgid "Editor"
 msgstr "Editori"
 
-#: thonny/plugins/event_logging.py:206
+#: thonny/plugins/event_logging.py:207
 msgid "Export usage logs..."
 msgstr "Vie käyttötiedot..."
 
@@ -261,55 +244,55 @@ msgstr "Vie käyttötiedot..."
 msgid "Events"
 msgstr "Tapahtumat"
 
-#: thonny/plugins/files.py:551
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "Tiedostot"
 
-#: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:437
 msgid "Find & Replace"
-msgstr "Etsi & Korvaa"
+msgstr "Etsi & korvaa"
 
-#: thonny/plugins/find_replace.py:63
+#: thonny/plugins/find_replace.py:66
 msgid "Find:"
 msgstr "Etsittävä:"
 
-#: thonny/plugins/find_replace.py:74
+#: thonny/plugins/find_replace.py:87
 msgid "Replace with:"
 msgstr "Korvaava:"
 
-#: thonny/plugins/find_replace.py:92
+#: thonny/plugins/find_replace.py:105
 msgid "Case sensitive"
 msgstr "Kirjainkoolla on väliä"
 
-#: thonny/plugins/find_replace.py:99
+#: thonny/plugins/find_replace.py:112
 msgid "Up"
 msgstr "Ylös"
 
-#: thonny/plugins/find_replace.py:103
+#: thonny/plugins/find_replace.py:116
 msgid "Down"
 msgstr "Alas"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:125
 msgid "Find"
 msgstr "Etsi"
 
-#: thonny/plugins/find_replace.py:122
+#: thonny/plugins/find_replace.py:135
 msgid "Replace"
 msgstr "Korvaa"
 
-#: thonny/plugins/find_replace.py:130
+#: thonny/plugins/find_replace.py:143
 msgid "Replace+Find"
-msgstr "Korvaa+Etsi"
+msgstr "Korvaa+etsi"
 
-#: thonny/plugins/find_replace.py:140
+#: thonny/plugins/find_replace.py:153
 msgid "Replace all"
 msgstr "Korvaa kaikki"
 
-#: thonny/plugins/find_replace.py:236
+#: thonny/plugins/find_replace.py:253
 msgid "Enter string to be replaced."
 msgstr "Syötä korvattava merkkijono."
 
-#: thonny/plugins/find_replace.py:320
+#: thonny/plugins/find_replace.py:338
 msgid "The specified text was not found!"
 msgstr "Annettua tekstiä ei löytynyt!"
 
@@ -359,19 +342,19 @@ msgstr "Tämä laatikko on tarkoitettu muistiinpanoja varten -- tehtävänannot,
 msgid "Notes"
 msgstr "Muistiinpanot"
 
-#: thonny/plugins/object_inspector.py:111
+#: thonny/plugins/object_inspector.py:116
 msgid "Previous object"
 msgstr "Edellinen olio"
 
-#: thonny/plugins/object_inspector.py:114
+#: thonny/plugins/object_inspector.py:119
 msgid "Next object"
 msgstr "Seuraava olio"
 
-#: thonny/plugins/object_inspector.py:704
+#: thonny/plugins/object_inspector.py:733
 msgid "Object inspector"
 msgstr "Oliotutka"
 
-#: thonny/plugins/outline.py:138
+#: thonny/plugins/outline.py:148
 msgid "Outline"
 msgstr "Rakenne"
 
@@ -379,379 +362,326 @@ msgstr "Rakenne"
 msgid "Pygame Zero mode"
 msgstr "Pygame Zero -tila"
 
-#: thonny/plugins/pip_gui.py:78
-msgid "Find package from PyPI"
-msgstr "Etsi pakettia PyPI:stä"
-
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:79
 msgid "Uninstall"
-msgstr ""
+msgstr "Poista asennus"
 
-#: thonny/editors.py:587 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448
-#: thonny/ui_utils.py:1755 thonny/workdlg.py:155
+#: thonny/editors.py:685 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
+#: thonny/ui_utils.py:1872 thonny/workdlg.py:162
 msgid "Close"
 msgstr "Sulje"
 
-#: thonny/plugins/pip_gui.py:347
+#: thonny/plugins/pip_gui.py:397
 msgid "Click "
-msgstr ""
+msgstr "Napsauta "
 
-#: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382
+#: thonny/plugins/pip_gui.py:398 thonny/plugins/pip_gui.py:409
 msgid "here"
-msgstr ""
+msgstr "tästä"
 
-#: thonny/plugins/pip_gui.py:73
+#: thonny/plugins/pip_gui.py:76
 msgid "Upgrade"
 msgstr "Päivitä"
 
-#: thonny/plugins/esp/__init__.py:365
-#: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70
+#: thonny/plugins/esp/__init__.py:349
+#: thonny/plugins/micropython/uf2dialog.py:410 thonny/plugins/pip_gui.py:73
 msgid "Install"
 msgstr "Asenna"
 
-#: thonny/plugins/pip_gui.py:491
+#: thonny/plugins/pip_gui.py:535
 msgid "Could not find the package from PyPI."
-msgstr "Pakettia ei löytynyt PyPI:stä"
+msgstr "Pakettia ei löytynyt PyPI:stä."
 
-#: thonny/plugins/pip_gui.py:511
+#: thonny/plugins/pip_gui.py:557
 msgid "Latest stable version"
 msgstr "Viimeisin vakaa versio"
 
-#: thonny/plugins/pip_gui.py:513
+#: thonny/plugins/pip_gui.py:559
 msgid "Latest version"
 msgstr "Viimeisin versio"
 
-#: thonny/plugins/pip_gui.py:514
+#: thonny/plugins/pip_gui.py:561
 msgid "Summary"
 msgstr "Tiivistelmä"
 
-#: thonny/plugins/pip_gui.py:515
+#: thonny/plugins/pip_gui.py:563
 msgid "Author"
 msgstr "Tekijä"
 
-#: thonny/plugins/pip_gui.py:516
+#: thonny/plugins/pip_gui.py:565
 msgid "Homepage"
 msgstr "Kotisivu"
 
-#: thonny/plugins/pip_gui.py:518
+#: thonny/plugins/pip_gui.py:567
 msgid "Bugtracker"
 msgstr "Virheidenseuranta"
 
-#: thonny/plugins/pip_gui.py:520
+#: thonny/plugins/pip_gui.py:569
 msgid "Documentation"
 msgstr "Dokumentaatio"
 
-#: thonny/plugins/pip_gui.py:522
+#: thonny/plugins/pip_gui.py:571
 msgid "PyPI page"
 msgstr "PyPI-sivu"
 
-#: thonny/plugins/pip_gui.py:526
+#: thonny/plugins/pip_gui.py:611
 msgid "Requires"
-msgstr ""
+msgstr "Vaatii"
 
-#: thonny/plugins/pip_gui.py:652
+#: thonny/plugins/pip_gui.py:743
 msgid "Really uninstall?"
-msgstr ""
+msgstr "Poistetaanko varmasti?"
 
-#: thonny/plugins/pip_gui.py:657
+#: thonny/plugins/pip_gui.py:748
 msgid "Are you sure you want to uninstall it?"
-msgstr ""
+msgstr "Haluatko varmasti poistaa sen?"
 
-#: thonny/plugins/variables.py:19
+#: thonny/plugins/variables.py:22
 msgid "Back to\n"
 "current frame"
 msgstr ""
 
-#: thonny/plugins/variables.py:73 thonny/plugins/variables.py:75
-#: thonny/plugins/variables.py:138
+#: thonny/plugins/variables.py:80 thonny/plugins/variables.py:82
+#: thonny/plugins/variables.py:145
 msgid "Variables"
 msgstr "Muuttujat"
 
-#: thonny/base_file_browser.py:1313
+#: thonny/base_file_browser.py:1572
 msgid "This computer"
 msgstr "Tämä tietokone"
 
-#: thonny/base_file_browser.py:618
+#: thonny/base_file_browser.py:644
 msgid "Refresh"
 msgstr "Päivitä"
 
-#: thonny/base_file_browser.py:631
+#: thonny/base_file_browser.py:653
 msgid "Focus into"
-msgstr ""
+msgstr "Kohdista kohtaan"
 
-#: thonny/base_file_browser.py:1164
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
+#: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
 msgid "Error"
 msgstr "Virhe"
 
-#: thonny/base_file_browser.py:1164
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
 msgid "You need to select a file!"
 msgstr "Valitse tiedosto!"
 
-#: thonny/base_file_browser.py:1168
+#: thonny/base_file_browser.py:1423
 msgid "Overwrite?"
 msgstr "Kirjoita yli?"
 
-#: thonny/base_file_browser.py:1168
+#: thonny/base_file_browser.py:1423
 msgid "Do you want to overwrite '%s' ?"
 msgstr "Haluatko ylikirjoittaa '%s':n?"
 
-#: thonny/editors.py:552 thonny/editors.py:554
+#: thonny/editors.py:650 thonny/editors.py:652
 msgid "New"
 msgstr "Uusi"
 
-#: thonny/editors.py:565
+#: thonny/editors.py:663
 msgid "Open..."
 msgstr "Avaa..."
 
-#: thonny/editors.py:567
+#: thonny/editors.py:665
 msgid "Load"
 msgstr "Avaa"
 
-#: thonny/editors.py:576
+#: thonny/editors.py:674
 msgid "Recent files"
 msgstr "Viimeisimmät tiedostot"
 
-#: thonny/editors.py:598 thonny/ui_utils.py:450
+#: thonny/editors.py:696 thonny/ui_utils.py:493
 msgid "Close all"
 msgstr "Sulje kaikki"
 
-#: thonny/editors.py:608 thonny/editors.py:610
+#: thonny/editors.py:706 thonny/editors.py:708
 msgid "Save"
 msgstr "Tallenna"
 
-#: thonny/editors.py:633
+#: thonny/editors.py:731
 msgid "Save as..."
 msgstr "Tallenna nimellä..."
 
-#: thonny/editors.py:644
+#: thonny/editors.py:742
 msgid "Save copy..."
 msgstr "Tallenna kopio..."
 
-#: thonny/editors.py:653
-msgid "Rename..."
-msgstr "Nimeä uudelleen..."
-
-#: thonny/config_ui.py:19
+#: thonny/config_ui.py:18
 msgid "Thonny options"
 msgstr "Thonnyn asetukset"
 
-#: thonny/running.py:121
+#: thonny/running.py:115
 msgid "Run current script"
 msgstr "Suorita nykyinen skripti"
 
-#: thonny/running.py:152
+#: thonny/running.py:146
 msgid "Run current script in terminal"
-msgstr ""
+msgstr "Suora nykyinen skripti päätteessä"
 
-#: thonny/running.py:165
+#: thonny/running.py:159
 msgid "Stop/Restart backend"
 msgstr "Seis/käynnistä tulkki uudelleen"
 
-#: thonny/running.py:166
+#: thonny/running.py:160
 msgid "Stop"
 msgstr "Seis"
 
-#: thonny/running.py:177
+#: thonny/running.py:171
 msgid "Interrupt execution"
 msgstr "Keskeytä ohjelman suoritus"
 
-#: thonny/running.py:190
+#: thonny/running.py:184
 msgid "Send EOF / Soft reboot"
-msgstr ""
+msgstr "Lähetä EOF / kevyt uudelleenkäynnistys"
 
-#: thonny/running.py:201
+#: thonny/running.py:195
 msgid "Disconnect"
 msgstr "Katkaise yhteys"
 
-#: thonny/running_config_page.py:23
-msgid "Known interpreters"
-msgstr "Tiedossa olevat tulkit"
-
-#: thonny/running_config_page.py:36
-msgid "Your interpreter isn't in the list?"
-msgstr "Eikö tulkkiasi näy listassa?"
-
-#: thonny/plugins/cpython/__init__.py:391
-msgid "NB! Thonny only supports Python 3.5 and later"
-msgstr "Huom! Thonny tukee vain Python 3.5:ttä ja uudempia"
-
-#: thonny/running_config_page.py:56
-msgid "Create new virtual environment"
-msgstr "Luo uusi virtuaaliympäristö"
-
-#: thonny/running_config_page.py:59
-msgid "Select existing or create a new empty directory"
-msgstr "Valitse olemassaoleva, tai luo uusi tyhjä hakemisto"
-
-#: thonny/plugins/cpython/__init__.py:419
+#: thonny/plugins/cpython_frontend/cp_front.py:269
 msgid "Python interpreters"
 msgstr "Python-tulkit"
 
-#: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696
-#: thonny/plugins/pip_gui.py:709
+#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:270
+#: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
 msgid "all files"
 msgstr "kaikki tiedostot"
 
-#: thonny/plugins/cpython/__init__.py:442
+#: thonny/plugins/cpython_frontend/cp_front.py:298
 msgid "Select empty directory for new virtual environment"
 msgstr "Valitse tyhjä hakemisto uutta virtuaaliympäristöä varten"
 
-#: thonny/plugins/cpython/__init__.py:449
+#: thonny/plugins/cpython_frontend/cp_front.py:305
 msgid "Bad directory"
 msgstr "Hakemisto ei kelpaa"
 
-#: thonny/plugins/cpython/__init__.py:450
+#: thonny/plugins/cpython_frontend/cp_front.py:306
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "Valittu hakemisto ei ole tyhjä.\n"
 "Valitse toinen hakemisto tai peruuta."
 
-#: thonny/plugins/cpython/__init__.py:467
+#: thonny/plugins/cpython_frontend/cp_front.py:323
 msgid "Creating virtual environment"
 msgstr "Luodaan virtuaaliympäristöä"
 
-#: thonny/shell.py:83
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "Tyhjennä komentorivi-ikkuna"
 
-#: thonny/shell.py:138
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "Piirturi"
 
-#: thonny/shell.py:269
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "Tyhjennä"
 
-#: thonny/shell.py:282
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "Näytä Piirturi"
 
-#: thonny/shell.py:1572
+#: thonny/shell.py:1659
 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:1583
+#: thonny/shell.py:1670
 msgid "Wrap text (may be slow)"
-msgstr ""
+msgstr "Rivitä teksti (voi olla hidas)"
 
-#: thonny/ui_utils.py:1750
+#: thonny/ui_utils.py:1867
 msgid "Copy to clipboard"
 msgstr "Kopioi leikepöydälle"
 
-#: thonny/shell.py:1431
-msgid "Expand in Shell"
-msgstr ""
-
-#: thonny/shell.py:1625
+#: thonny/shell.py:1712
 msgid "Squeezed text (%d characters)"
 msgstr "Tekstiä tiivistetty (%d merkkiä)"
 
-#: thonny/shell.py:1794
+#: thonny/shell.py:1882
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr ""
 
-#: thonny/shell.py:1796
+#: thonny/shell.py:1884
 msgid "See Help for details."
-msgstr ""
+msgstr "Katso lisätietoja ohjeesta."
 
-#: thonny/ui_utils.py:449
+#: thonny/ui_utils.py:492
 msgid "Close others"
 msgstr "Sulje muut"
 
-#: thonny/ui_utils.py:1606
+#: thonny/ui_utils.py:1722
 msgid "Copying"
 msgstr "Kopioidaan"
 
-#: thonny/ui_utils.py:1609
+#: thonny/ui_utils.py:1725
 msgid "Copying\n"
 "  %s\n"
 "to\n"
 "  %s"
 msgstr ""
 
-#: 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
+#: thonny/base_file_browser.py:1378 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1819
+#: thonny/workdlg.py:164 thonny/workdlg.py:209
 msgid "Cancel"
 msgstr "Peruuta"
 
-#: 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
+#: thonny/base_file_browser.py:1369 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:111 thonny/plugins/backend_config_page.py:285
+#: thonny/ui_utils.py:154 thonny/ui_utils.py:1816 thonny/workdlg.py:206
 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 ""
-
-#: thonny/ui_utils.py:2182
+#: thonny/ui_utils.py:2301
 msgid "Select All"
 msgstr "Valitse kaikki"
 
-#: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:158
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:162
 msgid "Shell"
 msgstr "Tulkki"
 
-#: thonny/plugins/cpython/__init__.py:602
-msgid "The same interpreter which runs Thonny (default)"
-msgstr "Thonnyn käyttämä tulkki (oletusasetus)"
-
-#: thonny/plugins/cpython/__init__.py:350
-msgid "This virtual environment is automatically maintained by Thonny.\n"
-""
-msgstr "Thonny huolehtii tästä virtuaaliympäristöstä automaattisesti.\n"
-""
-
-#: thonny/plugins/cpython/__init__.py:351
-msgid "Location: "
-msgstr "Sijainti: "
-
-#: thonny/workbench.py:592
+#: thonny/workbench.py:601
 msgid "Options..."
 msgstr "Asetukset..."
 
-#: thonny/workbench.py:599
+#: thonny/workbench.py:608
 msgid "Increase font size"
-msgstr "Suurenna tekstin kokoa"
+msgstr "Suurenna fontin kokoa"
 
-#: thonny/workbench.py:664
+#: thonny/workbench.py:673
 msgid "Change font size"
-msgstr "Muuta tekstin kokoa"
+msgstr "Muuta fontin kokoa"
 
-#: thonny/workbench.py:665
+#: thonny/workbench.py:674
 msgid "Zoom"
 msgstr "Suurenna"
 
-#: thonny/workbench.py:674
+#: thonny/workbench.py:683
 msgid "Exit Thonny"
 msgstr "Lopeta Thonny"
 
-#: thonny/workbench.py:677
+#: thonny/workbench.py:686
 msgid "Quit"
 msgstr "Lopeta"
 
-#: thonny/workbench.py:1181 thonny/workbench.py:1189
+#: thonny/workbench.py:1244 thonny/workbench.py:1252
 msgid "Overwriting theme '%s'"
-msgstr ""
+msgstr "Korvataan teema '%s'"
 
-#: thonny/workbench.py:1348
+#: thonny/workbench.py:1436
 msgid "Program arguments:"
-msgstr ""
+msgstr "Ohjelman argumentit:"
 
-#: thonny/workbench.py:1402
+#: thonny/workbench.py:1490
 msgid "Regular mode"
 msgstr "Tavallinen tila"
 
-#: thonny/workbench.py:1403
+#: thonny/workbench.py:1491
 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.)"
@@ -759,75 +689,71 @@ msgstr "Asetuksia on muutettu. Käynnistä Thonny uudelleen saadaksesi tavallise
 "\n"
 "(Katso 'Työkalut → Asetukset → Yleistä', jos muutat mieltäsi myöhemmin.)"
 
-#: thonny/plugins/ast_view.py:210
+#: thonny/plugins/ast_view.py:212
 msgid "Program tree"
 msgstr "Ohjelman puurakenne"
 
-#: thonny/plugins/backend_config_page.py:323
-msgid "Select interpreter"
-msgstr "Valitse tulkki"
-
-#: thonny/plugins/debugger.py:1280
+#: thonny/plugins/debugger.py:1283
 msgid "Resume"
 msgstr "Jatka"
 
-#: thonny/plugins/debugger.py:1296
+#: thonny/plugins/debugger.py:1299
 msgid "Run / resume"
 msgstr "Suorita / jatka"
 
-#: thonny/plugins/debugger.py:1311
+#: thonny/plugins/debugger.py:1314
 msgid "Debug current script"
-msgstr ""
+msgstr "Vianselvitä nykyinen skripti"
 
-#: thonny/plugins/debugger.py:1313
+#: thonny/plugins/debugger.py:1316
 msgid "Debug"
-msgstr ""
+msgstr "Vianselvitä"
 
-#: thonny/plugins/debugger.py:1324
+#: thonny/plugins/debugger.py:1327
 msgid "Debug current script (nicer)"
-msgstr ""
+msgstr "Vianselvitä nykyinen skripti (kivempi)"
 
-#: thonny/plugins/debugger.py:1336
+#: thonny/plugins/debugger.py:1339
 msgid "Debug current script (faster)"
-msgstr ""
+msgstr "Vianselvitä nykyinen skripti (nopeampi)"
 
-#: thonny/plugins/debugger.py:1347
+#: thonny/plugins/debugger.py:1350
 msgid "Step over"
 msgstr "Astu yli"
 
-#: thonny/plugins/debugger.py:1349
+#: thonny/plugins/debugger.py:1352
 msgid "Over"
 msgstr "Yli"
 
-#: thonny/plugins/debugger.py:1360
+#: thonny/plugins/debugger.py:1363
 msgid "Step into"
 msgstr "Astu sisään"
 
-#: thonny/plugins/debugger.py:1362
+#: thonny/plugins/debugger.py:1365
 msgid "Into"
 msgstr "Sisään"
 
-#: thonny/plugins/debugger.py:1373
+#: thonny/plugins/debugger.py:1376
 msgid "Step out"
 msgstr "Astu ulos"
 
-#: thonny/plugins/debugger.py:1375
+#: thonny/plugins/debugger.py:1378
 msgid "Out"
 msgstr "Ulos"
 
-#: thonny/plugins/debugger.py:1410
+#: thonny/plugins/debugger.py:1413
 msgid "Step back"
 msgstr "Astu taaksepäin"
 
-#: thonny/plugins/debugger.py:1412
+#: thonny/plugins/debugger.py:1415
 msgid "Back"
 msgstr "Taaksepäin"
 
-#: thonny/plugins/debugger.py:1418
+#: thonny/plugins/debugger.py:1421
 msgid "Stack"
 msgstr "Pino"
 
-#: thonny/plugins/debugger.py:1419
+#: thonny/plugins/debugger.py:1422
 msgid "Exception"
 msgstr "Poikkeus"
 
@@ -841,130 +767,127 @@ msgstr "Virheenjäljitystila (diagnostiikkalogeissa on enemmän tietoa)"
 
 #: thonny/plugins/general_config_page.py:67
 msgid "UI mode"
-msgstr ""
+msgstr "Käyttöliittymän teema"
 
 #: thonny/plugins/general_config_page.py:80
 msgid "UI scaling factor"
-msgstr ""
+msgstr "Käyttöliittymän skaalauskerroin"
 
-#: thonny/plugins/general_config_page.py:108
+#: thonny/plugins/general_config_page.py:114
 msgid "NB! Restart Thonny after changing these options!"
 msgstr "HUOM! Käynnistä Thonny uudelleen muutettuasi näitä asetuksia!"
 
-#: thonny/plugins/general_config_page.py:129
+#: thonny/plugins/general_config_page.py:148
 msgid "General"
 msgstr "Yleiset"
 
-#: thonny/plugins/pip_gui.py:129
+#: thonny/plugins/pip_gui.py:142
 msgid "INSTALL"
-msgstr ""
+msgstr "ASENNA"
 
-#: thonny/plugins/pip_gui.py:365
+#: thonny/plugins/pip_gui.py:367
 msgid "Browse the packages"
 msgstr "Selaa paketteja"
 
-#: thonny/plugins/pip_gui.py:368
+#: thonny/plugins/pip_gui.py:370
 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:376
+#: thonny/plugins/pip_gui.py:378
 msgid "Packages' directory"
-msgstr ""
+msgstr "Pakettien hakemisto"
 
-#: thonny/plugins/pip_gui.py:333
+#: thonny/plugins/pip_gui.py:382
 msgid "Install from PyPI"
 msgstr "Asenna PyPI:stä"
 
-#: thonny/plugins/pip_gui.py:336
+#: thonny/plugins/pip_gui.py:385
 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 ""
+msgstr "Jos et tiedä mistä noutaa paketti, haluat mitä luultavimmin etsiä sitä Python Package Indexistä (PyPI). Aloita kirjoittamalla paketin nimeä hakukenttään ja painamalla ENTER."
 
-#: thonny/plugins/pip_gui.py:352
+#: thonny/plugins/pip_gui.py:402
 msgid "to locate requirements.txt file and install the packages specified in it."
-msgstr ""
+msgstr "paikantaaksesi requirements.txt-tiedoston ja asentaaksesi siinä määritetyt paketit."
 
-#: thonny/plugins/pip_gui.py:381
+#: thonny/plugins/pip_gui.py:408
 msgid "Click"
-msgstr ""
+msgstr "Napsauta"
 
-#: thonny/plugins/pip_gui.py:386
+#: thonny/plugins/pip_gui.py:413
 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
-msgstr ""
+msgstr "paikantaaksesi ja asentaaksesi pakettitiedoston (usein tiedostopäätteellä .whl, .tar.gz tai .zip)."
 
-#: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393
+#: thonny/plugins/pip_gui.py:420
 msgid "Upgrade or uninstall"
-msgstr ""
+msgstr "Päivitä tai poista asennus"
 
-#: thonny/plugins/pip_gui.py:395
+#: thonny/plugins/pip_gui.py:422
 msgid "Start by selecting the package from the left."
 msgstr "Aloita valitsemalla paketti vasemmalta."
 
-#: thonny/plugins/pip_gui.py:399
+#: thonny/plugins/pip_gui.py:410
 msgid "Target:"
 msgstr "Kohde:"
 
-#: thonny/plugins/pip_gui.py:401
+#: thonny/plugins/pip_gui.py:414
 msgid "virtual environment"
 msgstr "virtuaaliympäristö"
 
-#: thonny/plugins/pip_gui.py:403
+#: thonny/plugins/pip_gui.py:412
 msgid "user site packages"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:407
+#: thonny/plugins/pip_gui.py:430
 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:417
+#: thonny/plugins/pip_gui.py:440
 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
+#: thonny/plugins/pip_gui.py:485
 msgid "Installed version:"
 msgstr "Asennettu versio:"
 
-#: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443
+#: thonny/plugins/pip_gui.py:487
 msgid "Installed to:"
-msgstr ""
+msgstr "Asennettu sijaintiin:"
 
-#: thonny/plugins/pip_gui.py:494
+#: thonny/plugins/pip_gui.py:538
 msgid "Please check your spelling!"
-msgstr ""
+msgstr "Tarkista oikeinkirjoitus!"
 
-#: thonny/plugins/pip_gui.py:512
-msgid "You need to enter"
-msgstr ""
-
-#: thonny/plugins/pip_gui.py:498
+#: thonny/plugins/pip_gui.py:542
 msgid "Could not find the package info from PyPI."
-msgstr ""
+msgstr "Paketin tietoja ei löytynyt PyPI:stä."
 
-#: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1200
+#: thonny/plugins/pip_gui.py:544 thonny/plugins/pip_gui.py:1326
 msgid "Error code:"
 msgstr "Virhekoodi:"
 
-#: thonny/plugins/pip_gui.py:601
+#: thonny/plugins/pip_gui.py:689
 msgid "Can't find package name from the list:"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:653
+#: thonny/plugins/pip_gui.py:744
 msgid "Package '{}' is required for installing and uninstalling other packages."
 msgstr "Pakettia '{}' tarvitaan muiden pakettien asentamiseen ja poistamiseen."
 
-#: thonny/plugins/pip_gui.py:696
+#: thonny/plugins/pip_gui.py:789
 msgid "Package"
 msgstr "Paketti"
 
-#: thonny/plugins/pip_gui.py:796
+#: thonny/plugins/pip_gui.py:902
 msgid "Manage packages for %s"
-msgstr ""
+msgstr "Hallitse kohteen %s paketteja"
 
-#: thonny/plugins/pip_gui.py:872
+#: thonny/editors.py:579 thonny/plugins/micropython/pip_gui.py:23
+#: thonny/plugins/pip_gui.py:953
 msgid "Confirmation"
-msgstr ""
+msgstr "Vahvistus"
 
-#: thonny/plugins/pip_gui.py:873
+#: thonny/plugins/pip_gui.py:954
 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"
@@ -972,75 +895,61 @@ msgid "Looks like you are installing a Thonny-related package.\n"
 "Are you sure you want to install %s for the back-end?"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:981
+#: thonny/plugins/pip_gui.py:1059
 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
+#: thonny/plugins/pip_gui.py:1067
 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 "Vaikuttaa siltä, että yrität asentaa vanhentuneen\n"
-"Thonny-laajennuksen (laajennuksessa ei ole versiotietoa).\n"
-"\n"
-"Jos todella haluat asentaa sen, asenna se komentoriviltä."
-
-#: thonny/plugins/pip_gui.py:1004
+#: thonny/plugins/pip_gui.py:1083
 msgid "Unsuitable requirements"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1005
+#: thonny/plugins/pip_gui.py:1084
 msgid "This package requires different Thonny version:"
 msgstr "Tämä paketti vaatii toisen Thonny-version:"
 
-#: thonny/plugins/pip_gui.py:1009
+#: thonny/plugins/pip_gui.py:1088
 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 ""
+msgstr "Jos haluat sen silti, asenna se komentoriviltä."
 
-#: thonny/plugins/pip_gui.py:1058
+#: thonny/plugins/pip_gui.py:1125
 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1068
+#: thonny/plugins/pip_gui.py:1135
 msgid "Thonny plug-ins"
-msgstr ""
+msgstr "Thonnyn liitännäiset"
 
-#: thonny/plugins/pip_gui.py:1090
+#: thonny/plugins/pip_gui.py:1171
 msgid "Advanced install / upgrade / downgrade"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1099
+#: thonny/plugins/pip_gui.py:1180
 msgid "Desired version"
-msgstr ""
+msgstr "Toivottu versio"
 
-#: thonny/plugins/pip_gui.py:1137
+#: thonny/plugins/pip_gui.py:1239
 msgid "Upgrade dependencies"
-msgstr ""
+msgstr "Päivitä riippuvuudet"
 
-#: thonny/plugins/pip_gui.py:1198
+#: thonny/plugins/pip_gui.py:1324
 msgid "Requires:"
-msgstr ""
+msgstr "Vaatii:"
 
-#: thonny/plugins/pip_gui.py:1202
+#: thonny/plugins/pip_gui.py:1328
 msgid "Error:"
-msgstr ""
+msgstr "Virhe:"
 
-#: thonny/plugins/pip_gui.py:1409
+#: thonny/plugins/pip_gui.py:1541
 msgid "Manage packages..."
-msgstr ""
+msgstr "Hallitse paketteja..."
 
-#: thonny/plugins/pip_gui.py:1415
+#: thonny/plugins/pip_gui.py:1547
 msgid "Manage plug-ins..."
-msgstr ""
+msgstr "Hallitse liitännäisiä..."
 
 #: thonny/plugins/replayer.py:365
 msgid "Open replayer..."
@@ -1092,25 +1001,25 @@ msgstr "(käynnistä Thonny uudelleen muutettuasi tätä)"
 
 #: thonny/plugins/run_debug_config_page.py:74
 msgid "Run & Debug"
-msgstr ""
+msgstr "Suorita & vianjäljitä"
 
-#: thonny/plugins/shell_config_page.py:17
+#: thonny/plugins/shell_config_page.py:26
 msgid "Terminal emulation"
-msgstr ""
+msgstr "Pääte-emulaatio"
 
-#: thonny/plugins/shell_config_page.py:19
+#: thonny/plugins/shell_config_page.py:28
 msgid "supports basic ANSI-colors and styles"
 msgstr ""
 
-#: thonny/plugins/shell_config_page.py:31
+#: thonny/plugins/shell_config_page.py:40
 msgid "Maximum number of lines to keep."
 msgstr "Muistissa pidettävien rivien maksimimäärä."
 
-#: thonny/plugins/shell_config_page.py:33
+#: thonny/plugins/shell_config_page.py:42
 msgid "NB! Large values may cause poor performance!"
 msgstr "Huom! Suuret arvot saattavat heikentää suorituskykyä!"
 
-#: thonny/plugins/shell_config_page.py:49
+#: thonny/plugins/shell_config_page.py:58
 msgid "Maximum length of line fragments before squeezing"
 msgstr ""
 
@@ -1124,7 +1033,7 @@ msgstr ""
 
 #: thonny/plugins/terminal_config_page.py:24
 msgid "Keep terminal window open after Python process ends"
-msgstr ""
+msgstr "Pidä pääteikkuna avoinna Python-prosessin loppuessa"
 
 #: thonny/plugins/terminal_config_page.py:31
 msgid "NB! Automatic closing needs to be enabled in Terminal's settings\n"
@@ -1133,15 +1042,15 @@ msgstr ""
 
 #: thonny/plugins/terminal_config_page.py:41
 msgid "Terminal"
-msgstr ""
+msgstr "Pääte"
 
 #: thonny/plugins/theme_and_font_config_page.py:40
 msgid "UI theme"
-msgstr ""
+msgstr "Käyttöliittymän teema"
 
 #: thonny/plugins/theme_and_font_config_page.py:53
 msgid "Syntax theme"
-msgstr ""
+msgstr "Syntaksin teema"
 
 #: thonny/plugins/theme_and_font_config_page.py:85
 msgid "Editor font"
@@ -1149,37 +1058,37 @@ msgstr "Editorin kirjasinlaji"
 
 #: thonny/plugins/theme_and_font_config_page.py:108
 msgid "IO font"
-msgstr ""
+msgstr "Syötteen/tulosteen fontti"
 
 #: thonny/plugins/theme_and_font_config_page.py:133
 msgid "Preview"
-msgstr "Esimerkki"
+msgstr "Esikatselu"
 
-#: thonny/plugins/theme_and_font_config_page.py:145
+#: thonny/plugins/theme_and_font_config_page.py:151
 msgid "This is a comment"
 msgstr "Tämä on kommentti"
 
-#: thonny/plugins/theme_and_font_config_page.py:148
+#: thonny/plugins/theme_and_font_config_page.py:154
 msgid "The answer is"
 msgstr "Vastaus on"
 
-#: thonny/plugins/theme_and_font_config_page.py:152
+#: thonny/plugins/theme_and_font_config_page.py:158
 msgid "unclosed_string"
 msgstr "loppumerkki_puuttuu"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:160
 msgid "blah, blah"
 msgstr "pälä, pälä"
 
-#: thonny/plugins/theme_and_font_config_page.py:177
+#: thonny/plugins/theme_and_font_config_page.py:184
 msgid "NB! Some style elements change only after restarting Thonny!"
 msgstr "Huom! Jotkin tyyliasetukset otetaan käyttöön vasta Thonnyn uudelleenkäynnistämisen jälkeen!"
 
-#: thonny/plugins/theme_and_font_config_page.py:216
+#: thonny/plugins/theme_and_font_config_page.py:223
 msgid "Enter an integer"
 msgstr "Syötä kokonaisluku"
 
-#: thonny/plugins/theme_and_font_config_page.py:229
+#: thonny/plugins/theme_and_font_config_page.py:236
 msgid "Theme & Font"
 msgstr "Ulkoasu ja fontti"
 
@@ -1191,74 +1100,75 @@ msgstr "Avaa Thonnyn ohjelmakansio..."
 msgid "Open Thonny data folder..."
 msgstr "Avaa Thonnyn datakansio..."
 
-#: thonny/plugins/help/__init__.py:64
+#: thonny/plugins/help/__init__.py:70
 msgid "Home"
 msgstr "Koti"
 
-#: thonny/plugins/help/__init__.py:75
+#: thonny/plugins/help/__init__.py:81
 msgid "Help contents"
-msgstr ""
+msgstr "Ohjeen sisältö"
 
-#: thonny/plugins/micropython/__init__.py:274
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "CircuitPython-laite"
 
-#: thonny/plugins/micropython/__init__.py:278
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "MicroPython-laite"
 
-#: thonny/plugins/micropython/__init__.py:476
+#: thonny/plugins/micropython/mp_front.py:547
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "Yhdistä laite tietokoneeseesi ja valitse vastaava portti alapuolelta"
 
-#: thonny/plugins/micropython/__init__.py:479
+#: thonny/plugins/micropython/mp_front.py:550
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "etsi laitteesi nimeä, \"USB-sarjaportti\" tai \"UART\""
 
-#: thonny/plugins/micropython/__init__.py:481
+#: thonny/plugins/micropython/mp_front.py:552
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "Jos et löydä sitä, sinun täytyy ehkä asentaa sopiva USB-ajuri."
 
-#: thonny/plugins/micropython/__init__.py:401
+#: thonny/plugins/micropython/mp_front.py:444
 msgid "Port"
 msgstr "Portti"
 
-#: thonny/plugins/micropython/__init__.py:411
+#: thonny/plugins/micropython/mp_front.py:454
 msgid "Try to detect port automatically"
 msgstr "Yritä tunnistaa portti automaattisesti"
 
-#: thonny/plugins/micropython/__init__.py:954
+#: thonny/plugins/micropython/__init__.py:25
 msgid "MicroPython (generic)"
 msgstr "MicroPython (yleisesti)"
 
-#: thonny/plugins/printing/__init__.py:82
+#: thonny/plugins/printing/__init__.py:98
 msgid "Print..."
 msgstr "Tulosta..."
 
-#: thonny/plugins/system_shell/__init__.py:59
+#: thonny/plugins/system_shell/__init__.py:63
 msgid "Open system shell..."
-msgstr ""
+msgstr "Avaa järjestelmän komentotulkki..."
 
-#: thonny/plugins/backend_config_page.py:103
+#: thonny/plugins/backend_config_page.py:110
 msgid "Details"
-msgstr ""
+msgstr "Tiedot"
 
-#: thonny/plugins/pip_gui.py:345
+#: thonny/plugins/pip_gui.py:395
 msgid "Install from requirements file"
-msgstr ""
+msgstr "Asenna requirements-tiedostosta"
 
-#: thonny/plugins/pip_gui.py:380
+#: thonny/plugins/pip_gui.py:407
 msgid "Install from local file"
-msgstr ""
+msgstr "Asenna paikallisesta tiedostosta"
 
-#: thonny/plugins/pip_gui.py:1038
+#: thonny/plugins/pip_gui.py:1118
 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 ""
+msgstr "Tämä ikkuna on vain Thonnyn liitännäisen ja niiden riippuvuuksien hallintaan.\n"
+"Jos haluat asentaa paketteja omiin ohjelmiisi, valitse 'Työkalut → Hallitse paketteja...'"
 
-#: thonny/plugins/circuitpython/__init__.py:163
+#: thonny/plugins/circuitpython/__init__.py:10
 msgid "CircuitPython (generic)"
-msgstr ""
+msgstr "CircuitPython (yleisesti)"
 
 #: thonny/plugins/commenting_indenting.py:143
 msgid "Indent selected lines"
@@ -1268,7 +1178,7 @@ msgstr "Sisennä valitut rivit"
 msgid "Dedent selected lines"
 msgstr ""
 
-#: thonny/workbench.py:1391
+#: thonny/workbench.py:1479
 msgid "Switch to\n"
 "regular\n"
 "mode"
@@ -1276,374 +1186,322 @@ msgstr "Vaihda\n"
 "tavalliseen\n"
 "tilaan"
 
-#: thonny/plugins/microbit/__init__.py:55
+#: thonny/plugins/microbit/__init__.py:58
 msgid "Make sure MicroPython has been installed to your micro:bit."
 msgstr "Varmista, että MicroPython on asennettu micro:bittiisi."
 
-#: thonny/plugins/microbit/__init__.py:57
+#: thonny/plugins/microbit/__init__.py:60
 msgid "Don't forget that main.py only works without embedded main script."
-msgstr ""
+msgstr "Älä unohda, että main.py toimii vain upottamatta pääskriptiä."
 
-#: thonny/plugins/micropython/uf2dialog.py:45
+#: thonny/plugins/micropython/uf2dialog.py:44
 msgid "please wait"
 msgstr "odota hetki"
 
-#: thonny/plugins/microbit/__init__.py:199
-msgid "Done!"
-msgstr "Valmis!"
-
-#: thonny/plugins/micropython/__init__.py:298
-msgid "Firmware"
-msgstr "Laiteohjelmisto"
-
-#: thonny/misc_utils.py:134
+#: thonny/misc_utils.py:151
 msgid "Could not find disk '%s'. Do you want to locate it yourself?"
-msgstr "En löydä levyä '%s'. Haluatko etsiä sen itse?"
+msgstr "Levyä '%s' ei löydy. Haluatko paikantaa sen itse?"
 
-#: thonny/misc_utils.py:137
+#: thonny/misc_utils.py:154
 msgid "Found several '%s' disks. Do you want to choose one yourself?"
 msgstr ""
 
-#: thonny/misc_utils.py:153
+#: thonny/misc_utils.py:170
 msgid "Can't find suitable disk"
 msgstr "Sopivaa levyä ei löydy"
 
-#: thonny/base_file_browser.py:273
+#: thonny/base_file_browser.py:290
 msgid "%d items"
 msgstr "%d valittua kohdetta"
 
-#: thonny/base_file_browser.py:692
-msgid "Move to Recycle Bin"
-msgstr "Siirrä roskakoriin"
-
-#: thonny/base_file_browser.py:694
+#: thonny/base_file_browser.py:739
 msgid "Move to Trash"
 msgstr "Siirrä roskakoriin"
 
-#: thonny/base_file_browser.py:697
+#: thonny/base_file_browser.py:742
 msgid "Delete"
 msgstr "Poista"
 
-#: thonny/base_file_browser.py:700 thonny/base_file_browser.py:834
+#: thonny/base_file_browser.py:721 thonny/base_file_browser.py:874
 msgid "New directory"
 msgstr "Uusi hakemisto"
 
-#: thonny/base_file_browser.py:703
+#: thonny/base_file_browser.py:745
 msgid "Properties"
 msgstr "Ominaisuudet"
 
-#: thonny/base_file_browser.py:705
+#: thonny/base_file_browser.py:747
 msgid "Storage space"
 msgstr "Tallennustila"
 
-#: thonny/base_file_browser.py:715
+#: thonny/base_file_browser.py:757
 msgid "Path"
 msgstr "Polku"
 
-#: thonny/base_file_browser.py:717
+#: thonny/base_file_browser.py:759
 msgid "Directory properties"
 msgstr "Hakemiston ominaisuudet"
 
-#: thonny/base_file_browser.py:719
+#: thonny/base_file_browser.py:761
 msgid "File properties"
 msgstr "Tiedoston ominaisuudet"
 
-#: thonny/base_file_browser.py:721
+#: thonny/base_file_browser.py:763
 msgid "bytes"
 msgstr "tavua"
 
-#: thonny/base_file_browser.py:724
+#: thonny/base_file_browser.py:766
 msgid "Size"
 msgstr "Koko"
 
-#: thonny/base_file_browser.py:83 thonny/base_file_browser.py:735
+#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:777
 msgid "Modified"
 msgstr "Muokattu"
 
-#: thonny/base_file_browser.py:794
+#: thonny/base_file_browser.py:838
 msgid "Deleting %s"
 msgstr "%s poistetaan"
 
-#: thonny/base_file_browser.py:817
-msgid "Moving %s to %s"
-msgstr ""
-
-#: thonny/editors.py:219
+#: thonny/editors.py:260
 msgid "Loading"
 msgstr "Ladataan"
 
-#: thonny/editors.py:335
+#: thonny/editors.py:389
 msgid "Saving"
 msgstr "Tallennetaan"
 
-#: thonny/running.py:1408
-msgid "Working..."
-msgstr ""
-
-#: thonny/plugins/files.py:199
-msgid "Uploading %s to %s"
-msgstr ""
-
-#: thonny/plugins/files.py:216
+#: thonny/plugins/files.py:219
 msgid "Upload to %s"
 msgstr ""
 
-#: thonny/plugins/files.py:362
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
 msgstr ""
 
-#: thonny/plugins/files.py:275
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr ""
 
-#: thonny/base_file_browser.py:620
+#: thonny/base_file_browser.py:646
 msgid "Open in system file manager"
-msgstr ""
+msgstr "Avaa järjestelmän tiedostonhallinnassa"
 
-#: thonny/base_file_browser.py:625
+#: thonny/base_file_browser.py:674
 msgid "Hide hidden files"
 msgstr "Kätke piilotiedostot"
 
-#: thonny/base_file_browser.py:625
+#: thonny/base_file_browser.py:674
 msgid "Show hidden files"
 msgstr "Näytä piilotiedostot"
 
-#: thonny/base_file_browser.py:635
+#: thonny/base_file_browser.py:657
 msgid "Open in Thonny"
 msgstr "Avaa Thonnyssä"
 
-#: thonny/base_file_browser.py:640 thonny/base_file_browser.py:661
+#: thonny/base_file_browser.py:688
 msgid "Open in system default app"
 msgstr "Avaa järjestelmän oletussovelluksessa"
 
-#: thonny/base_file_browser.py:647 thonny/base_file_browser.py:669
+#: thonny/base_file_browser.py:669 thonny/base_file_browser.py:696
 msgid "Configure %s files"
 msgstr ""
 
-#: thonny/base_file_browser.py:670
+#: thonny/base_file_browser.py:697
 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
+#: thonny/base_file_browser.py:1254 thonny/editors.py:979 thonny/editors.py:981
 msgid "Deleting"
 msgstr "Poistetaan"
 
-#: thonny/base_file_browser.py:1049
+#: thonny/base_file_browser.py:1261
 msgid "Creating directory"
 msgstr "Luodaan hakemisto"
 
-#: thonny/editors.py:217
+#: thonny/editors.py:258
 msgid "Loading %s"
-msgstr ""
+msgstr "Ladataan %s"
 
-#: thonny/editors.py:333
+#: thonny/editors.py:384
 msgid "Saving to %s"
-msgstr ""
+msgstr "Tallennetaan sijaintiin %s"
 
-#: thonny/editors.py:622 thonny/editors.py:624
+#: thonny/editors.py:720 thonny/editors.py:722
 msgid "Save All files"
 msgstr "Tallenna kaikki tiedostot"
 
-#: thonny/workbench.py:828
+#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:877
 msgid "Configure interpreter..."
-msgstr ""
+msgstr "Määritä tulkki..."
 
-#: thonny/workbench.py:1501
+#: thonny/workbench.py:1589
 msgid "Device"
 msgstr "Laite"
 
-#: thonny/workdlg.py:185
+#: thonny/workdlg.py:193
 msgid "Cancelling"
-msgstr ""
+msgstr "Perutaan"
 
-#: thonny/workdlg.py:212
+#: thonny/workdlg.py:220
 msgid "Starting"
-msgstr ""
+msgstr "Käynnistetään"
 
-#: thonny/plugins/backend_config_page.py:234
+#: thonny/plugins/backend_config_page.py:251
 msgid "Authentication"
 msgstr "Tunnistautuminen"
 
-#: thonny/plugins/backend_config_page.py:236
+#: thonny/plugins/backend_config_page.py:253
 msgid "Enter the passphrase of your private key for\n"
 "{}"
 msgstr "Anna yksityisen avaimen salalause kohteelle\n"
 "{}"
 
-#: thonny/plugins/backend_config_page.py:239
+#: thonny/plugins/backend_config_page.py:256
 msgid "Enter your password for\n"
 "{}"
 msgstr "Anna salasana kohteelle\n"
 "{}"
 
-#: thonny/plugins/object_inspector.py:458
+#: thonny/plugins/object_inspector.py:487
 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s"
 msgstr "Esitysmuoto yllä on tämän liukuluvun likiarvo. Tarkka muistissa oleva arvo on %s, eli noin %s"
 
-#: thonny/plugins/pip_gui.py:557
+#: thonny/plugins/pip_gui.py:645
 msgid "Search results"
 msgstr "Hakutulokset"
 
-#: thonny/plugins/pip_gui.py:558
+#: thonny/plugins/pip_gui.py:646
 msgid "Searching"
 msgstr "Haetaan"
 
-#: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729
+#: thonny/plugins/pip_gui.py:728 thonny/plugins/pip_gui.py:817
 msgid "Installing '%s'"
-msgstr ""
+msgstr "Asennetaan '%s'"
 
-#: thonny/plugins/pip_gui.py:645
+#: thonny/plugins/pip_gui.py:734
 msgid "Upgrading '%s'"
-msgstr ""
+msgstr "Päivitetään '%s'"
 
-#: thonny/plugins/pip_gui.py:650
+#: thonny/plugins/pip_gui.py:741
 msgid "Uninstalling '%s'"
-msgstr ""
+msgstr "Poistetaan '%s'"
 
-#: thonny/plugins/pip_gui.py:663
+#: thonny/plugins/pip_gui.py:755
 msgid "Installing"
-msgstr ""
+msgstr "Asennetaan"
 
-#: thonny/plugins/pip_gui.py:1372
+#: thonny/plugins/pip_gui.py:1502
 msgid "Package manager is not available for this interpreter"
 msgstr "Tälle tulkille ei ole saatavissa paketinhallintaa"
 
-#: thonny/plugins/pip_gui.py:1385
+#: thonny/base_file_browser.py:1205 thonny/plugins/pip_gui.py:1516
 msgid "Not supported"
 msgstr "Ei tuettu"
 
-#: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1390
+#: thonny/plugins/micropython/pip_gui.py:100 thonny/plugins/pip_gui.py:1521
 msgid "Not available"
 msgstr "Ei saatavilla"
 
-#: thonny/plugins/pip_gui.py:1391
+#: thonny/plugins/pip_gui.py:1522
 msgid "You need to stop your program before launching the package manager."
 msgstr "Pysäytä ohjelmasi ennen paketinhallinnan käynnistämistä."
 
-#: thonny/plugins/shell_config_page.py:64
+#: thonny/plugins/shell_config_page.py:73
 msgid "Open evaluated values in Object inspector"
 msgstr "Avaa evaluoidut arvot Oliotutkassa"
 
-#: thonny/plugins/cpython/__init__.py:370
+#: thonny/plugins/cpython_frontend/cp_front.py:209
 msgid "Python executable"
-msgstr ""
+msgstr "Python-suoritustiedosto"
 
-#: thonny/plugins/cpython/__init__.py:393
+#: thonny/plugins/cpython_frontend/cp_front.py:232
 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
+#: thonny/plugins/cpython_ssh/__init__.py:17
 msgid "Remote Python 3 (SSH)"
 msgstr "Etä-Python 3 (SSH)"
 
-#: thonny/plugins/micropython/__init__.py:284
+#: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
 msgstr "Ei yhteyttä"
 
-#: thonny/plugins/micropython/__init__.py:453
+#: thonny/plugins/micropython/mp_front.py:521
 msgid "Advanced options"
-msgstr ""
+msgstr "Lisäasetukset"
 
-#: thonny/plugins/micropython/__init__.py:460
+#: thonny/plugins/micropython/mp_front.py:547
 msgid "Install or update firmware"
-msgstr ""
+msgstr "Asenna tai päivitä firmware"
 
-#: thonny/plugins/micropython/__init__.py:963
+#: thonny/plugins/micropython/__init__.py:36
 msgid "MicroPython (local)"
 msgstr "MicroPython (paikallinen)"
 
-#: thonny/plugins/micropython/__init__.py:973
+#: thonny/plugins/micropython/__init__.py:47
 msgid "MicroPython (SSH)"
 msgstr "MicroPython (SSH)"
 
-#: thonny/plugins/micropython/pip_gui.py:134
-msgid "Module"
-msgstr "Moduuli"
-
-#: 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 "Paketti ei ole saatavissa micropython.org:n kautta. PyPI-versio asennetaan sen sijaan."
-
-#: 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 "HUOM! micropython.org on julkaissut version %s tästä paketista, ja se asennetaan oletuksena."
-
-#: 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
+#: thonny/plugins/micropython/pip_gui.py:77
 msgid "Scope"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:275
+#: thonny/plugins/micropython/pip_gui.py:90
 msgid "This dialog lists top-level modules from following directories:\n"
 ""
-msgstr ""
+msgstr "Tämä ikkuna listaa päätason moduulit seuraavista hakemistoista:"
 
-#: thonny/plugins/micropython/pip_gui.py:284
+#: thonny/plugins/micropython/pip_gui.py:99
 msgid "New packages will be installed to"
-msgstr ""
+msgstr "Uudet paketit asennetaan sijaintiin"
 
-#: thonny/plugins/micropython/pip_gui.py:292
+#: thonny/plugins/micropython/pip_gui.py:102
 msgid "no absolute lib directory in sys.path"
 msgstr ""
 
-#: thonny/plugins/micropython/uf2dialog.py:40
+#: thonny/plugins/micropython/uf2dialog.py:39
 msgid "Version to be installed"
-msgstr ""
+msgstr "Asennettava versio"
 
-#: thonny/plugins/micropython/uf2dialog.py:48
+#: thonny/plugins/micropython/uf2dialog.py:47
 msgid "Target device location"
 msgstr "Kohdelaitteen sijainti"
 
-#: thonny/plugins/micropython/uf2dialog.py:59
+#: thonny/plugins/micropython/uf2dialog.py:58
 msgid "Target device model"
 msgstr "Kohdelaitteen malli"
 
-#: thonny/plugins/micropython/uf2dialog.py:145
+#: thonny/plugins/micropython/uf2dialog.py:146
 msgid "Please wait"
 msgstr "Odota hetki"
 
-#: thonny/plugins/pip_gui.py:67
+#: thonny/plugins/pip_gui.py:70
 msgid "Search on PyPI"
 msgstr "Etsi PyPI:stä"
 
-#: thonny/plugins/pip_gui.py:79
-msgid "Delete selected"
-msgstr "Poista valitut"
-
-#: thonny/base_file_browser.py:662
+#: thonny/base_file_browser.py:689
 msgid "Open in Thonny's text editor"
 msgstr "Avaa Thonnyn tekstieditorissa"
 
-#: thonny/base_file_browser.py:325
+#: thonny/base_file_browser.py:342
 msgid "Storage space on this drive or filesystem"
 msgstr "Tallennustila tällä levyllä tai tiedostojärjestelmässä"
 
-#: thonny/base_file_browser.py:326
+#: thonny/base_file_browser.py:343
 msgid "total space"
 msgstr "yhteensä"
 
-#: thonny/base_file_browser.py:328
+#: thonny/base_file_browser.py:345
 msgid "used space"
 msgstr "käytetty"
 
-#: thonny/base_file_browser.py:329
+#: thonny/base_file_browser.py:346
 msgid "free space"
 msgstr "vapaana"
 
-#: thonny/base_file_browser.py:336
+#: thonny/base_file_browser.py:353
 msgid "Storage info"
 msgstr "Tallennustila"
 
@@ -1651,60 +1509,60 @@ msgstr "Tallennustila"
 msgid "Replace tabs with spaces"
 msgstr "Korvaa tab-merkit välilyönneillä"
 
-#: thonny/plugins/editor_config_page.py:28
+#: thonny/plugins/editor_config_page.py:33
 msgid "Highlight tab characters"
 msgstr "Korosta tab-merkit"
 
-#: thonny/plugins/editor_config_page.py:47
+#: thonny/plugins/editor_config_page.py:68
 msgid "Indent with tab characters (not recommended for Python)"
 msgstr "Sisennä tab-merkeillä (ei suositella Pythonin kanssa käytettäväksi)"
 
-#: thonny/base_file_browser.py:81 thonny/memory.py:63
+#: thonny/base_file_browser.py:91 thonny/memory.py:63
 msgid "Name"
 msgstr "Nimi"
 
-#: thonny/base_file_browser.py:85
+#: thonny/base_file_browser.py:95
 msgid "Size (bytes)"
 msgstr "Koko (tavuina)"
 
-#: thonny/base_file_browser.py:835
+#: thonny/base_file_browser.py:875
 msgid "Enter name for new directory under\n"
 "%s"
 msgstr "Anna uuden hakemiston nimi\n"
 "%s"
 
-#: thonny/base_file_browser.py:858
+#: thonny/base_file_browser.py:898
 msgid "Nothing selected"
 msgstr "Ei valintoja"
 
-#: thonny/base_file_browser.py:858
+#: thonny/base_file_browser.py:898
 msgid "Select an item and try again!"
 msgstr "Valitse jotain ja yritä uudelleen!"
 
-#: thonny/base_file_browser.py:1105
+#: thonny/base_file_browser.py:1325
 msgid "Open from %s"
 msgstr "Avaa %s:sta"
 
-#: thonny/base_file_browser.py:1108
+#: thonny/base_file_browser.py:1328
 msgid "Save to %s"
 msgstr "Tallenna %s:aan"
 
-#: thonny/base_file_browser.py:1120
+#: thonny/base_file_browser.py:1347
 msgid "File name:"
 msgstr "Tiedostonimi:"
 
-#: thonny/memory.py:64 thonny/plugins/object_inspector.py:510
-#: thonny/plugins/object_inspector.py:589
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
 msgid "Value ID"
-msgstr ""
+msgstr "Arvon ID"
 
 #: thonny/memory.py:65 thonny/plugins/heap.py:23
-#: thonny/plugins/object_inspector.py:511
-#: thonny/plugins/object_inspector.py:590
+#: thonny/plugins/object_inspector.py:540
+#: thonny/plugins/object_inspector.py:619
 msgid "Value"
 msgstr "Arvo"
 
-#: thonny/plugins/backend_config_page.py:257
+#: thonny/plugins/backend_config_page.py:274
 msgid "Save password"
 msgstr "Tallenna salasana"
 
@@ -1712,60 +1570,60 @@ msgstr "Tallenna salasana"
 msgid "Function call at %s"
 msgstr "Funktiokutsu %s:ssa"
 
-#: thonny/plugins/debugger.py:1001
+#: thonny/plugins/debugger.py:1003
 msgid "Local variables"
 msgstr "Paikalliset muuttujat"
 
-#: thonny/plugins/debugger.py:1033
+#: thonny/plugins/debugger.py:1035
 msgid "Function"
 msgstr "Funktio"
 
-#: thonny/plugins/debugger.py:1034
+#: thonny/plugins/debugger.py:1036
 msgid "Location"
 msgstr "Sijainti"
 
-#: thonny/plugins/debugger.py:1110
+#: thonny/plugins/debugger.py:1112
 msgid "If last command raised an exception then this view will show the stacktrace."
 msgstr "Jos edellinen komento aiheutti poikkeuksen, tämä näkymä näyttää kutsupinon."
 
 #: thonny/plugins/heap.py:22
 msgid "ID"
-msgstr ""
+msgstr "ID"
 
-#: thonny/plugins/object_inspector.py:87
+#: thonny/plugins/object_inspector.py:92
 msgid "Data"
 msgstr "Data"
 
-#: thonny/plugins/object_inspector.py:88
+#: thonny/plugins/object_inspector.py:93
 msgid "Attributes"
 msgstr "Attribuutit"
 
-#: thonny/plugins/object_inspector.py:509
+#: thonny/plugins/object_inspector.py:538
 msgid "Index"
 msgstr "Indeksi"
 
-#: thonny/plugins/object_inspector.py:587
+#: thonny/plugins/object_inspector.py:616
 msgid "Key ID"
-msgstr ""
+msgstr "Avaimen ID"
 
-#: thonny/plugins/object_inspector.py:588
+#: thonny/plugins/object_inspector.py:617
 msgid "Key"
 msgstr "Avain"
 
-#: thonny/plugins/variables.py:36
+#: thonny/plugins/variables.py:39
 msgid "Back to\n"
 "%s"
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:401
+#: thonny/plugins/micropython/mp_front.py:444
 msgid "Port or WebREPL"
 msgstr "Portti tai WebREPL"
 
-#: thonny/plugins/micropython/__init__.py:518
+#: thonny/plugins/micropython/mp_front.py:589
 msgid "Password"
 msgstr "Salasana"
 
-#: thonny/plugins/debugger.py:959
+#: thonny/plugins/debugger.py:961
 msgid "Source code"
 msgstr "Lähdekoodi"
 
@@ -1781,3 +1639,299 @@ msgstr "Valitse tämä, jos tiedostoikkunat päätyvät pääikkunan taakse"
 msgid "Environment variables (one KEY=VALUE per line)"
 msgstr "Ympäristömuuttujat (yksi NIMI=ARVO per rivi)"
 
+#: thonny/base_file_browser.py:718
+msgid "New file"
+msgstr "Uusi tiedosto"
+
+#: thonny/base_file_browser.py:736
+msgid "Rename"
+msgstr "Nimeä uudelleen"
+
+#: thonny/base_file_browser.py:924
+msgid "Rename '%s'"
+msgstr "Nimeä uudelleen '%s'"
+
+#: thonny/base_file_browser.py:924
+msgid "Enter new name"
+msgstr "Kirjoita uusi nimi"
+
+#: thonny/base_file_browser.py:1012
+msgid "Paste failed"
+msgstr "Liittäminen epäonnistui"
+
+#: thonny/base_file_browser.py:1012
+msgid "There are conflicting folders"
+msgstr ""
+
+#: thonny/base_file_browser.py:1140
+msgid "File already exists"
+msgstr "Tiedosto on jo olemassa"
+
+#: thonny/base_file_browser.py:1208
+msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
+msgstr ""
+
+#: thonny/editors.py:35
+msgid "Python files"
+msgstr "Python-tiedostot"
+
+#: thonny/editors.py:122 thonny/editors.py:189
+msgid "<untitled>"
+msgstr "<nimetön>"
+
+#: thonny/editors.py:149
+msgid "File is gone"
+msgstr "Tiedosto on poissa"
+
+#: thonny/editors.py:152
+msgid "Do you want to also close the editor?"
+msgstr "Haluatko sulkea myös editorin?"
+
+#: thonny/editors.py:168
+msgid "External modification"
+msgstr "Ulkoinen muokkaus"
+
+#: thonny/editors.py:171
+msgid "Do you want to discard current editor content and reload the file from disk?"
+msgstr "Haluatko hylätä editorin nykyisen sisällön ja ladata tiedoston uudelleen levyltä?"
+
+#: thonny/editors.py:580
+msgid "Python files usually have .py extension."
+msgstr "Python-tiedostoilla on usein .py-tiedostopääte."
+
+#: thonny/editors.py:582
+msgid "Did you mean '%s'?"
+msgstr "Tarkoititko '%s'?"
+
+#: thonny/editors.py:751
+msgid "Move / rename..."
+msgstr "Siirrä / nimeä uudelleen..."
+
+#: thonny/editors.py:760
+msgid "Go to line..."
+msgstr "Siirry riville..."
+
+#: thonny/editors.py:1003
+msgid "Line number"
+msgstr "Rivinumero"
+
+#: thonny/editors.py:1149
+msgid "Do you want to save files before closing?"
+msgstr "Haluatko tallentaa tiedostot ennen sulkemista?"
+
+#: thonny/editors.py:1151
+msgid "Do you want to save file before closing?"
+msgstr "Haluatko tallentaa tiedoston ennen sulkemista?"
+
+#: thonny/editors.py:1154
+msgid "Save On Close"
+msgstr "Tallenna suljettaessa"
+
+#: thonny/misc_utils.py:513
+msgid "Command not available"
+msgstr "Komento ei ole käytettävissä"
+
+#: thonny/misc_utils.py:514
+msgid "This command is not available if Thonny is run via Flatpak"
+msgstr "Komento ei ole käytettävissä, jos Thonny suoritetaan Flatpakina"
+
+#: thonny/workbench.py:694 thonny/workbench.py:794
+msgid "Support Ukraine"
+msgstr "Tue Ukrainaa"
+
+#: thonny/plugins/backend_config_page.py:91
+msgid "Which kind of interpreter should Thonny use for running your code?"
+msgstr "Minkälaista tulkkia Thonnyn tulisi käyttää koodin suorittamiseen?"
+
+#: thonny/plugins/calltip.py:159
+msgid "Show parameter info"
+msgstr "Näytä parametritiedot"
+
+#: thonny/plugins/editor_config_page.py:41
+msgid "Automatically show parameter info after typing '('"
+msgstr "Näytä automaattisesti parametritiedot, kun  '(' on kirjoitettu"
+
+#: thonny/plugins/editor_config_page.py:47
+msgid "Automatically propose completions while typing"
+msgstr "Ehdota automaattisesti täydentämisiä kirjoittaessa"
+
+#: thonny/plugins/editor_config_page.py:52
+msgid "Automatically show documentation for completions"
+msgstr "Näytä automaattisesti dokumentaatio täydentämisille"
+
+#: thonny/plugins/editor_config_page.py:57
+msgid "Request completions with Tab-key in editors"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:62
+msgid "Request completions with Tab-key in Shell"
+msgstr ""
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Problem"
+msgstr "Ongelma"
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Could not find definition"
+msgstr "Määritelmää ei löytynyt"
+
+#: thonny/plugins/shell_config_page.py:17
+msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
+msgstr ""
+
+#: thonny/plugins/cpython_frontend/cp_front.py:171
+msgid "Thonny's Python"
+msgstr "Thonnyn Python"
+
+#: thonny/plugins/micropython/mp_front.py:492
+msgid "Interrupt working program on connect"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:500
+msgid "Synchronize device's real time clock"
+msgstr "Synkronoi laitteen reaaliaikainen kello"
+
+#: thonny/plugins/micropython/mp_front.py:506
+msgid "Use local time in real time clock"
+msgstr "Käytä paikallista aikaa reaaliaikaisessa kellossa"
+
+#: thonny/plugins/micropython/mp_front.py:512
+msgid "Restart interpreter before running a script"
+msgstr "Käynnistä tulkki uudelleen ennen skriptin suorittamista"
+
+#: thonny/plugins/micropython/pip_gui.py:24
+msgid "This doesn't look like MicroPython/CircuitPython package.\n"
+"Are you sure you want to install it?"
+msgstr "Tämä ei vaikuta MicroPython-/CircuitPython-paketilta.\n"
+"Haluatko varmasti asentaa sen?"
+
+#: thonny/base_file_browser.py:849
+msgid "Moving to Trash"
+msgstr "Siirretään roskakoriin"
+
+#: thonny/base_file_browser.py:850
+msgid "Move %s to Trash?"
+msgstr "Siirretäänkö %s roskakoriin?"
+
+#: thonny/base_file_browser.py:857
+msgid "Moving %s to Trash"
+msgstr "Siirretään %s roskakoriin"
+
+#: thonny/base_file_browser.py:662
+msgid "Open in default external app"
+msgstr "Avaa oletusarvoisessa ulkoisessa sovelluksessa"
+
+#: thonny/base_file_browser.py:1206
+msgid "Opening remote files in external app is not supported."
+msgstr ""
+
+#: thonny/base_file_browser.py:1213
+msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
+msgstr ""
+
+#: thonny/editors.py:150
+msgid "Looks like '%s' was deleted or moved."
+msgstr "Vaikuttaa siltä, että '%s' poistettiin tai siirrettiin."
+
+#: thonny/editors.py:169
+msgid "Looks like '%s' was modified outside of the editor."
+msgstr "Vaikuttaa siltä, että '%s' muokattiin editorin ulkopuolelta."
+
+#: thonny/plugins/cpython_frontend/cp_front.py:230
+msgid "NB! Thonny only supports Python %s and later"
+msgstr ""
+
+#: thonny/editors.py:1003
+msgid "Go to line"
+msgstr "Siirry riville"
+
+#: thonny/workbench.py:697
+msgid "Support"
+msgstr "Tue"
+
+#: thonny/editors.py:393 thonny/editors.py:408
+msgid "Could not save"
+msgstr "Tallentaminen ei onnistunut"
+
+#: thonny/plugins/general_config_page.py:135
+msgid "Warning"
+msgstr "Varoitus"
+
+#: thonny/plugins/general_config_page.py:136
+msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
+"Did you intend this?"
+msgstr ""
+
+#: thonny/workbench.py:867
+msgid "Install MicroPython"
+msgstr "Asenna MicroPython"
+
+#: thonny/workbench.py:871
+msgid "Install CircuitPython"
+msgstr "Asenna CircuitPython"
+
+#: thonny/plugins/backend_config_page.py:212
+msgid "Make uploaded shebang scripts executable"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:91
+msgid "Make saved shebang scripts executable"
+msgstr ""
+
+#: thonny/plugins/files.py:224
+msgid "Activate virtual environment"
+msgstr "Aktivoi virtuaaliympäristö"
+
+#: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
+msgid "Target"
+msgstr ""
+
+#: thonny/plugins/pythontutor.py:41
+msgid "Visualize current script at Python Tutor"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:44
+msgid "Line"
+msgstr "Rivi"
+
+#: thonny/plugins/todo_view.py:45
+msgid "Info"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:123
+msgid "No line marked with #todo found"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:143
+msgid "TODO"
+msgstr ""
+
+#: thonny/plugins/circuitpython/cirpy_front.py:98
+#: thonny/plugins/micropython/mp_front.py:536
+msgid "Install or update %s"
+msgstr "Asenna tai päivitä %s"
+
+#: thonny/plugins/cpython_frontend/__init__.py:24
+msgid "Local Python 3"
+msgstr "Paikallinen Python 3"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:240
+msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+msgstr ""
+
+#: thonny/plugins/ev3/__init__.py:72
+msgid "Preparations (skip the VS Code part)"
+msgstr ""
+
+#: thonny/plugins/ev3/__init__.py:78
+msgid "Default password"
+msgstr "Oletussalasana"
+
+#: thonny/running.py:338
+msgid "Information"
+msgstr ""
+
+#: thonny/running.py:339
+msgid "For debugging the program must be saved first."
+msgstr ""
+
diff --git a/thonny/locale/fr_FR/LC_MESSAGES/thonny.mo b/thonny/locale/fr_FR/LC_MESSAGES/thonny.mo
index 4fa986c..9f55c30 100644
Binary files a/thonny/locale/fr_FR/LC_MESSAGES/thonny.mo and b/thonny/locale/fr_FR/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/fr_FR/LC_MESSAGES/thonny.po b/thonny/locale/fr_FR/LC_MESSAGES/thonny.po
index 3bf1b49..ff6133e 100644
--- a/thonny/locale/fr_FR/LC_MESSAGES/thonny.po
+++ b/thonny/locale/fr_FR/LC_MESSAGES/thonny.po
@@ -7,67 +7,59 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: fr\n"
 
-#: thonny/workbench.py:357
+#: thonny/workbench.py:375
 msgid "File"
 msgstr "Fichier"
 
-#: thonny/workbench.py:358
+#: thonny/workbench.py:376
 msgid "Edit"
 msgstr "Édition"
 
-#: thonny/workbench.py:359
+#: thonny/workbench.py:377
 msgid "View"
 msgstr "Affichage"
 
-#: thonny/running.py:122 thonny/workbench.py:360
+#: thonny/running.py:161 thonny/workbench.py:378
 msgid "Run"
 msgstr "Exécuter"
 
-#: thonny/workbench.py:361
+#: thonny/workbench.py:379
 msgid "Tools"
 msgstr "Outils"
 
-#: thonny/plugins/help/__init__.py:74 thonny/workbench.py:362
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
 msgid "Help"
 msgstr "Aide"
 
-#: thonny/plugins/cpython/__init__.py:610
-msgid "Alternative Python 3 interpreter or virtual environment"
-msgstr "Interpréteur Python 3 alternatif ou environnement virtuel"
-
-#: thonny/plugins/cpython/__init__.py:618
-msgid "A special virtual environment (deprecated)"
-msgstr "Un environnement virtuel spécifique (obsolète)"
-
-#: thonny/workbench.py:582
+#: thonny/workbench.py:598
 msgid "Exit"
 msgstr "Quitter"
 
-#: thonny/workbench.py:609
+#: thonny/workbench.py:625
 msgid "Decrease font size"
 msgstr "Diminuer la taille de la police"
 
-#: thonny/workbench.py:621
+#: thonny/workbench.py:637
 msgid "Focus editor"
 msgstr "Placer le curseur dans l'éditeur"
 
-#: thonny/workbench.py:630
+#: thonny/workbench.py:646
 msgid "Focus shell"
 msgstr "Placer le curseur dans la console"
 
-#: thonny/workbench.py:641
+#: thonny/workbench.py:656
 msgid "Maximize view"
 msgstr "Agrandir la vue"
 
-#: thonny/workbench.py:653
+#: thonny/workbench.py:668
 msgid "Full screen"
 msgstr "Plein écran"
 
-#: thonny/workbench.py:1377
+#: thonny/workbench.py:1467
 msgid "Program arguments"
 msgstr "Arguments du programme"
 
-#: thonny/plugins/about.py:28 thonny/plugins/about.py:163
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
 msgid "About Thonny"
 msgstr "À propos de Thonny"
 
@@ -80,7 +72,7 @@ msgid "Made in\n"
 "and Cybernetica AS"
 msgstr "Programmé à l'Université de Tartu, Estonie, avec l'aide de la communauté open-source, de la Fondation Raspberry Pi et de Cybernetica SAS"
 
-#: thonny/plugins/about.py:107
+#: thonny/plugins/about.py:101
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -88,23 +80,23 @@ msgid "This program comes with\n"
 "https://opensource.org/licenses/MIT\n"
 "for details"
 msgstr "Ce programme n'est fourni\n"
-"SANS AUCUNE GARANTIE QUELLE QU'ELLE SOIT \n"
+"SANS AUCUNE GARANTIE QUELLE QU'ELLE SOIT !\n"
 "Il s'agit d'un logiciel libre et vous pouvez le\n"
-"redistribuer sous certaines conditions.\n"
-"Voir https://opensource.org/licenses/MIT\n"
+"redistribuer sous certaines conditions,\n"
+"voir https://opensource.org/licenses/MIT\n"
 "pour plus de détails"
 
-#: thonny/plugins/about.py:152
+#: thonny/plugins/about.py:142
 msgid "Version history"
 msgstr "Historique de version"
 
-#: thonny/plugins/about.py:159
+#: thonny/plugins/about.py:149
 msgid "Report problems"
 msgstr "Signaler un problème"
 
 #: thonny/plugins/assistant_config_page.py:16
 msgid "Open Assistant automatically when program crashes with an exception"
-msgstr "Ouvrir automatiquement l’assistant lorsqu’un programme plante avec une exception."
+msgstr "Ouvrir automatiquement l’assistant lorsqu’un programme plante avec une exception"
 
 #: thonny/plugins/assistant_config_page.py:23
 msgid "Open Assistant automatically when it has warnings for your code"
@@ -123,27 +115,23 @@ msgstr "Effectuer les vérifications MyPy"
 msgid "Disabled checks (one id per line)"
 msgstr "Vérifications désactivées (un identifiant par ligne)"
 
-#: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:73
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Assistant"
 
-#: thonny/plugins/autocomplete.py:333
+#: thonny/plugins/autocomplete.py:529
 msgid "Auto-complete"
 msgstr "Auto-complétion"
 
-#: thonny/plugins/backend_config_page.py:84
-msgid "Which interpreter or device should Thonny use for running your code?"
-msgstr "Quel interpréteur ou appareil Thonny doit-il utiliser pour exécuter votre code ?"
-
-#: thonny/plugins/backend_config_page.py:320
+#: thonny/plugins/backend_config_page.py:335
 msgid "Interpreter"
 msgstr "Interpréteur"
 
-#: thonny/plugins/birdseye_frontend.py:54
+#: thonny/plugins/birdseye_frontend.py:55
 msgid "About Birdseye"
 msgstr "À propos de Birdseye"
 
-#: thonny/plugins/birdseye_frontend.py:55
+#: thonny/plugins/birdseye_frontend.py:56
 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?"
@@ -151,39 +139,42 @@ msgstr "Birdseye est un débogueur Python qui doit être installé séparément.
 "\n"
 "Voulez-vous ouvrir l’aide pour en savoir plus ?"
 
-#: thonny/plugins/birdseye_frontend.py:83
+#: thonny/plugins/birdseye_frontend.py:84
 msgid "Debug current script (birdseye)"
 msgstr "Déboguer le script courant (birdseye)"
 
-#: thonny/plugins/commenting_indenting.py:172
+#: thonny/plugins/commenting_indenting.py:171
 msgid "Toggle comment"
 msgstr "Commenter/Décommenter"
 
-#: thonny/plugins/commenting_indenting.py:182
+#: thonny/plugins/commenting_indenting.py:181
 msgid "Comment out"
 msgstr "Commenter"
 
-#: thonny/plugins/commenting_indenting.py:192
+#: thonny/plugins/commenting_indenting.py:191
 msgid "Uncomment"
 msgstr "Décommenter"
 
 #: thonny/plugins/common_editing_commands.py:21
 msgid "Undo"
-msgstr "Annuler"
+msgstr "Défaire"
 
 #: thonny/plugins/common_editing_commands.py:33
 msgid "Redo"
 msgstr "Rétablir"
 
-#: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2176
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
 msgid "Cut"
 msgstr "Couper"
 
-#: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2177
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
 msgid "Copy"
 msgstr "Copier"
 
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2178
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
 msgid "Paste"
 msgstr "Coller"
 
@@ -191,15 +182,15 @@ msgstr "Coller"
 msgid "Select all"
 msgstr "Tout sélectionner"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1398
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
 msgid "Run to cursor"
 msgstr "Exécuter jusqu'au curseur"
 
-#: thonny/plugins/debugger.py:980
+#: thonny/plugins/debugger.py:985
 msgid "Can't close yet"
 msgstr "Impossible de fermer pour l'instant"
 
-#: thonny/plugins/debugger.py:981
+#: thonny/plugins/debugger.py:986
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr "Utilisez la commande « Stop » pour annuler le débogage"
 
@@ -207,49 +198,41 @@ msgstr "Utilisez la commande « Stop » pour annuler le débogage"
 msgid "Dock user windows"
 msgstr "Ancrer les fenêtres de l'utilisateur"
 
-#: thonny/plugins/editor_config_page.py:15
+#: thonny/plugins/editor_config_page.py:20
 msgid "Highlight matching names"
 msgstr "Surligner les noms correspondants"
 
-#: thonny/plugins/editor_config_page.py:21
+#: thonny/plugins/editor_config_page.py:26
 msgid "Highlight local variables"
 msgstr "Surligner les variables locales"
 
-#: thonny/plugins/editor_config_page.py:26
+#: thonny/plugins/editor_config_page.py:31
 msgid "Highlight parentheses"
 msgstr "Surligner les parenthèses"
 
-#: thonny/plugins/editor_config_page.py:27
+#: thonny/plugins/editor_config_page.py:32
 msgid "Highlight syntax elements"
 msgstr "Surligner les éléments de syntaxe"
 
-#: thonny/plugins/editor_config_page.py:31
+#: thonny/plugins/editor_config_page.py:36
 msgid "Highlight current line (requires reopening the editor)"
 msgstr "Surligner la ligne du curseur (nécessite de ré-ouvrir l'éditeur)"
 
-#: thonny/plugins/editor_config_page.py:36
-msgid "Allow code completion with Tab-key in editors"
-msgstr "Permettre la complétion du code avec la touche de tabulation dans les éditeurs"
-
-#: thonny/plugins/editor_config_page.py:42
-msgid "Allow code completion with Tab-key in Shell"
-msgstr "Permettre la complétion du code avec la touche de tabulation dans la console"
-
-#: thonny/plugins/editor_config_page.py:51
+#: thonny/plugins/editor_config_page.py:73
 msgid "Show line numbers"
 msgstr "Afficher les numéros de ligne"
 
-#: thonny/plugins/editor_config_page.py:54
+#: thonny/plugins/editor_config_page.py:76
 msgid "Recommended maximum line length\n"
 "(Set to 0 to turn off margin line)"
 msgstr "Longueur maximale de ligne recommandée\n"
 "(définir à 0 pour désactiver la limite)"
 
-#: thonny/plugins/editor_config_page.py:75
+#: thonny/plugins/editor_config_page.py:104
 msgid "Editor"
 msgstr "Éditeur"
 
-#: thonny/plugins/event_logging.py:206
+#: thonny/plugins/event_logging.py:207
 msgid "Export usage logs..."
 msgstr "Exporter les journaux d’utilisation…"
 
@@ -257,55 +240,55 @@ msgstr "Exporter les journaux d’utilisation…"
 msgid "Events"
 msgstr "Événements"
 
-#: thonny/plugins/files.py:551
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "Fichiers"
 
-#: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
 msgid "Find & Replace"
 msgstr "Rechercher et remplacer"
 
-#: thonny/plugins/find_replace.py:63
+#: thonny/plugins/find_replace.py:66
 msgid "Find:"
 msgstr "Rechercher :"
 
-#: thonny/plugins/find_replace.py:74
+#: thonny/plugins/find_replace.py:90
 msgid "Replace with:"
 msgstr "Remplacer par :"
 
-#: thonny/plugins/find_replace.py:92
+#: thonny/plugins/find_replace.py:108
 msgid "Case sensitive"
 msgstr "Sensible à la casse"
 
-#: thonny/plugins/find_replace.py:99
+#: thonny/plugins/find_replace.py:115
 msgid "Up"
 msgstr "Précédent"
 
-#: thonny/plugins/find_replace.py:103
+#: thonny/plugins/find_replace.py:119
 msgid "Down"
 msgstr "Suivant"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:128
 msgid "Find"
 msgstr "Rechercher"
 
-#: thonny/plugins/find_replace.py:122
+#: thonny/plugins/find_replace.py:138
 msgid "Replace"
 msgstr "Remplacer"
 
-#: thonny/plugins/find_replace.py:130
+#: thonny/plugins/find_replace.py:146
 msgid "Replace+Find"
 msgstr "Remplacer et rechercher"
 
-#: thonny/plugins/find_replace.py:140
+#: thonny/plugins/find_replace.py:156
 msgid "Replace all"
 msgstr "Remplacer tout"
 
-#: thonny/plugins/find_replace.py:236
+#: thonny/plugins/find_replace.py:254
 msgid "Enter string to be replaced."
 msgstr "Entrez le texte à remplacer."
 
-#: thonny/plugins/find_replace.py:320
+#: thonny/plugins/find_replace.py:339
 msgid "The specified text was not found!"
 msgstr "Le texte spécifié n'a pas été trouvé !"
 
@@ -356,20 +339,20 @@ msgstr "Cette section est prévue pour vos notes de travail : instructions d’a
 msgid "Notes"
 msgstr "Notes"
 
-#: thonny/plugins/object_inspector.py:111
+#: thonny/plugins/object_inspector.py:116
 msgid "Previous object"
 msgstr "Objet précédent"
 
-#: thonny/plugins/object_inspector.py:114
+#: thonny/plugins/object_inspector.py:119
 msgid "Next object"
 msgstr "Objet suivant"
 
-#: thonny/plugins/object_inspector.py:704
+#: thonny/plugins/object_inspector.py:732
 msgid "Object inspector"
 msgstr "Inspecteur d'objet"
 
 #. Vu qu'il s'agit d'une vue qui donne la structure du code (fonctions, classes etc), est-ce que "structure" ne serait pas mieux ?
-#: thonny/plugins/outline.py:138
+#: thonny/plugins/outline.py:148
 msgid "Outline"
 msgstr "Structure"
 
@@ -377,294 +360,263 @@ msgstr "Structure"
 msgid "Pygame Zero mode"
 msgstr "Mode Pygame Zero"
 
-#: thonny/plugins/pip_gui.py:78
-msgid "Find package from PyPI"
-msgstr "Rechercher un paquet sur PyPI"
-
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:80
 msgid "Uninstall"
 msgstr "Désinstaller"
 
-#: thonny/editors.py:587 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448
-#: thonny/ui_utils.py:1755 thonny/workdlg.py:155
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
 msgid "Close"
 msgstr "Fermer"
 
-#: thonny/plugins/pip_gui.py:347
+#: thonny/plugins/pip_gui.py:397
 msgid "Click "
 msgstr "Cliquez "
 
-#: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382
+#: thonny/plugins/pip_gui.py:398 thonny/plugins/pip_gui.py:409
 msgid "here"
 msgstr "ici"
 
-#: thonny/plugins/pip_gui.py:73
+#: thonny/plugins/pip_gui.py:77
 msgid "Upgrade"
 msgstr "Mettre à jour"
 
-#: thonny/plugins/esp/__init__.py:365
-#: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
 msgid "Install"
 msgstr "Installer"
 
-#: thonny/plugins/pip_gui.py:491
+#: thonny/plugins/pip_gui.py:570
 msgid "Could not find the package from PyPI."
 msgstr "Impossible de trouver le paquet dans PyPi."
 
-#: thonny/plugins/pip_gui.py:511
+#: thonny/plugins/pip_gui.py:592
 msgid "Latest stable version"
 msgstr "Dernière version stable"
 
-#: thonny/plugins/pip_gui.py:513
+#: thonny/plugins/pip_gui.py:594
 msgid "Latest version"
 msgstr "Dernière version"
 
-#: thonny/plugins/pip_gui.py:514
+#: thonny/plugins/pip_gui.py:596
 msgid "Summary"
 msgstr "Résumé"
 
-#: thonny/plugins/pip_gui.py:515
+#: thonny/plugins/pip_gui.py:598
 msgid "Author"
 msgstr "Auteur"
 
-#: thonny/plugins/pip_gui.py:516
+#: thonny/plugins/pip_gui.py:602
 msgid "Homepage"
 msgstr "Page d'accueil"
 
-#: thonny/plugins/pip_gui.py:518
+#: thonny/plugins/pip_gui.py:604
 msgid "Bugtracker"
 msgstr "Suivi des bogues"
 
-#: thonny/plugins/pip_gui.py:520
+#: thonny/plugins/pip_gui.py:606
 msgid "Documentation"
 msgstr "Documentation"
 
-#: thonny/plugins/pip_gui.py:522
+#: thonny/plugins/pip_gui.py:608
 msgid "PyPI page"
 msgstr "Page PyPI"
 
-#: thonny/plugins/pip_gui.py:526
+#: thonny/plugins/pip_gui.py:648
 msgid "Requires"
 msgstr "Nécessite"
 
-#: thonny/plugins/pip_gui.py:652
+#: thonny/plugins/pip_gui.py:802
 msgid "Really uninstall?"
 msgstr "Voulez-vous vraiment désinstaller ?"
 
-#: thonny/plugins/pip_gui.py:657
+#: thonny/plugins/pip_gui.py:807
 msgid "Are you sure you want to uninstall it?"
 msgstr "Êtes-vous sur de vouloir le désinstaller ?"
 
-#: thonny/plugins/variables.py:19
+#: thonny/plugins/variables.py:22
 msgid "Back to\n"
 "current frame"
 msgstr "Revenir au\n"
 "cadre courant"
 
-#: thonny/plugins/variables.py:73 thonny/plugins/variables.py:75
-#: thonny/plugins/variables.py:138
+#: thonny/plugins/variables.py:80 thonny/plugins/variables.py:82
+#: thonny/plugins/variables.py:145
 msgid "Variables"
 msgstr "Variables"
 
-#: thonny/base_file_browser.py:1313
+#: thonny/base_file_browser.py:1576
 msgid "This computer"
 msgstr "Cet ordinateur"
 
-#: thonny/base_file_browser.py:618
+#: thonny/base_file_browser.py:648
 msgid "Refresh"
 msgstr "Actualiser"
 
-#: thonny/base_file_browser.py:631
+#: thonny/base_file_browser.py:657
 msgid "Focus into"
 msgstr "Placer le curseur dans"
 
-#: thonny/base_file_browser.py:1164
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
 msgid "Error"
 msgstr "Erreur"
 
-#: thonny/base_file_browser.py:1164
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
 msgid "You need to select a file!"
 msgstr "Vous devez sélectionner un fichier !"
 
-#: thonny/base_file_browser.py:1168
+#: thonny/base_file_browser.py:1427
 msgid "Overwrite?"
 msgstr "Écraser ?"
 
-#: thonny/base_file_browser.py:1168
+#: thonny/base_file_browser.py:1427
 msgid "Do you want to overwrite '%s' ?"
-msgstr "Voulez-vous écraser « %s » ?"
+msgstr "Voulez-vous écraser '%s' ?"
 
-#: thonny/editors.py:552 thonny/editors.py:554
+#: thonny/editors.py:658 thonny/editors.py:660
 msgid "New"
 msgstr "Nouveau"
 
-#: thonny/editors.py:565
+#: thonny/editors.py:671
 msgid "Open..."
 msgstr "Ouvrir…"
 
-#: thonny/editors.py:567
+#: thonny/editors.py:673
 msgid "Load"
 msgstr "Charger"
 
-#: thonny/editors.py:576
+#: thonny/editors.py:682
 msgid "Recent files"
 msgstr "Fichiers récents"
 
-#: thonny/editors.py:598 thonny/ui_utils.py:450
+#: thonny/editors.py:704 thonny/ui_utils.py:498
 msgid "Close all"
 msgstr "Tout fermer"
 
-#: thonny/editors.py:608 thonny/editors.py:610
+#: thonny/editors.py:714 thonny/editors.py:716
 msgid "Save"
 msgstr "Enregistrer"
 
-#: thonny/editors.py:633
+#: thonny/editors.py:739
 msgid "Save as..."
 msgstr "Enregistrer sous…"
 
-#: thonny/editors.py:644
+#: thonny/editors.py:750
 msgid "Save copy..."
 msgstr "Enregistrer une copie…"
 
-#: thonny/editors.py:653
-msgid "Rename..."
-msgstr "Renommer…"
-
-#: thonny/config_ui.py:19
+#: thonny/config_ui.py:18
 msgid "Thonny options"
 msgstr "Options de Thonny"
 
-#: thonny/running.py:121
+#: thonny/running.py:160
 msgid "Run current script"
 msgstr "Exécuter le script courant"
 
-#: thonny/running.py:152
+#: thonny/running.py:191
 msgid "Run current script in terminal"
 msgstr "Exécuter le script courant dans un terminal"
 
-#: thonny/running.py:165
+#: thonny/running.py:204
 msgid "Stop/Restart backend"
 msgstr "Arrêter/redémarrer l’interpréteur"
 
-#: thonny/running.py:166
+#: thonny/running.py:205
 msgid "Stop"
 msgstr "Arrêter"
 
-#: thonny/running.py:177
+#: thonny/running.py:216
 msgid "Interrupt execution"
 msgstr "Interrompre l’exécution"
 
-#: thonny/running.py:190
+#: thonny/running.py:229
 msgid "Send EOF / Soft reboot"
 msgstr "Envoyer le symbole EOF / Redémarrer"
 
-#: thonny/running.py:201
+#: thonny/running.py:240
 msgid "Disconnect"
 msgstr "Déconnecter"
 
-#: thonny/running_config_page.py:23
-msgid "Known interpreters"
-msgstr "Interpréteurs connus"
-
-#: thonny/running_config_page.py:36
-msgid "Your interpreter isn't in the list?"
-msgstr "Votre interpréteur n’est pas dans la liste ?"
-
-#: thonny/plugins/cpython/__init__.py:391
-msgid "NB! Thonny only supports Python 3.5 and later"
-msgstr "Remarque : Thonny ne supporte que Python 3.5 et versions ultérieures"
-
-#: thonny/running_config_page.py:56
-msgid "Create new virtual environment"
-msgstr "Créer un nouvel environnement virtuel"
-
-#: thonny/running_config_page.py:59
-msgid "Select existing or create a new empty directory"
-msgstr "Sélectionner un dossier existant ou en créer un nouveau"
-
-#: thonny/plugins/cpython/__init__.py:419
+#: thonny/plugins/cpython_frontend/cp_front.py:295
 msgid "Python interpreters"
 msgstr "Interpréteurs Python"
 
-#: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696
-#: thonny/plugins/pip_gui.py:709
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
 msgid "all files"
 msgstr "tous les fichiers"
 
-#: thonny/plugins/cpython/__init__.py:442
+#: thonny/plugins/cpython_frontend/cp_front.py:324
 msgid "Select empty directory for new virtual environment"
 msgstr "Sélectionner un dossier vide pour le nouvel environnement virtuel"
 
-#: thonny/plugins/cpython/__init__.py:449
+#: thonny/plugins/cpython_frontend/cp_front.py:331
 msgid "Bad directory"
 msgstr "Dossier invalide"
 
-#: thonny/plugins/cpython/__init__.py:450
+#: thonny/plugins/cpython_frontend/cp_front.py:332
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "Le dossier sélectionné n'est pas vide. Sélectionner un autre ou annuler."
 
-#: thonny/plugins/cpython/__init__.py:467
+#: thonny/plugins/cpython_frontend/cp_front.py:349
 msgid "Creating virtual environment"
 msgstr "Création de l'environnement virtuel"
 
-#: thonny/shell.py:83
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "Vider la console"
 
-#: thonny/shell.py:138
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "Grapheur"
 
-#: thonny/shell.py:269
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "Effacer"
 
-#: thonny/shell.py:282
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "Afficher le Grapheur"
 
-#: thonny/shell.py:1572
+#: thonny/shell.py:1660
 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 "Pour des raisons de performance, la console évite d'afficher les très longues lignes en entier (voir Outils => Options => Console).\n"
 "Vous pouvez interagir ici avec le texte original."
 
-#: thonny/shell.py:1583
+#: thonny/shell.py:1671
 msgid "Wrap text (may be slow)"
 msgstr "Enrouler le texte (peut être lent)"
 
-#: thonny/ui_utils.py:1750
+#: thonny/ui_utils.py:1879
 msgid "Copy to clipboard"
 msgstr "Copier dans le presse-papiers"
 
-#: thonny/shell.py:1431
-msgid "Expand in Shell"
-msgstr "Étendre dans la console"
-
-#: thonny/shell.py:1625
+#: thonny/shell.py:1713
 msgid "Squeezed text (%d characters)"
 msgstr "Texte tronqué (%d caractères)"
 
-#: thonny/shell.py:1794
+#: thonny/shell.py:1883
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr "Le Grapheur rend visuelles des séries de\n"
-"nombres affichées dans le Shell"
+"nombres affichées dans le Shell."
 
-#: thonny/shell.py:1796
+#: thonny/shell.py:1885
 msgid "See Help for details."
-msgstr "Voir l'aide pour des détails"
+msgstr "Voir l'aide pour des détails."
 
-#: thonny/ui_utils.py:449
+#: thonny/ui_utils.py:497
 msgid "Close others"
 msgstr "Fermer les autres"
 
-#: thonny/ui_utils.py:1606
+#: thonny/ui_utils.py:1734
 msgid "Copying"
 msgstr "Copie"
 
-#: thonny/ui_utils.py:1609
+#: thonny/ui_utils.py:1737
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -674,89 +626,65 @@ msgstr "Copie de\n"
 "vers\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
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
 msgid "Cancel"
 msgstr "Annuler"
 
-#: 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
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
 msgid "OK"
 msgstr "OK"
 
-#: thonny/ui_utils.py:1783
-msgid "Cancel the process?"
-msgstr "Annuler le processus ?"
-
-#: thonny/ui_utils.py:1784
-msgid "The process is still running.\n"
-"Are you sure you want to cancel?"
-msgstr "Ce processus est toujours en cours d'exécution.\n"
-"Êtes-vous sûr de vouloir annuler ?"
-
-#: thonny/ui_utils.py:2182
+#: thonny/ui_utils.py:2345
 msgid "Select All"
 msgstr "Sélectionner tout"
 
-#: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:158
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:164
 msgid "Shell"
 msgstr "Console"
 
-#: thonny/plugins/cpython/__init__.py:602
-msgid "The same interpreter which runs Thonny (default)"
-msgstr "Le même interpréteur qui exécute Thonny (par défaut)"
-
-#: thonny/plugins/cpython/__init__.py:350
-msgid "This virtual environment is automatically maintained by Thonny.\n"
-""
-msgstr "Cet environnement virtuel est automatiquement maintenu par Thonny.\n"
-"\n"
-""
-
-#: thonny/plugins/cpython/__init__.py:351
-msgid "Location: "
-msgstr "Emplacement : "
-
-#: thonny/workbench.py:592
+#: thonny/workbench.py:608
 msgid "Options..."
 msgstr "Options…"
 
-#: thonny/workbench.py:599
+#: thonny/workbench.py:615
 msgid "Increase font size"
 msgstr "Augmenter la taille de la police"
 
-#: thonny/workbench.py:664
+#: thonny/workbench.py:679
 msgid "Change font size"
 msgstr "Modifier la taille de la police"
 
-#: thonny/workbench.py:665
+#: thonny/workbench.py:680
 msgid "Zoom"
 msgstr "Zoom"
 
-#: thonny/workbench.py:674
+#: thonny/workbench.py:689
 msgid "Exit Thonny"
 msgstr "Quitter Thonny"
 
-#: thonny/workbench.py:677
+#: thonny/workbench.py:692
 msgid "Quit"
 msgstr "Quitter"
 
-#: thonny/workbench.py:1181 thonny/workbench.py:1189
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
 msgid "Overwriting theme '%s'"
-msgstr "Remplacement du thème « %s »"
+msgstr "Remplacement du thème '%s'"
 
-#: thonny/workbench.py:1348
+#: thonny/workbench.py:1438
 msgid "Program arguments:"
 msgstr "Arguments du programme :"
 
-#: thonny/workbench.py:1402
+#: thonny/workbench.py:1492
 msgid "Regular mode"
 msgstr "Mode normal"
 
-#: thonny/workbench.py:1403
+#: thonny/workbench.py:1493
 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.)"
@@ -764,75 +692,75 @@ msgstr "La configuration a été mise à jour. Redémarrez Thonny pour commencer
 "\n"
 "(Voir « Outils → Options → Général » si vous changez d'avis plus tard.)"
 
-#: thonny/plugins/ast_view.py:210
+#: thonny/plugins/ast_view.py:211
 msgid "Program tree"
 msgstr "Arbre du programme"
 
-#: thonny/plugins/backend_config_page.py:323
-msgid "Select interpreter"
-msgstr "Sélectionner l'interpréteur"
-
-#: thonny/plugins/debugger.py:1280
+#: thonny/plugins/debugger.py:1284
 msgid "Resume"
 msgstr "Reprendre"
 
-#: thonny/plugins/debugger.py:1296
+#: thonny/plugins/debugger.py:1300
 msgid "Run / resume"
 msgstr "Exécuter / reprendre"
 
-#: thonny/plugins/debugger.py:1311
+#: thonny/plugins/debugger.py:1315
 msgid "Debug current script"
 msgstr "Déboguer le script courant"
 
-#: thonny/plugins/debugger.py:1313
+#: thonny/plugins/debugger.py:1317
 msgid "Debug"
 msgstr "Déboguer"
 
-#: thonny/plugins/debugger.py:1324
+#: thonny/plugins/debugger.py:1328
 msgid "Debug current script (nicer)"
 msgstr "Déboguer le script courant (plus joli)"
 
-#: thonny/plugins/debugger.py:1336
+#: thonny/plugins/debugger.py:1340
 msgid "Debug current script (faster)"
 msgstr "Déboguer le script courant (plus rapide)"
 
-#: thonny/plugins/debugger.py:1347
+#. "Nœud" fait référence au Nœud de l'AST ce qui est difficile à expliquer aux débutants. "Étape" (de calcul) est compris des plus jeunes.
+#: thonny/plugins/debugger.py:1351
 msgid "Step over"
-msgstr "Nœud suivant"
+msgstr "Étape suivante"
 
-#: thonny/plugins/debugger.py:1349
+#: thonny/plugins/debugger.py:1353
 msgid "Over"
 msgstr "Suivant"
 
-#: thonny/plugins/debugger.py:1360
+#. "Nœud" fait référence au Nœud de l'AST ce qui est difficile à expliquer aux débutants. "Étape" (de calcul) est compris des plus jeunes.
+#: thonny/plugins/debugger.py:1364
 msgid "Step into"
-msgstr "Entrer dans le nœud"
+msgstr "Entrer dans l'étape en cours"
 
-#: thonny/plugins/debugger.py:1362
+#: thonny/plugins/debugger.py:1366
 msgid "Into"
 msgstr "Entrer"
 
-#: thonny/plugins/debugger.py:1373
+#. "Nœud" fait référence au Nœud de l'AST ce qui est difficile à expliquer aux débutants. "Étape" (de calcul) est compris des plus jeunes.
+#: thonny/plugins/debugger.py:1377
 msgid "Step out"
-msgstr "Sortir du nœud"
+msgstr "Sortir de l'étape en cours"
 
-#: thonny/plugins/debugger.py:1375
+#: thonny/plugins/debugger.py:1379
 msgid "Out"
 msgstr "Sortir"
 
-#: thonny/plugins/debugger.py:1410
+#. "Nœud" fait référence au Nœud de l'AST ce qui est difficile à expliquer aux débutants. "Étape" (de calcul) est compris des plus jeunes.
+#: thonny/plugins/debugger.py:1414
 msgid "Step back"
-msgstr "Nœud précédent"
+msgstr "Étape précédente"
 
-#: thonny/plugins/debugger.py:1412
+#: thonny/plugins/debugger.py:1416
 msgid "Back"
 msgstr "Précédent"
 
-#: thonny/plugins/debugger.py:1418
+#: thonny/plugins/debugger.py:1422
 msgid "Stack"
 msgstr "Pile"
 
-#: thonny/plugins/debugger.py:1419
+#: thonny/plugins/debugger.py:1423
 msgid "Exception"
 msgstr "Exception"
 
@@ -852,125 +780,110 @@ msgstr "Type d'interface"
 msgid "UI scaling factor"
 msgstr "Facteur d'échelle de l'interface"
 
-#: thonny/plugins/general_config_page.py:108
+#: thonny/plugins/general_config_page.py:114
 msgid "NB! Restart Thonny after changing these options!"
 msgstr "Remarque : Redémarrez Thonny après avoir modifié ces options !"
 
-#: thonny/plugins/general_config_page.py:129
+#: thonny/plugins/general_config_page.py:148
 msgid "General"
 msgstr "Général"
 
-#: thonny/plugins/pip_gui.py:129
+#: thonny/plugins/pip_gui.py:142
 msgid "INSTALL"
 msgstr "INSTALLER"
 
-#: thonny/plugins/pip_gui.py:365
+#: thonny/plugins/pip_gui.py:367
 msgid "Browse the packages"
 msgstr "Parcourir les paquets"
 
-#: thonny/plugins/pip_gui.py:368
+#: thonny/plugins/pip_gui.py:370
 msgid "With current interpreter you can only browse the packages here.\n"
 "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling."
 msgstr "Avec l'interpréteur courant vous ne pouvez parcourir que ces paquets.\n"
 "Utilisez « Outils → Ouvrir la console du système… » pour installer, mettre à jour ou désinstaller."
 
-#: thonny/plugins/pip_gui.py:376
+#: thonny/plugins/pip_gui.py:378
 msgid "Packages' directory"
 msgstr "Dossier des paquets"
 
-#: thonny/plugins/pip_gui.py:333
+#: thonny/plugins/pip_gui.py:382
 msgid "Install from PyPI"
 msgstr "Installer depuis PyPI"
 
-#: thonny/plugins/pip_gui.py:336
+#: thonny/plugins/pip_gui.py:385
 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 vous ne savez pas d'où vous pouvez obtenir le paquet, alors vous pouvez faire une recherche dans l'Index des Paquets Python. Commencez par entrer le nom du paquet dans le champ de recherche ci-dessus et appuyez sur ENTRÉE."
 
-#: thonny/plugins/pip_gui.py:352
+#: thonny/plugins/pip_gui.py:402
 msgid "to locate requirements.txt file and install the packages specified in it."
 msgstr "pour trouver le fichier requirements.txt et installer les paquets qui y sont spécifiés."
 
-#: thonny/plugins/pip_gui.py:381
+#: thonny/plugins/pip_gui.py:408
 msgid "Click"
 msgstr "Cliquez"
 
-#: thonny/plugins/pip_gui.py:386
+#: thonny/plugins/pip_gui.py:413
 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
 msgstr "pour trouver et installer le fichier du paquet (généralement avec l'extension .whl, .tar.gz ou .zip)."
 
-#: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393
+#: thonny/plugins/pip_gui.py:420
 msgid "Upgrade or uninstall"
 msgstr "Mettre à jour ou désinstaller"
 
-#: thonny/plugins/pip_gui.py:395
+#: thonny/plugins/pip_gui.py:422
 msgid "Start by selecting the package from the left."
 msgstr "Commencez par sélectionner le paquet sur la gauche."
 
-#: thonny/plugins/pip_gui.py:399
-msgid "Target:"
-msgstr "Cible :"
-
-#: thonny/plugins/pip_gui.py:401
-msgid "virtual environment"
-msgstr "environnement virtuel"
-
-#: thonny/plugins/pip_gui.py:403
-msgid "user site packages"
-msgstr "paquets de l'utilisateur du site"
-
-#: thonny/plugins/pip_gui.py:407
+#: thonny/plugins/pip_gui.py:430
 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
 msgstr "Cette boîte de dialogue liste tous les paquets disponibles, mais n'autorise la mise à jour et la désinstallation que depuis"
 
-#: thonny/plugins/pip_gui.py:417
+#: thonny/plugins/pip_gui.py:440
 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means."
 msgstr "Les nouveaux paquets seront également installés dans ce dossier. D'autres emplacements peuvent être gérés de façon différente."
 
-#: thonny/plugins/pip_gui.py:441
+#: thonny/plugins/pip_gui.py:493
 msgid "Installed version:"
 msgstr "Version installée :"
 
-#: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443
+#: thonny/plugins/pip_gui.py:495
 msgid "Installed to:"
 msgstr "Installée dans :"
 
-#: thonny/plugins/pip_gui.py:494
+#: thonny/plugins/pip_gui.py:573
 msgid "Please check your spelling!"
 msgstr "Veuillez vérifier la syntaxe !"
 
-#: thonny/plugins/pip_gui.py:512
-msgid "You need to enter"
-msgstr "Vous devez entrer"
-
-#: thonny/plugins/pip_gui.py:498
+#: thonny/plugins/pip_gui.py:577
 msgid "Could not find the package info from PyPI."
 msgstr "Impossible de trouver le paquet dans PyPI"
 
-#: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1200
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
 msgid "Error code:"
 msgstr "Code d'erreur :"
 
-#: thonny/plugins/pip_gui.py:601
+#: thonny/plugins/pip_gui.py:748
 msgid "Can't find package name from the list:"
 msgstr "Impossible de trouver le nom du paquet dans la liste :"
 
-#: thonny/plugins/pip_gui.py:653
+#: thonny/plugins/pip_gui.py:803
 msgid "Package '{}' is required for installing and uninstalling other packages."
-msgstr "Le paquet « {} » est nécessaire pour installer ou désinstaller d'autres paquets."
+msgstr "Le paquet '{}' est nécessaire pour installer ou désinstaller d'autres paquets."
 
-#: thonny/plugins/pip_gui.py:696
+#: thonny/plugins/pip_gui.py:848
 msgid "Package"
 msgstr "Paquet"
 
-#: thonny/plugins/pip_gui.py:796
+#: thonny/plugins/pip_gui.py:960
 msgid "Manage packages for %s"
 msgstr "Gérer les paquets pour %s"
 
-#: thonny/plugins/pip_gui.py:872
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
 msgid "Confirmation"
 msgstr "Confirmation"
 
-#: thonny/plugins/pip_gui.py:873
+#: thonny/plugins/pip_gui.py:1035
 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"
@@ -980,145 +893,132 @@ msgstr "Il semble que vous êtes en train d'installer un paquet lié à Thonny.
 "\n"
 "Êtes-vous sûr de vouloir installer %s pour l'interpréteur ?"
 
-#: thonny/plugins/pip_gui.py:981
+#: thonny/plugins/pip_gui.py:1141
 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 "Remarque : Il est possible qu'il y ait une autre version disponible qui soit compatible avec la version actuelle de Thonny. Cliquez sur le bouton « … » pour sélectionner la version à installer."
 
-#: thonny/plugins/pip_gui.py:989
+#: thonny/plugins/pip_gui.py:1149
 msgid "Thonny plugin without requirements"
 msgstr "Plugin pour Thonny sans aucun pré-requis"
 
-#: 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 "Il semble que vous essayez d'installer un plugin de Thonny déprécié (il ne spécifie pas la version de Thonny requise).\n"
-"\n"
-"Si vous le voulez vraiment, veuillez l'installer en ligne de commande."
-
-#: thonny/plugins/pip_gui.py:1004
+#: thonny/plugins/pip_gui.py:1165
 msgid "Unsuitable requirements"
 msgstr "Exigences non satisfaites"
 
-#: thonny/plugins/pip_gui.py:1005
+#: thonny/plugins/pip_gui.py:1166
 msgid "This package requires different Thonny version:"
 msgstr "Ce paquet nécessite une version différente de Thonny :"
 
-#: thonny/plugins/pip_gui.py:1009
+#: thonny/plugins/pip_gui.py:1170
 msgid "If you still want it, then please install it from the command line."
 msgstr "Si vous le voulez vraiment, veuillez l'installer en ligne de commande."
 
-#: thonny/plugins/pip_gui.py:1052
-msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)"
-msgstr "(Dans ce cas l'interpréteur de Thonny utilise le même interpréteur, afin que les deux boîtes de dialogue gèrent les mêmes paquets.)"
-
-#: thonny/plugins/pip_gui.py:1058
+#: thonny/plugins/pip_gui.py:1207
 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
 msgstr "Remarque : Vous devez redémarrer Thonny après avoir installé / mis à jour / désinstallé un plugin."
 
-#: thonny/plugins/pip_gui.py:1068
+#: thonny/plugins/pip_gui.py:1217
 msgid "Thonny plug-ins"
 msgstr "Plugins de Thonny"
 
-#: thonny/plugins/pip_gui.py:1090
+#: thonny/plugins/pip_gui.py:1253
 msgid "Advanced install / upgrade / downgrade"
 msgstr "Installation / Mise à jour / Rétrogradation avancée"
 
-#: thonny/plugins/pip_gui.py:1099
+#: thonny/plugins/pip_gui.py:1262
 msgid "Desired version"
 msgstr "Version souhaitée"
 
-#: thonny/plugins/pip_gui.py:1137
+#: thonny/plugins/pip_gui.py:1321
 msgid "Upgrade dependencies"
 msgstr "Mettre à jour les dépendances"
 
-#: thonny/plugins/pip_gui.py:1198
+#: thonny/plugins/pip_gui.py:1406
 msgid "Requires:"
 msgstr "Exigences :"
 
-#: thonny/plugins/pip_gui.py:1202
+#: thonny/plugins/pip_gui.py:1410
 msgid "Error:"
 msgstr "Erreur :"
 
-#: thonny/plugins/pip_gui.py:1409
+#: thonny/plugins/pip_gui.py:1601
 msgid "Manage packages..."
 msgstr "Gérer les paquets…"
 
-#: thonny/plugins/pip_gui.py:1415
+#: thonny/plugins/pip_gui.py:1607
 msgid "Manage plug-ins..."
 msgstr "Gérer les plugins…"
 
-#: thonny/plugins/replayer.py:365
+#: thonny/plugins/replayer.py:364
 #, fuzzy
 msgid "Open replayer..."
 msgstr "Ouvrir le relecteur…"
 
-#: thonny/plugins/run_debug_config_page.py:14
+#: thonny/plugins/run_debug_config_page.py:21
 msgid "Change working directory to script directory on Run / Debug"
 msgstr "Modifier le dossier de travail en dossier de script lors de l'exécution / débogage"
 
-#: thonny/plugins/run_debug_config_page.py:22
+#: thonny/plugins/run_debug_config_page.py:35
 msgid "Show function calls (frames) in separate windows"
 msgstr "Afficher les appels de fonction (cadres) dans des fenêtres séparées"
 
-#: thonny/plugins/run_debug_config_page.py:23
+#: thonny/plugins/run_debug_config_page.py:36
 msgid "Uncheck if you want more traditional experience."
 msgstr "Décochez si vous souhaitez une expérience d'utilisation plus classique."
 
-#: thonny/plugins/run_debug_config_page.py:29
+#: thonny/plugins/run_debug_config_page.py:42
 msgid "Open and close Stack view automatically"
 msgstr "Ouvrir et fermer la vue de la pile automatiquement"
 
-#: thonny/plugins/run_debug_config_page.py:30
+#: thonny/plugins/run_debug_config_page.py:43
 msgid "Opens the Stack view on first call and closes it when program returns to main frame."
 msgstr "Ouvre la vue de la pile au premier appel et la ferme lorsque le programme revient au cadre principal."
 
-#: thonny/plugins/run_debug_config_page.py:39
+#: thonny/plugins/run_debug_config_page.py:52
 msgid "Allow stepping into libraries (ie. outside of main script directory)"
 msgstr "Autoriser l'entrée dans les bibliothèques en mode débogage (par ex. en dehors du dossier du script principal)"
 
-#: thonny/plugins/run_debug_config_page.py:40
+#: thonny/plugins/run_debug_config_page.py:53
 msgid "May make debugging slower."
 msgstr "Peut ralentir le débogueur."
 
-#: thonny/plugins/run_debug_config_page.py:45
+#: thonny/plugins/run_debug_config_page.py:58
 msgid "Preferred debugger"
 msgstr "Débogueur favori"
 
-#: thonny/plugins/run_debug_config_page.py:57
+#: thonny/plugins/run_debug_config_page.py:70
 msgid "(used when clicking Debug toolbar button)"
 msgstr "(utilisé lors du clic sur le bouton Déboguer dans la barre d'outils)"
 
-#: thonny/plugins/run_debug_config_page.py:62
+#: thonny/plugins/run_debug_config_page.py:75
 msgid "Birdseye port"
 msgstr "Port de Birdseye"
 
-#: thonny/plugins/run_debug_config_page.py:66
+#: thonny/plugins/run_debug_config_page.py:79
 msgid "(restart Thonny after changing this)"
 msgstr "(redémarrez Thonny après avoir modifié ceci)"
 
-#: thonny/plugins/run_debug_config_page.py:74
+#: thonny/plugins/run_debug_config_page.py:87
 msgid "Run & Debug"
 msgstr "Exécuter et déboguer"
 
-#: thonny/plugins/shell_config_page.py:17
+#: thonny/plugins/shell_config_page.py:26
 msgid "Terminal emulation"
 msgstr "Émulation du terminal"
 
-#: thonny/plugins/shell_config_page.py:19
+#: thonny/plugins/shell_config_page.py:28
 msgid "supports basic ANSI-colors and styles"
 msgstr "prend en charge les styles et les couleurs ANSI simples"
 
-#: thonny/plugins/shell_config_page.py:31
+#: thonny/plugins/shell_config_page.py:40
 msgid "Maximum number of lines to keep."
 msgstr "Nombre maximum de lignes à conserver."
 
-#: thonny/plugins/shell_config_page.py:33
+#: thonny/plugins/shell_config_page.py:42
 msgid "NB! Large values may cause poor performance!"
 msgstr "Remarque : De grandes valeurs peuvent réduire les performances !"
 
-#: thonny/plugins/shell_config_page.py:49
+#: thonny/plugins/shell_config_page.py:58
 msgid "Maximum length of line fragments before squeezing"
 msgstr "Longueur maximum de ligne avant de tronquer le texte"
 
@@ -1143,52 +1043,52 @@ msgstr "Remarque : La fermeture automatique doit être activée dans les paramè
 msgid "Terminal"
 msgstr "Terminal"
 
-#: thonny/plugins/theme_and_font_config_page.py:40
+#: thonny/plugins/theme_and_font_config_page.py:39
 msgid "UI theme"
 msgstr "Thème de l'interface"
 
-#: thonny/plugins/theme_and_font_config_page.py:53
+#: thonny/plugins/theme_and_font_config_page.py:52
 msgid "Syntax theme"
 msgstr "Thème de la syntaxe"
 
-#: thonny/plugins/theme_and_font_config_page.py:85
+#: thonny/plugins/theme_and_font_config_page.py:84
 msgid "Editor font"
 msgstr "Police de l'éditeur"
 
 #. Ici IO désigne Input/Output soit Entrée/Sortie. Cela correspond à la police de la console (Shell). Il est donc plus approprié de traduire par "Police de la console"
-#: thonny/plugins/theme_and_font_config_page.py:108
+#: thonny/plugins/theme_and_font_config_page.py:107
 msgid "IO font"
 msgstr "Police de la console"
 
-#: thonny/plugins/theme_and_font_config_page.py:133
+#: thonny/plugins/theme_and_font_config_page.py:132
 msgid "Preview"
 msgstr "Aperçu"
 
-#: thonny/plugins/theme_and_font_config_page.py:145
+#: thonny/plugins/theme_and_font_config_page.py:150
 msgid "This is a comment"
 msgstr "Ceci est un commentaire"
 
-#: thonny/plugins/theme_and_font_config_page.py:148
+#: thonny/plugins/theme_and_font_config_page.py:153
 msgid "The answer is"
 msgstr "La réponse est"
 
-#: thonny/plugins/theme_and_font_config_page.py:152
+#: thonny/plugins/theme_and_font_config_page.py:157
 msgid "unclosed_string"
 msgstr "chaîne_non_fermée"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:159
 msgid "blah, blah"
 msgstr "bla, bla"
 
-#: thonny/plugins/theme_and_font_config_page.py:177
+#: thonny/plugins/theme_and_font_config_page.py:183
 msgid "NB! Some style elements change only after restarting Thonny!"
 msgstr "Remarque : Certains éléments de style ne seront modifiés qu'après le redémarrage de Thonny !"
 
-#: thonny/plugins/theme_and_font_config_page.py:216
+#: thonny/plugins/theme_and_font_config_page.py:222
 msgid "Enter an integer"
 msgstr "Entrez un nombre entier"
 
-#: thonny/plugins/theme_and_font_config_page.py:229
+#: thonny/plugins/theme_and_font_config_page.py:235
 msgid "Theme & Font"
 msgstr "Thème et police"
 
@@ -1200,537 +1100,444 @@ msgstr "Ouvrir le dossier programme de Thonny…"
 msgid "Open Thonny data folder..."
 msgstr "Ouvrir le dossier de données de Thonny…"
 
-#: thonny/plugins/help/__init__.py:64
+#: thonny/plugins/help/__init__.py:70
 msgid "Home"
 msgstr "Accueil"
 
-#: thonny/plugins/help/__init__.py:75
+#: thonny/plugins/help/__init__.py:81
 msgid "Help contents"
 msgstr "Contenu de l'aide"
 
-#: thonny/plugins/micropython/__init__.py:274
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "appareil CircuitPython"
 
-#: thonny/plugins/micropython/__init__.py:278
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "appareil MicroPython"
 
-#: thonny/plugins/micropython/__init__.py:476
+#: thonny/plugins/micropython/mp_front.py:558
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "Connectez votre appareil à l'ordinateur et sélectionnez le port correspondant ci-dessous"
 
-#: thonny/plugins/micropython/__init__.py:479
+#: thonny/plugins/micropython/mp_front.py:561
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "recherche du nom de votre appareil, « USB Serial » ou « UART »"
 
-#: thonny/plugins/micropython/__init__.py:481
+#: thonny/plugins/micropython/mp_front.py:563
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "Si vous ne le trouvez pas, vous devriez d'abord installer un pilote USB correct."
 
-#: thonny/plugins/micropython/__init__.py:401
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port"
 msgstr "Port"
 
-#: thonny/plugins/micropython/__init__.py:411
+#: thonny/plugins/micropython/mp_front.py:458
 msgid "Try to detect port automatically"
 msgstr "Essayer de détecter le port automatiquement"
 
-#: thonny/plugins/micropython/__init__.py:954
+#: thonny/plugins/micropython/__init__.py:24
 msgid "MicroPython (generic)"
 msgstr "MicroPython (générique)"
 
-#: thonny/plugins/printing/__init__.py:82
+#: thonny/plugins/printing/__init__.py:98
 msgid "Print..."
 msgstr "Imprimer…"
 
-#: thonny/plugins/system_shell/__init__.py:59
+#: thonny/plugins/system_shell/__init__.py:63
 msgid "Open system shell..."
 msgstr "Ouvrir la console du système…"
 
-#: thonny/plugins/backend_config_page.py:103
+#: thonny/plugins/backend_config_page.py:109
 msgid "Details"
 msgstr "Détails"
 
-#: thonny/plugins/pip_gui.py:345
+#: thonny/plugins/pip_gui.py:395
 msgid "Install from requirements file"
 msgstr "Installer depuis un fichier d'exigences"
 
-#: thonny/plugins/pip_gui.py:380
+#: thonny/plugins/pip_gui.py:407
 msgid "Install from local file"
 msgstr "Installer depuis un fichier local"
 
-#: thonny/plugins/pip_gui.py:1038
+#: thonny/plugins/pip_gui.py:1200
 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 "Cette boîte de dialogue concerne la gestion des plugins de Thonny et leurs dépendances.\n"
 "Si vous souhaitez installer des paquets pour vos propres programmes, sélectionnez « Outils → Gérer les paquets… »"
 
-#: thonny/plugins/circuitpython/__init__.py:163
+#: thonny/plugins/circuitpython/__init__.py:10
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (générique)"
 
-#: thonny/plugins/commenting_indenting.py:143
+#: thonny/plugins/commenting_indenting.py:142
 msgid "Indent selected lines"
 msgstr "Indenter les lignes sélectionnées"
 
-#: thonny/plugins/commenting_indenting.py:153
+#: thonny/plugins/commenting_indenting.py:152
 msgid "Dedent selected lines"
 msgstr "Désindenter les lignes sélectionnées"
 
-#: thonny/workbench.py:1391
+#: thonny/workbench.py:1481
 msgid "Switch to\n"
 "regular\n"
 "mode"
 msgstr "Passer en mode normal"
 
-#: thonny/plugins/microbit/__init__.py:55
+#: thonny/plugins/microbit/__init__.py:62
 msgid "Make sure MicroPython has been installed to your micro:bit."
 msgstr "Veuillez vérifier que MicroPython a bien été installé dans votre micro:bit."
 
-#: thonny/plugins/microbit/__init__.py:57
+#: thonny/plugins/microbit/__init__.py:64
 msgid "Don't forget that main.py only works without embedded main script."
 msgstr "N'oubliez pas que main.py ne peut fonctionner que sans script principal intégré."
 
-#: thonny/plugins/micropython/uf2dialog.py:45
-msgid "please wait"
-msgstr "veuillez patienter"
-
-#: thonny/plugins/microbit/__init__.py:199
-msgid "Done!"
-msgstr "Terminé !"
-
-#: thonny/plugins/micropython/__init__.py:298
-msgid "Firmware"
-msgstr "Micrologiciel"
-
-#: thonny/misc_utils.py:134
+#: thonny/misc_utils.py:177
 msgid "Could not find disk '%s'. Do you want to locate it yourself?"
-msgstr "Impossible de trouver le dique « %s ». Voulez-vous le trouver vous-même ?"
+msgstr "Impossible de trouver le disque '%s'. Voulez-vous le trouver vous-même ?"
 
-#: thonny/misc_utils.py:137
+#: thonny/misc_utils.py:180
 msgid "Found several '%s' disks. Do you want to choose one yourself?"
-msgstr "Plusieurs disques « %s » trouvés. Voulez-vous en sélectionner un vous-même ?"
+msgstr "Plusieurs disques '%s' trouvés. Voulez-vous en sélectionner un vous-même ?"
 
-#: thonny/misc_utils.py:153
+#: thonny/misc_utils.py:196
 msgid "Can't find suitable disk"
 msgstr "Impossible de trouver un disque valide"
 
-#: thonny/base_file_browser.py:273
+#: thonny/base_file_browser.py:294
 msgid "%d items"
 msgstr "%d éléments"
 
-#: thonny/base_file_browser.py:692
-msgid "Move to Recycle Bin"
-msgstr "Déplacer vers la corbeille"
-
-#: thonny/base_file_browser.py:694
+#: thonny/base_file_browser.py:743
 msgid "Move to Trash"
 msgstr "Déplacer vers la corbeille"
 
-#: thonny/base_file_browser.py:697
+#: thonny/base_file_browser.py:746
 msgid "Delete"
 msgstr "Supprimer"
 
-#: thonny/base_file_browser.py:700 thonny/base_file_browser.py:834
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
 msgid "New directory"
 msgstr "Nouveau dossier"
 
-#: thonny/base_file_browser.py:703
+#: thonny/base_file_browser.py:749
 msgid "Properties"
 msgstr "Propriétés"
 
-#: thonny/base_file_browser.py:705
+#: thonny/base_file_browser.py:751
 msgid "Storage space"
 msgstr "Espace de stockage"
 
-#: thonny/base_file_browser.py:715
+#: thonny/base_file_browser.py:761
 msgid "Path"
 msgstr "Chemin"
 
-#: thonny/base_file_browser.py:717
+#: thonny/base_file_browser.py:763
 msgid "Directory properties"
 msgstr "Propriétés du dossier"
 
-#: thonny/base_file_browser.py:719
+#: thonny/base_file_browser.py:765
 msgid "File properties"
 msgstr "Propriétés du fichier"
 
-#: thonny/base_file_browser.py:721
+#: thonny/base_file_browser.py:767
 msgid "bytes"
 msgstr "octets"
 
-#: thonny/base_file_browser.py:724
+#: thonny/base_file_browser.py:770
 msgid "Size"
 msgstr "Taille"
 
-#: thonny/base_file_browser.py:83 thonny/base_file_browser.py:735
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
 msgid "Modified"
 msgstr "Modifié le"
 
-#: thonny/base_file_browser.py:794
+#: thonny/base_file_browser.py:842
 msgid "Deleting %s"
 msgstr "Suppression de %s"
 
-#: thonny/base_file_browser.py:817
-msgid "Moving %s to %s"
-msgstr "Déplacement de %s vers %s"
-
-#: thonny/editors.py:219
+#: thonny/editors.py:262
 msgid "Loading"
 msgstr "Chargement"
 
-#: thonny/editors.py:335
+#: thonny/editors.py:395
 msgid "Saving"
 msgstr "Enregistrement"
 
-#: thonny/running.py:1408
-msgid "Working..."
-msgstr "Travail en cours…"
-
-#: thonny/plugins/files.py:199
-msgid "Uploading %s to %s"
-msgstr "Téléversement de %s vers %s"
-
-#: thonny/plugins/files.py:216
+#: thonny/plugins/files.py:219
 msgid "Upload to %s"
 msgstr "Téléversement vers %s"
 
-#: thonny/plugins/files.py:362
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
 msgstr "Téléchargement de %s vers %s"
 
-#: thonny/plugins/files.py:275
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr "Téléchargement vers %s"
 
-#: thonny/base_file_browser.py:620
+#: thonny/base_file_browser.py:650
 msgid "Open in system file manager"
 msgstr "Ouvrir dans le gestionnaire de fichiers"
 
-#: thonny/base_file_browser.py:625
+#: thonny/base_file_browser.py:678
 msgid "Hide hidden files"
 msgstr "Cacher les fichiers cachés"
 
-#: thonny/base_file_browser.py:625
+#: thonny/base_file_browser.py:678
 msgid "Show hidden files"
 msgstr "Montrer les fichiers cachés"
 
-#: thonny/base_file_browser.py:635
+#: thonny/base_file_browser.py:661
 msgid "Open in Thonny"
 msgstr "Ouvrir dans Thonny"
 
-#: thonny/base_file_browser.py:640 thonny/base_file_browser.py:661
+#: thonny/base_file_browser.py:692
 msgid "Open in system default app"
 msgstr "Ouvrir dans l'application système par défaut"
 
-#: thonny/base_file_browser.py:647 thonny/base_file_browser.py:669
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
 msgid "Configure %s files"
 msgstr "Configurer les fichiers %s "
 
-#: thonny/base_file_browser.py:670
+#: thonny/base_file_browser.py:701
 msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
 msgstr "Que faire avec un fichier %s quand vous double cliquez dessus dans le gestionnaire de fichier de Thonny ?"
 
-#: thonny/base_file_browser.py:1042 thonny/plugins/micropython/pip_gui.py:77
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
 msgid "Deleting"
 msgstr "Supprimer"
 
-#: thonny/base_file_browser.py:1049
+#: thonny/base_file_browser.py:1265
 msgid "Creating directory"
 msgstr "Créer le répertoire"
 
-#: thonny/editors.py:217
+#: thonny/editors.py:260
 msgid "Loading %s"
 msgstr "Charger %s"
 
-#: thonny/editors.py:333
+#: thonny/editors.py:390
 msgid "Saving to %s"
 msgstr "Sauvegarder dans %s"
 
-#: thonny/editors.py:622 thonny/editors.py:624
+#: thonny/editors.py:728 thonny/editors.py:730
 msgid "Save All files"
 msgstr "Sauvegarder Tous les fichiers"
 
-#: thonny/workbench.py:828
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
 msgid "Configure interpreter..."
 msgstr "Configurer l'interpréteur..."
 
-#: thonny/workbench.py:1501
+#: thonny/workbench.py:1591
 msgid "Device"
 msgstr "Appareil"
 
-#: thonny/workdlg.py:185
+#: thonny/workdlg.py:234
 msgid "Cancelling"
 msgstr "Annuler"
 
-#: thonny/workdlg.py:212
+#: thonny/workdlg.py:270
 msgid "Starting"
 msgstr "Démarrer"
 
-#: thonny/plugins/backend_config_page.py:234
+#: thonny/plugins/backend_config_page.py:249
 msgid "Authentication"
 msgstr "Authentification"
 
-#: thonny/plugins/backend_config_page.py:236
+#: thonny/plugins/backend_config_page.py:251
 msgid "Enter the passphrase of your private key for\n"
 "{}"
 msgstr "Entrer la phrase de passe de votre clé privée pour {}"
 
-#: thonny/plugins/backend_config_page.py:239
+#: thonny/plugins/backend_config_page.py:254
 msgid "Enter your password for\n"
 "{}"
 msgstr "Entrer votre mot de passe pour {}"
 
-#: thonny/plugins/object_inspector.py:458
+#: thonny/plugins/object_inspector.py:486
 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s"
 msgstr "La représentation ci-dessus est une valeur approximative de ce décimal. La valeur exacte stockée est %s  qui est environ %s"
 
-#: thonny/plugins/pip_gui.py:557
+#: thonny/plugins/pip_gui.py:682
 msgid "Search results"
 msgstr "Résultats de la recherche"
 
-#: thonny/plugins/pip_gui.py:558
+#: thonny/plugins/pip_gui.py:683
 msgid "Searching"
 msgstr "Chercher"
 
-#: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
 msgid "Installing '%s'"
 msgstr "Installation '%s'"
 
-#: thonny/plugins/pip_gui.py:645
+#: thonny/plugins/pip_gui.py:793
 msgid "Upgrading '%s'"
 msgstr "Mise à jour '%s'"
 
-#: thonny/plugins/pip_gui.py:650
+#: thonny/plugins/pip_gui.py:800
 msgid "Uninstalling '%s'"
 msgstr "Désinstallation '%s'"
 
-#: thonny/plugins/pip_gui.py:663
+#: thonny/plugins/pip_gui.py:814
 msgid "Installing"
 msgstr "Installation"
 
-#: thonny/plugins/pip_gui.py:1372
+#: thonny/plugins/pip_gui.py:1562
 msgid "Package manager is not available for this interpreter"
 msgstr "Pas de gestionnaire de package disponible pour cet interpréteur"
 
-#: thonny/plugins/pip_gui.py:1385
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
 msgid "Not supported"
 msgstr "Non supporté"
 
-#: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1390
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
 msgid "Not available"
 msgstr "Non disponible"
 
-#: thonny/plugins/pip_gui.py:1391
+#: thonny/plugins/pip_gui.py:1582
 msgid "You need to stop your program before launching the package manager."
 msgstr "Vous devez arrêter vôtre programme avant de lancer le gestionnaire de package."
 
-#: thonny/plugins/shell_config_page.py:64
+#: thonny/plugins/shell_config_page.py:73
 msgid "Open evaluated values in Object inspector"
 msgstr "Ouvrir les valeurs évalués dans l'inspecteur d'objets"
 
-#: thonny/plugins/cpython/__init__.py:370
+#: thonny/plugins/cpython_frontend/cp_front.py:234
 msgid "Python executable"
 msgstr "Exécutable Python"
 
-#: thonny/plugins/cpython/__init__.py:393
+#: thonny/plugins/cpython_frontend/cp_front.py:258
 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! Le button de sélection de fichiers pourrait ne pas pas fonctionner correctement en choisissant un exécutable issue d'un environnement virtuel. Dans ce cas choisissez 'activer' le script au lieu de l'interpréteur (ou entrer directement le chemin dans le champ)"
 
-#: thonny/plugins/cpython_ssh/__init__.py:153
+#: thonny/plugins/cpython_ssh/__init__.py:17
 msgid "Remote Python 3 (SSH)"
 msgstr "Python3 distant (SSH)"
 
-#: thonny/plugins/micropython/__init__.py:284
+#: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
 msgstr "Non connecté"
 
-#: thonny/plugins/micropython/__init__.py:453
-msgid "Advanced options"
-msgstr "Options avancées"
-
-#: thonny/plugins/micropython/__init__.py:460
-msgid "Install or update firmware"
-msgstr "Installer ou mettre à jour le firmware"
-
-#: thonny/plugins/micropython/__init__.py:963
+#: thonny/plugins/micropython/__init__.py:35
 msgid "MicroPython (local)"
 msgstr "MicroPython (local)"
 
-#: thonny/plugins/micropython/__init__.py:973
+#: thonny/plugins/micropython/__init__.py:46
 msgid "MicroPython (SSH)"
 msgstr "MicroPython (SSH)"
 
-#: thonny/plugins/micropython/pip_gui.py:134
-msgid "Module"
-msgstr "Module"
-
-#: thonny/plugins/micropython/pip_gui.py:159
-msgid "Shadowed items (not importable):"
-msgstr "Items cachés (pas importables)"
-
-#: thonny/plugins/micropython/pip_gui.py:208
-msgid "Package is not available at micropython.org. Version at PyPI will be installed."
-msgstr "Le package n'est pas disponible sur micropython.org. La version de PyPi sera installée."
-
-#: 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 a publié la version %s de ce package, c'est celle qui sera installée par défaut."
-
-#: thonny/plugins/micropython/pip_gui.py:245
-msgid "For upgrading simply install the package again."
-msgstr "Pour mettre à jour, installez le package a nouveau."
-
-#: thonny/plugins/micropython/pip_gui.py:248
-msgid "For uninstalling delete corresponding files."
-msgstr "Pour désinstaller supprimer les fichiers correspondants."
-
-#: thonny/plugins/micropython/pip_gui.py:262
-msgid "Scope"
-msgstr "Portée"
-
-#: thonny/plugins/micropython/pip_gui.py:275
-msgid "This dialog lists top-level modules from following directories:\n"
-""
-msgstr "Ce dialogue liste les modules de premier niveau des répertoires suivants:"
-
-#: thonny/plugins/micropython/pip_gui.py:284
-msgid "New packages will be installed to"
-msgstr "Les nouveaux packages seront installés dans"
-
-#: thonny/plugins/micropython/pip_gui.py:292
+#: thonny/plugins/micropython/pip_gui.py:144
 msgid "no absolute lib directory in sys.path"
 msgstr "pas de répertoire lib absolu dans sys.path"
 
-#: thonny/plugins/micropython/uf2dialog.py:40
-msgid "Version to be installed"
-msgstr "Version à installer"
-
-#: thonny/plugins/micropython/uf2dialog.py:48
-msgid "Target device location"
-msgstr "Emplacement du "
-
-#: thonny/plugins/micropython/uf2dialog.py:59
-msgid "Target device model"
-msgstr "Modèle de l'appareil cible"
-
-#: thonny/plugins/micropython/uf2dialog.py:145
-msgid "Please wait"
-msgstr "Veuillez patienter"
-
-#: thonny/plugins/pip_gui.py:67
+#: thonny/plugins/pip_gui.py:71
 msgid "Search on PyPI"
 msgstr "Rechercher sur PyPI"
 
-#: thonny/plugins/pip_gui.py:79
-msgid "Delete selected"
-msgstr "Supprimer l'élément sélectionné"
-
-#: thonny/base_file_browser.py:662
+#: thonny/base_file_browser.py:693
 msgid "Open in Thonny's text editor"
 msgstr "Ouvrir dans l'éditeur de texte de Thonny"
 
-#: thonny/base_file_browser.py:325
+#: thonny/base_file_browser.py:346
 msgid "Storage space on this drive or filesystem"
 msgstr "Espace disque sur ce disque ou système de fichiers"
 
-#: thonny/base_file_browser.py:326
+#: thonny/base_file_browser.py:347
 msgid "total space"
 msgstr "espace total"
 
-#: thonny/base_file_browser.py:328
+#: thonny/base_file_browser.py:349
 msgid "used space"
 msgstr "espace utilisé"
 
-#: thonny/base_file_browser.py:329
+#: thonny/base_file_browser.py:350
 msgid "free space"
 msgstr "espace libre"
 
-#: thonny/base_file_browser.py:336
+#: thonny/base_file_browser.py:357
 msgid "Storage info"
 msgstr "Informations sur le stockage"
 
-#: thonny/plugins/commenting_indenting.py:163
+#: thonny/plugins/commenting_indenting.py:162
 msgid "Replace tabs with spaces"
 msgstr "Remplacer les tabulations par des espaces"
 
-#: thonny/plugins/editor_config_page.py:28
+#: thonny/plugins/editor_config_page.py:33
 msgid "Highlight tab characters"
 msgstr "Mettre en surbrillance les tabulations"
 
-#: thonny/plugins/editor_config_page.py:47
+#: thonny/plugins/editor_config_page.py:68
 msgid "Indent with tab characters (not recommended for Python)"
 msgstr "Indenter avec des tabulations (non recommandé pour Python)"
 
-#: thonny/base_file_browser.py:81 thonny/memory.py:63
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
 msgid "Name"
 msgstr "Nom"
 
-#: thonny/base_file_browser.py:85
+#: thonny/base_file_browser.py:96
 msgid "Size (bytes)"
 msgstr "Taille (octets)"
 
-#: thonny/base_file_browser.py:835
+#: thonny/base_file_browser.py:879
 msgid "Enter name for new directory under\n"
 "%s"
 msgstr "Entrez un nom pour le nouveau dossier dans\n"
 "%s"
 
-#: thonny/base_file_browser.py:858
+#: thonny/base_file_browser.py:902
 msgid "Nothing selected"
 msgstr "Pas de sélection"
 
-#: thonny/base_file_browser.py:858
+#: thonny/base_file_browser.py:902
 msgid "Select an item and try again!"
 msgstr "Sélectionnez un élément et réessayez !"
 
-#: thonny/base_file_browser.py:1105
+#: thonny/base_file_browser.py:1329
 msgid "Open from %s"
 msgstr "Ouvrir à partir de %s"
 
-#: thonny/base_file_browser.py:1108
+#: thonny/base_file_browser.py:1332
 msgid "Save to %s"
 msgstr "Enregistrer sous %s"
 
-#: thonny/base_file_browser.py:1120
+#: thonny/base_file_browser.py:1351
 msgid "File name:"
 msgstr "Nom de fichier :"
 
-#: thonny/memory.py:64 thonny/plugins/object_inspector.py:510
-#: thonny/plugins/object_inspector.py:589
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
 msgid "Value ID"
 msgstr "ID de la valeur"
 
 #: thonny/memory.py:65 thonny/plugins/heap.py:23
-#: thonny/plugins/object_inspector.py:511
-#: thonny/plugins/object_inspector.py:590
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
 msgid "Value"
 msgstr "Valeur"
 
-#: thonny/plugins/backend_config_page.py:257
+#: thonny/plugins/backend_config_page.py:272
 msgid "Save password"
 msgstr "Sauvegarder le mot de passe"
 
-#: thonny/plugins/debugger.py:553
+#: thonny/plugins/debugger.py:557
 msgid "Function call at %s"
 msgstr "Appel de fonction à %s"
 
-#: thonny/plugins/debugger.py:1001
+#: thonny/plugins/debugger.py:1006
 msgid "Local variables"
 msgstr "Variables locales"
 
-#: thonny/plugins/debugger.py:1033
+#: thonny/plugins/debugger.py:1038
 msgid "Function"
 msgstr "Fonction"
 
-#: thonny/plugins/debugger.py:1034
+#: thonny/plugins/debugger.py:1039
 msgid "Location"
 msgstr "Emplacement"
 
-#: thonny/plugins/debugger.py:1110
+#: thonny/plugins/debugger.py:1115
 msgid "If last command raised an exception then this view will show the stacktrace."
 msgstr "Si la dernière commande lève une exception cette fenêtre affichera le stacktrace"
 
@@ -1738,42 +1545,42 @@ msgstr "Si la dernière commande lève une exception cette fenêtre affichera le
 msgid "ID"
 msgstr "ID"
 
-#: thonny/plugins/object_inspector.py:87
+#: thonny/plugins/object_inspector.py:92
 msgid "Data"
 msgstr "Donnée"
 
-#: thonny/plugins/object_inspector.py:88
+#: thonny/plugins/object_inspector.py:93
 msgid "Attributes"
 msgstr "Attributs"
 
-#: thonny/plugins/object_inspector.py:509
+#: thonny/plugins/object_inspector.py:537
 msgid "Index"
 msgstr "Index "
 
 #. I would need some context for this one
-#: thonny/plugins/object_inspector.py:587
+#: thonny/plugins/object_inspector.py:615
 msgid "Key ID"
 msgstr "Identifiant de clé"
 
-#: thonny/plugins/object_inspector.py:588
+#: thonny/plugins/object_inspector.py:616
 msgid "Key"
 msgstr "Clé"
 
-#: thonny/plugins/variables.py:36
+#: thonny/plugins/variables.py:39
 msgid "Back to\n"
 "%s"
 msgstr "Retour vers\n"
 "%s"
 
-#: thonny/plugins/micropython/__init__.py:401
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port or WebREPL"
 msgstr "Port ou WebREPL"
 
-#: thonny/plugins/micropython/__init__.py:518
+#: thonny/plugins/micropython/mp_front.py:599
 msgid "Password"
 msgstr "mot de passe"
 
-#: thonny/plugins/debugger.py:959
+#: thonny/plugins/debugger.py:964
 msgid "Source code"
 msgstr "Code source"
 
@@ -1789,3 +1596,390 @@ msgstr "Boîtes de dialogue de fichier derrière la fenêtre principale"
 msgid "Environment variables (one KEY=VALUE per line)"
 msgstr "Variables d'environnement (une paire clé=valeur par ligne)"
 
+#. However, it is not too rare to see only «Nouveau»
+#: thonny/base_file_browser.py:722
+msgid "New file"
+msgstr "Fichier nouveau"
+
+#: thonny/base_file_browser.py:740
+msgid "Rename"
+msgstr "Renommer"
+
+#: thonny/base_file_browser.py:928
+msgid "Rename '%s'"
+msgstr "Renommer '%s'"
+
+#. At present, the translation is like a "Enter (here) a new name" with "enter" already as conjugated verb.
+#: thonny/base_file_browser.py:928
+msgid "Enter new name"
+msgstr "Saisissez un nouveau nom"
+
+#: thonny/base_file_browser.py:1016
+msgid "Paste failed"
+msgstr "coller échoue"
+
+#: thonny/base_file_browser.py:1016
+msgid "There are conflicting folders"
+msgstr "Il y a des dossiers en conflit"
+
+#: thonny/base_file_browser.py:1144
+msgid "File already exists"
+msgstr "Fichier existe déjà"
+
+#: thonny/base_file_browser.py:1212
+msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
+msgstr "S'il s'agit d'un fichier texte, vous pouvez le configurer pour qu'il s'ouvre dans Thonny en cliquant avec le bouton droit de la souris et en sélectionnant « Configurer ... fichiers »."
+
+#: thonny/editors.py:38
+msgid "Python files"
+msgstr "Fichiers Python"
+
+#: thonny/editors.py:123 thonny/editors.py:189
+msgid "<untitled>"
+msgstr "<sans nom>"
+
+#: thonny/editors.py:150
+msgid "File is gone"
+msgstr "Le fichier a disparu."
+
+#: thonny/editors.py:153
+msgid "Do you want to also close the editor?"
+msgstr "Voulez-vous fermer l'éditeur ?"
+
+#: thonny/editors.py:169
+msgid "External modification"
+msgstr "modification externe"
+
+#: thonny/editors.py:172
+msgid "Do you want to discard current editor content and reload the file from disk?"
+msgstr "Voulez-vous rejeter le contenu actuel de l'éditeur et relire le fichier à partir du disque ?"
+
+#: thonny/editors.py:588
+msgid "Python files usually have .py extension."
+msgstr "Habituellement, les fichiers Python utilisent .py comme extension."
+
+#: thonny/editors.py:590
+msgid "Did you mean '%s'?"
+msgstr "Voulez-vous dire '%s'?"
+
+#: thonny/editors.py:759
+msgid "Move / rename..."
+msgstr "déplacer / renommer"
+
+#: thonny/editors.py:768
+msgid "Go to line..."
+msgstr "Accéder à la ligne..."
+
+#: thonny/editors.py:1010
+msgid "Line number"
+msgstr "Numéro de ligne"
+
+#: thonny/editors.py:1156
+msgid "Do you want to save files before closing?"
+msgstr "Voulez-vous enregistrer les fichiers avant de les fermer ?"
+
+#: thonny/editors.py:1158
+msgid "Do you want to save file before closing?"
+msgstr "Voulez-vous enregistrer le fichier avant de le fermer ?"
+
+#: thonny/editors.py:1161
+msgid "Save On Close"
+msgstr "Enregistrer à la fermeture"
+
+#: thonny/misc_utils.py:539
+msgid "Command not available"
+msgstr "Commande indisponible"
+
+#: thonny/misc_utils.py:540
+msgid "This command is not available if Thonny is run via Flatpak"
+msgstr "Cette commande n'est pas disponible si Thonny est exécuté via Flatpak."
+
+#: thonny/workbench.py:700 thonny/workbench.py:799
+msgid "Support Ukraine"
+msgstr "Soutenez l'Ukraine"
+
+#: thonny/plugins/backend_config_page.py:90
+msgid "Which kind of interpreter should Thonny use for running your code?"
+msgstr "Quel type d'interpréteur Thonny doit-il utiliser pour exécuter votre code ?"
+
+#: thonny/plugins/calltip.py:159
+msgid "Show parameter info"
+msgstr "Afficher l'information sur les paramètres"
+
+#: thonny/plugins/editor_config_page.py:41
+msgid "Automatically show parameter info after typing '('"
+msgstr "Afficher automatiquement les informations sur les paramètres après avoir tapé '('"
+
+#: thonny/plugins/editor_config_page.py:47
+msgid "Automatically propose completions while typing"
+msgstr "Proposer automatiquement des compléments pendant la saisie"
+
+#: thonny/plugins/editor_config_page.py:52
+msgid "Automatically show documentation for completions"
+msgstr "Afficher automatiquement la documentation pour les compléments"
+
+#: thonny/plugins/editor_config_page.py:57
+msgid "Request completions with Tab-key in editors"
+msgstr "Demander des compléments avec la touche Tab dans les éditeurs"
+
+#: thonny/plugins/editor_config_page.py:62
+msgid "Request completions with Tab-key in Shell"
+msgstr "Demander des compléments avec la touche Tab dans le shell"
+
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
+msgid "Problem"
+msgstr "problème"
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Could not find definition"
+msgstr "Impossible de trouver une définition"
+
+#: thonny/plugins/shell_config_page.py:17
+msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
+msgstr "Vider la console avant de lancer un processus nouveau (exécuter, débouger, arrêter/redémarrer, ...)"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:196
+msgid "Thonny's Python"
+msgstr "Python de Thonny"
+
+#: thonny/plugins/micropython/mp_front.py:496
+msgid "Interrupt working program on connect"
+msgstr "Interrompre l'exécution du programme dès la connexion"
+
+#: thonny/plugins/micropython/mp_front.py:504
+msgid "Synchronize device's real time clock"
+msgstr "Synchroniser l'horloge en temps réel d'outil"
+
+#: thonny/plugins/micropython/mp_front.py:510
+msgid "Use local time in real time clock"
+msgstr "Utiliser l'heure locale pour l'horloge en temps réel"
+
+#: thonny/plugins/micropython/mp_front.py:516
+msgid "Restart interpreter before running a script"
+msgstr "redémarrer l'interpréteur avant exécuter le script"
+
+#: thonny/plugins/micropython/pip_gui.py:26
+msgid "This doesn't look like MicroPython/CircuitPython package.\n"
+"Are you sure you want to install it?"
+msgstr "Cela ne ressemble pas au paquet MicroPython/CircuitPython.\n"
+"Êtes-vous sûr de vouloir l'installer ?"
+
+#: thonny/base_file_browser.py:853
+msgid "Moving to Trash"
+msgstr "Déplacer vers la corbeille"
+
+#: thonny/base_file_browser.py:854
+msgid "Move %s to Trash?"
+msgstr "Déplacer %s vers la corbeille ?"
+
+#: thonny/base_file_browser.py:861
+msgid "Moving %s to Trash"
+msgstr "Déplacement de %s vers la corbeille"
+
+#: thonny/base_file_browser.py:666
+msgid "Open in default external app"
+msgstr "Ouvrir dans l'application externe par défaut"
+
+#: thonny/base_file_browser.py:1210
+msgid "Opening remote files in external app is not supported."
+msgstr "L'ouverture de fichiers distants dans une application externe n'est pas prise en charge."
+
+#: thonny/base_file_browser.py:1217
+msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
+msgstr "Si le fichier doit être ouvert dans une application externe, téléchargez-le dans un répertoire local et ouvrez-le de là !"
+
+#: thonny/editors.py:151
+msgid "Looks like '%s' was deleted or moved."
+msgstr "Il semble que '%s' ait été supprimé ou déplacé."
+
+#: thonny/editors.py:170
+msgid "Looks like '%s' was modified outside of the editor."
+msgstr "Il semble que '%s' ait été modifié en dehors de l'éditeur."
+
+#: thonny/plugins/cpython_frontend/cp_front.py:256
+msgid "NB! Thonny only supports Python %s and later"
+msgstr "Note, Thonny ne prend en charge que Python %s et les versions ultérieures"
+
+#: thonny/editors.py:1010
+msgid "Go to line"
+msgstr "Accéder à la ligne"
+
+#: thonny/workbench.py:703
+msgid "Support"
+msgstr "support technique"
+
+#: thonny/editors.py:399 thonny/editors.py:414
+msgid "Could not save"
+msgstr "impossible de l’enregistrer"
+
+#: thonny/plugins/general_config_page.py:135
+msgid "Warning"
+msgstr "Avertissement"
+
+#: thonny/plugins/general_config_page.py:136
+msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
+"Did you intend this?"
+msgstr "Si vous citez la valeur d'une variable d'environnement, les guillemets feront partie de la valeur.\n"
+"C'était votre intention ?"
+
+#: thonny/workbench.py:870
+msgid "Install MicroPython"
+msgstr "installer MicroPython"
+
+#: thonny/workbench.py:874
+msgid "Install CircuitPython"
+msgstr "installer CicuitPython"
+
+#: thonny/plugins/backend_config_page.py:210
+msgid "Make uploaded shebang scripts executable"
+msgstr "Rendre les scripts shebang téléchargés exécutables"
+
+#: thonny/plugins/editor_config_page.py:91
+msgid "Make saved shebang scripts executable"
+msgstr "Rendre les scripts shebang sauvegardés exécutables"
+
+#: thonny/plugins/files.py:224
+msgid "Activate virtual environment"
+msgstr "activer l'environnement virtuel"
+
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
+msgid "Target"
+msgstr "cible"
+
+#: thonny/plugins/pythontutor.py:41
+msgid "Visualize current script at Python Tutor"
+msgstr "visualizer le script curant au Python Tutor"
+
+#: thonny/plugins/todo_view.py:43
+msgid "Line"
+msgstr "ligne"
+
+#: thonny/plugins/todo_view.py:44
+msgid "Info"
+msgstr "info"
+
+#: thonny/plugins/todo_view.py:121
+msgid "No line marked with #todo found"
+msgstr "Aucune ligne n'est marquée par #todo"
+
+#: thonny/plugins/todo_view.py:141
+msgid "TODO"
+msgstr "TODO"
+
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
+msgid "Install or update %s"
+msgstr "Installer ou mettre à jour %s"
+
+#: thonny/plugins/cpython_frontend/__init__.py:24
+msgid "Local Python 3"
+msgstr "Python 3 local"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:266
+msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+msgstr "Vous pouvez également activer un environnement virtuel existant via le menu contextuel du clic droit dans la navigation des fichiers lorsque vous sélectionnez un dossier d'environnement virtuel ou le fichier 'pyveng.cfg' qu'il contient."
+
+#: thonny/plugins/ev3/__init__.py:72
+msgid "Preparations (skip the VS Code part)"
+msgstr "Les préperations (omettre la partie VS Code)"
+
+#: thonny/plugins/ev3/__init__.py:78
+msgid "Default password"
+msgstr "Mot de passe par défaut"
+
+#: thonny/running.py:392
+msgid "Information"
+msgstr "information"
+
+#: thonny/running.py:393
+msgid "For debugging the program must be saved first."
+msgstr "Enregistrez le script avant de le déboguer."
+
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr "'%s' ne semble pas être un fichier texte"
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr "Problème de chargement de fichier"
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr "Le fichier semble être mal encodé.\n"
+"\n"
+"Vérifier qu'il est encodé en UTF-8 ou que l'encoding est clairement indiqué dans le fichier."
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr "Le fichier est ouvert"
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr "Un fichier du même nom est déjà ouvert dans Thonny.\n"
+"\n"
+"Si vous voulez l'enregistrer avec ce nom,\n"
+"fermer d'abord l'éditeur correspondant !"
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr "Accès non autorisé"
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr "Impossible d'écrire dans le fichier ou le dossier sélectionné."
+
+#. La traduction de back-end ne me convient pas, mais je n'ai pas trouvé mieux pour le moment.
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr "La backend n'est pas prête"
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr "Où enregister ?"
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr "Potentiel problème"
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr "Si vous nommez votre script '%s', vous ne serez pas en mesure d'importer le module '%s'"
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr "Êtes-vous sûr de vouloir utiliser ce nom de fichier pour votre script ?"
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr "Accès non autorisé pendant le chargement %s"
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr "Essayer de l'ouvrir avec Fichier => Ouvrir."
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr "Accès non autorisé"
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr "Autoriser l'exécution de programme pas enregistré."
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
+msgstr ""
+
diff --git a/thonny/locale/hu_HU/LC_MESSAGES/thonny.mo b/thonny/locale/hu_HU/LC_MESSAGES/thonny.mo
index a75db99..05892c2 100644
Binary files a/thonny/locale/hu_HU/LC_MESSAGES/thonny.mo and b/thonny/locale/hu_HU/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/hy_AM/LC_MESSAGES/thonny.mo b/thonny/locale/hy_AM/LC_MESSAGES/thonny.mo
index 32fe475..2b35748 100644
Binary files a/thonny/locale/hy_AM/LC_MESSAGES/thonny.mo and b/thonny/locale/hy_AM/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/it_IT/LC_MESSAGES/thonny.mo b/thonny/locale/it_IT/LC_MESSAGES/thonny.mo
index 94f7ded..0d019b3 100644
Binary files a/thonny/locale/it_IT/LC_MESSAGES/thonny.mo and b/thonny/locale/it_IT/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/it_IT/LC_MESSAGES/thonny.po b/thonny/locale/it_IT/LC_MESSAGES/thonny.po
index dfcbbaf..210b1e1 100644
--- a/thonny/locale/it_IT/LC_MESSAGES/thonny.po
+++ b/thonny/locale/it_IT/LC_MESSAGES/thonny.po
@@ -7,69 +7,61 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: it\n"
 
-#: thonny/workbench.py:357
+#: thonny/workbench.py:375
 msgid "File"
 msgstr "File"
 
-#: thonny/workbench.py:358
+#: thonny/workbench.py:376
 msgid "Edit"
 msgstr "Modifica"
 
-#: thonny/workbench.py:359
+#: thonny/workbench.py:377
 msgid "View"
-msgstr "Mostra"
+msgstr "Visualizza"
 
-#: thonny/running.py:122 thonny/workbench.py:360
+#: thonny/running.py:161 thonny/workbench.py:378
 msgid "Run"
 msgstr "Esegui"
 
-#: thonny/workbench.py:361
+#: thonny/workbench.py:379
 msgid "Tools"
 msgstr "Strumenti"
 
-#: thonny/plugins/help/__init__.py:74 thonny/workbench.py:362
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
 msgid "Help"
 msgstr "Aiuto"
 
-#: thonny/plugins/cpython/__init__.py:610
-msgid "Alternative Python 3 interpreter or virtual environment"
-msgstr "Interprete Python 3 alternativo o ambiente virtuale"
-
-#: thonny/plugins/cpython/__init__.py:618
-msgid "A special virtual environment (deprecated)"
-msgstr "Ambiente virtuale speciale (sconsigliato)"
-
-#: thonny/workbench.py:582
+#: thonny/workbench.py:598
 msgid "Exit"
 msgstr "Esci"
 
-#: thonny/workbench.py:609
+#: thonny/workbench.py:625
 msgid "Decrease font size"
-msgstr "Riduci dimensione font"
+msgstr "Diminuisci la dimensione del carattere"
 
-#: thonny/workbench.py:621
+#: thonny/workbench.py:637
 msgid "Focus editor"
 msgstr "Vai all'editor"
 
-#: thonny/workbench.py:630
+#: thonny/workbench.py:646
 msgid "Focus shell"
 msgstr "Vai alla shell"
 
-#: thonny/workbench.py:641
+#: thonny/workbench.py:656
 msgid "Maximize view"
 msgstr "Vista massimizzata"
 
-#: thonny/workbench.py:653
+#: thonny/workbench.py:668
 msgid "Full screen"
 msgstr "Schermo intero"
 
-#: thonny/workbench.py:1377
+#: thonny/workbench.py:1467
 msgid "Program arguments"
 msgstr "Argomenti del programma"
 
-#: thonny/plugins/about.py:28 thonny/plugins/about.py:163
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
 msgid "About Thonny"
-msgstr "Su Thonny"
+msgstr "Informazioni su Thonny"
 
 #: thonny/plugins/about.py:81
 msgid "Made in\n"
@@ -78,14 +70,14 @@ msgid "Made in\n"
 "open-source community,\n"
 "Raspberry Pi Foundation\n"
 "and Cybernetica AS"
-msgstr "Made in\n"
-"University of Tartu, Estonia,\n"
-"con il contributo della \n"
-"comunità open-source,\n"
-"Raspberry Pi Foundation\n"
-"e Cybernetica AS"
-
-#: thonny/plugins/about.py:107
+msgstr "Creato presso\n"
+"Università di Tartu, Estonia,\n"
+"con l'aiuto della\n"
+"comunità open source,\n"
+"Fondazione Raspberry Pi\n"
+"e Cibernetica AS"
+
+#: thonny/plugins/about.py:101
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -94,60 +86,55 @@ msgid "This program comes with\n"
 "for details"
 msgstr "Il programma viene fornito\n"
 "SENZA ALCUNA GARANZIA!\n"
-"E' software libero e può essere \n"
-"ridistribuito a determinate condizioni.\n"
-"Per maggiori dettagli visitate\n"
-"https://opensource.org/licenses/MIT"
+"È un software gratuito e sei il benvenuto\n"
+"per ridistribuirlo a determinate condizioni, vedi https://opensource.org/licenses/MIT\n"
+"per i dettagli"
 
-#: thonny/plugins/about.py:152
+#: thonny/plugins/about.py:142
 msgid "Version history"
 msgstr "Cronologia delle versioni"
 
-#: thonny/plugins/about.py:159
+#: thonny/plugins/about.py:149
 msgid "Report problems"
 msgstr "Segnalazione di problemi"
 
 #: thonny/plugins/assistant_config_page.py:16
 msgid "Open Assistant automatically when program crashes with an exception"
-msgstr "Attiva l'Assistente automaticamente se il programma va in crash per un errore"
+msgstr "Apri automaticamente l'Assistente quando il programma si arresta in modo anomalo con un'eccezione"
 
 #: thonny/plugins/assistant_config_page.py:23
 msgid "Open Assistant automatically when it has warnings for your code"
-msgstr "Attiva l'assistente automaticamente se ci sono allerte sul tuo codice"
+msgstr "Apri automaticamente l'Assistente quando ha avvisi per il codice"
 
 #: thonny/plugins/assistant_config_page.py:30
 msgid "Perform selected Pylint checks"
-msgstr "Esegue i controlli Pylint selezionati"
+msgstr "Esegui i controlli Pylint selezionati"
 
 #: thonny/plugins/assistant_config_page.py:34
 msgid "Perform MyPy checks"
-msgstr "Esegue i controlli MyPy"
+msgstr "Esegui i controlli MyPy"
 
 #: thonny/plugins/assistant_config_page.py:36
 msgid "Disabled checks (one id per line)"
-msgstr "Disattiva i controlli (una id per linea)"
+msgstr "Controlli disabilitati (un id per riga)"
 
-#: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:73
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Assistente"
 
-#: thonny/plugins/autocomplete.py:333
+#: thonny/plugins/autocomplete.py:529
 msgid "Auto-complete"
 msgstr "Auto-completamento"
 
-#: thonny/plugins/backend_config_page.py:84
-msgid "Which interpreter or device should Thonny use for running your code?"
-msgstr "Quale interprete o dispositivo deve essere usato da Thonny per eseguire il tuo codice"
-
-#: thonny/plugins/backend_config_page.py:320
+#: thonny/plugins/backend_config_page.py:335
 msgid "Interpreter"
 msgstr "Interprete"
 
-#: thonny/plugins/birdseye_frontend.py:54
+#: thonny/plugins/birdseye_frontend.py:55
 msgid "About Birdseye"
-msgstr "Su Birdseye"
+msgstr "Informazioni su Birdseye"
 
-#: thonny/plugins/birdseye_frontend.py:55
+#: thonny/plugins/birdseye_frontend.py:56
 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?"
@@ -155,19 +142,19 @@ msgstr "Birdseye è un debugger Python che deve essere installato separatamente.
 "\n"
 "Vuoi aprire la pagina di aiuto e saperne di più?"
 
-#: thonny/plugins/birdseye_frontend.py:83
+#: thonny/plugins/birdseye_frontend.py:84
 msgid "Debug current script (birdseye)"
-msgstr "Esegue il debug dello script attuale (birdseye)"
+msgstr "Esegui il debug dello script corrente (birdseye)"
 
-#: thonny/plugins/commenting_indenting.py:172
+#: thonny/plugins/commenting_indenting.py:171
 msgid "Toggle comment"
 msgstr "Attiva commenti"
 
-#: thonny/plugins/commenting_indenting.py:182
+#: thonny/plugins/commenting_indenting.py:181
 msgid "Comment out"
 msgstr "Commenta"
 
-#: thonny/plugins/commenting_indenting.py:192
+#: thonny/plugins/commenting_indenting.py:191
 msgid "Uncomment"
 msgstr "Decommenta"
 
@@ -181,15 +168,18 @@ msgstr "Annulla"
 msgid "Redo"
 msgstr "Ripristina"
 
-#: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2176
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
 msgid "Cut"
 msgstr "Taglia"
 
-#: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2177
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
 msgid "Copy"
 msgstr "Copia"
 
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2178
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
 msgid "Paste"
 msgstr "Incolla"
 
@@ -197,127 +187,119 @@ msgstr "Incolla"
 msgid "Select all"
 msgstr "Seleziona tutto"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1398
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
 msgid "Run to cursor"
 msgstr "Esegui fino al cursore"
 
-#: thonny/plugins/debugger.py:980
+#: thonny/plugins/debugger.py:985
 msgid "Can't close yet"
 msgstr "Impossibile chiudere"
 
-#: thonny/plugins/debugger.py:981
+#: thonny/plugins/debugger.py:986
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr "Usa il comando \"Stop\" per annullare il debugging"
 
 #: thonny/plugins/dock_user_windows_frontend.py:28
 msgid "Dock user windows"
-msgstr "Disponi le finestre utente"
+msgstr "Ancora le finestre dell'utente"
 
-#: thonny/plugins/editor_config_page.py:15
+#: thonny/plugins/editor_config_page.py:20
 msgid "Highlight matching names"
 msgstr "Evidenzia i nomi che corrispondono"
 
-#: thonny/plugins/editor_config_page.py:21
+#: thonny/plugins/editor_config_page.py:26
 msgid "Highlight local variables"
 msgstr "Evidenzia le variabili locali"
 
-#: thonny/plugins/editor_config_page.py:26
+#: thonny/plugins/editor_config_page.py:31
 msgid "Highlight parentheses"
 msgstr "Evidenzia le parentesi"
 
-#: thonny/plugins/editor_config_page.py:27
+#: thonny/plugins/editor_config_page.py:32
 msgid "Highlight syntax elements"
 msgstr "Evidenzia gli elementi di sintassi"
 
-#: thonny/plugins/editor_config_page.py:31
+#: thonny/plugins/editor_config_page.py:36
 msgid "Highlight current line (requires reopening the editor)"
 msgstr "Evidenzia la riga corrente (richeide il riavvio dell'editor)"
 
-#: thonny/plugins/editor_config_page.py:36
-msgid "Allow code completion with Tab-key in editors"
-msgstr "Permette il completamento del codice con il tasto Tab"
-
-#: thonny/plugins/editor_config_page.py:42
-msgid "Allow code completion with Tab-key in Shell"
-msgstr "Permette il completamento del codice con il tasto Tab nella shell"
-
-#: thonny/plugins/editor_config_page.py:51
+#: thonny/plugins/editor_config_page.py:73
 msgid "Show line numbers"
 msgstr "Mostra i numeri di riga"
 
-#: thonny/plugins/editor_config_page.py:54
+#: thonny/plugins/editor_config_page.py:76
 msgid "Recommended maximum line length\n"
 "(Set to 0 to turn off margin line)"
-msgstr "Massima lunghezza di linea raccomandata\n"
-"(0 per eliminare i margini di linea)"
+msgstr "Lunghezza massima consigliata della linea\n"
+"(0 per disattivare la linea di margine)"
 
-#: thonny/plugins/editor_config_page.py:75
+#: thonny/plugins/editor_config_page.py:104
 msgid "Editor"
 msgstr "Editor"
 
-#: thonny/plugins/event_logging.py:206
+#: thonny/plugins/event_logging.py:207
 msgid "Export usage logs..."
-msgstr "Esporta i log d'uso..."
+msgstr "Esporta registri di utilizzo..."
 
 #: thonny/plugins/event_view.py:39
 msgid "Events"
 msgstr "Eventi"
 
-#: thonny/plugins/files.py:551
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "File"
 
-#: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
 msgid "Find & Replace"
-msgstr "Trova & Sostituisci"
+msgstr "Trova e sostituisci"
 
-#: thonny/plugins/find_replace.py:63
+#: thonny/plugins/find_replace.py:66
 msgid "Find:"
 msgstr "Trova:"
 
-#: thonny/plugins/find_replace.py:74
+#: thonny/plugins/find_replace.py:90
 msgid "Replace with:"
 msgstr "Sostituisci con:"
 
-#: thonny/plugins/find_replace.py:92
+#: thonny/plugins/find_replace.py:108
 msgid "Case sensitive"
-msgstr "Case sensitive"
+msgstr "MAIUSCOLO/minuscolo"
 
-#: thonny/plugins/find_replace.py:99
+#: thonny/plugins/find_replace.py:115
 msgid "Up"
 msgstr "Su"
 
-#: thonny/plugins/find_replace.py:103
+#: thonny/plugins/find_replace.py:119
 msgid "Down"
 msgstr "Giù"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:128
 msgid "Find"
 msgstr "Trova"
 
-#: thonny/plugins/find_replace.py:122
+#: thonny/plugins/find_replace.py:138
 msgid "Replace"
 msgstr "Sostituisci"
 
-#: thonny/plugins/find_replace.py:130
+#: thonny/plugins/find_replace.py:146
 msgid "Replace+Find"
-msgstr "Sostituisci+Trova"
+msgstr "Sostituisci e trova"
 
-#: thonny/plugins/find_replace.py:140
+#: thonny/plugins/find_replace.py:156
 msgid "Replace all"
 msgstr "Sostituisci tutto"
 
-#: thonny/plugins/find_replace.py:236
+#: thonny/plugins/find_replace.py:254
 msgid "Enter string to be replaced."
 msgstr "Immetti la stringa da sostituire."
 
-#: thonny/plugins/find_replace.py:320
+#: thonny/plugins/find_replace.py:339
 msgid "The specified text was not found!"
 msgstr "Il testo specificato non è stato trovato!"
 
 #: thonny/plugins/general_config_page.py:15
 msgid "Allow only single Thonny instance"
-msgstr "Permetti solo una singola istanza di Thonny"
+msgstr "Consenti solo una singola istanza di Thonny"
 
 #: thonny/plugins/general_config_page.py:22
 msgid "Reopen all files from previous session"
@@ -351,325 +333,295 @@ msgid "This box is meant for your working notes -- assignment instructions, code
 "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 "Questo riquadro serve per le tue note di lavoro -- istruzioni di assegnazione, pezzi di codice, qualunque cosa.\n"
+msgstr "Questo riquadro serve per le tue note di lavoro -- istruzioni di assegnazione, frammenti di codice, qualunque cosa.\n"
 "\n"
-"Qualunque cosa sarà salvata automaticamente e ricaricata la prossima volat che aprirai Thonny.\n"
+"Il tutto verrà salvato automaticamente e caricato quando aprirai Thonny la prossima volta.\n"
 "\n"
-"Puoi cancellare questo testo per fare spazio alle tue note."
+"Sentiti libero di cancellare questo testo per fare spazio alle tue note."
 
 #: thonny/plugins/notes.py:63
 msgid "Notes"
 msgstr "Note"
 
-#: thonny/plugins/object_inspector.py:111
+#: thonny/plugins/object_inspector.py:116
 msgid "Previous object"
 msgstr "Oggetto precedente"
 
-#: thonny/plugins/object_inspector.py:114
+#: thonny/plugins/object_inspector.py:119
 msgid "Next object"
-msgstr "Prossimo oggetto"
+msgstr "Oggetto successivo"
 
-#: thonny/plugins/object_inspector.py:704
+#: thonny/plugins/object_inspector.py:732
 msgid "Object inspector"
 msgstr "Analizzatore di oggetti"
 
-#: thonny/plugins/outline.py:138
+#: thonny/plugins/outline.py:148
 msgid "Outline"
-msgstr ""
+msgstr "Struttura"
 
 #: thonny/plugins/pgzero_frontend.py:27
 msgid "Pygame Zero mode"
 msgstr "Modalità Pygame Zero"
 
-#: thonny/plugins/pip_gui.py:78
-msgid "Find package from PyPI"
-msgstr "Trova una pacchetto PyPl"
-
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:80
 msgid "Uninstall"
 msgstr "Disinstalla"
 
-#: thonny/editors.py:587 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448
-#: thonny/ui_utils.py:1755 thonny/workdlg.py:155
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
 msgid "Close"
 msgstr "Chiudi"
 
-#: thonny/plugins/pip_gui.py:347
+#: thonny/plugins/pip_gui.py:397
 msgid "Click "
 msgstr "Clicca "
 
-#: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382
+#: thonny/plugins/pip_gui.py:398 thonny/plugins/pip_gui.py:409
 msgid "here"
 msgstr "qui"
 
-#: thonny/plugins/pip_gui.py:73
+#: thonny/plugins/pip_gui.py:77
 msgid "Upgrade"
 msgstr "Aggiorna"
 
-#: thonny/plugins/esp/__init__.py:365
-#: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
 msgid "Install"
 msgstr "Installa"
 
-#: thonny/plugins/pip_gui.py:491
+#: thonny/plugins/pip_gui.py:570
 msgid "Could not find the package from PyPI."
-msgstr "Impossibile trovare il pacchetto in PyPl"
+msgstr "Impossibile trovare il pacchetto da PyPI."
 
-#: thonny/plugins/pip_gui.py:511
+#: thonny/plugins/pip_gui.py:592
 msgid "Latest stable version"
 msgstr "Ultima versione stabile"
 
-#: thonny/plugins/pip_gui.py:513
+#: thonny/plugins/pip_gui.py:594
 msgid "Latest version"
 msgstr "Ultima versione"
 
-#: thonny/plugins/pip_gui.py:514
+#: thonny/plugins/pip_gui.py:596
 msgid "Summary"
 msgstr "Indice"
 
-#: thonny/plugins/pip_gui.py:515
+#: thonny/plugins/pip_gui.py:598
 msgid "Author"
 msgstr "Autore"
 
-#: thonny/plugins/pip_gui.py:516
+#: thonny/plugins/pip_gui.py:602
 msgid "Homepage"
-msgstr "Pagine Home"
+msgstr "Homepage"
 
-#: thonny/plugins/pip_gui.py:518
+#: thonny/plugins/pip_gui.py:604
 msgid "Bugtracker"
 msgstr "Bugtracker"
 
-#: thonny/plugins/pip_gui.py:520
+#: thonny/plugins/pip_gui.py:606
 msgid "Documentation"
 msgstr "Documentazione"
 
-#: thonny/plugins/pip_gui.py:522
+#: thonny/plugins/pip_gui.py:608
 msgid "PyPI page"
-msgstr "Pagina PyPl"
+msgstr "Pagina PyPI"
 
-#: thonny/plugins/pip_gui.py:526
+#: thonny/plugins/pip_gui.py:648
 msgid "Requires"
 msgstr "Richiede"
 
-#: thonny/plugins/pip_gui.py:652
+#: thonny/plugins/pip_gui.py:802
 msgid "Really uninstall?"
 msgstr "Vuoi veramente disinstallare?"
 
-#: thonny/plugins/pip_gui.py:657
+#: thonny/plugins/pip_gui.py:807
 msgid "Are you sure you want to uninstall it?"
-msgstr "Sei sicuro di voler disinstallare?"
+msgstr "Sei sicuro di volerlo disinstallare?"
 
-#: thonny/plugins/variables.py:19
+#: thonny/plugins/variables.py:22
 msgid "Back to\n"
 "current frame"
-msgstr "Torna al riquadro corrente"
+msgstr "Torna al\n"
+"riquadro attuale"
 
-#: thonny/plugins/variables.py:73 thonny/plugins/variables.py:75
-#: thonny/plugins/variables.py:138
+#: thonny/plugins/variables.py:80 thonny/plugins/variables.py:82
+#: thonny/plugins/variables.py:145
 msgid "Variables"
 msgstr "Variabili"
 
-#: thonny/base_file_browser.py:1313
+#: thonny/base_file_browser.py:1576
 msgid "This computer"
 msgstr "Questo computer"
 
-#: thonny/base_file_browser.py:618
+#: thonny/base_file_browser.py:648
 msgid "Refresh"
 msgstr "Aggiorna"
 
-#: thonny/base_file_browser.py:631
+#: thonny/base_file_browser.py:657
 msgid "Focus into"
-msgstr ""
+msgstr "Concentra su"
 
-#: thonny/base_file_browser.py:1164
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
 msgid "Error"
 msgstr "Errore"
 
-#: thonny/base_file_browser.py:1164
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
 msgid "You need to select a file!"
 msgstr "Devi selezionare un file!"
 
-#: thonny/base_file_browser.py:1168
+#: thonny/base_file_browser.py:1427
 msgid "Overwrite?"
 msgstr "Sovrascrivere?"
 
-#: thonny/base_file_browser.py:1168
+#: thonny/base_file_browser.py:1427
 msgid "Do you want to overwrite '%s' ?"
 msgstr "Vuoi sovrascrivere '%s'?"
 
-#: thonny/editors.py:552 thonny/editors.py:554
+#: thonny/editors.py:658 thonny/editors.py:660
 msgid "New"
 msgstr "Nuovo"
 
-#: thonny/editors.py:565
+#: thonny/editors.py:671
 msgid "Open..."
 msgstr "Apri..."
 
-#: thonny/editors.py:567
+#: thonny/editors.py:673
 msgid "Load"
 msgstr "Carica"
 
-#: thonny/editors.py:576
+#: thonny/editors.py:682
 msgid "Recent files"
 msgstr "File recenti"
 
-#: thonny/editors.py:598 thonny/ui_utils.py:450
+#: thonny/editors.py:704 thonny/ui_utils.py:498
 msgid "Close all"
 msgstr "Chiudi tutto"
 
-#: thonny/editors.py:608 thonny/editors.py:610
+#: thonny/editors.py:714 thonny/editors.py:716
 msgid "Save"
 msgstr "Salva"
 
-#: thonny/editors.py:633
+#: thonny/editors.py:739
 msgid "Save as..."
 msgstr "Salva come..."
 
-#: thonny/editors.py:644
+#: thonny/editors.py:750
 msgid "Save copy..."
 msgstr "Salva una copia..."
 
-#: thonny/editors.py:653
-msgid "Rename..."
-msgstr "Rinomina..."
-
-#: thonny/config_ui.py:19
+#: thonny/config_ui.py:18
 msgid "Thonny options"
 msgstr "Ozioni di Thonny"
 
-#: thonny/running.py:121
+#: thonny/running.py:160
 msgid "Run current script"
 msgstr "Esegui lo script corrente"
 
-#: thonny/running.py:152
+#: thonny/running.py:191
 msgid "Run current script in terminal"
 msgstr "Esegui lo script corrente nel terminale"
 
-#: thonny/running.py:165
+#: thonny/running.py:204
 msgid "Stop/Restart backend"
 msgstr "Ferma/Riavvia il backend"
 
-#: thonny/running.py:166
+#: thonny/running.py:205
 msgid "Stop"
 msgstr "Ferma"
 
-#: thonny/running.py:177
+#: thonny/running.py:216
 msgid "Interrupt execution"
 msgstr "Interrompi l'esecuzione"
 
-#: thonny/running.py:190
+#: thonny/running.py:229
 msgid "Send EOF / Soft reboot"
-msgstr "Invia un EOF / riavvio soft"
+msgstr "Invia un EOF/Riavvio soft"
 
-#: thonny/running.py:201
+#: thonny/running.py:240
 msgid "Disconnect"
 msgstr "Disconnetti"
 
-#: thonny/running_config_page.py:23
-msgid "Known interpreters"
-msgstr "Interpreti esistenti"
-
-#: thonny/running_config_page.py:36
-msgid "Your interpreter isn't in the list?"
-msgstr "Il tuo interprete non è nella lista?"
-
-#: thonny/plugins/cpython/__init__.py:391
-msgid "NB! Thonny only supports Python 3.5 and later"
-msgstr "NB! Thonny supporta solo Python 3.5 o successivi"
-
-#: thonny/running_config_page.py:56
-msgid "Create new virtual environment"
-msgstr "Crea un nuovo ambiente virtuale"
-
-#: thonny/running_config_page.py:59
-msgid "Select existing or create a new empty directory"
-msgstr "Seleziona uan directory esistente o creane una nuova"
-
-#: thonny/plugins/cpython/__init__.py:419
+#: thonny/plugins/cpython_frontend/cp_front.py:295
 msgid "Python interpreters"
-msgstr "Interprete Python"
+msgstr "Interpreti Python"
 
-#: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696
-#: thonny/plugins/pip_gui.py:709
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
 msgid "all files"
 msgstr "tutti i file"
 
-#: thonny/plugins/cpython/__init__.py:442
+#: thonny/plugins/cpython_frontend/cp_front.py:324
 msgid "Select empty directory for new virtual environment"
 msgstr "Seleziona una directory vuota per un nuovo ambiente virtuale"
 
-#: thonny/plugins/cpython/__init__.py:449
+#: thonny/plugins/cpython_frontend/cp_front.py:331
 msgid "Bad directory"
-msgstr "Directory errata"
+msgstr "Directory non valida"
 
-#: thonny/plugins/cpython/__init__.py:450
+#: thonny/plugins/cpython_frontend/cp_front.py:332
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "La directory selezionata non è vuota.\n"
 "Selezionane un'altra o annulla."
 
-#: thonny/plugins/cpython/__init__.py:467
+#: thonny/plugins/cpython_frontend/cp_front.py:349
 msgid "Creating virtual environment"
 msgstr "Sto creando un ambiente virtuale"
 
-#: thonny/shell.py:83
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "Pulisci la shell"
 
-#: thonny/shell.py:138
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "Plotter"
 
-#: thonny/shell.py:269
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "Pulisci"
 
-#: thonny/shell.py:282
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "Mostra il plotter"
 
-#: thonny/shell.py:1572
+#: thonny/shell.py:1660
 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 "Per raggioni di efficenza, la shell non mostra le righe molto lunghe\n"
 "completamente (vedi Strumenti => Opzioni => Shell).\n"
 "Qui puoi interagire con il frammento di testo originale."
 
-#: thonny/shell.py:1583
+#: thonny/shell.py:1671
 msgid "Wrap text (may be slow)"
 msgstr "A capo automatico (può essere lento)"
 
-#: thonny/ui_utils.py:1750
+#: thonny/ui_utils.py:1879
 msgid "Copy to clipboard"
-msgstr "Copia nella clipboard"
+msgstr "Copia negli appunti"
 
-#: thonny/shell.py:1431
-msgid "Expand in Shell"
-msgstr "Espande nella Shell"
-
-#: thonny/shell.py:1625
+#: thonny/shell.py:1713
 msgid "Squeezed text (%d characters)"
-msgstr "Testo compresso (%d caratteri)"
+msgstr "Testo schiacciato (%d caratteri)"
 
-#: thonny/shell.py:1794
+#: thonny/shell.py:1883
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
-msgstr "Il plotter visualizza una serie\n"
-"di numeri stampati nella Shell."
+msgstr "Il plotter visualizza serie di\n"
+"numeri stampati nella Shell."
 
-#: thonny/shell.py:1796
+#: thonny/shell.py:1885
 msgid "See Help for details."
 msgstr "Vedi Aiuto per i dettagli."
 
-#: thonny/ui_utils.py:449
+#: thonny/ui_utils.py:497
 msgid "Close others"
 msgstr "Chiudi le altre schede"
 
-#: thonny/ui_utils.py:1606
+#: thonny/ui_utils.py:1734
 msgid "Copying"
 msgstr "Sto copiando"
 
-#: thonny/ui_utils.py:1609
+#: thonny/ui_utils.py:1737
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -679,87 +631,65 @@ msgstr "Sto copiando\n"
 "su\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
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
 msgid "Cancel"
 msgstr "Annulla"
 
-#: 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
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
 msgid "OK"
 msgstr "OK"
 
-#: thonny/ui_utils.py:1783
-msgid "Cancel the process?"
-msgstr "Annulla il processo?"
-
-#: thonny/ui_utils.py:1784
-msgid "The process is still running.\n"
-"Are you sure you want to cancel?"
-msgstr "Il processo sta ancora girando.\n"
-"Sei sicuro di volerlo annuallare?"
-
-#: thonny/ui_utils.py:2182
+#: thonny/ui_utils.py:2345
 msgid "Select All"
 msgstr "Seleziona tutto"
 
-#: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:158
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:164
 msgid "Shell"
 msgstr "Shell"
 
-#: thonny/plugins/cpython/__init__.py:602
-msgid "The same interpreter which runs Thonny (default)"
-msgstr "Lo stesso interprete che gira su Thonny (default)"
-
-#: thonny/plugins/cpython/__init__.py:350
-msgid "This virtual environment is automatically maintained by Thonny.\n"
-""
-msgstr "Questo ambiente è mantenuto automaticamente da Thonny."
-
-#: thonny/plugins/cpython/__init__.py:351
-msgid "Location: "
-msgstr "Posizione: "
-
-#: thonny/workbench.py:592
+#: thonny/workbench.py:608
 msgid "Options..."
 msgstr "Opzioni..."
 
-#: thonny/workbench.py:599
+#: thonny/workbench.py:615
 msgid "Increase font size"
-msgstr "Aumenta la dimensione del font"
+msgstr "Aumenta la dimensione del carattere"
 
-#: thonny/workbench.py:664
+#: thonny/workbench.py:679
 msgid "Change font size"
-msgstr "Cambia la dimensione del font"
+msgstr "Cambia la dimensione del carattere"
 
-#: thonny/workbench.py:665
+#: thonny/workbench.py:680
 msgid "Zoom"
 msgstr "Zoom"
 
-#: thonny/workbench.py:674
+#: thonny/workbench.py:689
 msgid "Exit Thonny"
 msgstr "Esci da Thonny"
 
-#: thonny/workbench.py:677
+#: thonny/workbench.py:692
 msgid "Quit"
 msgstr "Chiudi"
 
-#: thonny/workbench.py:1181 thonny/workbench.py:1189
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
 msgid "Overwriting theme '%s'"
 msgstr "Sovrascrivi il tema '%s'"
 
-#: thonny/workbench.py:1348
+#: thonny/workbench.py:1438
 msgid "Program arguments:"
 msgstr "Argomenti del programma:"
 
-#: thonny/workbench.py:1402
+#: thonny/workbench.py:1492
 msgid "Regular mode"
-msgstr ""
+msgstr "Modalitá regolare"
 
-#: thonny/workbench.py:1403
+#: thonny/workbench.py:1493
 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.)"
@@ -768,81 +698,77 @@ msgstr "La configurazione è stata aggiornata. Riavvia Thonny per\n"
 "\n"
 "(Vedi 'Strumenti → Opzioni → Generale' se ci ripensi.)"
 
-#: thonny/plugins/ast_view.py:210
+#: thonny/plugins/ast_view.py:211
 msgid "Program tree"
 msgstr "Albero del programma"
 
-#: thonny/plugins/backend_config_page.py:323
-msgid "Select interpreter"
-msgstr "Seleziona l'interprete"
-
-#: thonny/plugins/debugger.py:1280
+#: thonny/plugins/debugger.py:1284
 msgid "Resume"
 msgstr "Riprendi"
 
-#: thonny/plugins/debugger.py:1296
+#: thonny/plugins/debugger.py:1300
 msgid "Run / resume"
-msgstr "Esegui / riprendi"
+msgstr "Esegui/Riprendi"
 
-#: thonny/plugins/debugger.py:1311
+#: thonny/plugins/debugger.py:1315
 msgid "Debug current script"
 msgstr "Debug dello script corrente"
 
-#: thonny/plugins/debugger.py:1313
+#: thonny/plugins/debugger.py:1317
 msgid "Debug"
 msgstr "Debug"
 
-#: thonny/plugins/debugger.py:1324
+#: thonny/plugins/debugger.py:1328
 msgid "Debug current script (nicer)"
 msgstr "Debug dello script corrente (più bello)"
 
-#: thonny/plugins/debugger.py:1336
+#: thonny/plugins/debugger.py:1340
 msgid "Debug current script (faster)"
 msgstr "Debug dello script corrente (più veloce)"
 
-#: thonny/plugins/debugger.py:1347
+#: thonny/plugins/debugger.py:1351
 msgid "Step over"
-msgstr "Step over"
+msgstr "Passo sopra"
 
-#: thonny/plugins/debugger.py:1349
+#: thonny/plugins/debugger.py:1353
 msgid "Over"
-msgstr ""
+msgstr "Sopra"
 
-#: thonny/plugins/debugger.py:1360
+#: thonny/plugins/debugger.py:1364
 msgid "Step into"
-msgstr "Step into"
+msgstr "Passo dentro"
 
-#: thonny/plugins/debugger.py:1362
+#: thonny/plugins/debugger.py:1366
 msgid "Into"
-msgstr ""
+msgstr "Dentro"
 
-#: thonny/plugins/debugger.py:1373
+#: thonny/plugins/debugger.py:1377
 msgid "Step out"
-msgstr "Step out"
+msgstr "Passo fuori"
 
-#: thonny/plugins/debugger.py:1375
+#: thonny/plugins/debugger.py:1379
 msgid "Out"
-msgstr ""
+msgstr "Fuori"
 
-#: thonny/plugins/debugger.py:1410
+#: thonny/plugins/debugger.py:1414
 msgid "Step back"
 msgstr "Passo indietro"
 
-#: thonny/plugins/debugger.py:1412
+#: thonny/plugins/debugger.py:1416
 msgid "Back"
 msgstr "Indietro"
 
-#: thonny/plugins/debugger.py:1418
+#: thonny/plugins/debugger.py:1422
 msgid "Stack"
 msgstr "Stack"
 
-#: thonny/plugins/debugger.py:1419
+#: thonny/plugins/debugger.py:1423
 msgid "Exception"
 msgstr "Eccezione"
 
 #: thonny/plugins/general_config_page.py:18
 msgid "Log program usage events"
-msgstr "Registra un log degli eventi di utilizzo del programma"
+msgstr "Registra gli eventi di utilizzo del programma"
 
 #: thonny/plugins/general_config_page.py:43
 msgid "Debug mode (provides more detailed diagnostic logs)"
@@ -856,125 +782,110 @@ msgstr "Modalità UI"
 msgid "UI scaling factor"
 msgstr "Fattore di scala UI"
 
-#: thonny/plugins/general_config_page.py:108
+#: thonny/plugins/general_config_page.py:114
 msgid "NB! Restart Thonny after changing these options!"
 msgstr "NB! Riavvia Thonny dopo aver cambiato queste opzioni!"
 
-#: thonny/plugins/general_config_page.py:129
+#: thonny/plugins/general_config_page.py:148
 msgid "General"
 msgstr "Generale"
 
-#: thonny/plugins/pip_gui.py:129
+#: thonny/plugins/pip_gui.py:142
 msgid "INSTALL"
-msgstr ""
+msgstr "INSTALLA"
 
-#: thonny/plugins/pip_gui.py:365
+#: thonny/plugins/pip_gui.py:367
 msgid "Browse the packages"
 msgstr "Sfoglia i pacchetti"
 
-#: thonny/plugins/pip_gui.py:368
+#: thonny/plugins/pip_gui.py:370
 msgid "With current interpreter you can only browse the packages here.\n"
 "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling."
-msgstr "Con l'interprete corrente puoi solo visualizzare i pacchetti. Utilizza 'Strumenti --> Apri la shell di sistema...' per installarli, aggiornarli o disinstallarli."
+msgstr "Con l'interprete corrente puoi solo sfogliare i pacchetti qui.\n"
+"Utilizza 'Strumenti --> Apri la shell di sistema...' per installarli, aggiornarli o disinstallarli."
 
-#: thonny/plugins/pip_gui.py:376
+#: thonny/plugins/pip_gui.py:378
 msgid "Packages' directory"
 msgstr "Directory dei pacchetti"
 
-#: thonny/plugins/pip_gui.py:333
+#: thonny/plugins/pip_gui.py:382
 msgid "Install from PyPI"
 msgstr "Installa da PyPI"
 
-#: thonny/plugins/pip_gui.py:336
+#: thonny/plugins/pip_gui.py:385
 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 "Se non sai dove prendere i pacchetti, allora dovresti cercare nell'Indice dei Pacchetti Python. Inizia inserendo il nome del pacchetto nella casella di ricerca e premendo INVIO."
+msgstr "Se non sai dove prendere i pacchetti, allora dovresti cercare nell'Indice dei Pacchetti Python. Inizia inserendo il nome del pacchetto nella casella di ricerca e premi INVIO."
 
-#: thonny/plugins/pip_gui.py:352
+#: thonny/plugins/pip_gui.py:402
 msgid "to locate requirements.txt file and install the packages specified in it."
-msgstr "per cercare il file requirements.txt e installare i pacchetti specificati in esso"
+msgstr "per individuare il file requirements.txt e installare i pacchetti specificati in esso."
 
-#: thonny/plugins/pip_gui.py:381
+#: thonny/plugins/pip_gui.py:408
 msgid "Click"
 msgstr "Clicca"
 
-#: thonny/plugins/pip_gui.py:386
+#: thonny/plugins/pip_gui.py:413
 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
-msgstr "Per cercare e installare il package file (solitamente con estensione .whl, tar.gz, .zip)"
+msgstr "per individuare e installare il file del pacchetto (di solito con estensione .whl, .tar.gz o .zip)."
 
-#: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393
+#: thonny/plugins/pip_gui.py:420
 msgid "Upgrade or uninstall"
 msgstr "Aggiorna o installa"
 
-#: thonny/plugins/pip_gui.py:395
+#: thonny/plugins/pip_gui.py:422
 msgid "Start by selecting the package from the left."
-msgstr "Inizia selezioando un pacchetto a sinistra."
-
-#: thonny/plugins/pip_gui.py:399
-msgid "Target:"
-msgstr ""
-
-#: thonny/plugins/pip_gui.py:401
-msgid "virtual environment"
-msgstr "ambiente virtuale"
-
-#: thonny/plugins/pip_gui.py:403
-msgid "user site packages"
-msgstr ""
+msgstr "Inizia selezionando il pacchetto da sinistra."
 
-#: thonny/plugins/pip_gui.py:407
+#: thonny/plugins/pip_gui.py:430
 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
-msgstr "Questa finestra elenca tutti i pacchetti disponibili, ma permette l'aggiornamento e la disinstallazione solo dei pacchetti da"
+msgstr "Questa finestra di dialogo elenca tutti i pacchetti disponibili, ma consente l'aggiornamento e la disinstallazione solo dei pacchetti da"
 
-#: thonny/plugins/pip_gui.py:417
+#: thonny/plugins/pip_gui.py:440
 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means."
-msgstr "Anche i nuovi pacchetti verranno installati in questa cartella. Altre locazioni devono essere gestite con modalità alternative."
+msgstr "Anche i nuovi pacchetti verranno installati in questa directory. Altre sedi devono essere gestite con mezzi alternativi."
 
-#: thonny/plugins/pip_gui.py:441
+#: thonny/plugins/pip_gui.py:493
 msgid "Installed version:"
 msgstr "Versione installata:"
 
-#: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443
+#: thonny/plugins/pip_gui.py:495
 msgid "Installed to:"
 msgstr "Installa su:"
 
-#: thonny/plugins/pip_gui.py:494
+#: thonny/plugins/pip_gui.py:573
 msgid "Please check your spelling!"
 msgstr "Per favore controlla lo spelling!"
 
-#: thonny/plugins/pip_gui.py:512
-msgid "You need to enter"
-msgstr "Devi inserire"
-
-#: thonny/plugins/pip_gui.py:498
+#: thonny/plugins/pip_gui.py:577
 msgid "Could not find the package info from PyPI."
-msgstr "Impossibile trovare il pacchetto in PyPl"
+msgstr "Impossibile trovare le informazioni sul pacchetto da PyPI."
 
-#: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1200
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
 msgid "Error code:"
 msgstr "Codice di errore:"
 
-#: thonny/plugins/pip_gui.py:601
+#: thonny/plugins/pip_gui.py:748
 msgid "Can't find package name from the list:"
-msgstr "Impossibile trovare il nome del pacchetto nella lista:"
+msgstr "Impossibile trovare il nome del pacchetto dall'elenco:"
 
-#: thonny/plugins/pip_gui.py:653
+#: thonny/plugins/pip_gui.py:803
 msgid "Package '{}' is required for installing and uninstalling other packages."
-msgstr "Il pacchetto '{}' è necessario per installare e disinstallare altri\n"
-"pacchetti."
+msgstr "Il pacchetto '{}' è necessario per l'installazione e la disinstallazione di altri pacchetti."
 
-#: thonny/plugins/pip_gui.py:696
+#: thonny/plugins/pip_gui.py:848
 msgid "Package"
 msgstr "Pacchetto"
 
-#: thonny/plugins/pip_gui.py:796
+#: thonny/plugins/pip_gui.py:960
 msgid "Manage packages for %s"
-msgstr "Gestisci pacchetti per %s"
+msgstr "Gestisci i pacchetti per %s"
 
-#: thonny/plugins/pip_gui.py:872
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
 msgid "Confirmation"
-msgstr ""
+msgstr "Conferma"
 
-#: thonny/plugins/pip_gui.py:873
+#: thonny/plugins/pip_gui.py:1035
 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"
@@ -983,215 +894,203 @@ msgid "Looks like you are installing a Thonny-related package.\n"
 msgstr "Sembra che stai installando un pacchetto relativo a Thonny.\n"
 "Se invece desideri installare un plugin di Thonny, allora dovresti scegliere 'Strumenti → Gestisci i plugin...'\n"
 "\n"
-"Sei sicuro che vuoi installare %s per il back-end?"
+"Sei sicuro di voler installare %s per il back-end?"
 
-#: thonny/plugins/pip_gui.py:981
+#: thonny/plugins/pip_gui.py:1141
 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! Potrebbe essere disponibile un'altra versione che è compatibile con l'attuale versione di Thonny. Clicca sul pulsante '...' per scegliere la versione da installare."
+msgstr "NB! Potrebbe essere disponibile un'altra versione compatibile con l'attuale versione di Thonny. Clicca sul pulsante '...' per scegliere la versione da installare."
 
-#: thonny/plugins/pip_gui.py:989
+#: thonny/plugins/pip_gui.py:1149
 msgid "Thonny plugin without requirements"
 msgstr "Plugin Thonny senza requisiti"
 
-#: 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 "Sembra che stai provando ad installare una versione non aggiornata del plug-in di Thonny (non è specificata la versione di Thonny richiesta).\n"
-"\n"
-"Se comunque lo vuoi, per favore installalo dalla linea di comando."
-
-#: thonny/plugins/pip_gui.py:1004
+#: thonny/plugins/pip_gui.py:1165
 msgid "Unsuitable requirements"
-msgstr "Requisiti inadeguati"
+msgstr "Requisiti non idonei"
 
-#: thonny/plugins/pip_gui.py:1005
+#: thonny/plugins/pip_gui.py:1166
 msgid "This package requires different Thonny version:"
-msgstr "Questo pacchetto richiede una versione differente di Thonny:"
+msgstr "Questo pacchetto richiede una versione diversa di Thonny:"
 
-#: thonny/plugins/pip_gui.py:1009
+#: thonny/plugins/pip_gui.py:1170
 msgid "If you still want it, then please install it from the command line."
-msgstr "Se ancora lo desideri, allora installalo dalla linea di comando."
+msgstr "Se lo desideri ancora, installalo dalla riga di comando."
 
-#: 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
+#: thonny/plugins/pip_gui.py:1207
 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
-msgstr "NB! Devi riavviare Thonny dopo aver installato / aggiornato / disinstallato un plug-in."
+msgstr "NB! Devi riavviare Thonny dopo aver installato/aggiornato/disinstallato un plug-in."
 
-#: thonny/plugins/pip_gui.py:1068
+#: thonny/plugins/pip_gui.py:1217
 msgid "Thonny plug-ins"
-msgstr "plug-in di Thonny"
+msgstr "Plug-in di Thonny"
 
-#: thonny/plugins/pip_gui.py:1090
+#: thonny/plugins/pip_gui.py:1253
 msgid "Advanced install / upgrade / downgrade"
-msgstr "Installazione / aggiornamento / downgrade avanzato"
+msgstr "Installazione avanzata/aggiornamento/ritorno alla versione precedente"
 
-#: thonny/plugins/pip_gui.py:1099
+#: thonny/plugins/pip_gui.py:1262
 msgid "Desired version"
 msgstr "Versione desiderata"
 
-#: thonny/plugins/pip_gui.py:1137
+#: thonny/plugins/pip_gui.py:1321
 msgid "Upgrade dependencies"
 msgstr "Aggiorna le dipendenze"
 
-#: thonny/plugins/pip_gui.py:1198
+#: thonny/plugins/pip_gui.py:1406
 msgid "Requires:"
-msgstr "Richeide:"
+msgstr "Richiede:"
 
-#: thonny/plugins/pip_gui.py:1202
+#: thonny/plugins/pip_gui.py:1410
 msgid "Error:"
 msgstr "Errore:"
 
-#: thonny/plugins/pip_gui.py:1409
+#: thonny/plugins/pip_gui.py:1601
 msgid "Manage packages..."
 msgstr "Gestisci i pacchetti:"
 
-#: thonny/plugins/pip_gui.py:1415
+#: thonny/plugins/pip_gui.py:1607
 msgid "Manage plug-ins..."
 msgstr "Gestisci i plug-in..."
 
-#: thonny/plugins/replayer.py:365
+#: thonny/plugins/replayer.py:364
 msgid "Open replayer..."
 msgstr "Apri replayer..."
 
-#: thonny/plugins/run_debug_config_page.py:14
+#: thonny/plugins/run_debug_config_page.py:21
 msgid "Change working directory to script directory on Run / Debug"
-msgstr "Cambia la directory di lavoro alla directory dello script mentre Esegui / Debug"
+msgstr "Cambia la directory di lavoro nella directory degli script mentre Esegui/Debug"
 
-#: thonny/plugins/run_debug_config_page.py:22
+#: thonny/plugins/run_debug_config_page.py:35
 msgid "Show function calls (frames) in separate windows"
 msgstr "Mostra le chiamate alle funzioni (frames) in finestre separate"
 
-#: thonny/plugins/run_debug_config_page.py:23
+#: thonny/plugins/run_debug_config_page.py:36
 msgid "Uncheck if you want more traditional experience."
 msgstr "Deseleziona se desideri un'esperienza più tradizionale."
 
-#: thonny/plugins/run_debug_config_page.py:29
+#: thonny/plugins/run_debug_config_page.py:42
 msgid "Open and close Stack view automatically"
 msgstr "Apri e chiudi la vista Stack automaticamente"
 
-#: thonny/plugins/run_debug_config_page.py:30
+#: thonny/plugins/run_debug_config_page.py:43
 msgid "Opens the Stack view on first call and closes it when program returns to main frame."
-msgstr ""
+msgstr "Apre la vista Stack alla prima chiamata e la chiude quando il programma ritorna al frame principale."
 
-#: thonny/plugins/run_debug_config_page.py:39
+#: thonny/plugins/run_debug_config_page.py:52
 msgid "Allow stepping into libraries (ie. outside of main script directory)"
-msgstr ""
+msgstr "Consenti l'accesso alle librerie (ad es. al di fuori della directory principale degli script)"
 
-#: thonny/plugins/run_debug_config_page.py:40
+#: thonny/plugins/run_debug_config_page.py:53
 msgid "May make debugging slower."
-msgstr "Può renderelento il debug. "
+msgstr "Può rallentare il debug."
 
-#: thonny/plugins/run_debug_config_page.py:45
+#: thonny/plugins/run_debug_config_page.py:58
 msgid "Preferred debugger"
-msgstr "Debugger preferito"
+msgstr "Debug preferito"
 
-#: thonny/plugins/run_debug_config_page.py:57
+#: thonny/plugins/run_debug_config_page.py:70
 msgid "(used when clicking Debug toolbar button)"
-msgstr "(usato quando si clicca il bottone Debug nella toolbar)"
+msgstr "(usato quando si clicca il bottone Debug nella barra degli strumenti)"
 
-#: thonny/plugins/run_debug_config_page.py:62
+#: thonny/plugins/run_debug_config_page.py:75
 msgid "Birdseye port"
 msgstr "Porta di Birdseye"
 
-#: thonny/plugins/run_debug_config_page.py:66
+#: thonny/plugins/run_debug_config_page.py:79
 msgid "(restart Thonny after changing this)"
 msgstr "(riavvia Thonny dopo aver cambiato questo)"
 
-#: thonny/plugins/run_debug_config_page.py:74
+#: thonny/plugins/run_debug_config_page.py:87
 msgid "Run & Debug"
 msgstr "Esegui & Debug"
 
-#: thonny/plugins/shell_config_page.py:17
+#: thonny/plugins/shell_config_page.py:26
 msgid "Terminal emulation"
 msgstr "Emulazione di terminale"
 
-#: thonny/plugins/shell_config_page.py:19
+#: thonny/plugins/shell_config_page.py:28
 msgid "supports basic ANSI-colors and styles"
-msgstr ""
+msgstr "supporta i colori e gli stili ANSI di base"
 
-#: thonny/plugins/shell_config_page.py:31
+#: thonny/plugins/shell_config_page.py:40
 msgid "Maximum number of lines to keep."
 msgstr "Numero massimo di linee da mantenere."
 
-#: thonny/plugins/shell_config_page.py:33
+#: thonny/plugins/shell_config_page.py:42
 msgid "NB! Large values may cause poor performance!"
-msgstr "NB! Valori maggiori possono causare rallentamenti!"
+msgstr "NB! Valori elevati possono causare scarse prestazioni!"
 
-#: thonny/plugins/shell_config_page.py:49
+#: thonny/plugins/shell_config_page.py:58
 msgid "Maximum length of line fragments before squeezing"
-msgstr ""
+msgstr "Lunghezza massima dei frammenti di linea prima della compressione"
 
 #: thonny/plugins/terminal_config_page.py:12
 msgid "Running current script in terminal"
-msgstr "Esegui lo script corrente nel terminale"
+msgstr "Esecuzione dello script corrente nel terminale"
 
 #: thonny/plugins/terminal_config_page.py:17
 msgid "Present Python REPL after program ends"
-msgstr ""
+msgstr "Presenta Python REPL al termine del programma"
 
 #: thonny/plugins/terminal_config_page.py:24
 msgid "Keep terminal window open after Python process ends"
-msgstr "Mantieni aperta la finestra del terminale dopo la fine del processo di Python"
+msgstr "Mantieni aperta la finestra del terminale al termine del processo Python"
 
 #: 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 ""
+msgstr "NB! La chiusura automatica deve essere abilitata nelle impostazioni del Terminale\n"
+"(Profili → Shell → Quando termina la shell)"
 
 #: thonny/plugins/terminal_config_page.py:41
 msgid "Terminal"
 msgstr "Terminale"
 
-#: thonny/plugins/theme_and_font_config_page.py:40
+#: thonny/plugins/theme_and_font_config_page.py:39
 msgid "UI theme"
 msgstr "Tema UI"
 
-#: thonny/plugins/theme_and_font_config_page.py:53
+#: thonny/plugins/theme_and_font_config_page.py:52
 msgid "Syntax theme"
 msgstr "Tema della sintassi"
 
-#: thonny/plugins/theme_and_font_config_page.py:85
+#: thonny/plugins/theme_and_font_config_page.py:84
 msgid "Editor font"
-msgstr "Font dell'editor"
+msgstr "Carattere dell'editor"
 
-#: thonny/plugins/theme_and_font_config_page.py:108
+#: thonny/plugins/theme_and_font_config_page.py:107
 msgid "IO font"
-msgstr "Font di IO"
+msgstr "Carattere di IO"
 
-#: thonny/plugins/theme_and_font_config_page.py:133
+#: thonny/plugins/theme_and_font_config_page.py:132
 msgid "Preview"
 msgstr "Anteprima"
 
-#: thonny/plugins/theme_and_font_config_page.py:145
+#: thonny/plugins/theme_and_font_config_page.py:150
 msgid "This is a comment"
 msgstr "Questo è un commento"
 
-#: thonny/plugins/theme_and_font_config_page.py:148
+#: thonny/plugins/theme_and_font_config_page.py:153
 msgid "The answer is"
 msgstr "La risposta è"
 
-#: thonny/plugins/theme_and_font_config_page.py:152
+#: thonny/plugins/theme_and_font_config_page.py:157
 msgid "unclosed_string"
-msgstr ""
+msgstr "stringa_non_chiusa"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:159
 msgid "blah, blah"
 msgstr "bla, bla"
 
-#: thonny/plugins/theme_and_font_config_page.py:177
+#: thonny/plugins/theme_and_font_config_page.py:183
 msgid "NB! Some style elements change only after restarting Thonny!"
 msgstr "NB! Alcuni elementi dello stile cambiano solo dopo aver riavviato Thonny!"
 
-#: thonny/plugins/theme_and_font_config_page.py:216
+#: thonny/plugins/theme_and_font_config_page.py:222
 msgid "Enter an integer"
 msgstr "Inserisci un intero"
 
-#: thonny/plugins/theme_and_font_config_page.py:229
+#: thonny/plugins/theme_and_font_config_page.py:235
 msgid "Theme & Font"
 msgstr "Temi & Font"
 
@@ -1203,578 +1102,492 @@ msgstr "Apri la cartella di programma di Thonny..."
 msgid "Open Thonny data folder..."
 msgstr "Apri la cartella dei dati di Thonny"
 
-#: thonny/plugins/help/__init__.py:64
+#: thonny/plugins/help/__init__.py:70
 msgid "Home"
 msgstr "Home"
 
-#: thonny/plugins/help/__init__.py:75
+#: thonny/plugins/help/__init__.py:81
 msgid "Help contents"
 msgstr "Contenuti dell'aiuto"
 
-#: thonny/plugins/micropython/__init__.py:274
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "Dispositivo CircuitPython"
 
-#: thonny/plugins/micropython/__init__.py:278
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "Dispositivo MicroPython "
 
-#: thonny/plugins/micropython/__init__.py:476
+#: thonny/plugins/micropython/mp_front.py:558
 msgid "Connect your device to the computer and select corresponding port below"
-msgstr "Collega il tuo dispositivo al computer e seleziona la porta corrispondente\n"
+msgstr "Collega il dispositivo al computer e seleziona la porta corrispondente\n"
 "quì sotto"
 
-#: thonny/plugins/micropython/__init__.py:479
+#: thonny/plugins/micropython/mp_front.py:561
 msgid "look for your device name, \"USB Serial\" or \"UART\""
-msgstr "cerca il nome del tuo dispositivo, \"USB Serial\" o \"UART\""
+msgstr "cerca il nome del dispositivo, \"USB Serial\" o \"UART\""
 
-#: thonny/plugins/micropython/__init__.py:481
+#: thonny/plugins/micropython/mp_front.py:563
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "Se non riesci a trovarlo potresti aver bisgno di installare un driver USB adatto."
 
-#: thonny/plugins/micropython/__init__.py:401
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port"
 msgstr "Porta"
 
-#: thonny/plugins/micropython/__init__.py:411
+#: thonny/plugins/micropython/mp_front.py:458
 msgid "Try to detect port automatically"
 msgstr "Prova a determinare la porta automaticamente"
 
-#: thonny/plugins/micropython/__init__.py:954
+#: thonny/plugins/micropython/__init__.py:24
 msgid "MicroPython (generic)"
 msgstr "MicroPython (generico)"
 
-#: thonny/plugins/printing/__init__.py:82
+#: thonny/plugins/printing/__init__.py:98
 msgid "Print..."
 msgstr "Stampa..."
 
-#: thonny/plugins/system_shell/__init__.py:59
+#: thonny/plugins/system_shell/__init__.py:63
 msgid "Open system shell..."
 msgstr "Apri shell di sistema..."
 
-#: thonny/plugins/backend_config_page.py:103
+#: thonny/plugins/backend_config_page.py:109
 msgid "Details"
 msgstr "Dettagli"
 
-#: thonny/plugins/pip_gui.py:345
+#: thonny/plugins/pip_gui.py:395
 msgid "Install from requirements file"
 msgstr "Installa dal file requirements"
 
-#: thonny/plugins/pip_gui.py:380
+#: thonny/plugins/pip_gui.py:407
 msgid "Install from local file"
 msgstr "Installa da file locale"
 
-#: thonny/plugins/pip_gui.py:1038
+#: thonny/plugins/pip_gui.py:1200
 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 "Questa finestra di dialogo è per gestire i plug-in di Thonny e le loro dipendenze. Se vuoi installare i pacchetti per i tuoi programmi, allora seleziona 'Strumenti → Gestisci i plug-in...'"
+msgstr "Questa finestra di dialogo serve per gestire i plug-in Thonny e le loro dipendenze.\n"
+"Se vuoi installare i pacchetti per i tuoi programmi, scegli 'Strumenti → Gestisci i pacchetti...'"
 
-#: thonny/plugins/circuitpython/__init__.py:163
+#: thonny/plugins/circuitpython/__init__.py:10
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (generico)"
 
-#: thonny/plugins/commenting_indenting.py:143
+#: thonny/plugins/commenting_indenting.py:142
 msgid "Indent selected lines"
 msgstr "Indenta le linee selezionate"
 
-#: thonny/plugins/commenting_indenting.py:153
+#: thonny/plugins/commenting_indenting.py:152
 msgid "Dedent selected lines"
 msgstr "Deindenta le linee selezionate"
 
-#: thonny/workbench.py:1391
+#: thonny/workbench.py:1481
 msgid "Switch to\n"
 "regular\n"
 "mode"
-msgstr "Passa alla modalità regolare"
+msgstr "Passa alla\n"
+"modalità\n"
+"regolare"
 
-#: thonny/plugins/microbit/__init__.py:55
+#: thonny/plugins/microbit/__init__.py:62
 msgid "Make sure MicroPython has been installed to your micro:bit."
-msgstr "Verifica che MicroPython è stato installato nel tuo micro:bit."
+msgstr "Assicurati che MicroPython sia stato installato sul micro:bit."
 
-#: thonny/plugins/microbit/__init__.py:57
+#: thonny/plugins/microbit/__init__.py:64
 msgid "Don't forget that main.py only works without embedded main script."
-msgstr ""
-
-#: thonny/plugins/micropython/uf2dialog.py:45
-msgid "please wait"
-msgstr "attendere prego"
-
-#: thonny/plugins/microbit/__init__.py:199
-msgid "Done!"
-msgstr "Fatto!"
-
-#: thonny/plugins/micropython/__init__.py:298
-msgid "Firmware"
-msgstr "Firmware"
+msgstr "Non dimenticare che main.py funziona solo senza lo script principale incorporato."
 
-#: thonny/misc_utils.py:134
+#: thonny/misc_utils.py:177
 msgid "Could not find disk '%s'. Do you want to locate it yourself?"
-msgstr "Non ho trovato il disco '%s'. Vuoi cercarlo da solo?"
+msgstr "Impossibile trovare il disco '%s'. Vuoi localizzarlo tu stesso?"
 
-#: thonny/misc_utils.py:137
+#: thonny/misc_utils.py:180
 msgid "Found several '%s' disks. Do you want to choose one yourself?"
-msgstr "Trovati molti dischi '%s'. Vuoi selezionarne uno?"
+msgstr "Impossibile trovare il disco '%s'. Vuoi localizzarlo tu stesso?"
 
-#: thonny/misc_utils.py:153
+#: thonny/misc_utils.py:196
 msgid "Can't find suitable disk"
-msgstr "Non trovo un disco adeguato"
+msgstr "Impossibile trovare un disco adatto"
 
-#: thonny/base_file_browser.py:273
+#: thonny/base_file_browser.py:294
 msgid "%d items"
 msgstr "%d elementi"
 
-#: thonny/base_file_browser.py:692
-msgid "Move to Recycle Bin"
-msgstr "Sposta nel cestino"
-
-#: thonny/base_file_browser.py:694
+#: thonny/base_file_browser.py:743
 msgid "Move to Trash"
-msgstr "Elimina definitivamente"
+msgstr "Sposta nel Cestino"
 
-#: thonny/base_file_browser.py:697
+#: thonny/base_file_browser.py:746
 msgid "Delete"
-msgstr "Cancella"
+msgstr "Elimina"
 
-#: thonny/base_file_browser.py:700 thonny/base_file_browser.py:834
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
 msgid "New directory"
 msgstr "Nuova cartella"
 
-#: thonny/base_file_browser.py:703
+#: thonny/base_file_browser.py:749
 msgid "Properties"
 msgstr "Proprietà"
 
-#: thonny/base_file_browser.py:705
+#: thonny/base_file_browser.py:751
 msgid "Storage space"
-msgstr "Spazio di memorizzazione"
+msgstr "Spazio di archiviazione"
 
-#: thonny/base_file_browser.py:715
+#: thonny/base_file_browser.py:761
 msgid "Path"
 msgstr "Percorso"
 
-#: thonny/base_file_browser.py:717
+#: thonny/base_file_browser.py:763
 msgid "Directory properties"
 msgstr "Proprietà della cartella"
 
-#: thonny/base_file_browser.py:719
+#: thonny/base_file_browser.py:765
 msgid "File properties"
 msgstr "Proprietà del file"
 
-#: thonny/base_file_browser.py:721
+#: thonny/base_file_browser.py:767
 msgid "bytes"
 msgstr "bytes"
 
-#: thonny/base_file_browser.py:724
+#: thonny/base_file_browser.py:770
 msgid "Size"
 msgstr "Grandezza"
 
-#: thonny/base_file_browser.py:83 thonny/base_file_browser.py:735
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
 msgid "Modified"
 msgstr "Modificato"
 
-#: thonny/base_file_browser.py:794
+#: thonny/base_file_browser.py:842
 msgid "Deleting %s"
-msgstr "Sto cancellando %s"
-
-#: thonny/base_file_browser.py:817
-msgid "Moving %s to %s"
-msgstr "Sto spostando %s su %s"
+msgstr "Eliminazione di %s"
 
-#: thonny/editors.py:219
+#: thonny/editors.py:262
 msgid "Loading"
 msgstr "Sto caricando"
 
-#: thonny/editors.py:335
+#: thonny/editors.py:395
 msgid "Saving"
 msgstr "Sto salvando"
 
-#: thonny/running.py:1408
-msgid "Working..."
-msgstr "Sto lavorando..."
-
-#: thonny/plugins/files.py:199
-msgid "Uploading %s to %s"
-msgstr "Sto aggiornando %s su %s"
-
-#: thonny/plugins/files.py:216
+#: thonny/plugins/files.py:219
 msgid "Upload to %s"
-msgstr "Sto caricando su %s"
+msgstr "Carica in %s"
 
-#: thonny/plugins/files.py:362
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
-msgstr "Sto scaricando %s su %s"
+msgstr "Sto scaricando %s in %s"
 
-#: thonny/plugins/files.py:275
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
-msgstr "Sto scaricando %s"
+msgstr "Scarica in %s"
 
-#: thonny/base_file_browser.py:620
+#: thonny/base_file_browser.py:650
 msgid "Open in system file manager"
 msgstr "Apri nel file manager di sistema"
 
-#: thonny/base_file_browser.py:625
+#: thonny/base_file_browser.py:678
 msgid "Hide hidden files"
-msgstr "Nascondi i files nascosti"
+msgstr "Nascondi i file nascosti"
 
-#: thonny/base_file_browser.py:625
+#: thonny/base_file_browser.py:678
 msgid "Show hidden files"
-msgstr "Mostra i files nascosti"
+msgstr "Mostra i file nascosti"
 
-#: thonny/base_file_browser.py:635
+#: thonny/base_file_browser.py:661
 msgid "Open in Thonny"
 msgstr "Apri in Thonny"
 
-#: thonny/base_file_browser.py:640 thonny/base_file_browser.py:661
+#: thonny/base_file_browser.py:692
 msgid "Open in system default app"
 msgstr "Apri nell'app di sistema predefinita"
 
-#: thonny/base_file_browser.py:647 thonny/base_file_browser.py:669
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
 msgid "Configure %s files"
-msgstr "Configura i files %s"
+msgstr "Configura %s file"
 
-#: thonny/base_file_browser.py:670
+#: thonny/base_file_browser.py:701
 msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
-msgstr "Cosa fare con un file %s quando si fa doppio click nel browser dei file di Thonny?"
+msgstr "Cosa fare con un file %s quando fai doppio clic su di esso nel browser di file di Thonny?"
 
-#: thonny/base_file_browser.py:1042 thonny/plugins/micropython/pip_gui.py:77
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
 msgid "Deleting"
-msgstr "Sto cancellando"
+msgstr "Eliminazione"
 
-#: thonny/base_file_browser.py:1049
+#: thonny/base_file_browser.py:1265
 msgid "Creating directory"
-msgstr "Sto creando la directory"
+msgstr "Creazione directory"
 
-#: thonny/editors.py:217
+#: thonny/editors.py:260
 msgid "Loading %s"
-msgstr "Sto caricando %s"
+msgstr "Caricamento %s"
 
-#: thonny/editors.py:333
+#: thonny/editors.py:390
 msgid "Saving to %s"
-msgstr "Sto salvando su %s"
+msgstr "Salvataggio in %s"
 
-#: thonny/editors.py:622 thonny/editors.py:624
+#: thonny/editors.py:728 thonny/editors.py:730
 msgid "Save All files"
-msgstr "Salva tutti i files"
+msgstr "Salva tutti i file"
 
-#: thonny/workbench.py:828
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
 msgid "Configure interpreter..."
 msgstr "Configura l'interprete..."
 
-#: thonny/workbench.py:1501
+#: thonny/workbench.py:1591
 msgid "Device"
 msgstr "Dispotivo"
 
-#: thonny/workdlg.py:185
+#: thonny/workdlg.py:234
 msgid "Cancelling"
-msgstr "Sto cancellando"
+msgstr "Annullamento"
 
-#: thonny/workdlg.py:212
+#: thonny/workdlg.py:270
 msgid "Starting"
-msgstr "Sto iniziando"
+msgstr "Avviamento"
 
-#: thonny/plugins/backend_config_page.py:234
+#: thonny/plugins/backend_config_page.py:249
 msgid "Authentication"
 msgstr "Autenticazione"
 
-#: thonny/plugins/backend_config_page.py:236
+#: thonny/plugins/backend_config_page.py:251
 msgid "Enter the passphrase of your private key for\n"
 "{}"
-msgstr ""
+msgstr "Inserisci la passphrase della tua chiave privata per\n"
+"{}"
 
-#: thonny/plugins/backend_config_page.py:239
+#: thonny/plugins/backend_config_page.py:254
 msgid "Enter your password for\n"
 "{}"
-msgstr "Inserisci la tua password per\n"
+msgstr "Inserisci la password per\n"
 "{}"
 
-#: thonny/plugins/object_inspector.py:458
+#: thonny/plugins/object_inspector.py:486
 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s"
-msgstr ""
+msgstr "La rappresentazione sopra è un valore approssimativo di questo float. Il valore esatto memorizzato è %s che è circa %s"
 
-#: thonny/plugins/pip_gui.py:557
+#: thonny/plugins/pip_gui.py:682
 msgid "Search results"
 msgstr "Risultati della ricerca"
 
-#: thonny/plugins/pip_gui.py:558
+#: thonny/plugins/pip_gui.py:683
 msgid "Searching"
 msgstr "Ricerca in corso"
 
-#: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
 msgid "Installing '%s'"
-msgstr "Sto installando '%s'"
+msgstr "Installazione di '%s'"
 
-#: thonny/plugins/pip_gui.py:645
+#: thonny/plugins/pip_gui.py:793
 msgid "Upgrading '%s'"
-msgstr "Sto aggiornando'%s'"
+msgstr "Aggiornamento di '%s'"
 
-#: thonny/plugins/pip_gui.py:650
+#: thonny/plugins/pip_gui.py:800
 msgid "Uninstalling '%s'"
-msgstr "Sto disinstallando '%s'"
+msgstr "Disinstallazione di '%s'"
 
-#: thonny/plugins/pip_gui.py:663
+#: thonny/plugins/pip_gui.py:814
 msgid "Installing"
-msgstr "Installazione in corso"
+msgstr "Installazione"
 
-#: thonny/plugins/pip_gui.py:1372
+#: thonny/plugins/pip_gui.py:1562
 msgid "Package manager is not available for this interpreter"
 msgstr "Il gestore dei pacchetti non è disponibile per questo interprete"
 
-#: thonny/plugins/pip_gui.py:1385
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
 msgid "Not supported"
 msgstr "Non supportato"
 
-#: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1390
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
 msgid "Not available"
 msgstr "Non disponibile"
 
-#: thonny/plugins/pip_gui.py:1391
+#: thonny/plugins/pip_gui.py:1582
 msgid "You need to stop your program before launching the package manager."
-msgstr "Devi stoppare il tuo programma prima di lanciare il manager dei pacchetti."
+msgstr "È necessario arrestare il programma prima di avviare il gestore pacchetti."
 
-#: thonny/plugins/shell_config_page.py:64
+#: thonny/plugins/shell_config_page.py:73
 msgid "Open evaluated values in Object inspector"
 msgstr "Apri i valori valutati nell'Analizzatore di oggetti"
 
-#: thonny/plugins/cpython/__init__.py:370
+#: thonny/plugins/cpython_frontend/cp_front.py:234
 msgid "Python executable"
 msgstr "Eseguibile Python"
 
-#: thonny/plugins/cpython/__init__.py:393
+#: thonny/plugins/cpython_frontend/cp_front.py:258
 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 ""
+msgstr "NB! Il pulsante di selezione dei file potrebbe non funzionare correttamente quando si selezionano gli eseguibili da un ambiente virtuale.\n"
+"In questo caso scegli invece lo script 'activate' dell'interprete (o inserisci il percorso direttamente al box)!"
 
-#: thonny/plugins/cpython_ssh/__init__.py:153
+#: thonny/plugins/cpython_ssh/__init__.py:17
 msgid "Remote Python 3 (SSH)"
-msgstr ""
+msgstr "Python 3 remoto (SSH)"
 
-#: thonny/plugins/micropython/__init__.py:284
+#: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
 msgstr "Non connesso"
 
-#: thonny/plugins/micropython/__init__.py:453
-msgid "Advanced options"
-msgstr "Opzioni avanzate"
-
-#: thonny/plugins/micropython/__init__.py:460
-msgid "Install or update firmware"
-msgstr "Installa o aggiorna il firmware"
-
-#: thonny/plugins/micropython/__init__.py:963
+#: thonny/plugins/micropython/__init__.py:35
 msgid "MicroPython (local)"
 msgstr "MicroPython (locale)"
 
-#: thonny/plugins/micropython/__init__.py:973
+#: thonny/plugins/micropython/__init__.py:46
 msgid "MicroPython (SSH)"
 msgstr "MicroPython (SSH)"
 
-#: thonny/plugins/micropython/pip_gui.py:134
-msgid "Module"
-msgstr "Modulo"
-
-#: 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 "Il pacchetto non è disponibile in micropython.org. Verrà installata la versione di 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 "NB! micropython.org ha pubblicato la versione %s di questo pacchetto e verrà installata di default."
-
-#: thonny/plugins/micropython/pip_gui.py:245
-msgid "For upgrading simply install the package again."
-msgstr "Per aggiornare, reinstalla nuovamente il pacchetto."
-
-#: thonny/plugins/micropython/pip_gui.py:248
-msgid "For uninstalling delete corresponding files."
-msgstr "Per disinstallare, cancella i files corrispondenti"
-
-#: 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 "I nuovi pacchetti verranno installati in"
-
-#: thonny/plugins/micropython/pip_gui.py:292
+#: thonny/plugins/micropython/pip_gui.py:144
 msgid "no absolute lib directory in sys.path"
-msgstr ""
-
-#: thonny/plugins/micropython/uf2dialog.py:40
-msgid "Version to be installed"
-msgstr "Versione da installare"
-
-#: thonny/plugins/micropython/uf2dialog.py:48
-msgid "Target device location"
-msgstr ""
+msgstr "nessuna directory lib assoluta in sys.path"
 
-#: thonny/plugins/micropython/uf2dialog.py:59
-msgid "Target device model"
-msgstr ""
-
-#: thonny/plugins/micropython/uf2dialog.py:145
-msgid "Please wait"
-msgstr "Attendere"
-
-#: thonny/plugins/pip_gui.py:67
+#: thonny/plugins/pip_gui.py:71
 msgid "Search on PyPI"
 msgstr "Cerca in PyPI"
 
-#: thonny/plugins/pip_gui.py:79
-msgid "Delete selected"
-msgstr ""
-
-#: thonny/base_file_browser.py:662
+#: thonny/base_file_browser.py:693
 msgid "Open in Thonny's text editor"
 msgstr "Apri nell'editor di testo di Thonny"
 
-#: thonny/base_file_browser.py:325
+#: thonny/base_file_browser.py:346
 msgid "Storage space on this drive or filesystem"
-msgstr "Spazio di memorizzazione in questo drive o filesystem"
+msgstr "Spazio di archiviazione su questa unità o file system"
 
-#: thonny/base_file_browser.py:326
+#: thonny/base_file_browser.py:347
 msgid "total space"
 msgstr "spazio totale"
 
-#: thonny/base_file_browser.py:328
+#: thonny/base_file_browser.py:349
 msgid "used space"
 msgstr "spazio usato"
 
-#: thonny/base_file_browser.py:329
+#: thonny/base_file_browser.py:350
 msgid "free space"
 msgstr "spazio libero"
 
-#: thonny/base_file_browser.py:336
+#: thonny/base_file_browser.py:357
 msgid "Storage info"
-msgstr "Info sulla memorizzazione"
+msgstr "Info sull'archiviazione"
 
-#: thonny/plugins/commenting_indenting.py:163
+#: thonny/plugins/commenting_indenting.py:162
 msgid "Replace tabs with spaces"
 msgstr "Sostituisci le tabulazioni con gli spazi"
 
-#: thonny/plugins/editor_config_page.py:28
+#: thonny/plugins/editor_config_page.py:33
 msgid "Highlight tab characters"
 msgstr "Evidenzia i caratteri di tabulazione"
 
-#: thonny/plugins/editor_config_page.py:47
+#: thonny/plugins/editor_config_page.py:68
 msgid "Indent with tab characters (not recommended for Python)"
 msgstr "Indentazione con caratteri di tabulazione (non raccomandato con Python)"
 
-#: thonny/base_file_browser.py:81 thonny/memory.py:63
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
 msgid "Name"
 msgstr "Nome"
 
-#: thonny/base_file_browser.py:85
+#: thonny/base_file_browser.py:96
 msgid "Size (bytes)"
-msgstr "Grandezza (bytes)"
+msgstr "Dimensione (byte)"
 
-#: thonny/base_file_browser.py:835
+#: thonny/base_file_browser.py:879
 msgid "Enter name for new directory under\n"
 "%s"
-msgstr "Inserisci il nome per la nuova directory in %s"
+msgstr "Inserisci il nome per la nuova directory in\n"
+"%s"
 
-#: thonny/base_file_browser.py:858
+#: thonny/base_file_browser.py:902
 msgid "Nothing selected"
-msgstr "Non è selezionato niente"
+msgstr "Niente di selezionato"
 
-#: thonny/base_file_browser.py:858
+#: thonny/base_file_browser.py:902
 msgid "Select an item and try again!"
-msgstr "Seleziona un elemento e prova di nuovo!"
+msgstr "Seleziona un elemento e riprova!"
 
-#: thonny/base_file_browser.py:1105
+#: thonny/base_file_browser.py:1329
 msgid "Open from %s"
 msgstr "Apri da %s"
 
-#: thonny/base_file_browser.py:1108
+#: thonny/base_file_browser.py:1332
 msgid "Save to %s"
 msgstr "Salva in %s"
 
-#: thonny/base_file_browser.py:1120
+#: thonny/base_file_browser.py:1351
 msgid "File name:"
 msgstr "Nome del file:"
 
-#: thonny/memory.py:64 thonny/plugins/object_inspector.py:510
-#: thonny/plugins/object_inspector.py:589
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
 msgid "Value ID"
-msgstr "ID del valore"
+msgstr "ID valore"
 
 #: thonny/memory.py:65 thonny/plugins/heap.py:23
-#: thonny/plugins/object_inspector.py:511
-#: thonny/plugins/object_inspector.py:590
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
 msgid "Value"
 msgstr "Valore"
 
-#: thonny/plugins/backend_config_page.py:257
+#: thonny/plugins/backend_config_page.py:272
 msgid "Save password"
 msgstr "Salva password"
 
-#: thonny/plugins/debugger.py:553
+#: thonny/plugins/debugger.py:557
 msgid "Function call at %s"
-msgstr ""
+msgstr "Chiamata di funzione a %s"
 
-#: thonny/plugins/debugger.py:1001
+#: thonny/plugins/debugger.py:1006
 msgid "Local variables"
 msgstr "Variabili locali"
 
-#: thonny/plugins/debugger.py:1033
+#: thonny/plugins/debugger.py:1038
 msgid "Function"
 msgstr "Funzione"
 
-#: thonny/plugins/debugger.py:1034
+#: thonny/plugins/debugger.py:1039
 msgid "Location"
-msgstr ""
+msgstr "Posizione"
 
-#: thonny/plugins/debugger.py:1110
+#: thonny/plugins/debugger.py:1115
 msgid "If last command raised an exception then this view will show the stacktrace."
-msgstr ""
+msgstr "Se l'ultimo comando ha generato un'eccezione, questa vista mostrerà lo stacktrace."
 
 #: thonny/plugins/heap.py:22
 msgid "ID"
 msgstr "ID"
 
-#: thonny/plugins/object_inspector.py:87
+#: thonny/plugins/object_inspector.py:92
 msgid "Data"
 msgstr "Dati"
 
-#: thonny/plugins/object_inspector.py:88
+#: thonny/plugins/object_inspector.py:93
 msgid "Attributes"
 msgstr "Attributi"
 
-#: thonny/plugins/object_inspector.py:509
+#: thonny/plugins/object_inspector.py:537
 msgid "Index"
 msgstr "Indice"
 
-#: thonny/plugins/object_inspector.py:587
+#: thonny/plugins/object_inspector.py:615
 msgid "Key ID"
-msgstr "ID della chiave"
+msgstr "ID chiave"
 
-#: thonny/plugins/object_inspector.py:588
+#: thonny/plugins/object_inspector.py:616
 msgid "Key"
 msgstr "Chiave"
 
-#: thonny/plugins/variables.py:36
+#: thonny/plugins/variables.py:39
 msgid "Back to\n"
 "%s"
-msgstr "Torna a %s"
+msgstr "Torna a\n"
+"%s"
 
-#: thonny/plugins/micropython/__init__.py:401
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port or WebREPL"
-msgstr ""
+msgstr "Porta o WebREPL"
 
-#: thonny/plugins/micropython/__init__.py:518
+#: thonny/plugins/micropython/mp_front.py:599
 msgid "Password"
 msgstr "Password"
 
-#: thonny/plugins/debugger.py:959
+#: thonny/plugins/debugger.py:964
 msgid "Source code"
 msgstr "Codice sorgente"
 
@@ -1784,9 +1597,394 @@ msgstr "Usa le finestre di dialogo di Tk invece di Zenity"
 
 #: thonny/plugins/general_config_page.py:30
 msgid "Select if the file dialogs end up behind the main window"
-msgstr ""
+msgstr "Seleziona se i file di dialogo vanno dietro la finestra principale"
 
 #: thonny/plugins/general_config_page.py:97
 msgid "Environment variables (one KEY=VALUE per line)"
-msgstr "Variabili d'ambiente (una CHIAVE=VALORE per linea)"
+msgstr "Variabili d'ambiente (una CHIAVE=VALORE per riga)"
+
+#: thonny/base_file_browser.py:722
+msgid "New file"
+msgstr "Nuovo file"
+
+#: thonny/base_file_browser.py:740
+msgid "Rename"
+msgstr "Rinomina"
+
+#: thonny/base_file_browser.py:928
+msgid "Rename '%s'"
+msgstr "Rinomina '%s'"
+
+#: thonny/base_file_browser.py:928
+msgid "Enter new name"
+msgstr "Inserisci un nuovo nome"
+
+#: thonny/base_file_browser.py:1016
+msgid "Paste failed"
+msgstr "Impossibile incollare"
+
+#: thonny/base_file_browser.py:1016
+msgid "There are conflicting folders"
+msgstr "Ci sono cartelle in conflitto"
+
+#: thonny/base_file_browser.py:1144
+msgid "File already exists"
+msgstr "Il file esiste già"
+
+#: thonny/base_file_browser.py:1212
+msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
+msgstr "Se si tratta di un file di testo puoi impostarne l'apertura con Thonny cliccandoci col tasto destro e selezionando 'Configura files di tipo ...'."
+
+#: thonny/editors.py:38
+msgid "Python files"
+msgstr "File Python"
+
+#: thonny/editors.py:123 thonny/editors.py:189
+msgid "<untitled>"
+msgstr "<senza titolo>"
+
+#: thonny/editors.py:150
+msgid "File is gone"
+msgstr "Il file è sparito"
+
+#: thonny/editors.py:153
+msgid "Do you want to also close the editor?"
+msgstr "Vuoi anche chiudere l'editor?"
+
+#: thonny/editors.py:169
+msgid "External modification"
+msgstr "Modifica esterna"
+
+#: thonny/editors.py:172
+msgid "Do you want to discard current editor content and reload the file from disk?"
+msgstr "Eliminare il contenuto dell'editor corrente e ricaricare il file dal disco?"
+
+#: thonny/editors.py:588
+msgid "Python files usually have .py extension."
+msgstr "I file Python di solito hanno estensione .py."
+
+#: thonny/editors.py:590
+msgid "Did you mean '%s'?"
+msgstr "Intendevi '%s'?"
+
+#: thonny/editors.py:759
+msgid "Move / rename..."
+msgstr "Sposta/Rinomina ..."
+
+#: thonny/editors.py:768
+msgid "Go to line..."
+msgstr "Vai alla riga..."
+
+#: thonny/editors.py:1010
+msgid "Line number"
+msgstr "Numero di riga"
+
+#: thonny/editors.py:1156
+msgid "Do you want to save files before closing?"
+msgstr "Vuoi salvare i file prima di chiudere?"
+
+#: thonny/editors.py:1158
+msgid "Do you want to save file before closing?"
+msgstr "Vuoi salvare il file prima di chiudere?"
+
+#: thonny/editors.py:1161
+msgid "Save On Close"
+msgstr "Salva alla Chiusura"
+
+#: thonny/misc_utils.py:539
+msgid "Command not available"
+msgstr "Comando non disponibile"
+
+#: thonny/misc_utils.py:540
+msgid "This command is not available if Thonny is run via Flatpak"
+msgstr "Questo comando non è disponibile se Thonny è eseguito tramite Flatpak"
+
+#: thonny/workbench.py:700 thonny/workbench.py:799
+msgid "Support Ukraine"
+msgstr "Supporta l'Ucraina"
+
+#: thonny/plugins/backend_config_page.py:90
+msgid "Which kind of interpreter should Thonny use for running your code?"
+msgstr "Quale tipo di interprete dovrebbe usare Thonny per eseguire il codice?"
+
+#: thonny/plugins/calltip.py:159
+msgid "Show parameter info"
+msgstr "Mostra info sui parametri"
+
+#: thonny/plugins/editor_config_page.py:41
+msgid "Automatically show parameter info after typing '('"
+msgstr "Mostra automaticamente le info del parametro dopo aver digitato '('"
+
+#: thonny/plugins/editor_config_page.py:47
+msgid "Automatically propose completions while typing"
+msgstr "Proponi automaticamente suggerimenti durante la digitazione"
+
+#: thonny/plugins/editor_config_page.py:52
+msgid "Automatically show documentation for completions"
+msgstr "Mostra automaticamente la documentazione per i suggerimenti"
+
+#: thonny/plugins/editor_config_page.py:57
+msgid "Request completions with Tab-key in editors"
+msgstr "Richiedi suggerimenti con il tasto Tab negli editor"
+
+#: thonny/plugins/editor_config_page.py:62
+msgid "Request completions with Tab-key in Shell"
+msgstr "Richiedi suggerimenti con il tasto Tab nella shell"
+
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
+msgid "Problem"
+msgstr "Problema"
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Could not find definition"
+msgstr "Impossibile trovare la definizione"
+
+#: thonny/plugins/shell_config_page.py:17
+msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
+msgstr "Pulisci la shell prima di iniziare un nuovo processo (Run ,Debug, Stop/Restart, ...)"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:196
+msgid "Thonny's Python"
+msgstr "Python di Thonny"
+
+#: thonny/plugins/micropython/mp_front.py:496
+msgid "Interrupt working program on connect"
+msgstr "Interrompi il programma quando avviene la connessione"
+
+#: thonny/plugins/micropython/mp_front.py:504
+msgid "Synchronize device's real time clock"
+msgstr "Sincronizza l'ora in real time del dispositivo"
+
+#: thonny/plugins/micropython/mp_front.py:510
+msgid "Use local time in real time clock"
+msgstr "Usa l'ora locale nell'orologio in real time"
+
+#: thonny/plugins/micropython/mp_front.py:516
+msgid "Restart interpreter before running a script"
+msgstr "Riavvia l'interprete prima di eseguire uno script"
+
+#: thonny/plugins/micropython/pip_gui.py:26
+msgid "This doesn't look like MicroPython/CircuitPython package.\n"
+"Are you sure you want to install it?"
+msgstr "Questa non sembra essere una libreria di MicroPython/CircuitPython.\n"
+"Sei sicuro di volerla installare?"
+
+#: thonny/base_file_browser.py:853
+msgid "Moving to Trash"
+msgstr "Spostamento nel Cestino"
+
+#: thonny/base_file_browser.py:854
+msgid "Move %s to Trash?"
+msgstr "Spostare %s nel Cestino?"
+
+#: thonny/base_file_browser.py:861
+msgid "Moving %s to Trash"
+msgstr "Spostamento di %s nel Cestino"
+
+#: thonny/base_file_browser.py:666
+msgid "Open in default external app"
+msgstr "Apri nell'app esterna predefinita"
+
+#: thonny/base_file_browser.py:1210
+msgid "Opening remote files in external app is not supported."
+msgstr "L'apertura di file remoti in applicazioni esterne non è supportata."
+
+#: thonny/base_file_browser.py:1217
+msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
+msgstr "Se il file deve essere aperto in un'app esterna, scaricalo in una directory locale e aprilo da lì!"
+
+#: thonny/editors.py:151
+msgid "Looks like '%s' was deleted or moved."
+msgstr "Sembra che '%s' sia stato eliminato o spostato"
+
+#: thonny/editors.py:170
+msgid "Looks like '%s' was modified outside of the editor."
+msgstr "Sembra che '%s' sia stato modificato al di fuori dell'editor."
+
+#: thonny/plugins/cpython_frontend/cp_front.py:256
+msgid "NB! Thonny only supports Python %s and later"
+msgstr "NB! Thonny supporta solo Python versione %s e successive"
+
+#: thonny/editors.py:1010
+msgid "Go to line"
+msgstr "Vai alla riga"
+
+#: thonny/workbench.py:703
+msgid "Support"
+msgstr "Supporto"
+
+#: thonny/editors.py:399 thonny/editors.py:414
+msgid "Could not save"
+msgstr "Impossibile salvare"
+
+#: thonny/plugins/general_config_page.py:135
+msgid "Warning"
+msgstr "Avviso"
+
+#: thonny/plugins/general_config_page.py:136
+msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
+"Did you intend this?"
+msgstr "Se inserisci le virgolette in una variabile di ambiente, le virgolette faranno parte del valore.\n"
+"Intendevi questo?"
+
+#: thonny/workbench.py:870
+msgid "Install MicroPython"
+msgstr "Installa MicroPython"
+
+#: thonny/workbench.py:874
+msgid "Install CircuitPython"
+msgstr "Installa CircuitPython"
+
+#: thonny/plugins/backend_config_page.py:210
+msgid "Make uploaded shebang scripts executable"
+msgstr "Rendi eseguibili gli script shebang caricati"
+
+#: thonny/plugins/editor_config_page.py:91
+msgid "Make saved shebang scripts executable"
+msgstr "Rendi eseguibili gli script shebang salvati"
+
+#: thonny/plugins/files.py:224
+msgid "Activate virtual environment"
+msgstr "Attiva l'ambiente virtuale"
+
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
+msgid "Target"
+msgstr "Obbiettivo"
+
+#: thonny/plugins/pythontutor.py:41
+msgid "Visualize current script at Python Tutor"
+msgstr "Visualizza lo script corrente su Python Tutor"
+
+#: thonny/plugins/todo_view.py:43
+msgid "Line"
+msgstr "Riga"
+
+#: thonny/plugins/todo_view.py:44
+msgid "Info"
+msgstr "Info"
+
+#: thonny/plugins/todo_view.py:121
+msgid "No line marked with #todo found"
+msgstr "Nessuna riga contrassegnata con #todo trovata"
+
+#: thonny/plugins/todo_view.py:141
+msgid "TODO"
+msgstr "TODO"
+
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
+msgid "Install or update %s"
+msgstr "Installa o aggiorna %s"
+
+#: thonny/plugins/cpython_frontend/__init__.py:24
+msgid "Local Python 3"
+msgstr "Python 3 Locale"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:266
+msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+msgstr "Puoi anche attivare un ambiente virtuale usando il menu contestuale del file explorer: clicca con il tasto destro sulla cartella o sul file 'pyvenv.cfg' che si trova all'interno."
+
+#: thonny/plugins/ev3/__init__.py:72
+msgid "Preparations (skip the VS Code part)"
+msgstr "Preparazioni (salta la parte su VS Code)"
+
+#: thonny/plugins/ev3/__init__.py:78
+msgid "Default password"
+msgstr "Password predefinita"
+
+#: thonny/running.py:392
+msgid "Information"
+msgstr "Informazioni"
+
+#: thonny/running.py:393
+msgid "For debugging the program must be saved first."
+msgstr "Per eseguire il debug, il programma deve essere prima salvato."
+
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr "%s non sembra un file di testo"
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr "Problema durante il caricamento del file"
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr "Questo file sembra avere problemi con la codifica.\n"
+"\n"
+"Assicurati che sia in UTF-8 o che contenga un suggerimento di codifica appropriato."
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr "Il file è aperto"
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr "Questo file è già aperto in Thonny.\n"
+"\n"
+"Se vuoi salvare con questo nome,\n"
+"chiudi prima l'editor esistente!"
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr "Errore di autorizzazione"
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr "Sembra che questo file o cartella non sia scrivibile."
+
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr "Il back-end non è pronto"
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr "Dove salvare?"
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr "Potenziale problema"
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr "Se chiami questo script '%s', non sarai in grado di importare il modulo della libreria chiamato '%s'"
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr "Vuoi ancora usare questo nome per questo script?"
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr "Errore di autorizzazione ottenuto durante il tentativo di caricare\n"
+"%s"
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr "Prova ad aprirlo con File => Apri."
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr "Errore di autorizzazione"
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr "Consenti l'esecuzione di programmi senza nome"
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr "Licenza"
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr "Avvisa se un modulo utente oscura un modulo di libreria"
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
+msgstr "Cerca micropython-lib e PyPI"
 
diff --git a/thonny/locale/ja_JP/LC_MESSAGES/thonny.mo b/thonny/locale/ja_JP/LC_MESSAGES/thonny.mo
index 0edf962..eb35367 100644
Binary files a/thonny/locale/ja_JP/LC_MESSAGES/thonny.mo and b/thonny/locale/ja_JP/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/ja_JP/LC_MESSAGES/thonny.po b/thonny/locale/ja_JP/LC_MESSAGES/thonny.po
index 512ee8b..6477faf 100644
--- a/thonny/locale/ja_JP/LC_MESSAGES/thonny.po
+++ b/thonny/locale/ja_JP/LC_MESSAGES/thonny.po
@@ -7,63 +7,63 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: ja\n"
 
-#: thonny/workbench.py:361
+#: thonny/workbench.py:369
 msgid "File"
 msgstr "ファイル"
 
-#: thonny/workbench.py:362
+#: thonny/workbench.py:370
 msgid "Edit"
 msgstr "編集"
 
-#: thonny/workbench.py:363
+#: thonny/workbench.py:371
 msgid "View"
 msgstr "表示"
 
-#: thonny/running.py:116 thonny/workbench.py:364
+#: thonny/running.py:116 thonny/workbench.py:372
 msgid "Run"
 msgstr "実行"
 
-#: thonny/workbench.py:365
+#: thonny/workbench.py:373
 msgid "Tools"
 msgstr "ツール"
 
-#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:366
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:374
 msgid "Help"
 msgstr "ヘルプ"
 
-#: thonny/workbench.py:583
+#: thonny/workbench.py:591
 msgid "Exit"
 msgstr "終了"
 
-#: thonny/workbench.py:610
+#: thonny/workbench.py:618
 msgid "Decrease font size"
 msgstr "文字を小さくする"
 
-#: thonny/workbench.py:622
+#: thonny/workbench.py:630
 msgid "Focus editor"
 msgstr "エディタにフォーカス"
 
-#: thonny/workbench.py:631
+#: thonny/workbench.py:639
 msgid "Focus shell"
 msgstr "シェルにフォーカス"
 
-#: thonny/workbench.py:642
+#: thonny/workbench.py:650
 msgid "Maximize view"
 msgstr "最大化"
 
-#: thonny/workbench.py:654
+#: thonny/workbench.py:662
 msgid "Full screen"
 msgstr "全画面表示"
 
-#: thonny/workbench.py:1457
+#: thonny/workbench.py:1465
 msgid "Program arguments"
 msgstr "プログラムの引数"
 
-#: thonny/plugins/about.py:21 thonny/plugins/about.py:140
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:151
 msgid "About Thonny"
 msgstr "Thonnyについて"
 
-#: thonny/plugins/about.py:66
+#: thonny/plugins/about.py:77
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -77,7 +77,7 @@ msgstr "このアプリケーションは\n"
 "エストニアのタルトゥ大学で\n"
 "作られています"
 
-#: thonny/plugins/about.py:86
+#: thonny/plugins/about.py:97
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -91,11 +91,11 @@ msgstr "このプログラムの使用によって起きた\n"
 "に記載された条件のもとで\n"
 "自由に再配布することが出来ます"
 
-#: thonny/plugins/about.py:129
+#: thonny/plugins/about.py:140
 msgid "Version history"
 msgstr "バージョン履歴"
 
-#: thonny/plugins/about.py:136
+#: thonny/plugins/about.py:147
 msgid "Report problems"
 msgstr "問題を報告"
 
@@ -123,7 +123,7 @@ msgstr "無効にするチェック項目(1行に1つのid)"
 msgid "Assistant"
 msgstr "アシスタント"
 
-#: thonny/plugins/autocomplete.py:512
+#: thonny/plugins/autocomplete.py:522
 msgid "Auto-complete"
 msgstr "オートコンプリート"
 
@@ -167,18 +167,18 @@ msgstr "元に戻す"
 msgid "Redo"
 msgstr "やり直す"
 
-#: thonny/base_file_browser.py:721 thonny/plugins/common_editing_commands.py:49
-#: thonny/ui_utils.py:2294
+#: thonny/base_file_browser.py:724 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2295
 msgid "Cut"
 msgstr "切り取り"
 
-#: thonny/base_file_browser.py:722 thonny/plugins/common_editing_commands.py:61
-#: thonny/ui_utils.py:2295
+#: thonny/base_file_browser.py:725 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2296
 msgid "Copy"
 msgstr "コピー"
 
-#: thonny/base_file_browser.py:724 thonny/base_file_browser.py:730
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2296
+#: thonny/base_file_browser.py:727 thonny/base_file_browser.py:733
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2297
 msgid "Paste"
 msgstr "貼り付け"
 
@@ -244,11 +244,11 @@ msgstr "使用履歴をエクスポート..."
 msgid "Events"
 msgstr "イベント"
 
-#: thonny/plugins/files.py:606
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "ファイル"
 
-#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:430
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:437
 msgid "Find & Replace"
 msgstr "検索と置換"
 
@@ -288,11 +288,11 @@ msgstr "置換して次を検索"
 msgid "Replace all"
 msgstr "すべて置換"
 
-#: thonny/plugins/find_replace.py:249
+#: thonny/plugins/find_replace.py:253
 msgid "Enter string to be replaced."
 msgstr "置換される文字列."
 
-#: thonny/plugins/find_replace.py:333
+#: thonny/plugins/find_replace.py:338
 msgid "The specified text was not found!"
 msgstr "指定された文字列が見つかりません!"
 
@@ -366,8 +366,8 @@ msgstr "Pygame Zeroモード"
 msgid "Uninstall"
 msgstr "アンインストール"
 
-#: thonny/editors.py:667 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
-#: thonny/ui_utils.py:1871 thonny/workdlg.py:162
+#: thonny/editors.py:685 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
+#: thonny/ui_utils.py:1872 thonny/workdlg.py:162
 msgid "Close"
 msgstr "閉じる"
 
@@ -384,7 +384,7 @@ msgid "Upgrade"
 msgstr "アップグレード"
 
 #: thonny/plugins/esp/__init__.py:349
-#: thonny/plugins/micropython/uf2dialog.py:348 thonny/plugins/pip_gui.py:73
+#: thonny/plugins/micropython/uf2dialog.py:410 thonny/plugins/pip_gui.py:73
 msgid "Install"
 msgstr "インストール"
 
@@ -447,64 +447,64 @@ msgstr "現在のフレーム\n"
 msgid "Variables"
 msgstr "変数"
 
-#: thonny/base_file_browser.py:1558
+#: thonny/base_file_browser.py:1572
 msgid "This computer"
 msgstr "このコンピュータ"
 
-#: thonny/base_file_browser.py:641
+#: thonny/base_file_browser.py:644
 msgid "Refresh"
 msgstr "更新"
 
-#: thonny/base_file_browser.py:650
+#: thonny/base_file_browser.py:653
 msgid "Focus into"
 msgstr "フォーカスに入る"
 
-#: thonny/base_file_browser.py:1393 thonny/base_file_browser.py:1405
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
 #: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
 msgid "Error"
 msgstr "エラー"
 
-#: thonny/base_file_browser.py:1393 thonny/base_file_browser.py:1405
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
 msgid "You need to select a file!"
 msgstr "ファイルを選択する必要がある!"
 
-#: thonny/base_file_browser.py:1409
+#: thonny/base_file_browser.py:1423
 msgid "Overwrite?"
 msgstr "上書く?"
 
-#: thonny/base_file_browser.py:1409
+#: thonny/base_file_browser.py:1423
 msgid "Do you want to overwrite '%s' ?"
 msgstr "'%s' を上書きしますか?"
 
-#: thonny/editors.py:632 thonny/editors.py:634
+#: thonny/editors.py:650 thonny/editors.py:652
 msgid "New"
 msgstr "新規ファイル"
 
-#: thonny/editors.py:645
+#: thonny/editors.py:663
 msgid "Open..."
 msgstr "ファイルを開く..."
 
-#: thonny/editors.py:647
+#: thonny/editors.py:665
 msgid "Load"
 msgstr "ファイルを開く"
 
-#: thonny/editors.py:656
+#: thonny/editors.py:674
 msgid "Recent files"
 msgstr "最近利用したファイル"
 
-#: thonny/editors.py:678 thonny/ui_utils.py:493
+#: thonny/editors.py:696 thonny/ui_utils.py:493
 msgid "Close all"
 msgstr "すべて閉じる"
 
-#: thonny/editors.py:688 thonny/editors.py:690
+#: thonny/editors.py:706 thonny/editors.py:708
 msgid "Save"
 msgstr "保存"
 
-#: thonny/editors.py:713
+#: thonny/editors.py:731
 msgid "Save as..."
 msgstr "名前を付けて保存..."
 
-#: thonny/editors.py:724
+#: thonny/editors.py:742
 msgid "Save copy..."
 msgstr "コピーを保存..."
 
@@ -540,74 +540,74 @@ msgstr "EOF / ソフトリセットを送信"
 msgid "Disconnect"
 msgstr "切断"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:268
+#: thonny/plugins/cpython_frontend/cp_front.py:269
 msgid "Python interpreters"
 msgstr "Pythonインタープリタ"
 
-#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:269
+#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:270
 #: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
 msgid "all files"
 msgstr "すべてのファイル"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:297
+#: thonny/plugins/cpython_frontend/cp_front.py:298
 msgid "Select empty directory for new virtual environment"
 msgstr "新しい仮想環境用に空のディレクトリを選択します"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:304
+#: thonny/plugins/cpython_frontend/cp_front.py:305
 msgid "Bad directory"
 msgstr "不正なディレクトリ"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:305
+#: thonny/plugins/cpython_frontend/cp_front.py:306
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "選択したディレクトリは空ではありません。\n"
 "他を選択するかキャンセルしてください。"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:322
+#: thonny/plugins/cpython_frontend/cp_front.py:323
 msgid "Creating virtual environment"
 msgstr "仮想環境を作成中"
 
-#: thonny/shell.py:100
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "シェルをクリア"
 
-#: thonny/shell.py:174
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "プロッター"
 
-#: thonny/shell.py:306
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "クリア"
 
-#: thonny/shell.py:319
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "プロッターを表示"
 
-#: thonny/shell.py:1648
+#: thonny/shell.py:1659
 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:1659
+#: thonny/shell.py:1670
 msgid "Wrap text (may be slow)"
 msgstr "テキスト折返し(遅い場合があります)"
 
-#: thonny/ui_utils.py:1866
+#: thonny/ui_utils.py:1867
 msgid "Copy to clipboard"
 msgstr "クリップボードにコピー"
 
-#: thonny/shell.py:1701
+#: thonny/shell.py:1712
 msgid "Squeezed text (%d characters)"
 msgstr "スクイーズテキスト(%d 文字)"
 
-#: thonny/shell.py:1871
+#: thonny/shell.py:1882
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr "プロッターはシェルの一連の数値を\n"
 "可視化します。"
 
-#: thonny/shell.py:1873
+#: thonny/shell.py:1884
 msgid "See Help for details."
 msgstr "ヘルプで詳細を見る."
 
@@ -629,65 +629,65 @@ msgstr "コピー中\n"
 "から\n"
 "  %s"
 
-#: thonny/base_file_browser.py:1364 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/base_file_browser.py:1378 thonny/config_ui.py:42 thonny/export.py:28
 #: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
-#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1818
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1819
 #: thonny/workdlg.py:164 thonny/workdlg.py:209
 msgid "Cancel"
 msgstr "キャンセル"
 
-#: thonny/base_file_browser.py:1355 thonny/config_ui.py:41 thonny/export.py:25
-#: thonny/plugins/about.py:100 thonny/plugins/backend_config_page.py:285
-#: thonny/ui_utils.py:154 thonny/ui_utils.py:1815 thonny/workdlg.py:206
+#: thonny/base_file_browser.py:1369 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:111 thonny/plugins/backend_config_page.py:285
+#: thonny/ui_utils.py:154 thonny/ui_utils.py:1816 thonny/workdlg.py:206
 msgid "OK"
 msgstr "OK"
 
-#: thonny/ui_utils.py:2300
+#: thonny/ui_utils.py:2301
 msgid "Select All"
 msgstr "すべてを選択"
 
-#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:155
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
 #: thonny/workbench.py:162
 msgid "Shell"
 msgstr "シェル"
 
-#: thonny/workbench.py:593
+#: thonny/workbench.py:601
 msgid "Options..."
 msgstr "オプション..."
 
-#: thonny/workbench.py:600
+#: thonny/workbench.py:608
 msgid "Increase font size"
 msgstr "文字を大きくする"
 
-#: thonny/workbench.py:665
+#: thonny/workbench.py:673
 msgid "Change font size"
 msgstr "フォントサイズを変更"
 
-#: thonny/workbench.py:666
+#: thonny/workbench.py:674
 msgid "Zoom"
 msgstr "ズーム"
 
-#: thonny/workbench.py:675
+#: thonny/workbench.py:683
 msgid "Exit Thonny"
 msgstr "Thonnyを終了"
 
-#: thonny/workbench.py:678
+#: thonny/workbench.py:686
 msgid "Quit"
 msgstr "終了"
 
-#: thonny/workbench.py:1236 thonny/workbench.py:1244
+#: thonny/workbench.py:1244 thonny/workbench.py:1252
 msgid "Overwriting theme '%s'"
 msgstr "テーマ '%s' を上書く?"
 
-#: thonny/workbench.py:1428
+#: thonny/workbench.py:1436
 msgid "Program arguments:"
 msgstr "プログラムの引数:"
 
-#: thonny/workbench.py:1482
+#: thonny/workbench.py:1490
 msgid "Regular mode"
 msgstr "通常モード"
 
-#: thonny/workbench.py:1483
+#: thonny/workbench.py:1491
 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.)"
@@ -889,7 +889,7 @@ msgstr "パッケージ"
 msgid "Manage packages for %s"
 msgstr "%s のパッケージを管理する"
 
-#: thonny/editors.py:571 thonny/plugins/micropython/pip_gui.py:23
+#: thonny/editors.py:579 thonny/plugins/micropython/pip_gui.py:23
 #: thonny/plugins/pip_gui.py:953
 msgid "Confirmation"
 msgstr "確認"
@@ -1120,31 +1120,31 @@ msgstr "ホーム"
 msgid "Help contents"
 msgstr "ヘルプコンテンツ"
 
-#: thonny/plugins/micropython/mp_front.py:300
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "CircuitPythonデバイス"
 
-#: thonny/plugins/micropython/mp_front.py:304
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "MicroPythonデバイス"
 
-#: thonny/plugins/micropython/mp_front.py:541
+#: thonny/plugins/micropython/mp_front.py:547
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "デバイスをコンピュータに接続し、ポートを選択します"
 
-#: thonny/plugins/micropython/mp_front.py:544
+#: thonny/plugins/micropython/mp_front.py:550
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "\"USBシリアル\"または\"UART\"のデバイス名を探す"
 
-#: thonny/plugins/micropython/mp_front.py:546
+#: thonny/plugins/micropython/mp_front.py:552
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "見つからない場合には、最初にUSBドライバーをインストールする必要があります。"
 
-#: thonny/plugins/micropython/mp_front.py:439
+#: thonny/plugins/micropython/mp_front.py:444
 msgid "Port"
 msgstr "ポート"
 
-#: thonny/plugins/micropython/mp_front.py:449
+#: thonny/plugins/micropython/mp_front.py:454
 msgid "Try to detect port automatically"
 msgstr "ポートの自動検出を試す"
 
@@ -1190,7 +1190,7 @@ msgstr "選択した行をインデントする"
 msgid "Dedent selected lines"
 msgstr "選択した行をインデントする"
 
-#: thonny/workbench.py:1471
+#: thonny/workbench.py:1479
 msgid "Switch to\n"
 "regular\n"
 "mode"
@@ -1222,63 +1222,63 @@ msgstr "複数の '%s' ディスクが見つかりました。自分で選択し
 msgid "Can't find suitable disk"
 msgstr "適切なディスクが見つかりません"
 
-#: thonny/base_file_browser.py:287
+#: thonny/base_file_browser.py:290
 msgid "%d items"
 msgstr "%d アイテム"
 
-#: thonny/base_file_browser.py:736
+#: thonny/base_file_browser.py:739
 msgid "Move to Trash"
 msgstr "ごみ箱に移動"
 
-#: thonny/base_file_browser.py:739
+#: thonny/base_file_browser.py:742
 msgid "Delete"
 msgstr "削除"
 
-#: thonny/base_file_browser.py:718 thonny/base_file_browser.py:869
+#: thonny/base_file_browser.py:721 thonny/base_file_browser.py:874
 msgid "New directory"
 msgstr "新しいディレクトリ"
 
-#: thonny/base_file_browser.py:742
+#: thonny/base_file_browser.py:745
 msgid "Properties"
 msgstr "プロパティ"
 
-#: thonny/base_file_browser.py:744
+#: thonny/base_file_browser.py:747
 msgid "Storage space"
 msgstr "ストレージ容量"
 
-#: thonny/base_file_browser.py:754
+#: thonny/base_file_browser.py:757
 msgid "Path"
 msgstr "パス"
 
-#: thonny/base_file_browser.py:756
+#: thonny/base_file_browser.py:759
 msgid "Directory properties"
 msgstr "ディレクトリプロパティ"
 
-#: thonny/base_file_browser.py:758
+#: thonny/base_file_browser.py:761
 msgid "File properties"
 msgstr "ファイルプロパティ"
 
-#: thonny/base_file_browser.py:760
+#: thonny/base_file_browser.py:763
 msgid "bytes"
 msgstr "バイト"
 
-#: thonny/base_file_browser.py:763
+#: thonny/base_file_browser.py:766
 msgid "Size"
 msgstr "サイズ"
 
-#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:774
+#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:777
 msgid "Modified"
 msgstr "変更"
 
-#: thonny/base_file_browser.py:833
+#: thonny/base_file_browser.py:838
 msgid "Deleting %s"
 msgstr "削除中 %s"
 
-#: thonny/editors.py:253
+#: thonny/editors.py:260
 msgid "Loading"
 msgstr "読込中"
 
-#: thonny/editors.py:382
+#: thonny/editors.py:389
 msgid "Saving"
 msgstr "保存中"
 
@@ -1286,67 +1286,67 @@ msgstr "保存中"
 msgid "Upload to %s"
 msgstr "%s をアップロード"
 
-#: thonny/plugins/files.py:417
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
 msgstr "ダウンロード中 %s から %s"
 
-#: thonny/plugins/files.py:323
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr "ダウンロード中 %s"
 
-#: thonny/base_file_browser.py:643
+#: thonny/base_file_browser.py:646
 msgid "Open in system file manager"
 msgstr "システムファイルマネージャで開く"
 
-#: thonny/base_file_browser.py:671
+#: thonny/base_file_browser.py:674
 msgid "Hide hidden files"
 msgstr "隠しファイルを非表示"
 
-#: thonny/base_file_browser.py:671
+#: thonny/base_file_browser.py:674
 msgid "Show hidden files"
 msgstr "隠しファイルを表示"
 
-#: thonny/base_file_browser.py:654
+#: thonny/base_file_browser.py:657
 msgid "Open in Thonny"
 msgstr "Thonnyで開く"
 
-#: thonny/base_file_browser.py:685
+#: thonny/base_file_browser.py:688
 msgid "Open in system default app"
 msgstr "システムデフォルトアプリを開く"
 
-#: thonny/base_file_browser.py:666 thonny/base_file_browser.py:693
+#: thonny/base_file_browser.py:669 thonny/base_file_browser.py:696
 msgid "Configure %s files"
 msgstr "設定 %s ファイル"
 
-#: thonny/base_file_browser.py:694
+#: thonny/base_file_browser.py:697
 msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
 msgstr "Thonnyのファイルブラウザで %s ファイルをダブルクリックするとどうなりますか?"
 
-#: thonny/base_file_browser.py:1240 thonny/editors.py:953 thonny/editors.py:955
+#: thonny/base_file_browser.py:1254 thonny/editors.py:979 thonny/editors.py:981
 msgid "Deleting"
 msgstr "削除中"
 
-#: thonny/base_file_browser.py:1247
+#: thonny/base_file_browser.py:1261
 msgid "Creating directory"
 msgstr "ディレクトリを作成"
 
-#: thonny/editors.py:251
+#: thonny/editors.py:258
 msgid "Loading %s"
 msgstr "読込中 %s"
 
-#: thonny/editors.py:377
+#: thonny/editors.py:384
 msgid "Saving to %s"
 msgstr "保存中 %s"
 
-#: thonny/editors.py:702 thonny/editors.py:704
+#: thonny/editors.py:720 thonny/editors.py:722
 msgid "Save All files"
 msgstr "すべてのファイルを保存"
 
-#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:869
+#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:877
 msgid "Configure interpreter..."
 msgstr "インタプリタ設定..."
 
-#: thonny/workbench.py:1581
+#: thonny/workbench.py:1589
 msgid "Device"
 msgstr "デバイス"
 
@@ -1406,7 +1406,7 @@ msgstr "インストール中"
 msgid "Package manager is not available for this interpreter"
 msgstr "パッケージマネージャはこのインタープリタでは利用できません"
 
-#: thonny/base_file_browser.py:1191 thonny/plugins/pip_gui.py:1516
+#: thonny/base_file_browser.py:1205 thonny/plugins/pip_gui.py:1516
 msgid "Not supported"
 msgstr "未サポート"
 
@@ -1422,11 +1422,11 @@ msgstr "パッケージマネージャを起動する前にプログラムを停
 msgid "Open evaluated values in Object inspector"
 msgstr "オブジェクトインスペクタで評価値を開きます"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:208
+#: thonny/plugins/cpython_frontend/cp_front.py:209
 msgid "Python executable"
 msgstr "Python実行可能ファイル"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:231
+#: thonny/plugins/cpython_frontend/cp_front.py:232
 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)!"
@@ -1438,11 +1438,11 @@ msgstr "NB! 仮想環境から実行可能ファイルを選択するとファ
 msgid "Remote Python 3 (SSH)"
 msgstr "リモート Python 3 (SSH)"
 
-#: thonny/plugins/micropython/mp_front.py:310
+#: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
 msgstr "未接続"
 
-#: thonny/plugins/micropython/mp_front.py:515
+#: thonny/plugins/micropython/mp_front.py:521
 msgid "Advanced options"
 msgstr "高度なオプション"
 
@@ -1496,27 +1496,27 @@ msgstr "お待ち下さい"
 msgid "Search on PyPI"
 msgstr "PyPIを検索"
 
-#: thonny/base_file_browser.py:686
+#: thonny/base_file_browser.py:689
 msgid "Open in Thonny's text editor"
 msgstr "Thonnyのテキストエディタで開く"
 
-#: thonny/base_file_browser.py:339
+#: thonny/base_file_browser.py:342
 msgid "Storage space on this drive or filesystem"
 msgstr "このドライブまたはファイルシステムのストレージ容量"
 
-#: thonny/base_file_browser.py:340
+#: thonny/base_file_browser.py:343
 msgid "total space"
 msgstr "トータル容量"
 
-#: thonny/base_file_browser.py:342
+#: thonny/base_file_browser.py:345
 msgid "used space"
 msgstr "利用容量"
 
-#: thonny/base_file_browser.py:343
+#: thonny/base_file_browser.py:346
 msgid "free space"
 msgstr "空き容量"
 
-#: thonny/base_file_browser.py:350
+#: thonny/base_file_browser.py:353
 msgid "Storage info"
 msgstr "ストレージ情報"
 
@@ -1540,29 +1540,29 @@ msgstr "名前"
 msgid "Size (bytes)"
 msgstr "サイズ(バイト)"
 
-#: thonny/base_file_browser.py:870
+#: thonny/base_file_browser.py:875
 msgid "Enter name for new directory under\n"
 "%s"
 msgstr "新しいディレクトリ名を入力\n"
 "%s"
 
-#: thonny/base_file_browser.py:893
+#: thonny/base_file_browser.py:898
 msgid "Nothing selected"
 msgstr "未選択"
 
-#: thonny/base_file_browser.py:893
+#: thonny/base_file_browser.py:898
 msgid "Select an item and try again!"
 msgstr "アイテムを選択して再試行してください!"
 
-#: thonny/base_file_browser.py:1311
+#: thonny/base_file_browser.py:1325
 msgid "Open from %s"
 msgstr "%s を開く"
 
-#: thonny/base_file_browser.py:1314
+#: thonny/base_file_browser.py:1328
 msgid "Save to %s"
 msgstr "%s を保存"
 
-#: thonny/base_file_browser.py:1333
+#: thonny/base_file_browser.py:1347
 msgid "File name:"
 msgstr "ファイル名:"
 
@@ -1631,11 +1631,11 @@ msgid "Back to\n"
 msgstr "戻る\n"
 "%s"
 
-#: thonny/plugins/micropython/mp_front.py:439
+#: thonny/plugins/micropython/mp_front.py:444
 msgid "Port or WebREPL"
 msgstr "ポート か WebREPL"
 
-#: thonny/plugins/micropython/mp_front.py:583
+#: thonny/plugins/micropython/mp_front.py:589
 msgid "Password"
 msgstr "パスワード"
 
@@ -1655,290 +1655,303 @@ msgstr "ファイルダイアログをメインウインドウの後ろに表示
 msgid "Environment variables (one KEY=VALUE per line)"
 msgstr "環境変数(1行には1つのKEY=VALUE)"
 
-#: thonny/base_file_browser.py:715
+#: thonny/base_file_browser.py:718
 msgid "New file"
 msgstr "新しいファイル"
 
-#: thonny/base_file_browser.py:733
+#: thonny/base_file_browser.py:736
 msgid "Rename"
 msgstr "リネーム"
 
-#: thonny/base_file_browser.py:919
+#: thonny/base_file_browser.py:924
 msgid "Rename '%s'"
-msgstr ""
+msgstr "'%s'に変更します"
 
-#: thonny/base_file_browser.py:919
+#: thonny/base_file_browser.py:924
 msgid "Enter new name"
 msgstr "新しい名前を入力"
 
-#: thonny/base_file_browser.py:1007
+#: thonny/base_file_browser.py:1012
 msgid "Paste failed"
 msgstr "貼り付けに失敗"
 
-#: thonny/base_file_browser.py:1007
+#: thonny/base_file_browser.py:1012
 msgid "There are conflicting folders"
 msgstr "競合するフォルダがあります"
 
-#: thonny/base_file_browser.py:1129
+#: thonny/base_file_browser.py:1140
 msgid "File already exists"
 msgstr "ファイルがすでに存在します"
 
-#: thonny/base_file_browser.py:1194
+#: thonny/base_file_browser.py:1208
 msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
-msgstr ""
+msgstr "テキスト ファイルの場合は、ファイルを右クリックして [Configure ... files] を選択すると、Thonny で開くように設定できます。"
 
 #: thonny/editors.py:35
 msgid "Python files"
-msgstr ""
+msgstr "Pythonファイル"
 
-#: thonny/editors.py:119 thonny/editors.py:182
+#: thonny/editors.py:122 thonny/editors.py:189
 msgid "<untitled>"
-msgstr ""
+msgstr "<無題>"
 
-#: thonny/editors.py:146
+#: thonny/editors.py:149
 msgid "File is gone"
-msgstr ""
+msgstr "ファイルが見つかりません"
 
-#: thonny/editors.py:149
+#: thonny/editors.py:152
 msgid "Do you want to also close the editor?"
-msgstr ""
+msgstr "エディタも閉じますか?"
 
-#: thonny/editors.py:165
+#: thonny/editors.py:168
 msgid "External modification"
-msgstr ""
+msgstr "外装変更"
 
-#: thonny/editors.py:168
+#: thonny/editors.py:171
 msgid "Do you want to discard current editor content and reload the file from disk?"
-msgstr ""
+msgstr "現在のエディタの内容を破棄して、ディスクからファイルを再読み込みしますか?"
 
-#: thonny/editors.py:572
+#: thonny/editors.py:580
 msgid "Python files usually have .py extension."
-msgstr ""
+msgstr "通常、Python ファイルには拡張子 .py が付きます。"
 
-#: thonny/editors.py:574
+#: thonny/editors.py:582
 msgid "Did you mean '%s'?"
-msgstr ""
+msgstr "「%s」のことですか?"
 
-#: thonny/editors.py:733
+#: thonny/editors.py:751
 msgid "Move / rename..."
-msgstr ""
+msgstr "移動/名前変更..."
 
-#: thonny/editors.py:742
+#: thonny/editors.py:760
 msgid "Go to line..."
-msgstr ""
+msgstr "行に移動..."
 
-#: thonny/editors.py:977
+#: thonny/editors.py:1003
 msgid "Line number"
-msgstr ""
+msgstr "行番号"
 
-#: thonny/editors.py:1123
+#. ファイル->ファイル群にするのかは検討が必要
+#: thonny/editors.py:1149
 msgid "Do you want to save files before closing?"
-msgstr ""
+msgstr "終了する前にファイルをセーブしますか?"
 
-#: thonny/editors.py:1125
+#: thonny/editors.py:1151
 msgid "Do you want to save file before closing?"
-msgstr ""
+msgstr "終了する前にファイルをセーブしますか?"
 
-#: thonny/editors.py:1128
+#: thonny/editors.py:1154
 msgid "Save On Close"
-msgstr ""
+msgstr "閉じるときに保存"
 
 #: thonny/misc_utils.py:513
 msgid "Command not available"
-msgstr ""
+msgstr "このコマンドは使用不可能です。"
 
 #: thonny/misc_utils.py:514
 msgid "This command is not available if Thonny is run via Flatpak"
-msgstr ""
+msgstr "このコマンドは、Thonny が Flatpak 経由で実行されている場合は使用できません"
 
-#: thonny/workbench.py:686 thonny/workbench.py:786
+#: thonny/workbench.py:694 thonny/workbench.py:794
 msgid "Support Ukraine"
-msgstr ""
+msgstr "ウクライナを支援してください"
 
 #: thonny/plugins/backend_config_page.py:91
 msgid "Which kind of interpreter should Thonny use for running your code?"
-msgstr ""
+msgstr "あなたのコードを実行するために、Thonny はどの種類のインタープリターを使用する必要がありますか?"
 
 #: thonny/plugins/calltip.py:159
 msgid "Show parameter info"
-msgstr ""
+msgstr "パラメータ情報を表示"
 
 #: thonny/plugins/editor_config_page.py:41
 msgid "Automatically show parameter info after typing '('"
-msgstr ""
+msgstr "「(」を入力した後にパラメーター情報を自動的に表示する"
 
 #: thonny/plugins/editor_config_page.py:47
 msgid "Automatically propose completions while typing"
-msgstr ""
+msgstr "入力中に補完を自動的に提案する"
 
 #: thonny/plugins/editor_config_page.py:52
 msgid "Automatically show documentation for completions"
-msgstr ""
+msgstr "補完のドキュメントを自動的に表示する"
 
 #: thonny/plugins/editor_config_page.py:57
 msgid "Request completions with Tab-key in editors"
-msgstr ""
+msgstr "エディターで Tab キーを使用して補完を要求する"
 
 #: thonny/plugins/editor_config_page.py:62
 msgid "Request completions with Tab-key in Shell"
-msgstr ""
+msgstr "シェルで Tab キーを使用して補完を要求する"
 
 #: thonny/plugins/goto_definition.py:58
 msgid "Problem"
-msgstr ""
+msgstr "問題"
 
 #: thonny/plugins/goto_definition.py:58
 msgid "Could not find definition"
-msgstr ""
+msgstr "定義が見つかりませんでした"
 
 #: thonny/plugins/shell_config_page.py:17
 msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
-msgstr ""
+msgstr "新しいプロセスを開始する前にシェルをクリアします (実行、デバッグ、停止/再起動など)。"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:170
+#: thonny/plugins/cpython_frontend/cp_front.py:171
 msgid "Thonny's Python"
-msgstr ""
+msgstr "ThonnyのPython"
 
-#: thonny/plugins/micropython/mp_front.py:487
+#: thonny/plugins/micropython/mp_front.py:492
 msgid "Interrupt working program on connect"
-msgstr ""
+msgstr "接続時に作業中のプログラムを中断する"
 
-#: thonny/plugins/micropython/mp_front.py:494
+#: thonny/plugins/micropython/mp_front.py:500
 msgid "Synchronize device's real time clock"
-msgstr ""
+msgstr "デバイスのリアルタイム クロックを同期する"
 
-#: thonny/plugins/micropython/mp_front.py:500
+#: thonny/plugins/micropython/mp_front.py:506
 msgid "Use local time in real time clock"
-msgstr ""
+msgstr "リアルタイム クロックで現地時間を使用する"
 
-#: thonny/plugins/micropython/mp_front.py:506
+#: thonny/plugins/micropython/mp_front.py:512
 msgid "Restart interpreter before running a script"
-msgstr ""
+msgstr "スクリプトを実行する前にインタープリターを再起動する"
 
 #: thonny/plugins/micropython/pip_gui.py:24
 msgid "This doesn't look like MicroPython/CircuitPython package.\n"
 "Are you sure you want to install it?"
-msgstr ""
+msgstr "これは MicroPython/CircuitPython パッケージのようには見えません。\n"
+"インストールしてもよろしいですか?"
 
-#: thonny/base_file_browser.py:844
+#: thonny/base_file_browser.py:849
 msgid "Moving to Trash"
-msgstr ""
+msgstr "ゴミ箱に移動"
 
-#: thonny/base_file_browser.py:845
+#: thonny/base_file_browser.py:850
 msgid "Move %s to Trash?"
-msgstr ""
+msgstr "%sをゴミ箱に捨てますか?"
 
-#: thonny/base_file_browser.py:852
+#: thonny/base_file_browser.py:857
 msgid "Moving %s to Trash"
-msgstr ""
+msgstr "%sをゴミ箱に捨てています"
 
-#: thonny/base_file_browser.py:659
+#: thonny/base_file_browser.py:662
 msgid "Open in default external app"
-msgstr ""
+msgstr "デフォルトの外部アプリで開く"
 
-#: thonny/base_file_browser.py:1192
+#: thonny/base_file_browser.py:1206
 msgid "Opening remote files in external app is not supported."
-msgstr ""
+msgstr "外部アプリでリモート ファイルを開くことはサポートされていません。"
 
-#: thonny/base_file_browser.py:1199
+#: thonny/base_file_browser.py:1213
 msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
-msgstr ""
+msgstr "ファイルを外部アプリで開く必要がある場合は、ローカル ディレクトリにダウンロードして、そこから開きます。"
 
-#: thonny/editors.py:147
+#. ファイルが開けないという意味で使用されると考えたため、このような翻訳としました。
+#: thonny/editors.py:150
 msgid "Looks like '%s' was deleted or moved."
-msgstr ""
+msgstr "'%s'は削除または移動されたため、開けません。"
 
-#: thonny/editors.py:166
+#: thonny/editors.py:169
 msgid "Looks like '%s' was modified outside of the editor."
-msgstr ""
+msgstr "'%s'はエディタ外で変更が加えられています。"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:229
+#: thonny/plugins/cpython_frontend/cp_front.py:230
 msgid "NB! Thonny only supports Python %s and later"
-msgstr ""
+msgstr "注意! ThonnyはPython %s 以上のみをサポートしています。"
 
-#: thonny/editors.py:977
+#: thonny/editors.py:1003
 msgid "Go to line"
-msgstr ""
+msgstr "行に行く"
 
-#: thonny/workbench.py:689
+#: thonny/workbench.py:697
 msgid "Support"
-msgstr ""
+msgstr "サポート"
 
-#: thonny/editors.py:386 thonny/editors.py:401
+#: thonny/editors.py:393 thonny/editors.py:408
 msgid "Could not save"
-msgstr ""
+msgstr "保存できませんでした"
 
 #: thonny/plugins/general_config_page.py:135
 msgid "Warning"
-msgstr ""
+msgstr "警告"
 
 #: thonny/plugins/general_config_page.py:136
 msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
 "Did you intend this?"
-msgstr ""
+msgstr "環境変数の値を引用すると、引用符は値の一部になります。\n"
+"これは意図したことですか?"
 
-#: thonny/workbench.py:859
+#: thonny/workbench.py:867
 msgid "Install MicroPython"
-msgstr ""
+msgstr "MicroPythonをインストール"
 
-#: thonny/workbench.py:863
+#: thonny/workbench.py:871
 msgid "Install CircuitPython"
-msgstr ""
+msgstr "CircuitPythonをインストール"
 
 #: thonny/plugins/backend_config_page.py:212
 msgid "Make uploaded shebang scripts executable"
-msgstr ""
+msgstr "アップロードされたシバンスクリプトを実行可能にする"
 
 #: thonny/plugins/editor_config_page.py:91
 msgid "Make saved shebang scripts executable"
-msgstr ""
+msgstr "保存されたシバンスクリプトを実行可能にする"
 
 #: thonny/plugins/files.py:224
 msgid "Activate virtual environment"
-msgstr ""
+msgstr "仮想環境をアクティブにする"
 
 #: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
 msgid "Target"
-msgstr ""
+msgstr "ターゲット"
 
 #: thonny/plugins/pythontutor.py:41
 msgid "Visualize current script at Python Tutor"
-msgstr ""
+msgstr "Python Tutor で現在のスクリプトを視覚化する"
 
-#: thonny/plugins/todo_view.py:42
+#: thonny/plugins/todo_view.py:44
 msgid "Line"
-msgstr ""
+msgstr "行"
 
-#: thonny/plugins/todo_view.py:43
+#: thonny/plugins/todo_view.py:45
 msgid "Info"
-msgstr ""
+msgstr "インフォ"
 
-#: thonny/plugins/todo_view.py:121
+#: thonny/plugins/todo_view.py:123
 msgid "No line marked with #todo found"
-msgstr ""
+msgstr "#todo でマークされた行が見つかりません"
 
-#: thonny/plugins/todo_view.py:141
+#: thonny/plugins/todo_view.py:143
 msgid "TODO"
-msgstr ""
+msgstr "TODO"
 
+#. インストールとアップデートの略語が無いため、英語自体が難しくない点と、文字数的に英語のままの方が良いと判断しました。
 #: thonny/plugins/circuitpython/cirpy_front.py:98
-#: thonny/plugins/micropython/mp_front.py:530
+#: thonny/plugins/micropython/mp_front.py:536
 msgid "Install or update %s"
-msgstr ""
+msgstr "Install or update %s"
 
 #: thonny/plugins/cpython_frontend/__init__.py:24
 msgid "Local Python 3"
-msgstr ""
+msgstr "ローカル Python 3"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:239
+#: thonny/plugins/cpython_frontend/cp_front.py:240
 msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
-msgstr ""
+msgstr "仮想環境フォルダーまたは内部の 'pyveng.cfg' ファイルを選択するときに、ファイル ナビゲーションの右クリック コンテキスト メニューから既存の仮想環境をアクティブにすることもできます。"
 
 #: thonny/plugins/ev3/__init__.py:72
 msgid "Preparations (skip the VS Code part)"
-msgstr ""
+msgstr "準備(VS Codeの部分はスキップ)"
 
 #: thonny/plugins/ev3/__init__.py:78
 msgid "Default password"
-msgstr ""
+msgstr "デフォルトのパスワード"
+
+#: thonny/running.py:338
+msgid "Information"
+msgstr "インフォメーション"
+
+#: thonny/running.py:339
+msgid "For debugging the program must be saved first."
+msgstr "デバッグするには、まずプログラムを保存する必要があります。"
 
diff --git a/thonny/locale/ko_KR/LC_MESSAGES/thonny.mo b/thonny/locale/ko_KR/LC_MESSAGES/thonny.mo
index 5bd4c20..cc69ed6 100644
Binary files a/thonny/locale/ko_KR/LC_MESSAGES/thonny.mo and b/thonny/locale/ko_KR/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/lt_LT/LC_MESSAGES/thonny.mo b/thonny/locale/lt_LT/LC_MESSAGES/thonny.mo
index 1de9750..18171aa 100644
Binary files a/thonny/locale/lt_LT/LC_MESSAGES/thonny.mo and b/thonny/locale/lt_LT/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/nb_NO/LC_MESSAGES/thonny.mo b/thonny/locale/nb_NO/LC_MESSAGES/thonny.mo
index ec77f15..a33aca9 100644
Binary files a/thonny/locale/nb_NO/LC_MESSAGES/thonny.mo and b/thonny/locale/nb_NO/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/nb_NO/LC_MESSAGES/thonny.po b/thonny/locale/nb_NO/LC_MESSAGES/thonny.po
index 3c783a0..a8dac4d 100644
--- a/thonny/locale/nb_NO/LC_MESSAGES/thonny.po
+++ b/thonny/locale/nb_NO/LC_MESSAGES/thonny.po
@@ -7,71 +7,63 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: nb\n"
 
-#: thonny/workbench.py:346
+#: thonny/workbench.py:369
 msgid "File"
 msgstr "Fil"
 
-#: thonny/workbench.py:347
+#: thonny/workbench.py:370
 msgid "Edit"
 msgstr "Rediger"
 
-#: thonny/workbench.py:348
+#: thonny/workbench.py:371
 msgid "View"
 msgstr "Vis"
 
-#: thonny/running.py:122 thonny/workbench.py:349
+#: thonny/running.py:116 thonny/workbench.py:372
 msgid "Run"
 msgstr "Kjør"
 
-#: thonny/workbench.py:350
+#: thonny/workbench.py:373
 msgid "Tools"
 msgstr "Verktøy"
 
-#: thonny/plugins/help/__init__.py:74 thonny/workbench.py:351
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:374
 msgid "Help"
 msgstr "Hjelp"
 
-#: thonny/plugins/cpython/__init__.py:610
-msgid "Alternative Python 3 interpreter or virtual environment"
-msgstr "Alternativ Python 3 IDE"
-
-#: thonny/plugins/cpython/__init__.py:618
-msgid "A special virtual environment (deprecated)"
-msgstr "Et spesielt virtuelt miljø (utfaset)"
-
-#: thonny/workbench.py:571
+#: thonny/workbench.py:591
 msgid "Exit"
 msgstr "Avslutt"
 
-#: thonny/workbench.py:598
+#: thonny/workbench.py:618
 msgid "Decrease font size"
-msgstr "Minke fontstørrelse"
+msgstr "Mink fontstørrelse"
 
-#: thonny/workbench.py:610
+#: thonny/workbench.py:630
 msgid "Focus editor"
 msgstr "Fokus redigering"
 
-#: thonny/workbench.py:619
+#: thonny/workbench.py:639
 msgid "Focus shell"
 msgstr "Fokus shell"
 
-#: thonny/workbench.py:630
+#: thonny/workbench.py:650
 msgid "Maximize view"
 msgstr "Maksimer visning"
 
-#: thonny/workbench.py:642
+#: thonny/workbench.py:662
 msgid "Full screen"
 msgstr "Fullskjerm"
 
-#: thonny/workbench.py:1366
+#: thonny/workbench.py:1465
 msgid "Program arguments"
-msgstr "Program argumenter"
+msgstr "Programargumenter"
 
-#: thonny/plugins/about.py:28 thonny/plugins/about.py:163
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:151
 msgid "About Thonny"
 msgstr "Om Thonny"
 
-#: thonny/plugins/about.py:81
+#: thonny/plugins/about.py:77
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -86,7 +78,7 @@ msgstr "\n"
 "Raspberry Pi Foundation\n"
 "and Cybernetica AS"
 
-#: thonny/plugins/about.py:107
+#: thonny/plugins/about.py:97
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -96,61 +88,57 @@ msgid "This program comes with\n"
 msgstr "Dette programmet  er \n"
 "ABSOLUTT UTEN GARANTI!\n"
 "Det er gratis programvare, og du er\n"
-" fri til å distributere det videre under \n"
+"fri til å distributere det videre under \n"
 "bestemte vilkår, se\n"
 "https://opensource.org/licenses/MIT\n"
 "for detailjer"
 
-#: thonny/plugins/about.py:152
+#: thonny/plugins/about.py:140
 msgid "Version history"
 msgstr "Versjonshistorie"
 
-#: thonny/plugins/about.py:159
+#: thonny/plugins/about.py:147
 msgid "Report problems"
 msgstr "Rapportere problem"
 
-#: thonny/plugins/assistant_config_page.py:31
+#: thonny/plugins/assistant_config_page.py:16
 msgid "Open Assistant automatically when program crashes with an exception"
-msgstr "Åpen assistent automatisk når programmet krasjer på \n"
-"grunn av et unntak."
+msgstr "Åpne assistent automatisk når programmet krasjer på \n"
+"grunn av et unntak"
 
-#: thonny/plugins/assistant_config_page.py:38
+#: thonny/plugins/assistant_config_page.py:23
 msgid "Open Assistant automatically when it has warnings for your code"
-msgstr "Åpen assistent automatisk når det er varsler for din kode."
+msgstr "Åpne assistent automatisk når det er varsler for din kode."
 
-#: thonny/plugins/assistant_config_page.py:45
+#: thonny/plugins/assistant_config_page.py:30
 msgid "Perform selected Pylint checks"
 msgstr "Velg utvalgt Pylint kontroll"
 
-#: thonny/plugins/assistant_config_page.py:49
+#: thonny/plugins/assistant_config_page.py:34
 msgid "Perform MyPy checks"
 msgstr "Velg MyPy kontroll"
 
-#: thonny/plugins/assistant_config_page.py:51
+#: thonny/plugins/assistant_config_page.py:36
 msgid "Disabled checks (one id per line)"
 msgstr "Slå av kontroll (en id per linje)"
 
-#: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:89
+#: thonny/assistance.py:985 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Assistent"
 
-#: thonny/plugins/autocomplete.py:333
+#: thonny/plugins/autocomplete.py:522
 msgid "Auto-complete"
 msgstr "Autofullfør"
 
-#: thonny/plugins/backend_config_page.py:84
-msgid "Which interpreter or device should Thonny use for running your code?"
-msgstr "Hvilken tolk eller enhet skal Thonny bruke for å kjøre din kode?"
-
-#: thonny/plugins/backend_config_page.py:320
+#: thonny/plugins/backend_config_page.py:337
 msgid "Interpreter"
 msgstr "Tolk"
 
-#: thonny/plugins/birdseye_frontend.py:54
+#: thonny/plugins/birdseye_frontend.py:55
 msgid "About Birdseye"
 msgstr "Om Birdseye"
 
-#: thonny/plugins/birdseye_frontend.py:55
+#: thonny/plugins/birdseye_frontend.py:56
 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?"
@@ -158,21 +146,21 @@ msgstr "Birdseye er en Python feilsøker som må installeres separat.\n"
 "\n"
 "Ønsker du å åpne hjelp siden for å lære mer?"
 
-#: thonny/plugins/birdseye_frontend.py:83
+#: thonny/plugins/birdseye_frontend.py:84
 msgid "Debug current script (birdseye)"
 msgstr "Feilsøk den aktuelle koden?"
 
-#: thonny/plugins/commenting_indenting.py:144
+#: thonny/plugins/commenting_indenting.py:172
 msgid "Toggle comment"
 msgstr "Kommentarer av/på"
 
-#: thonny/plugins/commenting_indenting.py:154
+#: thonny/plugins/commenting_indenting.py:182
 msgid "Comment out"
-msgstr "Merk"
+msgstr "Kommenter ut"
 
-#: thonny/plugins/commenting_indenting.py:164
+#: thonny/plugins/commenting_indenting.py:192
 msgid "Uncomment"
-msgstr "Ikke merk"
+msgstr "Fjern kommentar"
 
 #: thonny/plugins/common_editing_commands.py:21
 msgid "Undo"
@@ -182,15 +170,18 @@ msgstr "Angre"
 msgid "Redo"
 msgstr "Gjør om"
 
-#: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2191
+#: thonny/base_file_browser.py:724 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2295
 msgid "Cut"
 msgstr "Klipp ut"
 
-#: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2192
+#: thonny/base_file_browser.py:725 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2296
 msgid "Copy"
 msgstr "Kopier"
 
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2193
+#: thonny/base_file_browser.py:727 thonny/base_file_browser.py:733
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2297
 msgid "Paste"
 msgstr "Lim inn"
 
@@ -198,15 +189,15 @@ msgstr "Lim inn"
 msgid "Select all"
 msgstr "Velg alle"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1397
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1401
 msgid "Run to cursor"
 msgstr "Kjør til markøren"
 
-#: thonny/plugins/debugger.py:980
+#: thonny/plugins/debugger.py:982
 msgid "Can't close yet"
 msgstr "Kan ikke lukkes"
 
-#: thonny/plugins/debugger.py:981
+#: thonny/plugins/debugger.py:983
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr "Bruk \"Stopp\"-kommandoen om du vil stanse feilsøking."
 
@@ -214,49 +205,41 @@ msgstr "Bruk \"Stopp\"-kommandoen om du vil stanse feilsøking."
 msgid "Dock user windows"
 msgstr "Forankre brukervinduer"
 
-#: thonny/plugins/editor_config_page.py:15
+#: thonny/plugins/editor_config_page.py:20
 msgid "Highlight matching names"
 msgstr "Fremhev matsjende navn"
 
-#: thonny/plugins/editor_config_page.py:21
+#: thonny/plugins/editor_config_page.py:26
 msgid "Highlight local variables"
 msgstr "Fremhev lokale variabler"
 
-#: thonny/plugins/editor_config_page.py:26
+#: thonny/plugins/editor_config_page.py:31
 msgid "Highlight parentheses"
 msgstr "Fremhev paranteser"
 
-#: thonny/plugins/editor_config_page.py:27
+#: thonny/plugins/editor_config_page.py:32
 msgid "Highlight syntax elements"
 msgstr "Fremhev syntaks elementer"
 
-#: thonny/plugins/editor_config_page.py:30
+#: thonny/plugins/editor_config_page.py:36
 msgid "Highlight current line (requires reopening the editor)"
-msgstr "Fremhev den aktuelle linje (krever at du åpner editor igjen)."
+msgstr "Fremhev den aktuelle linja (krever at du gjenåpner editor)."
 
-#: thonny/plugins/editor_config_page.py:35
-msgid "Allow code completion with Tab-key in editors"
-msgstr "Tillat fullføring av kode med Tab-tast i editor"
-
-#: thonny/plugins/editor_config_page.py:41
-msgid "Allow code completion with Tab-key in Shell"
-msgstr "Tillat fullføring av kode med Tab-tast i konsoll"
-
-#: thonny/plugins/editor_config_page.py:45
+#: thonny/plugins/editor_config_page.py:73
 msgid "Show line numbers"
 msgstr "Vis linjenummer"
 
-#: thonny/plugins/editor_config_page.py:48
+#: thonny/plugins/editor_config_page.py:76
 msgid "Recommended maximum line length\n"
 "(Set to 0 to turn off margin line)"
 msgstr "Anbefalt maksimal linjelengde\n"
 "(Sett til 0 for å slå av marglinje)"
 
-#: thonny/plugins/editor_config_page.py:69
+#: thonny/plugins/editor_config_page.py:104
 msgid "Editor"
 msgstr "Editor"
 
-#: thonny/plugins/event_logging.py:206
+#: thonny/plugins/event_logging.py:207
 msgid "Export usage logs..."
 msgstr "Eksporter log..."
 
@@ -264,71 +247,71 @@ msgstr "Eksporter log..."
 msgid "Events"
 msgstr "Hendelse"
 
-#: thonny/plugins/files.py:550
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "Filer"
 
-#: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:437
 msgid "Find & Replace"
 msgstr "Finn og erstatt"
 
-#: thonny/plugins/find_replace.py:63
+#: thonny/plugins/find_replace.py:66
 msgid "Find:"
-msgstr "Finn"
+msgstr "Finn:"
 
-#: thonny/plugins/find_replace.py:74
+#: thonny/plugins/find_replace.py:87
 msgid "Replace with:"
 msgstr "Erstatt med:"
 
-#: thonny/plugins/find_replace.py:92
+#: thonny/plugins/find_replace.py:105
 msgid "Case sensitive"
 msgstr "Store og små bokstaver"
 
-#: thonny/plugins/find_replace.py:99
+#: thonny/plugins/find_replace.py:112
 msgid "Up"
 msgstr "Opp"
 
-#: thonny/plugins/find_replace.py:103
+#: thonny/plugins/find_replace.py:116
 msgid "Down"
 msgstr "Ned"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:125
 msgid "Find"
 msgstr "Finn"
 
-#: thonny/plugins/find_replace.py:122
+#: thonny/plugins/find_replace.py:135
 msgid "Replace"
 msgstr "Erstatt"
 
-#: thonny/plugins/find_replace.py:130
+#: thonny/plugins/find_replace.py:143
 msgid "Replace+Find"
 msgstr "Erstatt + Finn"
 
-#: thonny/plugins/find_replace.py:140
+#: thonny/plugins/find_replace.py:153
 msgid "Replace all"
-msgstr "Erstall alle"
+msgstr "Erstatt alle"
 
-#: thonny/plugins/find_replace.py:236
+#: thonny/plugins/find_replace.py:253
 msgid "Enter string to be replaced."
 msgstr "Skrev tekst som skal erstattes"
 
-#: thonny/plugins/find_replace.py:320
+#: thonny/plugins/find_replace.py:338
 msgid "The specified text was not found!"
 msgstr "Den valgte teksten ble ikke funnet"
 
-#: thonny/plugins/general_config_page.py:14
+#: thonny/plugins/general_config_page.py:15
 msgid "Allow only single Thonny instance"
 msgstr "Tillat bare en enkel Thonne instans"
 
-#: thonny/plugins/general_config_page.py:21
+#: thonny/plugins/general_config_page.py:22
 msgid "Reopen all files from previous session"
-msgstr "Gjenåpen alle filer fra forrige seksjon"
+msgstr "Gjenåpne alle filer fra forrige økt"
 
-#: thonny/plugins/general_config_page.py:27
+#: thonny/plugins/general_config_page.py:37
 msgid "Disable notification sound"
 msgstr "Slå av meldingslyd"
 
-#: thonny/plugins/general_config_page.py:76
+#: thonny/plugins/general_config_page.py:86
 msgid "Font scaling mode"
 msgstr "Font skaleringsmodus"
 
@@ -342,7 +325,7 @@ msgstr "Heap modus er på.\n"
 msgid "Heap"
 msgstr "Heap"
 
-#: thonny/plugins/general_config_page.py:43
+#: thonny/plugins/general_config_page.py:53
 msgid "Language"
 msgstr "Språk"
 
@@ -362,19 +345,19 @@ msgstr "Denne boksen er ment for arbeidsnotatene dine - oppdragsinstruksjoner, k
 msgid "Notes"
 msgstr "Notat"
 
-#: thonny/plugins/object_inspector.py:111
+#: thonny/plugins/object_inspector.py:116
 msgid "Previous object"
 msgstr "Forrige prosjekt"
 
-#: thonny/plugins/object_inspector.py:114
+#: thonny/plugins/object_inspector.py:119
 msgid "Next object"
 msgstr "Neste objekt"
 
-#: thonny/plugins/object_inspector.py:704
+#: thonny/plugins/object_inspector.py:733
 msgid "Object inspector"
-msgstr "Objekt inspektør"
+msgstr "Objektinspektør"
 
-#: thonny/plugins/outline.py:138
+#: thonny/plugins/outline.py:148
 msgid "Outline"
 msgstr "Disposisjon"
 
@@ -382,295 +365,265 @@ msgstr "Disposisjon"
 msgid "Pygame Zero mode"
 msgstr "Pygame Zero mode"
 
-#: thonny/plugins/pip_gui.py:78
-msgid "Find package from PyPI"
-msgstr "Finn pakke i PyPl"
-
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:79
 msgid "Uninstall"
-msgstr "Avinnstaller"
+msgstr "Avinstaller"
 
-#: thonny/editors.py:586 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448
-#: thonny/ui_utils.py:1770 thonny/workdlg.py:155
+#: thonny/editors.py:685 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
+#: thonny/ui_utils.py:1872 thonny/workdlg.py:162
 msgid "Close"
 msgstr "Lukk"
 
-#: thonny/plugins/pip_gui.py:347
+#: thonny/plugins/pip_gui.py:397
 msgid "Click "
-msgstr "Klikk"
+msgstr "Klikk "
 
-#: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382
+#: thonny/plugins/pip_gui.py:398 thonny/plugins/pip_gui.py:409
 msgid "here"
 msgstr "her"
 
-#: thonny/plugins/pip_gui.py:73
+#: thonny/plugins/pip_gui.py:76
 msgid "Upgrade"
 msgstr "Oppgradere"
 
-#: thonny/plugins/esp/__init__.py:365
-#: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70
+#: thonny/plugins/esp/__init__.py:349
+#: thonny/plugins/micropython/uf2dialog.py:410 thonny/plugins/pip_gui.py:73
 msgid "Install"
 msgstr "Installer"
 
-#: thonny/plugins/pip_gui.py:491
+#: thonny/plugins/pip_gui.py:535
 msgid "Could not find the package from PyPI."
 msgstr "Kan ikke finne pakken i PyPI"
 
-#: thonny/plugins/pip_gui.py:511
+#: thonny/plugins/pip_gui.py:557
 msgid "Latest stable version"
 msgstr "Siste stabile versjon"
 
-#: thonny/plugins/pip_gui.py:513
+#: thonny/plugins/pip_gui.py:559
 msgid "Latest version"
 msgstr "Siste versjon"
 
-#: thonny/plugins/pip_gui.py:514
+#: thonny/plugins/pip_gui.py:561
 msgid "Summary"
 msgstr "Oppsummering"
 
-#: thonny/plugins/pip_gui.py:515
+#: thonny/plugins/pip_gui.py:563
 msgid "Author"
 msgstr "Forfatter"
 
-#: thonny/plugins/pip_gui.py:516
+#: thonny/plugins/pip_gui.py:565
 msgid "Homepage"
 msgstr "Hjemmeside"
 
-#: thonny/plugins/pip_gui.py:518
+#: thonny/plugins/pip_gui.py:567
 msgid "Bugtracker"
 msgstr "Feilsporing"
 
-#: thonny/plugins/pip_gui.py:520
+#: thonny/plugins/pip_gui.py:569
 msgid "Documentation"
 msgstr "Dokumentasjon"
 
-#: thonny/plugins/pip_gui.py:522
+#: thonny/plugins/pip_gui.py:571
 msgid "PyPI page"
 msgstr "\n"
 "PyPI side"
 
-#: thonny/plugins/pip_gui.py:526
+#: thonny/plugins/pip_gui.py:611
 msgid "Requires"
 msgstr "Krever"
 
-#: thonny/plugins/pip_gui.py:652
+#: thonny/plugins/pip_gui.py:743
 msgid "Really uninstall?"
 msgstr "Vil du virkelig avinstallere?"
 
-#: thonny/plugins/pip_gui.py:657
+#: thonny/plugins/pip_gui.py:748
 msgid "Are you sure you want to uninstall it?"
-msgstr "Er du sikker på at du vil avinstallerer det?"
+msgstr "Er du sikker på at du vil avinstallere det?"
 
-#: thonny/plugins/variables.py:19
+#: thonny/plugins/variables.py:22
 msgid "Back to\n"
 "current frame"
 msgstr "Tilbake til gjeldende ramme"
 
-#: thonny/plugins/variables.py:138
+#: thonny/plugins/variables.py:80 thonny/plugins/variables.py:82
+#: thonny/plugins/variables.py:145
 msgid "Variables"
 msgstr "Variabler"
 
-#: thonny/base_file_browser.py:1310
+#: thonny/base_file_browser.py:1572
 msgid "This computer"
 msgstr "Denne datamaskinen"
 
-#: thonny/base_file_browser.py:617
+#: thonny/base_file_browser.py:644
 msgid "Refresh"
 msgstr "Oppfrisk"
 
-#: thonny/base_file_browser.py:630
+#: thonny/base_file_browser.py:653
 msgid "Focus into"
 msgstr "Fokuser på "
 
-#: thonny/base_file_browser.py:1161
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
+#: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
 msgid "Error"
 msgstr "Feil"
 
-#: thonny/base_file_browser.py:1161
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
 msgid "You need to select a file!"
 msgstr "Du må velge en fil!"
 
-#: thonny/base_file_browser.py:1165
+#: thonny/base_file_browser.py:1423
 msgid "Overwrite?"
 msgstr "Overskriv?"
 
-#: thonny/base_file_browser.py:1165
+#: thonny/base_file_browser.py:1423
 msgid "Do you want to overwrite '%s' ?"
 msgstr "\n"
 "Vi du overskrive '%s' ?"
 
-#: thonny/editors.py:551 thonny/editors.py:553
+#: thonny/editors.py:650 thonny/editors.py:652
 msgid "New"
 msgstr "Ny"
 
-#: thonny/editors.py:564
+#: thonny/editors.py:663
 msgid "Open..."
-msgstr "Åpen"
+msgstr "Åpne..."
 
-#: thonny/editors.py:566
+#: thonny/editors.py:665
 msgid "Load"
 msgstr "Last"
 
-#: thonny/editors.py:575
+#: thonny/editors.py:674
 msgid "Recent files"
 msgstr "Nylige filer"
 
-#: thonny/editors.py:597 thonny/ui_utils.py:450
+#: thonny/editors.py:696 thonny/ui_utils.py:493
 msgid "Close all"
 msgstr "Lukk alle"
 
-#: thonny/editors.py:607 thonny/editors.py:609
+#: thonny/editors.py:706 thonny/editors.py:708
 msgid "Save"
 msgstr "Lagre"
 
-#: thonny/editors.py:632
+#: thonny/editors.py:731
 msgid "Save as..."
 msgstr "Lagre som..."
 
-#: thonny/editors.py:643
+#: thonny/editors.py:742
 msgid "Save copy..."
 msgstr "Lagre kopi"
 
-#: thonny/editors.py:652
-msgid "Rename..."
-msgstr "Gi nytt navn..."
-
-#: thonny/config_ui.py:19
+#: thonny/config_ui.py:18
 msgid "Thonny options"
 msgstr "Thonny alternativer"
 
-#: thonny/running.py:121
+#: thonny/running.py:115
 msgid "Run current script"
 msgstr "Kjør gjeldende skript"
 
-#: thonny/running.py:152
+#: thonny/running.py:146
 msgid "Run current script in terminal"
-msgstr "Kjør gjeldende skrip i terminal"
+msgstr "Kjør gjeldende skript i terminal"
 
-#: thonny/running.py:165
+#: thonny/running.py:159
 msgid "Stop/Restart backend"
 msgstr "Stopp/Omstart backend"
 
-#: thonny/running.py:166
+#: thonny/running.py:160
 msgid "Stop"
 msgstr "Stopp"
 
-#: thonny/running.py:177
+#: thonny/running.py:171
 msgid "Interrupt execution"
 msgstr "Avbryt kjøring"
 
-#: thonny/running.py:190
+#: thonny/running.py:184
 msgid "Send EOF / Soft reboot"
 msgstr "Send EOF / Myk omstart"
 
-#: thonny/running.py:201
+#: thonny/running.py:195
 msgid "Disconnect"
 msgstr "Koble fra"
 
-#: thonny/running_config_page.py:23
-msgid "Known interpreters"
-msgstr "Kjente tolker"
-
-#: thonny/running_config_page.py:36
-msgid "Your interpreter isn't in the list?"
-msgstr "Er ikke din tolk i lista?"
-
-#: thonny/plugins/cpython/__init__.py:391
-msgid "NB! Thonny only supports Python 3.5 and later"
-msgstr "NB! Thonny støtter bare Python 3.5 og nyere"
-
-#: thonny/running_config_page.py:56
-msgid "Create new virtual environment"
-msgstr "Lag et nytt virtuelt miljø"
-
-#: thonny/running_config_page.py:59
-msgid "Select existing or create a new empty directory"
-msgstr "Velg eksisterede eller åpne en ny katalog"
-
-#: thonny/plugins/cpython/__init__.py:419
+#: thonny/plugins/cpython_frontend/cp_front.py:269
 msgid "Python interpreters"
 msgstr "Python tolker"
 
-#: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696
-#: thonny/plugins/pip_gui.py:709
+#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:270
+#: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
 msgid "all files"
 msgstr "alle filer"
 
-#: thonny/plugins/cpython/__init__.py:442
+#: thonny/plugins/cpython_frontend/cp_front.py:298
 msgid "Select empty directory for new virtual environment"
 msgstr "Velg en tom katalog for nytt virtuelt miljø"
 
-#: thonny/plugins/cpython/__init__.py:449
+#: thonny/plugins/cpython_frontend/cp_front.py:305
 msgid "Bad directory"
 msgstr "Feil mappe"
 
-#: thonny/plugins/cpython/__init__.py:450
+#: thonny/plugins/cpython_frontend/cp_front.py:306
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "Valgt katalog er ikke tom.\n"
 "Velg en annen eller avbryt."
 
-#: thonny/plugins/cpython/__init__.py:467
+#: thonny/plugins/cpython_frontend/cp_front.py:323
 msgid "Creating virtual environment"
 msgstr "Lag et viruelt miljø."
 
-#: thonny/shell.py:83
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "Tøm shell"
 
-#: thonny/shell.py:138
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "Plotter"
 
-#: thonny/shell.py:269
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "Tøm"
 
-#: thonny/shell.py:282
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "Vis Plotter"
 
-#: thonny/shell.py:1584
+#: thonny/shell.py:1659
 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 "Av ytelsesgrunner unngår Shell å vise veldig lange linjer i sin helhet (se Verktøy => Alternativer => Shell).\n"
 "Her kan du samhandle med det originale tekstfragmentet."
 
-#: thonny/shell.py:1595
+#: thonny/shell.py:1670
 msgid "Wrap text (may be slow)"
 msgstr "Pakk tekst (kan ta tid)"
 
-#: thonny/ui_utils.py:1765
+#: thonny/ui_utils.py:1867
 msgid "Copy to clipboard"
 msgstr "Kopier til utklippsbord"
 
-#: thonny/shell.py:1431
-msgid "Expand in Shell"
-msgstr "Utvid i Shell"
-
-#: thonny/shell.py:1637
+#: thonny/shell.py:1712
 msgid "Squeezed text (%d characters)"
 msgstr "Krymp tekst (%d bokstaver)"
 
-#: thonny/shell.py:1806
+#: thonny/shell.py:1882
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr "Plotter virtualiserer serier av\n"
 "tall skrevet ut til Shell"
 
-#: thonny/shell.py:1808
+#: thonny/shell.py:1884
 msgid "See Help for details."
 msgstr "Se Hjelp for detaljer"
 
-#: thonny/ui_utils.py:449
+#: thonny/ui_utils.py:492
 msgid "Close others"
 msgstr "Lukk andre"
 
-#: thonny/ui_utils.py:1621
+#: thonny/ui_utils.py:1722
 msgid "Copying"
 msgstr "Kopierer"
 
-#: thonny/ui_utils.py:1624
+#: thonny/ui_utils.py:1725
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -680,85 +633,65 @@ msgstr "Kopierere\n"
 "til\n"
 "  %s"
 
-#: thonny/config_ui.py:36 thonny/plugins/backend_config_page.py:273
-#: thonny/plugins/pip_gui.py:1141 thonny/ui_utils.py:114
-#: thonny/ui_utils.py:1632 thonny/workdlg.py:157 thonny/workdlg.py:201
+#: thonny/base_file_browser.py:1378 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1819
+#: thonny/workdlg.py:164 thonny/workdlg.py:209
 msgid "Cancel"
 msgstr "Avbryt"
 
-#: thonny/config_ui.py:35 thonny/plugins/backend_config_page.py:268
-#: thonny/ui_utils.py:111 thonny/workdlg.py:198
+#: thonny/base_file_browser.py:1369 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:111 thonny/plugins/backend_config_page.py:285
+#: thonny/ui_utils.py:154 thonny/ui_utils.py:1816 thonny/workdlg.py:206
 msgid "OK"
 msgstr "OK"
 
-#: thonny/ui_utils.py:1783
-msgid "Cancel the process?"
-msgstr "Avbryt prosess?"
-
-#: thonny/ui_utils.py:1784
-msgid "The process is still running.\n"
-"Are you sure you want to cancel?"
-msgstr "Prosessen kjører.\n"
-"Er du sikker på at du vil avbryte?"
-
-#: thonny/ui_utils.py:2197
+#: thonny/ui_utils.py:2301
 msgid "Select All"
 msgstr "Velg Alle"
 
-#: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:157
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:162
 msgid "Shell"
 msgstr "Shell"
 
-#: thonny/plugins/cpython/__init__.py:602
-msgid "The same interpreter which runs Thonny (default)"
-msgstr "Den samme tolken som kjører Thonny (standardvalg)"
-
-#: thonny/plugins/cpython/__init__.py:350
-msgid "This virtual environment is automatically maintained by Thonny.\n"
-""
-msgstr "Det virtuelle miljøet blir vedlikehold av Thonny."
-
-#: thonny/plugins/cpython/__init__.py:351
-msgid "Location: "
-msgstr "Plassering:"
-
-#: thonny/workbench.py:581
+#: thonny/workbench.py:601
 msgid "Options..."
 msgstr "Alternativer..."
 
-#: thonny/workbench.py:588
+#: thonny/workbench.py:608
 msgid "Increase font size"
 msgstr "Øk fontstørrelse"
 
-#: thonny/workbench.py:653
+#: thonny/workbench.py:673
 msgid "Change font size"
 msgstr "Endre fontstørrelse"
 
-#: thonny/workbench.py:654
+#: thonny/workbench.py:674
 msgid "Zoom"
 msgstr "Zoom"
 
-#: thonny/workbench.py:663
+#: thonny/workbench.py:683
 msgid "Exit Thonny"
 msgstr "Avslutt Thonny"
 
-#: thonny/workbench.py:666
+#: thonny/workbench.py:686
 msgid "Quit"
 msgstr "Avbryt"
 
-#: thonny/workbench.py:1170 thonny/workbench.py:1178
+#: thonny/workbench.py:1244 thonny/workbench.py:1252
 msgid "Overwriting theme '%s'"
 msgstr "Overskriver tema '%s'"
 
-#: thonny/workbench.py:1337
+#: thonny/workbench.py:1436
 msgid "Program arguments:"
 msgstr "Programargumenter"
 
-#: thonny/workbench.py:1391
+#: thonny/workbench.py:1490
 msgid "Regular mode"
 msgstr "Vanlig modus"
 
-#: thonny/workbench.py:1392
+#: thonny/workbench.py:1491
 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.)"
@@ -766,215 +699,208 @@ msgstr "Konfigurasjonen er oppdatert. Start Thonny på nytt for å begynne og jo
 "\n"
 "(Se 'Verktøy → Alternativer → Generelt' hvis du ombestemmer deg senere.)"
 
-#: thonny/plugins/ast_view.py:210
+#: thonny/plugins/ast_view.py:212
 msgid "Program tree"
 msgstr "Programtre"
 
-#: thonny/plugins/backend_config_page.py:323
-msgid "Select interpreter"
-msgstr "Velg tolk"
-
-#: thonny/plugins/debugger.py:1279
+#: thonny/plugins/debugger.py:1283
 msgid "Resume"
 msgstr "Oppsummer"
 
-#: thonny/plugins/debugger.py:1295
+#: thonny/plugins/debugger.py:1299
 msgid "Run / resume"
 msgstr "Kjør / oppsummer"
 
-#: thonny/plugins/debugger.py:1310
+#: thonny/plugins/debugger.py:1314
 msgid "Debug current script"
 msgstr "Feilsøk gjeldende skript"
 
-#: thonny/plugins/debugger.py:1312
+#: thonny/plugins/debugger.py:1316
 msgid "Debug"
 msgstr "Feilsøk"
 
-#: thonny/plugins/debugger.py:1323
+#: thonny/plugins/debugger.py:1327
 msgid "Debug current script (nicer)"
 msgstr "Feilsøk gjeldende skript (finere)"
 
-#: thonny/plugins/debugger.py:1335
+#: thonny/plugins/debugger.py:1339
 msgid "Debug current script (faster)"
 msgstr "Feilsøk gjeldende skript (raskere)"
 
-#: thonny/plugins/debugger.py:1346
+#: thonny/plugins/debugger.py:1350
 msgid "Step over"
 msgstr "Gå over"
 
-#: thonny/plugins/debugger.py:1348
+#: thonny/plugins/debugger.py:1352
 msgid "Over"
 msgstr "Over"
 
-#: thonny/plugins/debugger.py:1359
+#: thonny/plugins/debugger.py:1363
 msgid "Step into"
 msgstr "Gå inn i"
 
-#: thonny/plugins/debugger.py:1361
+#: thonny/plugins/debugger.py:1365
 msgid "Into"
 msgstr "Inn i"
 
-#: thonny/plugins/debugger.py:1372
+#: thonny/plugins/debugger.py:1376
 msgid "Step out"
 msgstr "Gå ut"
 
-#: thonny/plugins/debugger.py:1374
+#: thonny/plugins/debugger.py:1378
 msgid "Out"
 msgstr "Ut"
 
-#: thonny/plugins/debugger.py:1409
+#: thonny/plugins/debugger.py:1413
 msgid "Step back"
 msgstr "Gå bakover"
 
-#: thonny/plugins/debugger.py:1411
+#: thonny/plugins/debugger.py:1415
 msgid "Back"
 msgstr "Bakover"
 
-#: thonny/plugins/debugger.py:1417
+#: thonny/plugins/debugger.py:1421
 msgid "Stack"
 msgstr "Stakk"
 
-#: thonny/plugins/debugger.py:1418
+#: thonny/plugins/debugger.py:1422
 msgid "Exception"
 msgstr "Unntak"
 
-#: thonny/plugins/general_config_page.py:17
+#: thonny/plugins/general_config_page.py:18
 msgid "Log program usage events"
 msgstr "Logg hendelser fra programkjøring"
 
-#: thonny/plugins/general_config_page.py:33
+#: thonny/plugins/general_config_page.py:43
 msgid "Debug mode (provides more detailed diagnostic logs)"
-msgstr "Feilsøkingsmodus (tilbyr mer detalsjer diagnoselog)"
+msgstr "Feilsøkingsmodus (gir mer detaljert diagnose-logg)"
 
-#: thonny/plugins/general_config_page.py:57
+#: thonny/plugins/general_config_page.py:67
 msgid "UI mode"
 msgstr "UI modus"
 
-#: thonny/plugins/general_config_page.py:70
+#: thonny/plugins/general_config_page.py:80
 msgid "UI scaling factor"
 msgstr "UT skaleringsfaktor"
 
-#: thonny/plugins/general_config_page.py:89
+#: thonny/plugins/general_config_page.py:114
 msgid "NB! Restart Thonny after changing these options!"
 msgstr "NB! Start Thonny om igjen etter endringene!"
 
-#: thonny/plugins/general_config_page.py:104
+#: thonny/plugins/general_config_page.py:148
 msgid "General"
 msgstr "Generelt"
 
-#: thonny/plugins/pip_gui.py:129
+#: thonny/plugins/pip_gui.py:142
 msgid "INSTALL"
 msgstr "INSTALLER"
 
-#: thonny/plugins/pip_gui.py:365
+#: thonny/plugins/pip_gui.py:367
 msgid "Browse the packages"
 msgstr "Bla gjennom pakkene"
 
-#: thonny/plugins/pip_gui.py:368
+#: thonny/plugins/pip_gui.py:370
 msgid "With current interpreter you can only browse the packages here.\n"
 "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling."
 msgstr "Med gjeldende tolk kan du bare bla gjennom pakkene her.\n"
 "Bruk 'Verktøy → Åpne systemshell ...' for å installere, oppgradere eller avinstallere."
 
-#: thonny/plugins/pip_gui.py:376
+#: thonny/plugins/pip_gui.py:378
 msgid "Packages' directory"
 msgstr "Pakkekatalog"
 
-#: thonny/plugins/pip_gui.py:333
+#: thonny/plugins/pip_gui.py:382
 msgid "Install from PyPI"
-msgstr "Installer fra PyPI"
+msgstr "Installere fra PyPI"
 
-#: thonny/plugins/pip_gui.py:336
+#: thonny/plugins/pip_gui.py:385
 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 "Hvis du ikke vet hvor du skal finne pakken, er mest sannsynlig at du bør søke i Python Package Index. Start med å skrive inn navnet på pakken i søkeboksen over og trykke ENTER."
+msgstr "Hvis du ikke vet hvor du skal finne pakken, bør du mest sannsynlig søke i Python Package Index. Start med å skrive inn navnet på pakken i søkeboksen over og trykke ENTER."
 
-#: thonny/plugins/pip_gui.py:352
+#: thonny/plugins/pip_gui.py:402
 msgid "to locate requirements.txt file and install the packages specified in it."
-msgstr "for å finne kravet.txt-filen og installere pakkene som er spesifisert i den."
+msgstr "for å finne requirements.txt-filen og installere pakkene som er spesifisert i den."
 
-#: thonny/plugins/pip_gui.py:381
+#: thonny/plugins/pip_gui.py:408
 msgid "Click"
 msgstr "Klikk"
 
-#: thonny/plugins/pip_gui.py:386
+#: thonny/plugins/pip_gui.py:413
 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
 msgstr "for å finne og installere pakkefilen (vanligvis med .whl-, .tar.gz- eller .zip-utvidelse)."
 
-#: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393
+#: thonny/plugins/pip_gui.py:420
 msgid "Upgrade or uninstall"
-msgstr "Oppgrader eller avbryt"
+msgstr "Oppgradere eller avinstallere"
 
-#: thonny/plugins/pip_gui.py:395
+#: thonny/plugins/pip_gui.py:422
 msgid "Start by selecting the package from the left."
 msgstr "Start med å velge pakker fra venstre."
 
-#: thonny/plugins/pip_gui.py:399
+#: thonny/plugins/pip_gui.py:410
 msgid "Target:"
 msgstr "Mål:"
 
-#: thonny/plugins/pip_gui.py:401
+#: thonny/plugins/pip_gui.py:414
 msgid "virtual environment"
 msgstr "viruelt miljø"
 
-#: thonny/plugins/pip_gui.py:403
+#: thonny/plugins/pip_gui.py:412
 msgid "user site packages"
 msgstr "brukers egne pakker"
 
-#: thonny/plugins/pip_gui.py:407
+#: thonny/plugins/pip_gui.py:430
 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
 msgstr "Denne dialogboksen viser alle tilgjengelige pakker, men tillater bare oppgradering og avinstallering av pakker fra"
 
-#: thonny/plugins/pip_gui.py:417
+#: thonny/plugins/pip_gui.py:440
 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means."
 msgstr "Nye pakker vil også bli installert i denne katalogen. Andre steder må administreres på alternative måter."
 
-#: thonny/plugins/pip_gui.py:441
+#: thonny/plugins/pip_gui.py:485
 msgid "Installed version:"
 msgstr "Installert versjon"
 
-#: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443
+#: thonny/plugins/pip_gui.py:487
 msgid "Installed to:"
 msgstr "Installert til:"
 
-#: thonny/plugins/pip_gui.py:494
+#: thonny/plugins/pip_gui.py:538
 msgid "Please check your spelling!"
 msgstr "Vennligst sjekk rettskriving!"
 
-#: thonny/plugins/pip_gui.py:512
-msgid "You need to enter"
-msgstr "Du trenger å taste inn"
-
-#: thonny/plugins/pip_gui.py:498
+#: thonny/plugins/pip_gui.py:542
 msgid "Could not find the package info from PyPI."
 msgstr "Fant ikke pakkeinformasjonen fra PyPI."
 
-#: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1195
+#: thonny/plugins/pip_gui.py:544 thonny/plugins/pip_gui.py:1326
 msgid "Error code:"
 msgstr "Feilkode:"
 
-#: thonny/plugins/pip_gui.py:601
+#: thonny/plugins/pip_gui.py:689
 msgid "Can't find package name from the list:"
 msgstr "\n"
 "Finner ikke pakkenavn fra listen:"
 
-#: thonny/plugins/pip_gui.py:653
+#: thonny/plugins/pip_gui.py:744
 msgid "Package '{}' is required for installing and uninstalling other packages."
 msgstr "\n"
 "Pakken '{}' kreves for å installere og avinstallere andre pakker."
 
-#: thonny/plugins/pip_gui.py:696
+#: thonny/plugins/pip_gui.py:789
 msgid "Package"
 msgstr "Pakke"
 
-#: thonny/plugins/pip_gui.py:796
+#: thonny/plugins/pip_gui.py:902
 msgid "Manage packages for %s"
 msgstr "Administrer pakker for% s"
 
-#: thonny/plugins/pip_gui.py:867
+#: thonny/editors.py:579 thonny/plugins/micropython/pip_gui.py:23
+#: thonny/plugins/pip_gui.py:953
 msgid "Confirmation"
 msgstr "Bekreftelse"
 
-#: thonny/plugins/pip_gui.py:868
+#: thonny/plugins/pip_gui.py:954
 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"
@@ -986,79 +912,65 @@ msgstr "Det ser ut til at du installerer en Thonny-relatert pakke.\n"
 "\n"
 "Er du sikker på at du vil installere% s for back-end?"
 
-#: thonny/plugins/pip_gui.py:976
+#: thonny/plugins/pip_gui.py:1059
 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! Det kan være en annen versjon tilgjengelig som er kompatibel med gjeldende Thonny-versjon. Klikk på '...' for å velge versjonen du vil installere."
 
-#: thonny/plugins/pip_gui.py:984
+#: thonny/plugins/pip_gui.py:1067
 msgid "Thonny plugin without requirements"
 msgstr "Thonny-plugin uten krav"
 
-#: thonny/plugins/pip_gui.py:985
-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 "Det ser ut til at du prøver å installere en utdatert Thonny\n"
-"plugin (det spesifiserer ikke nødvendig Thonny-versjon).\n"
-"\n"
-"Hvis du fortsatt vil ha det, må du installere det fra kommandolinjen."
-
-#: thonny/plugins/pip_gui.py:999
+#: thonny/plugins/pip_gui.py:1083
 msgid "Unsuitable requirements"
 msgstr "Uegnede krav"
 
-#: thonny/plugins/pip_gui.py:1000
+#: thonny/plugins/pip_gui.py:1084
 msgid "This package requires different Thonny version:"
 msgstr "Denne pakken krever annen Thonny versjon:"
 
-#: thonny/plugins/pip_gui.py:1004
+#: thonny/plugins/pip_gui.py:1088
 msgid "If you still want it, then please install it from the command line."
 msgstr "Hvis du fortsatt vil ha det, må du installere det fra kommandolinjen."
 
-#: thonny/plugins/pip_gui.py:1047
-msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)"
-msgstr "(I dette tilfellet bruker Thonnys backend samme tolk, slik at begge dialogene administrerer de samme pakkene.)"
-
-#: thonny/plugins/pip_gui.py:1053
+#: thonny/plugins/pip_gui.py:1125
 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
 msgstr "NB! Du må starte Thonny på nytt etter at du har installert / oppgradert / avinstallert en plugin."
 
-#: thonny/plugins/pip_gui.py:1063
+#: thonny/plugins/pip_gui.py:1135
 msgid "Thonny plug-ins"
 msgstr "Thonny-plugin-moduler"
 
-#: thonny/plugins/pip_gui.py:1085
+#: thonny/plugins/pip_gui.py:1171
 msgid "Advanced install / upgrade / downgrade"
 msgstr "Avansert installasjon / oppgradering / nedgradering"
 
-#: thonny/plugins/pip_gui.py:1094
+#: thonny/plugins/pip_gui.py:1180
 msgid "Desired version"
 msgstr "Ønsket versjon"
 
-#: thonny/plugins/pip_gui.py:1132
+#: thonny/plugins/pip_gui.py:1239
 msgid "Upgrade dependencies"
 msgstr "Avhengigheter for oppgradering."
 
-#: thonny/plugins/pip_gui.py:1193
+#: thonny/plugins/pip_gui.py:1324
 msgid "Requires:"
 msgstr "Krever:"
 
-#: thonny/plugins/pip_gui.py:1197
+#: thonny/plugins/pip_gui.py:1328
 msgid "Error:"
 msgstr "Feil:"
 
-#: thonny/plugins/pip_gui.py:1400
+#: thonny/plugins/pip_gui.py:1541
 msgid "Manage packages..."
-msgstr "Administrere pakkerene..."
+msgstr "Administrere pakker..."
 
-#: thonny/plugins/pip_gui.py:1406
+#: thonny/plugins/pip_gui.py:1547
 msgid "Manage plug-ins..."
 msgstr "Administrere plug-ins..."
 
 #: thonny/plugins/replayer.py:365
 msgid "Open replayer..."
-msgstr "Åpen for å kjøre om igjen..."
+msgstr "Åpne for å kjøre om igjen..."
 
 #: thonny/plugins/run_debug_config_page.py:14
 msgid "Change working directory to script directory on Run / Debug"
@@ -1108,24 +1020,24 @@ msgstr "(start om Thonny etter endring av dette)"
 msgid "Run & Debug"
 msgstr "Kjør og Feilsøk"
 
-#: thonny/plugins/shell_config_page.py:17
+#: thonny/plugins/shell_config_page.py:26
 msgid "Terminal emulation"
 msgstr "Emulerer terminal"
 
-#: thonny/plugins/shell_config_page.py:19
+#: thonny/plugins/shell_config_page.py:28
 msgid "supports basic ANSI-colors and styles"
 msgstr "støtte grunnleggende ANSI-farger og stiler"
 
-#: thonny/plugins/shell_config_page.py:31
+#: thonny/plugins/shell_config_page.py:40
 msgid "Maximum number of lines to keep."
 msgstr "Maksimum antall linjer som skal bevares."
 
-#: thonny/plugins/shell_config_page.py:33
+#: thonny/plugins/shell_config_page.py:42
 msgid "NB! Large values may cause poor performance!"
 msgstr "\n"
 "NB! Store verdier kan medføre lav ytelse!"
 
-#: thonny/plugins/shell_config_page.py:49
+#: thonny/plugins/shell_config_page.py:58
 msgid "Maximum length of line fragments before squeezing"
 msgstr "Maksimal lengde på linjefragmenter før du komprimerer"
 
@@ -1171,497 +1083,870 @@ msgstr "IO font"
 msgid "Preview"
 msgstr "Forhåndsvisning"
 
-#: thonny/plugins/theme_and_font_config_page.py:145
+#: thonny/plugins/theme_and_font_config_page.py:151
 msgid "This is a comment"
-msgstr "Dette er e kommentar"
+msgstr "Dette er en kommentar"
 
-#: thonny/plugins/theme_and_font_config_page.py:148
+#: thonny/plugins/theme_and_font_config_page.py:154
 msgid "The answer is"
 msgstr "Svaret er"
 
-#: thonny/plugins/theme_and_font_config_page.py:152
+#: thonny/plugins/theme_and_font_config_page.py:158
 msgid "unclosed_string"
 msgstr "ikke_avsluttet_streng"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:160
 msgid "blah, blah"
 msgstr "bla, bla"
 
-#: thonny/plugins/theme_and_font_config_page.py:177
+#: thonny/plugins/theme_and_font_config_page.py:184
 msgid "NB! Some style elements change only after restarting Thonny!"
 msgstr "NB! Noen stilelement vil bare endres etter omstart av Thonny!"
 
-#: thonny/plugins/theme_and_font_config_page.py:216
+#: thonny/plugins/theme_and_font_config_page.py:223
 msgid "Enter an integer"
 msgstr "Skriv et heltall"
 
-#: thonny/plugins/theme_and_font_config_page.py:229
+#: thonny/plugins/theme_and_font_config_page.py:236
 msgid "Theme & Font"
 msgstr "Tema og font"
 
 #: thonny/plugins/thonny_folders.py:19
 msgid "Open Thonny program folder..."
-msgstr "Åpen Thonny katalogen..."
+msgstr "Åpne Thonny katalogen..."
 
 #: thonny/plugins/thonny_folders.py:24
 msgid "Open Thonny data folder..."
-msgstr "Åpen Thonny data katalog..."
+msgstr "Åpne Thonny data katalog..."
 
-#: thonny/plugins/help/__init__.py:64
+#: thonny/plugins/help/__init__.py:70
 msgid "Home"
 msgstr "Hjem"
 
-#: thonny/plugins/help/__init__.py:75
+#: thonny/plugins/help/__init__.py:81
 msgid "Help contents"
 msgstr "Innhold hjelp"
 
-#: thonny/plugins/micropython/__init__.py:274
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "CircuitPython enhet"
 
-#: thonny/plugins/micropython/__init__.py:278
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "MicroPython enhet"
 
-#: thonny/plugins/micropython/__init__.py:474
+#: thonny/plugins/micropython/mp_front.py:547
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "Kobel enheten din til datamaskin og velg riktig port under"
 
-#: thonny/plugins/micropython/__init__.py:477
+#: thonny/plugins/micropython/mp_front.py:550
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "se etter din enhet kalt \"USB Serial\" eller \"UART\""
 
-#: thonny/plugins/micropython/__init__.py:479
+#: thonny/plugins/micropython/mp_front.py:552
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "Hvis du ikke kan finne den, er det mulig at du må installere riktig USB driver først."
 
-#: thonny/plugins/micropython/__init__.py:400
+#: thonny/plugins/micropython/mp_front.py:444
 msgid "Port"
 msgstr "Port"
 
-#: thonny/plugins/micropython/__init__.py:409
+#: thonny/plugins/micropython/mp_front.py:454
 msgid "Try to detect port automatically"
 msgstr "Prøv automatisk detektering av port"
 
-#: thonny/plugins/micropython/__init__.py:952
+#: thonny/plugins/micropython/__init__.py:25
 msgid "MicroPython (generic)"
 msgstr "MicroPython (generic)"
 
-#: thonny/plugins/printing/__init__.py:82
+#: thonny/plugins/printing/__init__.py:98
 msgid "Print..."
 msgstr "Skriv ut..."
 
-#: thonny/plugins/system_shell/__init__.py:59
+#: thonny/plugins/system_shell/__init__.py:63
 msgid "Open system shell..."
-msgstr "Åpen system shell"
+msgstr "Åpne system shell..."
 
-#: thonny/plugins/backend_config_page.py:103
+#: thonny/plugins/backend_config_page.py:110
 msgid "Details"
 msgstr "Detaljer"
 
-#: thonny/plugins/pip_gui.py:345
+#: thonny/plugins/pip_gui.py:395
 msgid "Install from requirements file"
-msgstr "Installer fra kravfil"
+msgstr "Installer fra \"requirements\"-fil"
 
-#: thonny/plugins/pip_gui.py:380
+#: thonny/plugins/pip_gui.py:407
 msgid "Install from local file"
-msgstr "Installer fra lokal fil"
+msgstr "Installere fra lokal fil"
 
-#: thonny/plugins/pip_gui.py:1033
+#: thonny/plugins/pip_gui.py:1118
 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 "Denne dialogen er for å administrere Thonny plug-ins og deres avhengigheter.\n"
 "Hvis du ønsker å installere pakker for egne program, velg 'Verktøy → Administrere pakker...'"
 
-#: thonny/plugins/circuitpython/__init__.py:163
+#: thonny/plugins/circuitpython/__init__.py:10
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (generic)"
 
-#: thonny/plugins/commenting_indenting.py:124
+#: thonny/plugins/commenting_indenting.py:143
 msgid "Indent selected lines"
 msgstr "Innrykk valgte linjer"
 
-#: thonny/plugins/commenting_indenting.py:134
+#: thonny/plugins/commenting_indenting.py:153
 msgid "Dedent selected lines"
-msgstr "Ikke innrykk valgte linjer"
+msgstr "Fjern innrykk fra valgte linjer"
 
-#: thonny/workbench.py:1380
+#: thonny/workbench.py:1479
 msgid "Switch to\n"
 "regular\n"
 "mode"
 msgstr "Slå over til standardmodus"
 
-#: thonny/plugins/microbit/__init__.py:55
+#: thonny/plugins/microbit/__init__.py:58
 msgid "Make sure MicroPython has been installed to your micro:bit."
 msgstr "Kontroller at MicroPython har blitt installert på din micro:bit."
 
-#: thonny/plugins/microbit/__init__.py:57
+#: thonny/plugins/microbit/__init__.py:60
 msgid "Don't forget that main.py only works without embedded main script."
 msgstr "Ikke glem at main.py bare fungerer uten innebygd hovedskript."
 
-#: thonny/plugins/micropython/uf2dialog.py:45
+#: thonny/plugins/micropython/uf2dialog.py:44
 msgid "please wait"
 msgstr "vennligst vent"
 
-#: thonny/plugins/microbit/__init__.py:199
-msgid "Done!"
-msgstr "Ferdig!"
-
-#: thonny/plugins/micropython/__init__.py:298
-msgid "Firmware"
-msgstr "Firmware"
-
-#: thonny/misc_utils.py:134
+#: thonny/misc_utils.py:151
 msgid "Could not find disk '%s'. Do you want to locate it yourself?"
 msgstr "Fant ikke disk '% s'. Vil du finne det selv?"
 
-#: thonny/misc_utils.py:137
+#: thonny/misc_utils.py:154
 msgid "Found several '%s' disks. Do you want to choose one yourself?"
 msgstr "\n"
 "Fant flere '% s' disker. D?"
 
-#: thonny/misc_utils.py:153
+#: thonny/misc_utils.py:170
 msgid "Can't find suitable disk"
 msgstr "Finner ikke egnet disk."
 
-#: thonny/base_file_browser.py:273
+#: thonny/base_file_browser.py:290
 msgid "%d items"
 msgstr "%d enheter"
 
-#: thonny/base_file_browser.py:691
-msgid "Move to Recycle Bin"
-msgstr "Flytt til Papirkurv (gjennbruk)"
-
-#: thonny/base_file_browser.py:693
+#: thonny/base_file_browser.py:739
 msgid "Move to Trash"
 msgstr "Flytt til Papirkurv"
 
-#: thonny/base_file_browser.py:696
+#: thonny/base_file_browser.py:742
 msgid "Delete"
 msgstr "Slett"
 
-#: thonny/base_file_browser.py:699
+#: thonny/base_file_browser.py:721 thonny/base_file_browser.py:874
 msgid "New directory"
 msgstr "Ny katalog"
 
-#: thonny/base_file_browser.py:702
+#: thonny/base_file_browser.py:745
 msgid "Properties"
 msgstr "Egenskaper"
 
-#: thonny/base_file_browser.py:704
+#: thonny/base_file_browser.py:747
 msgid "Storage space"
 msgstr "Lagningsplass"
 
-#: thonny/base_file_browser.py:714
+#: thonny/base_file_browser.py:757
 msgid "Path"
 msgstr "Sti"
 
-#: thonny/base_file_browser.py:716
+#: thonny/base_file_browser.py:759
 msgid "Directory properties"
 msgstr "Egenskaper katalog"
 
-#: thonny/base_file_browser.py:718
+#: thonny/base_file_browser.py:761
 msgid "File properties"
 msgstr "Egenskaper fil"
 
-#: thonny/base_file_browser.py:720
+#: thonny/base_file_browser.py:763
 msgid "bytes"
 msgstr "bytes"
 
-#: thonny/base_file_browser.py:723
+#: thonny/base_file_browser.py:766
 msgid "Size"
 msgstr "Størrelse"
 
-#: thonny/base_file_browser.py:734
+#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:777
 msgid "Modified"
 msgstr "Endret"
 
-#: thonny/base_file_browser.py:793
+#: thonny/base_file_browser.py:838
 msgid "Deleting %s"
 msgstr "Sletter %s"
 
-#: thonny/base_file_browser.py:816
-msgid "Moving %s to %s"
-msgstr "Flytter %s til %s"
-
-#: thonny/editors.py:219
+#: thonny/editors.py:260
 msgid "Loading"
 msgstr "Laster opp"
 
-#: thonny/editors.py:335
+#: thonny/editors.py:389
 msgid "Saving"
 msgstr "Lagrer"
 
-#: thonny/running.py:1408
-msgid "Working..."
-msgstr "Arbeider..."
-
-#: thonny/plugins/files.py:199
-msgid "Uploading %s to %s"
-msgstr "Laster opp %s til %s"
-
-#: thonny/plugins/files.py:215
+#: thonny/plugins/files.py:219
 msgid "Upload to %s"
 msgstr "Last opp til %s"
 
-#: thonny/plugins/files.py:362
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
 msgstr "Laster ned %s til %s"
 
-#: thonny/plugins/files.py:275
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr "Nedlastning til %s"
 
-#: thonny/base_file_browser.py:619
+#: thonny/base_file_browser.py:646
 msgid "Open in system file manager"
-msgstr ""
+msgstr "Åpne i filutforsker"
 
-#: thonny/base_file_browser.py:624
+#: thonny/base_file_browser.py:674
 msgid "Hide hidden files"
-msgstr ""
+msgstr "Skjul skjulte filer"
 
-#: thonny/base_file_browser.py:624
+#: thonny/base_file_browser.py:674
 msgid "Show hidden files"
-msgstr ""
+msgstr "Vis skjulte filer"
 
-#: thonny/base_file_browser.py:634
+#: thonny/base_file_browser.py:657
 msgid "Open in Thonny"
-msgstr ""
+msgstr "Åpne i Thonny"
 
-#: thonny/base_file_browser.py:639 thonny/base_file_browser.py:660
+#: thonny/base_file_browser.py:688
 msgid "Open in system default app"
-msgstr ""
+msgstr "Åpne med standardprogram"
 
-#: thonny/base_file_browser.py:646 thonny/base_file_browser.py:668
+#: thonny/base_file_browser.py:669 thonny/base_file_browser.py:696
 msgid "Configure %s files"
 msgstr ""
 
-#: thonny/base_file_browser.py:669
+#: thonny/base_file_browser.py:697
 msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
 msgstr ""
 
-#: thonny/base_file_browser.py:1039 thonny/plugins/micropython/pip_gui.py:77
+#: thonny/base_file_browser.py:1254 thonny/editors.py:979 thonny/editors.py:981
 msgid "Deleting"
-msgstr ""
+msgstr "Sletter"
 
-#: thonny/base_file_browser.py:1046
+#: thonny/base_file_browser.py:1261
 msgid "Creating directory"
-msgstr ""
+msgstr "Lager mappe"
 
-#: thonny/editors.py:217
+#: thonny/editors.py:258
 msgid "Loading %s"
-msgstr ""
+msgstr "Laster %s"
 
-#: thonny/editors.py:333
+#: thonny/editors.py:384
 msgid "Saving to %s"
 msgstr ""
 
-#: thonny/editors.py:621 thonny/editors.py:623
+#: thonny/editors.py:720 thonny/editors.py:722
 msgid "Save All files"
-msgstr ""
+msgstr "Lagre alle filer"
 
-#: thonny/workbench.py:817
+#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:877
 msgid "Configure interpreter..."
 msgstr ""
 
-#: thonny/workbench.py:1490
+#: thonny/workbench.py:1589
 msgid "Device"
-msgstr ""
+msgstr "Enhet"
 
-#: thonny/workdlg.py:185
+#: thonny/workdlg.py:193
 msgid "Cancelling"
-msgstr ""
+msgstr "Avbryter"
 
-#: thonny/workdlg.py:212
+#: thonny/workdlg.py:220
 msgid "Starting"
-msgstr ""
+msgstr "Starter"
 
-#: thonny/plugins/assistant_config_page.py:17
-msgid "Friendly traceback level"
-msgstr ""
-
-#: thonny/plugins/backend_config_page.py:234
+#: thonny/plugins/backend_config_page.py:251
 msgid "Authentication"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:236
+#: thonny/plugins/backend_config_page.py:253
 msgid "Enter the passphrase of your private key for\n"
 "{}"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:239
+#: thonny/plugins/backend_config_page.py:256
 msgid "Enter your password for\n"
 "{}"
-msgstr ""
+msgstr "Skriv inn passordet ditt for\n"
+"{}"
 
-#: thonny/plugins/object_inspector.py:458
+#: thonny/plugins/object_inspector.py:487
 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
+#: thonny/plugins/pip_gui.py:645
 msgid "Search results"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:558
+#: thonny/plugins/pip_gui.py:646
 msgid "Searching"
-msgstr ""
+msgstr "Søker"
 
-#: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729
+#: thonny/plugins/pip_gui.py:728 thonny/plugins/pip_gui.py:817
 msgid "Installing '%s'"
-msgstr ""
+msgstr "Installerer '%s'"
 
-#: thonny/plugins/pip_gui.py:645
+#: thonny/plugins/pip_gui.py:734
 msgid "Upgrading '%s'"
-msgstr ""
+msgstr "Oppgraderer '%s'"
 
-#: thonny/plugins/pip_gui.py:650
+#: thonny/plugins/pip_gui.py:741
 msgid "Uninstalling '%s'"
-msgstr ""
+msgstr "Avinstallerer '%s'"
 
-#: thonny/plugins/pip_gui.py:663
+#: thonny/plugins/pip_gui.py:755
 msgid "Installing"
-msgstr ""
+msgstr "Installerer"
 
-#: thonny/plugins/pip_gui.py:1363
+#: thonny/plugins/pip_gui.py:1502
 msgid "Package manager is not available for this interpreter"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1376
+#: thonny/base_file_browser.py:1205 thonny/plugins/pip_gui.py:1516
 msgid "Not supported"
-msgstr ""
+msgstr "Støttes ikke"
 
-#: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1381
+#: thonny/plugins/micropython/pip_gui.py:100 thonny/plugins/pip_gui.py:1521
 msgid "Not available"
-msgstr ""
+msgstr "Ikke tilgjengelig"
 
-#: thonny/plugins/pip_gui.py:1382
+#: thonny/plugins/pip_gui.py:1522
 msgid "You need to stop your program before launching the package manager."
 msgstr ""
 
-#: thonny/plugins/shell_config_page.py:64
+#: thonny/plugins/shell_config_page.py:73
 msgid "Open evaluated values in Object inspector"
 msgstr ""
 
-#: thonny/plugins/cpython/__init__.py:370
+#: thonny/plugins/cpython_frontend/cp_front.py:209
 msgid "Python executable"
 msgstr ""
 
-#: thonny/plugins/cpython/__init__.py:393
+#: thonny/plugins/cpython_frontend/cp_front.py:232
 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
+#: thonny/plugins/cpython_ssh/__init__.py:17
 msgid "Remote Python 3 (SSH)"
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:284
+#: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
-msgstr ""
+msgstr "Frakoblet"
 
-#: thonny/plugins/micropython/__init__.py:451
+#: thonny/plugins/micropython/mp_front.py:521
 msgid "Advanced options"
-msgstr ""
+msgstr "Avanserte alternativer"
 
-#: thonny/plugins/micropython/__init__.py:458
+#: thonny/plugins/micropython/mp_front.py:547
 msgid "Install or update firmware"
-msgstr ""
+msgstr "Installer eller oppdater firmware"
 
-#: thonny/plugins/micropython/__init__.py:961
+#: thonny/plugins/micropython/__init__.py:36
 msgid "MicroPython (local)"
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:971
+#: thonny/plugins/micropython/__init__.py:47
 msgid "MicroPython (SSH)"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:134
-msgid "Module"
+#: thonny/plugins/micropython/pip_gui.py:77
+msgid "Scope"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:159
-msgid "Shadowed items (not importable):"
+#: thonny/plugins/micropython/pip_gui.py:90
+msgid "This dialog lists top-level modules from following directories:\n"
+""
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:208
-msgid "Package is not available at micropython.org. Version at PyPI will be installed."
+#: thonny/plugins/micropython/pip_gui.py:99
+msgid "New packages will be installed to"
 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."
+#: thonny/plugins/micropython/pip_gui.py:102
+msgid "no absolute lib directory in sys.path"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:245
-msgid "For upgrading simply install the package again."
+#: thonny/plugins/micropython/uf2dialog.py:39
+msgid "Version to be installed"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:248
-msgid "For uninstalling delete corresponding files."
+#: thonny/plugins/micropython/uf2dialog.py:47
+msgid "Target device location"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:262
-msgid "Scope"
+#: thonny/plugins/micropython/uf2dialog.py:58
+msgid "Target device model"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:275
-msgid "This dialog lists top-level modules from following directories:\n"
-""
+#: thonny/plugins/micropython/uf2dialog.py:146
+msgid "Please wait"
+msgstr "Vennligst vent"
+
+#: thonny/plugins/pip_gui.py:70
+msgid "Search on PyPI"
+msgstr "Søk på PyPI"
+
+#: thonny/base_file_browser.py:689
+msgid "Open in Thonny's text editor"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:284
-msgid "New packages will be installed to"
+#: thonny/base_file_browser.py:342
+msgid "Storage space on this drive or filesystem"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:292
-msgid "no absolute lib directory in sys.path"
+#: thonny/base_file_browser.py:343
+msgid "total space"
+msgstr "total plass"
+
+#: thonny/base_file_browser.py:345
+msgid "used space"
+msgstr "brukt plass"
+
+#: thonny/base_file_browser.py:346
+msgid "free space"
+msgstr "ledig plass"
+
+#: thonny/base_file_browser.py:353
+msgid "Storage info"
 msgstr ""
 
-#: thonny/plugins/micropython/uf2dialog.py:40
-msgid "Version to be installed"
+#: thonny/plugins/commenting_indenting.py:163
+msgid "Replace tabs with spaces"
 msgstr ""
 
-#: thonny/plugins/micropython/uf2dialog.py:48
-msgid "Target device location"
+#: thonny/plugins/editor_config_page.py:33
+msgid "Highlight tab characters"
 msgstr ""
 
-#: thonny/plugins/micropython/uf2dialog.py:59
-msgid "Target device model"
+#: thonny/plugins/editor_config_page.py:68
+msgid "Indent with tab characters (not recommended for Python)"
+msgstr "Bruk tab tegn for innrykk (ikke anbefalt for Python)"
+
+#: thonny/base_file_browser.py:91 thonny/memory.py:63
+msgid "Name"
+msgstr "Navn"
+
+#: thonny/base_file_browser.py:95
+msgid "Size (bytes)"
+msgstr "Størrelse (bytes)"
+
+#: thonny/base_file_browser.py:875
+msgid "Enter name for new directory under\n"
+"%s"
 msgstr ""
 
-#: thonny/plugins/micropython/uf2dialog.py:145
-msgid "Please wait"
+#: thonny/base_file_browser.py:898
+msgid "Nothing selected"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:67
-msgid "Search on PyPI"
+#: thonny/base_file_browser.py:898
+msgid "Select an item and try again!"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:79
-msgid "Delete selected"
+#: thonny/base_file_browser.py:1325
+msgid "Open from %s"
 msgstr ""
 
-#: thonny/base_file_browser.py:661
-msgid "Open in Thonny's text editor"
+#: thonny/base_file_browser.py:1328
+msgid "Save to %s"
 msgstr ""
 
-#: thonny/base_file_browser.py:326
-msgid "Storage space on this drive or filesystem"
+#: thonny/base_file_browser.py:1347
+msgid "File name:"
+msgstr "Filnavn:"
+
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
+msgid "Value ID"
+msgstr "Verdi ID"
+
+#: thonny/memory.py:65 thonny/plugins/heap.py:23
+#: thonny/plugins/object_inspector.py:540
+#: thonny/plugins/object_inspector.py:619
+msgid "Value"
+msgstr "Verdi"
+
+#: thonny/plugins/backend_config_page.py:274
+msgid "Save password"
+msgstr "Lagre passord"
+
+#: thonny/plugins/debugger.py:553
+msgid "Function call at %s"
 msgstr ""
 
-#: thonny/base_file_browser.py:327
-msgid "total space"
+#: thonny/plugins/debugger.py:1003
+msgid "Local variables"
+msgstr "Lokale variabler"
+
+#: thonny/plugins/debugger.py:1035
+msgid "Function"
+msgstr "Funksjon"
+
+#: thonny/plugins/debugger.py:1036
+msgid "Location"
 msgstr ""
 
-#: thonny/base_file_browser.py:328
-msgid "used space"
+#: thonny/plugins/debugger.py:1112
+msgid "If last command raised an exception then this view will show the stacktrace."
 msgstr ""
 
-#: thonny/base_file_browser.py:329
-msgid "free space"
+#: thonny/plugins/heap.py:22
+msgid "ID"
+msgstr "ID"
+
+#: thonny/plugins/object_inspector.py:92
+msgid "Data"
+msgstr "Data"
+
+#: thonny/plugins/object_inspector.py:93
+msgid "Attributes"
 msgstr ""
 
-#: thonny/base_file_browser.py:335
-msgid "Storage info"
+#: thonny/plugins/object_inspector.py:538
+msgid "Index"
+msgstr "Indeks"
+
+#: thonny/plugins/object_inspector.py:616
+msgid "Key ID"
+msgstr "Nøkkel ID"
+
+#: thonny/plugins/object_inspector.py:617
+msgid "Key"
+msgstr "Nøkkel"
+
+#: thonny/plugins/variables.py:39
+msgid "Back to\n"
+"%s"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:444
+msgid "Port or WebREPL"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:589
+msgid "Password"
+msgstr "Passord"
+
+#: thonny/plugins/debugger.py:961
+msgid "Source code"
+msgstr "Kildekode"
+
+#: 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/base_file_browser.py:718
+msgid "New file"
+msgstr ""
+
+#: thonny/base_file_browser.py:736
+msgid "Rename"
+msgstr ""
+
+#: thonny/base_file_browser.py:924
+msgid "Rename '%s'"
+msgstr ""
+
+#: thonny/base_file_browser.py:924
+msgid "Enter new name"
+msgstr ""
+
+#: thonny/base_file_browser.py:1012
+msgid "Paste failed"
+msgstr ""
+
+#: thonny/base_file_browser.py:1012
+msgid "There are conflicting folders"
+msgstr ""
+
+#: thonny/base_file_browser.py:1140
+msgid "File already exists"
+msgstr ""
+
+#: thonny/base_file_browser.py:1208
+msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
+msgstr ""
+
+#: thonny/editors.py:35
+msgid "Python files"
+msgstr ""
+
+#: thonny/editors.py:122 thonny/editors.py:189
+msgid "<untitled>"
+msgstr ""
+
+#: thonny/editors.py:149
+msgid "File is gone"
+msgstr ""
+
+#: thonny/editors.py:152
+msgid "Do you want to also close the editor?"
+msgstr ""
+
+#: thonny/editors.py:168
+msgid "External modification"
+msgstr ""
+
+#: thonny/editors.py:171
+msgid "Do you want to discard current editor content and reload the file from disk?"
+msgstr ""
+
+#: thonny/editors.py:580
+msgid "Python files usually have .py extension."
+msgstr ""
+
+#: thonny/editors.py:582
+msgid "Did you mean '%s'?"
+msgstr ""
+
+#: thonny/editors.py:751
+msgid "Move / rename..."
+msgstr ""
+
+#: thonny/editors.py:760
+msgid "Go to line..."
+msgstr ""
+
+#: thonny/editors.py:1003
+msgid "Line number"
+msgstr ""
+
+#: thonny/editors.py:1149
+msgid "Do you want to save files before closing?"
+msgstr ""
+
+#: thonny/editors.py:1151
+msgid "Do you want to save file before closing?"
+msgstr ""
+
+#: thonny/editors.py:1154
+msgid "Save On Close"
+msgstr ""
+
+#: thonny/misc_utils.py:513
+msgid "Command not available"
+msgstr ""
+
+#: thonny/misc_utils.py:514
+msgid "This command is not available if Thonny is run via Flatpak"
+msgstr ""
+
+#: thonny/workbench.py:694 thonny/workbench.py:794
+msgid "Support Ukraine"
+msgstr ""
+
+#: thonny/plugins/backend_config_page.py:91
+msgid "Which kind of interpreter should Thonny use for running your code?"
+msgstr ""
+
+#: thonny/plugins/calltip.py:159
+msgid "Show parameter info"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:41
+msgid "Automatically show parameter info after typing '('"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:47
+msgid "Automatically propose completions while typing"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:52
+msgid "Automatically show documentation for completions"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:57
+msgid "Request completions with Tab-key in editors"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:62
+msgid "Request completions with Tab-key in Shell"
+msgstr ""
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Problem"
+msgstr ""
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Could not find definition"
+msgstr ""
+
+#: thonny/plugins/shell_config_page.py:17
+msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
+msgstr ""
+
+#: thonny/plugins/cpython_frontend/cp_front.py:171
+msgid "Thonny's Python"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:492
+msgid "Interrupt working program on connect"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:500
+msgid "Synchronize device's real time clock"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:506
+msgid "Use local time in real time clock"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:512
+msgid "Restart interpreter before running a script"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:24
+msgid "This doesn't look like MicroPython/CircuitPython package.\n"
+"Are you sure you want to install it?"
+msgstr ""
+
+#: thonny/base_file_browser.py:849
+msgid "Moving to Trash"
+msgstr ""
+
+#: thonny/base_file_browser.py:850
+msgid "Move %s to Trash?"
+msgstr ""
+
+#: thonny/base_file_browser.py:857
+msgid "Moving %s to Trash"
+msgstr ""
+
+#: thonny/base_file_browser.py:662
+msgid "Open in default external app"
+msgstr ""
+
+#: thonny/base_file_browser.py:1206
+msgid "Opening remote files in external app is not supported."
+msgstr ""
+
+#: thonny/base_file_browser.py:1213
+msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
+msgstr ""
+
+#: thonny/editors.py:150
+msgid "Looks like '%s' was deleted or moved."
+msgstr ""
+
+#: thonny/editors.py:169
+msgid "Looks like '%s' was modified outside of the editor."
+msgstr ""
+
+#: thonny/plugins/cpython_frontend/cp_front.py:230
+msgid "NB! Thonny only supports Python %s and later"
+msgstr ""
+
+#: thonny/editors.py:1003
+msgid "Go to line"
+msgstr ""
+
+#: thonny/workbench.py:697
+msgid "Support"
+msgstr ""
+
+#: thonny/editors.py:393 thonny/editors.py:408
+msgid "Could not save"
+msgstr ""
+
+#: thonny/plugins/general_config_page.py:135
+msgid "Warning"
+msgstr ""
+
+#: thonny/plugins/general_config_page.py:136
+msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
+"Did you intend this?"
+msgstr ""
+
+#: thonny/workbench.py:867
+msgid "Install MicroPython"
+msgstr ""
+
+#: thonny/workbench.py:871
+msgid "Install CircuitPython"
+msgstr ""
+
+#: thonny/plugins/backend_config_page.py:212
+msgid "Make uploaded shebang scripts executable"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:91
+msgid "Make saved shebang scripts executable"
+msgstr ""
+
+#: thonny/plugins/files.py:224
+msgid "Activate virtual environment"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
+msgid "Target"
+msgstr ""
+
+#: thonny/plugins/pythontutor.py:41
+msgid "Visualize current script at Python Tutor"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:44
+msgid "Line"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:45
+msgid "Info"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:123
+msgid "No line marked with #todo found"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:143
+msgid "TODO"
+msgstr ""
+
+#: thonny/plugins/circuitpython/cirpy_front.py:98
+#: thonny/plugins/micropython/mp_front.py:536
+msgid "Install or update %s"
+msgstr ""
+
+#: thonny/plugins/cpython_frontend/__init__.py:24
+msgid "Local Python 3"
+msgstr ""
+
+#: thonny/plugins/cpython_frontend/cp_front.py:240
+msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+msgstr ""
+
+#: thonny/plugins/ev3/__init__.py:72
+msgid "Preparations (skip the VS Code part)"
+msgstr ""
+
+#: thonny/plugins/ev3/__init__.py:78
+msgid "Default password"
+msgstr ""
+
+#: thonny/running.py:338
+msgid "Information"
+msgstr ""
+
+#: thonny/running.py:339
+msgid "For debugging the program must be saved first."
 msgstr ""
 
diff --git a/thonny/locale/nl_NL/LC_MESSAGES/thonny.mo b/thonny/locale/nl_NL/LC_MESSAGES/thonny.mo
index 154e345..52886db 100644
Binary files a/thonny/locale/nl_NL/LC_MESSAGES/thonny.mo and b/thonny/locale/nl_NL/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/nn_NO/LC_MESSAGES/thonny.mo b/thonny/locale/nn_NO/LC_MESSAGES/thonny.mo
index 8e56af3..3be1478 100644
Binary files a/thonny/locale/nn_NO/LC_MESSAGES/thonny.mo and b/thonny/locale/nn_NO/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/nn_NO/LC_MESSAGES/thonny.po b/thonny/locale/nn_NO/LC_MESSAGES/thonny.po
index a89b74b..7b22651 100644
--- a/thonny/locale/nn_NO/LC_MESSAGES/thonny.po
+++ b/thonny/locale/nn_NO/LC_MESSAGES/thonny.po
@@ -7,71 +7,63 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: nn\n"
 
-#: thonny/workbench.py:346
+#: thonny/workbench.py:369
 msgid "File"
 msgstr "Fil"
 
-#: thonny/workbench.py:347
+#: thonny/workbench.py:370
 msgid "Edit"
 msgstr "Rediger"
 
-#: thonny/workbench.py:348
+#: thonny/workbench.py:371
 msgid "View"
 msgstr "Syn"
 
-#: thonny/running.py:122 thonny/workbench.py:349
+#: thonny/running.py:116 thonny/workbench.py:372
 msgid "Run"
 msgstr "Køyr"
 
-#: thonny/workbench.py:350
+#: thonny/workbench.py:373
 msgid "Tools"
 msgstr "Verktøy"
 
-#: thonny/plugins/help/__init__.py:74 thonny/workbench.py:351
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:374
 msgid "Help"
 msgstr "Hjelp"
 
-#: thonny/plugins/cpython/__init__.py:610
-msgid "Alternative Python 3 interpreter or virtual environment"
-msgstr "Alternativ Python 3 IDE"
-
-#: thonny/plugins/cpython/__init__.py:618
-msgid "A special virtual environment (deprecated)"
-msgstr "Eit spesielt virtuelt miljø (utfaset)"
-
-#: thonny/workbench.py:571
+#: thonny/workbench.py:591
 msgid "Exit"
 msgstr "Avslutt"
 
-#: thonny/workbench.py:598
+#: thonny/workbench.py:618
 msgid "Decrease font size"
 msgstr "Minke fontstorleik"
 
-#: thonny/workbench.py:610
+#: thonny/workbench.py:630
 msgid "Focus editor"
 msgstr "Fokus redigering"
 
-#: thonny/workbench.py:619
+#: thonny/workbench.py:639
 msgid "Focus shell"
 msgstr "Fokus shell"
 
-#: thonny/workbench.py:630
+#: thonny/workbench.py:650
 msgid "Maximize view"
 msgstr "Maksimer visning"
 
-#: thonny/workbench.py:642
+#: thonny/workbench.py:662
 msgid "Full screen"
 msgstr "Fullskjerm"
 
-#: thonny/workbench.py:1366
+#: thonny/workbench.py:1465
 msgid "Program arguments"
 msgstr "Program argument"
 
-#: thonny/plugins/about.py:28 thonny/plugins/about.py:163
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:151
 msgid "About Thonny"
 msgstr "Om Thonny"
 
-#: thonny/plugins/about.py:81
+#: thonny/plugins/about.py:77
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -86,7 +78,7 @@ msgstr "\n"
 "Raspberry Pi Foundation\n"
 "and Cybernetica AS"
 
-#: thonny/plugins/about.py:107
+#: thonny/plugins/about.py:97
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -101,56 +93,52 @@ msgstr "Dette programmet  er \n"
 "https://opensource.org/licenses/MIT\n"
 "for detailjar"
 
-#: thonny/plugins/about.py:152
+#: thonny/plugins/about.py:140
 msgid "Version history"
 msgstr "Versjonshistorie"
 
-#: thonny/plugins/about.py:159
+#: thonny/plugins/about.py:147
 msgid "Report problems"
 msgstr "Rapportera problem"
 
-#: thonny/plugins/assistant_config_page.py:31
+#: thonny/plugins/assistant_config_page.py:16
 msgid "Open Assistant automatically when program crashes with an exception"
 msgstr "Opna assistent automatisk når programmet krasjer på \n"
 "grunna eit unntak."
 
-#: thonny/plugins/assistant_config_page.py:38
+#: thonny/plugins/assistant_config_page.py:23
 msgid "Open Assistant automatically when it has warnings for your code"
 msgstr "Opna assistent automatisk når det er varsel for koden din."
 
-#: thonny/plugins/assistant_config_page.py:45
+#: thonny/plugins/assistant_config_page.py:30
 msgid "Perform selected Pylint checks"
 msgstr "Vel utvalgt Pylint kontroll"
 
-#: thonny/plugins/assistant_config_page.py:49
+#: thonny/plugins/assistant_config_page.py:34
 msgid "Perform MyPy checks"
 msgstr "Vel MyPy kontroll"
 
-#: thonny/plugins/assistant_config_page.py:51
+#: thonny/plugins/assistant_config_page.py:36
 msgid "Disabled checks (one id per line)"
 msgstr "Slå av kontroll (en id per linje)"
 
-#: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:89
+#: thonny/assistance.py:985 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Assistent"
 
-#: thonny/plugins/autocomplete.py:333
+#: thonny/plugins/autocomplete.py:522
 msgid "Auto-complete"
 msgstr "Autofullfør"
 
-#: thonny/plugins/backend_config_page.py:84
-msgid "Which interpreter or device should Thonny use for running your code?"
-msgstr "Kva for tolk eller eining skal Thonny nytta for å køyra koden din?"
-
-#: thonny/plugins/backend_config_page.py:320
+#: thonny/plugins/backend_config_page.py:337
 msgid "Interpreter"
 msgstr "Tolk"
 
-#: thonny/plugins/birdseye_frontend.py:54
+#: thonny/plugins/birdseye_frontend.py:55
 msgid "About Birdseye"
 msgstr "Om Birdseye"
 
-#: thonny/plugins/birdseye_frontend.py:55
+#: thonny/plugins/birdseye_frontend.py:56
 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?"
@@ -158,19 +146,19 @@ msgstr "Birdseye er ein Python feilsøkar som må installerast separat.\n"
 "\n"
 "Ynskjer du å opne hjelp sidan for å lære meir?"
 
-#: thonny/plugins/birdseye_frontend.py:83
+#: thonny/plugins/birdseye_frontend.py:84
 msgid "Debug current script (birdseye)"
 msgstr "Feilsøk den aktuelle koden?"
 
-#: thonny/plugins/commenting_indenting.py:144
+#: thonny/plugins/commenting_indenting.py:172
 msgid "Toggle comment"
 msgstr "Kommentarar av/på"
 
-#: thonny/plugins/commenting_indenting.py:154
+#: thonny/plugins/commenting_indenting.py:182
 msgid "Comment out"
 msgstr "Merk"
 
-#: thonny/plugins/commenting_indenting.py:164
+#: thonny/plugins/commenting_indenting.py:192
 msgid "Uncomment"
 msgstr "Ikkje merk"
 
@@ -182,15 +170,18 @@ msgstr "Angre"
 msgid "Redo"
 msgstr "Gjer om"
 
-#: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2191
+#: thonny/base_file_browser.py:724 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2295
 msgid "Cut"
 msgstr "Klipp ut"
 
-#: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2192
+#: thonny/base_file_browser.py:725 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2296
 msgid "Copy"
 msgstr "Kopier"
 
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2193
+#: thonny/base_file_browser.py:727 thonny/base_file_browser.py:733
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2297
 msgid "Paste"
 msgstr "Lim inn"
 
@@ -198,15 +189,15 @@ msgstr "Lim inn"
 msgid "Select all"
 msgstr "Vel alle"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1397
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1401
 msgid "Run to cursor"
 msgstr "Køyr til markøren"
 
-#: thonny/plugins/debugger.py:980
+#: thonny/plugins/debugger.py:982
 msgid "Can't close yet"
 msgstr "Kan ikkje lukkast"
 
-#: thonny/plugins/debugger.py:981
+#: thonny/plugins/debugger.py:983
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr "Bruk \"Stopp\"-kommandoen om du vil stansa feilsøking."
 
@@ -214,49 +205,41 @@ msgstr "Bruk \"Stopp\"-kommandoen om du vil stansa feilsøking."
 msgid "Dock user windows"
 msgstr "Forankre brukervindauge"
 
-#: thonny/plugins/editor_config_page.py:15
+#: thonny/plugins/editor_config_page.py:20
 msgid "Highlight matching names"
 msgstr "Framhev matsjende namn"
 
-#: thonny/plugins/editor_config_page.py:21
+#: thonny/plugins/editor_config_page.py:26
 msgid "Highlight local variables"
 msgstr "Framhev lokale variablar"
 
-#: thonny/plugins/editor_config_page.py:26
+#: thonny/plugins/editor_config_page.py:31
 msgid "Highlight parentheses"
 msgstr "Fremhev paranteser"
 
-#: thonny/plugins/editor_config_page.py:27
+#: thonny/plugins/editor_config_page.py:32
 msgid "Highlight syntax elements"
 msgstr "Framhev syntaks element"
 
-#: thonny/plugins/editor_config_page.py:30
+#: thonny/plugins/editor_config_page.py:36
 msgid "Highlight current line (requires reopening the editor)"
 msgstr "Framhev den aktuelle linja (krev at du opner editor igjen)."
 
-#: thonny/plugins/editor_config_page.py:35
-msgid "Allow code completion with Tab-key in editors"
-msgstr "Tillat fullføring av kode med Tab-tast i editor"
-
-#: thonny/plugins/editor_config_page.py:41
-msgid "Allow code completion with Tab-key in Shell"
-msgstr "Tillat fullføring av kode med Tab-tast i konsoll"
-
-#: thonny/plugins/editor_config_page.py:45
+#: thonny/plugins/editor_config_page.py:73
 msgid "Show line numbers"
 msgstr "Vis linjenummer"
 
-#: thonny/plugins/editor_config_page.py:48
+#: thonny/plugins/editor_config_page.py:76
 msgid "Recommended maximum line length\n"
 "(Set to 0 to turn off margin line)"
 msgstr "Anbefalt maksimal linjelengde\n"
 "(Sett til 0 for å slå av marglinje)"
 
-#: thonny/plugins/editor_config_page.py:69
+#: thonny/plugins/editor_config_page.py:104
 msgid "Editor"
 msgstr "Editor"
 
-#: thonny/plugins/event_logging.py:206
+#: thonny/plugins/event_logging.py:207
 msgid "Export usage logs..."
 msgstr "Eksporter log..."
 
@@ -264,71 +247,71 @@ msgstr "Eksporter log..."
 msgid "Events"
 msgstr "Hendelse"
 
-#: thonny/plugins/files.py:550
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "Filer"
 
-#: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:437
 msgid "Find & Replace"
 msgstr "Finn og erstatt"
 
-#: thonny/plugins/find_replace.py:63
+#: thonny/plugins/find_replace.py:66
 msgid "Find:"
 msgstr "Finn"
 
-#: thonny/plugins/find_replace.py:74
+#: thonny/plugins/find_replace.py:87
 msgid "Replace with:"
 msgstr "Erstatt med:"
 
-#: thonny/plugins/find_replace.py:92
+#: thonny/plugins/find_replace.py:105
 msgid "Case sensitive"
 msgstr "Store og små bokstaver"
 
-#: thonny/plugins/find_replace.py:99
+#: thonny/plugins/find_replace.py:112
 msgid "Up"
 msgstr "Opp"
 
-#: thonny/plugins/find_replace.py:103
+#: thonny/plugins/find_replace.py:116
 msgid "Down"
 msgstr "Ned"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:125
 msgid "Find"
 msgstr "Finn"
 
-#: thonny/plugins/find_replace.py:122
+#: thonny/plugins/find_replace.py:135
 msgid "Replace"
 msgstr "Erstatt"
 
-#: thonny/plugins/find_replace.py:130
+#: thonny/plugins/find_replace.py:143
 msgid "Replace+Find"
 msgstr "Erstatt + Finn"
 
-#: thonny/plugins/find_replace.py:140
+#: thonny/plugins/find_replace.py:153
 msgid "Replace all"
 msgstr "Erstall alle"
 
-#: thonny/plugins/find_replace.py:236
+#: thonny/plugins/find_replace.py:253
 msgid "Enter string to be replaced."
 msgstr "Skrev tekst som skal erstattes"
 
-#: thonny/plugins/find_replace.py:320
+#: thonny/plugins/find_replace.py:338
 msgid "The specified text was not found!"
 msgstr "Den valgte teksten ble ikke funnet"
 
-#: thonny/plugins/general_config_page.py:14
+#: thonny/plugins/general_config_page.py:15
 msgid "Allow only single Thonny instance"
 msgstr "Tillat bare en enkel Thonne instans"
 
-#: thonny/plugins/general_config_page.py:21
+#: thonny/plugins/general_config_page.py:22
 msgid "Reopen all files from previous session"
-msgstr "Gjenåpen alle filer fra forrige seksjon"
+msgstr "Gjenopne alle filer fra forrige seksjon"
 
-#: thonny/plugins/general_config_page.py:27
+#: thonny/plugins/general_config_page.py:37
 msgid "Disable notification sound"
 msgstr "Slå av meldingslyd"
 
-#: thonny/plugins/general_config_page.py:76
+#: thonny/plugins/general_config_page.py:86
 msgid "Font scaling mode"
 msgstr "Font skaleringsmodus"
 
@@ -342,7 +325,7 @@ msgstr "Heap modus er på.\n"
 msgid "Heap"
 msgstr "Heap"
 
-#: thonny/plugins/general_config_page.py:43
+#: thonny/plugins/general_config_page.py:53
 msgid "Language"
 msgstr "Språk"
 
@@ -362,19 +345,19 @@ msgstr "Denne boksen er ment for arbeidsnotatene dine - oppdragsinstruksjoner, k
 msgid "Notes"
 msgstr "Notat"
 
-#: thonny/plugins/object_inspector.py:111
+#: thonny/plugins/object_inspector.py:116
 msgid "Previous object"
 msgstr "Forrige prosjekt"
 
-#: thonny/plugins/object_inspector.py:114
+#: thonny/plugins/object_inspector.py:119
 msgid "Next object"
 msgstr "Neste objekt"
 
-#: thonny/plugins/object_inspector.py:704
+#: thonny/plugins/object_inspector.py:733
 msgid "Object inspector"
 msgstr "Objekt inspektør"
 
-#: thonny/plugins/outline.py:138
+#: thonny/plugins/outline.py:148
 msgid "Outline"
 msgstr "Disposisjon"
 
@@ -382,295 +365,265 @@ msgstr "Disposisjon"
 msgid "Pygame Zero mode"
 msgstr "Pygame Zero mode"
 
-#: thonny/plugins/pip_gui.py:78
-msgid "Find package from PyPI"
-msgstr "Finn pakke i PyPl"
-
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:79
 msgid "Uninstall"
 msgstr "Avinnstaller"
 
-#: thonny/editors.py:586 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448
-#: thonny/ui_utils.py:1770 thonny/workdlg.py:155
+#: thonny/editors.py:685 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
+#: thonny/ui_utils.py:1872 thonny/workdlg.py:162
 msgid "Close"
 msgstr "Lukk"
 
-#: thonny/plugins/pip_gui.py:347
+#: thonny/plugins/pip_gui.py:397
 msgid "Click "
 msgstr "Klikk"
 
-#: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382
+#: thonny/plugins/pip_gui.py:398 thonny/plugins/pip_gui.py:409
 msgid "here"
 msgstr "her"
 
-#: thonny/plugins/pip_gui.py:73
+#: thonny/plugins/pip_gui.py:76
 msgid "Upgrade"
 msgstr "Oppgradere"
 
-#: thonny/plugins/esp/__init__.py:365
-#: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70
+#: thonny/plugins/esp/__init__.py:349
+#: thonny/plugins/micropython/uf2dialog.py:410 thonny/plugins/pip_gui.py:73
 msgid "Install"
 msgstr "Installer"
 
-#: thonny/plugins/pip_gui.py:491
+#: thonny/plugins/pip_gui.py:535
 msgid "Could not find the package from PyPI."
 msgstr "Kan ikke finne pakken i PyPI"
 
-#: thonny/plugins/pip_gui.py:511
+#: thonny/plugins/pip_gui.py:557
 msgid "Latest stable version"
 msgstr "Siste stabile versjon"
 
-#: thonny/plugins/pip_gui.py:513
+#: thonny/plugins/pip_gui.py:559
 msgid "Latest version"
 msgstr "Siste versjon"
 
-#: thonny/plugins/pip_gui.py:514
+#: thonny/plugins/pip_gui.py:561
 msgid "Summary"
 msgstr "Oppsummering"
 
-#: thonny/plugins/pip_gui.py:515
+#: thonny/plugins/pip_gui.py:563
 msgid "Author"
 msgstr "Forfatter"
 
-#: thonny/plugins/pip_gui.py:516
+#: thonny/plugins/pip_gui.py:565
 msgid "Homepage"
 msgstr "Hjemmeside"
 
-#: thonny/plugins/pip_gui.py:518
+#: thonny/plugins/pip_gui.py:567
 msgid "Bugtracker"
 msgstr "Feilsporing"
 
-#: thonny/plugins/pip_gui.py:520
+#: thonny/plugins/pip_gui.py:569
 msgid "Documentation"
 msgstr "Dokumentasjon"
 
-#: thonny/plugins/pip_gui.py:522
+#: thonny/plugins/pip_gui.py:571
 msgid "PyPI page"
 msgstr "\n"
 "PyPI side"
 
-#: thonny/plugins/pip_gui.py:526
+#: thonny/plugins/pip_gui.py:611
 msgid "Requires"
 msgstr "Krever"
 
-#: thonny/plugins/pip_gui.py:652
+#: thonny/plugins/pip_gui.py:743
 msgid "Really uninstall?"
 msgstr "Vil du virkelig avinstallere?"
 
-#: thonny/plugins/pip_gui.py:657
+#: thonny/plugins/pip_gui.py:748
 msgid "Are you sure you want to uninstall it?"
 msgstr "Er du sikker på at du vil avinstallerer det?"
 
-#: thonny/plugins/variables.py:19
+#: thonny/plugins/variables.py:22
 msgid "Back to\n"
 "current frame"
 msgstr "Tilbake til gjeldende ramme"
 
-#: thonny/plugins/variables.py:138
+#: thonny/plugins/variables.py:80 thonny/plugins/variables.py:82
+#: thonny/plugins/variables.py:145
 msgid "Variables"
 msgstr "Variabler"
 
-#: thonny/base_file_browser.py:1310
+#: thonny/base_file_browser.py:1572
 msgid "This computer"
 msgstr "Denne datamaskinen"
 
-#: thonny/base_file_browser.py:617
+#: thonny/base_file_browser.py:644
 msgid "Refresh"
 msgstr "Oppfrisk"
 
-#: thonny/base_file_browser.py:630
+#: thonny/base_file_browser.py:653
 msgid "Focus into"
 msgstr "Fokuser på "
 
-#: thonny/base_file_browser.py:1161
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
+#: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
 msgid "Error"
 msgstr "Feil"
 
-#: thonny/base_file_browser.py:1161
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
 msgid "You need to select a file!"
 msgstr "Du må velge en fil!"
 
-#: thonny/base_file_browser.py:1165
+#: thonny/base_file_browser.py:1423
 msgid "Overwrite?"
 msgstr "Overskriv?"
 
-#: thonny/base_file_browser.py:1165
+#: thonny/base_file_browser.py:1423
 msgid "Do you want to overwrite '%s' ?"
 msgstr "\n"
 "Vi du overskrive '%s' ?"
 
-#: thonny/editors.py:551 thonny/editors.py:553
+#: thonny/editors.py:650 thonny/editors.py:652
 msgid "New"
 msgstr "Ny"
 
-#: thonny/editors.py:564
+#: thonny/editors.py:663
 msgid "Open..."
-msgstr "Åpen"
+msgstr "Opne..."
 
-#: thonny/editors.py:566
+#: thonny/editors.py:665
 msgid "Load"
 msgstr "Last"
 
-#: thonny/editors.py:575
+#: thonny/editors.py:674
 msgid "Recent files"
 msgstr "Nylige filer"
 
-#: thonny/editors.py:597 thonny/ui_utils.py:450
+#: thonny/editors.py:696 thonny/ui_utils.py:493
 msgid "Close all"
 msgstr "Lukk alle"
 
-#: thonny/editors.py:607 thonny/editors.py:609
+#: thonny/editors.py:706 thonny/editors.py:708
 msgid "Save"
 msgstr "Lagre"
 
-#: thonny/editors.py:632
+#: thonny/editors.py:731
 msgid "Save as..."
 msgstr "Lagre som..."
 
-#: thonny/editors.py:643
+#: thonny/editors.py:742
 msgid "Save copy..."
 msgstr "Lage kopi"
 
-#: thonny/editors.py:652
-msgid "Rename..."
-msgstr "Gi nytt navn..."
-
-#: thonny/config_ui.py:19
+#: thonny/config_ui.py:18
 msgid "Thonny options"
-msgstr "Thonny alternativer"
+msgstr "Thonny alternativ"
 
-#: thonny/running.py:121
+#: thonny/running.py:115
 msgid "Run current script"
 msgstr "Kjør gjeldende skript"
 
-#: thonny/running.py:152
+#: thonny/running.py:146
 msgid "Run current script in terminal"
 msgstr "Kjør gjeldende skrip i terminal"
 
-#: thonny/running.py:165
+#: thonny/running.py:159
 msgid "Stop/Restart backend"
 msgstr "Stopp/Omstart backend"
 
-#: thonny/running.py:166
+#: thonny/running.py:160
 msgid "Stop"
 msgstr "Stopp"
 
-#: thonny/running.py:177
+#: thonny/running.py:171
 msgid "Interrupt execution"
 msgstr "Avbryt kjøring"
 
-#: thonny/running.py:190
+#: thonny/running.py:184
 msgid "Send EOF / Soft reboot"
 msgstr "Send EOF / Myk omstart"
 
-#: thonny/running.py:201
+#: thonny/running.py:195
 msgid "Disconnect"
 msgstr "Koble fra"
 
-#: thonny/running_config_page.py:23
-msgid "Known interpreters"
-msgstr "Kjente tolker"
-
-#: thonny/running_config_page.py:36
-msgid "Your interpreter isn't in the list?"
-msgstr "Er ikke din tolk i lista?"
-
-#: thonny/plugins/cpython/__init__.py:391
-msgid "NB! Thonny only supports Python 3.5 and later"
-msgstr "NB! Thonny støtter bare Python 3.5 og nyere"
-
-#: thonny/running_config_page.py:56
-msgid "Create new virtual environment"
-msgstr "Lag et nytt virtuelt miljø"
-
-#: thonny/running_config_page.py:59
-msgid "Select existing or create a new empty directory"
-msgstr "Velg eksisterede eller åpne en ny katalog"
-
-#: thonny/plugins/cpython/__init__.py:419
+#: thonny/plugins/cpython_frontend/cp_front.py:269
 msgid "Python interpreters"
 msgstr "Python tolker"
 
-#: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696
-#: thonny/plugins/pip_gui.py:709
+#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:270
+#: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
 msgid "all files"
 msgstr "alle filer"
 
-#: thonny/plugins/cpython/__init__.py:442
+#: thonny/plugins/cpython_frontend/cp_front.py:298
 msgid "Select empty directory for new virtual environment"
 msgstr "Velg en tom katalog for nytt virtuelt miljø"
 
-#: thonny/plugins/cpython/__init__.py:449
+#: thonny/plugins/cpython_frontend/cp_front.py:305
 msgid "Bad directory"
 msgstr "Feil mappe"
 
-#: thonny/plugins/cpython/__init__.py:450
+#: thonny/plugins/cpython_frontend/cp_front.py:306
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "Valgt katalog er ikke tom.\n"
 "Velg en annen eller avbryt."
 
-#: thonny/plugins/cpython/__init__.py:467
+#: thonny/plugins/cpython_frontend/cp_front.py:323
 msgid "Creating virtual environment"
 msgstr "Lag et viruelt miljø."
 
-#: thonny/shell.py:83
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "Tøm shell"
 
-#: thonny/shell.py:138
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "Plotter"
 
-#: thonny/shell.py:269
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "Tøm"
 
-#: thonny/shell.py:282
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "Vis Plotter"
 
-#: thonny/shell.py:1584
+#: thonny/shell.py:1659
 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 "Av ytelsesgrunner unngår Shell å vise veldig lange linjer i sin helhet (se Verktøy => Alternativer => Shell).\n"
-"Her kan du samhandle med det originale tekstfragmentet."
+msgstr "For betre yteevne, unngår Shell å vise særs lange linjer i sin heilskap (sjå Verktøy => Alternativ => Shell).\n"
+"Her kan du arbeide interaktivt med det originale tekstfragmentet."
 
-#: thonny/shell.py:1595
+#: thonny/shell.py:1670
 msgid "Wrap text (may be slow)"
 msgstr "Pakk tekst (kan ta tid)"
 
-#: thonny/ui_utils.py:1765
+#: thonny/ui_utils.py:1867
 msgid "Copy to clipboard"
 msgstr "Kopier til utklippsbord"
 
-#: thonny/shell.py:1431
-msgid "Expand in Shell"
-msgstr "Utvid i Shell"
-
-#: thonny/shell.py:1637
+#: thonny/shell.py:1712
 msgid "Squeezed text (%d characters)"
 msgstr "Krymp tekst (%d bokstaver)"
 
-#: thonny/shell.py:1806
+#: thonny/shell.py:1882
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr "Plotter virtualiserer serier av\n"
 "tall skrevet ut til Shell"
 
-#: thonny/shell.py:1808
+#: thonny/shell.py:1884
 msgid "See Help for details."
 msgstr "Se Hjelp for detaljer"
 
-#: thonny/ui_utils.py:449
+#: thonny/ui_utils.py:492
 msgid "Close others"
 msgstr "Lukk andre"
 
-#: thonny/ui_utils.py:1621
+#: thonny/ui_utils.py:1722
 msgid "Copying"
 msgstr "Kopierer"
 
-#: thonny/ui_utils.py:1624
+#: thonny/ui_utils.py:1725
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -680,301 +633,274 @@ msgstr "Kopierere\n"
 "til\n"
 "  %s"
 
-#: thonny/config_ui.py:36 thonny/plugins/backend_config_page.py:273
-#: thonny/plugins/pip_gui.py:1141 thonny/ui_utils.py:114
-#: thonny/ui_utils.py:1632 thonny/workdlg.py:157 thonny/workdlg.py:201
+#: thonny/base_file_browser.py:1378 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1819
+#: thonny/workdlg.py:164 thonny/workdlg.py:209
 msgid "Cancel"
 msgstr "Avbryt"
 
-#: thonny/config_ui.py:35 thonny/plugins/backend_config_page.py:268
-#: thonny/ui_utils.py:111 thonny/workdlg.py:198
+#: thonny/base_file_browser.py:1369 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:111 thonny/plugins/backend_config_page.py:285
+#: thonny/ui_utils.py:154 thonny/ui_utils.py:1816 thonny/workdlg.py:206
 msgid "OK"
 msgstr "OK"
 
-#: thonny/ui_utils.py:1783
-msgid "Cancel the process?"
-msgstr "Avbryt prosess?"
-
-#: thonny/ui_utils.py:1784
-msgid "The process is still running.\n"
-"Are you sure you want to cancel?"
-msgstr "Prosessen kjører.\n"
-"Er du sikker på at du vil avbryte?"
-
-#: thonny/ui_utils.py:2197
+#: thonny/ui_utils.py:2301
 msgid "Select All"
 msgstr "Velg Alle"
 
-#: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:157
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:162
 msgid "Shell"
 msgstr "Shell"
 
-#: thonny/plugins/cpython/__init__.py:602
-msgid "The same interpreter which runs Thonny (default)"
-msgstr "Den samme tolken som kjører Thonny (standardvalg)"
-
-#: thonny/plugins/cpython/__init__.py:350
-msgid "This virtual environment is automatically maintained by Thonny.\n"
-""
-msgstr "Det virtuelle miljøet blir vedlikehold av Thonny."
-
-#: thonny/plugins/cpython/__init__.py:351
-msgid "Location: "
-msgstr "Plassering:"
-
-#: thonny/workbench.py:581
+#: thonny/workbench.py:601
 msgid "Options..."
-msgstr "Alternativer..."
+msgstr "Alternativ..."
 
-#: thonny/workbench.py:588
+#: thonny/workbench.py:608
 msgid "Increase font size"
 msgstr "Øk fontstørrelse"
 
-#: thonny/workbench.py:653
+#: thonny/workbench.py:673
 msgid "Change font size"
 msgstr "Endre fontstørrelse"
 
-#: thonny/workbench.py:654
+#: thonny/workbench.py:674
 msgid "Zoom"
 msgstr "Zoom"
 
-#: thonny/workbench.py:663
+#: thonny/workbench.py:683
 msgid "Exit Thonny"
 msgstr "Avslutt Thonny"
 
-#: thonny/workbench.py:666
+#: thonny/workbench.py:686
 msgid "Quit"
 msgstr "Avbryt"
 
-#: thonny/workbench.py:1170 thonny/workbench.py:1178
+#: thonny/workbench.py:1244 thonny/workbench.py:1252
 msgid "Overwriting theme '%s'"
 msgstr "Overskriver tema '%s'"
 
-#: thonny/workbench.py:1337
+#: thonny/workbench.py:1436
 msgid "Program arguments:"
 msgstr "Programargumenter"
 
-#: thonny/workbench.py:1391
+#: thonny/workbench.py:1490
 msgid "Regular mode"
 msgstr "Vanlig modus"
 
-#: thonny/workbench.py:1392
+#: thonny/workbench.py:1491
 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 "Konfigurasjonen er oppdatert. Start Thonny på nytt for å begynne og jobbe i vanlig modus.\n"
+msgstr "Konfigurasjonen er oppdatert. Start Thonny på nytt for å begynne og jobbe i vanleg modus.\n"
 "\n"
-"(Se 'Verktøy → Alternativer → Generelt' hvis du ombestemmer deg senere.)"
+"(Se 'Verktøy → Alternativ → Generelt' om du ombestemmer deg seinare.)"
 
-#: thonny/plugins/ast_view.py:210
+#: thonny/plugins/ast_view.py:212
 msgid "Program tree"
 msgstr "Programtre"
 
-#: thonny/plugins/backend_config_page.py:323
-msgid "Select interpreter"
-msgstr "Velg tolk"
-
-#: thonny/plugins/debugger.py:1279
+#: thonny/plugins/debugger.py:1283
 msgid "Resume"
 msgstr "Oppsummer"
 
-#: thonny/plugins/debugger.py:1295
+#: thonny/plugins/debugger.py:1299
 msgid "Run / resume"
 msgstr "Kjør / oppsummer"
 
-#: thonny/plugins/debugger.py:1310
+#: thonny/plugins/debugger.py:1314
 msgid "Debug current script"
 msgstr "Feilsøk gjeldende skript"
 
-#: thonny/plugins/debugger.py:1312
+#: thonny/plugins/debugger.py:1316
 msgid "Debug"
 msgstr "Feilsøk"
 
-#: thonny/plugins/debugger.py:1323
+#: thonny/plugins/debugger.py:1327
 msgid "Debug current script (nicer)"
 msgstr "Feilsøk gjeldende skript (finere)"
 
-#: thonny/plugins/debugger.py:1335
+#: thonny/plugins/debugger.py:1339
 msgid "Debug current script (faster)"
 msgstr "Feilsøk gjeldende skript (raskere)"
 
-#: thonny/plugins/debugger.py:1346
+#: thonny/plugins/debugger.py:1350
 msgid "Step over"
 msgstr "Gå over"
 
-#: thonny/plugins/debugger.py:1348
+#: thonny/plugins/debugger.py:1352
 msgid "Over"
 msgstr "Over"
 
-#: thonny/plugins/debugger.py:1359
+#: thonny/plugins/debugger.py:1363
 msgid "Step into"
 msgstr "Gå inn i"
 
-#: thonny/plugins/debugger.py:1361
+#: thonny/plugins/debugger.py:1365
 msgid "Into"
 msgstr "Inn i"
 
-#: thonny/plugins/debugger.py:1372
+#: thonny/plugins/debugger.py:1376
 msgid "Step out"
 msgstr "Gå ut"
 
-#: thonny/plugins/debugger.py:1374
+#: thonny/plugins/debugger.py:1378
 msgid "Out"
 msgstr "Ut"
 
-#: thonny/plugins/debugger.py:1409
+#: thonny/plugins/debugger.py:1413
 msgid "Step back"
 msgstr "Gå bakover"
 
-#: thonny/plugins/debugger.py:1411
+#: thonny/plugins/debugger.py:1415
 msgid "Back"
 msgstr "Bakover"
 
-#: thonny/plugins/debugger.py:1417
+#: thonny/plugins/debugger.py:1421
 msgid "Stack"
 msgstr "Stakk"
 
-#: thonny/plugins/debugger.py:1418
+#: thonny/plugins/debugger.py:1422
 msgid "Exception"
 msgstr "Unntak"
 
-#: thonny/plugins/general_config_page.py:17
+#: thonny/plugins/general_config_page.py:18
 msgid "Log program usage events"
 msgstr "Logg hendelser fra programkjøring"
 
-#: thonny/plugins/general_config_page.py:33
+#: thonny/plugins/general_config_page.py:43
 msgid "Debug mode (provides more detailed diagnostic logs)"
 msgstr "Feilsøkingsmodus (tilbyr mer detalsjer diagnoselog)"
 
-#: thonny/plugins/general_config_page.py:57
+#: thonny/plugins/general_config_page.py:67
 msgid "UI mode"
 msgstr "UI modus"
 
-#: thonny/plugins/general_config_page.py:70
+#: thonny/plugins/general_config_page.py:80
 msgid "UI scaling factor"
 msgstr "UT skaleringsfaktor"
 
-#: thonny/plugins/general_config_page.py:89
+#: thonny/plugins/general_config_page.py:114
 msgid "NB! Restart Thonny after changing these options!"
 msgstr "NB! Start Thonny om igjen etter endringene!"
 
-#: thonny/plugins/general_config_page.py:104
+#: thonny/plugins/general_config_page.py:148
 msgid "General"
 msgstr "Generelt"
 
-#: thonny/plugins/pip_gui.py:129
+#: thonny/plugins/pip_gui.py:142
 msgid "INSTALL"
 msgstr "INSTALLER"
 
-#: thonny/plugins/pip_gui.py:365
+#: thonny/plugins/pip_gui.py:367
 msgid "Browse the packages"
 msgstr "Bla gjennom pakkene"
 
-#: thonny/plugins/pip_gui.py:368
+#: thonny/plugins/pip_gui.py:370
 msgid "With current interpreter you can only browse the packages here.\n"
 "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling."
 msgstr "Med gjeldende tolk kan du bare bla gjennom pakkene her.\n"
-"Bruk 'Verktøy → Åpne systemshell ...' for å installere, oppgradere eller avinstallere."
+"Bruk 'Verktøy → Opne systemshell ...' for å installere, oppgradere eller avinstallere."
 
-#: thonny/plugins/pip_gui.py:376
+#: thonny/plugins/pip_gui.py:378
 msgid "Packages' directory"
 msgstr "Pakkekatalog"
 
-#: thonny/plugins/pip_gui.py:333
+#: thonny/plugins/pip_gui.py:382
 msgid "Install from PyPI"
 msgstr "Installer fra PyPI"
 
-#: thonny/plugins/pip_gui.py:336
+#: thonny/plugins/pip_gui.py:385
 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 "Hvis du ikke vet hvor du skal finne pakken, er mest sannsynlig at du bør søke i Python Package Index. Start med å skrive inn navnet på pakken i søkeboksen over og trykke ENTER."
 
-#: thonny/plugins/pip_gui.py:352
+#: thonny/plugins/pip_gui.py:402
 msgid "to locate requirements.txt file and install the packages specified in it."
 msgstr "for å finne kravet.txt-filen og installere pakkene som er spesifisert i den."
 
-#: thonny/plugins/pip_gui.py:381
+#: thonny/plugins/pip_gui.py:408
 msgid "Click"
 msgstr "Klikk"
 
-#: thonny/plugins/pip_gui.py:386
+#: thonny/plugins/pip_gui.py:413
 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
 msgstr "for å finne og installere pakkefilen (vanligvis med .whl-, .tar.gz- eller .zip-utvidelse)."
 
-#: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393
+#: thonny/plugins/pip_gui.py:420
 msgid "Upgrade or uninstall"
 msgstr "Oppgrader eller avbryt"
 
-#: thonny/plugins/pip_gui.py:395
+#: thonny/plugins/pip_gui.py:422
 msgid "Start by selecting the package from the left."
 msgstr "Start med å velge pakker fra venstre."
 
-#: thonny/plugins/pip_gui.py:399
+#: thonny/plugins/pip_gui.py:410
 msgid "Target:"
 msgstr "Mål:"
 
-#: thonny/plugins/pip_gui.py:401
+#: thonny/plugins/pip_gui.py:414
 msgid "virtual environment"
 msgstr "viruelt miljø"
 
-#: thonny/plugins/pip_gui.py:403
+#: thonny/plugins/pip_gui.py:412
 msgid "user site packages"
 msgstr "brukers egne pakker"
 
-#: thonny/plugins/pip_gui.py:407
+#: thonny/plugins/pip_gui.py:430
 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
 msgstr "Denne dialogboksen viser alle tilgjengelige pakker, men tillater bare oppgradering og avinstallering av pakker fra"
 
-#: thonny/plugins/pip_gui.py:417
+#: thonny/plugins/pip_gui.py:440
 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means."
 msgstr "Nye pakker vil også bli installert i denne katalogen. Andre steder må administreres på alternative måter."
 
-#: thonny/plugins/pip_gui.py:441
+#: thonny/plugins/pip_gui.py:485
 msgid "Installed version:"
 msgstr "Installert versjon"
 
-#: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443
+#: thonny/plugins/pip_gui.py:487
 msgid "Installed to:"
 msgstr "Installert til:"
 
-#: thonny/plugins/pip_gui.py:494
+#: thonny/plugins/pip_gui.py:538
 msgid "Please check your spelling!"
 msgstr "Vennligst sjekk rettskriving!"
 
-#: thonny/plugins/pip_gui.py:512
-msgid "You need to enter"
-msgstr "Du trenger å taste inn"
-
-#: thonny/plugins/pip_gui.py:498
+#: thonny/plugins/pip_gui.py:542
 msgid "Could not find the package info from PyPI."
 msgstr "Fant ikke pakkeinformasjonen fra PyPI."
 
-#: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1195
+#: thonny/plugins/pip_gui.py:544 thonny/plugins/pip_gui.py:1326
 msgid "Error code:"
 msgstr "Feilkode:"
 
-#: thonny/plugins/pip_gui.py:601
+#: thonny/plugins/pip_gui.py:689
 msgid "Can't find package name from the list:"
 msgstr "\n"
 "Finner ikke pakkenavn fra listen:"
 
-#: thonny/plugins/pip_gui.py:653
+#: thonny/plugins/pip_gui.py:744
 msgid "Package '{}' is required for installing and uninstalling other packages."
 msgstr "\n"
 "Pakken '{}' kreves for å installere og avinstallere andre pakker."
 
-#: thonny/plugins/pip_gui.py:696
+#: thonny/plugins/pip_gui.py:789
 msgid "Package"
 msgstr "Pakke"
 
-#: thonny/plugins/pip_gui.py:796
+#: thonny/plugins/pip_gui.py:902
 msgid "Manage packages for %s"
 msgstr "Administrer pakker for% s"
 
-#: thonny/plugins/pip_gui.py:867
+#: thonny/editors.py:579 thonny/plugins/micropython/pip_gui.py:23
+#: thonny/plugins/pip_gui.py:953
 msgid "Confirmation"
 msgstr "Bekreftelse"
 
-#: thonny/plugins/pip_gui.py:868
+#: thonny/plugins/pip_gui.py:954
 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"
@@ -986,79 +912,65 @@ msgstr "Det ser ut til at du installerer en Thonny-relatert pakke.\n"
 "\n"
 "Er du sikker på at du vil installere% s for back-end?"
 
-#: thonny/plugins/pip_gui.py:976
+#: thonny/plugins/pip_gui.py:1059
 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! Det kan være en annen versjon tilgjengelig som er kompatibel med gjeldende Thonny-versjon. Klikk på '...' for å velge versjonen du vil installere."
 
-#: thonny/plugins/pip_gui.py:984
+#: thonny/plugins/pip_gui.py:1067
 msgid "Thonny plugin without requirements"
 msgstr "Thonny-plugin uten krav"
 
-#: thonny/plugins/pip_gui.py:985
-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 "Det ser ut til at du prøver å installere en utdatert Thonny\n"
-"plugin (det spesifiserer ikke nødvendig Thonny-versjon).\n"
-"\n"
-"Hvis du fortsatt vil ha det, må du installere det fra kommandolinjen."
-
-#: thonny/plugins/pip_gui.py:999
+#: thonny/plugins/pip_gui.py:1083
 msgid "Unsuitable requirements"
 msgstr "Uegnede krav"
 
-#: thonny/plugins/pip_gui.py:1000
+#: thonny/plugins/pip_gui.py:1084
 msgid "This package requires different Thonny version:"
 msgstr "Denne pakken krever annen Thonny versjon:"
 
-#: thonny/plugins/pip_gui.py:1004
+#: thonny/plugins/pip_gui.py:1088
 msgid "If you still want it, then please install it from the command line."
 msgstr "Hvis du fortsatt vil ha det, må du installere det fra kommandolinjen."
 
-#: thonny/plugins/pip_gui.py:1047
-msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)"
-msgstr "(I dette tilfellet bruker Thonnys backend samme tolk, slik at begge dialogene administrerer de samme pakkene.)"
-
-#: thonny/plugins/pip_gui.py:1053
+#: thonny/plugins/pip_gui.py:1125
 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
 msgstr "NB! Du må starte Thonny på nytt etter at du har installert / oppgradert / avinstallert en plugin."
 
-#: thonny/plugins/pip_gui.py:1063
+#: thonny/plugins/pip_gui.py:1135
 msgid "Thonny plug-ins"
 msgstr "Thonny-plugin-moduler"
 
-#: thonny/plugins/pip_gui.py:1085
+#: thonny/plugins/pip_gui.py:1171
 msgid "Advanced install / upgrade / downgrade"
 msgstr "Avansert installasjon / oppgradering / nedgradering"
 
-#: thonny/plugins/pip_gui.py:1094
+#: thonny/plugins/pip_gui.py:1180
 msgid "Desired version"
 msgstr "Ønsket versjon"
 
-#: thonny/plugins/pip_gui.py:1132
+#: thonny/plugins/pip_gui.py:1239
 msgid "Upgrade dependencies"
 msgstr "Avhengigheter for oppgradering."
 
-#: thonny/plugins/pip_gui.py:1193
+#: thonny/plugins/pip_gui.py:1324
 msgid "Requires:"
 msgstr "Krever:"
 
-#: thonny/plugins/pip_gui.py:1197
+#: thonny/plugins/pip_gui.py:1328
 msgid "Error:"
 msgstr "Feil:"
 
-#: thonny/plugins/pip_gui.py:1400
+#: thonny/plugins/pip_gui.py:1541
 msgid "Manage packages..."
 msgstr "Administrere pakkerene..."
 
-#: thonny/plugins/pip_gui.py:1406
+#: thonny/plugins/pip_gui.py:1547
 msgid "Manage plug-ins..."
 msgstr "Administrere plug-ins..."
 
 #: thonny/plugins/replayer.py:365
 msgid "Open replayer..."
-msgstr "Åpen for å kjøre om igjen..."
+msgstr "Opne for å kjøre om igjen..."
 
 #: thonny/plugins/run_debug_config_page.py:14
 msgid "Change working directory to script directory on Run / Debug"
@@ -1074,11 +986,11 @@ msgstr "Fjern merket for om du vil ha en mer tradisjonell opplevelse."
 
 #: thonny/plugins/run_debug_config_page.py:29
 msgid "Open and close Stack view automatically"
-msgstr "Åpne og lukk Stakk-visningen automatisk"
+msgstr "Opne og lukk Stakk-visningen automatisk"
 
 #: 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 "Åpner Stakkvisningen ved første kall og lukker den når programmet går tilbake til hovedrammen."
+msgstr "Opner Stakkvisningen ved første kall og lukker den når programmet går tilbake til hovedrammen."
 
 #: thonny/plugins/run_debug_config_page.py:39
 msgid "Allow stepping into libraries (ie. outside of main script directory)"
@@ -1108,24 +1020,24 @@ msgstr "(start om Thonny etter endring av dette)"
 msgid "Run & Debug"
 msgstr "Kjør og Feilsøk"
 
-#: thonny/plugins/shell_config_page.py:17
+#: thonny/plugins/shell_config_page.py:26
 msgid "Terminal emulation"
 msgstr "Emulerer terminal"
 
-#: thonny/plugins/shell_config_page.py:19
+#: thonny/plugins/shell_config_page.py:28
 msgid "supports basic ANSI-colors and styles"
 msgstr "støtte grunnleggende ANSI-farger og stiler"
 
-#: thonny/plugins/shell_config_page.py:31
+#: thonny/plugins/shell_config_page.py:40
 msgid "Maximum number of lines to keep."
 msgstr "Maksimum antall linjer som skal bevares."
 
-#: thonny/plugins/shell_config_page.py:33
+#: thonny/plugins/shell_config_page.py:42
 msgid "NB! Large values may cause poor performance!"
 msgstr "\n"
 "NB! Store verdier kan medføre lav ytelse!"
 
-#: thonny/plugins/shell_config_page.py:49
+#: thonny/plugins/shell_config_page.py:58
 msgid "Maximum length of line fragments before squeezing"
 msgstr "Maksimal lengde på linjefragmenter før du komprimerer"
 
@@ -1139,7 +1051,7 @@ msgstr "Vis Python REPL etter at programmet er avsluttet"
 
 #: thonny/plugins/terminal_config_page.py:24
 msgid "Keep terminal window open after Python process ends"
-msgstr "Hold terminalvinduet åpent etter at Python prosessen avsluttes."
+msgstr "Hold terminalvinduet opent etter at Python prosessen avsluttes"
 
 #: thonny/plugins/terminal_config_page.py:31
 msgid "NB! Automatic closing needs to be enabled in Terminal's settings\n"
@@ -1171,497 +1083,869 @@ msgstr "IO font"
 msgid "Preview"
 msgstr "Forhåndsvisning"
 
-#: thonny/plugins/theme_and_font_config_page.py:145
+#: thonny/plugins/theme_and_font_config_page.py:151
 msgid "This is a comment"
-msgstr "Dette er e kommentar"
+msgstr "Dette er ein kommentar"
 
-#: thonny/plugins/theme_and_font_config_page.py:148
+#: thonny/plugins/theme_and_font_config_page.py:154
 msgid "The answer is"
 msgstr "Svaret er"
 
-#: thonny/plugins/theme_and_font_config_page.py:152
+#: thonny/plugins/theme_and_font_config_page.py:158
 msgid "unclosed_string"
-msgstr "ikke_avsluttet_streng"
+msgstr "ikkje_avslutta_streng"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:160
 msgid "blah, blah"
 msgstr "bla, bla"
 
-#: thonny/plugins/theme_and_font_config_page.py:177
+#: thonny/plugins/theme_and_font_config_page.py:184
 msgid "NB! Some style elements change only after restarting Thonny!"
 msgstr "NB! Noen stilelement vil bare endres etter omstart av Thonny!"
 
-#: thonny/plugins/theme_and_font_config_page.py:216
+#: thonny/plugins/theme_and_font_config_page.py:223
 msgid "Enter an integer"
-msgstr "Skriv et heltall"
+msgstr "Skriv eit heiltal"
 
-#: thonny/plugins/theme_and_font_config_page.py:229
+#: thonny/plugins/theme_and_font_config_page.py:236
 msgid "Theme & Font"
 msgstr "Tema og font"
 
 #: thonny/plugins/thonny_folders.py:19
 msgid "Open Thonny program folder..."
-msgstr "Åpen Thonny katalogen..."
+msgstr "Opne Thonny katalogen..."
 
 #: thonny/plugins/thonny_folders.py:24
 msgid "Open Thonny data folder..."
 msgstr "Opne Thonny data katalog..."
 
-#: thonny/plugins/help/__init__.py:64
+#: thonny/plugins/help/__init__.py:70
 msgid "Home"
 msgstr "Heim"
 
-#: thonny/plugins/help/__init__.py:75
+#: thonny/plugins/help/__init__.py:81
 msgid "Help contents"
 msgstr "Innhald hjelp"
 
-#: thonny/plugins/micropython/__init__.py:274
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "CircuitPython eining"
 
-#: thonny/plugins/micropython/__init__.py:278
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "MicroPython eining"
 
-#: thonny/plugins/micropython/__init__.py:474
+#: thonny/plugins/micropython/mp_front.py:547
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "Koble eining din til datamskain og vel riktig port under"
 
-#: thonny/plugins/micropython/__init__.py:477
+#: thonny/plugins/micropython/mp_front.py:550
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "sjå etter din eining kalla \"USB Serial\" eller \"UART\""
 
-#: thonny/plugins/micropython/__init__.py:479
+#: thonny/plugins/micropython/mp_front.py:552
 msgid "If you can't find it, you may need to install proper USB driver first."
-msgstr "Om du ikkje kan finna den, er det moglig at du må installera riktig USB drivar fyrst."
+msgstr "Om du ikkje finn den, er det moglig at du må installera riktig USB drivar fyrst."
 
-#: thonny/plugins/micropython/__init__.py:400
+#: thonny/plugins/micropython/mp_front.py:444
 msgid "Port"
 msgstr "Port"
 
-#: thonny/plugins/micropython/__init__.py:409
+#: thonny/plugins/micropython/mp_front.py:454
 msgid "Try to detect port automatically"
 msgstr "Prøv automatisk detektering av port"
 
-#: thonny/plugins/micropython/__init__.py:952
+#: thonny/plugins/micropython/__init__.py:25
 msgid "MicroPython (generic)"
 msgstr "MicroPython (generic)"
 
-#: thonny/plugins/printing/__init__.py:82
+#: thonny/plugins/printing/__init__.py:98
 msgid "Print..."
 msgstr "Skriv ut..."
 
-#: thonny/plugins/system_shell/__init__.py:59
+#: thonny/plugins/system_shell/__init__.py:63
 msgid "Open system shell..."
 msgstr "Open system shell"
 
-#: thonny/plugins/backend_config_page.py:103
+#: thonny/plugins/backend_config_page.py:110
 msgid "Details"
 msgstr "Detaljar"
 
-#: thonny/plugins/pip_gui.py:345
+#: thonny/plugins/pip_gui.py:395
 msgid "Install from requirements file"
 msgstr "Installer frå kravfil"
 
-#: thonny/plugins/pip_gui.py:380
+#: thonny/plugins/pip_gui.py:407
 msgid "Install from local file"
 msgstr "Installer frå lokal fil"
 
-#: thonny/plugins/pip_gui.py:1033
+#: thonny/plugins/pip_gui.py:1118
 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 "Denne dialogen er for å administrera Thonny plug-ins og deira avhengigheter.\n"
-"Omdu ynskjer å installera pakkar for eigne program, vel 'Verktøy → Administrere pakkar...'"
+"Om du ynskjer å installera pakkar for eigne program, vel 'Verktøy → Administrere pakkar...'"
 
-#: thonny/plugins/circuitpython/__init__.py:163
+#: thonny/plugins/circuitpython/__init__.py:10
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (generic)"
 
-#: thonny/plugins/commenting_indenting.py:124
+#: thonny/plugins/commenting_indenting.py:143
 msgid "Indent selected lines"
 msgstr "Innrykk valgte linjer"
 
-#: thonny/plugins/commenting_indenting.py:134
+#: thonny/plugins/commenting_indenting.py:153
 msgid "Dedent selected lines"
 msgstr "Ikkje innrykk valgte linjer"
 
-#: thonny/workbench.py:1380
+#: thonny/workbench.py:1479
 msgid "Switch to\n"
 "regular\n"
 "mode"
 msgstr "Slå over til standardmodus"
 
-#: thonny/plugins/microbit/__init__.py:55
+#: thonny/plugins/microbit/__init__.py:58
 msgid "Make sure MicroPython has been installed to your micro:bit."
 msgstr "Kontroller at MicroPython har blitt installert på din micro:bit."
 
-#: thonny/plugins/microbit/__init__.py:57
+#: thonny/plugins/microbit/__init__.py:60
 msgid "Don't forget that main.py only works without embedded main script."
 msgstr "Ikkje gløym at main.py berrre fungerer utan innebygd hovudskript."
 
-#: thonny/plugins/micropython/uf2dialog.py:45
+#: thonny/plugins/micropython/uf2dialog.py:44
 msgid "please wait"
 msgstr "venlegst vent"
 
-#: thonny/plugins/microbit/__init__.py:199
-msgid "Done!"
-msgstr "Ferdig!"
-
-#: thonny/plugins/micropython/__init__.py:298
-msgid "Firmware"
-msgstr "Firmware"
-
-#: thonny/misc_utils.py:134
+#: thonny/misc_utils.py:151
 msgid "Could not find disk '%s'. Do you want to locate it yourself?"
 msgstr "Fant ikkje desk '% s'. Vil du finne det sjølv?"
 
-#: thonny/misc_utils.py:137
+#: thonny/misc_utils.py:154
 msgid "Found several '%s' disks. Do you want to choose one yourself?"
 msgstr "\n"
 "Fant fleire '% s' deskar. D?"
 
-#: thonny/misc_utils.py:153
+#: thonny/misc_utils.py:170
 msgid "Can't find suitable disk"
 msgstr "Finn ikkje egna desk."
 
-#: thonny/base_file_browser.py:273
+#: thonny/base_file_browser.py:290
 msgid "%d items"
 msgstr "%d enheter"
 
-#: thonny/base_file_browser.py:691
-msgid "Move to Recycle Bin"
-msgstr "Flytt til Papirkurv (ombruk)"
-
-#: thonny/base_file_browser.py:693
+#: thonny/base_file_browser.py:739
 msgid "Move to Trash"
 msgstr "Flytt til Papirkurv"
 
-#: thonny/base_file_browser.py:696
+#: thonny/base_file_browser.py:742
 msgid "Delete"
 msgstr "Slett"
 
-#: thonny/base_file_browser.py:699
+#: thonny/base_file_browser.py:721 thonny/base_file_browser.py:874
 msgid "New directory"
 msgstr "Ny katalog"
 
-#: thonny/base_file_browser.py:702
+#: thonny/base_file_browser.py:745
 msgid "Properties"
 msgstr "Egenskaper"
 
-#: thonny/base_file_browser.py:704
+#: thonny/base_file_browser.py:747
 msgid "Storage space"
 msgstr "Lagningsplass"
 
-#: thonny/base_file_browser.py:714
+#: thonny/base_file_browser.py:757
 msgid "Path"
 msgstr "Sti"
 
-#: thonny/base_file_browser.py:716
+#: thonny/base_file_browser.py:759
 msgid "Directory properties"
-msgstr "Eigenskaper katalog"
+msgstr "Mappeeigenskapar"
 
-#: thonny/base_file_browser.py:718
+#: thonny/base_file_browser.py:761
 msgid "File properties"
-msgstr "Eigenskaper fil"
+msgstr "Fileigenskapar"
 
-#: thonny/base_file_browser.py:720
+#: thonny/base_file_browser.py:763
 msgid "bytes"
 msgstr "bytes"
 
-#: thonny/base_file_browser.py:723
+#: thonny/base_file_browser.py:766
 msgid "Size"
 msgstr "Storleik"
 
-#: thonny/base_file_browser.py:734
+#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:777
 msgid "Modified"
 msgstr "Endra"
 
-#: thonny/base_file_browser.py:793
+#: thonny/base_file_browser.py:838
 msgid "Deleting %s"
 msgstr "Slettar %s"
 
-#: thonny/base_file_browser.py:816
-msgid "Moving %s to %s"
-msgstr "Flytter %s til %s"
-
-#: thonny/editors.py:219
+#: thonny/editors.py:260
 msgid "Loading"
 msgstr "Lastar opp"
 
-#: thonny/editors.py:335
+#: thonny/editors.py:389
 msgid "Saving"
 msgstr "Lagrar"
 
-#: thonny/running.py:1408
-msgid "Working..."
-msgstr "Arbeidar..."
-
-#: thonny/plugins/files.py:199
-msgid "Uploading %s to %s"
-msgstr "Lastar opp %s til %s"
-
-#: thonny/plugins/files.py:215
+#: thonny/plugins/files.py:219
 msgid "Upload to %s"
 msgstr "Last opp til %s"
 
-#: thonny/plugins/files.py:362
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
 msgstr "Lastar ned %s til %s"
 
-#: thonny/plugins/files.py:275
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr "Nedlastning til %s"
 
-#: thonny/base_file_browser.py:619
+#: thonny/base_file_browser.py:646
 msgid "Open in system file manager"
 msgstr ""
 
-#: thonny/base_file_browser.py:624
+#: thonny/base_file_browser.py:674
 msgid "Hide hidden files"
 msgstr ""
 
-#: thonny/base_file_browser.py:624
+#: thonny/base_file_browser.py:674
 msgid "Show hidden files"
 msgstr ""
 
-#: thonny/base_file_browser.py:634
+#: thonny/base_file_browser.py:657
 msgid "Open in Thonny"
 msgstr ""
 
-#: thonny/base_file_browser.py:639 thonny/base_file_browser.py:660
+#: thonny/base_file_browser.py:688
 msgid "Open in system default app"
 msgstr ""
 
-#: thonny/base_file_browser.py:646 thonny/base_file_browser.py:668
+#: thonny/base_file_browser.py:669 thonny/base_file_browser.py:696
 msgid "Configure %s files"
 msgstr ""
 
-#: thonny/base_file_browser.py:669
+#: thonny/base_file_browser.py:697
 msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
 msgstr ""
 
-#: thonny/base_file_browser.py:1039 thonny/plugins/micropython/pip_gui.py:77
+#: thonny/base_file_browser.py:1254 thonny/editors.py:979 thonny/editors.py:981
 msgid "Deleting"
 msgstr ""
 
-#: thonny/base_file_browser.py:1046
+#: thonny/base_file_browser.py:1261
 msgid "Creating directory"
 msgstr ""
 
-#: thonny/editors.py:217
+#: thonny/editors.py:258
 msgid "Loading %s"
 msgstr ""
 
-#: thonny/editors.py:333
+#: thonny/editors.py:384
 msgid "Saving to %s"
 msgstr ""
 
-#: thonny/editors.py:621 thonny/editors.py:623
+#: thonny/editors.py:720 thonny/editors.py:722
 msgid "Save All files"
 msgstr ""
 
-#: thonny/workbench.py:817
+#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:877
 msgid "Configure interpreter..."
 msgstr ""
 
-#: thonny/workbench.py:1490
+#: thonny/workbench.py:1589
 msgid "Device"
 msgstr ""
 
-#: thonny/workdlg.py:185
+#: thonny/workdlg.py:193
 msgid "Cancelling"
 msgstr ""
 
-#: thonny/workdlg.py:212
+#: thonny/workdlg.py:220
 msgid "Starting"
-msgstr ""
+msgstr "Startar"
 
-#: thonny/plugins/assistant_config_page.py:17
-msgid "Friendly traceback level"
-msgstr ""
-
-#: thonny/plugins/backend_config_page.py:234
+#: thonny/plugins/backend_config_page.py:251
 msgid "Authentication"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:236
+#: thonny/plugins/backend_config_page.py:253
 msgid "Enter the passphrase of your private key for\n"
 "{}"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:239
+#: thonny/plugins/backend_config_page.py:256
 msgid "Enter your password for\n"
 "{}"
 msgstr ""
 
-#: thonny/plugins/object_inspector.py:458
+#: thonny/plugins/object_inspector.py:487
 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
+#: thonny/plugins/pip_gui.py:645
 msgid "Search results"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:558
+#: thonny/plugins/pip_gui.py:646
 msgid "Searching"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729
+#: thonny/plugins/pip_gui.py:728 thonny/plugins/pip_gui.py:817
 msgid "Installing '%s'"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:645
+#: thonny/plugins/pip_gui.py:734
 msgid "Upgrading '%s'"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:650
+#: thonny/plugins/pip_gui.py:741
 msgid "Uninstalling '%s'"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:663
+#: thonny/plugins/pip_gui.py:755
 msgid "Installing"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1363
+#: thonny/plugins/pip_gui.py:1502
 msgid "Package manager is not available for this interpreter"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1376
+#: thonny/base_file_browser.py:1205 thonny/plugins/pip_gui.py:1516
 msgid "Not supported"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1381
+#: thonny/plugins/micropython/pip_gui.py:100 thonny/plugins/pip_gui.py:1521
 msgid "Not available"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1382
+#: thonny/plugins/pip_gui.py:1522
 msgid "You need to stop your program before launching the package manager."
 msgstr ""
 
-#: thonny/plugins/shell_config_page.py:64
+#: thonny/plugins/shell_config_page.py:73
 msgid "Open evaluated values in Object inspector"
 msgstr ""
 
-#: thonny/plugins/cpython/__init__.py:370
+#: thonny/plugins/cpython_frontend/cp_front.py:209
 msgid "Python executable"
 msgstr ""
 
-#: thonny/plugins/cpython/__init__.py:393
+#: thonny/plugins/cpython_frontend/cp_front.py:232
 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
+#: thonny/plugins/cpython_ssh/__init__.py:17
 msgid "Remote Python 3 (SSH)"
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:284
+#: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:451
+#: thonny/plugins/micropython/mp_front.py:521
 msgid "Advanced options"
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:458
+#: thonny/plugins/micropython/mp_front.py:547
 msgid "Install or update firmware"
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:961
+#: thonny/plugins/micropython/__init__.py:36
 msgid "MicroPython (local)"
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:971
+#: thonny/plugins/micropython/__init__.py:47
 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
+#: thonny/plugins/micropython/pip_gui.py:77
 msgid "Scope"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:275
+#: thonny/plugins/micropython/pip_gui.py:90
 msgid "This dialog lists top-level modules from following directories:\n"
 ""
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:284
+#: thonny/plugins/micropython/pip_gui.py:99
 msgid "New packages will be installed to"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:292
+#: thonny/plugins/micropython/pip_gui.py:102
 msgid "no absolute lib directory in sys.path"
 msgstr ""
 
-#: thonny/plugins/micropython/uf2dialog.py:40
+#: thonny/plugins/micropython/uf2dialog.py:39
 msgid "Version to be installed"
 msgstr ""
 
-#: thonny/plugins/micropython/uf2dialog.py:48
+#: thonny/plugins/micropython/uf2dialog.py:47
 msgid "Target device location"
 msgstr ""
 
-#: thonny/plugins/micropython/uf2dialog.py:59
+#: thonny/plugins/micropython/uf2dialog.py:58
 msgid "Target device model"
 msgstr ""
 
-#: thonny/plugins/micropython/uf2dialog.py:145
+#: thonny/plugins/micropython/uf2dialog.py:146
 msgid "Please wait"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:67
+#: thonny/plugins/pip_gui.py:70
 msgid "Search on PyPI"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:79
-msgid "Delete selected"
-msgstr ""
-
-#: thonny/base_file_browser.py:661
+#: thonny/base_file_browser.py:689
 msgid "Open in Thonny's text editor"
 msgstr ""
 
-#: thonny/base_file_browser.py:326
+#: thonny/base_file_browser.py:342
 msgid "Storage space on this drive or filesystem"
 msgstr ""
 
-#: thonny/base_file_browser.py:327
+#: thonny/base_file_browser.py:343
 msgid "total space"
 msgstr ""
 
-#: thonny/base_file_browser.py:328
+#: thonny/base_file_browser.py:345
 msgid "used space"
 msgstr ""
 
-#: thonny/base_file_browser.py:329
+#: thonny/base_file_browser.py:346
 msgid "free space"
 msgstr ""
 
-#: thonny/base_file_browser.py:335
+#: thonny/base_file_browser.py:353
 msgid "Storage info"
 msgstr ""
 
+#: thonny/plugins/commenting_indenting.py:163
+msgid "Replace tabs with spaces"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:33
+msgid "Highlight tab characters"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:68
+msgid "Indent with tab characters (not recommended for Python)"
+msgstr ""
+
+#: thonny/base_file_browser.py:91 thonny/memory.py:63
+msgid "Name"
+msgstr ""
+
+#: thonny/base_file_browser.py:95
+msgid "Size (bytes)"
+msgstr ""
+
+#: thonny/base_file_browser.py:875
+msgid "Enter name for new directory under\n"
+"%s"
+msgstr ""
+
+#: thonny/base_file_browser.py:898
+msgid "Nothing selected"
+msgstr ""
+
+#: thonny/base_file_browser.py:898
+msgid "Select an item and try again!"
+msgstr ""
+
+#: thonny/base_file_browser.py:1325
+msgid "Open from %s"
+msgstr ""
+
+#: thonny/base_file_browser.py:1328
+msgid "Save to %s"
+msgstr ""
+
+#: thonny/base_file_browser.py:1347
+msgid "File name:"
+msgstr ""
+
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
+msgid "Value ID"
+msgstr ""
+
+#: thonny/memory.py:65 thonny/plugins/heap.py:23
+#: thonny/plugins/object_inspector.py:540
+#: thonny/plugins/object_inspector.py:619
+msgid "Value"
+msgstr ""
+
+#: thonny/plugins/backend_config_page.py:274
+msgid "Save password"
+msgstr ""
+
+#: thonny/plugins/debugger.py:553
+msgid "Function call at %s"
+msgstr ""
+
+#: thonny/plugins/debugger.py:1003
+msgid "Local variables"
+msgstr ""
+
+#: thonny/plugins/debugger.py:1035
+msgid "Function"
+msgstr ""
+
+#: thonny/plugins/debugger.py:1036
+msgid "Location"
+msgstr ""
+
+#: thonny/plugins/debugger.py:1112
+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:92
+msgid "Data"
+msgstr ""
+
+#: thonny/plugins/object_inspector.py:93
+msgid "Attributes"
+msgstr ""
+
+#: thonny/plugins/object_inspector.py:538
+msgid "Index"
+msgstr ""
+
+#: thonny/plugins/object_inspector.py:616
+msgid "Key ID"
+msgstr ""
+
+#: thonny/plugins/object_inspector.py:617
+msgid "Key"
+msgstr ""
+
+#: thonny/plugins/variables.py:39
+msgid "Back to\n"
+"%s"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:444
+msgid "Port or WebREPL"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:589
+msgid "Password"
+msgstr ""
+
+#: thonny/plugins/debugger.py:961
+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/base_file_browser.py:718
+msgid "New file"
+msgstr ""
+
+#: thonny/base_file_browser.py:736
+msgid "Rename"
+msgstr ""
+
+#: thonny/base_file_browser.py:924
+msgid "Rename '%s'"
+msgstr ""
+
+#: thonny/base_file_browser.py:924
+msgid "Enter new name"
+msgstr ""
+
+#: thonny/base_file_browser.py:1012
+msgid "Paste failed"
+msgstr ""
+
+#: thonny/base_file_browser.py:1012
+msgid "There are conflicting folders"
+msgstr ""
+
+#: thonny/base_file_browser.py:1140
+msgid "File already exists"
+msgstr ""
+
+#: thonny/base_file_browser.py:1208
+msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
+msgstr ""
+
+#: thonny/editors.py:35
+msgid "Python files"
+msgstr ""
+
+#: thonny/editors.py:122 thonny/editors.py:189
+msgid "<untitled>"
+msgstr ""
+
+#: thonny/editors.py:149
+msgid "File is gone"
+msgstr ""
+
+#: thonny/editors.py:152
+msgid "Do you want to also close the editor?"
+msgstr ""
+
+#: thonny/editors.py:168
+msgid "External modification"
+msgstr ""
+
+#: thonny/editors.py:171
+msgid "Do you want to discard current editor content and reload the file from disk?"
+msgstr ""
+
+#: thonny/editors.py:580
+msgid "Python files usually have .py extension."
+msgstr ""
+
+#: thonny/editors.py:582
+msgid "Did you mean '%s'?"
+msgstr ""
+
+#: thonny/editors.py:751
+msgid "Move / rename..."
+msgstr ""
+
+#: thonny/editors.py:760
+msgid "Go to line..."
+msgstr ""
+
+#: thonny/editors.py:1003
+msgid "Line number"
+msgstr ""
+
+#: thonny/editors.py:1149
+msgid "Do you want to save files before closing?"
+msgstr ""
+
+#: thonny/editors.py:1151
+msgid "Do you want to save file before closing?"
+msgstr ""
+
+#: thonny/editors.py:1154
+msgid "Save On Close"
+msgstr ""
+
+#: thonny/misc_utils.py:513
+msgid "Command not available"
+msgstr ""
+
+#: thonny/misc_utils.py:514
+msgid "This command is not available if Thonny is run via Flatpak"
+msgstr ""
+
+#: thonny/workbench.py:694 thonny/workbench.py:794
+msgid "Support Ukraine"
+msgstr ""
+
+#: thonny/plugins/backend_config_page.py:91
+msgid "Which kind of interpreter should Thonny use for running your code?"
+msgstr ""
+
+#: thonny/plugins/calltip.py:159
+msgid "Show parameter info"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:41
+msgid "Automatically show parameter info after typing '('"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:47
+msgid "Automatically propose completions while typing"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:52
+msgid "Automatically show documentation for completions"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:57
+msgid "Request completions with Tab-key in editors"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:62
+msgid "Request completions with Tab-key in Shell"
+msgstr ""
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Problem"
+msgstr ""
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Could not find definition"
+msgstr ""
+
+#: thonny/plugins/shell_config_page.py:17
+msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
+msgstr ""
+
+#: thonny/plugins/cpython_frontend/cp_front.py:171
+msgid "Thonny's Python"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:492
+msgid "Interrupt working program on connect"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:500
+msgid "Synchronize device's real time clock"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:506
+msgid "Use local time in real time clock"
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:512
+msgid "Restart interpreter before running a script"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:24
+msgid "This doesn't look like MicroPython/CircuitPython package.\n"
+"Are you sure you want to install it?"
+msgstr ""
+
+#: thonny/base_file_browser.py:849
+msgid "Moving to Trash"
+msgstr ""
+
+#: thonny/base_file_browser.py:850
+msgid "Move %s to Trash?"
+msgstr ""
+
+#: thonny/base_file_browser.py:857
+msgid "Moving %s to Trash"
+msgstr ""
+
+#: thonny/base_file_browser.py:662
+msgid "Open in default external app"
+msgstr ""
+
+#: thonny/base_file_browser.py:1206
+msgid "Opening remote files in external app is not supported."
+msgstr ""
+
+#: thonny/base_file_browser.py:1213
+msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
+msgstr ""
+
+#: thonny/editors.py:150
+msgid "Looks like '%s' was deleted or moved."
+msgstr ""
+
+#: thonny/editors.py:169
+msgid "Looks like '%s' was modified outside of the editor."
+msgstr ""
+
+#: thonny/plugins/cpython_frontend/cp_front.py:230
+msgid "NB! Thonny only supports Python %s and later"
+msgstr ""
+
+#: thonny/editors.py:1003
+msgid "Go to line"
+msgstr ""
+
+#: thonny/workbench.py:697
+msgid "Support"
+msgstr ""
+
+#: thonny/editors.py:393 thonny/editors.py:408
+msgid "Could not save"
+msgstr ""
+
+#: thonny/plugins/general_config_page.py:135
+msgid "Warning"
+msgstr ""
+
+#: thonny/plugins/general_config_page.py:136
+msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
+"Did you intend this?"
+msgstr ""
+
+#: thonny/workbench.py:867
+msgid "Install MicroPython"
+msgstr ""
+
+#: thonny/workbench.py:871
+msgid "Install CircuitPython"
+msgstr ""
+
+#: thonny/plugins/backend_config_page.py:212
+msgid "Make uploaded shebang scripts executable"
+msgstr ""
+
+#: thonny/plugins/editor_config_page.py:91
+msgid "Make saved shebang scripts executable"
+msgstr ""
+
+#: thonny/plugins/files.py:224
+msgid "Activate virtual environment"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
+msgid "Target"
+msgstr ""
+
+#: thonny/plugins/pythontutor.py:41
+msgid "Visualize current script at Python Tutor"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:44
+msgid "Line"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:45
+msgid "Info"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:123
+msgid "No line marked with #todo found"
+msgstr ""
+
+#: thonny/plugins/todo_view.py:143
+msgid "TODO"
+msgstr ""
+
+#: thonny/plugins/circuitpython/cirpy_front.py:98
+#: thonny/plugins/micropython/mp_front.py:536
+msgid "Install or update %s"
+msgstr ""
+
+#: thonny/plugins/cpython_frontend/__init__.py:24
+msgid "Local Python 3"
+msgstr ""
+
+#: thonny/plugins/cpython_frontend/cp_front.py:240
+msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+msgstr ""
+
+#: thonny/plugins/ev3/__init__.py:72
+msgid "Preparations (skip the VS Code part)"
+msgstr ""
+
+#: thonny/plugins/ev3/__init__.py:78
+msgid "Default password"
+msgstr ""
+
+#: thonny/running.py:338
+msgid "Information"
+msgstr ""
+
+#: thonny/running.py:339
+msgid "For debugging the program must be saved first."
+msgstr ""
+
diff --git a/thonny/locale/pl_PL/LC_MESSAGES/thonny.mo b/thonny/locale/pl_PL/LC_MESSAGES/thonny.mo
index e0fd975..0d95614 100644
Binary files a/thonny/locale/pl_PL/LC_MESSAGES/thonny.mo and b/thonny/locale/pl_PL/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/pl_PL/LC_MESSAGES/thonny.po b/thonny/locale/pl_PL/LC_MESSAGES/thonny.po
index 279c0e8..abc1259 100644
--- a/thonny/locale/pl_PL/LC_MESSAGES/thonny.po
+++ b/thonny/locale/pl_PL/LC_MESSAGES/thonny.po
@@ -7,67 +7,59 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: pl\n"
 
-#: thonny/workbench.py:357
+#: thonny/workbench.py:375
 msgid "File"
 msgstr "Plik"
 
-#: thonny/workbench.py:358
+#: thonny/workbench.py:376
 msgid "Edit"
 msgstr "Edytuj"
 
-#: thonny/workbench.py:359
+#: thonny/workbench.py:377
 msgid "View"
 msgstr "Podgląd"
 
-#: thonny/running.py:122 thonny/workbench.py:360
+#: thonny/running.py:161 thonny/workbench.py:378
 msgid "Run"
 msgstr "Uruchom"
 
-#: thonny/workbench.py:361
+#: thonny/workbench.py:379
 msgid "Tools"
 msgstr "Narzędzia"
 
-#: thonny/plugins/help/__init__.py:74 thonny/workbench.py:362
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
 msgid "Help"
 msgstr "Pomoc"
 
-#: thonny/plugins/cpython/__init__.py:610
-msgid "Alternative Python 3 interpreter or virtual environment"
-msgstr "Alternatywny interpreter Python 3 lub środowisko wirtualne"
-
-#: thonny/plugins/cpython/__init__.py:618
-msgid "A special virtual environment (deprecated)"
-msgstr "Dedykowane środowisko wirtualne (nie zalecane)"
-
-#: thonny/workbench.py:582
+#: thonny/workbench.py:598
 msgid "Exit"
-msgstr "Wyjśćie"
+msgstr "Wyjście"
 
-#: thonny/workbench.py:609
+#: thonny/workbench.py:625
 msgid "Decrease font size"
 msgstr "Zmniejsz rozmiar czcionki"
 
-#: thonny/workbench.py:621
+#: thonny/workbench.py:637
 msgid "Focus editor"
 msgstr "Przenieś fokus na edytor"
 
-#: thonny/workbench.py:630
+#: thonny/workbench.py:646
 msgid "Focus shell"
 msgstr "Przenieś fokus na powłokę"
 
-#: thonny/workbench.py:641
+#: thonny/workbench.py:656
 msgid "Maximize view"
 msgstr "Zmaksymalizuj"
 
-#: thonny/workbench.py:653
+#: thonny/workbench.py:668
 msgid "Full screen"
 msgstr "Pełny ekran"
 
-#: thonny/workbench.py:1377
+#: thonny/workbench.py:1467
 msgid "Program arguments"
 msgstr "Argumenty programu"
 
-#: thonny/plugins/about.py:28 thonny/plugins/about.py:163
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
 msgid "About Thonny"
 msgstr "O programie Thonny"
 
@@ -85,7 +77,7 @@ msgstr "Stworzone na\n"
 "Fundacji Raspberry Pi\n"
 "oraz Cybernetica AS"
 
-#: thonny/plugins/about.py:107
+#: thonny/plugins/about.py:101
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -99,11 +91,11 @@ msgstr "Ten program wydawany jest\n"
 "zajrzyj: https://opensource.org/licenses/MIT\n"
 "po szczegóły"
 
-#: thonny/plugins/about.py:152
+#: thonny/plugins/about.py:142
 msgid "Version history"
 msgstr "Historia wersji"
 
-#: thonny/plugins/about.py:159
+#: thonny/plugins/about.py:149
 msgid "Report problems"
 msgstr "Zgłoś problemy"
 
@@ -127,27 +119,23 @@ msgstr "Wykonaj testy MyPy"
 msgid "Disabled checks (one id per line)"
 msgstr "Testy wykluczone (każde id w osobnym wierszu)"
 
-#: thonny/assistance.py:968 thonny/plugins/assistant_config_page.py:73
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Asystent"
 
-#: thonny/plugins/autocomplete.py:333
+#: thonny/plugins/autocomplete.py:529
 msgid "Auto-complete"
 msgstr "Auto-uzupełnianie"
 
-#: thonny/plugins/backend_config_page.py:84
-msgid "Which interpreter or device should Thonny use for running your code?"
-msgstr "Z jakiego interpretera lub urządzenia Thonny powinien korzystać do uruchamiania kodu?"
-
-#: thonny/plugins/backend_config_page.py:320
+#: thonny/plugins/backend_config_page.py:335
 msgid "Interpreter"
 msgstr "Interpreter"
 
-#: thonny/plugins/birdseye_frontend.py:54
+#: thonny/plugins/birdseye_frontend.py:55
 msgid "About Birdseye"
 msgstr "O Birdseye"
 
-#: thonny/plugins/birdseye_frontend.py:55
+#: thonny/plugins/birdseye_frontend.py:56
 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?"
@@ -155,19 +143,19 @@ msgstr "Birdseye to debugger języka Python, który należy zainstalować oddzie
 "\n"
 "Czy chcesz otworzyć stronę pomocy i dowiedzieć się więcej?"
 
-#: thonny/plugins/birdseye_frontend.py:83
+#: thonny/plugins/birdseye_frontend.py:84
 msgid "Debug current script (birdseye)"
 msgstr "Debuguj bieżący skrypt (birdseye)"
 
-#: thonny/plugins/commenting_indenting.py:172
+#: thonny/plugins/commenting_indenting.py:171
 msgid "Toggle comment"
 msgstr "Przełącz komentarz"
 
-#: thonny/plugins/commenting_indenting.py:182
+#: thonny/plugins/commenting_indenting.py:181
 msgid "Comment out"
 msgstr "Zakomentuj"
 
-#: thonny/plugins/commenting_indenting.py:192
+#: thonny/plugins/commenting_indenting.py:191
 msgid "Uncomment"
 msgstr "Odkomentuj"
 
@@ -179,15 +167,18 @@ msgstr "Cofnij"
 msgid "Redo"
 msgstr "Ponów"
 
-#: thonny/plugins/common_editing_commands.py:49 thonny/ui_utils.py:2176
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
 msgid "Cut"
 msgstr "Wytnij"
 
-#: thonny/plugins/common_editing_commands.py:61 thonny/ui_utils.py:2177
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
 msgid "Copy"
 msgstr "Kopiuj"
 
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2178
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
 msgid "Paste"
 msgstr "Wklej"
 
@@ -195,15 +186,15 @@ msgstr "Wklej"
 msgid "Select all"
 msgstr "Wybierz wszystko"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1398
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
 msgid "Run to cursor"
 msgstr "Uruchom do kursora"
 
-#: thonny/plugins/debugger.py:980
+#: thonny/plugins/debugger.py:985
 msgid "Can't close yet"
 msgstr "Nie można jeszcze zamknąć"
 
-#: thonny/plugins/debugger.py:981
+#: thonny/plugins/debugger.py:986
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr "Użyj polecenia „Stop”, jeśli chcesz anulować debugowanie"
 
@@ -211,49 +202,41 @@ msgstr "Użyj polecenia „Stop”, jeśli chcesz anulować debugowanie"
 msgid "Dock user windows"
 msgstr "Zadokuj okna użytkownika"
 
-#: thonny/plugins/editor_config_page.py:15
+#: thonny/plugins/editor_config_page.py:20
 msgid "Highlight matching names"
 msgstr "Podświetl pasujące nazwy"
 
-#: thonny/plugins/editor_config_page.py:21
+#: thonny/plugins/editor_config_page.py:26
 msgid "Highlight local variables"
 msgstr "Podświetl zmienne lokalne"
 
-#: thonny/plugins/editor_config_page.py:26
+#: thonny/plugins/editor_config_page.py:31
 msgid "Highlight parentheses"
 msgstr "Podświetl nawiasy"
 
-#: thonny/plugins/editor_config_page.py:27
+#: thonny/plugins/editor_config_page.py:32
 msgid "Highlight syntax elements"
 msgstr "Podświetl elementy składni"
 
-#: thonny/plugins/editor_config_page.py:31
+#: thonny/plugins/editor_config_page.py:36
 msgid "Highlight current line (requires reopening the editor)"
 msgstr "Podświetl bieżący wiersz (wymaga ponownego uruchomienia edytora)"
 
-#: thonny/plugins/editor_config_page.py:36
-msgid "Allow code completion with Tab-key in editors"
-msgstr "Zezwól na uzupełnianie kodu klawiszem Tab w edytorach"
-
-#: thonny/plugins/editor_config_page.py:42
-msgid "Allow code completion with Tab-key in Shell"
-msgstr "Zezwól na uzupełnianie kodu klawiszem Tab w  powłoce"
-
-#: thonny/plugins/editor_config_page.py:51
+#: thonny/plugins/editor_config_page.py:73
 msgid "Show line numbers"
 msgstr "Pokaż numery wierszy"
 
-#: thonny/plugins/editor_config_page.py:54
+#: thonny/plugins/editor_config_page.py:76
 msgid "Recommended maximum line length\n"
 "(Set to 0 to turn off margin line)"
 msgstr "Zalecana maksymalna długość wiersza\n"
 "(Ustaw na 0, aby wyłączyć linię margines)"
 
-#: thonny/plugins/editor_config_page.py:75
+#: thonny/plugins/editor_config_page.py:104
 msgid "Editor"
 msgstr "Edytor"
 
-#: thonny/plugins/event_logging.py:206
+#: thonny/plugins/event_logging.py:207
 msgid "Export usage logs..."
 msgstr "Eksportuj dzienniki..."
 
@@ -261,55 +244,55 @@ msgstr "Eksportuj dzienniki..."
 msgid "Events"
 msgstr "Zdarzenia"
 
-#: thonny/plugins/files.py:551
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "Pliki"
 
-#: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:416
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
 msgid "Find & Replace"
 msgstr "Znajdź i zastąp"
 
-#: thonny/plugins/find_replace.py:63
+#: thonny/plugins/find_replace.py:66
 msgid "Find:"
 msgstr "Znajdź:"
 
-#: thonny/plugins/find_replace.py:74
+#: thonny/plugins/find_replace.py:90
 msgid "Replace with:"
 msgstr "Zastąp przez:"
 
-#: thonny/plugins/find_replace.py:92
+#: thonny/plugins/find_replace.py:108
 msgid "Case sensitive"
 msgstr "Uwzględniaj wielkość liter"
 
-#: thonny/plugins/find_replace.py:99
+#: thonny/plugins/find_replace.py:115
 msgid "Up"
 msgstr "W górę"
 
-#: thonny/plugins/find_replace.py:103
+#: thonny/plugins/find_replace.py:119
 msgid "Down"
-msgstr "Do dołu"
+msgstr "W dół"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:128
 msgid "Find"
 msgstr "Znajdź"
 
-#: thonny/plugins/find_replace.py:122
+#: thonny/plugins/find_replace.py:138
 msgid "Replace"
 msgstr "Zastąp"
 
-#: thonny/plugins/find_replace.py:130
+#: thonny/plugins/find_replace.py:146
 msgid "Replace+Find"
 msgstr "Zastąp+Znajdź"
 
-#: thonny/plugins/find_replace.py:140
+#: thonny/plugins/find_replace.py:156
 msgid "Replace all"
 msgstr "Zastąp wszystkie"
 
-#: thonny/plugins/find_replace.py:236
+#: thonny/plugins/find_replace.py:254
 msgid "Enter string to be replaced."
 msgstr "Wpisz tekst, który chcesz zastąpić."
 
-#: thonny/plugins/find_replace.py:320
+#: thonny/plugins/find_replace.py:339
 msgid "The specified text was not found!"
 msgstr "Podany tekst nie został znaleziony!"
 
@@ -359,19 +342,19 @@ msgstr "To pole jest przeznaczone do notatek roboczych - instrukcji do zadań, f
 msgid "Notes"
 msgstr "Notatki"
 
-#: thonny/plugins/object_inspector.py:111
+#: thonny/plugins/object_inspector.py:116
 msgid "Previous object"
 msgstr "Poprzedni obiekt"
 
-#: thonny/plugins/object_inspector.py:114
+#: thonny/plugins/object_inspector.py:119
 msgid "Next object"
 msgstr "Następny obiekt"
 
-#: thonny/plugins/object_inspector.py:704
+#: thonny/plugins/object_inspector.py:732
 msgid "Object inspector"
 msgstr "Inspektor obiektów"
 
-#: thonny/plugins/outline.py:138
+#: thonny/plugins/outline.py:148
 msgid "Outline"
 msgstr "Zarys"
 
@@ -379,296 +362,265 @@ msgstr "Zarys"
 msgid "Pygame Zero mode"
 msgstr "Tryb Pygame Zero"
 
-#: thonny/plugins/pip_gui.py:78
-msgid "Find package from PyPI"
-msgstr "Znajdź pakiet w PyPi"
-
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:80
 msgid "Uninstall"
 msgstr "Odinstaluj"
 
-#: thonny/editors.py:587 thonny/plugins/pip_gui.py:228 thonny/ui_utils.py:448
-#: thonny/ui_utils.py:1755 thonny/workdlg.py:155
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
 msgid "Close"
 msgstr "Zamknij"
 
-#: thonny/plugins/pip_gui.py:347
+#: thonny/plugins/pip_gui.py:397
 msgid "Click "
 msgstr "Klik "
 
-#: thonny/plugins/pip_gui.py:348 thonny/plugins/pip_gui.py:382
+#: thonny/plugins/pip_gui.py:398 thonny/plugins/pip_gui.py:409
 msgid "here"
 msgstr "tutaj"
 
-#: thonny/plugins/pip_gui.py:73
+#: thonny/plugins/pip_gui.py:77
 msgid "Upgrade"
 msgstr "Uaktualnij"
 
-#: thonny/plugins/esp/__init__.py:365
-#: thonny/plugins/micropython/uf2dialog.py:94 thonny/plugins/pip_gui.py:70
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
 msgid "Install"
 msgstr "Zainstaluj"
 
-#: thonny/plugins/pip_gui.py:491
+#: thonny/plugins/pip_gui.py:570
 msgid "Could not find the package from PyPI."
 msgstr "Nie można znaleźć pakietu w PyPI."
 
-#: thonny/plugins/pip_gui.py:511
+#: thonny/plugins/pip_gui.py:592
 msgid "Latest stable version"
 msgstr "Najnowsza stabilna wersja"
 
-#: thonny/plugins/pip_gui.py:513
+#: thonny/plugins/pip_gui.py:594
 msgid "Latest version"
 msgstr "Najnowsza wersja"
 
-#: thonny/plugins/pip_gui.py:514
+#: thonny/plugins/pip_gui.py:596
 msgid "Summary"
 msgstr "Podsumowanie"
 
-#: thonny/plugins/pip_gui.py:515
+#: thonny/plugins/pip_gui.py:598
 msgid "Author"
 msgstr "Autor"
 
-#: thonny/plugins/pip_gui.py:516
+#: thonny/plugins/pip_gui.py:602
 msgid "Homepage"
 msgstr "Strona domowa"
 
-#: thonny/plugins/pip_gui.py:518
+#: thonny/plugins/pip_gui.py:604
 msgid "Bugtracker"
 msgstr "System śledzenia błędów"
 
-#: thonny/plugins/pip_gui.py:520
+#: thonny/plugins/pip_gui.py:606
 msgid "Documentation"
 msgstr "Dokumentacja"
 
-#: thonny/plugins/pip_gui.py:522
+#: thonny/plugins/pip_gui.py:608
 msgid "PyPI page"
-msgstr "Strona PyPi"
+msgstr "Strona PyPI"
 
-#: thonny/plugins/pip_gui.py:526
+#: thonny/plugins/pip_gui.py:648
 msgid "Requires"
 msgstr "Wymagania"
 
-#: thonny/plugins/pip_gui.py:652
+#: thonny/plugins/pip_gui.py:802
 msgid "Really uninstall?"
 msgstr "Naprawdę odinstalować?"
 
-#: thonny/plugins/pip_gui.py:657
+#: thonny/plugins/pip_gui.py:807
 msgid "Are you sure you want to uninstall it?"
 msgstr "Czy na pewno odinstalować?"
 
-#: thonny/plugins/variables.py:19
+#: thonny/plugins/variables.py:22
 msgid "Back to\n"
 "current frame"
 msgstr "Wróć do\n"
 "aktualnej ramki"
 
-#: thonny/plugins/variables.py:73 thonny/plugins/variables.py:75
-#: thonny/plugins/variables.py:138
+#: thonny/plugins/variables.py:80 thonny/plugins/variables.py:82
+#: thonny/plugins/variables.py:145
 msgid "Variables"
 msgstr "Zmienne"
 
-#: thonny/base_file_browser.py:1313
+#: thonny/base_file_browser.py:1576
 msgid "This computer"
 msgstr "Ten komputer"
 
-#: thonny/base_file_browser.py:618
+#: thonny/base_file_browser.py:648
 msgid "Refresh"
 msgstr "Odśwież"
 
-#: thonny/base_file_browser.py:631
+#: thonny/base_file_browser.py:657
 msgid "Focus into"
 msgstr "Ustaw fokus na"
 
-#: thonny/base_file_browser.py:1164
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
 msgid "Error"
 msgstr "Błąd"
 
-#: thonny/base_file_browser.py:1164
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
 msgid "You need to select a file!"
 msgstr "Musisz wybrać plik!"
 
-#: thonny/base_file_browser.py:1168
+#: thonny/base_file_browser.py:1427
 msgid "Overwrite?"
 msgstr "Nadpisac?"
 
-#: thonny/base_file_browser.py:1168
+#: thonny/base_file_browser.py:1427
 msgid "Do you want to overwrite '%s' ?"
 msgstr "Czy chcesz nadpisać '%s' ?"
 
-#: thonny/editors.py:552 thonny/editors.py:554
+#: thonny/editors.py:658 thonny/editors.py:660
 msgid "New"
 msgstr "Nowy"
 
-#: thonny/editors.py:565
+#: thonny/editors.py:671
 msgid "Open..."
 msgstr "Otwórz"
 
-#: thonny/editors.py:567
+#: thonny/editors.py:673
 msgid "Load"
 msgstr "Załaduj"
 
-#: thonny/editors.py:576
+#: thonny/editors.py:682
 msgid "Recent files"
 msgstr "Ostatnie pliki"
 
-#: thonny/editors.py:598 thonny/ui_utils.py:450
+#: thonny/editors.py:704 thonny/ui_utils.py:498
 msgid "Close all"
 msgstr "Zamknij wszystkie"
 
-#: thonny/editors.py:608 thonny/editors.py:610
+#: thonny/editors.py:714 thonny/editors.py:716
 msgid "Save"
 msgstr "Zapisz"
 
-#: thonny/editors.py:633
+#: thonny/editors.py:739
 msgid "Save as..."
 msgstr "Zapisz jako..."
 
-#: thonny/editors.py:644
+#: thonny/editors.py:750
 msgid "Save copy..."
 msgstr "Zapisz kopię..."
 
-#: thonny/editors.py:653
-msgid "Rename..."
-msgstr "Zmień nazwę..."
-
-#: thonny/config_ui.py:19
+#: thonny/config_ui.py:18
 msgid "Thonny options"
 msgstr "Opcje Thonny"
 
-#: thonny/running.py:121
+#: thonny/running.py:160
 msgid "Run current script"
 msgstr "Uruchom aktualny skrypt"
 
-#: thonny/running.py:152
+#: thonny/running.py:191
 msgid "Run current script in terminal"
 msgstr "Uruchom aktualny skrypt w terminalu"
 
-#: thonny/running.py:165
+#: thonny/running.py:204
 msgid "Stop/Restart backend"
 msgstr "Zatrzymaj/Uruchom ponownie backend"
 
-#: thonny/running.py:166
+#: thonny/running.py:205
 msgid "Stop"
 msgstr "Zatrzymaj"
 
-#: thonny/running.py:177
+#: thonny/running.py:216
 msgid "Interrupt execution"
 msgstr "Przerwij wykonanie"
 
-#: thonny/running.py:190
+#: thonny/running.py:229
 msgid "Send EOF / Soft reboot"
 msgstr "Wyślij EOF / Miękki restart"
 
-#: thonny/running.py:201
+#: thonny/running.py:240
 msgid "Disconnect"
 msgstr "Odłącz"
 
-#: thonny/running_config_page.py:23
-msgid "Known interpreters"
-msgstr "Znane interpretery"
-
-#: thonny/running_config_page.py:36
-msgid "Your interpreter isn't in the list?"
-msgstr "Twojego interpretera nie ma na liście?"
-
-#: thonny/plugins/cpython/__init__.py:391
-msgid "NB! Thonny only supports Python 3.5 and later"
-msgstr "Uwaga! Thonny obsługuje tylko Python 3.5 lub nowszy"
-
-#: thonny/running_config_page.py:56
-msgid "Create new virtual environment"
-msgstr "Stwórz środowisko wirtualne"
-
-#: thonny/running_config_page.py:59
-msgid "Select existing or create a new empty directory"
-msgstr "Wybierz istniejący, lub utwórz nowy pusty katalog"
-
-#: thonny/plugins/cpython/__init__.py:419
+#: thonny/plugins/cpython_frontend/cp_front.py:295
 msgid "Python interpreters"
 msgstr "Interpretery Pythona"
 
-#: thonny/plugins/cpython/__init__.py:420 thonny/plugins/pip_gui.py:696
-#: thonny/plugins/pip_gui.py:709
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
 msgid "all files"
 msgstr "wszystkie pliki"
 
-#: thonny/plugins/cpython/__init__.py:442
+#: thonny/plugins/cpython_frontend/cp_front.py:324
 msgid "Select empty directory for new virtual environment"
 msgstr "Wybierz pusty katalog dla nowego środowiska wirtualnego"
 
-#: thonny/plugins/cpython/__init__.py:449
+#: thonny/plugins/cpython_frontend/cp_front.py:331
 msgid "Bad directory"
 msgstr "Błędny katalog"
 
-#: thonny/plugins/cpython/__init__.py:450
+#: thonny/plugins/cpython_frontend/cp_front.py:332
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "Wybrany katalog nie jest pusty.\n"
 "Wybierz inny lub anuluj."
 
-#: thonny/plugins/cpython/__init__.py:467
+#: thonny/plugins/cpython_frontend/cp_front.py:349
 msgid "Creating virtual environment"
 msgstr "Tworzenie środowiska wirtualnego"
 
-#: thonny/shell.py:83
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "Wyczyść powłokę"
 
-#: thonny/shell.py:138
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "Plotter"
 
-#: thonny/shell.py:269
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "Wyczyść"
 
-#: thonny/shell.py:282
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "Pokaż Plotter"
 
-#: thonny/shell.py:1572
+#: thonny/shell.py:1660
 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 "Ze względu na wydajność, powłoka unika wyświetlania bardzo długich wierszy\n"
 "w całości (patrz Narzędzia → Opcje → Powłoka).\n"
 "Tutaj możesz wchodzić w interakcję z oryginalnym fragmentem tekstu."
 
-#: thonny/shell.py:1583
+#: thonny/shell.py:1671
 msgid "Wrap text (may be slow)"
 msgstr "Zawijaj tekst (może być powolne)"
 
-#: thonny/ui_utils.py:1750
+#: thonny/ui_utils.py:1879
 msgid "Copy to clipboard"
 msgstr "Skopiuj do schowka"
 
-#: thonny/shell.py:1431
-msgid "Expand in Shell"
-msgstr "Rozwiń w powłoce"
-
-#: thonny/shell.py:1625
+#: thonny/shell.py:1713
 msgid "Squeezed text (%d characters)"
 msgstr "Ściśnięty tekst (%d znaków)"
 
-#: thonny/shell.py:1794
+#: thonny/shell.py:1883
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr "Ploter wizualizuje serię\n"
 "liczb wydrukowanych w powłoce."
 
-#: thonny/shell.py:1796
+#: thonny/shell.py:1885
 msgid "See Help for details."
 msgstr "Sprawdź informacje w pomocy."
 
-#: thonny/ui_utils.py:449
+#: thonny/ui_utils.py:497
 msgid "Close others"
 msgstr "Zamknij pozostałe"
 
-#: thonny/ui_utils.py:1606
+#: thonny/ui_utils.py:1734
 msgid "Copying"
 msgstr "Kopiowanie"
 
-#: thonny/ui_utils.py:1609
+#: thonny/ui_utils.py:1737
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -678,88 +630,65 @@ msgstr "Kopiowanie\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
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
 msgid "Cancel"
 msgstr "Anuluj"
 
-#: 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
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
 msgid "OK"
 msgstr "OK"
 
-#: thonny/ui_utils.py:1783
-msgid "Cancel the process?"
-msgstr "Zatrzymać proces?"
-
-#: thonny/ui_utils.py:1784
-msgid "The process is still running.\n"
-"Are you sure you want to cancel?"
-msgstr "Proces jest nadal uruchomiony.\n"
-"Czy na pewno chcesz zatrzymać?"
-
-#: thonny/ui_utils.py:2182
+#: thonny/ui_utils.py:2345
 msgid "Select All"
 msgstr "Wybierz wszystkie"
 
-#: thonny/plugins/shell_config_page.py:73 thonny/workbench.py:158
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:164
 msgid "Shell"
 msgstr "Powłoka"
 
-#: thonny/plugins/cpython/__init__.py:602
-msgid "The same interpreter which runs Thonny (default)"
-msgstr "Ten sam interpreter, który uruchamia Thonny (domyślnie)"
-
-#: thonny/plugins/cpython/__init__.py:350
-msgid "This virtual environment is automatically maintained by Thonny.\n"
-""
-msgstr "To wirtualne środowisko jest automatycznie zarządzane przez Thonny.\n"
-""
-
-#: thonny/plugins/cpython/__init__.py:351
-msgid "Location: "
-msgstr "Lokalizacja: "
-
-#: thonny/workbench.py:592
+#: thonny/workbench.py:608
 msgid "Options..."
 msgstr "Opcje..."
 
-#: thonny/workbench.py:599
+#: thonny/workbench.py:615
 msgid "Increase font size"
 msgstr "Zwiększ rozmiar czcionki"
 
-#: thonny/workbench.py:664
+#: thonny/workbench.py:679
 msgid "Change font size"
 msgstr "Zmień rozmiar czcionki"
 
-#: thonny/workbench.py:665
+#: thonny/workbench.py:680
 msgid "Zoom"
 msgstr "Powiększenie"
 
-#: thonny/workbench.py:674
+#: thonny/workbench.py:689
 msgid "Exit Thonny"
 msgstr "Zamknij Thonny"
 
-#: thonny/workbench.py:677
+#: thonny/workbench.py:692
 msgid "Quit"
 msgstr "Zakończ"
 
-#: thonny/workbench.py:1181 thonny/workbench.py:1189
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
 msgid "Overwriting theme '%s'"
 msgstr "Nadpisuję temat '%s'"
 
-#: thonny/workbench.py:1348
+#: thonny/workbench.py:1438
 msgid "Program arguments:"
 msgstr "Argumenty programu:"
 
-#: thonny/workbench.py:1402
+#: thonny/workbench.py:1492
 msgid "Regular mode"
 msgstr "Tryb zwykły"
 
-#: thonny/workbench.py:1403
+#: thonny/workbench.py:1493
 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.)"
@@ -767,75 +696,71 @@ msgstr "Konfiguracja została zaktualizowana. Uruchom ponownie Thonny, aby rozpo
 "\n"
 "(Zobacz 'Narzędzia → Opcje → Ogólne', jeśli później zmienisz zdanie)."
 
-#: thonny/plugins/ast_view.py:210
+#: thonny/plugins/ast_view.py:211
 msgid "Program tree"
 msgstr "Drzewo programu"
 
-#: thonny/plugins/backend_config_page.py:323
-msgid "Select interpreter"
-msgstr "Wybierz interpreter"
-
-#: thonny/plugins/debugger.py:1280
+#: thonny/plugins/debugger.py:1284
 msgid "Resume"
 msgstr "Wznów"
 
-#: thonny/plugins/debugger.py:1296
+#: thonny/plugins/debugger.py:1300
 msgid "Run / resume"
 msgstr "Uruchon / wznów"
 
-#: thonny/plugins/debugger.py:1311
+#: thonny/plugins/debugger.py:1315
 msgid "Debug current script"
 msgstr "Debuguj aktualny skrypt"
 
-#: thonny/plugins/debugger.py:1313
+#: thonny/plugins/debugger.py:1317
 msgid "Debug"
 msgstr "Debuguj"
 
-#: thonny/plugins/debugger.py:1324
+#: thonny/plugins/debugger.py:1328
 msgid "Debug current script (nicer)"
 msgstr "Debuguj bieżący skrypt (lepiej)"
 
-#: thonny/plugins/debugger.py:1336
+#: thonny/plugins/debugger.py:1340
 msgid "Debug current script (faster)"
 msgstr "Debuguj bieżący skrypt (szybciej)"
 
-#: thonny/plugins/debugger.py:1347
+#: thonny/plugins/debugger.py:1351
 msgid "Step over"
 msgstr "Zrób krok"
 
-#: thonny/plugins/debugger.py:1349
+#: thonny/plugins/debugger.py:1353
 msgid "Over"
 msgstr "Ponad"
 
-#: thonny/plugins/debugger.py:1360
+#: thonny/plugins/debugger.py:1364
 msgid "Step into"
 msgstr "Wejdź do"
 
-#: thonny/plugins/debugger.py:1362
+#: thonny/plugins/debugger.py:1366
 msgid "Into"
 msgstr "W"
 
-#: thonny/plugins/debugger.py:1373
+#: thonny/plugins/debugger.py:1377
 msgid "Step out"
 msgstr "Wyjdź"
 
-#: thonny/plugins/debugger.py:1375
+#: thonny/plugins/debugger.py:1379
 msgid "Out"
 msgstr "Poza"
 
-#: thonny/plugins/debugger.py:1410
+#: thonny/plugins/debugger.py:1414
 msgid "Step back"
 msgstr "Cofnij"
 
-#: thonny/plugins/debugger.py:1412
+#: thonny/plugins/debugger.py:1416
 msgid "Back"
 msgstr "Wstecz"
 
-#: thonny/plugins/debugger.py:1418
+#: thonny/plugins/debugger.py:1422
 msgid "Stack"
 msgstr "Stos"
 
-#: thonny/plugins/debugger.py:1419
+#: thonny/plugins/debugger.py:1423
 msgid "Exception"
 msgstr "Wyjątek"
 
@@ -855,126 +780,111 @@ msgstr "Tryb UI"
 msgid "UI scaling factor"
 msgstr "Współczynnik skalowania interfejsu"
 
-#: thonny/plugins/general_config_page.py:108
+#: thonny/plugins/general_config_page.py:114
 msgid "NB! Restart Thonny after changing these options!"
 msgstr "Uwaga! Uruchom ponownie Thonny po zmianie tych opcji!"
 
-#: thonny/plugins/general_config_page.py:129
+#: thonny/plugins/general_config_page.py:148
 msgid "General"
 msgstr "Ogólne"
 
-#: thonny/plugins/pip_gui.py:129
+#: thonny/plugins/pip_gui.py:142
 msgid "INSTALL"
 msgstr "Instaluj"
 
-#: thonny/plugins/pip_gui.py:365
+#: thonny/plugins/pip_gui.py:367
 msgid "Browse the packages"
 msgstr "Przeglądaj pakiety"
 
-#: thonny/plugins/pip_gui.py:368
+#: thonny/plugins/pip_gui.py:370
 msgid "With current interpreter you can only browse the packages here.\n"
 "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling."
 msgstr "Przy obecnym interpreterze możesz przeglądać tylko lokalne pakiety.\n"
 "Użyj „Narzędzia → Otwórz powłokę systemową ...”, aby zainstalować, zaktualizować lub odinstalować."
 
-#: thonny/plugins/pip_gui.py:376
+#: thonny/plugins/pip_gui.py:378
 msgid "Packages' directory"
 msgstr "Katalog pakietów"
 
-#: thonny/plugins/pip_gui.py:333
+#: thonny/plugins/pip_gui.py:382
 msgid "Install from PyPI"
 msgstr "Zainstaluj z PyPi"
 
-#: thonny/plugins/pip_gui.py:336
+#: thonny/plugins/pip_gui.py:385
 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 "Jeśli nie wiesz, skąd wziąć pakiet, najprawdopodobniej będziesz chciał przeszukać Indeks pakietów Pythona. Zacznij od wpisania nazwy pakietu\n"
 "w polu wyszukiwania powyżej i wciśnięcia ENTER."
 
-#: thonny/plugins/pip_gui.py:352
+#: thonny/plugins/pip_gui.py:402
 msgid "to locate requirements.txt file and install the packages specified in it."
 msgstr "aby zlokalizować plik requirements.txt i zainstalować określone w nim pakiety."
 
-#: thonny/plugins/pip_gui.py:381
+#: thonny/plugins/pip_gui.py:408
 msgid "Click"
 msgstr "Kliknij"
 
-#: thonny/plugins/pip_gui.py:386
+#: thonny/plugins/pip_gui.py:413
 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
 msgstr "aby zlokalizować i zainstalować plik pakietu (zwykle z rozszerzeniem .whl, .tar.gz lub .zip)."
 
-#: thonny/plugins/micropython/pip_gui.py:243 thonny/plugins/pip_gui.py:393
+#: thonny/plugins/pip_gui.py:420
 msgid "Upgrade or uninstall"
 msgstr "Aktualizuj lub odinstaluj"
 
-#: thonny/plugins/pip_gui.py:395
+#: thonny/plugins/pip_gui.py:422
 msgid "Start by selecting the package from the left."
 msgstr "Zacznij od wybrania pakietu po lewej."
 
-#: thonny/plugins/pip_gui.py:399
-msgid "Target:"
-msgstr "Cel:"
-
-#: thonny/plugins/pip_gui.py:401
-msgid "virtual environment"
-msgstr "wirtualne środowisko"
-
-#: thonny/plugins/pip_gui.py:403
-msgid "user site packages"
-msgstr "lokalne pakiety urzytkownika"
-
-#: thonny/plugins/pip_gui.py:407
+#: thonny/plugins/pip_gui.py:430
 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
 msgstr "To okno dialogowe zawiera listę wszystkich dostępnych pakietów, ale umożliwia aktualizację i odinstalowywanie tylko pakietów z"
 
-#: thonny/plugins/pip_gui.py:417
+#: thonny/plugins/pip_gui.py:440
 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means."
 msgstr "Nowe pakiety zostaną również zainstalowane w tym katalogu. Inne lokalizacje muszą być zarządzane w inny sposób."
 
-#: thonny/plugins/pip_gui.py:441
+#: thonny/plugins/pip_gui.py:493
 msgid "Installed version:"
 msgstr "Zainstalowana wersja:"
 
-#: thonny/plugins/micropython/pip_gui.py:147 thonny/plugins/pip_gui.py:443
+#: thonny/plugins/pip_gui.py:495
 msgid "Installed to:"
 msgstr "Zainstalowane w:"
 
-#: thonny/plugins/pip_gui.py:494
+#: thonny/plugins/pip_gui.py:573
 msgid "Please check your spelling!"
 msgstr "Sprawdź pisownię!"
 
-#: thonny/plugins/pip_gui.py:512
-msgid "You need to enter"
-msgstr "Musisz wprowadzić"
-
-#: thonny/plugins/pip_gui.py:498
+#: thonny/plugins/pip_gui.py:577
 msgid "Could not find the package info from PyPI."
 msgstr "Nie można znaleźć informacji o pakiecie w PyPI."
 
-#: thonny/plugins/pip_gui.py:500 thonny/plugins/pip_gui.py:1200
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
 msgid "Error code:"
 msgstr "Kod błędu:"
 
-#: thonny/plugins/pip_gui.py:601
+#: thonny/plugins/pip_gui.py:748
 msgid "Can't find package name from the list:"
 msgstr "Nie mogę znaleźć nazwy pakietu z listy:"
 
-#: thonny/plugins/pip_gui.py:653
+#: thonny/plugins/pip_gui.py:803
 msgid "Package '{}' is required for installing and uninstalling other packages."
 msgstr "Pakiet „{}” jest wymagany do instalowania i odinstalowywania innych pakietów."
 
-#: thonny/plugins/pip_gui.py:696
+#: thonny/plugins/pip_gui.py:848
 msgid "Package"
 msgstr "Pakiet"
 
-#: thonny/plugins/pip_gui.py:796
+#: thonny/plugins/pip_gui.py:960
 msgid "Manage packages for %s"
 msgstr "Zarządzaj pakietami dla %s"
 
-#: thonny/plugins/pip_gui.py:872
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
 msgid "Confirmation"
 msgstr "Potwierdzenie"
 
-#: thonny/plugins/pip_gui.py:873
+#: thonny/plugins/pip_gui.py:1035
 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"
@@ -986,149 +896,135 @@ msgstr "Wygląda na to, że instalujesz pakiet związany z Thonny.\n"
 "\n"
 "Czy na pewno chcesz zainstalować %s?"
 
-#: thonny/plugins/pip_gui.py:981
+#: thonny/plugins/pip_gui.py:1141
 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 "Uwaga! Może być dostępna inna wersja, zgodna z bieżącą\n"
 "wersją Thonny. Kliknij przycisk '...', aby wybrać\n"
 "wersję do zainstalowania."
 
-#: thonny/plugins/pip_gui.py:989
+#: thonny/plugins/pip_gui.py:1149
 msgid "Thonny plugin without requirements"
 msgstr "Wtyczka Thonny bez wymagań"
 
-#: 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 "Wygląda na to, że próbujesz zainstalować przestarzałą wtyczkę\n"
-"Thonny (nie określa wymaganej wersji Thonny).\n"
-"\n"
-"Jeśli nadal tego chcesz, zainstaluj ją z wiersza poleceń."
-
-#: thonny/plugins/pip_gui.py:1004
+#: thonny/plugins/pip_gui.py:1165
 msgid "Unsuitable requirements"
 msgstr "Niewłaściwe wymagania"
 
-#: thonny/plugins/pip_gui.py:1005
+#: thonny/plugins/pip_gui.py:1166
 msgid "This package requires different Thonny version:"
 msgstr "Ten pakiet wymaga innej wersji Thonny:"
 
-#: thonny/plugins/pip_gui.py:1009
+#: thonny/plugins/pip_gui.py:1170
 msgid "If you still want it, then please install it from the command line."
 msgstr "Jeśli nadal tego chcesz, zainstaluj z wiersza poleceń."
 
-#: thonny/plugins/pip_gui.py:1052
-msgid "(In this case Thonny's back-end uses same interpreter, so both dialogs manage same packages.)"
-msgstr "(W tym przypadku Thonny używa tego samego interpretera, więc oba okna dialogowe zarządzają tymi samymi pakietami)."
-
-#: thonny/plugins/pip_gui.py:1058
+#: thonny/plugins/pip_gui.py:1207
 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
 msgstr "Uwaga! Musisz ponownie uruchomić Thonny po instalacji\n"
 "/ aktualizacji / odinstalowaniu wtyczki."
 
-#: thonny/plugins/pip_gui.py:1068
+#: thonny/plugins/pip_gui.py:1217
 msgid "Thonny plug-ins"
 msgstr "Wtyczki Thonny"
 
-#: thonny/plugins/pip_gui.py:1090
+#: thonny/plugins/pip_gui.py:1253
 msgid "Advanced install / upgrade / downgrade"
 msgstr "Zaawansowana instalacja / aktualizacja / obniżenie wersji"
 
-#: thonny/plugins/pip_gui.py:1099
+#: thonny/plugins/pip_gui.py:1262
 msgid "Desired version"
 msgstr "Pożądana wersja"
 
-#: thonny/plugins/pip_gui.py:1137
+#: thonny/plugins/pip_gui.py:1321
 msgid "Upgrade dependencies"
 msgstr "Aktualizuj zależności"
 
-#: thonny/plugins/pip_gui.py:1198
+#: thonny/plugins/pip_gui.py:1406
 msgid "Requires:"
 msgstr "Wymaga:"
 
-#: thonny/plugins/pip_gui.py:1202
+#: thonny/plugins/pip_gui.py:1410
 msgid "Error:"
 msgstr "Błąd:"
 
-#: thonny/plugins/pip_gui.py:1409
+#: thonny/plugins/pip_gui.py:1601
 msgid "Manage packages..."
 msgstr "Zarządzaj pakietami..."
 
-#: thonny/plugins/pip_gui.py:1415
+#: thonny/plugins/pip_gui.py:1607
 msgid "Manage plug-ins..."
 msgstr "Zarządzaj wtyczkami..."
 
-#: thonny/plugins/replayer.py:365
+#: thonny/plugins/replayer.py:364
 msgid "Open replayer..."
 msgstr "Otwórz replayer..."
 
-#: thonny/plugins/run_debug_config_page.py:14
+#: thonny/plugins/run_debug_config_page.py:21
 msgid "Change working directory to script directory on Run / Debug"
 msgstr "Zmień katalog roboczy na katalog skryptów po wybraniu Uruchom / Debuguj"
 
-#: thonny/plugins/run_debug_config_page.py:22
+#: thonny/plugins/run_debug_config_page.py:35
 msgid "Show function calls (frames) in separate windows"
 msgstr "Pokaż wywołania funkcji (ramki) w osobnych oknach"
 
-#: thonny/plugins/run_debug_config_page.py:23
+#: thonny/plugins/run_debug_config_page.py:36
 msgid "Uncheck if you want more traditional experience."
 msgstr "Odznacz, jeśli potrzebujesz tradycyjnej wersji"
 
-#: thonny/plugins/run_debug_config_page.py:29
+#: thonny/plugins/run_debug_config_page.py:42
 msgid "Open and close Stack view automatically"
 msgstr "Automatycznie otwórz i zamknij podgląd stosu"
 
-#: thonny/plugins/run_debug_config_page.py:30
+#: thonny/plugins/run_debug_config_page.py:43
 msgid "Opens the Stack view on first call and closes it when program returns to main frame."
 msgstr "Otwiera podgląd stosu przy pierwszym wywołaniu i zamyka\n"
 "po powrocie do głównej ramki."
 
-#: thonny/plugins/run_debug_config_page.py:39
+#: thonny/plugins/run_debug_config_page.py:52
 msgid "Allow stepping into libraries (ie. outside of main script directory)"
 msgstr "Zezwól na pracę krokową w bibliotekach (czyli po za głównym katalogiem skryptów)"
 
-#: thonny/plugins/run_debug_config_page.py:40
+#: thonny/plugins/run_debug_config_page.py:53
 msgid "May make debugging slower."
 msgstr "Może spowolnić debugowanie."
 
-#: thonny/plugins/run_debug_config_page.py:45
+#: thonny/plugins/run_debug_config_page.py:58
 msgid "Preferred debugger"
 msgstr "Preferowany debuger"
 
-#: thonny/plugins/run_debug_config_page.py:57
+#: thonny/plugins/run_debug_config_page.py:70
 msgid "(used when clicking Debug toolbar button)"
 msgstr "(używane po kliknięciu przycisku paska narzędzi debugowania)"
 
-#: thonny/plugins/run_debug_config_page.py:62
+#: thonny/plugins/run_debug_config_page.py:75
 msgid "Birdseye port"
 msgstr "Port Birdseye"
 
-#: thonny/plugins/run_debug_config_page.py:66
+#: thonny/plugins/run_debug_config_page.py:79
 msgid "(restart Thonny after changing this)"
 msgstr "(uruchom ponownie Thonny po zmianie)"
 
-#: thonny/plugins/run_debug_config_page.py:74
+#: thonny/plugins/run_debug_config_page.py:87
 msgid "Run & Debug"
 msgstr "Uruchom i debuguj"
 
-#: thonny/plugins/shell_config_page.py:17
+#: thonny/plugins/shell_config_page.py:26
 msgid "Terminal emulation"
 msgstr "Emulacja terminala"
 
-#: thonny/plugins/shell_config_page.py:19
+#: thonny/plugins/shell_config_page.py:28
 msgid "supports basic ANSI-colors and styles"
 msgstr "obsługuje podstawowe kolory i style ANSI"
 
-#: thonny/plugins/shell_config_page.py:31
+#: thonny/plugins/shell_config_page.py:40
 msgid "Maximum number of lines to keep."
 msgstr "Maksymalna liczba wierszy do zachowania."
 
-#: thonny/plugins/shell_config_page.py:33
+#: thonny/plugins/shell_config_page.py:42
 msgid "NB! Large values may cause poor performance!"
 msgstr "Uwaga! Duże wartości mogą powodować słabą wydajność!"
 
-#: thonny/plugins/shell_config_page.py:49
+#: thonny/plugins/shell_config_page.py:58
 msgid "Maximum length of line fragments before squeezing"
 msgstr "Maksymalna długość fragmentów wierszy przed ściśnięciem"
 
@@ -1154,52 +1050,52 @@ msgstr "Uwaga! Automatyczne zamykanie musi być włączone w ustawieniach termin
 msgid "Terminal"
 msgstr "Terminal"
 
-#: thonny/plugins/theme_and_font_config_page.py:40
+#: thonny/plugins/theme_and_font_config_page.py:39
 msgid "UI theme"
 msgstr "Wygląd"
 
-#: thonny/plugins/theme_and_font_config_page.py:53
+#: thonny/plugins/theme_and_font_config_page.py:52
 msgid "Syntax theme"
 msgstr "Styl składni"
 
-#: thonny/plugins/theme_and_font_config_page.py:85
+#: thonny/plugins/theme_and_font_config_page.py:84
 msgid "Editor font"
 msgstr "Czcionka edytora"
 
-#: thonny/plugins/theme_and_font_config_page.py:108
+#: thonny/plugins/theme_and_font_config_page.py:107
 msgid "IO font"
 msgstr "Czcionka We/Wy"
 
-#: thonny/plugins/theme_and_font_config_page.py:133
+#: thonny/plugins/theme_and_font_config_page.py:132
 msgid "Preview"
 msgstr "Podgląd"
 
-#: thonny/plugins/theme_and_font_config_page.py:145
+#: thonny/plugins/theme_and_font_config_page.py:150
 msgid "This is a comment"
 msgstr "To jest komentarz"
 
-#: thonny/plugins/theme_and_font_config_page.py:148
+#: thonny/plugins/theme_and_font_config_page.py:153
 msgid "The answer is"
 msgstr "Odpowiedź to"
 
-#: thonny/plugins/theme_and_font_config_page.py:152
+#: thonny/plugins/theme_and_font_config_page.py:157
 msgid "unclosed_string"
 msgstr "niezamknięty łańcuch znaków"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:159
 msgid "blah, blah"
 msgstr "cośtam, cośtam"
 
-#: thonny/plugins/theme_and_font_config_page.py:177
+#: thonny/plugins/theme_and_font_config_page.py:183
 msgid "NB! Some style elements change only after restarting Thonny!"
 msgstr "Uwaga! Niektóre elementy stylu zmieniają się dopiero\n"
 "po ponownym uruchomieniu Thonny!"
 
-#: thonny/plugins/theme_and_font_config_page.py:216
+#: thonny/plugins/theme_and_font_config_page.py:222
 msgid "Enter an integer"
 msgstr "Wprowadź liczbę całkowitą"
 
-#: thonny/plugins/theme_and_font_config_page.py:229
+#: thonny/plugins/theme_and_font_config_page.py:235
 msgid "Theme & Font"
 msgstr "Temat i czcionka"
 
@@ -1211,85 +1107,85 @@ msgstr "Otwórz folder programu Thonny ..."
 msgid "Open Thonny data folder..."
 msgstr "Otwórz folder danych Thonny ..."
 
-#: thonny/plugins/help/__init__.py:64
+#: thonny/plugins/help/__init__.py:70
 msgid "Home"
 msgstr "Katalog domowy"
 
-#: thonny/plugins/help/__init__.py:75
+#: thonny/plugins/help/__init__.py:81
 msgid "Help contents"
 msgstr "Pomoc"
 
-#: thonny/plugins/micropython/__init__.py:274
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "Urządzenie CircuitPython"
 
-#: thonny/plugins/micropython/__init__.py:278
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "Urządzenie MicroPython"
 
-#: thonny/plugins/micropython/__init__.py:476
+#: thonny/plugins/micropython/mp_front.py:558
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "Podłącz urządzenie do komputera i wybierz odpowiedni port poniżej"
 
-#: thonny/plugins/micropython/__init__.py:479
+#: thonny/plugins/micropython/mp_front.py:561
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "wyszukaj nazwę swojego urządzenia, „USB Serial” lub „UART”"
 
-#: thonny/plugins/micropython/__init__.py:481
+#: thonny/plugins/micropython/mp_front.py:563
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "Jeśli nie możesz go znaleźć, być może najpierw musisz zainstalować odpowiedni sterownik USB."
 
-#: thonny/plugins/micropython/__init__.py:401
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port"
 msgstr "Port"
 
-#: thonny/plugins/micropython/__init__.py:411
+#: thonny/plugins/micropython/mp_front.py:458
 msgid "Try to detect port automatically"
 msgstr "Spróbuj wykryć port automatycznie"
 
-#: thonny/plugins/micropython/__init__.py:954
+#: thonny/plugins/micropython/__init__.py:24
 msgid "MicroPython (generic)"
 msgstr "MicroPython (klasyczny)"
 
-#: thonny/plugins/printing/__init__.py:82
+#: thonny/plugins/printing/__init__.py:98
 msgid "Print..."
 msgstr "Drukuj..."
 
-#: thonny/plugins/system_shell/__init__.py:59
+#: thonny/plugins/system_shell/__init__.py:63
 msgid "Open system shell..."
 msgstr "Otwórz powłokę systemową..."
 
-#: thonny/plugins/backend_config_page.py:103
+#: thonny/plugins/backend_config_page.py:109
 msgid "Details"
 msgstr "Szczegóły"
 
-#: thonny/plugins/pip_gui.py:345
+#: thonny/plugins/pip_gui.py:395
 msgid "Install from requirements file"
 msgstr "Zainstaluj z pliku wymagań"
 
-#: thonny/plugins/pip_gui.py:380
+#: thonny/plugins/pip_gui.py:407
 msgid "Install from local file"
 msgstr "Zainstaluj z pliku lokalnego"
 
-#: thonny/plugins/pip_gui.py:1038
+#: thonny/plugins/pip_gui.py:1200
 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 "Ten dialog służy do zarządzania wtyczkami Thonny i ich zależnościami.\n"
 "Jeśli chcesz instalować pakiety dla swoich programów, wybierz \"Narzedzia → Zarządzaj pakietami...\""
 
-#: thonny/plugins/circuitpython/__init__.py:163
+#: thonny/plugins/circuitpython/__init__.py:10
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (klasyczny)"
 
-#: thonny/plugins/commenting_indenting.py:143
+#: thonny/plugins/commenting_indenting.py:142
 msgid "Indent selected lines"
 msgstr "Wcięcie wybranych linii"
 
-#: thonny/plugins/commenting_indenting.py:153
+#: thonny/plugins/commenting_indenting.py:152
 msgid "Dedent selected lines"
 msgstr "Usuń wcięcie wybranych linii"
 
-#: thonny/workbench.py:1391
+#: thonny/workbench.py:1481
 msgid "Switch to\n"
 "regular\n"
 "mode"
@@ -1297,505 +1193,795 @@ msgstr "Przełącz na\n"
 "tryb regularny\n"
 ""
 
-#: thonny/plugins/microbit/__init__.py:55
+#: thonny/plugins/microbit/__init__.py:62
 msgid "Make sure MicroPython has been installed to your micro:bit."
 msgstr "Upewnij się, że MicroPython został zainstalowany na twoim micro:bit."
 
-#: thonny/plugins/microbit/__init__.py:57
+#: thonny/plugins/microbit/__init__.py:64
 msgid "Don't forget that main.py only works without embedded main script."
 msgstr "Nie zapominaj, że main.py działa tylko bez osadzonego skryptu głównego"
 
-#: thonny/plugins/micropython/uf2dialog.py:45
-msgid "please wait"
-msgstr "proszę czekaj"
-
-#: thonny/plugins/microbit/__init__.py:199
-msgid "Done!"
-msgstr "Gotowe!"
-
-#: thonny/plugins/micropython/__init__.py:298
-msgid "Firmware"
-msgstr "Firmware"
-
-#: thonny/misc_utils.py:134
+#: thonny/misc_utils.py:177
 msgid "Could not find disk '%s'. Do you want to locate it yourself?"
 msgstr "Nie znaleziono dysku '%s'. Czy chcesz zlokalizować sam?"
 
-#: thonny/misc_utils.py:137
+#: thonny/misc_utils.py:180
 msgid "Found several '%s' disks. Do you want to choose one yourself?"
 msgstr "Znaleziono kilka dysków '%s'. Czy chcesz sam wybrać?"
 
-#: thonny/misc_utils.py:153
+#: thonny/misc_utils.py:196
 msgid "Can't find suitable disk"
 msgstr "Nie mogę znaleźć odpowiedniego dysku"
 
-#: thonny/base_file_browser.py:273
+#: thonny/base_file_browser.py:294
 msgid "%d items"
 msgstr "%d elementów"
 
-#: thonny/base_file_browser.py:692
-msgid "Move to Recycle Bin"
-msgstr "Przenieś do Kosza"
-
-#: thonny/base_file_browser.py:694
+#: thonny/base_file_browser.py:743
 msgid "Move to Trash"
 msgstr "Przenieś do Kosza"
 
-#: thonny/base_file_browser.py:697
+#: thonny/base_file_browser.py:746
 msgid "Delete"
 msgstr "Usuń"
 
-#: thonny/base_file_browser.py:700 thonny/base_file_browser.py:834
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
 msgid "New directory"
 msgstr "Nowy katalog"
 
-#: thonny/base_file_browser.py:703
+#: thonny/base_file_browser.py:749
 msgid "Properties"
 msgstr "Właściwości"
 
-#: thonny/base_file_browser.py:705
+#: thonny/base_file_browser.py:751
 msgid "Storage space"
 msgstr "Przestrzeń dyskowa"
 
-#: thonny/base_file_browser.py:715
+#: thonny/base_file_browser.py:761
 msgid "Path"
 msgstr "Scieżka"
 
-#: thonny/base_file_browser.py:717
+#: thonny/base_file_browser.py:763
 msgid "Directory properties"
 msgstr "Właściwości katalogu"
 
-#: thonny/base_file_browser.py:719
+#: thonny/base_file_browser.py:765
 msgid "File properties"
 msgstr "Właściwości pliku"
 
-#: thonny/base_file_browser.py:721
+#: thonny/base_file_browser.py:767
 msgid "bytes"
 msgstr "bajty"
 
-#: thonny/base_file_browser.py:724
+#: thonny/base_file_browser.py:770
 msgid "Size"
 msgstr "Rozmiar"
 
-#: thonny/base_file_browser.py:83 thonny/base_file_browser.py:735
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
 msgid "Modified"
 msgstr "Zmodyfikowane"
 
-#: thonny/base_file_browser.py:794
+#: thonny/base_file_browser.py:842
 msgid "Deleting %s"
 msgstr "Usuwanie %s"
 
-#: thonny/base_file_browser.py:817
-msgid "Moving %s to %s"
-msgstr "Przesuwanie %s do %s"
-
-#: thonny/editors.py:219
+#: thonny/editors.py:262
 msgid "Loading"
 msgstr "Ładowanie"
 
-#: thonny/editors.py:335
+#: thonny/editors.py:395
 msgid "Saving"
 msgstr "Zapisywanie"
 
-#: thonny/running.py:1408
-msgid "Working..."
-msgstr "Pracuję..."
-
-#: thonny/plugins/files.py:199
-msgid "Uploading %s to %s"
-msgstr "Wysyłanie %s do %s"
-
-#: thonny/plugins/files.py:216
+#: thonny/plugins/files.py:219
 msgid "Upload to %s"
 msgstr "Przesyłanie do %s"
 
-#: thonny/plugins/files.py:362
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
 msgstr "Pobieranie %s do %s"
 
-#: thonny/plugins/files.py:275
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr "Pobieranie do %s"
 
-#: thonny/base_file_browser.py:620
+#: thonny/base_file_browser.py:650
 msgid "Open in system file manager"
 msgstr "Otwórz w"
 
-#: thonny/base_file_browser.py:625
+#: thonny/base_file_browser.py:678
 msgid "Hide hidden files"
 msgstr "Schowaj ukryte pliki"
 
-#: thonny/base_file_browser.py:625
+#: thonny/base_file_browser.py:678
 msgid "Show hidden files"
 msgstr "Pokaż ukryte pliki"
 
-#: thonny/base_file_browser.py:635
+#: thonny/base_file_browser.py:661
 msgid "Open in Thonny"
 msgstr "Otwórz w Tonny"
 
-#: thonny/base_file_browser.py:640 thonny/base_file_browser.py:661
+#: thonny/base_file_browser.py:692
 msgid "Open in system default app"
 msgstr "Otwórz w domyślnej aplikacji"
 
-#: thonny/base_file_browser.py:647 thonny/base_file_browser.py:669
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
 msgid "Configure %s files"
 msgstr "Konfiguruj pliki %s"
 
-#: thonny/base_file_browser.py:670
+#: thonny/base_file_browser.py:701
 msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
 msgstr "Co zrobić z  plikiem %s gdy podwójnie klikniesz w przeglądarce plików Thonny?"
 
-#: thonny/base_file_browser.py:1042 thonny/plugins/micropython/pip_gui.py:77
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
 msgid "Deleting"
 msgstr "Kasowanie"
 
-#: thonny/base_file_browser.py:1049
+#: thonny/base_file_browser.py:1265
 msgid "Creating directory"
 msgstr "Tworzenie folderu"
 
-#: thonny/editors.py:217
+#: thonny/editors.py:260
 msgid "Loading %s"
 msgstr "Ładowanie %s"
 
-#: thonny/editors.py:333
+#: thonny/editors.py:390
 msgid "Saving to %s"
 msgstr "Zapisywanie do %s"
 
-#: thonny/editors.py:622 thonny/editors.py:624
+#: thonny/editors.py:728 thonny/editors.py:730
 msgid "Save All files"
 msgstr "Zapisz wszystkie pliki"
 
-#: thonny/workbench.py:828
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
 msgid "Configure interpreter..."
-msgstr ""
+msgstr "Skonfiguruj interpreter..."
 
-#: thonny/workbench.py:1501
+#: thonny/workbench.py:1591
 msgid "Device"
-msgstr ""
+msgstr "Urządzenie"
 
-#: thonny/workdlg.py:185
+#: thonny/workdlg.py:234
 msgid "Cancelling"
-msgstr ""
+msgstr "Anuluję"
 
-#: thonny/workdlg.py:212
+#: thonny/workdlg.py:270
 msgid "Starting"
-msgstr ""
+msgstr "Startuję"
 
-#: thonny/plugins/backend_config_page.py:234
+#: thonny/plugins/backend_config_page.py:249
 msgid "Authentication"
-msgstr ""
+msgstr "Uwierzytelnienie"
 
-#: thonny/plugins/backend_config_page.py:236
+#: thonny/plugins/backend_config_page.py:251
 msgid "Enter the passphrase of your private key for\n"
 "{}"
-msgstr ""
+msgstr "Wpisz hasło klucza prywatnego dla\n"
+"{}"
 
-#: thonny/plugins/backend_config_page.py:239
+#: thonny/plugins/backend_config_page.py:254
 msgid "Enter your password for\n"
 "{}"
-msgstr ""
+msgstr "Wpisz hasło dla\n"
+"{}"
 
-#: thonny/plugins/object_inspector.py:458
+#: thonny/plugins/object_inspector.py:486
 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s"
-msgstr ""
+msgstr "Reprezentacja powyżej jest jedynie przybliżeniem wartości float. Dokładna zapisana wartość wynosi %s co jest %s"
 
-#: thonny/plugins/pip_gui.py:557
+#: thonny/plugins/pip_gui.py:682
 msgid "Search results"
-msgstr ""
+msgstr "Szukaj wyników"
 
-#: thonny/plugins/pip_gui.py:558
+#: thonny/plugins/pip_gui.py:683
 msgid "Searching"
-msgstr ""
+msgstr "Wyszukuję"
 
-#: thonny/plugins/pip_gui.py:639 thonny/plugins/pip_gui.py:729
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
 msgid "Installing '%s'"
-msgstr ""
+msgstr "Instaluję '%s'"
 
-#: thonny/plugins/pip_gui.py:645
+#: thonny/plugins/pip_gui.py:793
 msgid "Upgrading '%s'"
-msgstr ""
+msgstr "Aktualizuję '%s'"
 
-#: thonny/plugins/pip_gui.py:650
+#: thonny/plugins/pip_gui.py:800
 msgid "Uninstalling '%s'"
-msgstr ""
+msgstr "Odinstalowuję '%s'"
 
-#: thonny/plugins/pip_gui.py:663
+#: thonny/plugins/pip_gui.py:814
 msgid "Installing"
-msgstr ""
+msgstr "Instaluję"
 
-#: thonny/plugins/pip_gui.py:1372
+#: thonny/plugins/pip_gui.py:1562
 msgid "Package manager is not available for this interpreter"
-msgstr ""
+msgstr "Menadżer pakietów jest niedostępny dla tego intepretera"
 
-#: thonny/plugins/pip_gui.py:1385
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
 msgid "Not supported"
-msgstr ""
+msgstr "Brak wsparcia"
 
-#: thonny/plugins/micropython/pip_gui.py:290 thonny/plugins/pip_gui.py:1390
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
 msgid "Not available"
-msgstr ""
+msgstr "Niedostępne"
 
-#: thonny/plugins/pip_gui.py:1391
+#: thonny/plugins/pip_gui.py:1582
 msgid "You need to stop your program before launching the package manager."
-msgstr ""
+msgstr "Musisz zatrzyać swój program przed uruchomieniem menadżera pakietów."
 
-#: thonny/plugins/shell_config_page.py:64
+#: thonny/plugins/shell_config_page.py:73
 msgid "Open evaluated values in Object inspector"
-msgstr ""
+msgstr "Otwórz wyliczone wartości w inspektorze Obiektów"
 
-#: thonny/plugins/cpython/__init__.py:370
+#: thonny/plugins/cpython_frontend/cp_front.py:234
 msgid "Python executable"
-msgstr ""
+msgstr "Wykonywalny plik Python"
 
-#: thonny/plugins/cpython/__init__.py:393
+#: thonny/plugins/cpython_frontend/cp_front.py:258
+#, fuzzy
 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 ""
+msgstr "NB! Przycisk wyboru pliku może nie działać prawidłowo gdy wybierane są pliki wykonywalne ze środowiska wirtualnego. \n"
+"W takim przypadku wybierz 'aktywuj skrypt' zamiast interpretera (lub wpisz ścieżkę ręcznie)!"
 
-#: thonny/plugins/cpython_ssh/__init__.py:153
+#: thonny/plugins/cpython_ssh/__init__.py:17
 msgid "Remote Python 3 (SSH)"
-msgstr ""
+msgstr "Zdalny Python 3 (SSH)"
 
-#: thonny/plugins/micropython/__init__.py:284
+#: thonny/plugins/micropython/mp_front.py:313
 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 ""
+msgstr "Nie połączony"
 
-#: thonny/plugins/micropython/__init__.py:963
+#: thonny/plugins/micropython/__init__.py:35
 msgid "MicroPython (local)"
-msgstr ""
+msgstr "MicroPython (lokalnie)"
 
-#: thonny/plugins/micropython/__init__.py:973
+#: thonny/plugins/micropython/__init__.py:46
 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 ""
+msgstr "MicroPython (SSH)"
 
-#: 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
+#: thonny/plugins/micropython/pip_gui.py:144
 msgid "no absolute lib directory in sys.path"
-msgstr ""
-
-#: thonny/plugins/micropython/uf2dialog.py:40
-msgid "Version to be installed"
-msgstr ""
+msgstr "brak absolutniej ścieżki bibliotek w sys.path"
 
-#: 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
+#: thonny/plugins/pip_gui.py:71
 msgid "Search on PyPI"
-msgstr ""
-
-#: thonny/plugins/pip_gui.py:79
-msgid "Delete selected"
-msgstr ""
+msgstr "Wyszukaj na PyPl"
 
-#: thonny/base_file_browser.py:662
+#: thonny/base_file_browser.py:693
 msgid "Open in Thonny's text editor"
-msgstr ""
+msgstr "Otwórz w edytorze tekstowym Thonny"
 
-#: thonny/base_file_browser.py:325
+#: thonny/base_file_browser.py:346
 msgid "Storage space on this drive or filesystem"
-msgstr ""
+msgstr "Ilość miejsca na tym dysku lub systemie plików"
 
-#: thonny/base_file_browser.py:326
+#: thonny/base_file_browser.py:347
 msgid "total space"
-msgstr ""
+msgstr "całkowite miejsce"
 
-#: thonny/base_file_browser.py:328
+#: thonny/base_file_browser.py:349
 msgid "used space"
-msgstr ""
+msgstr "używane miejsce"
 
-#: thonny/base_file_browser.py:329
+#: thonny/base_file_browser.py:350
 msgid "free space"
-msgstr ""
+msgstr "wolne miejsce"
 
-#: thonny/base_file_browser.py:336
+#: thonny/base_file_browser.py:357
 msgid "Storage info"
-msgstr ""
+msgstr "Pamięć masowa"
 
-#: thonny/plugins/commenting_indenting.py:163
+#: thonny/plugins/commenting_indenting.py:162
 msgid "Replace tabs with spaces"
-msgstr ""
+msgstr "Zamień tabulatory ze spacjami"
 
-#: thonny/plugins/editor_config_page.py:28
+#: thonny/plugins/editor_config_page.py:33
 msgid "Highlight tab characters"
-msgstr ""
+msgstr "Podświetlenie tabulatorów"
 
-#: thonny/plugins/editor_config_page.py:47
+#: thonny/plugins/editor_config_page.py:68
 msgid "Indent with tab characters (not recommended for Python)"
-msgstr ""
+msgstr "Formatowanie z użyciem tabulatorów (nie rekomendowanie dla Pythona)"
 
-#: thonny/base_file_browser.py:81 thonny/memory.py:63
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
 msgid "Name"
-msgstr ""
+msgstr "Nazwa"
 
-#: thonny/base_file_browser.py:85
+#: thonny/base_file_browser.py:96
 msgid "Size (bytes)"
-msgstr ""
+msgstr "Rozmiar (bajty)"
 
-#: thonny/base_file_browser.py:835
+#: thonny/base_file_browser.py:879
 msgid "Enter name for new directory under\n"
 "%s"
-msgstr ""
+msgstr "Określ nazwę nowego kataloku w %s"
 
-#: thonny/base_file_browser.py:858
+#: thonny/base_file_browser.py:902
 msgid "Nothing selected"
-msgstr ""
+msgstr "Nic nie wybrano"
 
-#: thonny/base_file_browser.py:858
+#: thonny/base_file_browser.py:902
 msgid "Select an item and try again!"
-msgstr ""
+msgstr "Wybierz element i spróbuj ponownie!"
 
-#: thonny/base_file_browser.py:1105
+#: thonny/base_file_browser.py:1329
 msgid "Open from %s"
-msgstr ""
+msgstr "Otwórz z %s"
 
-#: thonny/base_file_browser.py:1108
+#: thonny/base_file_browser.py:1332
 msgid "Save to %s"
-msgstr ""
+msgstr "Zapisz do %s"
 
-#: thonny/base_file_browser.py:1120
+#: thonny/base_file_browser.py:1351
 msgid "File name:"
-msgstr ""
+msgstr "Nazwa pliku:"
 
-#: thonny/memory.py:64 thonny/plugins/object_inspector.py:510
-#: thonny/plugins/object_inspector.py:589
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
 msgid "Value ID"
-msgstr ""
+msgstr "Wartość ID"
 
 #: thonny/memory.py:65 thonny/plugins/heap.py:23
-#: thonny/plugins/object_inspector.py:511
-#: thonny/plugins/object_inspector.py:590
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
 msgid "Value"
-msgstr ""
+msgstr "Wartość"
 
-#: thonny/plugins/backend_config_page.py:257
+#: thonny/plugins/backend_config_page.py:272
 msgid "Save password"
-msgstr ""
+msgstr "Zapisz hasło"
 
-#: thonny/plugins/debugger.py:553
+#: thonny/plugins/debugger.py:557
 msgid "Function call at %s"
-msgstr ""
+msgstr "Wywołanie funkcji w %s"
 
-#: thonny/plugins/debugger.py:1001
+#: thonny/plugins/debugger.py:1006
 msgid "Local variables"
-msgstr ""
+msgstr "Zmienne lokalne"
 
-#: thonny/plugins/debugger.py:1033
+#: thonny/plugins/debugger.py:1038
 msgid "Function"
-msgstr ""
+msgstr "Funkcja"
 
-#: thonny/plugins/debugger.py:1034
+#: thonny/plugins/debugger.py:1039
 msgid "Location"
-msgstr ""
+msgstr "Miejsce"
 
-#: thonny/plugins/debugger.py:1110
+#: thonny/plugins/debugger.py:1115
 msgid "If last command raised an exception then this view will show the stacktrace."
-msgstr ""
+msgstr "Jeżeli ostatnia komenda zakończyła się wyjątkiem ten widok pokaże ramkę stosu."
 
 #: thonny/plugins/heap.py:22
 msgid "ID"
-msgstr ""
+msgstr "ID"
 
-#: thonny/plugins/object_inspector.py:87
+#: thonny/plugins/object_inspector.py:92
 msgid "Data"
-msgstr ""
+msgstr "Data"
 
-#: thonny/plugins/object_inspector.py:88
+#: thonny/plugins/object_inspector.py:93
 msgid "Attributes"
-msgstr ""
+msgstr "Atrybuty"
 
-#: thonny/plugins/object_inspector.py:509
+#: thonny/plugins/object_inspector.py:537
 msgid "Index"
-msgstr ""
+msgstr "Indeks"
 
-#: thonny/plugins/object_inspector.py:587
+#: thonny/plugins/object_inspector.py:615
 msgid "Key ID"
-msgstr ""
+msgstr "Klucz ID"
 
-#: thonny/plugins/object_inspector.py:588
+#: thonny/plugins/object_inspector.py:616
 msgid "Key"
-msgstr ""
+msgstr "Klucz"
 
-#: thonny/plugins/variables.py:36
+#: thonny/plugins/variables.py:39
 msgid "Back to\n"
 "%s"
-msgstr ""
+msgstr "Wróc do %s"
 
-#: thonny/plugins/micropython/__init__.py:401
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port or WebREPL"
-msgstr ""
+msgstr "Port do WebREPL"
 
-#: thonny/plugins/micropython/__init__.py:518
+#: thonny/plugins/micropython/mp_front.py:599
 msgid "Password"
-msgstr ""
+msgstr "Hasło"
 
-#: thonny/plugins/debugger.py:959
+#: thonny/plugins/debugger.py:964
 msgid "Source code"
-msgstr ""
+msgstr "Kod źródłowy"
 
 #: thonny/plugins/general_config_page.py:29
 msgid "Use Tk file dialogs instead of Zenity"
-msgstr ""
+msgstr "Użyj okien dialogowych Tk zamiast Zenity"
 
 #: thonny/plugins/general_config_page.py:30
 msgid "Select if the file dialogs end up behind the main window"
-msgstr ""
+msgstr "Wybierz, jeżeli okna dialogowe kończą sie poza oknem głównym"
 
 #: thonny/plugins/general_config_page.py:97
 msgid "Environment variables (one KEY=VALUE per line)"
+msgstr "Zmienne środowiskowe (jeden KLUCZ=WARTOŚĆ na linię)"
+
+#: thonny/base_file_browser.py:722
+msgid "New file"
+msgstr "Nowy plik"
+
+#: thonny/base_file_browser.py:740
+msgid "Rename"
+msgstr "Zmień nazwę"
+
+#: thonny/base_file_browser.py:928
+msgid "Rename '%s'"
+msgstr "Zmień nazwę '%s'"
+
+#: thonny/base_file_browser.py:928
+msgid "Enter new name"
+msgstr "Wprowadź nową nazwę"
+
+#: thonny/base_file_browser.py:1016
+msgid "Paste failed"
+msgstr "Wklejenie nie powiodło się"
+
+#: thonny/base_file_browser.py:1016
+msgid "There are conflicting folders"
+msgstr "Istnieją konfliktujące katalogi"
+
+#: thonny/base_file_browser.py:1144
+msgid "File already exists"
+msgstr "Plik już istnieje"
+
+#: thonny/base_file_browser.py:1212
+msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
+msgstr "Jeżeli to plik tektowy, to możesz go skonfigurować aby otwierał się w Thonny klikają prawym przyciskiem i wybierając 'Konfiguruj ... pliki'."
+
+#: thonny/editors.py:38
+msgid "Python files"
+msgstr "Pliki Pythona"
+
+#: thonny/editors.py:123 thonny/editors.py:189
+msgid "<untitled>"
+msgstr "<bez_nazwy>"
+
+#: thonny/editors.py:150
+msgid "File is gone"
+msgstr "Pliku nie znaleziono"
+
+#: thonny/editors.py:153
+msgid "Do you want to also close the editor?"
+msgstr "Czy chcesz też zamknąć edytor?"
+
+#: thonny/editors.py:169
+msgid "External modification"
+msgstr "Modyfikacja zewnętrzna"
+
+#: thonny/editors.py:172
+msgid "Do you want to discard current editor content and reload the file from disk?"
+msgstr "Czy chcesz usunąć zawartość edytoru i ponownie załadować plik z dysku?"
+
+#: thonny/editors.py:588
+msgid "Python files usually have .py extension."
+msgstr "Pliki Pythona zazwyczaj mają rozszerzenie .py."
+
+#: thonny/editors.py:590
+msgid "Did you mean '%s'?"
+msgstr "Masz na myśli '%s'?"
+
+#: thonny/editors.py:759
+msgid "Move / rename..."
+msgstr "Przesuń / zmień nazwę..."
+
+#: thonny/editors.py:768
+msgid "Go to line..."
+msgstr "Przejdź do linii..."
+
+#: thonny/editors.py:1010
+msgid "Line number"
+msgstr "Numer linii"
+
+#: thonny/editors.py:1156
+msgid "Do you want to save files before closing?"
+msgstr "Czy chcesz zapisać pliki przed zamknięciem?"
+
+#: thonny/editors.py:1158
+msgid "Do you want to save file before closing?"
+msgstr "Czy chcesz zapisać plik przed zamknięciem?"
+
+#: thonny/editors.py:1161
+msgid "Save On Close"
+msgstr "Zapisz przy zamknięciu"
+
+#: thonny/misc_utils.py:539
+msgid "Command not available"
+msgstr "Polecenie niedostępne"
+
+#: thonny/misc_utils.py:540
+msgid "This command is not available if Thonny is run via Flatpak"
+msgstr "To polecenie jest niedostępne, jeśli Thonny jest uruchomiony z Flatpaka"
+
+#: thonny/workbench.py:700 thonny/workbench.py:799
+msgid "Support Ukraine"
+msgstr "Wesprzyj Ukrainę"
+
+#: thonny/plugins/backend_config_page.py:90
+msgid "Which kind of interpreter should Thonny use for running your code?"
+msgstr "Którego interpretera ma Thonny użyć do uruchomienia twojego kodu?"
+
+#: thonny/plugins/calltip.py:159
+msgid "Show parameter info"
+msgstr "Pokaż informacje o parametrze"
+
+#: thonny/plugins/editor_config_page.py:41
+msgid "Automatically show parameter info after typing '('"
+msgstr "Automatycznie pokaż informacje o parametrze po wpisaniu '('"
+
+#: thonny/plugins/editor_config_page.py:47
+msgid "Automatically propose completions while typing"
+msgstr "Automatycznie zaproponuj uzupełnienie w czasie wpisywania"
+
+#: thonny/plugins/editor_config_page.py:52
+msgid "Automatically show documentation for completions"
+msgstr "Automatycznie pokaż dokumentację dla uzupełnień "
+
+#: thonny/plugins/editor_config_page.py:57
+msgid "Request completions with Tab-key in editors"
+msgstr "Wymagaj uzupełnienie za pomocą Tab'a w edytorze"
+
+#: thonny/plugins/editor_config_page.py:62
+msgid "Request completions with Tab-key in Shell"
+msgstr "Wymagaj uzupełnienie za pomcą Tab'a w terminalu"
+
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
+msgid "Problem"
+msgstr "Problem"
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Could not find definition"
+msgstr "Nie znaleziono definicji"
+
+#: thonny/plugins/shell_config_page.py:17
+msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
+msgstr "Wyczyść Powłokę przed rozpoczęciem nowego procesu (Uruchom, Debuguj, Zatrzymaj/Restartuj, ...)"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:196
+msgid "Thonny's Python"
+msgstr "Python w Thonnym"
+
+#: thonny/plugins/micropython/mp_front.py:496
+msgid "Interrupt working program on connect"
+msgstr "Przerwij wykonywany program przy połączeniu"
+
+#: thonny/plugins/micropython/mp_front.py:504
+msgid "Synchronize device's real time clock"
+msgstr "Synchronizuj rzeczywisty zegar urządzenia"
+
+#: thonny/plugins/micropython/mp_front.py:510
+msgid "Use local time in real time clock"
+msgstr "Użyj lokalnego czasu w rzeczywistym zegarze"
+
+#: thonny/plugins/micropython/mp_front.py:516
+msgid "Restart interpreter before running a script"
+msgstr "Zrestartuj interpreter przed uruchomieniem skryptu"
+
+#: thonny/plugins/micropython/pip_gui.py:26
+msgid "This doesn't look like MicroPython/CircuitPython package.\n"
+"Are you sure you want to install it?"
+msgstr "To nie wygląda na paczkę MicroPythona / CircuitPythona.\n"
+"Jesteś pewien, że ją chcesz zainstalować?"
+
+#: thonny/base_file_browser.py:853
+msgid "Moving to Trash"
+msgstr "Przenoszę do kosza"
+
+#: thonny/base_file_browser.py:854
+msgid "Move %s to Trash?"
+msgstr "Przenieść %s do kosza?"
+
+#: thonny/base_file_browser.py:861
+msgid "Moving %s to Trash"
+msgstr "Przenoszę %s do kosza"
+
+#: thonny/base_file_browser.py:666
+msgid "Open in default external app"
+msgstr "Otwórz w domyślnej aplikacji zewnętrznej"
+
+#: thonny/base_file_browser.py:1210
+msgid "Opening remote files in external app is not supported."
+msgstr "Nie można otworzyć plików zdalnych w aplikacji zewnętrznej."
+
+#: thonny/base_file_browser.py:1217
+msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
+msgstr "Jeśli plik musi być otwarty w aplikacji zewnętrznej, ściągnij go i otwórz z dysku!"
+
+#: thonny/editors.py:151
+msgid "Looks like '%s' was deleted or moved."
+msgstr "'%s' był prawdopodobnie usunięty lub przesunięty."
+
+#: thonny/editors.py:170
+msgid "Looks like '%s' was modified outside of the editor."
+msgstr "'%s' był prawdopodobnie zmodyfikowany poza edytorem."
+
+#: thonny/plugins/cpython_frontend/cp_front.py:256
+msgid "NB! Thonny only supports Python %s and later"
+msgstr "Uwaga! Thonny działa tylko z Pythonem %s i późniejszym"
+
+#: thonny/editors.py:1010
+msgid "Go to line"
+msgstr "Przejdź do linii"
+
+#: thonny/workbench.py:703
+msgid "Support"
+msgstr "Wsparcie"
+
+#: thonny/editors.py:399 thonny/editors.py:414
+msgid "Could not save"
+msgstr "Nie można zapisać"
+
+#: thonny/plugins/general_config_page.py:135
+msgid "Warning"
+msgstr "Ostrzeżenie"
+
+#: thonny/plugins/general_config_page.py:136
+msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
+"Did you intend this?"
+msgstr "Jeśli podasz wartość zmiennej środowiskowej w cudzysłowie, cudzysłów będzie częścią tej wartości.\n"
+"Jesteś pewien, że chcesz to zrobić?"
+
+#: thonny/workbench.py:870
+msgid "Install MicroPython"
+msgstr "Zainstaluj MicroPython"
+
+#: thonny/workbench.py:874
+msgid "Install CircuitPython"
+msgstr "Zainstaluj CircuitPython"
+
+#: thonny/plugins/backend_config_page.py:210
+msgid "Make uploaded shebang scripts executable"
+msgstr "Zrób wgrane skrypty wykonywalnymi"
+
+#: thonny/plugins/editor_config_page.py:91
+msgid "Make saved shebang scripts executable"
+msgstr "Zrób zapisane skrypty wykonywalnymi"
+
+#: thonny/plugins/files.py:224
+msgid "Activate virtual environment"
+msgstr "Aktywuj środowisko wirtualne"
+
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
+msgid "Target"
+msgstr "Cel"
+
+#: thonny/plugins/pythontutor.py:41
+msgid "Visualize current script at Python Tutor"
+msgstr "Zwizualizuj obecny skrypt w Python Tutorze"
+
+#: thonny/plugins/todo_view.py:43
+msgid "Line"
+msgstr "Linia"
+
+#: thonny/plugins/todo_view.py:44
+msgid "Info"
+msgstr "Info"
+
+#: thonny/plugins/todo_view.py:121
+msgid "No line marked with #todo found"
+msgstr "Nie znaleziono linii z #todo"
+
+#: thonny/plugins/todo_view.py:141
+msgid "TODO"
+msgstr "TODO"
+
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
+msgid "Install or update %s"
+msgstr "Zainstaluj lub zaktualizuj %s"
+
+#: thonny/plugins/cpython_frontend/__init__.py:24
+msgid "Local Python 3"
+msgstr "Lokalny Python 3"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:266
+msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+msgstr "Możesz aktywować istniejące środowisko wirtualne poprzez menu kontekstowe pod prawym przyciskiem w nawigacji pliku gdy wybieraz folder środowiska wirtualnego, lub plik 'pyveng.cfg'"
+
+#: thonny/plugins/ev3/__init__.py:72
+msgid "Preparations (skip the VS Code part)"
+msgstr "Przygotowania (omiń część z VS Code)"
+
+#: thonny/plugins/ev3/__init__.py:78
+msgid "Default password"
+msgstr "Hasło domyślne"
+
+#: thonny/running.py:392
+msgid "Information"
+msgstr "Informacja"
+
+#: thonny/running.py:393
+msgid "For debugging the program must be saved first."
+msgstr "Aby uruchomić debugowanie, program musi być zapisany."
+
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr ""
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr ""
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr ""
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr ""
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr ""
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr ""
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr ""
+
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr ""
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr ""
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr ""
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr ""
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr ""
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr ""
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr ""
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr ""
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
 msgstr ""
 
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/assistant.rst b/thonny/locale/pt_BR/HELP_CONTENT/assistant.rst
new file mode 100644
index 0000000..d3f58dd
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/assistant.rst
@@ -0,0 +1,11 @@
+Assistente
+==========
+
+O painel Assistente ajuda você de duas maneiras.
+
+Se o seu programa terminar com um erro, ele tenta explicá-lo em termos mais simples e oferece alguns conselhos para encontrar e corrigir o problema.
+
+Às vezes seu programa pode não funcionar como você deseja, mesmo que você não receba nenhuma mensagem de erro. Nesse caso às vezes ajuda investigar o código cuidadosamente para detectar certos cheiros ruins ou peculiaridades, que podem levar à descoberta do problema. Existem duas ferramentas populares, que são usadas para tais investigações: `Pylint <pylint.pycqa.org>`_ e `Mypy <http://mypy-lang.org/>`_.
+
+O Mypy tenta detectar certas contradições em seu código, por exemplo quando uma função parece esperar um argumento inteiro, mas seu código a chama com uma string. Pylint não é tão bom com esse tipo de verificação, mas pode fazer muitas outras análises. O número de checagens do Pylint é tão grande que a maioria dos usuários acaba pulando verificações que não consideram relevantes. O Thonny já escolheu muitas verificações do Pylint que provavelmente são relevantes para iniciantes. Se você quiser mais checagens, você pode executar o Pylint em seu código via linha de comando. Se você quiser omitir certas checagens escolhidas pelo Thonny, então vá para *Ferramentas → Opções → Assistente* e digite o nome da verificação. A lista de todas as checagens do Pylint pode ser vista em https://pylint.pycqa.org/en/latest/messages/messages_list.html
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/birdseye.rst b/thonny/locale/pt_BR/HELP_CONTENT/birdseye.rst
new file mode 100644
index 0000000..1926945
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/birdseye.rst
@@ -0,0 +1,13 @@
+Birdseye
+========
+
+O Birdseye é um depurador de Python feito por Alex Hall, que registra os valores de expressões quando o programa é executado e permite que você os explore após a conclusão do programa. Veja `https://birdseye.readthedocs.io <https://birdseye.readthedocs.io>`_ para mais informações.
+
+O Birdseye não é instalado por padrão, mas é fácil de instalar por meio de *Ferramentas → Gerenciar plugins*. Você precisa instalar o pacote chamado ``birdseye``.
+
+O Birdseye funciona de maneira diferente dos `depuradores integrados ao Thonny <debuggers.rst>`_. Quando você executa seu programa com *Executar → Depurar programa atual (Birdseye)* a execução deve demorar um pouco mais do que o normal, mas funciona tal como você tivesse usado *Executar programa atual*. Isso significa que os pontos de interrupção são ignorados e você não pode percorrer o programa. Mas quando o programa é concluído, o Thonny abre uma página web (servida por um servidor local, parte do Birdseye), que permite que você se aprofunde no processo de execução e aprenda como os resultados finais foram compostos de valores intermediários.
+
+NB! Ao usar o Birdseye no Thonny você não precisa importar ``birdseye.eye`` ou usá-lo para decorar suas funções. O Thonny executa o Birdseye de forma que ele registre informações sobre todas as funções.
+
+O servidor local usa a porta 7777 por padrão. Se esta porta for usada por outro aplicativo, configure outra porta em *Ferramentas → Opções → Executar e depurar* e reinicie o Thonny.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/debuggers.rst b/thonny/locale/pt_BR/HELP_CONTENT/debuggers.rst
new file mode 100644
index 0000000..f82f9cd
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/debuggers.rst
@@ -0,0 +1,41 @@
+Usando depuradores
+==================
+
+Se você quiser ver como o Python executa seu programa passo a passo, execute-o no *modo de depuração* "melhor" ou "mais rápido". Você também pode executá-lo com `Birdseye <birdseye.rst>`_ e explorar as etapas de execução posteriormente.
+
+Modo "melhor"
+-------------
+
+Este modo é recomendado para iniciantes.
+
+Comece selecionando *Depurar programa atual (melhor)* no menu *Executar* ou pressione Ctrl+F5 (`no XFCE você precisa usar Shift+Ctrl+F5 <https://askubuntu.com/questions/92759/ctrlf5-in-google-chrome-in-xfce>`__). Você verá que a primeira instrução do programa é destacada e nada mais acontece. Nesse modo, você precisa notificar o Thonny de que está pronto para deixar o Python dar o próximo passo. Para isso, você tem duas opções principais:
+
+* *Executar → Pular* (ou F6) faz grandes passos, ou seja, executa o código realçado e destaca a próxima parte do código.
+
+* *Executar → Entrar* (ou F7) tenta fazer passos menores. Se o código destacado for feito de partes menores (comandos ou expressões), então a primeira delas será destacada e o Thonny aguardará o próximo comando. Se você chegou a um componente do programa que não possui subpartes (por exemplo, um nome de variável), então *Entrar* funciona como *Pular*, ou seja, executa (ou avalia) o código.
+
+Se você se aprofundou em um comando ou expressão e deseja avançar mais rápido, pode usar *Executar → Sair*, que executa o código atualmente destacado e todas as partes do programa a seguir no mesmo nível. Existe um comando um pouco semelhante chamado *Continuar*, que executará o comando sem paradas até que seja concluído (ou até o próximo ponto de interrupção, veja abaixo).
+
+Se você acidentalmente deu um grande passo e passou por cima de um trecho de código interessante, você pode **voltar o passo** selecionando *Executar → Voltar*. O Thonny mostrará o estado do programa como estava antes da última etapa. Agora você pode continuar com pequenos passos e ampliar este pedaço de código. (Como funciona? Mesmo quando você dá um grande passo, o Thonny salva todos os estados intermediários do programa, que podem ser refeitos depois que você dá o passo para trás.)
+
+Se você deseja acessar uma parte específica do código, pode acelerar o processo colocando o cursor nessa linha e selecionando *Executar → Executar até o cursor*. Isso faz o Thonny dar passos automaticamente até esta linha. Você pode assumir o comando de lá.
+
+Se você tiver os números de linha do editor ativados em *Ferramentas → Opções → Editor*, também poderá usar **pontos de interrupção**. Quando você clica ao lado de um comando na margem esquerda do editor, um ponto aparece. Quando você inicia o depurador, ele não para antes da primeira instrução, mas corre para a instrução marcada com o ponto, também conhecido como ponto de interrupção. Você pode colocar tantos pontos de interrupção em seus programas quantos forem necessários. Os pontos de interrupção podem ser removidos clicando na margem novamente.
+
+Modo "mais rápido"
+------------------
+
+Quando seus programas crescem, você pode perceber que dar grandes passos com o depurador melhor às vezes leva muito tempo. É porque as sutilezas (por exemplo, possibilidade de passar pela avaliação da expressão e retroceder) exigem maquinário pesado e lento.
+
+Com *Depurar programa atual (mais rápido)* você perde as sutilezas, mas pode percorrer seu programa muito mais rapidamente. Você pode usar os mesmos comandos (exceto "Voltar") como no depurador melhor. Este é o estilo de depuração mais profissional com que os programadores estão acostumados.
+
+Estilos diferentes para mostrar a pilha de chamadas
+---------------------------------------------------
+
+Por padrão, o Thonny usa janelas empilhadas para apresentar a pilha de chamadas. Isso dá uma boa intuição sobre o conceito, mas pode se tornar complicado de usar. Portanto, desde a versão 3.0 pode-se escolher entre dois estilos diferentes para apresentar a pilha de chamadas. Em *Ferramentas → Opções → Executar e depurar* você pode alternar para um estilo mais tradicional, com uma visualização separada para apresentar e alternar quadros de chamada. Observe que ambos os estilos podem ser usados com ambos os modos de depuração.
+
+Birdseye
+--------
+
+O comando *Depurar programa atual (Birdseye)* é explicado em uma `página separada <birdseye.rst>`_.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/debugging.rst b/thonny/locale/pt_BR/HELP_CONTENT/debugging.rst
new file mode 100644
index 0000000..334e89c
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/debugging.rst
@@ -0,0 +1,69 @@
+Técnicas de depuração
+=====================
+
+Se o seu programa não estiver funcionando corretamente, não entre em pânico. Você tem várias possibilidades para consertar a situação. Por exemplo:
+
+* Deixe alguém consertar.
+* Altere *algo* no código e tente novamente.
+* Aborde o problema em duas fases: 1) diagnosticando o problema e 2) corrigindo-o.
+
+Pedir ajuda pode ser uma boa ideia, mas não lhe dará essa doce sensação de realização. De qualquer forma, é melhor não usar isso sem primeiro fazer algum esforço por conta própria.
+
+Se seus programas forem pequenos, você pode ganhar a loteria alterando algo aleatoriamente e tentando novamente (repita várias vezes), mas perderá mesmo se ganhar, pois não aprenderá nada.
+
+Se você deseja se tornar bom em programação, realmente precisa abordar o problema de forma mais sistemática. Entre outras coisas, isso significa que você precisa identificar o motivo pelo qual o seu programa se comporta mal antes de tentar corrigi-lo. O processo de encontrar a origem do problema é chamado de *depuração*.
+
+Rastreando o fluxo/pensamento do programa junto com o Python
+------------------------------------------------------------
+
+Muito provavelmente seu programa não está totalmente errado. Pode haver um erro de digitação em algum lugar ou você esqueceu ou entendeu mal alguma coisa. *NB! Não adquira o hábito de pensar que o Python o entendeu mal -- é uma máquina que nem mesmo tenta entendê-lo.* A chave para a depuração é descobrir exatamente onde e quando suas suposições sobre o comportamento do programa divergem do real comportamento.
+
+Se o seu programa imprimir uma resposta final errada, isso informa algo sobre o comportamento do programa, mas geralmente não é suficiente para localizar o problema com precisão. Você também precisa verificar quais das **etapas intermediárias** se alinham com suas suposições e quais não.
+
+Uma técnica óbvia (e muito útil) é adicionar **declarações de impressão extras** no código, que informam onde o Python está e o que ele realizou até agora, por exemplo.
+
+.. code::
+
+	print("amigos antes do laço for", amigos)
+
+NB! Às vezes, você precisa introduzir novas variáveis e quebrar expressões complexas em partes menores para imprimir informações mais detalhadas.
+
+Embora a depuração de impressão seja usada até mesmo por profissionais (eles podem chamá-la de *logging*), existe uma alternativa, que é mais confortável na maioria dos casos. Chama-se **percorrer o código** e é a especialidade do Thonny. Vá para o capítulo `Usando depuradores <debuggers.rst>`_ para saber mais.
+
+Revisão de código
+-----------------
+
+Outra técnica útil é a revisão de código. É um pouco semelhante a rastrear o fluxo do programa, mas você faz isso em sua cabeça, tentando ver o quadro geral em vez de seguir pequenos passos.
+
+Observe cada uma das instruções em seu código e tente entender sua finalidade e como ela se relaciona com sua tarefa.
+
+Para cada **variável** pergunte a si mesmo:
+
+* O nome da variável revela seu propósito? É melhor nomeá-la no singular ou no plural?
+* Que tipo de valores podem acabar nesta variável? Strings, inteiros, listas de strings, listas de floats, ...?
+* Qual é o papel da variável? Ele deve ser atualizado repetidamente para que eventualmente contenha informações úteis? O objetivo é usar as mesmas informações em vários lugares e reduzir o copiar e colar? Algo mais?
+
+Para cada **laço** pergunte a si mesmo:
+
+* Como você sabe que o laço é necessário?
+* Quantas vezes o corpo do laço deve ser executado? Do que isso depende?
+* Qual código deve estar dentro do laço e qual deve estar fora?
+* O que deve ser feito antes do laço e o que deve ser feito depois dele?
+
+Para cada **expressão** complexa, pergunte-se:
+
+* Em que ordem devem estar as etapas de avaliação dessa expressão? O Python concorda com isso? Em caso de dúvida, use o depurador ou introduza variáveis auxiliares e divida a expressão em partes menores.
+* Que tipo de valor deve sair dessa expressão? String? Lista de strings?
+
+Você também pode estar perdendo algumas partes importantes em seu programa:
+
+* Sua tarefa exige tratar diferentes situações de maneira diferente? Se sim, então você provavelmente precisa de um comando `if`.
+* A tarefa requer fazer algo várias vezes? Se sim, provavelmente você precisa de um laço.
+
+Ainda perdido?
+--------------
+
+"Encontre o lugar onde suas suposições quebram" - isso é definitivamente mais fácil de dizer do que fazer. No caso de programas complexos, é fácil chegar à situação em que você não tem mais certeza do que supõe e por que começou com essa coisa de programação.
+
+Nesse caso, é útil simplificar sua tarefa o máximo possível e tentar implementar primeiro o problema mais simples. Pegue um novo editor e comece do zero ou copie o código existente e jogue fora tudo o que não é essencial para o problema. Por exemplo, você pode assumir que o usuário é cooperativo e sempre insere dados "bons". Se a tarefa exigir fazer algo repetidamente, jogue fora a parte "repetidamente", se a tarefa envolver uma condição complexa para fazer algo, simplifique a condição, etc.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/dock.rst b/thonny/locale/pt_BR/HELP_CONTENT/dock.rst
new file mode 100644
index 0000000..727e30d
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/dock.rst
@@ -0,0 +1,13 @@
+Encaixando janelas do usuário
+=============================
+
+Ao desenvolver seus programas de Tartaruga (ou outros usando Tkinter), você pode querer olhar para a janela da última execução enquanto corrige algo no seu código. Se você tem uma tela grande ou várias telas, não é difícil encaixar sua janela ao lado da do Thonny, mas na próxima execução o gerenciador de janelas pode posicioná-la em outro lugar e você irá precisar arrumar as janelas novamente.
+ 
+Use **Encaixar janelas do usuário** no menu **Executar** para ajudá-lo nessa situação. Se você marcar esta opção e executar um programa usando Tkinter, o Thonny vai executar os seguintes truques de mágica:
+
+* Ele lembra onde você posiciona sua janela. Da próxima vez, ele coloca a janela na mesma posição.
+
+* Ele faz com que sua janela fique no topo mesmo se você clicar na janela do Thonny para começar a modificar o código. Na verdade, depois que sua janela do Tkinter se torna visível, o Thonny foca automaticamente sua própria janela para que você possa continuar editando o programa sem capturar o mouse. Quando terminar, basta pressionar F5 novamente e a janela antiga será substituída pela nova.
+ 
+Permanecer no topo atualmente não funciona com programas de Tartaruga no macOS (https://github.com/thonny/thonny/issues/798).
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/errors.rst b/thonny/locale/pt_BR/HELP_CONTENT/errors.rst
new file mode 100644
index 0000000..95ff2b3
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/errors.rst
@@ -0,0 +1,33 @@
+Entendendo os erros
+===================
+
+Se o seu programa apresentar erros ou resultados incorretos, não tente consertar nada antes de entender o problema. Você pode ler uma história mais longa em `outra página <debugging.rst>`_, mas aqui está uma lista de verificação rápida para colocar suas ideias em prática.
+
+Você está assustado?
+--------------------
+
+Não fique! As mensagens de erro destinam-se a ajudar. Se você receber um erro, isso não significa que você é uma pessoa má. E não, você não quebrou o computador. Embora as mensagens de erro possam parecer um bloco de jargão a princípio, com a prática é possível extrair delas informações úteis.
+
+Onde no código aconteceu o erro?
+--------------------------------
+
+As mensagens de erro no Thonny têm links que o levam ao local no código que causou o erro. No caso de vários links, o último é geralmente o mais relevante.
+
+Se o erro aconteceu dentro de uma função, a mensagem possui vários links. Tente clicar um a um, de cima para baixo, e você verá como o Python chegou ao local do erro. Esse conjunto de links é chamado de *rastreamento da pilha*.
+
+O que significa o erro?
+-----------------------
+
+A última linha do bloco de erro diz qual foi o problema do Python. Ao tentar compreender a mensagem, não se esqueça do contexto e tente combinar algumas partes da mensagem com o local vinculado ao código. Às vezes o Assistente do Thonny pode explicar o erro em termos mais simples, às vezes você precisa fazer uma busca na Internet pela mensagem (não se esqueça de adicionar "Python" à busca).
+
+O que havia dentro das variáveis no momento do erro?
+----------------------------------------------------
+
+Abra a visualização de variáveis e veja você mesmo! Se o erro ocorreu dentro de uma função, você pode ver suas variáveis locais clicando nos
+links do rastreamento da pilha.
+
+Como o programa chegou a esse estado?
+--------------------------------------
+
+Veja `a página sobre depuração <debugging.rst>`_ ou `a página sobre como usar os depuradores do Thonny <debuggers.rst>`_.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/flask.rst b/thonny/locale/pt_BR/HELP_CONTENT/flask.rst
new file mode 100644
index 0000000..a92dc1c
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/flask.rst
@@ -0,0 +1,34 @@
+Desenvolvimento Web com Flask
+=============================
+
+`Flask <https://palletsprojects.com/p/flask/>`_ é uma framework popular para criar aplicativos da Web em Python.
+
+Os tutoriais de Flask geralmente solicitam a execução de programas Flask escrevendo alguns comandos no Terminal, mas isso pode intimidar alguns iniciantes. O Thonny tenta tornar as coisas mais fáceis e permite executar programas Flask como qualquer outro programa (teclando apenas F5). Se ele detectar que você está executando um programa Flask, ele o executa com algumas linhas de código anexadas, que iniciam o servidor de desenvolvimento com as configurações adequadas.
+
+Depurando
+---------
+
+Se você quiser percorrer seu programa Flask, defina um ponto de interrupção dentro de alguma função e invoque o depurador (funciona nos modos "melhor" e "mais rápido", porém o mais rápido é... mais rápido). Recarregue sua página e comece entrando em uma função. Você pode querer desativar "Mostrar chamadas de função (quadros) em janelas separadas" em *Ferramentas → Opções → Executar e depurar* para uma operação mais confortável.
+
+Detalhes
+-------
+
+O Thonny iniciará o servidor de desenvolvimento aproximadamente assim:
+
+.. code::
+
+	os.environ["FLASK_ENV"] = "development"
+	app.run(threaded=False, use_reloader=False, debug=False)
+
+``threaded=False`` é usado porque o depurador do Thonny suporta apenas programas de thread única, ``use_reloader=False`` é usado porque o `recarregamento automático não é confiável quando o Flask é iniciado assim <https://flask.palletsprojects. com/en/1.0.x/api/#flask.Flask.run>`_ e ``debug=False`` é usado porque parece causar menos erros de "Endereço já em uso".
+
+Se você quiser mais controle sobre as configurações, você mesmo deve chamar o método ``run``, por exemplo:
+
+.. code::
+
+	...
+	if __name__ == "__main__":
+		app.run(port=5005, threaded=False, use_reloader=True, debug=True)
+
+Neste caso, o Thonny não adicionará nada ao seu código.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/index.rst b/thonny/locale/pt_BR/HELP_CONTENT/index.rst
new file mode 100644
index 0000000..2587a09
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/index.rst
@@ -0,0 +1,24 @@
+Funcionalidades
+===============
+
+* `Usando depuradores <debuggers.rst>`_
+* `Usando pacotes de terceiros <packages.rst>`_
+* `Encaixando janelas do usuário <dock.rst>`_
+* `Suporte especial para programas de Tartaruga <turtle.rst>`_
+* `Especificando argumentos de programa <program_arguments.rst>`_
+* `Modo simples e modo especialista <modes.rst>`_
+* `Shell <shell.rst>`_
+* `Plotador <plotter.rst>`_
+* `Assistente <assistant.rst>`_
+* `Birdseye <birdseye.rst>`_
+* `Desenvolvimento Web com Flask <flask.rst>`_
+
+Tópicos gerais
+==============
+* `Lidando com erros <errors.rst>`_
+* `Conselhos gerais sobre depuração <debugging.rst>`_
+
+Online
+======
+Há mais informações disponíveis no wiki do Thonny: https://github.com/thonny/thonny/wiki.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/modes.rst b/thonny/locale/pt_BR/HELP_CONTENT/modes.rst
new file mode 100644
index 0000000..7095949
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/modes.rst
@@ -0,0 +1,24 @@
+Modos diferentes
+================
+
+*Ferramentas → Opções → Geral* permite alternar a interface de usuário do Thonny para um dos três modos disponíveis.
+
+Modo normal
+-----------
+
+Este é o modo padrão. Nada muito a dizer sobre isso.
+
+Modo simples
+------------
+
+Neste modo, os menus ficam ocultos e os botões da barra de ferramentas têm legendas. Use um pequeno link no canto superior direito da janela principal para retornar ao modo normal.
+
+Modo especialista
+-----------------
+
+Este modo se parece quase com o modo normal, mas possui alguns recursos extras, que são úteis para professores.
+
+* O menu Exibir ganha um item extra *Tela cheia* que coloca Thonny em tela cheia.
+* Clicar duas vezes na guia de um editor ou exibição maximiza esse editor ou exibição. Desmaximize teclando ESC.
+* O menu Ferramentas recebe um item extra *Abrir repetidor...* que permite repetir os logs de ação do usuário.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/packages.rst b/thonny/locale/pt_BR/HELP_CONTENT/packages.rst
new file mode 100644
index 0000000..80abc27
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/packages.rst
@@ -0,0 +1,49 @@
+Instalando pacotes de terceiros
+===============================
+
+O Thonny tem duas opções para instalar bibliotecas de terceiros.
+
+Com pip-GUI
+-----------
+
+No menu "Ferramentas", selecione "Gerenciar pacotes..." e siga as instruções.
+
+Com pip na linha de comando
+---------------------------
+
+#. No menu "Ferramentas", selecione "Abrir shell do sistema...". Você deve obter uma nova janela de terminal informando o nome correto do comando *pip* (geralmente ``pip`` ou ``pip3``). A seguir, vamos supor que o nome do comando é ``pip``.
+
+#. Digite ``pip install <nome do pacote>`` (ex. ``pip install pygame``) e pressione ENTER. Você deve ver *pip* baixando e instalando o pacote e imprimindo uma mensagem de sucesso.
+
+#. Feche o terminal (opcional).
+
+#. Volte para o Thonny.
+
+#. Redefina o interpretador selecionando "Parar/reiniciar backend" no menu "Executar" (isso é necessário apenas na primeira vez que você instalar o pip).
+
+#. Comece a usar o pacote.
+
+.. NOTE::
+    A opção "Abrir shell do sistema..." não está disponível ao executar a partir do Flatpak no Linux.
+    Os aplicativos Flatpak são colocados em sandbox para proteger o sistema hospedeiro e os dados do usuário.
+    Então permitir que o Thonny abra uma shell no sistema hospedeiro contornaria essas proteções.
+    Para instalar pacotes de Python a partir da linha de comando, abra diretamente o aplicativo de terminal do seu sistema.
+
+Usando pacotes científicos de Python 
+====================================
+
+A distribuição do Python que acompanha o Thonny não contém bibliotecas de programação científica (por exemplo, `NumPy <http://numpy.org/>`_ e `Matplotlib <http://matplotlib.org/>`_).
+
+Versões recentes dos pacotes científicos de Python mais populares (por exemplo, numpy, pandas e matplotlib) têm pacotes disponíveis para plataformas populares, então você provavelmente pode instalá-los com pip. Caso tenha problemas, tente usar o Thonny junto com uma distribuição de Python separada e destinada a computação científica (por exemplo, `Anaconda <https://www.anaconda.com>`_ ou `Pyzo <http://www.pyzo.org/>`_).
+
+Exemplo: Usando o Anaconda
+--------------------------
+
+Vá para https://www.anaconda.com/products/individual e baixe uma distribuição binária adequada para a sua plataforma. Provavelmente você vai querer um instalador gráfico e uma versão de 64 bits (você pode precisar da versão de 32 bits se tiver um sistema muito antigo).
+
+Instale-o e descubra onde ele coloca o executável do Python (*pythonw.exe* no Windows e *python3* ou *python* no Linux e Mac).
+
+No Thonny abra o menu "Ferramentas" e selecione "Opções...". Na caixa de diálogo de opções, abra a guia "Interpretador" e mostre a localização do executável do Python incluído no Anaconda.
+
+Depois de ter feito isso, na próxima vez que você executar seu programa, ele será executado através do Python do Anaconda e todas as bibliotecas instaladas lá estarão disponíveis.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/plotter.rst b/thonny/locale/pt_BR/HELP_CONTENT/plotter.rst
new file mode 100644
index 0000000..67586b3
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/plotter.rst
@@ -0,0 +1,39 @@
+Plotador
+========
+
+O Plotador é um complemento para o Shell, que extrai números da saída do programa e os exibe como um gráfico de linhas. Pode ser útil para observar dados de sensores ao vivo provenientes de dispositivos conectados ou até mesmo para analisar dados estáticos (se você não quiser usar ferramentas mais sérias). É inspirado no `Editor Mu Python <https://codewith.mu/>`__.
+
+Você pode abri-lo no menu "Exibir" ou no menu de contexto do Shell.
+
+Por exemplo, tente o seguinte programa (você pode pará-lo com Ctrl+C ou com o botão "Parar/reiniciar backend" na barra de ferramentas):
+
+.. code::
+
+	from time import sleep
+	from random import randint
+	
+	p1 = 0
+	while True:
+	    p1 += randint(-1, 1)
+	    p2 = randint(-10, 10)
+	    print("caminhada aleatória:", p1, " apenas aleatório:", p2)
+	    sleep(0.05)
+
+Ao executá-lo com o Plotador aberto, você verá um gráfico de linhas com duas séries se formando. Cada coluna no gráfico corresponde a uma linha no Shell. A coluna mais à direita no gráfico sempre corresponde à linha visível mais abaixo no shell, mesmo se você parar o programa e rolar o texto no shell.
+
+O Plotador começa a desenhar quando detecta pelo menos duas linhas consecutivas contendo o mesmo padrão de números e texto ao redor. Os números são plotados e o texto ao redor se torna a legenda no canto inferior direito do plotador.
+
+Velocidade da animação
+----------------------
+
+A menos que você esteja plotando um número fixo de linhas, é uma boa ideia não inundar o Shell e o Plotador com dados. É por isso que o exemplo acima faz uma pequena pausa (``sleep(0.05)``) antes de enviar a próxima linha.
+
+Faixa do eixo y
+---------------
+
+O Plotador tenta detectar um intervalo adequado para o seu gráfico sem precisar alterá-lo com muita frequência. Por esta razão ele aumenta o alcance sempre que necessário, mas somente reduz a faixa no início de uma nova série.
+
+Se alguns outliers tornaram o intervalo muito grande, você pode reduzi-lo manualmente, esperando até que os outliers estejam fora da imagem e clicando no Plotador.
+
+Se você quiser aumentar o intervalo (ou apenas comparar seus dados com certos valores), simplesmente inclua constantes adequadas em suas linhas de dados, por exemplo: ``print(0, medida1, medida2, 100)``.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/program_arguments.rst b/thonny/locale/pt_BR/HELP_CONTENT/program_arguments.rst
new file mode 100644
index 0000000..1922abd
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/program_arguments.rst
@@ -0,0 +1,19 @@
+Executando seus programas com argumentos de linha de comando
+============================================================
+
+Quando você está editando *me_programa.py* e pressiona F5, o Thonny constrói um comando mágico ``%Run meu_programa.py`` e o envia para o Shell, que pede ao backend do Thonny para executar esse programa.
+
+Quando você vai para o Shell e pega o comando ``%Run`` de volta (com a seta para cima), você pode adicionar *argumentos de linha de comando* a ele. Por exemplo, altere o comando para ``%Run meu_programa.py primeiro segundo`` e pressione ENTER.
+
+Ao executar seu programa desta forma, você pode acessar os argumentos através de ``sys.argv``:
+
+.. code::
+
+    import sys
+    print(sys.argv)
+
+Corrigindo os argumentos da linha de comando
+--------------------------------------------
+
+Se você precisar usar o mesmo conjunto de argumentos várias vezes, pode se tornar tedioso modificar ``%Run`` manualmente. Neste caso, verifique **Argumentos de programa** no menu **Visualizar**. Isso abre uma pequena caixa de entrada ao lado dos botões da barra de ferramentas. A partir de agora, tudo o que você digitar nesta caixa será anexado a ``%Run <nome do programa>`` toda vez que você pressionar F5.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/shell.rst b/thonny/locale/pt_BR/HELP_CONTENT/shell.rst
new file mode 100644
index 0000000..1573c52
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/shell.rst
@@ -0,0 +1,79 @@
+Shell
+=====
+
+A Shell é o principal meio de execução e comunicação com seu programa. Ela se parece principalmente com o REPL oficial do Python (o laço de leitura-avaliação-impressão), mas existem algumas diferenças e recursos extras.
+
+Comandos Python
+---------------
+
+Assim como o REPL oficial do Python, o Shell do Thonny aceita expressões e instruções de Python, tanto de uma linha quanto com várias linhas. Se você pressionar o ENTER, Thonny usará algumas heurísticas para prever se você deseja enviar o comando ou continuar digitando o restante do comando na próxima linha. Se você deseja enviar o comando, mas Thonny oferece uma nova linha, verifique se você esqueceu de fechar alguns parênteses.
+
+Comandos mágicos
+----------------
+
+Se você selecionar *Executar →  Executar programa atual* ou pressionar F5, verá como o Thonny insere um comando começando com ``%Run`` no Shell. Comandos começando com ``%`` são chamados de *comandos mágicos* (assim como em `IPython <https://ipython.org/>`_) e executam certas ações, que não podem ser (facilmente) expressas como comandos do Python. Os comandos mágicos do Thonny geralmente têm comandos de menu correspondentes, então você não precisa escrevê-los manualmente.
+
+Comandos do sistema
+-------------------
+
+Se você precisar executar rapidamente um comando simples do sistema, não precisará iniciar um terminal. Basta prefixar o comando com ``!`` (por exemplo, ``!pytest meu-programa.py``) e inseri-lo no Shell do Thonny.
+
+Histórico de comandos
+---------------------
+
+Se você deseja emitir o mesmo comando ou um comando semelhante várias vezes, não precisa digitá-lo todas as vezes -- use a tecla "seta para cima" para buscar o comando anterior no histórico de comandos. Pressionando novamente "seta para cima" traz para você o comando antes disso e assim por diante. Use a tecla "seta para baixo" para mover na direção oposta no histórico.
+
+Saída colorida
+--------------
+
+Se você tiver seu Shell no modo de emulação de terminal (consulte *Ferramentas → Opções → Shell*), poderá usar `códigos ANSI <https://en.wikipedia.org/wiki/ANSI_escape_code>`_ para produzir saída colorida.
+
+Tente o seguinte exemplo:
+
+.. code::
+
+	print("\033[31m" + "Vermelho" + "\033[m")
+	print("\033[1;3;33;46m" + "Texto amarelo em itálico e negrito sobre fundo ciano" + "\033[m")
+
+Você pode querer usar um pacote como `colorama <https://pypi.org/project/colorama/>`_ para produzir os códigos de cores.
+
+Sobrescrevendo as linhas de saída
+---------------------------------
+
+Emuladores de terminal apropriados suportam códigos ANSI que permitem escrever em posições arbitrárias na tela do terminal. O Shell do Thonny não é tão capaz, mas suporta alguns truques mais simples.
+
+Tente o seguinte programa:
+
+.. code::
+
+	from time import sleep
+	
+	for i in range(100):
+	    print(i, "%", end="")
+	    sleep(0.05)
+	    print("\r", end="")
+	print("Concluído!")
+
+O truque depende do caractere ``"\r"``, que faz com que o cursor de saída volte ao início da linha atual, para que a próxima impressão substitua o texto impresso anteriormente. Observe como usamos ``print(..., end="")`` para evitar a criação de uma nova linha.
+
+O primo de ``"\r"`` é ``"\b"``, que move o cursor de saída para a esquerda em um caractere. Este não faz nada se já estiver na primeira posição de uma linha.
+
+Fazendo som
+-----------
+
+Quando o Shell está no modo de emulação de terminal, você pode produzir um som de sino (ou "ding") exibindo o caractere ``"\a"``.
+
+Exibindo imagens
+----------------
+
+Você pode exibir imagens no shell codificando seu arquivo GIF ou PNG com Base64 e imprimindo-o como URL de dados de linha única:
+
+.. code::
+
+	print("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==")
+
+Plotar séries de números
+------------------------
+
+Você pode visualizar séries de números impressos no Shell usando o `Plotador <plotter.rst>`_.
+
diff --git a/thonny/locale/pt_BR/HELP_CONTENT/turtle.rst b/thonny/locale/pt_BR/HELP_CONTENT/turtle.rst
new file mode 100644
index 0000000..e92f7b0
--- /dev/null
+++ b/thonny/locale/pt_BR/HELP_CONTENT/turtle.rst
@@ -0,0 +1,9 @@
+Suporte especial para programas de Tartatuga
+============================================
+
+Ao desenvolver programas com o módulo ``turtle``, o Thonny oferece o seguinte suporte:
+
+* Você pode excluir as chamadas ``mainloop``, ``done`` ou ``exitonclick`` do seu script (o Thonny cuidará de manter a janela da Tartaruga responsiva). Isso permite que você crie parte de seu desenho com um programa e continue adicionando recursos por meio do Shell. Você também pode criar um desenho inteiro por meio do Shell.
+
+* Você pode `encaixar a janela da Tartaruga <dock.rst>`_, para que fique visível enquanto você estiver trabalhando em seu programa.
+
diff --git a/thonny/locale/pt_BR/LC_MESSAGES/thonny.mo b/thonny/locale/pt_BR/LC_MESSAGES/thonny.mo
index c8176c4..7de5b6e 100644
Binary files a/thonny/locale/pt_BR/LC_MESSAGES/thonny.mo and b/thonny/locale/pt_BR/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/pt_BR/LC_MESSAGES/thonny.po b/thonny/locale/pt_BR/LC_MESSAGES/thonny.po
index 70dee91..1e2d35d 100644
--- a/thonny/locale/pt_BR/LC_MESSAGES/thonny.po
+++ b/thonny/locale/pt_BR/LC_MESSAGES/thonny.po
@@ -7,59 +7,59 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: pt-br\n"
 
-#: thonny/workbench.py:361
+#: thonny/workbench.py:375
 msgid "File"
 msgstr "Arquivo"
 
-#: thonny/workbench.py:362
+#: thonny/workbench.py:376
 msgid "Edit"
 msgstr "Editar"
 
-#: thonny/workbench.py:363
+#: thonny/workbench.py:377
 msgid "View"
 msgstr "Visualizar"
 
-#: thonny/running.py:115 thonny/workbench.py:364
+#: thonny/running.py:161 thonny/workbench.py:378
 msgid "Run"
 msgstr "Executar"
 
-#: thonny/workbench.py:365
+#: thonny/workbench.py:379
 msgid "Tools"
 msgstr "Ferramentas"
 
-#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:366
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
 msgid "Help"
 msgstr "Ajuda"
 
-#: thonny/workbench.py:583
+#: thonny/workbench.py:598
 msgid "Exit"
 msgstr "Sair"
 
-#: thonny/workbench.py:610
+#: thonny/workbench.py:625
 msgid "Decrease font size"
 msgstr "Diminuir tamanho da fonte"
 
-#: thonny/workbench.py:622
+#: thonny/workbench.py:637
 msgid "Focus editor"
 msgstr "Focar no Editor"
 
-#: thonny/workbench.py:631
+#: thonny/workbench.py:646
 msgid "Focus shell"
 msgstr "Focar no Shell"
 
-#: thonny/workbench.py:642
+#: thonny/workbench.py:656
 msgid "Maximize view"
 msgstr "Maximizar visualização"
 
-#: thonny/workbench.py:654
+#: thonny/workbench.py:668
 msgid "Full screen"
 msgstr "Tela cheia"
 
-#: thonny/workbench.py:1437
+#: thonny/workbench.py:1467
 msgid "Program arguments"
 msgstr "Argumentos de programa"
 
-#: thonny/plugins/about.py:28 thonny/plugins/about.py:163
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
 msgid "About Thonny"
 msgstr "Sobre o Thonny"
 
@@ -77,7 +77,7 @@ msgstr "Feito na\n"
 "da Fundação Raspberry Pi\n"
 "e da Cybernetica AS"
 
-#: thonny/plugins/about.py:107
+#: thonny/plugins/about.py:101
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -91,11 +91,11 @@ msgstr "Este programa não tem\n"
 "https://opensource.org/licenses/MIT\n"
 "para detalhes"
 
-#: thonny/plugins/about.py:152
+#: thonny/plugins/about.py:142
 msgid "Version history"
 msgstr "Histórico da versão"
 
-#: thonny/plugins/about.py:159
+#: thonny/plugins/about.py:149
 msgid "Report problems"
 msgstr "Reportar problemas"
 
@@ -119,15 +119,15 @@ msgstr "Realizar verificações do MyPy"
 msgid "Disabled checks (one id per line)"
 msgstr "Verificações desativadas (uma id por linha)"
 
-#: thonny/assistance.py:985 thonny/plugins/assistant_config_page.py:73
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Assistente"
 
-#: thonny/plugins/autocomplete.py:512
+#: thonny/plugins/autocomplete.py:529
 msgid "Auto-complete"
 msgstr "Autocompletar"
 
-#: thonny/plugins/backend_config_page.py:320
+#: thonny/plugins/backend_config_page.py:335
 msgid "Interpreter"
 msgstr "Interpretador"
 
@@ -145,17 +145,17 @@ msgstr "O Birdseye é um depurador do Python que precisa ser instalado separadam
 
 #: thonny/plugins/birdseye_frontend.py:84
 msgid "Debug current script (birdseye)"
-msgstr "Depurar o programa atual (Birdseye)"
+msgstr "Depurar programa atual (Birdseye)"
 
-#: thonny/plugins/commenting_indenting.py:172
+#: thonny/plugins/commenting_indenting.py:171
 msgid "Toggle comment"
 msgstr "Comentar/descomentar"
 
-#: thonny/plugins/commenting_indenting.py:182
+#: thonny/plugins/commenting_indenting.py:181
 msgid "Comment out"
 msgstr "Comentar"
 
-#: thonny/plugins/commenting_indenting.py:192
+#: thonny/plugins/commenting_indenting.py:191
 msgid "Uncomment"
 msgstr "Descomentar"
 
@@ -167,18 +167,18 @@ msgstr "Desfazer"
 msgid "Redo"
 msgstr "Refazer"
 
-#: thonny/base_file_browser.py:706 thonny/plugins/common_editing_commands.py:49
-#: thonny/ui_utils.py:2255
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
 msgid "Cut"
 msgstr "Cortar"
 
-#: thonny/base_file_browser.py:707 thonny/plugins/common_editing_commands.py:61
-#: thonny/ui_utils.py:2256
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
 msgid "Copy"
 msgstr "Copiar"
 
-#: thonny/base_file_browser.py:709 thonny/base_file_browser.py:715
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2257
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
 msgid "Paste"
 msgstr "Colar"
 
@@ -186,15 +186,15 @@ msgstr "Colar"
 msgid "Select all"
 msgstr "Selecionar tudo"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1401
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
 msgid "Run to cursor"
 msgstr "Executar até o cursor"
 
-#: thonny/plugins/debugger.py:982
+#: thonny/plugins/debugger.py:985
 msgid "Can't close yet"
 msgstr "Ainda não pode fechar"
 
-#: thonny/plugins/debugger.py:983
+#: thonny/plugins/debugger.py:986
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr "Utilize o comando \"Parar\" para cancelar a depuração"
 
@@ -232,7 +232,7 @@ msgid "Recommended maximum line length\n"
 msgstr "Comprimento máximo recomendado da linha\n"
 "(Defina como 0 para desligar a linha de margem)"
 
-#: thonny/plugins/editor_config_page.py:97
+#: thonny/plugins/editor_config_page.py:104
 msgid "Editor"
 msgstr "Editor"
 
@@ -244,55 +244,55 @@ msgstr "Exportar logs de uso..."
 msgid "Events"
 msgstr "Eventos"
 
-#: thonny/plugins/files.py:551
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "Arquivos"
 
-#: thonny/plugins/find_replace.py:57 thonny/plugins/find_replace.py:417
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
 msgid "Find & Replace"
 msgstr "Buscar e substituir"
 
-#: thonny/plugins/find_replace.py:63
+#: thonny/plugins/find_replace.py:66
 msgid "Find:"
 msgstr "Buscar:"
 
-#: thonny/plugins/find_replace.py:74
+#: thonny/plugins/find_replace.py:90
 msgid "Replace with:"
 msgstr "Substituir por:"
 
-#: thonny/plugins/find_replace.py:92
+#: thonny/plugins/find_replace.py:108
 msgid "Case sensitive"
 msgstr "Maiúsculas e minúsculas"
 
-#: thonny/plugins/find_replace.py:99
+#: thonny/plugins/find_replace.py:115
 msgid "Up"
 msgstr "Acima"
 
-#: thonny/plugins/find_replace.py:103
+#: thonny/plugins/find_replace.py:119
 msgid "Down"
 msgstr "Abaixo"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:128
 msgid "Find"
 msgstr "Buscar"
 
-#: thonny/plugins/find_replace.py:122
+#: thonny/plugins/find_replace.py:138
 msgid "Replace"
 msgstr "Substituir"
 
-#: thonny/plugins/find_replace.py:130
+#: thonny/plugins/find_replace.py:146
 msgid "Replace+Find"
 msgstr "Substituir e buscar"
 
-#: thonny/plugins/find_replace.py:140
+#: thonny/plugins/find_replace.py:156
 msgid "Replace all"
 msgstr "Substituir todos"
 
-#: thonny/plugins/find_replace.py:236
+#: thonny/plugins/find_replace.py:254
 msgid "Enter string to be replaced."
 msgstr "Insira a string a ser substituída"
 
-#: thonny/plugins/find_replace.py:320
+#: thonny/plugins/find_replace.py:339
 msgid "The specified text was not found!"
 msgstr "O texto especificado não foi encontrado!"
 
@@ -351,7 +351,7 @@ msgstr "Objeto anterior"
 msgid "Next object"
 msgstr "Próximo objeto"
 
-#: thonny/plugins/object_inspector.py:733
+#: thonny/plugins/object_inspector.py:732
 msgid "Object inspector"
 msgstr "Inspetor de objetos"
 
@@ -363,77 +363,77 @@ msgstr "Esboço"
 msgid "Pygame Zero mode"
 msgstr "Modo Pygame Zero"
 
-#: thonny/plugins/pip_gui.py:79
+#: thonny/plugins/pip_gui.py:80
 msgid "Uninstall"
 msgstr "Desinstalar"
 
-#: thonny/editors.py:663 thonny/plugins/pip_gui.py:235 thonny/ui_utils.py:482
-#: thonny/ui_utils.py:1824 thonny/workdlg.py:162
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
 msgid "Close"
 msgstr "Fechar"
 
-#: thonny/plugins/pip_gui.py:381
+#: thonny/plugins/pip_gui.py:397
 msgid "Click "
 msgstr "Clique "
 
-#: thonny/plugins/pip_gui.py:382 thonny/plugins/pip_gui.py:393
+#: thonny/plugins/pip_gui.py:398 thonny/plugins/pip_gui.py:409
 msgid "here"
 msgstr "aqui"
 
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:77
 msgid "Upgrade"
 msgstr "Atualizar"
 
-#: thonny/plugins/esp/__init__.py:347
-#: thonny/plugins/micropython/uf2dialog.py:93 thonny/plugins/pip_gui.py:73
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
 msgid "Install"
 msgstr "Instalar"
 
-#: thonny/plugins/pip_gui.py:521
+#: thonny/plugins/pip_gui.py:570
 msgid "Could not find the package from PyPI."
 msgstr "Não foi possível encontrar o pacote do PyPI."
 
-#: thonny/plugins/pip_gui.py:543
+#: thonny/plugins/pip_gui.py:592
 msgid "Latest stable version"
 msgstr "Última versão estável"
 
-#: thonny/plugins/pip_gui.py:545
+#: thonny/plugins/pip_gui.py:594
 msgid "Latest version"
 msgstr "Última versão"
 
-#: thonny/plugins/pip_gui.py:547
+#: thonny/plugins/pip_gui.py:596
 msgid "Summary"
 msgstr "Sumário"
 
-#: thonny/plugins/pip_gui.py:549
+#: thonny/plugins/pip_gui.py:598
 msgid "Author"
 msgstr "Autor"
 
-#: thonny/plugins/pip_gui.py:551
+#: thonny/plugins/pip_gui.py:602
 msgid "Homepage"
 msgstr "Página inicial"
 
-#: thonny/plugins/pip_gui.py:553
+#: thonny/plugins/pip_gui.py:604
 msgid "Bugtracker"
 msgstr "Rastrear bugs"
 
-#: thonny/plugins/pip_gui.py:555
+#: thonny/plugins/pip_gui.py:606
 msgid "Documentation"
 msgstr "Documentação"
 
-#: thonny/plugins/pip_gui.py:557
+#: thonny/plugins/pip_gui.py:608
 msgid "PyPI page"
 msgstr "Página do PyPI"
 
-#: thonny/plugins/pip_gui.py:597
+#: thonny/plugins/pip_gui.py:648
 msgid "Requires"
 msgstr "Requer"
 
-#: thonny/plugins/pip_gui.py:729
+#: thonny/plugins/pip_gui.py:802
 msgid "Really uninstall?"
 msgstr "Realmente desinstalar?"
 
-#: thonny/plugins/pip_gui.py:734
+#: thonny/plugins/pip_gui.py:807
 msgid "Are you sure you want to uninstall it?"
 msgstr "Tem certeza de que deseja desinstalá-lo?"
 
@@ -448,179 +448,179 @@ msgstr "Voltar ao\n"
 msgid "Variables"
 msgstr "Variáveis"
 
-#: thonny/base_file_browser.py:1512
+#: thonny/base_file_browser.py:1576
 msgid "This computer"
 msgstr "Este computador"
 
-#: thonny/base_file_browser.py:627
+#: thonny/base_file_browser.py:648
 msgid "Refresh"
 msgstr "Atualizar"
 
-#: thonny/base_file_browser.py:640
+#: thonny/base_file_browser.py:657
 msgid "Focus into"
 msgstr "Focar em"
 
-#: thonny/base_file_browser.py:1347 thonny/base_file_browser.py:1359
-#: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
 msgid "Error"
 msgstr "Erro"
 
-#: thonny/base_file_browser.py:1347 thonny/base_file_browser.py:1359
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
 msgid "You need to select a file!"
 msgstr "Você precisa escolher um arquivo!"
 
-#: thonny/base_file_browser.py:1363
+#: thonny/base_file_browser.py:1427
 msgid "Overwrite?"
 msgstr "Sobrescrever?"
 
-#: thonny/base_file_browser.py:1363
+#: thonny/base_file_browser.py:1427
 msgid "Do you want to overwrite '%s' ?"
 msgstr "Você quer sobrescrever '%s' ?"
 
-#: thonny/editors.py:628 thonny/editors.py:630
+#: thonny/editors.py:658 thonny/editors.py:660
 msgid "New"
 msgstr "Novo"
 
-#: thonny/editors.py:641
+#: thonny/editors.py:671
 msgid "Open..."
 msgstr "Abrir..."
 
-#: thonny/editors.py:643
+#: thonny/editors.py:673
 msgid "Load"
 msgstr "Carregar"
 
-#: thonny/editors.py:652
+#: thonny/editors.py:682
 msgid "Recent files"
 msgstr "Arquivos recentes"
 
-#: thonny/editors.py:674 thonny/ui_utils.py:484
+#: thonny/editors.py:704 thonny/ui_utils.py:498
 msgid "Close all"
 msgstr "Fechar todos"
 
-#: thonny/editors.py:684 thonny/editors.py:686
+#: thonny/editors.py:714 thonny/editors.py:716
 msgid "Save"
 msgstr "Salvar"
 
-#: thonny/editors.py:709
+#: thonny/editors.py:739
 msgid "Save as..."
 msgstr "Salvar como..."
 
-#: thonny/editors.py:720
+#: thonny/editors.py:750
 msgid "Save copy..."
 msgstr "Salvar cópia..."
 
-#: thonny/config_ui.py:21
+#: thonny/config_ui.py:18
 msgid "Thonny options"
 msgstr "Opções do Thonny"
 
-#: thonny/running.py:114
+#: thonny/running.py:160
 msgid "Run current script"
 msgstr "Executar programa atual"
 
-#: thonny/running.py:145
+#: thonny/running.py:191
 msgid "Run current script in terminal"
 msgstr "Executar programa atual no terminal"
 
-#: thonny/running.py:158
+#: thonny/running.py:204
 msgid "Stop/Restart backend"
 msgstr "Parar/reiniciar backend"
 
-#: thonny/running.py:159
+#: thonny/running.py:205
 msgid "Stop"
 msgstr "Parar"
 
-#: thonny/running.py:170
+#: thonny/running.py:216
 msgid "Interrupt execution"
 msgstr "Interromper execução"
 
-#: thonny/running.py:183
+#: thonny/running.py:229
 msgid "Send EOF / Soft reboot"
 msgstr "Enviar EOF / reboot suave"
 
-#: thonny/running.py:194
+#: thonny/running.py:240
 msgid "Disconnect"
 msgstr "Desconectar"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:256
+#: thonny/plugins/cpython_frontend/cp_front.py:295
 msgid "Python interpreters"
 msgstr "Interpretadores Python"
 
-#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:257
-#: thonny/plugins/pip_gui.py:775 thonny/plugins/pip_gui.py:788
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
 msgid "all files"
 msgstr "todos os arquivos"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:285
+#: thonny/plugins/cpython_frontend/cp_front.py:324
 msgid "Select empty directory for new virtual environment"
 msgstr "Selecionar diretório vazio para novo ambiente virtual"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:292
+#: thonny/plugins/cpython_frontend/cp_front.py:331
 msgid "Bad directory"
 msgstr "Diretório inválido"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:293
+#: thonny/plugins/cpython_frontend/cp_front.py:332
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "O diretório selecionado não está vazio. \n"
 "Selecione outro ou cancele."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:310
+#: thonny/plugins/cpython_frontend/cp_front.py:349
 msgid "Creating virtual environment"
 msgstr "Criando ambiente virtual"
 
-#: thonny/shell.py:98
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "Limpar Shell"
 
-#: thonny/shell.py:154
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "Plotador"
 
-#: thonny/shell.py:286
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "Limpar"
 
-#: thonny/shell.py:299
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "Mostrar Plotador"
 
-#: thonny/shell.py:1610
+#: thonny/shell.py:1660
 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 questões de desempenho, o Shell evita mostrar linhas muito longas por completo (veja 'Ferramentas → Opções → Shell').\n"
 "Aqui você pode interagir com o trecho de texto original."
 
-#: thonny/shell.py:1621
+#: thonny/shell.py:1671
 msgid "Wrap text (may be slow)"
 msgstr "Quebrar texto (pode ser lento)"
 
-#: thonny/ui_utils.py:1819
+#: thonny/ui_utils.py:1879
 msgid "Copy to clipboard"
 msgstr "Copiar para área de transferência"
 
-#: thonny/shell.py:1663
+#: thonny/shell.py:1713
 msgid "Squeezed text (%d characters)"
 msgstr "Texto espremido (%d caracteres)"
 
-#: thonny/shell.py:1833
+#: thonny/shell.py:1883
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr "O Plotador visualiza séries de\n"
 "números impressos no Shell."
 
-#: thonny/shell.py:1835
+#: thonny/shell.py:1885
 msgid "See Help for details."
 msgstr "Veja Ajuda para detalhes."
 
-#: thonny/ui_utils.py:483
+#: thonny/ui_utils.py:497
 msgid "Close others"
 msgstr "Fechar outros"
 
-#: thonny/ui_utils.py:1675
+#: thonny/ui_utils.py:1734
 msgid "Copying"
 msgstr "Copiando"
 
-#: thonny/ui_utils.py:1678
+#: thonny/ui_utils.py:1737
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -630,64 +630,65 @@ msgstr "Copiando\n"
 "para\n"
 "  %s"
 
-#: thonny/base_file_browser.py:1324 thonny/config_ui.py:38 thonny/export.py:28
-#: thonny/plugins/backend_config_page.py:273 thonny/plugins/pip_gui.py:1210
-#: thonny/ui_utils.py:148 thonny/ui_utils.py:1686 thonny/ui_utils.py:1771
-#: thonny/workdlg.py:164 thonny/workdlg.py:209
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: thonny/base_file_browser.py:1321 thonny/config_ui.py:37 thonny/export.py:25
-#: thonny/plugins/about.py:120 thonny/plugins/backend_config_page.py:268
-#: thonny/ui_utils.py:145 thonny/ui_utils.py:1768 thonny/workdlg.py:206
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
 msgid "OK"
 msgstr "OK"
 
-#: thonny/ui_utils.py:2261
+#: thonny/ui_utils.py:2345
 msgid "Select All"
 msgstr "Selecionar tudo"
 
-#: thonny/plugins/shell_config_page.py:82 thonny/workbench.py:162
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:164
 msgid "Shell"
 msgstr "Shell"
 
-#: thonny/workbench.py:593
+#: thonny/workbench.py:608
 msgid "Options..."
 msgstr "Opções..."
 
-#: thonny/workbench.py:600
+#: thonny/workbench.py:615
 msgid "Increase font size"
 msgstr "Aumentar tamanho da fonte"
 
-#: thonny/workbench.py:665
+#: thonny/workbench.py:679
 msgid "Change font size"
 msgstr "Mudar tamanho da fonte"
 
-#: thonny/workbench.py:666
+#: thonny/workbench.py:680
 msgid "Zoom"
 msgstr "Zoom"
 
-#: thonny/workbench.py:675
+#: thonny/workbench.py:689
 msgid "Exit Thonny"
 msgstr "Sair do Thonny"
 
-#: thonny/workbench.py:678
+#: thonny/workbench.py:692
 msgid "Quit"
 msgstr "Sair"
 
-#: thonny/workbench.py:1216 thonny/workbench.py:1224
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
 msgid "Overwriting theme '%s'"
 msgstr "Sobrescrevendo o tema '%s'"
 
-#: thonny/workbench.py:1408
+#: thonny/workbench.py:1438
 msgid "Program arguments:"
 msgstr "Argumentos do programa:"
 
-#: thonny/workbench.py:1462
+#: thonny/workbench.py:1492
 msgid "Regular mode"
 msgstr "Modo Regular"
 
-#: thonny/workbench.py:1463
+#: thonny/workbench.py:1493
 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.)"
@@ -695,71 +696,71 @@ msgstr "A configuração foi atualizada. Reinicie o Thonny para trabalhar no mod
 "\n"
 "(Veja 'Ferramentas → Opções → Geral' caso mude de ideia depois.)"
 
-#: thonny/plugins/ast_view.py:212
+#: thonny/plugins/ast_view.py:211
 msgid "Program tree"
 msgstr "Árvore do programa"
 
-#: thonny/plugins/debugger.py:1283
+#: thonny/plugins/debugger.py:1284
 msgid "Resume"
 msgstr "Continuar"
 
-#: thonny/plugins/debugger.py:1299
+#: thonny/plugins/debugger.py:1300
 msgid "Run / resume"
 msgstr "Executar / continuar"
 
-#: thonny/plugins/debugger.py:1314
+#: thonny/plugins/debugger.py:1315
 msgid "Debug current script"
 msgstr "Depurar programa atual"
 
-#: thonny/plugins/debugger.py:1316
+#: thonny/plugins/debugger.py:1317
 msgid "Debug"
 msgstr "Depurar"
 
-#: thonny/plugins/debugger.py:1327
+#: thonny/plugins/debugger.py:1328
 msgid "Debug current script (nicer)"
 msgstr "Depurar programa atual (melhor)"
 
-#: thonny/plugins/debugger.py:1339
+#: thonny/plugins/debugger.py:1340
 msgid "Debug current script (faster)"
 msgstr "Depurar programa atual (mais rápido)"
 
-#: thonny/plugins/debugger.py:1350
+#: thonny/plugins/debugger.py:1351
 msgid "Step over"
 msgstr "Pular"
 
-#: thonny/plugins/debugger.py:1352
+#: thonny/plugins/debugger.py:1353
 msgid "Over"
 msgstr "Pular"
 
-#: thonny/plugins/debugger.py:1363
+#: thonny/plugins/debugger.py:1364
 msgid "Step into"
 msgstr "Entrar"
 
-#: thonny/plugins/debugger.py:1365
+#: thonny/plugins/debugger.py:1366
 msgid "Into"
 msgstr "Entrar"
 
-#: thonny/plugins/debugger.py:1376
+#: thonny/plugins/debugger.py:1377
 msgid "Step out"
 msgstr "Sair"
 
-#: thonny/plugins/debugger.py:1378
+#: thonny/plugins/debugger.py:1379
 msgid "Out"
 msgstr "Sair"
 
-#: thonny/plugins/debugger.py:1413
+#: thonny/plugins/debugger.py:1414
 msgid "Step back"
 msgstr "Voltar"
 
-#: thonny/plugins/debugger.py:1415
+#: thonny/plugins/debugger.py:1416
 msgid "Back"
 msgstr "Voltar"
 
-#: thonny/plugins/debugger.py:1421
+#: thonny/plugins/debugger.py:1422
 msgid "Stack"
 msgstr "Pilha"
 
-#: thonny/plugins/debugger.py:1422
+#: thonny/plugins/debugger.py:1423
 msgid "Exception"
 msgstr "Exceção"
 
@@ -779,122 +780,110 @@ msgstr "Modo da interface"
 msgid "UI scaling factor"
 msgstr "Fator de escala da interface"
 
-#: thonny/plugins/general_config_page.py:108
+#: thonny/plugins/general_config_page.py:114
 msgid "NB! Restart Thonny after changing these options!"
 msgstr "NB! Reinicie o Thonny depois de mudar estas opções!"
 
-#: thonny/plugins/general_config_page.py:142
+#: thonny/plugins/general_config_page.py:148
 msgid "General"
 msgstr "Geral"
 
-#: thonny/plugins/pip_gui.py:129
+#: thonny/plugins/pip_gui.py:142
 msgid "INSTALL"
 msgstr "INSTALAR"
 
-#: thonny/plugins/pip_gui.py:351
+#: thonny/plugins/pip_gui.py:367
 msgid "Browse the packages"
 msgstr "Navegar pelos pacotes"
 
-#: thonny/plugins/pip_gui.py:354
+#: thonny/plugins/pip_gui.py:370
 msgid "With current interpreter you can only browse the packages here.\n"
 "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling."
 msgstr "Com o interpretador atual você só pode navegar pelos pacotes aqui.\n"
 "Use 'Ferramentas → Abrir shell do sistema ...' para instalar, atualizar ou desinstalar."
 
-#: thonny/plugins/pip_gui.py:362
+#: thonny/plugins/pip_gui.py:378
 msgid "Packages' directory"
 msgstr "Diretório dos pacotes"
 
-#: thonny/plugins/pip_gui.py:366
+#: thonny/plugins/pip_gui.py:382
 msgid "Install from PyPI"
 msgstr "Instalar a partir do PyPI"
 
-#: thonny/plugins/pip_gui.py:369
+#: thonny/plugins/pip_gui.py:385
 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 "Se você não sabe de onde obter o pacote, então pesquise o índice de pacotes do Python (PyPI). Comece inserindo o nome do pacote na caixa de pesquisa acima e pressionando ENTER."
 
-#: thonny/plugins/pip_gui.py:386
+#: thonny/plugins/pip_gui.py:402
 msgid "to locate requirements.txt file and install the packages specified in it."
 msgstr "para localizar o arquivo requirements.txt e instalar os pacotes especificados nele."
 
-#: thonny/plugins/pip_gui.py:392
+#: thonny/plugins/pip_gui.py:408
 msgid "Click"
 msgstr "Clique"
 
-#: thonny/plugins/pip_gui.py:397
+#: thonny/plugins/pip_gui.py:413
 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
 msgstr "para localizar e instalar o arquivo de pacote (normalmente com extensão .whl, .tar.gz ou .zip)"
 
-#: thonny/plugins/pip_gui.py:404
+#: thonny/plugins/pip_gui.py:420
 msgid "Upgrade or uninstall"
 msgstr "Atualizar ou desinstalar"
 
-#: thonny/plugins/pip_gui.py:406
+#: thonny/plugins/pip_gui.py:422
 msgid "Start by selecting the package from the left."
 msgstr "Comece selecionando o pacote da esquerda."
 
-#: thonny/plugins/pip_gui.py:410
-msgid "Target:"
-msgstr "Alvo:"
-
-#: thonny/plugins/pip_gui.py:414
-msgid "virtual environment"
-msgstr "ambiente virtual"
-
-#: thonny/plugins/pip_gui.py:412
-msgid "user site packages"
-msgstr "pacotes locais do usuário"
-
-#: thonny/plugins/pip_gui.py:418
+#: thonny/plugins/pip_gui.py:430
 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
 msgstr "Esta caixa de diálogo lista todos os pacotes disponíveis, mas permite atualizar e desinstalar apenas pacotes de"
 
-#: thonny/plugins/pip_gui.py:428
+#: thonny/plugins/pip_gui.py:440
 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means."
 msgstr "Novos pacotes também serão instalados neste diretório. Outros locais devem ser gerenciados por meios alternativos."
 
-#: thonny/plugins/pip_gui.py:471
+#: thonny/plugins/pip_gui.py:493
 msgid "Installed version:"
 msgstr "Versão instalada:"
 
-#: thonny/plugins/pip_gui.py:473
+#: thonny/plugins/pip_gui.py:495
 msgid "Installed to:"
 msgstr "Instalado para:"
 
-#: thonny/plugins/pip_gui.py:524
+#: thonny/plugins/pip_gui.py:573
 msgid "Please check your spelling!"
 msgstr "Por favor verifique sua ortografia!"
 
-#: thonny/plugins/pip_gui.py:528
+#: thonny/plugins/pip_gui.py:577
 msgid "Could not find the package info from PyPI."
 msgstr "Não foi possível encontrar informações do pacore em PyPI."
 
-#: thonny/plugins/pip_gui.py:530 thonny/plugins/pip_gui.py:1271
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
 msgid "Error code:"
 msgstr "Código do erro:"
 
-#: thonny/plugins/pip_gui.py:675
+#: thonny/plugins/pip_gui.py:748
 msgid "Can't find package name from the list:"
 msgstr "Não é possível encontrar o nome do pacote na lista:"
 
-#: thonny/plugins/pip_gui.py:730
+#: thonny/plugins/pip_gui.py:803
 msgid "Package '{}' is required for installing and uninstalling other packages."
 msgstr "Pacote '{}' é obrigatório para instalar e desinstalar outros pacotes."
 
-#: thonny/plugins/pip_gui.py:775
+#: thonny/plugins/pip_gui.py:848
 msgid "Package"
 msgstr "Pacote"
 
-#: thonny/plugins/pip_gui.py:885
+#: thonny/plugins/pip_gui.py:960
 msgid "Manage packages for %s"
 msgstr "Gerenciar pacotes para %s"
 
-#: thonny/editors.py:571 thonny/plugins/micropython/pip_gui.py:23
-#: thonny/plugins/pip_gui.py:936
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
 msgid "Confirmation"
 msgstr "Confirmação"
 
-#: thonny/plugins/pip_gui.py:937
+#: thonny/plugins/pip_gui.py:1035
 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"
@@ -906,111 +895,111 @@ msgstr "Parece que você está instalando um pacote relacionado ao Thonny.\n"
 "\n"
 "Tem certeza que deseja instalar %s para seus programas?"
 
-#: thonny/plugins/pip_gui.py:1042
+#: thonny/plugins/pip_gui.py:1141
 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! Pode haver outra versão disponível que seja compatível com a versão do Thonny atual. Clique no botão '...' para escolher a versão a instalar."
 
-#: thonny/plugins/pip_gui.py:1050
+#: thonny/plugins/pip_gui.py:1149
 msgid "Thonny plugin without requirements"
 msgstr "Plugin do Thonny sem requisitos obrigatórios"
 
-#: thonny/plugins/pip_gui.py:1066
+#: thonny/plugins/pip_gui.py:1165
 msgid "Unsuitable requirements"
 msgstr "Requisitos inadequados"
 
-#: thonny/plugins/pip_gui.py:1067
+#: thonny/plugins/pip_gui.py:1166
 msgid "This package requires different Thonny version:"
 msgstr "Este pacote requer uma versão diferente do Thonny:"
 
-#: thonny/plugins/pip_gui.py:1071
+#: thonny/plugins/pip_gui.py:1170
 msgid "If you still want it, then please install it from the command line."
 msgstr "Se você quer mesmo isto, então por favor instale via linha de comando."
 
-#: thonny/plugins/pip_gui.py:1108
+#: thonny/plugins/pip_gui.py:1207
 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
 msgstr "NB! Você precisa reiniciar o Thonny depois de instalar / atualizar / desinstalar um plugin."
 
-#: thonny/plugins/pip_gui.py:1118
+#: thonny/plugins/pip_gui.py:1217
 msgid "Thonny plug-ins"
 msgstr "Plugins do Thonny"
 
-#: thonny/plugins/pip_gui.py:1154
+#: thonny/plugins/pip_gui.py:1253
 msgid "Advanced install / upgrade / downgrade"
 msgstr "Instalação avançada / atualização / desatualização"
 
-#: thonny/plugins/pip_gui.py:1163
+#: thonny/plugins/pip_gui.py:1262
 msgid "Desired version"
 msgstr "Versão desejada"
 
-#: thonny/plugins/pip_gui.py:1201
+#: thonny/plugins/pip_gui.py:1321
 msgid "Upgrade dependencies"
 msgstr "Atualizar dependências"
 
-#: thonny/plugins/pip_gui.py:1269
+#: thonny/plugins/pip_gui.py:1406
 msgid "Requires:"
 msgstr "Requer:"
 
-#: thonny/plugins/pip_gui.py:1273
+#: thonny/plugins/pip_gui.py:1410
 msgid "Error:"
 msgstr "Erro:"
 
-#: thonny/plugins/pip_gui.py:1486
+#: thonny/plugins/pip_gui.py:1601
 msgid "Manage packages..."
 msgstr "Gerenciar pacotes..."
 
-#: thonny/plugins/pip_gui.py:1492
+#: thonny/plugins/pip_gui.py:1607
 msgid "Manage plug-ins..."
 msgstr "Gerenciar plugins..."
 
-#: thonny/plugins/replayer.py:365
+#: thonny/plugins/replayer.py:364
 msgid "Open replayer..."
 msgstr "Abrir repetidor..."
 
-#: thonny/plugins/run_debug_config_page.py:14
+#: thonny/plugins/run_debug_config_page.py:21
 msgid "Change working directory to script directory on Run / Debug"
 msgstr "Mude o diretório de trabalho para o diretório do programa quando Executar / Depurar"
 
-#: thonny/plugins/run_debug_config_page.py:22
+#: thonny/plugins/run_debug_config_page.py:35
 msgid "Show function calls (frames) in separate windows"
 msgstr "Mostrar chamadas de função (quadros) em janelas separadas"
 
-#: thonny/plugins/run_debug_config_page.py:23
+#: thonny/plugins/run_debug_config_page.py:36
 msgid "Uncheck if you want more traditional experience."
 msgstr "Desmarque se você deseja uma experiência mais tradicional."
 
-#: thonny/plugins/run_debug_config_page.py:29
+#: thonny/plugins/run_debug_config_page.py:42
 msgid "Open and close Stack view automatically"
 msgstr "Abrir e fechar o aba Pilha automaticamente"
 
-#: thonny/plugins/run_debug_config_page.py:30
+#: thonny/plugins/run_debug_config_page.py:43
 msgid "Opens the Stack view on first call and closes it when program returns to main frame."
 msgstr "Abrir a aba da Pilha na primeira chamada e fechar ela quando o programa retorna ao quadro principal."
 
-#: thonny/plugins/run_debug_config_page.py:39
+#: thonny/plugins/run_debug_config_page.py:52
 msgid "Allow stepping into libraries (ie. outside of main script directory)"
 msgstr "Permitir a entrada em bibliotecas (ou seja, fora do diretório principal do programa)"
 
-#: thonny/plugins/run_debug_config_page.py:40
+#: thonny/plugins/run_debug_config_page.py:53
 msgid "May make debugging slower."
 msgstr "Pode tornar a depuração mais lenta."
 
-#: thonny/plugins/run_debug_config_page.py:45
+#: thonny/plugins/run_debug_config_page.py:58
 msgid "Preferred debugger"
 msgstr "Depurador preferido"
 
-#: thonny/plugins/run_debug_config_page.py:57
+#: thonny/plugins/run_debug_config_page.py:70
 msgid "(used when clicking Debug toolbar button)"
 msgstr "(usado ao clicar no botão Depurar da barra de ferramentas)"
 
-#: thonny/plugins/run_debug_config_page.py:62
+#: thonny/plugins/run_debug_config_page.py:75
 msgid "Birdseye port"
 msgstr "Porta do Birdseye"
 
-#: thonny/plugins/run_debug_config_page.py:66
+#: thonny/plugins/run_debug_config_page.py:79
 msgid "(restart Thonny after changing this)"
 msgstr "(reinicie o Thonny depois de mudar isto)"
 
-#: thonny/plugins/run_debug_config_page.py:74
+#: thonny/plugins/run_debug_config_page.py:87
 msgid "Run & Debug"
 msgstr "Executar e depurar"
 
@@ -1056,51 +1045,51 @@ msgstr "NB! O fechamento automático precisa ser habilitado nas configurações
 msgid "Terminal"
 msgstr "Terminal"
 
-#: thonny/plugins/theme_and_font_config_page.py:40
+#: thonny/plugins/theme_and_font_config_page.py:39
 msgid "UI theme"
 msgstr "Tema da interface"
 
-#: thonny/plugins/theme_and_font_config_page.py:53
+#: thonny/plugins/theme_and_font_config_page.py:52
 msgid "Syntax theme"
 msgstr "Tema da sintaxe"
 
-#: thonny/plugins/theme_and_font_config_page.py:85
+#: thonny/plugins/theme_and_font_config_page.py:84
 msgid "Editor font"
 msgstr "Fonte do Editor"
 
-#: thonny/plugins/theme_and_font_config_page.py:108
+#: thonny/plugins/theme_and_font_config_page.py:107
 msgid "IO font"
 msgstr "Fonte da entrada e saída"
 
-#: thonny/plugins/theme_and_font_config_page.py:133
+#: thonny/plugins/theme_and_font_config_page.py:132
 msgid "Preview"
 msgstr "Previsualizar"
 
-#: thonny/plugins/theme_and_font_config_page.py:145
+#: thonny/plugins/theme_and_font_config_page.py:150
 msgid "This is a comment"
 msgstr "Isto é um comentário"
 
-#: thonny/plugins/theme_and_font_config_page.py:148
+#: thonny/plugins/theme_and_font_config_page.py:153
 msgid "The answer is"
 msgstr "A resposta é"
 
-#: thonny/plugins/theme_and_font_config_page.py:152
+#: thonny/plugins/theme_and_font_config_page.py:157
 msgid "unclosed_string"
 msgstr "string_aberta"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:159
 msgid "blah, blah"
 msgstr "blá, blá"
 
-#: thonny/plugins/theme_and_font_config_page.py:177
+#: thonny/plugins/theme_and_font_config_page.py:183
 msgid "NB! Some style elements change only after restarting Thonny!"
 msgstr "NB! Alguns elementos de estilo mudam somente após reiniciar o Thonny!"
 
-#: thonny/plugins/theme_and_font_config_page.py:216
+#: thonny/plugins/theme_and_font_config_page.py:222
 msgid "Enter an integer"
 msgstr "Informe um número inteiro"
 
-#: thonny/plugins/theme_and_font_config_page.py:229
+#: thonny/plugins/theme_and_font_config_page.py:235
 msgid "Theme & Font"
 msgstr "Tema e fonte"
 
@@ -1120,35 +1109,35 @@ msgstr "Início"
 msgid "Help contents"
 msgstr "Conteúdo da ajuda"
 
-#: thonny/plugins/micropython/mp_front.py:318
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "dispositivo CircuitPython"
 
-#: thonny/plugins/micropython/mp_front.py:322
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "dispositivo MicroPython"
 
-#: thonny/plugins/micropython/mp_front.py:563
+#: thonny/plugins/micropython/mp_front.py:558
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "Conecte seu dispositivo ao computador e selecione a porta correspondente abaixo"
 
-#: thonny/plugins/micropython/mp_front.py:566
+#: thonny/plugins/micropython/mp_front.py:561
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "procure pelo nome do seu dispositivo, \"USB Serial\" ou \"UART\""
 
-#: thonny/plugins/micropython/mp_front.py:568
+#: thonny/plugins/micropython/mp_front.py:563
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "Se você não consegue encontrá-lo, pode ser necessário instalar primeiro o driver USB adequado."
 
-#: thonny/plugins/micropython/mp_front.py:464
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port"
 msgstr "Porta"
 
-#: thonny/plugins/micropython/mp_front.py:474
+#: thonny/plugins/micropython/mp_front.py:458
 msgid "Try to detect port automatically"
 msgstr "Tente detectar a porta automaticamente"
 
-#: thonny/plugins/micropython/__init__.py:25
+#: thonny/plugins/micropython/__init__.py:24
 msgid "MicroPython (generic)"
 msgstr "MicroPython (genérico)"
 
@@ -1160,19 +1149,19 @@ msgstr "Imprimir..."
 msgid "Open system shell..."
 msgstr "Abrir shell do sistema..."
 
-#: thonny/plugins/backend_config_page.py:103
+#: thonny/plugins/backend_config_page.py:109
 msgid "Details"
 msgstr "Detalhes"
 
-#: thonny/plugins/pip_gui.py:379
+#: thonny/plugins/pip_gui.py:395
 msgid "Install from requirements file"
 msgstr "Instalar a partir de arquivo de requisitos"
 
-#: thonny/plugins/pip_gui.py:391
+#: thonny/plugins/pip_gui.py:407
 msgid "Install from local file"
 msgstr "Instalar a partir de arquivo local"
 
-#: thonny/plugins/pip_gui.py:1101
+#: thonny/plugins/pip_gui.py:1200
 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 "Esta caixa de diálogo é para gerenciar os plugins do Thonny e as suas dependências.\n"
@@ -1182,239 +1171,235 @@ msgstr "Esta caixa de diálogo é para gerenciar os plugins do Thonny e as suas
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (genérico)"
 
-#: thonny/plugins/commenting_indenting.py:143
+#: thonny/plugins/commenting_indenting.py:142
 msgid "Indent selected lines"
 msgstr "Recuar as linhas selecionadas"
 
-#: thonny/plugins/commenting_indenting.py:153
+#: thonny/plugins/commenting_indenting.py:152
 msgid "Dedent selected lines"
 msgstr "Desfazer recuo das linhas selecionadas"
 
-#: thonny/workbench.py:1451
+#: thonny/workbench.py:1481
 msgid "Switch to\n"
 "regular\n"
 "mode"
 msgstr "Trocar para\n"
 "modo\n"
-"normal"
+"regular"
 
-#: thonny/plugins/microbit/__init__.py:57
+#: thonny/plugins/microbit/__init__.py:62
 msgid "Make sure MicroPython has been installed to your micro:bit."
 msgstr "Certifique-se de que o MicroPython tenha sido instalado em seu micro:bit."
 
-#: thonny/plugins/microbit/__init__.py:59
+#: thonny/plugins/microbit/__init__.py:64
 msgid "Don't forget that main.py only works without embedded main script."
 msgstr "Não se esqueça de que main.py só funciona sem script principal embutido."
 
-#: thonny/plugins/micropython/uf2dialog.py:44
-msgid "please wait"
-msgstr "por favor aguarde"
-
-#: thonny/misc_utils.py:151
+#: thonny/misc_utils.py:177
 msgid "Could not find disk '%s'. Do you want to locate it yourself?"
 msgstr "Não foi possível encontrar o disco '%s'. Você deseja localizá-lo por conta própria?"
 
-#: thonny/misc_utils.py:154
+#: thonny/misc_utils.py:180
 msgid "Found several '%s' disks. Do you want to choose one yourself?"
 msgstr "Vários discos '%s' foram encontrados. Você quer escolher um por conta própria?"
 
-#: thonny/misc_utils.py:170
+#: thonny/misc_utils.py:196
 msgid "Can't find suitable disk"
 msgstr "Não foi possível encontrar um disco adequado"
 
-#: thonny/base_file_browser.py:282
+#: thonny/base_file_browser.py:294
 msgid "%d items"
 msgstr "%d itens"
 
-#: thonny/base_file_browser.py:721
+#: thonny/base_file_browser.py:743
 msgid "Move to Trash"
 msgstr "Mover para a Lixeira"
 
-#: thonny/base_file_browser.py:724
+#: thonny/base_file_browser.py:746
 msgid "Delete"
 msgstr "Remover"
 
-#: thonny/base_file_browser.py:703 thonny/base_file_browser.py:854
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
 msgid "New directory"
 msgstr "Novo diretório"
 
-#: thonny/base_file_browser.py:727
+#: thonny/base_file_browser.py:749
 msgid "Properties"
 msgstr "Propriedades"
 
-#: thonny/base_file_browser.py:729
+#: thonny/base_file_browser.py:751
 msgid "Storage space"
 msgstr "Espaço de armazenamento"
 
-#: thonny/base_file_browser.py:739
+#: thonny/base_file_browser.py:761
 msgid "Path"
 msgstr "Caminho"
 
-#: thonny/base_file_browser.py:741
+#: thonny/base_file_browser.py:763
 msgid "Directory properties"
 msgstr "Propriedades do diretório"
 
-#: thonny/base_file_browser.py:743
+#: thonny/base_file_browser.py:765
 msgid "File properties"
 msgstr "Propriedades do arquivo"
 
-#: thonny/base_file_browser.py:745
+#: thonny/base_file_browser.py:767
 msgid "bytes"
 msgstr "bytes"
 
-#: thonny/base_file_browser.py:748
+#: thonny/base_file_browser.py:770
 msgid "Size"
 msgstr "Tamanho"
 
-#: thonny/base_file_browser.py:92 thonny/base_file_browser.py:759
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
 msgid "Modified"
 msgstr "Modificado"
 
-#: thonny/base_file_browser.py:818
+#: thonny/base_file_browser.py:842
 msgid "Deleting %s"
 msgstr "Removendo %s"
 
-#: thonny/editors.py:264
+#: thonny/editors.py:262
 msgid "Loading"
 msgstr "Carregando"
 
-#: thonny/editors.py:382
+#: thonny/editors.py:395
 msgid "Saving"
 msgstr "Salvando"
 
-#: thonny/plugins/files.py:216
+#: thonny/plugins/files.py:219
 msgid "Upload to %s"
 msgstr "Enviar para %s"
 
-#: thonny/plugins/files.py:362
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
 msgstr "Baixando %s para %s"
 
-#: thonny/plugins/files.py:275
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr "Baixar para %s"
 
-#: thonny/base_file_browser.py:629
+#: thonny/base_file_browser.py:650
 msgid "Open in system file manager"
 msgstr "Abrir no gerenciador de arquivos do sistema"
 
-#: thonny/base_file_browser.py:634
+#: thonny/base_file_browser.py:678
 msgid "Hide hidden files"
 msgstr "Esconder arquivos escondidos"
 
-#: thonny/base_file_browser.py:634
+#: thonny/base_file_browser.py:678
 msgid "Show hidden files"
 msgstr "Mostrar arquivos escondidos"
 
-#: thonny/base_file_browser.py:644
+#: thonny/base_file_browser.py:661
 msgid "Open in Thonny"
 msgstr "Abrir no Thonny"
 
-#: thonny/base_file_browser.py:670
+#: thonny/base_file_browser.py:692
 msgid "Open in system default app"
 msgstr "Abrir no aplicativo padrão do sistema"
 
-#: thonny/base_file_browser.py:656 thonny/base_file_browser.py:678
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
 msgid "Configure %s files"
 msgstr "Configurar %s arquivos"
 
-#: thonny/base_file_browser.py:679
+#: thonny/base_file_browser.py:701
 msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
 msgstr "O que fazer com um arquivo %s quando este é clicado duas vezes no navegador de arquivos do Thonny?"
 
-#: thonny/base_file_browser.py:1225 thonny/editors.py:949 thonny/editors.py:951
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
 msgid "Deleting"
 msgstr "Removendo"
 
-#: thonny/base_file_browser.py:1232
+#: thonny/base_file_browser.py:1265
 msgid "Creating directory"
 msgstr "Criando um diretório"
 
-#: thonny/editors.py:262
+#: thonny/editors.py:260
 msgid "Loading %s"
 msgstr "Carregando %s"
 
-#: thonny/editors.py:380
+#: thonny/editors.py:390
 msgid "Saving to %s"
 msgstr "Salvando para %s"
 
-#: thonny/editors.py:698 thonny/editors.py:700
+#: thonny/editors.py:728 thonny/editors.py:730
 msgid "Save All files"
 msgstr "Salvar todos os arquivos"
 
-#: thonny/plugins/backend_config_page.py:323 thonny/workbench.py:849
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
 msgid "Configure interpreter..."
 msgstr "Configurar interpretador..."
 
-#: thonny/workbench.py:1561
+#: thonny/workbench.py:1591
 msgid "Device"
 msgstr "Dispositivo"
 
-#: thonny/workdlg.py:193
+#: thonny/workdlg.py:234
 msgid "Cancelling"
 msgstr "Cancelando"
 
-#: thonny/workdlg.py:220
+#: thonny/workdlg.py:270
 msgid "Starting"
 msgstr "Iniciando"
 
-#: thonny/plugins/backend_config_page.py:234
+#: thonny/plugins/backend_config_page.py:249
 msgid "Authentication"
 msgstr "Autenticação"
 
-#: thonny/plugins/backend_config_page.py:236
+#: thonny/plugins/backend_config_page.py:251
 msgid "Enter the passphrase of your private key for\n"
 "{}"
 msgstr "Digite a frase-passe de sua chave privada para\n"
 "{}"
 
-#: thonny/plugins/backend_config_page.py:239
+#: thonny/plugins/backend_config_page.py:254
 msgid "Enter your password for\n"
 "{}"
 msgstr "Digite a sua senha para\n"
 "{}"
 
-#: thonny/plugins/object_inspector.py:487
+#: thonny/plugins/object_inspector.py:486
 msgid "The representation above is an approximate value of this float. The exact stored value is %s which is about %s"
 msgstr "A representação acima é um valor aproximado deste float. O valor exato armazenado é %s, que é cerca de %s"
 
-#: thonny/plugins/pip_gui.py:631
+#: thonny/plugins/pip_gui.py:682
 msgid "Search results"
 msgstr "Resultados da pesquisa"
 
-#: thonny/plugins/pip_gui.py:632
+#: thonny/plugins/pip_gui.py:683
 msgid "Searching"
 msgstr "Pesquisando"
 
-#: thonny/plugins/pip_gui.py:714 thonny/plugins/pip_gui.py:803
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
 msgid "Installing '%s'"
 msgstr "Instalando '%s'"
 
-#: thonny/plugins/pip_gui.py:720
+#: thonny/plugins/pip_gui.py:793
 msgid "Upgrading '%s'"
 msgstr "Atualizando '%s'"
 
-#: thonny/plugins/pip_gui.py:727
+#: thonny/plugins/pip_gui.py:800
 msgid "Uninstalling '%s'"
 msgstr "Desinstalando '%s'"
 
-#: thonny/plugins/pip_gui.py:741
+#: thonny/plugins/pip_gui.py:814
 msgid "Installing"
 msgstr "Instalando"
 
-#: thonny/plugins/pip_gui.py:1447
+#: thonny/plugins/pip_gui.py:1562
 msgid "Package manager is not available for this interpreter"
 msgstr "O gerenciador de pacotes não está disponível para este interpretador"
 
-#: thonny/base_file_browser.py:1176 thonny/plugins/pip_gui.py:1461
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
 msgid "Not supported"
 msgstr "Não suportado"
 
-#: thonny/plugins/micropython/pip_gui.py:117 thonny/plugins/pip_gui.py:1466
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
 msgid "Not available"
 msgstr "Indisponível"
 
-#: thonny/plugins/pip_gui.py:1467
+#: thonny/plugins/pip_gui.py:1582
 msgid "You need to stop your program before launching the package manager."
 msgstr "Você precisa parar o seu programa antes de iniciar o gerenciador de pacotes."
 
@@ -1422,11 +1407,11 @@ msgstr "Você precisa parar o seu programa antes de iniciar o gerenciador de pac
 msgid "Open evaluated values in Object inspector"
 msgstr "Abrir os valores avaliados no Inspetor de objetos"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:207
+#: thonny/plugins/cpython_frontend/cp_front.py:234
 msgid "Python executable"
 msgstr "Executável do Python"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:230
+#: thonny/plugins/cpython_frontend/cp_front.py:258
 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)!"
@@ -1434,92 +1419,55 @@ msgstr "NB! O botão de seleção de arquivos pode não funcionar corretamente a
 "executáveis a partir de um ambiente virtual. Neste caso, escolha o script 'activate'\n"
 "do interpretador (ou digite o caminho diretamente na caixa)!"
 
-#: thonny/plugins/cpython_ssh/__init__.py:16
+#: thonny/plugins/cpython_ssh/__init__.py:17
 msgid "Remote Python 3 (SSH)"
 msgstr "Python 3 remoto (SSH)"
 
-#: thonny/plugins/micropython/mp_front.py:328
+#: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
 msgstr "Não conectado"
 
-#: thonny/plugins/micropython/mp_front.py:540
-msgid "Advanced options"
-msgstr "Opções avançadas"
-
-#: thonny/plugins/micropython/mp_front.py:547
-msgid "Install or update firmware"
-msgstr "Instalar ou atualizar firmware"
-
-#: thonny/plugins/micropython/__init__.py:36
+#: thonny/plugins/micropython/__init__.py:35
 msgid "MicroPython (local)"
 msgstr "MicroPython (local)"
 
-#: thonny/plugins/micropython/__init__.py:47
+#: thonny/plugins/micropython/__init__.py:46
 msgid "MicroPython (SSH)"
 msgstr "MicroPython (SSH)"
 
-#: thonny/plugins/micropython/pip_gui.py:77
-msgid "Scope"
-msgstr "Escopo"
-
-#: thonny/plugins/micropython/pip_gui.py:90
-msgid "This dialog lists top-level modules from following directories:\n"
-""
-msgstr "Esta caixa de diálogo lista os módulos de nível superior dos seguintes diretórios:"
-
-#: thonny/plugins/micropython/pip_gui.py:99
-msgid "New packages will be installed to"
-msgstr "Novos pacotes serão instalados em"
-
-#: thonny/plugins/micropython/pip_gui.py:119
+#: thonny/plugins/micropython/pip_gui.py:144
 msgid "no absolute lib directory in sys.path"
 msgstr "nenhum diretório lib absoluto em sys.path"
 
-#: thonny/plugins/micropython/uf2dialog.py:39
-msgid "Version to be installed"
-msgstr "Versão a ser instalada"
-
-#: thonny/plugins/micropython/uf2dialog.py:47
-msgid "Target device location"
-msgstr "Localização do dispositivo de destino"
-
-#: thonny/plugins/micropython/uf2dialog.py:58
-msgid "Target device model"
-msgstr "Modelo de dispositivo de destino"
-
-#: thonny/plugins/micropython/uf2dialog.py:146
-msgid "Please wait"
-msgstr "Por favor aguarde"
-
-#: thonny/plugins/pip_gui.py:70
+#: thonny/plugins/pip_gui.py:71
 msgid "Search on PyPI"
 msgstr "Pesquisar no PyPI"
 
-#: thonny/base_file_browser.py:671
+#: thonny/base_file_browser.py:693
 msgid "Open in Thonny's text editor"
 msgstr "Abrir no editor de texto do Thonny"
 
-#: thonny/base_file_browser.py:334
+#: thonny/base_file_browser.py:346
 msgid "Storage space on this drive or filesystem"
 msgstr "Espaço de armazenamento nesta unidade ou sistema de arquivos"
 
-#: thonny/base_file_browser.py:335
+#: thonny/base_file_browser.py:347
 msgid "total space"
 msgstr "espaço total"
 
-#: thonny/base_file_browser.py:337
+#: thonny/base_file_browser.py:349
 msgid "used space"
 msgstr "espaço utilizado"
 
-#: thonny/base_file_browser.py:338
+#: thonny/base_file_browser.py:350
 msgid "free space"
 msgstr "espaço livre"
 
-#: thonny/base_file_browser.py:345
+#: thonny/base_file_browser.py:357
 msgid "Storage info"
 msgstr "Informação do armazenamento"
 
-#: thonny/plugins/commenting_indenting.py:163
+#: thonny/plugins/commenting_indenting.py:162
 msgid "Replace tabs with spaces"
 msgstr "Substituir tabulações por espaços"
 
@@ -1531,72 +1479,72 @@ msgstr "Destacar caracteres de tabulação"
 msgid "Indent with tab characters (not recommended for Python)"
 msgstr "Fazer recuo com caracteres de tabulação (não recomendado para Python)"
 
-#: thonny/base_file_browser.py:90 thonny/memory.py:63
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
 msgid "Name"
 msgstr "Nome"
 
-#: thonny/base_file_browser.py:94
+#: thonny/base_file_browser.py:96
 msgid "Size (bytes)"
 msgstr "Tamanho (bytes)"
 
-#: thonny/base_file_browser.py:855
+#: thonny/base_file_browser.py:879
 msgid "Enter name for new directory under\n"
 "%s"
 msgstr "Entre nome para novo diretório abaixo de\n"
 "%s"
 
-#: thonny/base_file_browser.py:878
+#: thonny/base_file_browser.py:902
 msgid "Nothing selected"
 msgstr "Nada foi selecionado"
 
-#: thonny/base_file_browser.py:878
+#: thonny/base_file_browser.py:902
 msgid "Select an item and try again!"
 msgstr "Selecione um item e tente novamente!"
 
-#: thonny/base_file_browser.py:1296
+#: thonny/base_file_browser.py:1329
 msgid "Open from %s"
 msgstr "Abrir a partir de %s"
 
-#: thonny/base_file_browser.py:1299
+#: thonny/base_file_browser.py:1332
 msgid "Save to %s"
 msgstr "Salvar para %s"
 
-#: thonny/base_file_browser.py:1311
+#: thonny/base_file_browser.py:1351
 msgid "File name:"
 msgstr "Nome de arquivo:"
 
-#: thonny/memory.py:64 thonny/plugins/object_inspector.py:539
-#: thonny/plugins/object_inspector.py:618
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
 msgid "Value ID"
 msgstr "ID de valor"
 
 #: thonny/memory.py:65 thonny/plugins/heap.py:23
-#: thonny/plugins/object_inspector.py:540
-#: thonny/plugins/object_inspector.py:619
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
 msgid "Value"
 msgstr "Valor"
 
-#: thonny/plugins/backend_config_page.py:257
+#: thonny/plugins/backend_config_page.py:272
 msgid "Save password"
 msgstr "Salvar senha"
 
-#: thonny/plugins/debugger.py:553
+#: thonny/plugins/debugger.py:557
 msgid "Function call at %s"
 msgstr "Chamada de função em %s"
 
-#: thonny/plugins/debugger.py:1003
+#: thonny/plugins/debugger.py:1006
 msgid "Local variables"
 msgstr "Variáveis locais"
 
-#: thonny/plugins/debugger.py:1035
+#: thonny/plugins/debugger.py:1038
 msgid "Function"
 msgstr "Função"
 
-#: thonny/plugins/debugger.py:1036
+#: thonny/plugins/debugger.py:1039
 msgid "Location"
 msgstr "Localização"
 
-#: thonny/plugins/debugger.py:1112
+#: thonny/plugins/debugger.py:1115
 msgid "If last command raised an exception then this view will show the stacktrace."
 msgstr "Se o último comando gerou uma exceção, então esta aba irá mostrar o rastreio da pilha."
 
@@ -1612,15 +1560,15 @@ msgstr "Dados"
 msgid "Attributes"
 msgstr "Atributos"
 
-#: thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:537
 msgid "Index"
 msgstr "Índice"
 
-#: thonny/plugins/object_inspector.py:616
+#: thonny/plugins/object_inspector.py:615
 msgid "Key ID"
 msgstr "ID da chave"
 
-#: thonny/plugins/object_inspector.py:617
+#: thonny/plugins/object_inspector.py:616
 msgid "Key"
 msgstr "Chave"
 
@@ -1630,15 +1578,15 @@ msgid "Back to\n"
 msgstr "Voltar para\n"
 "%s"
 
-#: thonny/plugins/micropython/mp_front.py:464
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port or WebREPL"
 msgstr "Porta ou WebREPL"
 
-#: thonny/plugins/micropython/mp_front.py:605
+#: thonny/plugins/micropython/mp_front.py:599
 msgid "Password"
 msgstr "Senha"
 
-#: thonny/plugins/debugger.py:961
+#: thonny/plugins/debugger.py:964
 msgid "Source code"
 msgstr "Código fonte"
 
@@ -1654,107 +1602,107 @@ msgstr "Marque caso os seletores de arquivo estejam aparecendo atrás da janela
 msgid "Environment variables (one KEY=VALUE per line)"
 msgstr "Variáveis de ambiente (uma CHAVE=VALOR por linha)"
 
-#: thonny/base_file_browser.py:700
+#: thonny/base_file_browser.py:722
 msgid "New file"
 msgstr "Novo arquivo"
 
-#: thonny/base_file_browser.py:718
+#: thonny/base_file_browser.py:740
 msgid "Rename"
 msgstr "Renomear"
 
-#: thonny/base_file_browser.py:904
+#: thonny/base_file_browser.py:928
 msgid "Rename '%s'"
 msgstr "Renomear '%s'"
 
-#: thonny/base_file_browser.py:904
+#: thonny/base_file_browser.py:928
 msgid "Enter new name"
 msgstr "Entre com novo nome"
 
-#: thonny/base_file_browser.py:992
+#: thonny/base_file_browser.py:1016
 msgid "Paste failed"
 msgstr "Colar falhou"
 
-#: thonny/base_file_browser.py:992
+#: thonny/base_file_browser.py:1016
 msgid "There are conflicting folders"
 msgstr "Existem diretórios conflitantes"
 
-#: thonny/base_file_browser.py:1114
+#: thonny/base_file_browser.py:1144
 msgid "File already exists"
 msgstr "Arquivo já existe"
 
-#: thonny/base_file_browser.py:1179
+#: thonny/base_file_browser.py:1212
 msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
 msgstr "Se isto é um arquivo texto, então você pode configurar para abri-lo no Thonny clicando com o botão da direita e selecionando 'Configurar ... arquivos'."
 
-#: thonny/editors.py:35
+#: thonny/editors.py:38
 msgid "Python files"
 msgstr "Arquivos do Python"
 
-#: thonny/editors.py:120 thonny/editors.py:193
+#: thonny/editors.py:123 thonny/editors.py:189
 msgid "<untitled>"
 msgstr "<sem título>"
 
-#: thonny/editors.py:155
+#: thonny/editors.py:150
 msgid "File is gone"
 msgstr "Arquivo não existe mais"
 
-#: thonny/editors.py:158
+#: thonny/editors.py:153
 msgid "Do you want to also close the editor?"
 msgstr "Você também quer fechar o Editor?"
 
-#: thonny/editors.py:170
+#: thonny/editors.py:169
 msgid "External modification"
 msgstr "Modificação externa"
 
-#: thonny/editors.py:173
+#: thonny/editors.py:172
 msgid "Do you want to discard current editor content and reload the file from disk?"
 msgstr "Você quer descartar o conteúdo atual do Editor e recarregar o arquivo do disco?"
 
-#: thonny/editors.py:572
+#: thonny/editors.py:588
 msgid "Python files usually have .py extension."
 msgstr "Arquivos do Python normalmente tem .py como extensão."
 
-#: thonny/editors.py:574
+#: thonny/editors.py:590
 msgid "Did you mean '%s'?"
 msgstr "Você quer dizer '%s'?"
 
-#: thonny/editors.py:729
+#: thonny/editors.py:759
 msgid "Move / rename..."
 msgstr "Mover / renomear..."
 
-#: thonny/editors.py:738
+#: thonny/editors.py:768
 msgid "Go to line..."
 msgstr "Ir para linha..."
 
-#: thonny/editors.py:973
+#: thonny/editors.py:1010
 msgid "Line number"
 msgstr "Número da linha"
 
-#: thonny/editors.py:1119
+#: thonny/editors.py:1156
 msgid "Do you want to save files before closing?"
-msgstr "Você quer gravar os arquivos antes de fechar?"
+msgstr "Você quer salvar os arquivos antes de fechar?"
 
-#: thonny/editors.py:1121
+#: thonny/editors.py:1158
 msgid "Do you want to save file before closing?"
-msgstr "Você quer gravar o arquivo antes de fechar?"
+msgstr "Você quer salvar o arquivo antes de fechar?"
 
-#: thonny/editors.py:1124
+#: thonny/editors.py:1161
 msgid "Save On Close"
 msgstr "Salvar ao fechar"
 
-#: thonny/misc_utils.py:513
+#: thonny/misc_utils.py:539
 msgid "Command not available"
 msgstr "Comando não disponível"
 
-#: thonny/misc_utils.py:514
+#: thonny/misc_utils.py:540
 msgid "This command is not available if Thonny is run via Flatpak"
 msgstr "Este comando não está disponível se o Thonny for executado por Flatpak"
 
-#: thonny/workbench.py:686 thonny/workbench.py:784
+#: thonny/workbench.py:700 thonny/workbench.py:799
 msgid "Support Ukraine"
 msgstr "Apoie a Ucrânia"
 
-#: thonny/plugins/backend_config_page.py:84
+#: thonny/plugins/backend_config_page.py:90
 msgid "Which kind of interpreter should Thonny use for running your code?"
 msgstr "Que tipo de interpretador o Thonny deve usar para executar o seu código?"
 
@@ -1782,7 +1730,7 @@ msgstr "Solicitar sugestões usando a tecla Tab no Editor"
 msgid "Request completions with Tab-key in Shell"
 msgstr "Solicitar sugestões usando a tecla Tab no Shell"
 
-#: thonny/plugins/goto_definition.py:58
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
 msgid "Problem"
 msgstr "Problema"
 
@@ -1792,89 +1740,249 @@ msgstr "Não foi possível encontrar definição"
 
 #: thonny/plugins/shell_config_page.py:17
 msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
-msgstr "Limpar Shell antes de iniciar novos processos (Executar, Depurar, Parar/Reiniciar, ...)"
+msgstr "Limpar Shell antes de iniciar novos processos (Executar, Depurar, Parar/reiniciar, ...)"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:169
+#: thonny/plugins/cpython_frontend/cp_front.py:196
 msgid "Thonny's Python"
 msgstr "Python do Thonny"
 
-#: thonny/plugins/micropython/mp_front.py:512
+#: thonny/plugins/micropython/mp_front.py:496
 msgid "Interrupt working program on connect"
 msgstr "Interromper programa em execução ao conectar"
 
-#: thonny/plugins/micropython/mp_front.py:519
+#: thonny/plugins/micropython/mp_front.py:504
 msgid "Synchronize device's real time clock"
 msgstr "Sincronizar relógio de tempo real do dispositivo"
 
-#: thonny/plugins/micropython/mp_front.py:525
+#: thonny/plugins/micropython/mp_front.py:510
 msgid "Use local time in real time clock"
 msgstr "Use a hora local no relógio de tempo real"
 
-#: thonny/plugins/micropython/mp_front.py:531
+#: thonny/plugins/micropython/mp_front.py:516
 msgid "Restart interpreter before running a script"
 msgstr "Reiniciar o interpretador antes de executar um programa"
 
-#: thonny/plugins/micropython/pip_gui.py:24
+#: thonny/plugins/micropython/pip_gui.py:26
 msgid "This doesn't look like MicroPython/CircuitPython package.\n"
 "Are you sure you want to install it?"
 msgstr "Isto não se parece com um pacote de MicroPython/CircuitPython.\n"
 "Você tem certeza que deseja instalá-lo?"
 
-#: thonny/base_file_browser.py:829
+#: thonny/base_file_browser.py:853
 msgid "Moving to Trash"
 msgstr "Movendo para a Lixeira"
 
-#: thonny/base_file_browser.py:830
+#: thonny/base_file_browser.py:854
 msgid "Move %s to Trash?"
 msgstr "Mover %s para a Lixeira?"
 
-#: thonny/base_file_browser.py:837
+#: thonny/base_file_browser.py:861
 msgid "Moving %s to Trash"
 msgstr "Movendo %s para a Lixeira"
 
-#: thonny/base_file_browser.py:649
+#: thonny/base_file_browser.py:666
 msgid "Open in default external app"
 msgstr "Abrir no aplicativo externo padrão"
 
-#: thonny/base_file_browser.py:1177
+#: thonny/base_file_browser.py:1210
 msgid "Opening remote files in external app is not supported."
 msgstr "Abrir arquivos remotos em um aplicativo externo não é suportado."
 
-#: thonny/base_file_browser.py:1184
+#: thonny/base_file_browser.py:1217
 msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
 msgstr "Se o arquivo precisa ser aberto em um aplicativo externo, então baixe-o para um diretório local e abra-o de lá!"
 
-#: thonny/editors.py:156
+#: thonny/editors.py:151
 msgid "Looks like '%s' was deleted or moved."
 msgstr "Parece que '%s' foi apagado ou movido."
 
-#: thonny/editors.py:171
+#: thonny/editors.py:170
 msgid "Looks like '%s' was modified outside of the editor."
 msgstr "Parece que '%s' foi modificado fora do Editor."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:228
+#: thonny/plugins/cpython_frontend/cp_front.py:256
 msgid "NB! Thonny only supports Python %s and later"
 msgstr "NB! O Thonny apenas suporta o Python %s e posterior"
 
-#: thonny/editors.py:973
+#: thonny/editors.py:1010
 msgid "Go to line"
 msgstr "Ir para linha"
 
-#: thonny/workbench.py:689
+#: thonny/workbench.py:703
 msgid "Support"
 msgstr "Apoie"
 
-#: thonny/editors.py:386 thonny/editors.py:401
+#: thonny/editors.py:399 thonny/editors.py:414
 msgid "Could not save"
 msgstr "Não foi possível salvar"
 
-#: thonny/plugins/general_config_page.py:129
+#: thonny/plugins/general_config_page.py:135
 msgid "Warning"
 msgstr "Advertência"
 
-#: thonny/plugins/general_config_page.py:130
+#: thonny/plugins/general_config_page.py:136
 msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
 "Did you intend this?"
 msgstr "Se você usar aspas no valor de uma variável de ambiente, as aspas se tornarão parte do valor.\n"
 "É isto que você deseja fazer?"
 
+#: thonny/workbench.py:870
+msgid "Install MicroPython"
+msgstr "Instalar MicroPython"
+
+#: thonny/workbench.py:874
+msgid "Install CircuitPython"
+msgstr "Instalar CircuitPython"
+
+#: thonny/plugins/backend_config_page.py:210
+msgid "Make uploaded shebang scripts executable"
+msgstr "Tornar executáveis os programas carregados"
+
+#: thonny/plugins/editor_config_page.py:91
+msgid "Make saved shebang scripts executable"
+msgstr "Tornar executáveis os programas salvos"
+
+#: thonny/plugins/files.py:224
+msgid "Activate virtual environment"
+msgstr "Ativar o ambiente virtual"
+
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
+msgid "Target"
+msgstr "Alvo"
+
+#: thonny/plugins/pythontutor.py:41
+msgid "Visualize current script at Python Tutor"
+msgstr "Visualizar programa atual no Python Tutor"
+
+#: thonny/plugins/todo_view.py:43
+msgid "Line"
+msgstr "Linha"
+
+#: thonny/plugins/todo_view.py:44
+msgid "Info"
+msgstr "Info"
+
+#: thonny/plugins/todo_view.py:121
+msgid "No line marked with #todo found"
+msgstr "Nenhuma linha com #todo encontrada"
+
+#: thonny/plugins/todo_view.py:141
+msgid "TODO"
+msgstr "TODO"
+
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
+msgid "Install or update %s"
+msgstr "Instalar ou atualizar %s"
+
+#: thonny/plugins/cpython_frontend/__init__.py:24
+msgid "Local Python 3"
+msgstr "Python 3 local"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:266
+msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+msgstr "Você pode ativar um ambiente virtual existente também através do menu de contexto do botão direito do mouse, na navegação de arquivos ao selecionar uma pasta de ambiente virtual, ou o arquivo 'pyveng.cfg' dentro."
+
+#: thonny/plugins/ev3/__init__.py:72
+msgid "Preparations (skip the VS Code part)"
+msgstr "Preparações (pular a parte do VS Code)"
+
+#: thonny/plugins/ev3/__init__.py:78
+msgid "Default password"
+msgstr "Senha padrão"
+
+#: thonny/running.py:392
+msgid "Information"
+msgstr "Informação"
+
+#: thonny/running.py:393
+msgid "For debugging the program must be saved first."
+msgstr "Para depurar o programa precisa ser salvo primeiro."
+
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr "%s não parece ser um arquivo de texto"
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr "Problema abrindo arquivo"
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr "Este arquivo parece ter problemas de codificação.\n"
+"\n"
+"Certifique-se de que está em UTF-8 ou que contém marcação da codificação adequada."
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr "Arquivo está aberto"
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr "Este arquivo já está aberto no Thonny.\n"
+"\n"
+"Se você quer salvar com este nome,\n"
+"primeiro feche o editor existente!"
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr "Erro de permissão"
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr "Parece que este arquivo ou pasta não pode ser escrito."
+
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr "O back-end não está pronto"
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr "Onde deve ser salvo?"
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr "Problema em potencial"
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr "Se você chamar o seu programa de '%s', você não será capaz de importar o módulo de biblioteca chamado '%s'"
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr "Você ainda deseja usar este nome para o seu programa?"
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr "Ocorreu erro de permissão ao tentar carregar %s"
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr "Tente abrir com Arquivo => Abrir."
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr "Erro de permissão"
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr "Permitir executar programas sem nome"
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
+msgstr ""
+
diff --git a/thonny/locale/pt_PT/LC_MESSAGES/thonny.mo b/thonny/locale/pt_PT/LC_MESSAGES/thonny.mo
index cd8d18a..9602351 100644
Binary files a/thonny/locale/pt_PT/LC_MESSAGES/thonny.mo and b/thonny/locale/pt_PT/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/register_updates.py b/thonny/locale/register_updates.py
new file mode 100644
index 0000000..02b73c7
--- /dev/null
+++ b/thonny/locale/register_updates.py
@@ -0,0 +1,54 @@
+import json
+import os.path
+
+import polib
+import pyperclip
+
+locale_dir = os.path.dirname(__file__)
+
+
+def register_locale(name: str) -> None:
+    print(f"Processing {name}")
+    po_path = os.path.join(locale_dir, name, "LC_MESSAGES", "thonny.po")
+    po = polib.pofile(po_path)
+
+    registered_path = os.path.join(locale_dir, name, "LC_MESSAGES", "registered.json")
+    if not os.path.exists(registered_path):
+        with open(registered_path, "w", encoding="utf-8") as fp:
+            fp.write("{}")
+
+    with open(registered_path, encoding="utf-8") as fp:
+        registered = json.load(fp)
+
+    new_registered = {}
+
+    review_messages = []
+
+    for entry in po:
+        if entry.msgstr and (
+            entry.msgid not in registered or registered[entry.msgid] != entry.msgstr
+        ):
+            msg = entry.msgstr.strip().replace("\n", " ")
+            if not msg.endswith("."):
+                msg = msg + "."
+
+            review_messages.append(msg)
+
+        if entry.msgstr:
+            new_registered[entry.msgid] = entry.msgstr
+
+    if review_messages:
+        print("\n".join(review_messages))
+        pyperclip.copy("\n".join(review_messages))
+
+        input(f"... Press ENTER to confirm {name}! ...")
+
+    with open(registered_path, "w", encoding="utf-8") as fp:
+        json.dump(new_registered, fp, sort_keys=True, indent=4, ensure_ascii=False)
+
+    print("--------------------------------------")
+
+
+for name in os.listdir(locale_dir):
+    if os.path.isdir(name):
+        register_locale(name)
diff --git a/thonny/locale/ro_RO/LC_MESSAGES/thonny.mo b/thonny/locale/ro_RO/LC_MESSAGES/thonny.mo
index c4cd7e6..0dce0fc 100644
Binary files a/thonny/locale/ro_RO/LC_MESSAGES/thonny.mo and b/thonny/locale/ro_RO/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/ru_RU/LC_MESSAGES/thonny.mo b/thonny/locale/ru_RU/LC_MESSAGES/thonny.mo
index dd4ef67..ed3d6d3 100644
Binary files a/thonny/locale/ru_RU/LC_MESSAGES/thonny.mo and b/thonny/locale/ru_RU/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/ru_RU/LC_MESSAGES/thonny.po b/thonny/locale/ru_RU/LC_MESSAGES/thonny.po
index 4126b78..49d97cf 100644
--- a/thonny/locale/ru_RU/LC_MESSAGES/thonny.po
+++ b/thonny/locale/ru_RU/LC_MESSAGES/thonny.po
@@ -7,71 +7,64 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: ru\n"
 
-#: thonny/workbench.py:355
+#: thonny/workbench.py:375
 msgid "File"
 msgstr "Файл"
 
-#: thonny/workbench.py:356
+#: thonny/workbench.py:376
 msgid "Edit"
 msgstr "Правка"
 
-#: thonny/workbench.py:357
+#: thonny/workbench.py:377
 msgid "View"
 msgstr "Вид"
 
-#: thonny/running.py:95 thonny/workbench.py:358
+#: thonny/running.py:161 thonny/workbench.py:378
 msgid "Run"
 msgstr "Выполнить"
 
-#: thonny/workbench.py:360
+#: thonny/workbench.py:379
 msgid "Tools"
 msgstr "Инструменты"
 
-#: thonny/plugins/help/__init__.py:68 thonny/workbench.py:361
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
 msgid "Help"
 msgstr "Помощь"
 
-#: thonny/workbench.py:522
-msgid "Alternative Python 3 interpreter or virtual environment"
-msgstr "Другой интепретатор Python 3 или виртуальное окружение"
-
-#: thonny/workbench.py:530
-msgid "A special virtual environment (deprecated)"
-msgstr "Особое виртуальное окружение (не рекомендуется)"
-
-#: thonny/workbench.py:568
+#: thonny/workbench.py:598
 msgid "Exit"
 msgstr "Выход"
 
-#: thonny/workbench.py:595
+#: thonny/workbench.py:625
 msgid "Decrease font size"
 msgstr "Уменьшить размер шрифта"
 
-#: thonny/workbench.py:607
+#: thonny/workbench.py:637
 msgid "Focus editor"
 msgstr "Перейти в редактор"
 
-#: thonny/workbench.py:616
+#. I noticed that recently "терминал" was changed to "оболочку". Is everybody happy with this? Should I include the updates in next Thonny version?
+#: thonny/workbench.py:646
 msgid "Focus shell"
 msgstr "Перейти в оболочку"
 
-#: thonny/workbench.py:627
+#: thonny/workbench.py:656
 msgid "Maximize view"
 msgstr "Развернуть"
 
-#: thonny/workbench.py:639
+#: thonny/workbench.py:668
 msgid "Full screen"
 msgstr "Полный экран"
 
-#: thonny/workbench.py:1250
+#: thonny/workbench.py:1467
 msgid "Program arguments"
 msgstr "Аргументы программы"
 
-#: thonny/plugins/about.py:25 thonny/plugins/about.py:157
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
 msgid "About Thonny"
 msgstr "О Thonny"
 
-#: thonny/plugins/about.py:77
+#: thonny/plugins/about.py:81
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -85,69 +78,65 @@ msgstr "Разработано в\n"
 "фонда разработки Raspbery Pi\n"
 "и компании Cybernetica"
 
-#: thonny/plugins/about.py:103
+#: thonny/plugins/about.py:101
 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"
-"лицензии МИТ\n"
+msgstr "Это ПО поставляется БЕЗ КАКИХ-ЛИБО \n"
+"ГАРАНТИЙНЫХ ОБЯЗАТЕЛЬСТВ!\n"
+"Это свободное ПО и вы можете свободно\n"
+"распространять его на определённых условиях,\n"
+"для подробностей смотрите \n"
 "https://opensource.org/licenses/MIT"
 
-#: thonny/plugins/about.py:146
+#: thonny/plugins/about.py:142
 msgid "Version history"
 msgstr "История версий"
 
-#: thonny/plugins/about.py:153
+#: thonny/plugins/about.py:149
 msgid "Report problems"
 msgstr "Сообщить о проблеме"
 
-#: thonny/plugins/assistant_config_page.py:15
+#: thonny/plugins/assistant_config_page.py:16
 msgid "Open Assistant automatically when program crashes with an exception"
 msgstr "Автоматически открывать окно Ассистента при сбое программы"
 
-#: thonny/plugins/assistant_config_page.py:21
+#: thonny/plugins/assistant_config_page.py:23
 msgid "Open Assistant automatically when it has warnings for your code"
-msgstr "Автоматически открывать окно Ассистента при обнаружении предупреждений в вашей программе"
+msgstr "Автоматически открывать окно Ассистента при обнаружении предупреждений в вашем коде"
 
-#: thonny/plugins/assistant_config_page.py:26
+#: thonny/plugins/assistant_config_page.py:30
 msgid "Perform selected Pylint checks"
 msgstr "Выполнить отмеченные проверки Pylint"
 
-#: thonny/plugins/assistant_config_page.py:29
+#: thonny/plugins/assistant_config_page.py:34
 msgid "Perform MyPy checks"
 msgstr "Выполнить проверки MyPy"
 
-#: thonny/plugins/assistant_config_page.py:31
+#: thonny/plugins/assistant_config_page.py:36
 msgid "Disabled checks (one id per line)"
 msgstr "Отключить проверки (один код на строку)"
 
-#: thonny/assistance.py:962 thonny/plugins/assistant_config_page.py:68
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "Ассистент"
 
-#: thonny/plugins/autocomplete.py:316
+#: thonny/plugins/autocomplete.py:529
 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 для запуска вашей программы?"
-
-#: thonny/plugins/backend_config_page.py:127
+#: thonny/plugins/backend_config_page.py:335
 msgid "Interpreter"
 msgstr "Интерпретатор"
 
-#: thonny/plugins/birdseye_frontend.py:32
+#: thonny/plugins/birdseye_frontend.py:55
 msgid "About Birdseye"
 msgstr "О Birdseye"
 
-#: thonny/plugins/birdseye_frontend.py:33
+#: thonny/plugins/birdseye_frontend.py:56
 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?"
@@ -155,529 +144,483 @@ msgstr "Birdseye — это отладчик Python, который требуе
 "\n"
 "Открыть страницу помощи для подробностей?"
 
-#: thonny/plugins/birdseye_frontend.py:60
+#: thonny/plugins/birdseye_frontend.py:84
 msgid "Debug current script (birdseye)"
-msgstr "Отладить текущий скрипт (birdseye)"
+msgstr "Отладить текущую программу (birdseye)"
 
-#: thonny/plugins/commenting_indenting.py:143
+#: thonny/plugins/commenting_indenting.py:171
 msgid "Toggle comment"
 msgstr "Переключить комментарий"
 
-#: thonny/plugins/commenting_indenting.py:153
+#: thonny/plugins/commenting_indenting.py:181
 msgid "Comment out"
 msgstr "Закомментировать"
 
-#: thonny/plugins/commenting_indenting.py:163
+#: thonny/plugins/commenting_indenting.py:191
 msgid "Uncomment"
 msgstr "Раскомментировать"
 
-#: thonny/plugins/common_editing_commands.py:20
+#: thonny/plugins/common_editing_commands.py:21
 msgid "Undo"
 msgstr "Вернуть"
 
-#: thonny/plugins/common_editing_commands.py:32
+#: thonny/plugins/common_editing_commands.py:33
 msgid "Redo"
 msgstr "Повторить"
 
-#: thonny/plugins/common_editing_commands.py:48 thonny/ui_utils.py:2176
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
 msgid "Cut"
 msgstr "Вырезать"
 
-#: thonny/plugins/common_editing_commands.py:60 thonny/ui_utils.py:2177
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
 msgid "Copy"
 msgstr "Скопировать"
 
-#: thonny/plugins/common_editing_commands.py:72 thonny/ui_utils.py:2178
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
 msgid "Paste"
 msgstr "Вставить"
 
-#: thonny/plugins/common_editing_commands.py:84 thonny/plugins/debugger.py:124
+#: thonny/plugins/common_editing_commands.py:85 thonny/plugins/debugger.py:152
 msgid "Select all"
 msgstr "Выделить всё"
 
-#: thonny/plugins/debugger.py:117 thonny/plugins/debugger.py:1276
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
 msgid "Run to cursor"
 msgstr "Выполнить до курсора"
 
-#: thonny/plugins/debugger.py:863
+#: thonny/plugins/debugger.py:985
 msgid "Can't close yet"
 msgstr "Пока невозможно закрыть"
 
-#: thonny/plugins/debugger.py:864
+#: thonny/plugins/debugger.py:986
 msgid "Use \"Stop\" command if you want to cancel debugging"
-msgstr "Для прекращения отладки используйте «Стоп»"
+msgstr "Для прекращения отладки используйте команду \"Стоп\""
 
-#: thonny/plugins/dock_user_windows_frontend.py:27
+#: thonny/plugins/dock_user_windows_frontend.py:28
 msgid "Dock user windows"
 msgstr "Прикрепить пользовательское окно"
 
-#: thonny/plugins/editor_config_page.py:14
+#: thonny/plugins/editor_config_page.py:20
 msgid "Highlight matching names"
 msgstr "Подсвечивать совпадающие имена"
 
-#: thonny/plugins/editor_config_page.py:20
+#: thonny/plugins/editor_config_page.py:26
 msgid "Highlight local variables"
 msgstr "Подсвечивать локальные переменные"
 
-#: thonny/plugins/editor_config_page.py:25
+#: thonny/plugins/editor_config_page.py:31
 msgid "Highlight parentheses"
 msgstr "Подсвечивать парные скобки"
 
-#: thonny/plugins/editor_config_page.py:26
+#: thonny/plugins/editor_config_page.py:32
 msgid "Highlight syntax elements"
 msgstr "Подсвечивать синтаксические элементы"
 
-#: thonny/plugins/editor_config_page.py:29
+#: thonny/plugins/editor_config_page.py:36
 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 "Разрешить использование «Tab» для автозавершения в редакторе"
-
-#: thonny/plugins/editor_config_page.py:40
-msgid "Allow code completion with Tab-key in Shell"
-msgstr "Разрешить использование «Tab» для автозавершения в оболочке"
-
-#: thonny/plugins/editor_config_page.py:44
+#: thonny/plugins/editor_config_page.py:73
 msgid "Show line numbers"
 msgstr "Показывать номера строк"
 
-#: thonny/plugins/editor_config_page.py:47
+#: thonny/plugins/editor_config_page.py:76
 msgid "Recommended maximum line length\n"
 "(Set to 0 to turn off margin line)"
-msgstr "Рекомендуемая максимальна длина строки (укажите 0 для отключения линейки)"
+msgstr "Рекомендуемая максимальная длина строки\n"
+"(Укажите 0 для отключения линии поля)"
 
-#: thonny/plugins/editor_config_page.py:68
+#: thonny/plugins/editor_config_page.py:104
 msgid "Editor"
 msgstr "Редактор"
 
-#: thonny/plugins/event_logging.py:197
+#: thonny/plugins/event_logging.py:207
 msgid "Export usage logs..."
 msgstr "Экспорт журнала использования..."
 
-#: thonny/plugins/event_view.py:38
+#: thonny/plugins/event_view.py:39
 msgid "Events"
 msgstr "События"
 
-#: thonny/plugins/files.py:307
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "Файлы"
 
-#: thonny/plugins/find_replace.py:56 thonny/plugins/find_replace.py:412
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
 msgid "Find & Replace"
 msgstr "Найти и заменить"
 
-#: thonny/plugins/find_replace.py:62
+#: thonny/plugins/find_replace.py:66
 msgid "Find:"
 msgstr "Найти:"
 
-#: thonny/plugins/find_replace.py:73
+#: thonny/plugins/find_replace.py:90
 msgid "Replace with:"
 msgstr "Заменить на:"
 
-#: thonny/plugins/find_replace.py:91
+#: thonny/plugins/find_replace.py:108
 msgid "Case sensitive"
 msgstr "С учётом регистра"
 
-#: thonny/plugins/find_replace.py:98
+#: thonny/plugins/find_replace.py:115
 msgid "Up"
 msgstr "Вверх"
 
-#: thonny/plugins/find_replace.py:102
+#: thonny/plugins/find_replace.py:119
 msgid "Down"
 msgstr "Вниз"
 
-#: thonny/plugins/find_replace.py:111
+#: thonny/plugins/find_replace.py:128
 msgid "Find"
 msgstr "Найти"
 
-#: thonny/plugins/find_replace.py:121
+#: thonny/plugins/find_replace.py:138
 msgid "Replace"
 msgstr "Заменить"
 
-#: thonny/plugins/find_replace.py:129
+#: thonny/plugins/find_replace.py:146
 msgid "Replace+Find"
 msgstr "Заменить и найти"
 
-#: thonny/plugins/find_replace.py:138
+#: thonny/plugins/find_replace.py:156
 msgid "Replace all"
 msgstr "Заменить всё"
 
-#: thonny/plugins/find_replace.py:232
+#: thonny/plugins/find_replace.py:254
 msgid "Enter string to be replaced."
-msgstr "Введите строку для замены"
+msgstr "Введите строку для замены."
 
-#: thonny/plugins/find_replace.py:316
+#: thonny/plugins/find_replace.py:339
 msgid "The specified text was not found!"
 msgstr "Указанный текст не найден!"
 
-#: thonny/plugins/general_config_page.py:13
+#: thonny/plugins/general_config_page.py:15
 msgid "Allow only single Thonny instance"
 msgstr "Разрешить запускать только один экземпляр Thonny"
 
-#: thonny/plugins/general_config_page.py:20
+#: thonny/plugins/general_config_page.py:22
 msgid "Reopen all files from previous session"
 msgstr "Переоткрыть все файлы из предыдущего сеанса"
 
-#: thonny/plugins/general_config_page.py:26
+#: thonny/plugins/general_config_page.py:37
 msgid "Disable notification sound"
 msgstr "Отключить звук оповещений"
 
-#: thonny/plugins/general_config_page.py:75
+#: thonny/plugins/general_config_page.py:86
 msgid "Font scaling mode"
 msgstr "Режим масштабирования шрифта"
 
-#: thonny/plugins/heap.py:35
+#: thonny/plugins/heap.py:37
 msgid "Heap mode is on.\n"
 "Close Heap view to turn it off."
 msgstr "Режим кучи включён.\n"
 "Закройте окно кучи для отключения."
 
-#: thonny/plugins/heap.py:83
+#: thonny/plugins/heap.py:86
 msgid "Heap"
 msgstr "Куча"
 
-#: thonny/plugins/general_config_page.py:42
+#: thonny/plugins/general_config_page.py:53
 msgid "Language"
-msgstr "Язык (Language)"
+msgstr "Язык"
 
-#: thonny/plugins/notes.py:33
+#: 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"
+msgstr "Это окно предназначено для ваших рабочих заметок - инструкций по выполнению заданий, фрагментов кода и прочего.\n"
 "\n"
-"Всё, что вы здесь напишете, будет автоматически сохраняться и загружаться при перезапуске Thonny.\n"
+"Всё содержимое будет автоматически сохраняться и загружаться при перезапуске Thonny.\n"
 "\n"
-"Этот текст можно смело удалить и начать писать свои собственные заметки."
+"Не стесняйтесь удалить этот текст, чтобы освободить место для собственных заметок."
 
-#: thonny/plugins/notes.py:61
+#: thonny/plugins/notes.py:63
 msgid "Notes"
 msgstr "Заметки"
 
-#: thonny/plugins/object_inspector.py:108
+#: thonny/plugins/object_inspector.py:116
 msgid "Previous object"
 msgstr "Предыдущий объект"
 
-#: thonny/plugins/object_inspector.py:111
+#: thonny/plugins/object_inspector.py:119
 msgid "Next object"
 msgstr "Следующий объект"
 
-#: thonny/plugins/object_inspector.py:601
+#: thonny/plugins/object_inspector.py:732
 msgid "Object inspector"
 msgstr "Инспектор объектов"
 
-#: thonny/plugins/outline.py:137
+#: thonny/plugins/outline.py:148
 msgid "Outline"
 msgstr "План"
 
-#: thonny/plugins/pgzero_frontend.py:26
+#: 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:188 thonny/plugins/pip_gui.py:190
+#: thonny/plugins/pip_gui.py:80
 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
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
 msgid "Close"
 msgstr "Закрыть"
 
-#: thonny/plugins/pip_gui.py:382
+#: thonny/plugins/pip_gui.py:397
 msgid "Click "
 msgstr "Щёлкните "
 
-#: thonny/plugins/pip_gui.py:383 thonny/plugins/pip_gui.py:393
+#: thonny/plugins/pip_gui.py:398 thonny/plugins/pip_gui.py:409
 msgid "here"
 msgstr "здесь"
 
-#: thonny/plugins/pip_gui.py:181 thonny/plugins/pip_gui.py:478
+#: thonny/plugins/pip_gui.py:77
 msgid "Upgrade"
 msgstr "Обновить"
 
-#: thonny/plugins/microbit/__init__.py:123 thonny/plugins/pip_gui.py:483
-#: thonny/plugins/pip_gui.py:1064
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
 msgid "Install"
 msgstr "Установить"
 
-#: thonny/plugins/pip_gui.py:505
+#: thonny/plugins/pip_gui.py:570
 msgid "Could not find the package from PyPI."
-msgstr "Не удалось найти пакет в PyPI"
-
-#: thonny/plugins/pip_gui.py:515
-msgid "exact package name"
-msgstr "точное название пакета"
+msgstr "Не удалось найти пакет в PyPI."
 
-#: thonny/plugins/pip_gui.py:533
+#: thonny/plugins/pip_gui.py:592
 msgid "Latest stable version"
 msgstr "Последняя стабильная версия"
 
-#: thonny/plugins/pip_gui.py:535
+#: thonny/plugins/pip_gui.py:594
 msgid "Latest version"
 msgstr "Последняя версия"
 
-#: thonny/plugins/pip_gui.py:536
+#: thonny/plugins/pip_gui.py:596
 msgid "Summary"
 msgstr "Сводка"
 
-#: thonny/plugins/pip_gui.py:537
+#: thonny/plugins/pip_gui.py:598
 msgid "Author"
 msgstr "Автор"
 
-#: thonny/plugins/pip_gui.py:538
+#: thonny/plugins/pip_gui.py:602
 msgid "Homepage"
 msgstr "Домашняя страница"
 
-#: thonny/plugins/pip_gui.py:540
+#: thonny/plugins/pip_gui.py:604
 msgid "Bugtracker"
 msgstr "Багтрекер"
 
-#: thonny/plugins/pip_gui.py:542
+#: thonny/plugins/pip_gui.py:606
 msgid "Documentation"
 msgstr "Документация"
 
-#: thonny/plugins/pip_gui.py:544
+#: thonny/plugins/pip_gui.py:608
 msgid "PyPI page"
 msgstr "Страница PyPI"
 
-#: thonny/plugins/pip_gui.py:548
+#: thonny/plugins/pip_gui.py:648
 msgid "Requires"
 msgstr "Зависимости"
 
-#: thonny/plugins/pip_gui.py:614
+#: thonny/plugins/pip_gui.py:802
 msgid "Really uninstall?"
 msgstr "Действительно удалить?"
 
-#: thonny/plugins/pip_gui.py:619
+#: thonny/plugins/pip_gui.py:807
 msgid "Are you sure you want to uninstall it?"
 msgstr "Вы уверены, что хотите удалить это?"
 
-#: thonny/plugins/variables.py:19
+#: thonny/plugins/variables.py:22
 msgid "Back to\n"
 "current frame"
 msgstr "Вернуться в \n"
 "текущее окно"
 
-#: thonny/plugins/variables.py:131
+#: thonny/plugins/variables.py:80 thonny/plugins/variables.py:82
+#: thonny/plugins/variables.py:145
 msgid "Variables"
 msgstr "Переменные"
 
-#: thonny/base_file_browser.py:30
+#: thonny/base_file_browser.py:1576
 msgid "This computer"
 msgstr "Этот компьютер"
 
-#: thonny/base_file_browser.py:568
+#: thonny/base_file_browser.py:648
 msgid "Refresh"
 msgstr "Обновить"
 
-#: thonny/base_file_browser.py:572
+#: thonny/base_file_browser.py:657
 msgid "Focus into"
 msgstr "Перейти в"
 
-#: thonny/base_file_browser.py:1001
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
 msgid "Error"
 msgstr "Ошибка"
 
-#: thonny/base_file_browser.py:1001
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
 msgid "You need to select a file!"
-msgstr "Вам нужно выбрать файл!"
+msgstr "Необходимо выбрать файл!"
 
-#: thonny/base_file_browser.py:1005
+#: thonny/base_file_browser.py:1427
 msgid "Overwrite?"
 msgstr "Перезаписать?"
 
-#: thonny/base_file_browser.py:1005
+#: thonny/base_file_browser.py:1427
 msgid "Do you want to overwrite '%s' ?"
 msgstr "Хотите перезаписать '%s' ?"
 
-#: thonny/code.py:513 thonny/code.py:515
+#: thonny/editors.py:658 thonny/editors.py:660
 msgid "New"
-msgstr "Новое"
+msgstr "Новый"
 
-#: thonny/code.py:526
+#: thonny/editors.py:671
 msgid "Open..."
 msgstr "Открыть..."
 
-#: thonny/code.py:528
+#: thonny/editors.py:673
 msgid "Load"
 msgstr "Загрузить"
 
-#: thonny/code.py:537
+#: thonny/editors.py:682
 msgid "Recent files"
 msgstr "Недавние файлы"
 
-#: thonny/code.py:559 thonny/ui_utils.py:369
+#: thonny/editors.py:704 thonny/ui_utils.py:498
 msgid "Close all"
 msgstr "Закрыть всё"
 
-#: thonny/code.py:569 thonny/code.py:571
+#: thonny/editors.py:714 thonny/editors.py:716
 msgid "Save"
 msgstr "Сохранить"
 
-#: thonny/code.py:583
+#: thonny/editors.py:739
 msgid "Save as..."
 msgstr "Сохранить как..."
 
-#: thonny/code.py:594
+#: thonny/editors.py:750
 msgid "Save copy..."
 msgstr "Сохранить копию..."
 
-#: thonny/code.py:603
-msgid "Rename..."
-msgstr "Переименовать..."
-
-#: thonny/config_ui.py:17
+#: thonny/config_ui.py:18
 msgid "Thonny options"
 msgstr "Параметры Thonny"
 
-#: thonny/running.py:94
+#: thonny/running.py:160
 msgid "Run current script"
-msgstr "Запустить текущий скрипт"
+msgstr "Запустить текущую программу"
 
-#: thonny/running.py:125
+#: thonny/running.py:191
 msgid "Run current script in terminal"
-msgstr "Запустить текущий скрипт в терминале"
+msgstr "Запустить текущую программу в терминале"
 
-#: thonny/running.py:138
+#: thonny/running.py:204
 msgid "Stop/Restart backend"
-msgstr "Остановить и перезапустить бэкенд"
+msgstr "Остановить/перезапустить бэкенд"
 
-#: thonny/running.py:139
+#: thonny/running.py:205
 msgid "Stop"
 msgstr "Остановить"
 
-#: thonny/running.py:150
+#: thonny/running.py:216
 msgid "Interrupt execution"
 msgstr "Прервать выполнение"
 
-#: thonny/running.py:161
+#: thonny/running.py:229
 msgid "Send EOF / Soft reboot"
-msgstr "Послать EOF / программная перезагрузка"
+msgstr "Послать EOF / Мягкая перезагрузка"
 
-#: thonny/running.py:172
+#: thonny/running.py:240
 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 "исполняемый модуль python"
-
-#: thonny/running_config_page.py:47
-msgid "NB! Thonny only supports Python 3.5 and later"
-msgstr "NB! 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/running_config_page.py:74
+#: thonny/plugins/cpython_frontend/cp_front.py:295
 msgid "Python interpreters"
 msgstr "Интерпретаторы Python"
 
-#: thonny/plugins/pip_gui.py:657 thonny/plugins/pip_gui.py:669
-#: thonny/running_config_page.py:75
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
 msgid "all files"
 msgstr "все файлы"
 
-#: thonny/running_config_page.py:89
+#: thonny/plugins/cpython_frontend/cp_front.py:324
 msgid "Select empty directory for new virtual environment"
 msgstr "Выбрать пустой каталог для нового виртуального окружения"
 
-#: thonny/running_config_page.py:96
+#: thonny/plugins/cpython_frontend/cp_front.py:331
 msgid "Bad directory"
 msgstr "Неправильный каталог"
 
-#: thonny/running_config_page.py:97
+#: thonny/plugins/cpython_frontend/cp_front.py:332
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "Выбранный каталог не пустой.\n"
-"Выбрать другой или отменить."
+"Выберите другой или отмените."
 
-#: thonny/running_config_page.py:112
+#: thonny/plugins/cpython_frontend/cp_front.py:349
 msgid "Creating virtual environment"
 msgstr "Создать виртуальное окружение"
 
-#: thonny/shell.py:72
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "Очистить оболочку"
 
-#: thonny/shell.py:126
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "Плотер"
 
-#: thonny/shell.py:245
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "Очистить"
 
-#: thonny/shell.py:258
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "Показать Плоттер"
 
-#: thonny/shell.py:1389
+#: thonny/shell.py:1660
 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:1400
+#: thonny/shell.py:1671
 msgid "Wrap text (may be slow)"
 msgstr "Переносить строки (может замедлять работу)"
 
-#: thonny/shell.py:1425 thonny/ui_utils.py:1639
+#: thonny/ui_utils.py:1879
 msgid "Copy to clipboard"
-msgstr "Копировать в буффер"
-
-#: thonny/shell.py:1431
-msgid "Expand in Shell"
-msgstr "Развернуть в оболочке"
+msgstr "Копировать в буфер"
 
-#: thonny/shell.py:1442
+#: thonny/shell.py:1713
 msgid "Squeezed text (%d characters)"
 msgstr "Пропущенный текст (%d символов)"
 
-#: thonny/shell.py:1611
+#: thonny/shell.py:1883
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
-msgstr "Плоттер показывает серии чисел, напечатанных в оболочке"
+msgstr "Плоттер показывает серии\n"
+"чисел, напечатанных в оболочке."
 
-#: thonny/shell.py:1613
+#: thonny/shell.py:1885
 msgid "See Help for details."
-msgstr "Смотрите Помощь для подробностей"
+msgstr "Смотрите Помощь для подробностей."
 
-#: thonny/ui_utils.py:368
+#: thonny/ui_utils.py:497
 msgid "Close others"
 msgstr "Закрыть остальные"
 
-#: thonny/ui_utils.py:1499
+#: thonny/ui_utils.py:1734
 msgid "Copying"
 msgstr "Копирование"
 
-#: thonny/ui_utils.py:1502
+#: thonny/ui_utils.py:1737
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -687,467 +630,419 @@ msgstr "Копирование\n"
 "в\n"
 "  %s"
 
-#: 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
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
 msgid "Cancel"
 msgstr "Отмена"
 
-#: thonny/config_ui.py:30 thonny/ui_utils.py:1764
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
 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
+#: thonny/ui_utils.py:2345
 msgid "Select All"
 msgstr "Выбрать Всё"
 
-#: thonny/plugins/shell_config_page.py:61 thonny/workbench.py:162
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:164
 msgid "Shell"
 msgstr "Оболочка"
 
-#: thonny/workbench.py:512
-msgid "The same interpreter which runs Thonny (default)"
-msgstr "Тот же интерпретатор, что и у Thonny (по умолчанию)"
-
-#: thonny/workbench.py:531
-msgid "This virtual environment is automatically maintained by Thonny.\n"
-""
-msgstr "Это виртуальное окружение автоматически поддерживается Thonny"
-
-#: thonny/workbench.py:532
-msgid "Location: "
-msgstr "Расположение: "
-
-#: thonny/workbench.py:578
+#: thonny/workbench.py:608
 msgid "Options..."
 msgstr "Параметры..."
 
-#: thonny/workbench.py:585
+#: thonny/workbench.py:615
 msgid "Increase font size"
 msgstr "Увеличить размер шрифта"
 
-#: thonny/workbench.py:650
+#: thonny/workbench.py:679
 msgid "Change font size"
 msgstr "Изменить размер шрифта"
 
-#: thonny/workbench.py:651
+#: thonny/workbench.py:680
 msgid "Zoom"
-msgstr "Приблизить"
+msgstr "Увеличить"
 
-#: thonny/workbench.py:660
+#: thonny/workbench.py:689
 msgid "Exit Thonny"
 msgstr "Выйти из Thonny"
 
-#: thonny/workbench.py:663
+#: thonny/workbench.py:692
 msgid "Quit"
 msgstr "Выйти"
 
-#: thonny/workbench.py:1054 thonny/workbench.py:1062
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
 msgid "Overwriting theme '%s'"
-msgstr "Перезаписать тему «%s»"
+msgstr "Перезаписать тему '%s'"
 
-#: thonny/workbench.py:1221
+#: thonny/workbench.py:1438
 msgid "Program arguments:"
-msgstr "Параметры программы:"
+msgstr "Аргументы программы:"
 
-#: thonny/workbench.py:1275
+#: thonny/workbench.py:1492
 msgid "Regular mode"
 msgstr "Обычный режим"
 
-#: thonny/workbench.py:1276
+#: thonny/workbench.py:1493
 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:209
+#: thonny/plugins/ast_view.py:211
 msgid "Program tree"
 msgstr "Дерево программы"
 
-#: thonny/plugins/backend_config_page.py:130
-msgid "Select interpreter"
-msgstr "Выберите интерпретатор"
-
-#: thonny/plugins/debugger.py:1162
+#: thonny/plugins/debugger.py:1284
 msgid "Resume"
 msgstr "Продолжить"
 
-#: thonny/plugins/debugger.py:1174
+#: thonny/plugins/debugger.py:1300
 msgid "Run / resume"
 msgstr "Запустить / продолжить"
 
-#: thonny/plugins/debugger.py:1189
+#: thonny/plugins/debugger.py:1315
 msgid "Debug current script"
 msgstr "Отладить текущую программу"
 
-#: thonny/plugins/debugger.py:1191
+#: thonny/plugins/debugger.py:1317
 msgid "Debug"
 msgstr "Отладить"
 
-#: thonny/plugins/debugger.py:1202
+#: thonny/plugins/debugger.py:1328
 msgid "Debug current script (nicer)"
 msgstr "Отладить текущую программу (лучше)"
 
-#: thonny/plugins/debugger.py:1214
+#: thonny/plugins/debugger.py:1340
 msgid "Debug current script (faster)"
 msgstr "Отладить текущую программу (быстрее)"
 
-#: thonny/plugins/debugger.py:1225
+#: thonny/plugins/debugger.py:1351
 msgid "Step over"
 msgstr "Перепрыгнуть"
 
-#: thonny/plugins/debugger.py:1227
+#: thonny/plugins/debugger.py:1353
 msgid "Over"
 msgstr "Через"
 
-#: thonny/plugins/debugger.py:1238
+#: thonny/plugins/debugger.py:1364
 msgid "Step into"
 msgstr "Зайти"
 
-#: thonny/plugins/debugger.py:1240
+#: thonny/plugins/debugger.py:1366
 msgid "Into"
 msgstr "В"
 
-#: thonny/plugins/debugger.py:1251
+#: thonny/plugins/debugger.py:1377
 msgid "Step out"
 msgstr "Выйти"
 
-#: thonny/plugins/debugger.py:1253
+#: thonny/plugins/debugger.py:1379
 msgid "Out"
 msgstr "Из"
 
-#: thonny/plugins/debugger.py:1288
+#: thonny/plugins/debugger.py:1414
 msgid "Step back"
 msgstr "Шаг назад"
 
-#: thonny/plugins/debugger.py:1290
+#: thonny/plugins/debugger.py:1416
 msgid "Back"
 msgstr "Назад"
 
-#: thonny/plugins/debugger.py:1296
+#: thonny/plugins/debugger.py:1422
 msgid "Stack"
 msgstr "Стек"
 
-#: thonny/plugins/debugger.py:1297
+#: thonny/plugins/debugger.py:1423
 msgid "Exception"
 msgstr "Исключение"
 
-#: thonny/plugins/general_config_page.py:16
+#: thonny/plugins/general_config_page.py:18
 msgid "Log program usage events"
 msgstr "Записывать использование программы в журнал"
 
-#: thonny/plugins/general_config_page.py:32
+#: thonny/plugins/general_config_page.py:43
 msgid "Debug mode (provides more detailed diagnostic logs)"
 msgstr "Режим отладки (предоставляет более подробную информацию)"
 
-#: thonny/plugins/general_config_page.py:56
+#: thonny/plugins/general_config_page.py:67
 msgid "UI mode"
 msgstr "Режим пользовательского интерфейса (ПИ)"
 
-#: thonny/plugins/general_config_page.py:69
+#: thonny/plugins/general_config_page.py:80
 msgid "UI scaling factor"
 msgstr "Коэффициент масштабирования ПИ"
 
-#: thonny/plugins/general_config_page.py:88
+#: thonny/plugins/general_config_page.py:114
 msgid "NB! Restart Thonny after changing these options!"
 msgstr "NB! Перезапустите Thonny после изменения этих параметров!"
 
-#: thonny/plugins/general_config_page.py:102
+#: thonny/plugins/general_config_page.py:148
 msgid "General"
 msgstr "Общие"
 
-#: thonny/plugins/pip_gui.py:108
+#: thonny/plugins/pip_gui.py:142
 msgid "INSTALL"
 msgstr "УСТАНОВИТЬ"
 
-#: thonny/plugins/pip_gui.py:352
+#: thonny/plugins/pip_gui.py:367
 msgid "Browse the packages"
 msgstr "Просмотр пакетов"
 
-#: thonny/plugins/pip_gui.py:355
+#: thonny/plugins/pip_gui.py:370
 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:363
+#: thonny/plugins/pip_gui.py:378
 msgid "Packages' directory"
 msgstr "Каталог пакетов"
 
-#: thonny/plugins/pip_gui.py:368
+#: thonny/plugins/pip_gui.py:382
 msgid "Install from PyPI"
-msgstr "Установить с PyPI"
+msgstr "Установить из PyPI"
 
 #. мб не правильно...
-#: thonny/plugins/pip_gui.py:371
+#: thonny/plugins/pip_gui.py:385
 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 Package Index. Начните с ввода имени пакета в окне поиска выше и нажмите ENTER."
 
-#: thonny/plugins/pip_gui.py:387
+#: thonny/plugins/pip_gui.py:402
 msgid "to locate requirements.txt file and install the packages specified in it."
-msgstr "для указания файла requirements.txt и установки перечисленных в нём пакетов"
+msgstr "для указания файла requirements.txt и установки перечисленных в нём пакетов."
 
-#: thonny/plugins/pip_gui.py:392
+#: thonny/plugins/pip_gui.py:408
 msgid "Click"
-msgstr "Клик"
+msgstr "Нажмите"
 
-#: thonny/plugins/pip_gui.py:397
+#: thonny/plugins/pip_gui.py:413
 msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
-msgstr "для указания и установки пакета из файла (обычно с расширением .whl, .tar.gz или .zip).\n"
-""
+msgstr "для указания и установки пакета из файла (обычно с расширением .whl, .tar.gz или .zip)."
 
-#: thonny/plugins/pip_gui.py:403
+#: thonny/plugins/pip_gui.py:420
 msgid "Upgrade or uninstall"
 msgstr "Обновить или удалить"
 
-#: thonny/plugins/pip_gui.py:405
+#: thonny/plugins/pip_gui.py:422
 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
+#: thonny/plugins/pip_gui.py:430
 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
 msgstr "В этом окне перечислены все доступные пакеты, но доступны для обновления и удаления только пакеты из"
 
-#: thonny/plugins/pip_gui.py:431
+#: thonny/plugins/pip_gui.py:440
 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
+#: thonny/plugins/pip_gui.py:493
 msgid "Installed version:"
 msgstr "Установленная версия:"
 
-#: thonny/plugins/pip_gui.py:458
+#: thonny/plugins/pip_gui.py:495
 msgid "Installed to:"
 msgstr "Установлено в:"
 
-#: thonny/plugins/pip_gui.py:510
+#: thonny/plugins/pip_gui.py:573
 msgid "Please check your spelling!"
 msgstr "Проверьте правильность написания!"
 
-#: thonny/plugins/pip_gui.py:512
-msgid "You need to enter"
-msgstr "Необходимо ввести"
-
-#: thonny/plugins/pip_gui.py:520
+#: thonny/plugins/pip_gui.py:577
 msgid "Could not find the package info from PyPI."
-msgstr "Поиск этого пакета в PyPI не дал результатов."
+msgstr "Не удалось найти информацию о пакете в PyPI."
 
-#: thonny/plugins/pip_gui.py:522 thonny/plugins/pip_gui.py:1120
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
 msgid "Error code:"
 msgstr "Код ошибки:"
 
-#: thonny/plugins/pip_gui.py:581
+#: thonny/plugins/pip_gui.py:748
 msgid "Can't find package name from the list:"
 msgstr "Имя пакета не найдено в списке:"
 
-#: thonny/plugins/pip_gui.py:615
+#: thonny/plugins/pip_gui.py:803
 msgid "Package '{}' is required for installing and uninstalling other packages."
-msgstr "Пакет «{}» необходим для установки и удаления других пакетов."
+msgstr "Пакет '{}' необходим для установки и удаления других пакетов."
 
-#: thonny/plugins/pip_gui.py:657
+#: thonny/plugins/pip_gui.py:848
 msgid "Package"
 msgstr "Пакет"
 
-#: thonny/plugins/pip_gui.py:757
+#: thonny/plugins/pip_gui.py:960
 msgid "Manage packages for %s"
 msgstr "Управление пакетами для %s"
 
-#: thonny/plugins/pip_gui.py:813
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
 msgid "Confirmation"
 msgstr "Подтверждение"
 
-#: thonny/plugins/pip_gui.py:814
+#: thonny/plugins/pip_gui.py:1035
 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. Если вы хотите установить плагин для Thonny, тогда используйте «Инструменты → Управление плагинами...»\n"
+msgstr "Похоже, вы хотите установить пакет, относящийся к Thonny. \n"
+"Если вы хотите установить плагин для Thonny, \n"
+"тогда используйте 'Инструменты → Управление плагинами...'\n"
 "\n"
 "Вы уверены, что хотите установить %s для бэкенда?"
 
-#: thonny/plugins/pip_gui.py:912
+#: thonny/plugins/pip_gui.py:1141
 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! Может быть доступной другая версия, совместимая с текущей версией Thonny. Щёлкните кнопку «...» чтобы выбрать версию для установки."
+msgstr "NB! Может быть доступной другая версия, совместимая с текущей версией Thonny. Щёлкните кнопку '...' чтобы выбрать версию для установки."
 
-#: thonny/plugins/pip_gui.py:920
+#: thonny/plugins/pip_gui.py:1149
 msgid "Thonny plugin without requirements"
 msgstr "Плагины Thonny без зависимостей"
 
-#: 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 (в ней не указана версия Thonny).\n"
-"\n"
-"Если вы действительно этого хотите, тогда установите плагин из командной строки."
-
-#: thonny/plugins/pip_gui.py:935
+#: thonny/plugins/pip_gui.py:1165
 msgid "Unsuitable requirements"
 msgstr "Неподходящие зависимости"
 
-#: thonny/plugins/pip_gui.py:936
+#: thonny/plugins/pip_gui.py:1166
 msgid "This package requires different Thonny version:"
-msgstr "Этот пакет требует другой версии Thonny:"
+msgstr "Этот пакет требует другую версию Thonny:"
 
-#: thonny/plugins/pip_gui.py:940
+#: thonny/plugins/pip_gui.py:1170
 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 будет использовать такой же интерпретатор, таким образом оба способа будут управлять одним и тем же набором пакетов.)"
-
-#: thonny/plugins/pip_gui.py:990
+#: thonny/plugins/pip_gui.py:1207
 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
 msgstr "NB! Нужно перезапустить Thonny после установки, обновления или удаления плагина."
 
-#: thonny/plugins/pip_gui.py:1000
+#: thonny/plugins/pip_gui.py:1217
 msgid "Thonny plug-ins"
 msgstr "Плагины Thonny"
 
-#: thonny/plugins/pip_gui.py:1013
+#: thonny/plugins/pip_gui.py:1253
 msgid "Advanced install / upgrade / downgrade"
 msgstr "Продвинутая установка, обновление и откат"
 
-#: thonny/plugins/pip_gui.py:1022
+#: thonny/plugins/pip_gui.py:1262
 msgid "Desired version"
 msgstr "Желаемая версия"
 
-#: thonny/plugins/pip_gui.py:1060
+#: thonny/plugins/pip_gui.py:1321
 msgid "Upgrade dependencies"
 msgstr "Зависимости для обновления"
 
-#: thonny/plugins/pip_gui.py:1118
+#: thonny/plugins/pip_gui.py:1406
 msgid "Requires:"
 msgstr "Нужно:"
 
-#: thonny/plugins/pip_gui.py:1122
+#: thonny/plugins/pip_gui.py:1410
 msgid "Error:"
 msgstr "Ошибка:"
 
-#: thonny/plugins/pip_gui.py:1232
+#: thonny/plugins/pip_gui.py:1601
 msgid "Manage packages..."
 msgstr "Управление пакетами..."
 
-#: thonny/plugins/pip_gui.py:1238
+#: thonny/plugins/pip_gui.py:1607
 msgid "Manage plug-ins..."
-msgstr "Управление плагинами.."
+msgstr "Управление плагинами..."
 
-#: thonny/plugins/replayer.py:354
+#: thonny/plugins/replayer.py:364
 msgid "Open replayer..."
 msgstr "Открыть повтор..."
 
-#: thonny/plugins/run_debug_config_page.py:12
+#: thonny/plugins/run_debug_config_page.py:21
 msgid "Change working directory to script directory on Run / Debug"
-msgstr "Измените рабочий каталог для программы в Запуск / Отладка"
+msgstr "Изменить рабочий каталог на каталог программы при Запуске / Отладке"
 
-#: thonny/plugins/run_debug_config_page.py:20
+#: thonny/plugins/run_debug_config_page.py:35
 msgid "Show function calls (frames) in separate windows"
 msgstr "Показывать вызовы функций (фреймы) в разных окнах"
 
-#: thonny/plugins/run_debug_config_page.py:21
+#: thonny/plugins/run_debug_config_page.py:36
 msgid "Uncheck if you want more traditional experience."
-msgstr "Снимите отметку если вы хотите более традиционный стиль"
+msgstr "Снимите отметку, если вы хотите более традиционный опыт."
 
-#: thonny/plugins/run_debug_config_page.py:27
+#: thonny/plugins/run_debug_config_page.py:42
 msgid "Open and close Stack view automatically"
 msgstr "Автоматически открывать и закрывать окно стека"
 
-#: thonny/plugins/run_debug_config_page.py:28
+#: thonny/plugins/run_debug_config_page.py:43
 msgid "Opens the Stack view on first call and closes it when program returns to main frame."
-msgstr "Открывает окно стека при первом вызове и закрывает его, когда программа возвращается во внешний блок."
+msgstr "Открывает окно стека при первом вызове и закрывает его, когда программа возвращается в основной блок."
 
-#: thonny/plugins/run_debug_config_page.py:37
+#: thonny/plugins/run_debug_config_page.py:52
 msgid "Allow stepping into libraries (ie. outside of main script directory)"
-msgstr "Разрешить переход в библиотеки (т. е. в модули за пределами каталога программы)"
+msgstr "Разрешить переход в библиотеки (например, в модули за пределами каталога программы)"
 
-#: thonny/plugins/run_debug_config_page.py:38
+#: thonny/plugins/run_debug_config_page.py:53
 msgid "May make debugging slower."
 msgstr "Может замедлить отладчик."
 
-#: thonny/plugins/run_debug_config_page.py:43
+#: thonny/plugins/run_debug_config_page.py:58
 msgid "Preferred debugger"
 msgstr "Предпочитаемый отладчик"
 
-#: thonny/plugins/run_debug_config_page.py:55
+#: thonny/plugins/run_debug_config_page.py:70
 msgid "(used when clicking Debug toolbar button)"
 msgstr "(используется при щелчке кнопки отладчика)"
 
-#: thonny/plugins/run_debug_config_page.py:60
+#: thonny/plugins/run_debug_config_page.py:75
 msgid "Birdseye port"
 msgstr "Порт Birdseye"
 
-#: thonny/plugins/run_debug_config_page.py:64
+#: thonny/plugins/run_debug_config_page.py:79
 msgid "(restart Thonny after changing this)"
 msgstr "(перезапустите Thonny после этих изменений)"
 
-#: thonny/plugins/run_debug_config_page.py:72
+#: thonny/plugins/run_debug_config_page.py:87
 msgid "Run & Debug"
-msgstr "Запустить и отладить"
+msgstr "Запуск и отладка"
 
-#: thonny/plugins/shell_config_page.py:16
+#: thonny/plugins/shell_config_page.py:26
 msgid "Terminal emulation"
 msgstr "Эмуляция терминала"
 
-#: thonny/plugins/shell_config_page.py:18
+#: thonny/plugins/shell_config_page.py:28
 msgid "supports basic ANSI-colors and styles"
 msgstr "поддерживает основные ANSI-цвета и стили"
 
-#: thonny/plugins/shell_config_page.py:30
+#: thonny/plugins/shell_config_page.py:40
 msgid "Maximum number of lines to keep."
-msgstr "Максимальное число удерживаемых строк."
+msgstr "Максимальное число сохраняемых строк."
 
-#: thonny/plugins/shell_config_page.py:32
+#: thonny/plugins/shell_config_page.py:42
 msgid "NB! Large values may cause poor performance!"
 msgstr "NB! Большие значения могут привести к ухудшению производительности!"
 
-#: thonny/plugins/shell_config_page.py:47
+#: thonny/plugins/shell_config_page.py:58
 msgid "Maximum length of line fragments before squeezing"
 msgstr "Максимальная длина строки, подлежащей сжатию"
 
-#: thonny/plugins/terminal_config_page.py:10
+#: thonny/plugins/terminal_config_page.py:12
 msgid "Running current script in terminal"
 msgstr "Запуск текущей программы в терминале"
 
-#: thonny/plugins/terminal_config_page.py:15
+#: thonny/plugins/terminal_config_page.py:17
 msgid "Present Python REPL after program ends"
 msgstr "Перейти в Python REPL после завершения программы"
 
-#: thonny/plugins/terminal_config_page.py:22
+#: thonny/plugins/terminal_config_page.py:24
 msgid "Keep terminal window open after Python process ends"
 msgstr "Оставлять окно терминала открытым после завершения программы"
 
-#: thonny/plugins/terminal_config_page.py:29
+#: 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! Автоматическое закрытие должно быть включено в настройках терминала (Профили → Оболочка → При выходе из оболочки)"
+msgstr "NB! Автоматическое закрытие должно быть включено в настройках терминала \n"
+"(Профили → Оболочка → При выходе из оболочки)"
 
-#: thonny/plugins/terminal_config_page.py:38
+#: thonny/plugins/terminal_config_page.py:41
 msgid "Terminal"
 msgstr "Терминал"
 
@@ -1171,283 +1066,925 @@ msgstr "Шрифт окна ввода-вывода"
 msgid "Preview"
 msgstr "Предпросмотр"
 
-#: thonny/plugins/theme_and_font_config_page.py:144
+#: thonny/plugins/theme_and_font_config_page.py:150
 msgid "This is a comment"
 msgstr "Это комментарий"
 
-#: thonny/plugins/theme_and_font_config_page.py:147
+#: thonny/plugins/theme_and_font_config_page.py:153
 msgid "The answer is"
 msgstr "Ответ"
 
-#: thonny/plugins/theme_and_font_config_page.py:151
+#: thonny/plugins/theme_and_font_config_page.py:157
 msgid "unclosed_string"
 msgstr "незакрытая_строка"
 
-#: thonny/plugins/theme_and_font_config_page.py:153
+#: thonny/plugins/theme_and_font_config_page.py:159
 msgid "blah, blah"
 msgstr "бла, бла"
 
-#: thonny/plugins/theme_and_font_config_page.py:176
+#: thonny/plugins/theme_and_font_config_page.py:183
 msgid "NB! Some style elements change only after restarting Thonny!"
 msgstr "NB! Некоторые элементы оформления изменятся только после перезапуска Thonny!"
 
-#: thonny/plugins/theme_and_font_config_page.py:215
+#: thonny/plugins/theme_and_font_config_page.py:222
 msgid "Enter an integer"
 msgstr "Введите число"
 
-#: thonny/plugins/theme_and_font_config_page.py:228
+#: thonny/plugins/theme_and_font_config_page.py:235
 msgid "Theme & Font"
 msgstr "Тема & шрифт"
 
-#: thonny/plugins/thonny_folders.py:18
+#: thonny/plugins/thonny_folders.py:19
 msgid "Open Thonny program folder..."
 msgstr "Открыть каталог Thonny..."
 
-#: thonny/plugins/thonny_folders.py:23
+#: thonny/plugins/thonny_folders.py:24
 msgid "Open Thonny data folder..."
 msgstr "Открыть каталог данных Thonny..."
 
-#: thonny/plugins/help/__init__.py:58
+#: thonny/plugins/help/__init__.py:70
 msgid "Home"
 msgstr "Дом"
 
-#: thonny/plugins/help/__init__.py:69
+#: thonny/plugins/help/__init__.py:81
 msgid "Help contents"
 msgstr "Содержание справки"
 
-#: thonny/plugins/micropython/__init__.py:175
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "Устройство CircuitPython"
 
-#: thonny/plugins/micropython/__init__.py:179
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "Устройство MicroPython"
 
-#: thonny/plugins/micropython/__init__.py:191
+#: thonny/plugins/micropython/mp_front.py:558
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "Подключите устройство к компьютеру и выберите соответствующий порт ниже"
 
-#: thonny/plugins/micropython/__init__.py:194
+#: thonny/plugins/micropython/mp_front.py:561
 msgid "look for your device name, \"USB Serial\" or \"UART\""
-msgstr "найдите имя вашего устройства, «USB Serial» или «UART»"
+msgstr "найдите имя вашего устройства, \"USB Serial\" или \"UART\""
 
-#: thonny/plugins/micropython/__init__.py:196
+#: thonny/plugins/micropython/mp_front.py:563
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "Если вы не можете найти его, попробуйте сначала установить соответствующий драйвер USB."
 
-#: thonny/plugins/micropython/__init__.py:220
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port"
 msgstr "Порт"
 
-#: thonny/plugins/micropython/__init__.py:229
+#: thonny/plugins/micropython/mp_front.py:458
 msgid "Try to detect port automatically"
 msgstr "Попытаться обнаружить порт автоматически"
 
-#: thonny/plugins/micropython/__init__.py:417
+#: thonny/plugins/micropython/__init__.py:24
 msgid "MicroPython (generic)"
 msgstr "MicroPython (общий)"
 
-#: thonny/plugins/printing/__init__.py:79
+#: thonny/plugins/printing/__init__.py:98
 msgid "Print..."
 msgstr "Распечатать..."
 
-#: thonny/plugins/system_shell/__init__.py:59
+#: thonny/plugins/system_shell/__init__.py:63
 msgid "Open system shell..."
 msgstr "Открыть системную оболочку..."
 
-#: thonny/plugins/backend_config_page.py:61
+#: thonny/plugins/backend_config_page.py:109
 msgid "Details"
 msgstr "Подробности"
 
-#: thonny/plugins/pip_gui.py:380
+#: thonny/plugins/pip_gui.py:395
 msgid "Install from requirements file"
-msgstr "Установить из файла requirements.txt"
+msgstr "Установить из файла requirements"
 
-#: thonny/plugins/pip_gui.py:391
+#: thonny/plugins/pip_gui.py:407
 msgid "Install from local file"
 msgstr "Установить из локального файла"
 
-#: thonny/plugins/pip_gui.py:970
+#: thonny/plugins/pip_gui.py:1200
 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:47
+#: thonny/plugins/circuitpython/__init__.py:10
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (общий)"
 
-#: thonny/plugins/commenting_indenting.py:123
+#: thonny/plugins/commenting_indenting.py:142
 msgid "Indent selected lines"
 msgstr "Увеличить отступ выбранных строк"
 
-#: thonny/plugins/commenting_indenting.py:133
+#: thonny/plugins/commenting_indenting.py:152
 msgid "Dedent selected lines"
 msgstr "Уменьшить отступ выбранных строк"
 
-#: thonny/workbench.py:1264
+#: thonny/workbench.py:1481
 msgid "Switch to\n"
 "regular\n"
 "mode"
-msgstr "Переключиться в обычный режим"
+msgstr "Переключиться \n"
+"в обычный \n"
+"режим"
 
-#: thonny/plugins/microbit/__init__.py:54
+#: thonny/plugins/microbit/__init__.py:62
 msgid "Make sure MicroPython has been installed to your micro:bit."
 msgstr "Убедитесь, что MicroPython установлен на ваш micro:bit."
 
-#: thonny/plugins/microbit/__init__.py:56
+#: thonny/plugins/microbit/__init__.py:64
 msgid "Don't forget that main.py only works without embedded main script."
 msgstr "Не забудьте, что main.py работает без встроенного main-script."
 
-#: thonny/plugins/microbit/__init__.py:102
-msgid "Install latest MicroPython to BBC micro:bit"
-msgstr "Установить последний MicroPython на BBC micro:bit"
-
-#: thonny/plugins/microbit/__init__.py:104
-msgid "micro:bit location:"
-msgstr "Расположение micro:bit:"
-
-#: 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 "NB! Все файлы на micro:bit будут удалены!"
-
-#: 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 "Открыть окно для установки или обновления MicroPython на вашем устройстве"
-
-#: thonny/plugins/microbit/__init__.py:67
-msgid "Could not find disk '%s'."
-msgstr "Не удалось найти диск «%s»"
-
-#: thonny/plugins/microbit/__init__.py:69
-msgid "Make sure you have micro:bit plugged in!"
-msgstr "Убедитесь, что ваш micro:bit подключён!"
-
-#: thonny/plugins/microbit/__init__.py:71
-msgid "Do you want to continue and locate the disk yourself?"
-msgstr "Хотите ли вы продолжить и выбрать диск вручную?"
-
-#: thonny/misc_utils.py:120
+#: thonny/misc_utils.py:177
 msgid "Could not find disk '%s'. Do you want to locate it yourself?"
-msgstr "Не удалось найти диск «%s». Хотите выбрать его вручную?"
+msgstr "Не удалось найти диск '%s'. Хотите выбрать его вручную?"
 
-#: thonny/misc_utils.py:123
+#: thonny/misc_utils.py:180
 msgid "Found several '%s' disks. Do you want to choose one yourself?"
-msgstr "Найдено несколько «%s» дисков. Хотите выбрать один из них?"
+msgstr "Найдено несколько '%s' дисков. Хотите выбрать один из них?"
 
-#: thonny/misc_utils.py:137
+#: thonny/misc_utils.py:196
 msgid "Can't find suitable disk"
 msgstr "Не удалось найти подходящий диск"
 
-#: thonny/base_file_browser.py:259
+#: thonny/base_file_browser.py:294
 msgid "%d items"
 msgstr "%d элементов"
 
-#: thonny/base_file_browser.py:581
-msgid "Move to Recycle Bin"
-msgstr "Переместить в Корзину"
-
-#: thonny/base_file_browser.py:583
+#: thonny/base_file_browser.py:743
 msgid "Move to Trash"
-msgstr "Перенести в Мусор"
+msgstr "Перенести в Корзину"
 
-#: thonny/base_file_browser.py:586
+#: thonny/base_file_browser.py:746
 msgid "Delete"
 msgstr "Удалить"
 
-#: thonny/base_file_browser.py:589
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
 msgid "New directory"
 msgstr "Новый каталог"
 
-#: thonny/base_file_browser.py:592
+#: thonny/base_file_browser.py:749
 msgid "Properties"
 msgstr "Свойства"
 
-#: thonny/base_file_browser.py:593
+#: thonny/base_file_browser.py:751
 msgid "Storage space"
 msgstr "Место в хранилище"
 
-#: thonny/base_file_browser.py:603
+#: thonny/base_file_browser.py:761
 msgid "Path"
 msgstr "Путь"
 
-#: thonny/base_file_browser.py:605
+#: thonny/base_file_browser.py:763
 msgid "Directory properties"
 msgstr "Свойства каталога"
 
-#: thonny/base_file_browser.py:607
+#: thonny/base_file_browser.py:765
 msgid "File properties"
 msgstr "Свойства файла"
 
-#: thonny/base_file_browser.py:609
+#: thonny/base_file_browser.py:767
 msgid "bytes"
 msgstr "байт"
 
-#: thonny/base_file_browser.py:612
+#: thonny/base_file_browser.py:770
 msgid "Size"
 msgstr "Размер"
 
-#: thonny/base_file_browser.py:623
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
 msgid "Modified"
-msgstr "Изменен"
+msgstr "Изменён"
 
-#: thonny/base_file_browser.py:679
+#: thonny/base_file_browser.py:842
 msgid "Deleting %s"
 msgstr "Удаление %s"
 
-#: thonny/base_file_browser.py:701
-msgid "Moving %s to %s"
-msgstr "Перемещение %s в %s"
-
-#: thonny/code.py:203
+#: thonny/editors.py:262
 msgid "Loading"
 msgstr "Загрузка"
 
-#: thonny/code.py:297
+#: thonny/editors.py:395
 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:206
+#: thonny/plugins/files.py:219
 msgid "Upload to %s"
 msgstr "Выгрузить в %s"
 
-#: thonny/plugins/files.py:261
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
 msgstr "Загрузка %s в %s"
 
-#: thonny/plugins/files.py:267
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr "Загрузить в %s"
 
+#: thonny/base_file_browser.py:650
+msgid "Open in system file manager"
+msgstr "Открыть в системном файловом менеджере"
+
+#: thonny/base_file_browser.py:678
+msgid "Hide hidden files"
+msgstr "Спрятать скрытые файлы"
+
+#: thonny/base_file_browser.py:678
+msgid "Show hidden files"
+msgstr "Показать скрытые файлы"
+
+#: thonny/base_file_browser.py:661
+msgid "Open in Thonny"
+msgstr "Открыть в Thonny"
+
+#: thonny/base_file_browser.py:692
+msgid "Open in system default app"
+msgstr "Открыть в системном приложении по умолчанию"
+
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
+msgid "Configure %s files"
+msgstr "Настроить %s файлов"
+
+#: thonny/base_file_browser.py:701
+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:1258 thonny/editors.py:986 thonny/editors.py:988
+msgid "Deleting"
+msgstr "Удаление"
+
+#: thonny/base_file_browser.py:1265
+msgid "Creating directory"
+msgstr "Создание каталога"
+
+#: thonny/editors.py:260
+msgid "Loading %s"
+msgstr "Загрузка %s"
+
+#: thonny/editors.py:390
+msgid "Saving to %s"
+msgstr "Сохранение в %s"
+
+#: thonny/editors.py:728 thonny/editors.py:730
+msgid "Save All files"
+msgstr "Сохранить все файлы"
+
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
+msgid "Configure interpreter..."
+msgstr "Настроить интерпретатор..."
+
+#: thonny/workbench.py:1591
+msgid "Device"
+msgstr "Устройство"
+
+#: thonny/workdlg.py:234
+msgid "Cancelling"
+msgstr "Отмена"
+
+#: thonny/workdlg.py:270
+msgid "Starting"
+msgstr "Запуск"
+
+#: thonny/plugins/backend_config_page.py:249
+msgid "Authentication"
+msgstr "Аутентификация"
+
+#: thonny/plugins/backend_config_page.py:251
+msgid "Enter the passphrase of your private key for\n"
+"{}"
+msgstr "Введите парольную фразу вашего закрытого ключа для\n"
+"{}"
+
+#: thonny/plugins/backend_config_page.py:254
+msgid "Enter your password for\n"
+"{}"
+msgstr "Введите пароль для\n"
+"{}"
+
+#: thonny/plugins/object_inspector.py:486
+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:682
+msgid "Search results"
+msgstr "Результаты поиска"
+
+#: thonny/plugins/pip_gui.py:683
+msgid "Searching"
+msgstr "Поиск"
+
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
+msgid "Installing '%s'"
+msgstr "Установка '%s'"
+
+#: thonny/plugins/pip_gui.py:793
+msgid "Upgrading '%s'"
+msgstr "Обновление '%s'"
+
+#: thonny/plugins/pip_gui.py:800
+msgid "Uninstalling '%s'"
+msgstr "Удаление '%s'"
+
+#: thonny/plugins/pip_gui.py:814
+msgid "Installing"
+msgstr "Установка"
+
+#: thonny/plugins/pip_gui.py:1562
+msgid "Package manager is not available for this interpreter"
+msgstr "Диспетчер пакетов недоступен для этого интерпретатора"
+
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
+msgid "Not supported"
+msgstr "Не поддерживается"
+
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
+msgid "Not available"
+msgstr "Недоступно"
+
+#: thonny/plugins/pip_gui.py:1582
+msgid "You need to stop your program before launching the package manager."
+msgstr "Вы должны остановить вашу программу перед запуском менеджера пакетов."
+
+#: thonny/plugins/shell_config_page.py:73
+msgid "Open evaluated values in Object inspector"
+msgstr "Открывать вычисленные значения в Инспекторе объектов"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:234
+msgid "Python executable"
+msgstr "Исполняемый файл Python"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:258
+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! Кнопка выбора файла может работать некорректно при выборе исполняемых файлов \n"
+"из виртуального окружения. В этом случае выберите сценарий 'активировать' программу вместо\n"
+"интерпретатора (или введите путь прямо в окне)!"
+
+#: thonny/plugins/cpython_ssh/__init__.py:17
+msgid "Remote Python 3 (SSH)"
+msgstr "Удалённый Python 3 (SSH)"
+
+#: thonny/plugins/micropython/mp_front.py:313
+msgid "Not connected"
+msgstr "Нет соединения"
+
+#: thonny/plugins/micropython/__init__.py:35
+msgid "MicroPython (local)"
+msgstr "MicroPython (локальный)"
+
+#: thonny/plugins/micropython/__init__.py:46
+msgid "MicroPython (SSH)"
+msgstr "MicroPython (SSH)"
+
+#: thonny/plugins/micropython/pip_gui.py:144
+msgid "no absolute lib directory in sys.path"
+msgstr "в sys.path нет абсолютного каталога lib"
+
+#: thonny/plugins/pip_gui.py:71
+msgid "Search on PyPI"
+msgstr "Поиск на PyPI"
+
+#: thonny/base_file_browser.py:693
+msgid "Open in Thonny's text editor"
+msgstr "Открыть в текстовом редакторе Thonny"
+
+#: thonny/base_file_browser.py:346
+msgid "Storage space on this drive or filesystem"
+msgstr "Место для хранения на этом диске или файловой системе"
+
+#: thonny/base_file_browser.py:347
+msgid "total space"
+msgstr "общий размер"
+
+#: thonny/base_file_browser.py:349
+msgid "used space"
+msgstr "использовано"
+
+#: thonny/base_file_browser.py:350
+msgid "free space"
+msgstr "свободно"
+
+#: thonny/base_file_browser.py:357
+msgid "Storage info"
+msgstr "Информация о хранилище"
+
+#: thonny/plugins/commenting_indenting.py:162
+msgid "Replace tabs with spaces"
+msgstr "Заменить табуляцию пробелами"
+
+#: thonny/plugins/editor_config_page.py:33
+msgid "Highlight tab characters"
+msgstr "Подсвечивать символы табуляции"
+
+#: thonny/plugins/editor_config_page.py:68
+msgid "Indent with tab characters (not recommended for Python)"
+msgstr "Отступ табуляцией (не рекомендуется для Python)"
+
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
+msgid "Name"
+msgstr "Имя"
+
+#: thonny/base_file_browser.py:96
+msgid "Size (bytes)"
+msgstr "Размер (байты)"
+
+#: thonny/base_file_browser.py:879
+msgid "Enter name for new directory under\n"
+"%s"
+msgstr "Введите имя для нового каталога в\n"
+"%s"
+
+#: thonny/base_file_browser.py:902
+msgid "Nothing selected"
+msgstr "Ничего не выбрано"
+
+#: thonny/base_file_browser.py:902
+msgid "Select an item and try again!"
+msgstr "Выберите элемент и повторите попытку!"
+
+#: thonny/base_file_browser.py:1329
+msgid "Open from %s"
+msgstr "Открыть из %s"
+
+#: thonny/base_file_browser.py:1332
+msgid "Save to %s"
+msgstr "Сохранить в %s"
+
+#: thonny/base_file_browser.py:1351
+msgid "File name:"
+msgstr "Имя файла:"
+
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
+msgid "Value ID"
+msgstr "Идентификатор значения"
+
+#: thonny/memory.py:65 thonny/plugins/heap.py:23
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
+msgid "Value"
+msgstr "Значение"
+
+#: thonny/plugins/backend_config_page.py:272
+msgid "Save password"
+msgstr "Сохранить пароль"
+
+#: thonny/plugins/debugger.py:557
+msgid "Function call at %s"
+msgstr "Вызов функции в %s"
+
+#: thonny/plugins/debugger.py:1006
+msgid "Local variables"
+msgstr "Локальные переменные"
+
+#: thonny/plugins/debugger.py:1038
+msgid "Function"
+msgstr "Функция"
+
+#: thonny/plugins/debugger.py:1039
+msgid "Location"
+msgstr "Расположение"
+
+#: thonny/plugins/debugger.py:1115
+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:92
+msgid "Data"
+msgstr "Данные"
+
+#: thonny/plugins/object_inspector.py:93
+msgid "Attributes"
+msgstr "Атрибуты"
+
+#: thonny/plugins/object_inspector.py:537
+msgid "Index"
+msgstr "Индекс"
+
+#: thonny/plugins/object_inspector.py:615
+msgid "Key ID"
+msgstr "Идентификатор ключа"
+
+#: thonny/plugins/object_inspector.py:616
+msgid "Key"
+msgstr "Ключ"
+
+#: thonny/plugins/variables.py:39
+msgid "Back to\n"
+"%s"
+msgstr "Вернуться к\n"
+"%s"
+
+#: thonny/plugins/micropython/mp_front.py:453
+msgid "Port or WebREPL"
+msgstr "Порт или WebREPL"
+
+#: thonny/plugins/micropython/mp_front.py:599
+msgid "Password"
+msgstr "Пароль"
+
+#: thonny/plugins/debugger.py:964
+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 "Переменные среды (одно КЛЮЧ=ЗНАЧЕНИЕ на строку)"
+
+#: thonny/base_file_browser.py:722
+msgid "New file"
+msgstr "Новый файл"
+
+#: thonny/base_file_browser.py:740
+msgid "Rename"
+msgstr "Переименовать"
+
+#: thonny/base_file_browser.py:928
+msgid "Rename '%s'"
+msgstr "Переименовать '%s'"
+
+#: thonny/base_file_browser.py:928
+msgid "Enter new name"
+msgstr "Введите новое имя"
+
+#: thonny/base_file_browser.py:1016
+msgid "Paste failed"
+msgstr "Не удалось вставить"
+
+#: thonny/base_file_browser.py:1016
+msgid "There are conflicting folders"
+msgstr "Есть конфликтующие каталоги"
+
+#: thonny/base_file_browser.py:1144
+msgid "File already exists"
+msgstr "Файл уже существует"
+
+#: thonny/base_file_browser.py:1212
+msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
+msgstr "Если это текстовый файл, вы можете настроить его открытие в Thonny, щёлкнув его правой кнопкой мыши и выбрав 'Настроить ... файлов'."
+
+#: thonny/editors.py:38
+msgid "Python files"
+msgstr "Файлы Python"
+
+#: thonny/editors.py:123 thonny/editors.py:189
+msgid "<untitled>"
+msgstr "<безымянный>"
+
+#: thonny/editors.py:150
+msgid "File is gone"
+msgstr "Файл удалён"
+
+#: thonny/editors.py:153
+msgid "Do you want to also close the editor?"
+msgstr "Хотите ли вы также закрыть редактор?"
+
+#: thonny/editors.py:169
+msgid "External modification"
+msgstr "Внешняя модификация"
+
+#: thonny/editors.py:172
+msgid "Do you want to discard current editor content and reload the file from disk?"
+msgstr "Вы хотите удалить текущее содержимое редактора и перезагрузить файл с диска?"
+
+#: thonny/editors.py:588
+msgid "Python files usually have .py extension."
+msgstr "Файлы Python обычно имеют расширение .py."
+
+#: thonny/editors.py:590
+msgid "Did you mean '%s'?"
+msgstr "Вы имели в виду '%s'?"
+
+#: thonny/editors.py:759
+msgid "Move / rename..."
+msgstr "Переместить/переименовать..."
+
+#: thonny/editors.py:768
+msgid "Go to line..."
+msgstr "Перейти к строке..."
+
+#: thonny/editors.py:1010
+msgid "Line number"
+msgstr "Номер строки"
+
+#: thonny/editors.py:1156
+msgid "Do you want to save files before closing?"
+msgstr "Вы хотите сохранить файлы перед закрытием?"
+
+#: thonny/editors.py:1158
+msgid "Do you want to save file before closing?"
+msgstr "Вы хотите сохранить файл перед закрытием?"
+
+#: thonny/editors.py:1161
+msgid "Save On Close"
+msgstr "Сохранить при закрытии"
+
+#: thonny/misc_utils.py:539
+msgid "Command not available"
+msgstr "Команда недоступна"
+
+#: thonny/misc_utils.py:540
+msgid "This command is not available if Thonny is run via Flatpak"
+msgstr "Эта команда недоступна, если Thonny запускается через Flatpak"
+
+#: thonny/workbench.py:700 thonny/workbench.py:799
+msgid "Support Ukraine"
+msgstr "Поддержите Украину"
+
+#: thonny/plugins/backend_config_page.py:90
+msgid "Which kind of interpreter should Thonny use for running your code?"
+msgstr "Какой интерпретатор должен использовать Thonny для запуска вашего кода?"
+
+#: thonny/plugins/calltip.py:159
+msgid "Show parameter info"
+msgstr "Показать информацию о параметре"
+
+#: thonny/plugins/editor_config_page.py:41
+msgid "Automatically show parameter info after typing '('"
+msgstr "Автоматически показывать информацию о параметре после ввода '('"
+
+#: thonny/plugins/editor_config_page.py:47
+msgid "Automatically propose completions while typing"
+msgstr "Автоматически предлагать варианты завершения при наборе текста"
+
+#: thonny/plugins/editor_config_page.py:52
+msgid "Automatically show documentation for completions"
+msgstr "Автоматически показывать документацию для вариантов завершения"
+
+#: thonny/plugins/editor_config_page.py:57
+msgid "Request completions with Tab-key in editors"
+msgstr "Запрашивать варианты завершения с помощью клавиши Tab в редакторах"
+
+#: thonny/plugins/editor_config_page.py:62
+msgid "Request completions with Tab-key in Shell"
+msgstr "Запрашивать варианты завершения с помощью клавиши Tab в оболочке"
+
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
+msgid "Problem"
+msgstr "Проблема"
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Could not find definition"
+msgstr "Не удалось найти определение"
+
+#: thonny/plugins/shell_config_page.py:17
+msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
+msgstr "Очищать оболочку перед запуском нового процесса (Выполнение, Отладка, Остановка/Перезапуск, ...)"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:196
+msgid "Thonny's Python"
+msgstr "Python в Thonny"
+
+#: thonny/plugins/micropython/mp_front.py:496
+msgid "Interrupt working program on connect"
+msgstr "Прервать рабоотающую программу при подключении"
+
+#: thonny/plugins/micropython/mp_front.py:504
+msgid "Synchronize device's real time clock"
+msgstr "Синхронизировать часы реального времени устройства"
+
+#: thonny/plugins/micropython/mp_front.py:510
+msgid "Use local time in real time clock"
+msgstr "Использовать местное время в часах реального времени"
+
+#: thonny/plugins/micropython/mp_front.py:516
+msgid "Restart interpreter before running a script"
+msgstr "Перезапустить интерпретатор перед запуском программы"
+
+#: thonny/plugins/micropython/pip_gui.py:26
+msgid "This doesn't look like MicroPython/CircuitPython package.\n"
+"Are you sure you want to install it?"
+msgstr "Это не похоже на пакет MicroPython/CircuitPython. \n"
+"Вы уверены, что хотите установить его?"
+
+#: thonny/base_file_browser.py:853
+msgid "Moving to Trash"
+msgstr "Перемещение в корзину"
+
+#: thonny/base_file_browser.py:854
+msgid "Move %s to Trash?"
+msgstr "Переместить %s в корзину?"
+
+#: thonny/base_file_browser.py:861
+msgid "Moving %s to Trash"
+msgstr "Перемещение %s в корзину"
+
+#: thonny/base_file_browser.py:666
+msgid "Open in default external app"
+msgstr "Открыть во внешнем приложении по умолчанию"
+
+#: thonny/base_file_browser.py:1210
+msgid "Opening remote files in external app is not supported."
+msgstr "Открытие удалённых файлов во внешнем приложении не поддерживается."
+
+#: thonny/base_file_browser.py:1217
+msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
+msgstr "Если файл нужно открыть во внешнем приложении, загрузите его в локальный каталог и откройте оттуда!"
+
+#: thonny/editors.py:151
+msgid "Looks like '%s' was deleted or moved."
+msgstr "Похоже, '%s' был удалён или перемещён."
+
+#: thonny/editors.py:170
+msgid "Looks like '%s' was modified outside of the editor."
+msgstr "Похоже, '%s' был изменён вне редактора."
+
+#: thonny/plugins/cpython_frontend/cp_front.py:256
+msgid "NB! Thonny only supports Python %s and later"
+msgstr "NB! Thonny поддерживает только Python %s и позднее"
+
+#: thonny/editors.py:1010
+msgid "Go to line"
+msgstr "Перейти к строке"
+
+#: thonny/workbench.py:703
+msgid "Support"
+msgstr "Поддержка"
+
+#: thonny/editors.py:399 thonny/editors.py:414
+msgid "Could not save"
+msgstr "Не удаётся сохранить"
+
+#: thonny/plugins/general_config_page.py:135
+msgid "Warning"
+msgstr "Предупреждение"
+
+#: thonny/plugins/general_config_page.py:136
+msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
+"Did you intend this?"
+msgstr "Если вы заключите значение переменной среды в кавычки, кавычки будут частью значения.\n"
+"Это сделано намеренно?"
+
+#: thonny/workbench.py:870
+msgid "Install MicroPython"
+msgstr "Установить MicroPython"
+
+#: thonny/workbench.py:874
+msgid "Install CircuitPython"
+msgstr "Установить CircuitPython"
+
+#: thonny/plugins/backend_config_page.py:210
+msgid "Make uploaded shebang scripts executable"
+msgstr "Сделать загруженные сценарии shebang исполняемыми"
+
+#: thonny/plugins/editor_config_page.py:91
+msgid "Make saved shebang scripts executable"
+msgstr "Сделать сохранённые сценарии shebang исполняемыми"
+
+#: thonny/plugins/files.py:224
+msgid "Activate virtual environment"
+msgstr "Активировать виртуальное окружение"
+
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
+msgid "Target"
+msgstr "Целевой каталог"
+
+#: thonny/plugins/pythontutor.py:41
+msgid "Visualize current script at Python Tutor"
+msgstr "Визуализировать текущую программу в Python Tutor"
+
+#: thonny/plugins/todo_view.py:43
+msgid "Line"
+msgstr "Строка"
+
+#: thonny/plugins/todo_view.py:44
+msgid "Info"
+msgstr "Информация"
+
+#: thonny/plugins/todo_view.py:121
+msgid "No line marked with #todo found"
+msgstr "Строка с пометкой #todo не найдена"
+
+#: thonny/plugins/todo_view.py:141
+msgid "TODO"
+msgstr "TODO"
+
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
+msgid "Install or update %s"
+msgstr "Установить или обновить %s"
+
+#: thonny/plugins/cpython_frontend/__init__.py:24
+msgid "Local Python 3"
+msgstr "Локальный Python 3"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:266
+msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+msgstr "Активировать существующее виртуальное окружение можно также через контекстное меню правой кнопки мыши в файловом навигаторе при выборе папки виртуального окружения или файла 'pyveng.cfg' внутри неё."
+
+#: thonny/plugins/ev3/__init__.py:72
+msgid "Preparations (skip the VS Code part)"
+msgstr "Подготовка (пропустить часть VS Code)"
+
+#: thonny/plugins/ev3/__init__.py:78
+msgid "Default password"
+msgstr "Пароль по умолчанию"
+
+#: thonny/running.py:392
+msgid "Information"
+msgstr "Информация"
+
+#: thonny/running.py:393
+msgid "For debugging the program must be saved first."
+msgstr "Для отладки программу необходимо сначала сохранить."
+
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr "%s не похож на текстовый файл"
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr "Проблема с загрузкой файла"
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr "Похоже, у этого файла проблемы с кодировкой.\n"
+"\n"
+"Убедитесь, что он в UTF-8 или содержит подсказку о правильной кодировке."
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr "Файл открыт"
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr "Этот файл уже открыт в Thonny.\n"
+"\n"
+"Если вы хотите сохранить с этим именем,\n"
+"сначала закройте существующий редактор!"
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr "Ошибка разрешения"
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr "Похоже, этот файл или папка недоступны для записи."
+
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr "Бэкенд не готов"
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr "Куда сохранять?"
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr "Возможная проблема"
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr "Если вы назовете свою программу '%s', вы не сможете импортировать модуль с именем '%s'."
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr "Вы всё равно хотите использовать это имя для своей программы?"
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr "Получена ошибка разрешения при попытке загрузить\n"
+"%s"
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr "Попробуйте открыть его с помощью Файл => Открыть."
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr "Ошибка разрешения"
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr "Разрешить запуск безымянных программ"
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
+msgstr ""
+
diff --git a/thonny/locale/sk_SK/LC_MESSAGES/thonny.mo b/thonny/locale/sk_SK/LC_MESSAGES/thonny.mo
index fb0dc44..c5eb972 100644
Binary files a/thonny/locale/sk_SK/LC_MESSAGES/thonny.mo and b/thonny/locale/sk_SK/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/sk_SK/LC_MESSAGES/thonny.po b/thonny/locale/sk_SK/LC_MESSAGES/thonny.po
index 9fb7c80..22852ca 100644
--- a/thonny/locale/sk_SK/LC_MESSAGES/thonny.po
+++ b/thonny/locale/sk_SK/LC_MESSAGES/thonny.po
@@ -7,63 +7,63 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: sk\n"
 
-#: thonny/workbench.py:361
+#: thonny/workbench.py:369
 msgid "File"
 msgstr "Súbor"
 
-#: thonny/workbench.py:362
+#: thonny/workbench.py:370
 msgid "Edit"
 msgstr "Upraviť"
 
-#: thonny/workbench.py:363
+#: thonny/workbench.py:371
 msgid "View"
-msgstr "Zobrazenie"
+msgstr "Zobraziť"
 
-#: thonny/running.py:116 thonny/workbench.py:364
+#: thonny/running.py:116 thonny/workbench.py:372
 msgid "Run"
 msgstr "Spustiť"
 
-#: thonny/workbench.py:365
+#: thonny/workbench.py:373
 msgid "Tools"
 msgstr "Nástroje"
 
-#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:366
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:374
 msgid "Help"
 msgstr "Pomocník"
 
-#: thonny/workbench.py:583
+#: thonny/workbench.py:591
 msgid "Exit"
 msgstr "Ukončiť"
 
-#: thonny/workbench.py:610
+#: thonny/workbench.py:618
 msgid "Decrease font size"
 msgstr "Zmenšiť veľkosť písma"
 
-#: thonny/workbench.py:622
+#: thonny/workbench.py:630
 msgid "Focus editor"
 msgstr "Prepnúť na editor"
 
-#: thonny/workbench.py:631
+#: thonny/workbench.py:639
 msgid "Focus shell"
 msgstr "Prepnúť na shell"
 
-#: thonny/workbench.py:642
+#: thonny/workbench.py:650
 msgid "Maximize view"
 msgstr "Maximalizovať okno"
 
-#: thonny/workbench.py:654
+#: thonny/workbench.py:662
 msgid "Full screen"
 msgstr "Celá obrazovka"
 
-#: thonny/workbench.py:1457
+#: thonny/workbench.py:1465
 msgid "Program arguments"
 msgstr "Argumenty programu"
 
-#: thonny/plugins/about.py:21 thonny/plugins/about.py:140
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:151
 msgid "About Thonny"
-msgstr "O Thonny"
+msgstr "O aplikácii Thonny"
 
-#: thonny/plugins/about.py:66
+#: thonny/plugins/about.py:77
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -75,7 +75,7 @@ msgstr "Vytvorené na\n"
 "s pomocou open-source komunity,\n"
 "Raspberry Pi Foundation a Cybernetica AS  "
 
-#: thonny/plugins/about.py:86
+#: thonny/plugins/about.py:97
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -84,11 +84,11 @@ msgid "This program comes with\n"
 "for details"
 msgstr "Tento program je BEZ AKÝCHKOĽVEK ZÁRUK! Je to slobodný softvér a môžete ho slobodne šíriť pri splnení určitých podmienok, pre podrobnosti navštívte https://opensource.org/licenses/MIT"
 
-#: thonny/plugins/about.py:129
+#: thonny/plugins/about.py:140
 msgid "Version history"
 msgstr "História verzií"
 
-#: thonny/plugins/about.py:136
+#: thonny/plugins/about.py:147
 msgid "Report problems"
 msgstr "Nahlásiť problémy"
 
@@ -116,7 +116,7 @@ msgstr "Vypnuté testy (jedno id na riadok)"
 msgid "Assistant"
 msgstr "Asistent"
 
-#: thonny/plugins/autocomplete.py:512
+#: thonny/plugins/autocomplete.py:522
 msgid "Auto-complete"
 msgstr "Automatické dopĺňanie"
 
@@ -160,18 +160,18 @@ msgstr "Späť"
 msgid "Redo"
 msgstr "Vrátiť krok späť"
 
-#: thonny/base_file_browser.py:721 thonny/plugins/common_editing_commands.py:49
-#: thonny/ui_utils.py:2294
+#: thonny/base_file_browser.py:724 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2295
 msgid "Cut"
 msgstr "Vystrihnúť"
 
-#: thonny/base_file_browser.py:722 thonny/plugins/common_editing_commands.py:61
-#: thonny/ui_utils.py:2295
+#: thonny/base_file_browser.py:725 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2296
 msgid "Copy"
 msgstr "Kopírovať"
 
-#: thonny/base_file_browser.py:724 thonny/base_file_browser.py:730
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2296
+#: thonny/base_file_browser.py:727 thonny/base_file_browser.py:733
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2297
 msgid "Paste"
 msgstr "Vložiť"
 
@@ -237,11 +237,11 @@ msgstr "Exportovať záznamy o používaní..."
 msgid "Events"
 msgstr "Udalosti"
 
-#: thonny/plugins/files.py:606
+#: thonny/plugins/files.py:609
 msgid "Files"
 msgstr "Súbory"
 
-#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:430
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:437
 msgid "Find & Replace"
 msgstr "Hľadať a nahradiť"
 
@@ -281,11 +281,11 @@ msgstr "Nahradiť a hľadať"
 msgid "Replace all"
 msgstr "Nahradiť všetko"
 
-#: thonny/plugins/find_replace.py:249
+#: thonny/plugins/find_replace.py:253
 msgid "Enter string to be replaced."
 msgstr "Zadajte reťazec, ktorý bude nahradený iným reťazcom."
 
-#: thonny/plugins/find_replace.py:333
+#: thonny/plugins/find_replace.py:338
 msgid "The specified text was not found!"
 msgstr "Zadaný text nebol nájdený!"
 
@@ -359,8 +359,8 @@ msgstr "Režim Pygame Zero"
 msgid "Uninstall"
 msgstr "Odinštalovať"
 
-#: thonny/editors.py:667 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
-#: thonny/ui_utils.py:1871 thonny/workdlg.py:162
+#: thonny/editors.py:685 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
+#: thonny/ui_utils.py:1872 thonny/workdlg.py:162
 msgid "Close"
 msgstr "Zavrieť"
 
@@ -377,9 +377,9 @@ msgid "Upgrade"
 msgstr "Inovovať"
 
 #: thonny/plugins/esp/__init__.py:349
-#: thonny/plugins/micropython/uf2dialog.py:348 thonny/plugins/pip_gui.py:73
+#: thonny/plugins/micropython/uf2dialog.py:410 thonny/plugins/pip_gui.py:73
 msgid "Install"
-msgstr "Inštalácia"
+msgstr "Inštalovať"
 
 #: thonny/plugins/pip_gui.py:535
 msgid "Could not find the package from PyPI."
@@ -440,64 +440,64 @@ msgstr "Späť na\n"
 msgid "Variables"
 msgstr "Premenné"
 
-#: thonny/base_file_browser.py:1558
+#: thonny/base_file_browser.py:1572
 msgid "This computer"
 msgstr "Tento počítač"
 
-#: thonny/base_file_browser.py:641
+#: thonny/base_file_browser.py:644
 msgid "Refresh"
 msgstr "Obnoviť"
 
-#: thonny/base_file_browser.py:650
+#: thonny/base_file_browser.py:653
 msgid "Focus into"
 msgstr "Prepnúť sa na"
 
-#: thonny/base_file_browser.py:1393 thonny/base_file_browser.py:1405
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
 #: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
 msgid "Error"
 msgstr "Chyba"
 
-#: thonny/base_file_browser.py:1393 thonny/base_file_browser.py:1405
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
 msgid "You need to select a file!"
 msgstr "Musíte vybrať súbor!"
 
-#: thonny/base_file_browser.py:1409
+#: thonny/base_file_browser.py:1423
 msgid "Overwrite?"
 msgstr "Prepísať?"
 
-#: thonny/base_file_browser.py:1409
+#: thonny/base_file_browser.py:1423
 msgid "Do you want to overwrite '%s' ?"
 msgstr "Chcete prepísať '% s'?"
 
-#: thonny/editors.py:632 thonny/editors.py:634
+#: thonny/editors.py:650 thonny/editors.py:652
 msgid "New"
 msgstr "Nový"
 
-#: thonny/editors.py:645
+#: thonny/editors.py:663
 msgid "Open..."
 msgstr "Otvoriť..."
 
-#: thonny/editors.py:647
+#: thonny/editors.py:665
 msgid "Load"
 msgstr "Načítať"
 
-#: thonny/editors.py:656
+#: thonny/editors.py:674
 msgid "Recent files"
 msgstr "Nedávne súbory"
 
-#: thonny/editors.py:678 thonny/ui_utils.py:493
+#: thonny/editors.py:696 thonny/ui_utils.py:493
 msgid "Close all"
 msgstr "Zatvoriť všetko"
 
-#: thonny/editors.py:688 thonny/editors.py:690
+#: thonny/editors.py:706 thonny/editors.py:708
 msgid "Save"
 msgstr "Uložiť"
 
-#: thonny/editors.py:713
+#: thonny/editors.py:731
 msgid "Save as..."
 msgstr "Uložiť ako..."
 
-#: thonny/editors.py:724
+#: thonny/editors.py:742
 msgid "Save copy..."
 msgstr "Uložiť kópiu..."
 
@@ -533,74 +533,74 @@ msgstr "Poslať EOF/mäkký reštart"
 msgid "Disconnect"
 msgstr "Odpojiť"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:268
+#: thonny/plugins/cpython_frontend/cp_front.py:269
 msgid "Python interpreters"
 msgstr "Prekladač Pythonu"
 
-#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:269
+#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:270
 #: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
 msgid "all files"
 msgstr "všetky súbory"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:297
+#: thonny/plugins/cpython_frontend/cp_front.py:298
 msgid "Select empty directory for new virtual environment"
 msgstr "Vyberte prázdny adresár pre nové virtuálne prostredie"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:304
+#: thonny/plugins/cpython_frontend/cp_front.py:305
 msgid "Bad directory"
 msgstr "Zlý adresár"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:305
+#: thonny/plugins/cpython_frontend/cp_front.py:306
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "Vybraný adresár nie je prázdny.\n"
 "Vyberte iný alebo zrušte výber."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:322
+#: thonny/plugins/cpython_frontend/cp_front.py:323
 msgid "Creating virtual environment"
 msgstr "Vytváram virtuálne prostredie"
 
-#: thonny/shell.py:100
+#: thonny/shell.py:101
 msgid "Clear shell"
 msgstr "Vyčistiť shell"
 
-#: thonny/shell.py:174
+#: thonny/shell.py:185
 msgid "Plotter"
 msgstr "Plotter"
 
-#: thonny/shell.py:306
+#: thonny/shell.py:317
 msgid "Clear"
 msgstr "Vyčistiť"
 
-#: thonny/shell.py:319
+#: thonny/shell.py:330
 msgid "Show Plotter"
 msgstr "Zobraziť Plotter"
 
-#: thonny/shell.py:1648
+#: thonny/shell.py:1659
 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 "Kvôli vyššiemu výkonu sa Shell vyhýba zobrazeniu veľmi dlhých riadkov v celej dĺžke (viď Nástroje => Možnosti => Shell).\n"
 "Tu môžete pracovať s pôvodným fragmentom textu."
 
-#: thonny/shell.py:1659
+#: thonny/shell.py:1670
 msgid "Wrap text (may be slow)"
 msgstr "Zalamovať text (môže byť pomalé)"
 
-#: thonny/ui_utils.py:1866
+#: thonny/ui_utils.py:1867
 msgid "Copy to clipboard"
 msgstr "Kopírovať do schránky"
 
-#: thonny/shell.py:1701
+#: thonny/shell.py:1712
 msgid "Squeezed text (%d characters)"
 msgstr "Skrátený text (%d znakov)"
 
-#: thonny/shell.py:1871
+#: thonny/shell.py:1882
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr "Plotter vizualizuje číselné rady\n"
 "vypísané v Shell-i."
 
-#: thonny/shell.py:1873
+#: thonny/shell.py:1884
 msgid "See Help for details."
 msgstr "Podrobnosti nájdete v Pomocníkovi."
 
@@ -622,65 +622,65 @@ msgstr "Kopírujem\n"
 "do\n"
 "% s"
 
-#: thonny/base_file_browser.py:1364 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/base_file_browser.py:1378 thonny/config_ui.py:42 thonny/export.py:28
 #: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
-#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1818
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1819
 #: thonny/workdlg.py:164 thonny/workdlg.py:209
 msgid "Cancel"
 msgstr "Zrušiť"
 
-#: thonny/base_file_browser.py:1355 thonny/config_ui.py:41 thonny/export.py:25
-#: thonny/plugins/about.py:100 thonny/plugins/backend_config_page.py:285
-#: thonny/ui_utils.py:154 thonny/ui_utils.py:1815 thonny/workdlg.py:206
+#: thonny/base_file_browser.py:1369 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:111 thonny/plugins/backend_config_page.py:285
+#: thonny/ui_utils.py:154 thonny/ui_utils.py:1816 thonny/workdlg.py:206
 msgid "OK"
 msgstr "OK"
 
-#: thonny/ui_utils.py:2300
+#: thonny/ui_utils.py:2301
 msgid "Select All"
 msgstr "Vybrať všetko"
 
-#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:155
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
 #: thonny/workbench.py:162
 msgid "Shell"
 msgstr "Shell"
 
-#: thonny/workbench.py:593
+#: thonny/workbench.py:601
 msgid "Options..."
 msgstr "Možnosti..."
 
-#: thonny/workbench.py:600
+#: thonny/workbench.py:608
 msgid "Increase font size"
 msgstr "Zväčšiť veľkosť písma"
 
-#: thonny/workbench.py:665
+#: thonny/workbench.py:673
 msgid "Change font size"
 msgstr "Zmeniť veľkosť písma"
 
-#: thonny/workbench.py:666
+#: thonny/workbench.py:674
 msgid "Zoom"
 msgstr "Priblíženie"
 
-#: thonny/workbench.py:675
+#: thonny/workbench.py:683
 msgid "Exit Thonny"
 msgstr "Ukončiť Thonny"
 
-#: thonny/workbench.py:678
+#: thonny/workbench.py:686
 msgid "Quit"
 msgstr "Ukončiť"
 
-#: thonny/workbench.py:1236 thonny/workbench.py:1244
+#: thonny/workbench.py:1244 thonny/workbench.py:1252
 msgid "Overwriting theme '%s'"
 msgstr "Prepísať motív '%s'"
 
-#: thonny/workbench.py:1428
+#: thonny/workbench.py:1436
 msgid "Program arguments:"
 msgstr "Argumenty programu:"
 
-#: thonny/workbench.py:1482
+#: thonny/workbench.py:1490
 msgid "Regular mode"
 msgstr "Bežný režim"
 
-#: thonny/workbench.py:1483
+#: thonny/workbench.py:1491
 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.)"
@@ -882,7 +882,7 @@ msgstr "Balík"
 msgid "Manage packages for %s"
 msgstr "Správa balíkov pre %s"
 
-#: thonny/editors.py:571 thonny/plugins/micropython/pip_gui.py:23
+#: thonny/editors.py:579 thonny/plugins/micropython/pip_gui.py:23
 #: thonny/plugins/pip_gui.py:953
 msgid "Confirmation"
 msgstr "Potvrdenie"
@@ -1114,31 +1114,31 @@ msgstr "Domov"
 msgid "Help contents"
 msgstr "Obsah Pomocníka"
 
-#: thonny/plugins/micropython/mp_front.py:300
+#: thonny/plugins/micropython/mp_front.py:303
 msgid "CircuitPython device"
 msgstr "Zariadenie CircuitPython"
 
-#: thonny/plugins/micropython/mp_front.py:304
+#: thonny/plugins/micropython/mp_front.py:307
 msgid "MicroPython device"
 msgstr "Zariadenie MicroPython"
 
-#: thonny/plugins/micropython/mp_front.py:541
+#: thonny/plugins/micropython/mp_front.py:547
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "Pripojte vaše zariadenie k počítaču a nižšie vyberte príslušný port"
 
-#: thonny/plugins/micropython/mp_front.py:544
+#: thonny/plugins/micropython/mp_front.py:550
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "hľadajte meno vášho zariadenia, napr. „USB Serial“ alebo „UART“"
 
-#: thonny/plugins/micropython/mp_front.py:546
+#: thonny/plugins/micropython/mp_front.py:552
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "Ak ho nemôžete nájsť, možno budete najprv musieť nainštalovať správny USB ovládač."
 
-#: thonny/plugins/micropython/mp_front.py:439
+#: thonny/plugins/micropython/mp_front.py:444
 msgid "Port"
 msgstr "Port"
 
-#: thonny/plugins/micropython/mp_front.py:449
+#: thonny/plugins/micropython/mp_front.py:454
 msgid "Try to detect port automatically"
 msgstr "Pokúsiť sa zistiť port automaticky"
 
@@ -1160,7 +1160,7 @@ msgstr "Podrobnosti"
 
 #: thonny/plugins/pip_gui.py:395
 msgid "Install from requirements file"
-msgstr "Inštalácia zo súboru požiadaviek (requirements.txt)"
+msgstr "Inštalovať zo súboru požiadaviek (requirements.txt)"
 
 #: thonny/plugins/pip_gui.py:407
 msgid "Install from local file"
@@ -1184,7 +1184,7 @@ msgstr "Zväčšiť odsadenie vybraných riadkov"
 msgid "Dedent selected lines"
 msgstr "Zmenšiť odsadenie vybraných riadkov"
 
-#: thonny/workbench.py:1471
+#: thonny/workbench.py:1479
 msgid "Switch to\n"
 "regular\n"
 "mode"
@@ -1216,63 +1216,63 @@ msgstr "Nájdených niekoľko '%s' diskov. Chcete jeden vybrať?"
 msgid "Can't find suitable disk"
 msgstr "Nepodarilo sa nájsť vhodný disk"
 
-#: thonny/base_file_browser.py:287
+#: thonny/base_file_browser.py:290
 msgid "%d items"
 msgstr "%d položiek"
 
-#: thonny/base_file_browser.py:736
+#: thonny/base_file_browser.py:739
 msgid "Move to Trash"
 msgstr "Vyhodiť do koša"
 
-#: thonny/base_file_browser.py:739
+#: thonny/base_file_browser.py:742
 msgid "Delete"
 msgstr "Odstrániť"
 
-#: thonny/base_file_browser.py:718 thonny/base_file_browser.py:869
+#: thonny/base_file_browser.py:721 thonny/base_file_browser.py:874
 msgid "New directory"
 msgstr "Nový adresár"
 
-#: thonny/base_file_browser.py:742
+#: thonny/base_file_browser.py:745
 msgid "Properties"
 msgstr "Vlastnosti"
 
-#: thonny/base_file_browser.py:744
+#: thonny/base_file_browser.py:747
 msgid "Storage space"
 msgstr "Úložný priestor"
 
-#: thonny/base_file_browser.py:754
+#: thonny/base_file_browser.py:757
 msgid "Path"
 msgstr "Cesta"
 
-#: thonny/base_file_browser.py:756
+#: thonny/base_file_browser.py:759
 msgid "Directory properties"
 msgstr "Vlastnosti adresára"
 
-#: thonny/base_file_browser.py:758
+#: thonny/base_file_browser.py:761
 msgid "File properties"
 msgstr "Vlastnosti súboru"
 
-#: thonny/base_file_browser.py:760
+#: thonny/base_file_browser.py:763
 msgid "bytes"
 msgstr "bajtov"
 
-#: thonny/base_file_browser.py:763
+#: thonny/base_file_browser.py:766
 msgid "Size"
 msgstr "Veľkosť"
 
-#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:774
+#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:777
 msgid "Modified"
 msgstr "Zmenené"
 
-#: thonny/base_file_browser.py:833
+#: thonny/base_file_browser.py:838
 msgid "Deleting %s"
 msgstr "Odstraňujem %s"
 
-#: thonny/editors.py:253
+#: thonny/editors.py:260
 msgid "Loading"
 msgstr "Načítavam"
 
-#: thonny/editors.py:382
+#: thonny/editors.py:389
 msgid "Saving"
 msgstr "Ukladám"
 
@@ -1280,67 +1280,67 @@ msgstr "Ukladám"
 msgid "Upload to %s"
 msgstr "Nahrať na %s"
 
-#: thonny/plugins/files.py:417
+#: thonny/plugins/files.py:420
 msgid "Downloading %s to %s"
 msgstr "Preberám %s do %s"
 
-#: thonny/plugins/files.py:323
+#: thonny/plugins/files.py:326
 msgid "Download to %s"
 msgstr "Prebrať do %s"
 
-#: thonny/base_file_browser.py:643
+#: thonny/base_file_browser.py:646
 msgid "Open in system file manager"
 msgstr "Otvoriť v systémovom správcovi súborov"
 
-#: thonny/base_file_browser.py:671
+#: thonny/base_file_browser.py:674
 msgid "Hide hidden files"
 msgstr "Nezobrazovať skryté súbory"
 
-#: thonny/base_file_browser.py:671
+#: thonny/base_file_browser.py:674
 msgid "Show hidden files"
 msgstr "Zobrazovať skryté súbory"
 
-#: thonny/base_file_browser.py:654
+#: thonny/base_file_browser.py:657
 msgid "Open in Thonny"
 msgstr "Otvoriť v Thonny"
 
-#: thonny/base_file_browser.py:685
+#: thonny/base_file_browser.py:688
 msgid "Open in system default app"
 msgstr "Otvoriť v predvolenej systémovej aplikácii"
 
-#: thonny/base_file_browser.py:666 thonny/base_file_browser.py:693
+#: thonny/base_file_browser.py:669 thonny/base_file_browser.py:696
 msgid "Configure %s files"
 msgstr "Nastaviť %s súborov"
 
-#: thonny/base_file_browser.py:694
+#: thonny/base_file_browser.py:697
 msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
 msgstr "Čo robiť so súborom %s po dvojitom kliknutí naň v správcovi súborov Thonny?"
 
-#: thonny/base_file_browser.py:1240 thonny/editors.py:953 thonny/editors.py:955
+#: thonny/base_file_browser.py:1254 thonny/editors.py:979 thonny/editors.py:981
 msgid "Deleting"
 msgstr "Odstraňujem"
 
-#: thonny/base_file_browser.py:1247
+#: thonny/base_file_browser.py:1261
 msgid "Creating directory"
 msgstr "Vytváram adresár"
 
-#: thonny/editors.py:251
+#: thonny/editors.py:258
 msgid "Loading %s"
 msgstr "Načítavam %s"
 
-#: thonny/editors.py:377
+#: thonny/editors.py:384
 msgid "Saving to %s"
 msgstr "Ukladám do %s"
 
-#: thonny/editors.py:702 thonny/editors.py:704
+#: thonny/editors.py:720 thonny/editors.py:722
 msgid "Save All files"
 msgstr "Uložiť všetky súbory"
 
-#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:869
+#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:877
 msgid "Configure interpreter..."
 msgstr "Nastaviť prekladač..."
 
-#: thonny/workbench.py:1581
+#: thonny/workbench.py:1589
 msgid "Device"
 msgstr "Zariadenie"
 
@@ -1400,7 +1400,7 @@ msgstr "Inštalujem"
 msgid "Package manager is not available for this interpreter"
 msgstr "Správca balíkov nie je pre tento prekladač dostupný"
 
-#: thonny/base_file_browser.py:1191 thonny/plugins/pip_gui.py:1516
+#: thonny/base_file_browser.py:1205 thonny/plugins/pip_gui.py:1516
 msgid "Not supported"
 msgstr "Nepodporované"
 
@@ -1416,11 +1416,11 @@ msgstr "Pred spustením správcu balíkov musíte zastaviť váš program."
 msgid "Open evaluated values in Object inspector"
 msgstr "Otvoriť sledované hodnoty v Inšpektorovi objektov"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:208
+#: thonny/plugins/cpython_frontend/cp_front.py:209
 msgid "Python executable"
 msgstr "Spustiteľný súbor Pythonu"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:231
+#: thonny/plugins/cpython_frontend/cp_front.py:232
 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)!"
@@ -1432,11 +1432,11 @@ msgstr "Tlačidlo na výber súborov nemusí správne fungovať pri výbere spus
 msgid "Remote Python 3 (SSH)"
 msgstr "Vzdialený Python 3 (SSH)"
 
-#: thonny/plugins/micropython/mp_front.py:310
+#: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
 msgstr "Nepripojený"
 
-#: thonny/plugins/micropython/mp_front.py:515
+#: thonny/plugins/micropython/mp_front.py:521
 msgid "Advanced options"
 msgstr "Pokročilé možnosti"
 
@@ -1490,27 +1490,27 @@ msgstr "Čakajte, prosím"
 msgid "Search on PyPI"
 msgstr "Hľadať na PyPI"
 
-#: thonny/base_file_browser.py:686
+#: thonny/base_file_browser.py:689
 msgid "Open in Thonny's text editor"
 msgstr "Otvoriť v textovom editore Thonny"
 
-#: thonny/base_file_browser.py:339
+#: thonny/base_file_browser.py:342
 msgid "Storage space on this drive or filesystem"
 msgstr "Úložný priestor na tejto jednotke alebo v systéme súborov"
 
-#: thonny/base_file_browser.py:340
+#: thonny/base_file_browser.py:343
 msgid "total space"
 msgstr "celkové mesto"
 
-#: thonny/base_file_browser.py:342
+#: thonny/base_file_browser.py:345
 msgid "used space"
 msgstr "použité miesto"
 
-#: thonny/base_file_browser.py:343
+#: thonny/base_file_browser.py:346
 msgid "free space"
 msgstr "voľné miesto"
 
-#: thonny/base_file_browser.py:350
+#: thonny/base_file_browser.py:353
 msgid "Storage info"
 msgstr "Informácie o úložnom priestore"
 
@@ -1534,29 +1534,29 @@ msgstr "Názov"
 msgid "Size (bytes)"
 msgstr "Veľkosť (bajty)"
 
-#: thonny/base_file_browser.py:870
+#: thonny/base_file_browser.py:875
 msgid "Enter name for new directory under\n"
 "%s"
 msgstr "Zadajte meno nového adresára pod\n"
 "%s"
 
-#: thonny/base_file_browser.py:893
+#: thonny/base_file_browser.py:898
 msgid "Nothing selected"
 msgstr "Nič nie je vybrané"
 
-#: thonny/base_file_browser.py:893
+#: thonny/base_file_browser.py:898
 msgid "Select an item and try again!"
 msgstr "Vyberte položku a skúste to znovu!"
 
-#: thonny/base_file_browser.py:1311
+#: thonny/base_file_browser.py:1325
 msgid "Open from %s"
 msgstr "Otvoriť z %s"
 
-#: thonny/base_file_browser.py:1314
+#: thonny/base_file_browser.py:1328
 msgid "Save to %s"
 msgstr "Uložiť do %s"
 
-#: thonny/base_file_browser.py:1333
+#: thonny/base_file_browser.py:1347
 msgid "File name:"
 msgstr "Názov súboru:"
 
@@ -1625,11 +1625,11 @@ msgid "Back to\n"
 msgstr "Späť do\n"
 "%s"
 
-#: thonny/plugins/micropython/mp_front.py:439
+#: thonny/plugins/micropython/mp_front.py:444
 msgid "Port or WebREPL"
 msgstr "WebREPL port"
 
-#: thonny/plugins/micropython/mp_front.py:583
+#: thonny/plugins/micropython/mp_front.py:589
 msgid "Password"
 msgstr "Heslo"
 
@@ -1649,35 +1649,35 @@ msgstr "Vyberte, či majú okná pre výber súborov skončiť za hlavným oknom
 msgid "Environment variables (one KEY=VALUE per line)"
 msgstr "Premenné prostredia (jeden KĽÚČ=HODNOTA na riadok)"
 
-#: thonny/base_file_browser.py:715
+#: thonny/base_file_browser.py:718
 msgid "New file"
 msgstr "Nový súbor"
 
-#: thonny/base_file_browser.py:733
+#: thonny/base_file_browser.py:736
 msgid "Rename"
 msgstr "Premenovať"
 
-#: thonny/base_file_browser.py:919
+#: thonny/base_file_browser.py:924
 msgid "Rename '%s'"
 msgstr "Premenovať '%s'"
 
-#: thonny/base_file_browser.py:919
+#: thonny/base_file_browser.py:924
 msgid "Enter new name"
 msgstr "Zadajte nový názov"
 
-#: thonny/base_file_browser.py:1007
+#: thonny/base_file_browser.py:1012
 msgid "Paste failed"
 msgstr "Vložiť zlyhané"
 
-#: thonny/base_file_browser.py:1007
+#: thonny/base_file_browser.py:1012
 msgid "There are conflicting folders"
 msgstr "Našli ste priečinky s konfliktami"
 
-#: thonny/base_file_browser.py:1129
+#: thonny/base_file_browser.py:1140
 msgid "File already exists"
 msgstr "Súbor už existuje"
 
-#: thonny/base_file_browser.py:1194
+#: thonny/base_file_browser.py:1208
 msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
 msgstr "Ak sa jedná o textový súbor, môžete nastaviť jeho otváranie pomocou Thonny tak, že naň kliknete pravým tlačidlom a vyberiete 'Nastaviť … súbory'."
 
@@ -1685,55 +1685,55 @@ msgstr "Ak sa jedná o textový súbor, môžete nastaviť jeho otváranie pomoc
 msgid "Python files"
 msgstr "Súbory Pythonu"
 
-#: thonny/editors.py:119 thonny/editors.py:182
+#: thonny/editors.py:122 thonny/editors.py:189
 msgid "<untitled>"
 msgstr "<nepomenované>"
 
-#: thonny/editors.py:146
+#: thonny/editors.py:149
 msgid "File is gone"
 msgstr "Súbor zmizol"
 
-#: thonny/editors.py:149
+#: thonny/editors.py:152
 msgid "Do you want to also close the editor?"
 msgstr "Chcete tiež zavrieť editor?"
 
-#: thonny/editors.py:165
+#: thonny/editors.py:168
 msgid "External modification"
 msgstr "Externá modifikácia"
 
-#: thonny/editors.py:168
+#: thonny/editors.py:171
 msgid "Do you want to discard current editor content and reload the file from disk?"
 msgstr "Chcete zahodiť aktuálny obsah editora a znovu načítať súbor z disku?"
 
-#: thonny/editors.py:572
+#: thonny/editors.py:580
 msgid "Python files usually have .py extension."
 msgstr "Súbory Pythonu majú zvyčajne príponu .py."
 
-#: thonny/editors.py:574
+#: thonny/editors.py:582
 msgid "Did you mean '%s'?"
 msgstr "Mali ste na mysli '%s'?"
 
-#: thonny/editors.py:733
+#: thonny/editors.py:751
 msgid "Move / rename..."
 msgstr "Presunút / premenovať…"
 
-#: thonny/editors.py:742
+#: thonny/editors.py:760
 msgid "Go to line..."
 msgstr "Prejsť na riadok…"
 
-#: thonny/editors.py:977
+#: thonny/editors.py:1003
 msgid "Line number"
 msgstr "Číslo riadka"
 
-#: thonny/editors.py:1123
+#: thonny/editors.py:1149
 msgid "Do you want to save files before closing?"
 msgstr "Chcete uložiť súbory pred ich uzatvorením?"
 
-#: thonny/editors.py:1125
+#: thonny/editors.py:1151
 msgid "Do you want to save file before closing?"
 msgstr "Chcete uložiť súbor pred jeho uzatvorením?"
 
-#: thonny/editors.py:1128
+#: thonny/editors.py:1154
 msgid "Save On Close"
 msgstr "Uložiť pri zatvorení"
 
@@ -1745,7 +1745,7 @@ msgstr "Príkaz je nedostupný"
 msgid "This command is not available if Thonny is run via Flatpak"
 msgstr "Tento príkaz nie je dostupný, ak je Thonny spustený pomocou Flatpaku"
 
-#: thonny/workbench.py:686 thonny/workbench.py:786
+#: thonny/workbench.py:694 thonny/workbench.py:794
 msgid "Support Ukraine"
 msgstr "Podporte Ukrajinu"
 
@@ -1789,23 +1789,23 @@ msgstr "Nepodarilo sa nájsť definíciu"
 msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
 msgstr "Vyčistiť Shell pred spustením nového procesu (Spustenie, Ladenie, Zastavenie/Reštart…)"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:170
+#: thonny/plugins/cpython_frontend/cp_front.py:171
 msgid "Thonny's Python"
 msgstr "Python pre Thonny"
 
-#: thonny/plugins/micropython/mp_front.py:487
+#: thonny/plugins/micropython/mp_front.py:492
 msgid "Interrupt working program on connect"
 msgstr "Prerušiť bežiaci program pri pripojení"
 
-#: thonny/plugins/micropython/mp_front.py:494
+#: thonny/plugins/micropython/mp_front.py:500
 msgid "Synchronize device's real time clock"
 msgstr "Synchronizovať hardvérové hodiny zariadenia"
 
-#: thonny/plugins/micropython/mp_front.py:500
+#: thonny/plugins/micropython/mp_front.py:506
 msgid "Use local time in real time clock"
 msgstr "Použiť miestny čas v hardvérových hodinách"
 
-#: thonny/plugins/micropython/mp_front.py:506
+#: thonny/plugins/micropython/mp_front.py:512
 msgid "Restart interpreter before running a script"
 msgstr "Reštartovať interpreter pred spustením skriptu"
 
@@ -1815,51 +1815,51 @@ msgid "This doesn't look like MicroPython/CircuitPython package.\n"
 msgstr "Toto nevyzerá ako balíček pre MicroPython/CircuitPython.\n"
 "Naozaj ho chcete nainštalovať?"
 
-#: thonny/base_file_browser.py:844
+#: thonny/base_file_browser.py:849
 msgid "Moving to Trash"
 msgstr "Presúvam do koša"
 
-#: thonny/base_file_browser.py:845
+#: thonny/base_file_browser.py:850
 msgid "Move %s to Trash?"
 msgstr "Presúnúť %s do koša?"
 
-#: thonny/base_file_browser.py:852
+#: thonny/base_file_browser.py:857
 msgid "Moving %s to Trash"
 msgstr "Presúvam %s do koša"
 
-#: thonny/base_file_browser.py:659
+#: thonny/base_file_browser.py:662
 msgid "Open in default external app"
 msgstr "Otvoriť v predvolenom externom programe"
 
-#: thonny/base_file_browser.py:1192
+#: thonny/base_file_browser.py:1206
 msgid "Opening remote files in external app is not supported."
 msgstr "Otváranie vzdialených súborov v externom programe nie je podporované."
 
-#: thonny/base_file_browser.py:1199
+#: thonny/base_file_browser.py:1213
 msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
 msgstr "Ak potrebujete súbor otvoriť v externom program, najprv ho stiahnite do miestneho priečinka a otvorte ho odtiaľ!"
 
-#: thonny/editors.py:147
+#: thonny/editors.py:150
 msgid "Looks like '%s' was deleted or moved."
 msgstr "Zdá sa, že '%s' bol odstránený alebo presunutý."
 
-#: thonny/editors.py:166
+#: thonny/editors.py:169
 msgid "Looks like '%s' was modified outside of the editor."
 msgstr "Zdá sa, že '%s' bol upravený mimo editora."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:229
+#: thonny/plugins/cpython_frontend/cp_front.py:230
 msgid "NB! Thonny only supports Python %s and later"
 msgstr "Pozor, Thonny podporuje iba Python %s a vyšší"
 
-#: thonny/editors.py:977
+#: thonny/editors.py:1003
 msgid "Go to line"
 msgstr "Prejsť na riadok"
 
-#: thonny/workbench.py:689
+#: thonny/workbench.py:697
 msgid "Support"
 msgstr "Podpora"
 
-#: thonny/editors.py:386 thonny/editors.py:401
+#: thonny/editors.py:393 thonny/editors.py:408
 msgid "Could not save"
 msgstr "Nepodarilo sa uložiť"
 
@@ -1873,13 +1873,13 @@ msgid "If you quote the value of an environment variable, the quotes will be par
 msgstr "Ak použijete v hodnote premennej prostredia úvodzovky, tie sa stanú súčasťou jej hodnoty.\n"
 "Toto ste zamýšľali?"
 
-#: thonny/workbench.py:859
+#: thonny/workbench.py:867
 msgid "Install MicroPython"
-msgstr ""
+msgstr "Inštalovať MicroPython"
 
-#: thonny/workbench.py:863
+#: thonny/workbench.py:871
 msgid "Install CircuitPython"
-msgstr ""
+msgstr "Inštalovať CircuitPython"
 
 #: thonny/plugins/backend_config_page.py:212
 msgid "Make uploaded shebang scripts executable"
@@ -1891,7 +1891,7 @@ msgstr ""
 
 #: thonny/plugins/files.py:224
 msgid "Activate virtual environment"
-msgstr ""
+msgstr "Aktivovať virtuálne prostredie"
 
 #: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
 msgid "Target"
@@ -1901,32 +1901,32 @@ msgstr ""
 msgid "Visualize current script at Python Tutor"
 msgstr ""
 
-#: thonny/plugins/todo_view.py:42
+#: thonny/plugins/todo_view.py:44
 msgid "Line"
-msgstr ""
+msgstr "Riadok"
 
-#: thonny/plugins/todo_view.py:43
+#: thonny/plugins/todo_view.py:45
 msgid "Info"
 msgstr ""
 
-#: thonny/plugins/todo_view.py:121
+#: thonny/plugins/todo_view.py:123
 msgid "No line marked with #todo found"
 msgstr ""
 
-#: thonny/plugins/todo_view.py:141
+#: thonny/plugins/todo_view.py:143
 msgid "TODO"
 msgstr ""
 
 #: thonny/plugins/circuitpython/cirpy_front.py:98
-#: thonny/plugins/micropython/mp_front.py:530
+#: thonny/plugins/micropython/mp_front.py:536
 msgid "Install or update %s"
-msgstr ""
+msgstr "Inštalovať alebo aktualizovať %s"
 
 #: thonny/plugins/cpython_frontend/__init__.py:24
 msgid "Local Python 3"
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:239
+#: thonny/plugins/cpython_frontend/cp_front.py:240
 msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
 msgstr ""
 
@@ -1938,3 +1938,11 @@ msgstr ""
 msgid "Default password"
 msgstr ""
 
+#: thonny/running.py:338
+msgid "Information"
+msgstr ""
+
+#: thonny/running.py:339
+msgid "For debugging the program must be saved first."
+msgstr ""
+
diff --git a/thonny/locale/sl_SI/LC_MESSAGES/thonny.mo b/thonny/locale/sl_SI/LC_MESSAGES/thonny.mo
index fd41797..73e6d3b 100644
Binary files a/thonny/locale/sl_SI/LC_MESSAGES/thonny.mo and b/thonny/locale/sl_SI/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/sq_AL/LC_MESSAGES/thonny.mo b/thonny/locale/sq_AL/LC_MESSAGES/thonny.mo
index d33a777..6ffdd6d 100644
Binary files a/thonny/locale/sq_AL/LC_MESSAGES/thonny.mo and b/thonny/locale/sq_AL/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/sv_SE/LC_MESSAGES/thonny.mo b/thonny/locale/sv_SE/LC_MESSAGES/thonny.mo
index dafeaea..c455289 100644
Binary files a/thonny/locale/sv_SE/LC_MESSAGES/thonny.mo and b/thonny/locale/sv_SE/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/ta_IN/LC_MESSAGES/thonny.mo b/thonny/locale/ta_IN/LC_MESSAGES/thonny.mo
index 9a996d9..bb06112 100644
Binary files a/thonny/locale/ta_IN/LC_MESSAGES/thonny.mo and b/thonny/locale/ta_IN/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/th_TH/LC_MESSAGES/thonny.mo b/thonny/locale/th_TH/LC_MESSAGES/thonny.mo
index 3e72736..228e1ac 100644
Binary files a/thonny/locale/th_TH/LC_MESSAGES/thonny.mo and b/thonny/locale/th_TH/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/thonny.pot b/thonny/locale/thonny.pot
index d2dd40b..aad0474 100644
--- a/thonny/locale/thonny.pot
+++ b/thonny/locale/thonny.pot
@@ -1,303 +1,303 @@
 # Translations template for PROJECT.
-# Copyright (C) 2022 ORGANIZATION
+# Copyright (C) 2023 ORGANIZATION
 # This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
 #
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2022-09-11 16:31+0300\n"
+"POT-Creation-Date: 2023-06-02 12:43+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.10.3\n"
+"Generated-By: Babel 2.12.1\n"
 
-#: thonny/assistance.py:985 thonny/plugins/assistant_config_page.py:74
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr ""
 
-#: thonny/base_file_browser.py:91 thonny/memory.py:63
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
 msgid "Name"
 msgstr ""
 
-#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:777
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
 msgid "Modified"
 msgstr ""
 
-#: thonny/base_file_browser.py:95
+#: thonny/base_file_browser.py:96
 msgid "Size (bytes)"
 msgstr ""
 
-#: thonny/base_file_browser.py:290
+#: thonny/base_file_browser.py:294
 #, python-format
 msgid "%d items"
 msgstr ""
 
-#: thonny/base_file_browser.py:342
+#: thonny/base_file_browser.py:346
 msgid "Storage space on this drive or filesystem"
 msgstr ""
 
-#: thonny/base_file_browser.py:343
+#: thonny/base_file_browser.py:347
 msgid "total space"
 msgstr ""
 
-#: thonny/base_file_browser.py:345
+#: thonny/base_file_browser.py:349
 msgid "used space"
 msgstr ""
 
-#: thonny/base_file_browser.py:346
+#: thonny/base_file_browser.py:350
 msgid "free space"
 msgstr ""
 
-#: thonny/base_file_browser.py:353
+#: thonny/base_file_browser.py:357
 msgid "Storage info"
 msgstr ""
 
-#: thonny/base_file_browser.py:644
+#: thonny/base_file_browser.py:648
 msgid "Refresh"
 msgstr ""
 
-#: thonny/base_file_browser.py:646
+#: thonny/base_file_browser.py:650
 msgid "Open in system file manager"
 msgstr ""
 
-#: thonny/base_file_browser.py:653
+#: thonny/base_file_browser.py:657
 msgid "Focus into"
 msgstr ""
 
-#: thonny/base_file_browser.py:657
+#: thonny/base_file_browser.py:661
 msgid "Open in Thonny"
 msgstr ""
 
-#: thonny/base_file_browser.py:662
+#: thonny/base_file_browser.py:666
 msgid "Open in default external app"
 msgstr ""
 
-#: thonny/base_file_browser.py:669 thonny/base_file_browser.py:696
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
 #, python-format
 msgid "Configure %s files"
 msgstr ""
 
-#: thonny/base_file_browser.py:674
+#: thonny/base_file_browser.py:678
 msgid "Hide hidden files"
 msgstr ""
 
-#: thonny/base_file_browser.py:674
+#: thonny/base_file_browser.py:678
 msgid "Show hidden files"
 msgstr ""
 
-#: thonny/base_file_browser.py:688
+#: thonny/base_file_browser.py:692
 msgid "Open in system default app"
 msgstr ""
 
-#: thonny/base_file_browser.py:689
+#: thonny/base_file_browser.py:693
 msgid "Open in Thonny's text editor"
 msgstr ""
 
-#: thonny/base_file_browser.py:697
+#: thonny/base_file_browser.py:701
 #, python-format
 msgid ""
 "What to do with a %s file when you double-click it in Thonny's file "
 "browser?"
 msgstr ""
 
-#: thonny/base_file_browser.py:718
+#: thonny/base_file_browser.py:722
 msgid "New file"
 msgstr ""
 
-#: thonny/base_file_browser.py:721 thonny/base_file_browser.py:874
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
 msgid "New directory"
 msgstr ""
 
-#: thonny/base_file_browser.py:724 thonny/plugins/common_editing_commands.py:49
-#: thonny/ui_utils.py:2295
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
 msgid "Cut"
 msgstr ""
 
-#: thonny/base_file_browser.py:725 thonny/plugins/common_editing_commands.py:61
-#: thonny/ui_utils.py:2296
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
 msgid "Copy"
 msgstr ""
 
-#: thonny/base_file_browser.py:727 thonny/base_file_browser.py:733
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2297
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
 msgid "Paste"
 msgstr ""
 
-#: thonny/base_file_browser.py:736
+#: thonny/base_file_browser.py:740
 msgid "Rename"
 msgstr ""
 
-#: thonny/base_file_browser.py:739
+#: thonny/base_file_browser.py:743
 msgid "Move to Trash"
 msgstr ""
 
-#: thonny/base_file_browser.py:742
+#: thonny/base_file_browser.py:746
 msgid "Delete"
 msgstr ""
 
-#: thonny/base_file_browser.py:745
+#: thonny/base_file_browser.py:749
 msgid "Properties"
 msgstr ""
 
-#: thonny/base_file_browser.py:747
+#: thonny/base_file_browser.py:751
 msgid "Storage space"
 msgstr ""
 
-#: thonny/base_file_browser.py:757
+#: thonny/base_file_browser.py:761
 msgid "Path"
 msgstr ""
 
-#: thonny/base_file_browser.py:759
+#: thonny/base_file_browser.py:763
 msgid "Directory properties"
 msgstr ""
 
-#: thonny/base_file_browser.py:761
+#: thonny/base_file_browser.py:765
 msgid "File properties"
 msgstr ""
 
-#: thonny/base_file_browser.py:763
+#: thonny/base_file_browser.py:767
 msgid "bytes"
 msgstr ""
 
-#: thonny/base_file_browser.py:766
+#: thonny/base_file_browser.py:770
 msgid "Size"
 msgstr ""
 
-#: thonny/base_file_browser.py:838
+#: thonny/base_file_browser.py:842
 #, python-format
 msgid "Deleting %s"
 msgstr ""
 
-#: thonny/base_file_browser.py:849
+#: thonny/base_file_browser.py:853
 msgid "Moving to Trash"
 msgstr ""
 
-#: thonny/base_file_browser.py:850
+#: thonny/base_file_browser.py:854
 #, python-format
 msgid "Move %s to Trash?"
 msgstr ""
 
-#: thonny/base_file_browser.py:857
+#: thonny/base_file_browser.py:861
 #, python-format
 msgid "Moving %s to Trash"
 msgstr ""
 
-#: thonny/base_file_browser.py:875
+#: thonny/base_file_browser.py:879
 #, python-format
 msgid ""
 "Enter name for new directory under\n"
 "%s"
 msgstr ""
 
-#: thonny/base_file_browser.py:898
+#: thonny/base_file_browser.py:902
 msgid "Nothing selected"
 msgstr ""
 
-#: thonny/base_file_browser.py:898
+#: thonny/base_file_browser.py:902
 msgid "Select an item and try again!"
 msgstr ""
 
-#: thonny/base_file_browser.py:924
+#: thonny/base_file_browser.py:928
 #, python-format
 msgid "Rename '%s'"
 msgstr ""
 
-#: thonny/base_file_browser.py:924
+#: thonny/base_file_browser.py:928
 msgid "Enter new name"
 msgstr ""
 
-#: thonny/base_file_browser.py:1012
+#: thonny/base_file_browser.py:1016
 msgid "Paste failed"
 msgstr ""
 
-#: thonny/base_file_browser.py:1012
+#: thonny/base_file_browser.py:1016
 msgid "There are conflicting folders"
 msgstr ""
 
-#: thonny/base_file_browser.py:1140
+#: thonny/base_file_browser.py:1144
 msgid "File already exists"
 msgstr ""
 
-#: thonny/base_file_browser.py:1205 thonny/plugins/pip_gui.py:1516
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
 msgid "Not supported"
 msgstr ""
 
-#: thonny/base_file_browser.py:1206
+#: thonny/base_file_browser.py:1210
 msgid "Opening remote files in external app is not supported."
 msgstr ""
 
-#: thonny/base_file_browser.py:1208
+#: thonny/base_file_browser.py:1212
 msgid ""
 "If it is a text file, then you can configure it to open in Thonny by "
 "right-clicking it and selecting 'Configure ... files'."
 msgstr ""
 
-#: thonny/base_file_browser.py:1213
+#: thonny/base_file_browser.py:1217
 msgid ""
 "If the file needs to be opened in external app, then download it to a "
 "local directory and open it from there!"
 msgstr ""
 
-#: thonny/base_file_browser.py:1254 thonny/editors.py:979 thonny/editors.py:981
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
 msgid "Deleting"
 msgstr ""
 
-#: thonny/base_file_browser.py:1261
+#: thonny/base_file_browser.py:1265
 msgid "Creating directory"
 msgstr ""
 
-#: thonny/base_file_browser.py:1325
+#: thonny/base_file_browser.py:1329
 #, python-format
 msgid "Open from %s"
 msgstr ""
 
-#: thonny/base_file_browser.py:1328
+#: thonny/base_file_browser.py:1332
 #, python-format
 msgid "Save to %s"
 msgstr ""
 
-#: thonny/base_file_browser.py:1347
+#: thonny/base_file_browser.py:1351
 msgid "File name:"
 msgstr ""
 
-#: thonny/base_file_browser.py:1369 thonny/config_ui.py:41 thonny/export.py:25
-#: thonny/plugins/about.py:111 thonny/plugins/backend_config_page.py:285
-#: thonny/ui_utils.py:154 thonny/ui_utils.py:1816 thonny/workdlg.py:206
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
 msgid "OK"
 msgstr ""
 
-#: thonny/base_file_browser.py:1378 thonny/config_ui.py:42 thonny/export.py:28
-#: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
-#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1819
-#: thonny/workdlg.py:164 thonny/workdlg.py:209
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
 msgid "Cancel"
 msgstr ""
 
-#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
-#: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
 msgid "Error"
 msgstr ""
 
-#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
 msgid "You need to select a file!"
 msgstr ""
 
-#: thonny/base_file_browser.py:1423
+#: thonny/base_file_browser.py:1427
 msgid "Overwrite?"
 msgstr ""
 
-#: thonny/base_file_browser.py:1423
+#: thonny/base_file_browser.py:1427
 #, python-format
 msgid "Do you want to overwrite '%s' ?"
 msgstr ""
 
-#: thonny/base_file_browser.py:1572
+#: thonny/base_file_browser.py:1576
 msgid "This computer"
 msgstr ""
 
@@ -305,222 +305,300 @@ msgstr ""
 msgid "Thonny options"
 msgstr ""
 
-#: thonny/editors.py:35
+#: thonny/editors.py:38
 msgid "Python files"
 msgstr ""
 
-#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:270
-#: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
 msgid "all files"
 msgstr ""
 
-#: thonny/editors.py:122 thonny/editors.py:189
+#: thonny/editors.py:123 thonny/editors.py:189
 msgid "<untitled>"
 msgstr ""
 
-#: thonny/editors.py:149
+#: thonny/editors.py:150
 msgid "File is gone"
 msgstr ""
 
-#: thonny/editors.py:150
+#: thonny/editors.py:151
 #, python-format
 msgid "Looks like '%s' was deleted or moved."
 msgstr ""
 
-#: thonny/editors.py:152
+#: thonny/editors.py:153
 msgid "Do you want to also close the editor?"
 msgstr ""
 
-#: thonny/editors.py:168
+#: thonny/editors.py:169
 msgid "External modification"
 msgstr ""
 
-#: thonny/editors.py:169
+#: thonny/editors.py:170
 #, python-format
 msgid "Looks like '%s' was modified outside of the editor."
 msgstr ""
 
-#: thonny/editors.py:171
+#: thonny/editors.py:172
 msgid ""
 "Do you want to discard current editor content and reload the file from "
 "disk?"
 msgstr ""
 
-#: thonny/editors.py:258
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
+msgid "Problem"
+msgstr ""
+
+#: thonny/editors.py:213
 #, python-format
-msgid "Loading %s"
+msgid "%s doesn't look like a text file"
+msgstr ""
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr ""
+
+#: thonny/editors.py:220
+msgid ""
+"This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
 msgstr ""
 
 #: thonny/editors.py:260
+#, python-format
+msgid "Loading %s"
+msgstr ""
+
+#: thonny/editors.py:262
 msgid "Loading"
 msgstr ""
 
-#: thonny/editors.py:384
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr ""
+
+#: thonny/editors.py:296
+msgid ""
+"This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr ""
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr ""
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr ""
+
+#: thonny/editors.py:390
 #, python-format
 msgid "Saving to %s"
 msgstr ""
 
-#: thonny/editors.py:389
+#: thonny/editors.py:395
 msgid "Saving"
 msgstr ""
 
-#: thonny/editors.py:393 thonny/editors.py:408
+#: thonny/editors.py:399 thonny/editors.py:414
 msgid "Could not save"
 msgstr ""
 
-#: thonny/editors.py:579 thonny/plugins/micropython/pip_gui.py:23
-#: thonny/plugins/pip_gui.py:953
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr ""
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr ""
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr ""
+
+#: thonny/editors.py:491
+#, python-format
+msgid ""
+"If you name your script '%s', you won't be able to import the library "
+"module named '%s'"
+msgstr ""
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr ""
+
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
 msgid "Confirmation"
 msgstr ""
 
-#: thonny/editors.py:580
+#: thonny/editors.py:588
 msgid "Python files usually have .py extension."
 msgstr ""
 
-#: thonny/editors.py:582
+#: thonny/editors.py:590
 #, python-format
 msgid "Did you mean '%s'?"
 msgstr ""
 
-#: thonny/editors.py:650 thonny/editors.py:652
+#: thonny/editors.py:658 thonny/editors.py:660
 msgid "New"
 msgstr ""
 
-#: thonny/editors.py:663
+#: thonny/editors.py:671
 msgid "Open..."
 msgstr ""
 
-#: thonny/editors.py:665
+#: thonny/editors.py:673
 msgid "Load"
 msgstr ""
 
-#: thonny/editors.py:674
+#: thonny/editors.py:682
 msgid "Recent files"
 msgstr ""
 
-#: thonny/editors.py:685 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
-#: thonny/ui_utils.py:1872 thonny/workdlg.py:162
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
 msgid "Close"
 msgstr ""
 
-#: thonny/editors.py:696 thonny/ui_utils.py:493
+#: thonny/editors.py:704 thonny/ui_utils.py:498
 msgid "Close all"
 msgstr ""
 
-#: thonny/editors.py:706 thonny/editors.py:708
+#: thonny/editors.py:714 thonny/editors.py:716
 msgid "Save"
 msgstr ""
 
-#: thonny/editors.py:720 thonny/editors.py:722
+#: thonny/editors.py:728 thonny/editors.py:730
 msgid "Save All files"
 msgstr ""
 
-#: thonny/editors.py:731
+#: thonny/editors.py:739
 msgid "Save as..."
 msgstr ""
 
-#: thonny/editors.py:742
+#: thonny/editors.py:750
 msgid "Save copy..."
 msgstr ""
 
-#: thonny/editors.py:751
+#: thonny/editors.py:759
 msgid "Move / rename..."
 msgstr ""
 
-#: thonny/editors.py:760
+#: thonny/editors.py:768
 msgid "Go to line..."
 msgstr ""
 
-#: thonny/editors.py:1003
+#: thonny/editors.py:1010
 msgid "Go to line"
 msgstr ""
 
-#: thonny/editors.py:1003
+#: thonny/editors.py:1010
 msgid "Line number"
 msgstr ""
 
-#: thonny/editors.py:1149
+#: thonny/editors.py:1053
+#, python-format
+msgid ""
+"Got permission error when trying to load\n"
+"%s"
+msgstr ""
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr ""
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr ""
+
+#: thonny/editors.py:1156
 msgid "Do you want to save files before closing?"
 msgstr ""
 
-#: thonny/editors.py:1151
+#: thonny/editors.py:1158
 msgid "Do you want to save file before closing?"
 msgstr ""
 
-#: thonny/editors.py:1154
+#: thonny/editors.py:1161
 msgid "Save On Close"
 msgstr ""
 
-#: thonny/memory.py:64 thonny/plugins/object_inspector.py:539
-#: thonny/plugins/object_inspector.py:618
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
 msgid "Value ID"
 msgstr ""
 
 #: thonny/memory.py:65 thonny/plugins/heap.py:23
-#: thonny/plugins/object_inspector.py:540
-#: thonny/plugins/object_inspector.py:619
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
 msgid "Value"
 msgstr ""
 
-#: thonny/misc_utils.py:151
+#: thonny/misc_utils.py:177
 #, python-format
 msgid "Could not find disk '%s'. Do you want to locate it yourself?"
 msgstr ""
 
-#: thonny/misc_utils.py:154
+#: thonny/misc_utils.py:180
 #, python-format
 msgid "Found several '%s' disks. Do you want to choose one yourself?"
 msgstr ""
 
-#: thonny/misc_utils.py:170
+#: thonny/misc_utils.py:196
 msgid "Can't find suitable disk"
 msgstr ""
 
-#: thonny/misc_utils.py:513
+#: thonny/misc_utils.py:539
 msgid "Command not available"
 msgstr ""
 
-#: thonny/misc_utils.py:514
+#: thonny/misc_utils.py:540
 msgid "This command is not available if Thonny is run via Flatpak"
 msgstr ""
 
-#: thonny/running.py:115
+#: thonny/running.py:160
 msgid "Run current script"
 msgstr ""
 
-#: thonny/running.py:116 thonny/workbench.py:372
+#: thonny/running.py:161 thonny/workbench.py:378
 msgid "Run"
 msgstr ""
 
-#: thonny/running.py:146
+#: thonny/running.py:191
 msgid "Run current script in terminal"
 msgstr ""
 
-#: thonny/running.py:159
+#: thonny/running.py:204
 msgid "Stop/Restart backend"
 msgstr ""
 
-#: thonny/running.py:160
+#: thonny/running.py:205
 msgid "Stop"
 msgstr ""
 
-#: thonny/running.py:171
+#: thonny/running.py:216
 msgid "Interrupt execution"
 msgstr ""
 
-#: thonny/running.py:184
+#: thonny/running.py:229
 msgid "Send EOF / Soft reboot"
 msgstr ""
 
-#: thonny/running.py:195
+#: thonny/running.py:240
 msgid "Disconnect"
 msgstr ""
 
-#: thonny/running.py:338
+#: thonny/running.py:392
 msgid "Information"
 msgstr ""
 
-#: thonny/running.py:339
+#: thonny/running.py:393
 msgid "For debugging the program must be saved first."
 msgstr ""
 
@@ -529,7 +607,7 @@ msgid "Clear shell"
 msgstr ""
 
 #: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
-#: thonny/workbench.py:162
+#: thonny/workbench.py:164
 msgid "Shell"
 msgstr ""
 
@@ -545,41 +623,41 @@ msgstr ""
 msgid "Show Plotter"
 msgstr ""
 
-#: thonny/shell.py:1659
+#: thonny/shell.py:1660
 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:1670
+#: thonny/shell.py:1671
 msgid "Wrap text (may be slow)"
 msgstr ""
 
-#: thonny/shell.py:1712
+#: thonny/shell.py:1713
 #, python-format
 msgid "Squeezed text (%d characters)"
 msgstr ""
 
-#: thonny/shell.py:1882
+#: thonny/shell.py:1883
 msgid ""
 "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr ""
 
-#: thonny/shell.py:1884
+#: thonny/shell.py:1885
 msgid "See Help for details."
 msgstr ""
 
-#: thonny/ui_utils.py:492
+#: thonny/ui_utils.py:497
 msgid "Close others"
 msgstr ""
 
-#: thonny/ui_utils.py:1722
+#: thonny/ui_utils.py:1734
 msgid "Copying"
 msgstr ""
 
-#: thonny/ui_utils.py:1725
+#: thonny/ui_utils.py:1737
 #, python-format
 msgid ""
 "Copying\n"
@@ -588,127 +666,127 @@ msgid ""
 "  %s"
 msgstr ""
 
-#: thonny/ui_utils.py:1867
+#: thonny/ui_utils.py:1879
 msgid "Copy to clipboard"
 msgstr ""
 
-#: thonny/ui_utils.py:2301
+#: thonny/ui_utils.py:2345
 msgid "Select All"
 msgstr ""
 
-#: thonny/workbench.py:369
+#: thonny/workbench.py:375
 msgid "File"
 msgstr ""
 
-#: thonny/workbench.py:370
+#: thonny/workbench.py:376
 msgid "Edit"
 msgstr ""
 
-#: thonny/workbench.py:371
+#: thonny/workbench.py:377
 msgid "View"
 msgstr ""
 
-#: thonny/workbench.py:373
+#: thonny/workbench.py:379
 msgid "Tools"
 msgstr ""
 
-#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:374
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
 msgid "Help"
 msgstr ""
 
-#: thonny/workbench.py:591
+#: thonny/workbench.py:598
 msgid "Exit"
 msgstr ""
 
-#: thonny/workbench.py:601
+#: thonny/workbench.py:608
 msgid "Options..."
 msgstr ""
 
-#: thonny/workbench.py:608
+#: thonny/workbench.py:615
 msgid "Increase font size"
 msgstr ""
 
-#: thonny/workbench.py:618
+#: thonny/workbench.py:625
 msgid "Decrease font size"
 msgstr ""
 
-#: thonny/workbench.py:630
+#: thonny/workbench.py:637
 msgid "Focus editor"
 msgstr ""
 
-#: thonny/workbench.py:639
+#: thonny/workbench.py:646
 msgid "Focus shell"
 msgstr ""
 
-#: thonny/workbench.py:650
+#: thonny/workbench.py:656
 msgid "Maximize view"
 msgstr ""
 
-#: thonny/workbench.py:662
+#: thonny/workbench.py:668
 msgid "Full screen"
 msgstr ""
 
-#: thonny/workbench.py:673
+#: thonny/workbench.py:679
 msgid "Change font size"
 msgstr ""
 
-#: thonny/workbench.py:674
+#: thonny/workbench.py:680
 msgid "Zoom"
 msgstr ""
 
-#: thonny/workbench.py:683
+#: thonny/workbench.py:689
 msgid "Exit Thonny"
 msgstr ""
 
-#: thonny/workbench.py:686
+#: thonny/workbench.py:692
 msgid "Quit"
 msgstr ""
 
-#: thonny/workbench.py:694 thonny/workbench.py:794
+#: thonny/workbench.py:700 thonny/workbench.py:799
 msgid "Support Ukraine"
 msgstr ""
 
-#: thonny/workbench.py:697
+#: thonny/workbench.py:703
 msgid "Support"
 msgstr ""
 
-#: thonny/workbench.py:867
+#: thonny/workbench.py:870
 msgid "Install MicroPython"
 msgstr ""
 
-#: thonny/workbench.py:871
+#: thonny/workbench.py:874
 msgid "Install CircuitPython"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:877
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
 msgid "Configure interpreter..."
 msgstr ""
 
-#: thonny/workbench.py:1244 thonny/workbench.py:1252
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
 #, python-format
 msgid "Overwriting theme '%s'"
 msgstr ""
 
-#: thonny/workbench.py:1436
+#: thonny/workbench.py:1438
 msgid "Program arguments:"
 msgstr ""
 
-#: thonny/workbench.py:1465
+#: thonny/workbench.py:1467
 msgid "Program arguments"
 msgstr ""
 
-#: thonny/workbench.py:1479
+#: thonny/workbench.py:1481
 msgid ""
 "Switch to\n"
 "regular\n"
 "mode"
 msgstr ""
 
-#: thonny/workbench.py:1490
+#: thonny/workbench.py:1492
 msgid "Regular mode"
 msgstr ""
 
-#: thonny/workbench.py:1491
+#: thonny/workbench.py:1493
 msgid ""
 "Configuration has been updated. Restart Thonny to start working in "
 "regular mode.\n"
@@ -716,23 +794,23 @@ msgid ""
 "(See 'Tools → Options → General' if you change your mind later.)"
 msgstr ""
 
-#: thonny/workbench.py:1589
+#: thonny/workbench.py:1591
 msgid "Device"
 msgstr ""
 
-#: thonny/workdlg.py:193
+#: thonny/workdlg.py:234
 msgid "Cancelling"
 msgstr ""
 
-#: thonny/workdlg.py:220
+#: thonny/workdlg.py:270
 msgid "Starting"
 msgstr ""
 
-#: thonny/plugins/about.py:24 thonny/plugins/about.py:151
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
 msgid "About Thonny"
 msgstr ""
 
-#: thonny/plugins/about.py:77
+#: thonny/plugins/about.py:81
 msgid ""
 "Made in\n"
 "University of Tartu, Estonia,\n"
@@ -742,7 +820,7 @@ msgid ""
 "and Cybernetica AS"
 msgstr ""
 
-#: thonny/plugins/about.py:97
+#: thonny/plugins/about.py:101
 msgid ""
 "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
@@ -752,11 +830,11 @@ msgid ""
 "for details"
 msgstr ""
 
-#: thonny/plugins/about.py:140
+#: thonny/plugins/about.py:142
 msgid "Version history"
 msgstr ""
 
-#: thonny/plugins/about.py:147
+#: thonny/plugins/about.py:149
 msgid "Report problems"
 msgstr ""
 
@@ -780,47 +858,47 @@ msgstr ""
 msgid "Disabled checks (one id per line)"
 msgstr ""
 
-#: thonny/plugins/ast_view.py:212
+#: thonny/plugins/ast_view.py:211
 msgid "Program tree"
 msgstr ""
 
-#: thonny/plugins/autocomplete.py:522
+#: thonny/plugins/autocomplete.py:529
 msgid "Auto-complete"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:91
+#: thonny/plugins/backend_config_page.py:90
 msgid "Which kind of interpreter should Thonny use for running your code?"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:110
+#: thonny/plugins/backend_config_page.py:109
 msgid "Details"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:212
+#: thonny/plugins/backend_config_page.py:210
 msgid "Make uploaded shebang scripts executable"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:251
+#: thonny/plugins/backend_config_page.py:249
 msgid "Authentication"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:253
+#: thonny/plugins/backend_config_page.py:251
 msgid ""
 "Enter the passphrase of your private key for\n"
 "{}"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:256
+#: thonny/plugins/backend_config_page.py:254
 msgid ""
 "Enter your password for\n"
 "{}"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:274
+#: thonny/plugins/backend_config_page.py:272
 msgid "Save password"
 msgstr ""
 
-#: thonny/plugins/backend_config_page.py:337
+#: thonny/plugins/backend_config_page.py:335
 msgid "Interpreter"
 msgstr ""
 
@@ -843,27 +921,27 @@ msgstr ""
 msgid "Show parameter info"
 msgstr ""
 
-#: thonny/plugins/commenting_indenting.py:143
+#: thonny/plugins/commenting_indenting.py:142
 msgid "Indent selected lines"
 msgstr ""
 
-#: thonny/plugins/commenting_indenting.py:153
+#: thonny/plugins/commenting_indenting.py:152
 msgid "Dedent selected lines"
 msgstr ""
 
-#: thonny/plugins/commenting_indenting.py:163
+#: thonny/plugins/commenting_indenting.py:162
 msgid "Replace tabs with spaces"
 msgstr ""
 
-#: thonny/plugins/commenting_indenting.py:172
+#: thonny/plugins/commenting_indenting.py:171
 msgid "Toggle comment"
 msgstr ""
 
-#: thonny/plugins/commenting_indenting.py:182
+#: thonny/plugins/commenting_indenting.py:181
 msgid "Comment out"
 msgstr ""
 
-#: thonny/plugins/commenting_indenting.py:192
+#: thonny/plugins/commenting_indenting.py:191
 msgid "Uncomment"
 msgstr ""
 
@@ -879,106 +957,106 @@ msgstr ""
 msgid "Select all"
 msgstr ""
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1401
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
 msgid "Run to cursor"
 msgstr ""
 
-#: thonny/plugins/debugger.py:553
+#: thonny/plugins/debugger.py:557
 #, python-format
 msgid "Function call at %s"
 msgstr ""
 
-#: thonny/plugins/debugger.py:961
+#: thonny/plugins/debugger.py:964
 msgid "Source code"
 msgstr ""
 
-#: thonny/plugins/debugger.py:982
+#: thonny/plugins/debugger.py:985
 msgid "Can't close yet"
 msgstr ""
 
-#: thonny/plugins/debugger.py:983
+#: thonny/plugins/debugger.py:986
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1003
+#: thonny/plugins/debugger.py:1006
 msgid "Local variables"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1035
+#: thonny/plugins/debugger.py:1038
 msgid "Function"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1036
+#: thonny/plugins/debugger.py:1039
 msgid "Location"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1112
+#: thonny/plugins/debugger.py:1115
 msgid ""
 "If last command raised an exception then this view will show the "
 "stacktrace."
 msgstr ""
 
-#: thonny/plugins/debugger.py:1283
+#: thonny/plugins/debugger.py:1284
 msgid "Resume"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1299
+#: thonny/plugins/debugger.py:1300
 msgid "Run / resume"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1314
+#: thonny/plugins/debugger.py:1315
 msgid "Debug current script"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1316
+#: thonny/plugins/debugger.py:1317
 msgid "Debug"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1327
+#: thonny/plugins/debugger.py:1328
 msgid "Debug current script (nicer)"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1339
+#: thonny/plugins/debugger.py:1340
 msgid "Debug current script (faster)"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1350
+#: thonny/plugins/debugger.py:1351
 msgid "Step over"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1352
+#: thonny/plugins/debugger.py:1353
 msgid "Over"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1363
+#: thonny/plugins/debugger.py:1364
 msgid "Step into"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1365
+#: thonny/plugins/debugger.py:1366
 msgid "Into"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1376
+#: thonny/plugins/debugger.py:1377
 msgid "Step out"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1378
+#: thonny/plugins/debugger.py:1379
 msgid "Out"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1413
+#: thonny/plugins/debugger.py:1414
 msgid "Step back"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1415
+#: thonny/plugins/debugger.py:1416
 msgid "Back"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1421
+#: thonny/plugins/debugger.py:1422
 msgid "Stack"
 msgstr ""
 
-#: thonny/plugins/debugger.py:1422
+#: thonny/plugins/debugger.py:1423
 msgid "Exception"
 msgstr ""
 
@@ -1083,7 +1161,7 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:437
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
 msgid "Find & Replace"
 msgstr ""
 
@@ -1091,43 +1169,43 @@ msgstr ""
 msgid "Find:"
 msgstr ""
 
-#: thonny/plugins/find_replace.py:87
+#: thonny/plugins/find_replace.py:90
 msgid "Replace with:"
 msgstr ""
 
-#: thonny/plugins/find_replace.py:105
+#: thonny/plugins/find_replace.py:108
 msgid "Case sensitive"
 msgstr ""
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:115
 msgid "Up"
 msgstr ""
 
-#: thonny/plugins/find_replace.py:116
+#: thonny/plugins/find_replace.py:119
 msgid "Down"
 msgstr ""
 
-#: thonny/plugins/find_replace.py:125
+#: thonny/plugins/find_replace.py:128
 msgid "Find"
 msgstr ""
 
-#: thonny/plugins/find_replace.py:135
+#: thonny/plugins/find_replace.py:138
 msgid "Replace"
 msgstr ""
 
-#: thonny/plugins/find_replace.py:143
+#: thonny/plugins/find_replace.py:146
 msgid "Replace+Find"
 msgstr ""
 
-#: thonny/plugins/find_replace.py:153
+#: thonny/plugins/find_replace.py:156
 msgid "Replace all"
 msgstr ""
 
-#: thonny/plugins/find_replace.py:253
+#: thonny/plugins/find_replace.py:254
 msgid "Enter string to be replaced."
 msgstr ""
 
-#: thonny/plugins/find_replace.py:338
+#: thonny/plugins/find_replace.py:339
 msgid "The specified text was not found!"
 msgstr ""
 
@@ -1198,10 +1276,6 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: thonny/plugins/goto_definition.py:58
-msgid "Problem"
-msgstr ""
-
 #: thonny/plugins/goto_definition.py:58
 msgid "Could not find definition"
 msgstr ""
@@ -1251,26 +1325,26 @@ msgstr ""
 msgid "Next object"
 msgstr ""
 
-#: thonny/plugins/object_inspector.py:487
+#: thonny/plugins/object_inspector.py:486
 #, python-format
 msgid ""
 "The representation above is an approximate value of this float. The exact"
 " stored value is %s which is about %s"
 msgstr ""
 
-#: thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:537
 msgid "Index"
 msgstr ""
 
-#: thonny/plugins/object_inspector.py:616
+#: thonny/plugins/object_inspector.py:615
 msgid "Key ID"
 msgstr ""
 
-#: thonny/plugins/object_inspector.py:617
+#: thonny/plugins/object_inspector.py:616
 msgid "Key"
 msgstr ""
 
-#: thonny/plugins/object_inspector.py:733
+#: thonny/plugins/object_inspector.py:732
 msgid "Object inspector"
 msgstr ""
 
@@ -1282,20 +1356,20 @@ msgstr ""
 msgid "Pygame Zero mode"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:70
+#: thonny/plugins/pip_gui.py:71
 msgid "Search on PyPI"
 msgstr ""
 
-#: thonny/plugins/esp/__init__.py:349
-#: thonny/plugins/micropython/uf2dialog.py:410 thonny/plugins/pip_gui.py:73
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
 msgid "Install"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:77
 msgid "Upgrade"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:79
+#: thonny/plugins/pip_gui.py:80
 msgid "Uninstall"
 msgstr ""
 
@@ -1367,7 +1441,7 @@ msgstr ""
 msgid "Start by selecting the package from the left."
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
 msgid "Target"
 msgstr ""
 
@@ -1383,119 +1457,123 @@ msgid ""
 "must be managed by alternative means."
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:485
+#: thonny/plugins/pip_gui.py:493
 msgid "Installed version:"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:487
+#: thonny/plugins/pip_gui.py:495
 msgid "Installed to:"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:535
+#: thonny/plugins/pip_gui.py:570
 msgid "Could not find the package from PyPI."
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:538
+#: thonny/plugins/pip_gui.py:573
 msgid "Please check your spelling!"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:542
+#: thonny/plugins/pip_gui.py:577
 msgid "Could not find the package info from PyPI."
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:544 thonny/plugins/pip_gui.py:1326
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
 msgid "Error code:"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:557
+#: thonny/plugins/pip_gui.py:592
 msgid "Latest stable version"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:559
+#: thonny/plugins/pip_gui.py:594
 msgid "Latest version"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:561
+#: thonny/plugins/pip_gui.py:596
 msgid "Summary"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:563
+#: thonny/plugins/pip_gui.py:598
 msgid "Author"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:565
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr ""
+
+#: thonny/plugins/pip_gui.py:602
 msgid "Homepage"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:567
+#: thonny/plugins/pip_gui.py:604
 msgid "Bugtracker"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:569
+#: thonny/plugins/pip_gui.py:606
 msgid "Documentation"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:571
+#: thonny/plugins/pip_gui.py:608
 msgid "PyPI page"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:611
+#: thonny/plugins/pip_gui.py:648
 msgid "Requires"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:645
+#: thonny/plugins/pip_gui.py:682
 msgid "Search results"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:646
+#: thonny/plugins/pip_gui.py:683
 msgid "Searching"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:689
+#: thonny/plugins/pip_gui.py:748
 msgid "Can't find package name from the list:"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:728 thonny/plugins/pip_gui.py:817
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
 #, python-format
 msgid "Installing '%s'"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:734
+#: thonny/plugins/pip_gui.py:793
 #, python-format
 msgid "Upgrading '%s'"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:741
+#: thonny/plugins/pip_gui.py:800
 #, python-format
 msgid "Uninstalling '%s'"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:743
+#: thonny/plugins/pip_gui.py:802
 msgid "Really uninstall?"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:744
+#: thonny/plugins/pip_gui.py:803
 msgid "Package '{}' is required for installing and uninstalling other packages."
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:748
+#: thonny/plugins/pip_gui.py:807
 msgid "Are you sure you want to uninstall it?"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:755
+#: thonny/plugins/pip_gui.py:814
 msgid "Installing"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:789
+#: thonny/plugins/pip_gui.py:848
 msgid "Package"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:902
+#: thonny/plugins/pip_gui.py:960
 #, python-format
 msgid "Manage packages for %s"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:954
+#: thonny/plugins/pip_gui.py:1035
 #, python-format
 msgid ""
 "Looks like you are installing a Thonny-related package.\n"
@@ -1505,83 +1583,83 @@ msgid ""
 "Are you sure you want to install %s for the back-end?"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1059
+#: thonny/plugins/pip_gui.py:1141
 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:1067
+#: thonny/plugins/pip_gui.py:1149
 msgid "Thonny plugin without requirements"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1083
+#: thonny/plugins/pip_gui.py:1165
 msgid "Unsuitable requirements"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1084
+#: thonny/plugins/pip_gui.py:1166
 msgid "This package requires different Thonny version:"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1088
+#: thonny/plugins/pip_gui.py:1170
 msgid "If you still want it, then please install it from the command line."
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1118
+#: thonny/plugins/pip_gui.py:1200
 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/pip_gui.py:1125
+#: thonny/plugins/pip_gui.py:1207
 msgid ""
 "NB! You need to restart Thonny after installing / upgrading / "
 "uninstalling a plug-in."
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1135
+#: thonny/plugins/pip_gui.py:1217
 msgid "Thonny plug-ins"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1171
+#: thonny/plugins/pip_gui.py:1253
 msgid "Advanced install / upgrade / downgrade"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1180
+#: thonny/plugins/pip_gui.py:1262
 msgid "Desired version"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1239
+#: thonny/plugins/pip_gui.py:1321
 msgid "Upgrade dependencies"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1324
+#: thonny/plugins/pip_gui.py:1406
 msgid "Requires:"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1328
+#: thonny/plugins/pip_gui.py:1410
 msgid "Error:"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1502
+#: thonny/plugins/pip_gui.py:1562
 msgid "Package manager is not available for this interpreter"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:100 thonny/plugins/pip_gui.py:1521
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
 msgid "Not available"
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1522
+#: thonny/plugins/pip_gui.py:1582
 msgid "You need to stop your program before launching the package manager."
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1541
+#: thonny/plugins/pip_gui.py:1601
 msgid "Manage packages..."
 msgstr ""
 
-#: thonny/plugins/pip_gui.py:1547
+#: thonny/plugins/pip_gui.py:1607
 msgid "Manage plug-ins..."
 msgstr ""
 
@@ -1589,57 +1667,65 @@ msgstr ""
 msgid "Visualize current script at Python Tutor"
 msgstr ""
 
-#: thonny/plugins/replayer.py:365
+#: thonny/plugins/replayer.py:364
 msgid "Open replayer..."
 msgstr ""
 
 #: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:21
 msgid "Change working directory to script directory on Run / Debug"
 msgstr ""
 
-#: thonny/plugins/run_debug_config_page.py:22
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:35
 msgid "Show function calls (frames) in separate windows"
 msgstr ""
 
-#: thonny/plugins/run_debug_config_page.py:23
+#: thonny/plugins/run_debug_config_page.py:36
 msgid "Uncheck if you want more traditional experience."
 msgstr ""
 
-#: thonny/plugins/run_debug_config_page.py:29
+#: thonny/plugins/run_debug_config_page.py:42
 msgid "Open and close Stack view automatically"
 msgstr ""
 
-#: thonny/plugins/run_debug_config_page.py:30
+#: thonny/plugins/run_debug_config_page.py:43
 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
+#: thonny/plugins/run_debug_config_page.py:52
 msgid "Allow stepping into libraries (ie. outside of main script directory)"
 msgstr ""
 
-#: thonny/plugins/run_debug_config_page.py:40
+#: thonny/plugins/run_debug_config_page.py:53
 msgid "May make debugging slower."
 msgstr ""
 
-#: thonny/plugins/run_debug_config_page.py:45
+#: thonny/plugins/run_debug_config_page.py:58
 msgid "Preferred debugger"
 msgstr ""
 
-#: thonny/plugins/run_debug_config_page.py:57
+#: thonny/plugins/run_debug_config_page.py:70
 msgid "(used when clicking Debug toolbar button)"
 msgstr ""
 
-#: thonny/plugins/run_debug_config_page.py:62
+#: thonny/plugins/run_debug_config_page.py:75
 msgid "Birdseye port"
 msgstr ""
 
-#: thonny/plugins/run_debug_config_page.py:66
+#: thonny/plugins/run_debug_config_page.py:79
 msgid "(restart Thonny after changing this)"
 msgstr ""
 
-#: thonny/plugins/run_debug_config_page.py:74
+#: thonny/plugins/run_debug_config_page.py:87
 msgid "Run & Debug"
 msgstr ""
 
@@ -1693,51 +1779,51 @@ msgstr ""
 msgid "Terminal"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:40
+#: thonny/plugins/theme_and_font_config_page.py:39
 msgid "UI theme"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:53
+#: thonny/plugins/theme_and_font_config_page.py:52
 msgid "Syntax theme"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:85
+#: thonny/plugins/theme_and_font_config_page.py:84
 msgid "Editor font"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:108
+#: thonny/plugins/theme_and_font_config_page.py:107
 msgid "IO font"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:133
+#: thonny/plugins/theme_and_font_config_page.py:132
 msgid "Preview"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:151
+#: thonny/plugins/theme_and_font_config_page.py:150
 msgid "This is a comment"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:153
 msgid "The answer is"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:158
+#: thonny/plugins/theme_and_font_config_page.py:157
 msgid "unclosed_string"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:160
+#: thonny/plugins/theme_and_font_config_page.py:159
 msgid "blah, blah"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:184
+#: thonny/plugins/theme_and_font_config_page.py:183
 msgid "NB! Some style elements change only after restarting Thonny!"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:223
+#: thonny/plugins/theme_and_font_config_page.py:222
 msgid "Enter an integer"
 msgstr ""
 
-#: thonny/plugins/theme_and_font_config_page.py:236
+#: thonny/plugins/theme_and_font_config_page.py:235
 msgid "Theme & Font"
 msgstr ""
 
@@ -1749,19 +1835,19 @@ msgstr ""
 msgid "Open Thonny data folder..."
 msgstr ""
 
-#: thonny/plugins/todo_view.py:44
+#: thonny/plugins/todo_view.py:43
 msgid "Line"
 msgstr ""
 
-#: thonny/plugins/todo_view.py:45
+#: thonny/plugins/todo_view.py:44
 msgid "Info"
 msgstr ""
 
-#: thonny/plugins/todo_view.py:123
+#: thonny/plugins/todo_view.py:121
 msgid "No line marked with #todo found"
 msgstr ""
 
-#: thonny/plugins/todo_view.py:143
+#: thonny/plugins/todo_view.py:141
 msgid "TODO"
 msgstr ""
 
@@ -1787,8 +1873,8 @@ msgstr ""
 msgid "CircuitPython (generic)"
 msgstr ""
 
-#: thonny/plugins/circuitpython/cirpy_front.py:98
-#: thonny/plugins/micropython/mp_front.py:536
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
 #, python-format
 msgid "Install or update %s"
 msgstr ""
@@ -1797,20 +1883,20 @@ msgstr ""
 msgid "Local Python 3"
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:171
+#: thonny/plugins/cpython_frontend/cp_front.py:196
 msgid "Thonny's Python"
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:209
+#: thonny/plugins/cpython_frontend/cp_front.py:234
 msgid "Python executable"
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:230
+#: thonny/plugins/cpython_frontend/cp_front.py:256
 #, python-format
 msgid "NB! Thonny only supports Python %s and later"
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:232
+#: thonny/plugins/cpython_frontend/cp_front.py:258
 msgid ""
 "NB! File selection button may not work properly when selecting "
 "executables\n"
@@ -1819,32 +1905,32 @@ msgid ""
 "of the interpreter (or enter the path directly to the box)!"
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:240
+#: thonny/plugins/cpython_frontend/cp_front.py:266
 msgid ""
 "You can activate an existing virtual environment also via the right-click"
 " context menu in the file navagation when selecting a virtual environment"
 " folder, or the 'pyveng.cfg' file inside."
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:269
+#: thonny/plugins/cpython_frontend/cp_front.py:295
 msgid "Python interpreters"
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:298
+#: thonny/plugins/cpython_frontend/cp_front.py:324
 msgid "Select empty directory for new virtual environment"
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:305
+#: thonny/plugins/cpython_frontend/cp_front.py:331
 msgid "Bad directory"
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:306
+#: thonny/plugins/cpython_frontend/cp_front.py:332
 msgid ""
 "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr ""
 
-#: thonny/plugins/cpython_frontend/cp_front.py:323
+#: thonny/plugins/cpython_frontend/cp_front.py:349
 msgid "Creating virtual environment"
 msgstr ""
 
@@ -1868,23 +1954,23 @@ msgstr ""
 msgid "Help contents"
 msgstr ""
 
-#: thonny/plugins/microbit/__init__.py:58
+#: thonny/plugins/microbit/__init__.py:62
 msgid "Make sure MicroPython has been installed to your micro:bit."
 msgstr ""
 
-#: thonny/plugins/microbit/__init__.py:60
+#: thonny/plugins/microbit/__init__.py:64
 msgid "Don't forget that main.py only works without embedded main script."
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:25
+#: thonny/plugins/micropython/__init__.py:24
 msgid "MicroPython (generic)"
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:36
+#: thonny/plugins/micropython/__init__.py:35
 msgid "MicroPython (local)"
 msgstr ""
 
-#: thonny/plugins/micropython/__init__.py:47
+#: thonny/plugins/micropython/__init__.py:46
 msgid "MicroPython (SSH)"
 msgstr ""
 
@@ -1900,61 +1986,61 @@ msgstr ""
 msgid "Not connected"
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:444
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port or WebREPL"
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:444
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port"
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:454
+#: thonny/plugins/micropython/mp_front.py:458
 msgid "Try to detect port automatically"
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:492
+#: thonny/plugins/micropython/mp_front.py:496
 msgid "Interrupt working program on connect"
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:500
+#: thonny/plugins/micropython/mp_front.py:504
 msgid "Synchronize device's real time clock"
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:506
+#: thonny/plugins/micropython/mp_front.py:510
 msgid "Use local time in real time clock"
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:512
+#: thonny/plugins/micropython/mp_front.py:516
 msgid "Restart interpreter before running a script"
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:521
-msgid "Advanced options"
-msgstr ""
-
-#: thonny/plugins/micropython/mp_front.py:547
+#: thonny/plugins/micropython/mp_front.py:558
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:550
+#: thonny/plugins/micropython/mp_front.py:561
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:552
+#: thonny/plugins/micropython/mp_front.py:563
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr ""
 
-#: thonny/plugins/micropython/mp_front.py:589
+#: thonny/plugins/micropython/mp_front.py:599
 msgid "Password"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:24
+#: thonny/plugins/micropython/pip_gui.py:26
 msgid ""
 "This doesn't look like MicroPython/CircuitPython package.\n"
 "Are you sure you want to install it?"
 msgstr ""
 
-#: thonny/plugins/micropython/pip_gui.py:102
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:144
 msgid "no absolute lib directory in sys.path"
 msgstr ""
 
diff --git a/thonny/locale/tr_TR/LC_MESSAGES/thonny.mo b/thonny/locale/tr_TR/LC_MESSAGES/thonny.mo
index 981741c..580941e 100644
Binary files a/thonny/locale/tr_TR/LC_MESSAGES/thonny.mo and b/thonny/locale/tr_TR/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/uk_UA/LC_MESSAGES/thonny.mo b/thonny/locale/uk_UA/LC_MESSAGES/thonny.mo
index 3702ba8..d99623b 100644
Binary files a/thonny/locale/uk_UA/LC_MESSAGES/thonny.mo and b/thonny/locale/uk_UA/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/vi_VN/LC_MESSAGES/thonny.mo b/thonny/locale/vi_VN/LC_MESSAGES/thonny.mo
new file mode 100644
index 0000000..dee90b8
Binary files /dev/null and b/thonny/locale/vi_VN/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/vi_VN/LC_MESSAGES/thonny.po b/thonny/locale/vi_VN/LC_MESSAGES/thonny.po
new file mode 100644
index 0000000..4b39a84
--- /dev/null
+++ b/thonny/locale/vi_VN/LC_MESSAGES/thonny.po
@@ -0,0 +1,1989 @@
+msgid ""
+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: vi\n"
+
+#: thonny/workbench.py:375
+msgid "File"
+msgstr "Tệp"
+
+#: thonny/workbench.py:376
+msgid "Edit"
+msgstr "Chỉnh sửa"
+
+#: thonny/workbench.py:377
+msgid "View"
+msgstr "Xem"
+
+#: thonny/running.py:161 thonny/workbench.py:378
+msgid "Run"
+msgstr "Chạy"
+
+#: thonny/workbench.py:379
+msgid "Tools"
+msgstr "Công cụ"
+
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
+msgid "Help"
+msgstr "Trợ giúp"
+
+#: thonny/workbench.py:598
+msgid "Exit"
+msgstr "Thoát"
+
+#: thonny/workbench.py:625
+msgid "Decrease font size"
+msgstr "Giảm cỡ chữ"
+
+#: thonny/workbench.py:637
+msgid "Focus editor"
+msgstr "Hướng vào trình sửa mã"
+
+#: thonny/workbench.py:646
+msgid "Focus shell"
+msgstr "Hướng vào shell"
+
+#: thonny/workbench.py:656
+msgid "Maximize view"
+msgstr "Phóng to giao diện"
+
+#: thonny/workbench.py:668
+msgid "Full screen"
+msgstr "Toàn màn hình"
+
+#. What are the examples of programme arguments?
+#: thonny/workbench.py:1467
+msgid "Program arguments"
+msgstr "Đối số chương trình"
+
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
+msgid "About Thonny"
+msgstr "Về 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 "Được tạo ra tại trường\n"
+"Đại Học Tartu, Estonia,\n"
+"với sự giúp đỡ từ\n"
+"cộng đồng mã nguồn mở,\n"
+"Quỹ Raspberry Pi\n"
+"và công ty Cybernetica AS"
+
+#: thonny/plugins/about.py:101
+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 "Bạn phải TỰ CHỊU TRÁCH NHIỆM\n"
+"khi thao tác với chương trình này!\n"
+"Đây là phần mềm tự do, và bạn có thể\n"
+"phân phối lại với các điều kiện phù hợp,\n"
+"tham khảo https://opensource.org/licenses/MIT\n"
+"để biết thêm chi tiết"
+
+#: thonny/plugins/about.py:142
+msgid "Version history"
+msgstr "Lịch sử phiên bản"
+
+#: thonny/plugins/about.py:149
+msgid "Report problems"
+msgstr "Báo cáo lỗi"
+
+#: thonny/plugins/assistant_config_page.py:16
+msgid "Open Assistant automatically when program crashes with an exception"
+msgstr "Mở Trợ Lý tự động khi chương trình bị lỗi ngoại lệ"
+
+#: thonny/plugins/assistant_config_page.py:23
+msgid "Open Assistant automatically when it has warnings for your code"
+msgstr "Mở Trợ Lý tự động khi mã nguồn của bạn gặp cảnh báo"
+
+#: thonny/plugins/assistant_config_page.py:30
+msgid "Perform selected Pylint checks"
+msgstr "Thực hiện các kiểm thử Pylint đã chọn"
+
+#: thonny/plugins/assistant_config_page.py:34
+msgid "Perform MyPy checks"
+msgstr "Thực hiện kiểm thử MyPy"
+
+#: thonny/plugins/assistant_config_page.py:36
+msgid "Disabled checks (one id per line)"
+msgstr "Các kiểm thử bị tắt (mỗi dòng một id)"
+
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
+msgid "Assistant"
+msgstr "Trợ lý"
+
+#: thonny/plugins/autocomplete.py:529
+msgid "Auto-complete"
+msgstr "Tự hoàn thành"
+
+#: thonny/plugins/backend_config_page.py:335
+msgid "Interpreter"
+msgstr "Trình thông dịch"
+
+#: thonny/plugins/birdseye_frontend.py:55
+msgid "About Birdseye"
+msgstr "Về Birdseye"
+
+#: thonny/plugins/birdseye_frontend.py:56
+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 là một trình gỡ lỗi Python và phải được cài riêng.\n"
+"\n"
+"Bạn có muốn mở trang hướng dẫn và tìm hiểu thêm không?"
+
+#: thonny/plugins/birdseye_frontend.py:84
+msgid "Debug current script (birdseye)"
+msgstr "Gỡ lỗi đoạn mã hiện tại (birdseye)"
+
+#: thonny/plugins/commenting_indenting.py:171
+msgid "Toggle comment"
+msgstr "Bật tắt chú thích"
+
+#: thonny/plugins/commenting_indenting.py:181
+msgid "Comment out"
+msgstr "Nhúng vào thẻ chú thích"
+
+#: thonny/plugins/commenting_indenting.py:191
+msgid "Uncomment"
+msgstr "Loại bỏ thẻ chú thích"
+
+#: thonny/plugins/common_editing_commands.py:21
+msgid "Undo"
+msgstr "Hoàn tác"
+
+#: thonny/plugins/common_editing_commands.py:33
+msgid "Redo"
+msgstr "Làm lại"
+
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
+msgid "Cut"
+msgstr "Cắt"
+
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
+msgid "Copy"
+msgstr "Sao chép"
+
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
+msgid "Paste"
+msgstr "Dán"
+
+#: thonny/plugins/common_editing_commands.py:85 thonny/plugins/debugger.py:152
+msgid "Select all"
+msgstr "Chọn hết"
+
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
+msgid "Run to cursor"
+msgstr "Chạy đến con trỏ"
+
+#: thonny/plugins/debugger.py:985
+msgid "Can't close yet"
+msgstr "Chưa đóng được"
+
+#: thonny/plugins/debugger.py:986
+msgid "Use \"Stop\" command if you want to cancel debugging"
+msgstr "Sử dụng lệnh \"Dừng\" để hủy quá trình gỡ lỗi"
+
+#: thonny/plugins/dock_user_windows_frontend.py:28
+msgid "Dock user windows"
+msgstr "Dock cửa sổ người dùng"
+
+#: thonny/plugins/editor_config_page.py:20
+msgid "Highlight matching names"
+msgstr "Tô màu các tên trùng khớp"
+
+#: thonny/plugins/editor_config_page.py:26
+msgid "Highlight local variables"
+msgstr "Tô màu biến cục bộ"
+
+#: thonny/plugins/editor_config_page.py:31
+msgid "Highlight parentheses"
+msgstr "Tô màu các cặp dấu ngoặc"
+
+#: thonny/plugins/editor_config_page.py:32
+msgid "Highlight syntax elements"
+msgstr "Tô màu các phần tử cú pháp"
+
+#: thonny/plugins/editor_config_page.py:36
+msgid "Highlight current line (requires reopening the editor)"
+msgstr "Tô màu dòng hiện tại (yêu cầu khởi động lại trình sửa mã)"
+
+#: thonny/plugins/editor_config_page.py:73
+msgid "Show line numbers"
+msgstr "Hiện số chỉ vị trí dòng"
+
+#: thonny/plugins/editor_config_page.py:76
+msgid "Recommended maximum line length\n"
+"(Set to 0 to turn off margin line)"
+msgstr "Hạn chế độ dài tối đa của dòng\n"
+"(Đặt giá trị bằng 0 để tắt đường lề)"
+
+#: thonny/plugins/editor_config_page.py:104
+msgid "Editor"
+msgstr "Trình sửa mã"
+
+#: thonny/plugins/event_logging.py:207
+msgid "Export usage logs..."
+msgstr "Xuất các bản ghi sử dụng..."
+
+#: thonny/plugins/event_view.py:39
+msgid "Events"
+msgstr "Sự kiện"
+
+#: thonny/plugins/files.py:609
+msgid "Files"
+msgstr "Tệp"
+
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
+msgid "Find & Replace"
+msgstr "Tìm và Thay Thế"
+
+#: thonny/plugins/find_replace.py:66
+msgid "Find:"
+msgstr "Tìm:"
+
+#: thonny/plugins/find_replace.py:90
+msgid "Replace with:"
+msgstr "Thay thế bằng:"
+
+#: thonny/plugins/find_replace.py:108
+msgid "Case sensitive"
+msgstr "Phân biệt thường - hoa"
+
+#: thonny/plugins/find_replace.py:115
+msgid "Up"
+msgstr "Lên"
+
+#: thonny/plugins/find_replace.py:119
+msgid "Down"
+msgstr "Xuống"
+
+#: thonny/plugins/find_replace.py:128
+msgid "Find"
+msgstr "Tìm"
+
+#: thonny/plugins/find_replace.py:138
+msgid "Replace"
+msgstr "Thay thế"
+
+#: thonny/plugins/find_replace.py:146
+msgid "Replace+Find"
+msgstr "Thay thế + tìm tiếp"
+
+#: thonny/plugins/find_replace.py:156
+msgid "Replace all"
+msgstr "Thay hết"
+
+#: thonny/plugins/find_replace.py:254
+msgid "Enter string to be replaced."
+msgstr "Nhập chuỗi cần thay thế."
+
+#: thonny/plugins/find_replace.py:339
+msgid "The specified text was not found!"
+msgstr "Không thể tìm thấy văn bản cần tìm!"
+
+#: thonny/plugins/general_config_page.py:15
+msgid "Allow only single Thonny instance"
+msgstr "Cho phép chạy một lần chương trình Thonny"
+
+#: thonny/plugins/general_config_page.py:22
+msgid "Reopen all files from previous session"
+msgstr "Mở lại tất cả các tệp từ phiên đăng nhập trước"
+
+#: thonny/plugins/general_config_page.py:37
+msgid "Disable notification sound"
+msgstr "Tắt tiếng thông báo"
+
+#: thonny/plugins/general_config_page.py:86
+msgid "Font scaling mode"
+msgstr "Chế độ chỉnh cỡ chữ"
+
+#: thonny/plugins/heap.py:37
+msgid "Heap mode is on.\n"
+"Close Heap view to turn it off."
+msgstr "Chế độ Heap đã bật.\n"
+"Đóng cửa sổ Heap để tắt."
+
+#: thonny/plugins/heap.py:86
+msgid "Heap"
+msgstr "Heap"
+
+#: thonny/plugins/general_config_page.py:53
+msgid "Language"
+msgstr "Ngôn ngữ"
+
+#: 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 "Bạn có thể dùng cửa sổ này để ghi nháp bất cứ thứ gì cũng được -- từ cách gán biến đến đoạn mã ngắn (snippet), vân vân.\n"
+"\n"
+"Những gì bạn đã ghi đều sẽ được lưu tự động và được mở lại khi bạn khởi động Thonny lần sau.\n"
+"\n"
+"Bạn có thể xóa hết đoạn văn này để bắt đầu ghi chú."
+
+#: thonny/plugins/notes.py:63
+msgid "Notes"
+msgstr "Cửa sổ nháp"
+
+#: thonny/plugins/object_inspector.py:116
+msgid "Previous object"
+msgstr "Đối tượng trước"
+
+#: thonny/plugins/object_inspector.py:119
+msgid "Next object"
+msgstr "Đối tượng tiếp theo"
+
+#: thonny/plugins/object_inspector.py:732
+msgid "Object inspector"
+msgstr "Kiểm tra đối tượng"
+
+#: thonny/plugins/outline.py:148
+msgid "Outline"
+msgstr "Cấu trúc"
+
+#: thonny/plugins/pgzero_frontend.py:27
+msgid "Pygame Zero mode"
+msgstr "Chế độ PyGame Zero"
+
+#: thonny/plugins/pip_gui.py:80
+msgid "Uninstall"
+msgstr "Gỡ cài đặt"
+
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
+msgid "Close"
+msgstr "Đóng"
+
+#: thonny/plugins/pip_gui.py:397
+msgid "Click "
+msgstr "Nhấn chuột vào "
+
+#: thonny/plugins/pip_gui.py:398 thonny/plugins/pip_gui.py:409
+msgid "here"
+msgstr "đây"
+
+#: thonny/plugins/pip_gui.py:77
+msgid "Upgrade"
+msgstr "Nâng cấp"
+
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
+msgid "Install"
+msgstr "Cài đặt"
+
+#: thonny/plugins/pip_gui.py:570
+msgid "Could not find the package from PyPI."
+msgstr "Không thể tìm được gói từ PyPI."
+
+#: thonny/plugins/pip_gui.py:592
+msgid "Latest stable version"
+msgstr "Phiên bản bền mới nhất"
+
+#: thonny/plugins/pip_gui.py:594
+msgid "Latest version"
+msgstr "Phiên bản mới nhất"
+
+#: thonny/plugins/pip_gui.py:596
+msgid "Summary"
+msgstr "Tổng quan"
+
+#: thonny/plugins/pip_gui.py:598
+msgid "Author"
+msgstr "Tác giả"
+
+#: thonny/plugins/pip_gui.py:602
+msgid "Homepage"
+msgstr "Trang chủ"
+
+#: thonny/plugins/pip_gui.py:604
+msgid "Bugtracker"
+msgstr "Trình theo dõi lỗi bug"
+
+#: thonny/plugins/pip_gui.py:606
+msgid "Documentation"
+msgstr "Tài liệu"
+
+#: thonny/plugins/pip_gui.py:608
+msgid "PyPI page"
+msgstr "Trang PyPI"
+
+#: thonny/plugins/pip_gui.py:648
+msgid "Requires"
+msgstr "Yêu cầu"
+
+#: thonny/plugins/pip_gui.py:802
+msgid "Really uninstall?"
+msgstr "Thực sự gỡ cài đặt chứ?"
+
+#: thonny/plugins/pip_gui.py:807
+msgid "Are you sure you want to uninstall it?"
+msgstr "Bạn có muốn gỡ cài đặt nó không?"
+
+#: thonny/plugins/variables.py:22
+msgid "Back to\n"
+"current frame"
+msgstr "Trở về\n"
+"bước hiện tại"
+
+#: thonny/plugins/variables.py:80 thonny/plugins/variables.py:82
+#: thonny/plugins/variables.py:145
+msgid "Variables"
+msgstr "Các biến"
+
+#: thonny/base_file_browser.py:1576
+msgid "This computer"
+msgstr "Máy tính này"
+
+#: thonny/base_file_browser.py:648
+msgid "Refresh"
+msgstr "Làm mới"
+
+#: thonny/base_file_browser.py:657
+msgid "Focus into"
+msgstr "Hướng vào"
+
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
+msgid "Error"
+msgstr "Lỗi"
+
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+msgid "You need to select a file!"
+msgstr "Bạn phải chọn một tệp!"
+
+#: thonny/base_file_browser.py:1427
+msgid "Overwrite?"
+msgstr "Ghi đè?"
+
+#: thonny/base_file_browser.py:1427
+msgid "Do you want to overwrite '%s' ?"
+msgstr "Bạn có muốn ghi đè \"%s\" không?"
+
+#: thonny/editors.py:658 thonny/editors.py:660
+msgid "New"
+msgstr "Tạo mới"
+
+#: thonny/editors.py:671
+msgid "Open..."
+msgstr "Mở..."
+
+#: thonny/editors.py:673
+msgid "Load"
+msgstr "Tải lên"
+
+#: thonny/editors.py:682
+msgid "Recent files"
+msgstr "Các tệp gần đây"
+
+#: thonny/editors.py:704 thonny/ui_utils.py:498
+msgid "Close all"
+msgstr "Đóng hết"
+
+#: thonny/editors.py:714 thonny/editors.py:716
+msgid "Save"
+msgstr "Lưu"
+
+#: thonny/editors.py:739
+msgid "Save as..."
+msgstr "Lưu dưới dạng..."
+
+#: thonny/editors.py:750
+msgid "Save copy..."
+msgstr "Lưu bản sao..."
+
+#: thonny/config_ui.py:18
+msgid "Thonny options"
+msgstr "Thiết lập Thonny"
+
+#: thonny/running.py:160
+msgid "Run current script"
+msgstr "Chạy đoạn mã hiện tại"
+
+#: thonny/running.py:191
+msgid "Run current script in terminal"
+msgstr "Chạy đoạn mã hiện tại bằng đầu cuối"
+
+#: thonny/running.py:204
+msgid "Stop/Restart backend"
+msgstr "Dừng/Khởi động lại backend"
+
+#: thonny/running.py:205
+msgid "Stop"
+msgstr "Dừng"
+
+#: thonny/running.py:216
+msgid "Interrupt execution"
+msgstr "Ngắt thực thi"
+
+#: thonny/running.py:229
+msgid "Send EOF / Soft reboot"
+msgstr "Gửi EOF / Khởi động lại mềm"
+
+#: thonny/running.py:240
+msgid "Disconnect"
+msgstr "Ngắt kết nối"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:295
+msgid "Python interpreters"
+msgstr "Các trình thông dịch Python"
+
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
+msgid "all files"
+msgstr "tất cả các tệp"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:324
+msgid "Select empty directory for new virtual environment"
+msgstr "Chọn đường dẫn trống để chứa môi trường ảo mới"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:331
+msgid "Bad directory"
+msgstr "Đường dẫn xấu"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:332
+msgid "Selected directory is not empty.\n"
+"Select another or cancel."
+msgstr "Đường dẫn đã chọn không phải là đường dẫn trống.\n"
+"Chọn đường dẫn khác hoặc hủy."
+
+#: thonny/plugins/cpython_frontend/cp_front.py:349
+msgid "Creating virtual environment"
+msgstr "Đang tạo môi trường ảo"
+
+#: thonny/shell.py:101
+msgid "Clear shell"
+msgstr "Xóa màn hình shell"
+
+#: thonny/shell.py:185
+msgid "Plotter"
+msgstr "Máy vẽ"
+
+#: thonny/shell.py:317
+msgid "Clear"
+msgstr "Xóa"
+
+#: thonny/shell.py:330
+msgid "Show Plotter"
+msgstr "Hiện Máy Vẽ"
+
+#: thonny/shell.py:1660
+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 "Vì lý do hiệu năng, Shell thường tránh hiển thị đầy đủ các dòng dài (xem Công cụ => Thiết lập => Shell).\n"
+"Ở đây, bạn có thể tương tác với phần văn bản gốc."
+
+#: thonny/shell.py:1671
+msgid "Wrap text (may be slow)"
+msgstr "Bọc văn bản (dưới dạng nhiều dòng ngắn, tương đối chậm)"
+
+#: thonny/ui_utils.py:1879
+msgid "Copy to clipboard"
+msgstr "Sao chép vào bảng nhớ tạm"
+
+#: thonny/shell.py:1713
+msgid "Squeezed text (%d characters)"
+msgstr "Ép gọn văn bản (%d ký tự)"
+
+#: thonny/shell.py:1883
+msgid "Plotter visualizes series of\n"
+"numbers printed to the Shell."
+msgstr "Máy vẽ hiển thị các chuỗi số\n"
+"được in ra Shell."
+
+#: thonny/shell.py:1885
+msgid "See Help for details."
+msgstr "Xem Trợ Giúp để biết thêm chi tiết"
+
+#: thonny/ui_utils.py:497
+msgid "Close others"
+msgstr "Đóng các cửa sổ khác"
+
+#: thonny/ui_utils.py:1734
+msgid "Copying"
+msgstr "Sao chép"
+
+#: thonny/ui_utils.py:1737
+msgid "Copying\n"
+"  %s\n"
+"to\n"
+"  %s"
+msgstr "Đang sao chép\n"
+"  %s\n"
+"để dán vào\n"
+"  %s"
+
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
+msgid "Cancel"
+msgstr "Hủy"
+
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
+msgid "OK"
+msgstr "OK"
+
+#: thonny/ui_utils.py:2345
+msgid "Select All"
+msgstr "Chọn Hết"
+
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
+#: thonny/workbench.py:164
+msgid "Shell"
+msgstr "Shell"
+
+#: thonny/workbench.py:608
+msgid "Options..."
+msgstr "Thiết lập..."
+
+#: thonny/workbench.py:615
+msgid "Increase font size"
+msgstr "Tăng cỡ chữ"
+
+#: thonny/workbench.py:679
+msgid "Change font size"
+msgstr "Thay đổi cỡ chữ"
+
+#: thonny/workbench.py:680
+msgid "Zoom"
+msgstr "Phóng to"
+
+#: thonny/workbench.py:689
+msgid "Exit Thonny"
+msgstr "Thoát Thonny"
+
+#: thonny/workbench.py:692
+msgid "Quit"
+msgstr "Thoát"
+
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
+msgid "Overwriting theme '%s'"
+msgstr "Đang ghi đè nền \"%s\""
+
+#: thonny/workbench.py:1438
+msgid "Program arguments:"
+msgstr "Đối số chương trình:"
+
+#: thonny/workbench.py:1492
+msgid "Regular mode"
+msgstr "Chế độ bình thường"
+
+#: thonny/workbench.py:1493
+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 "Cấu hình đã được cập nhật. Hãy khởi động lại Thonny để bắt đầu làm việc với chế độ bình thường.\n"
+"\n"
+"(Xem \"Công cụ → Thiết lập → Tổng quát\" nếu bạn muốn thay đổi lại sau.)"
+
+#: thonny/plugins/ast_view.py:211
+msgid "Program tree"
+msgstr "Cây chương trình"
+
+#: thonny/plugins/debugger.py:1284
+msgid "Resume"
+msgstr "Tiếp tục"
+
+#: thonny/plugins/debugger.py:1300
+msgid "Run / resume"
+msgstr "Chạy / tiếp tục"
+
+#: thonny/plugins/debugger.py:1315
+msgid "Debug current script"
+msgstr "Gỡ lỗi đoạn mã hiện tại"
+
+#: thonny/plugins/debugger.py:1317
+msgid "Debug"
+msgstr "Gỡ lỗi"
+
+#: thonny/plugins/debugger.py:1328
+msgid "Debug current script (nicer)"
+msgstr "Gỡ lỗi đoạn mã hiện tại (đẹp hơn)"
+
+#: thonny/plugins/debugger.py:1340
+msgid "Debug current script (faster)"
+msgstr "Gỡ lỗi đoạn mã hiện tại (nhanh hơn)"
+
+#: thonny/plugins/debugger.py:1351
+msgid "Step over"
+msgstr "Bước qua"
+
+#: thonny/plugins/debugger.py:1353
+msgid "Over"
+msgstr "Qua"
+
+#: thonny/plugins/debugger.py:1364
+msgid "Step into"
+msgstr "Bước vào"
+
+#: thonny/plugins/debugger.py:1366
+msgid "Into"
+msgstr "Vào"
+
+#: thonny/plugins/debugger.py:1377
+msgid "Step out"
+msgstr "Bước ra"
+
+#: thonny/plugins/debugger.py:1379
+msgid "Out"
+msgstr "Ra"
+
+#: thonny/plugins/debugger.py:1414
+msgid "Step back"
+msgstr "Bước lùi"
+
+#: thonny/plugins/debugger.py:1416
+msgid "Back"
+msgstr "Lùi"
+
+#: thonny/plugins/debugger.py:1422
+msgid "Stack"
+msgstr "Ngăn xếp"
+
+#: thonny/plugins/debugger.py:1423
+msgid "Exception"
+msgstr "Ngoại lệ"
+
+#: thonny/plugins/general_config_page.py:18
+msgid "Log program usage events"
+msgstr "Ghi các sự kiện sử dụng chương trình"
+
+#: thonny/plugins/general_config_page.py:43
+msgid "Debug mode (provides more detailed diagnostic logs)"
+msgstr "Chế độ gỡ lỗi (cung cấp bản ghi chẩn đoán chi tiết hơn)"
+
+#: thonny/plugins/general_config_page.py:67
+msgid "UI mode"
+msgstr "Chế độ giao diện"
+
+#: thonny/plugins/general_config_page.py:80
+msgid "UI scaling factor"
+msgstr "Hệ số thu phóng giao diện"
+
+#: thonny/plugins/general_config_page.py:114
+msgid "NB! Restart Thonny after changing these options!"
+msgstr "LƯU Ý! Hãy khởi động lại Thonny sau khi thay đổi thiết lập!"
+
+#: thonny/plugins/general_config_page.py:148
+msgid "General"
+msgstr "Tổng quát"
+
+#: thonny/plugins/pip_gui.py:142
+msgid "INSTALL"
+msgstr "CÀI ĐẶT"
+
+#: thonny/plugins/pip_gui.py:367
+msgid "Browse the packages"
+msgstr "Duyệt các gói"
+
+#: thonny/plugins/pip_gui.py:370
+msgid "With current interpreter you can only browse the packages here.\n"
+"Use 'Tools → Open system shell...' for installing, upgrading or uninstalling."
+msgstr "Với trình thông dịch hiện tại, bạn chỉ có thể duyệt các gói tại đây.\n"
+"Sử dụng \"Công cụ → Mở shell hệ thống...\" để cài đặt, nâng cấp hoặc gỡ cài."
+
+#: thonny/plugins/pip_gui.py:378
+msgid "Packages' directory"
+msgstr "Đường dẫn các gói"
+
+#: thonny/plugins/pip_gui.py:382
+msgid "Install from PyPI"
+msgstr "Cài đặt từ PyPI"
+
+#: thonny/plugins/pip_gui.py:385
+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 "Nếu bạn không biết tải về một gói ở đâu, chắc hẳn bạn sẽ muốn tìm kiếm nó trên Chỉ Mục Gói Python (PyPI). Hãy bắt đầu bằng cách gõ tên gói đó vào ô tìm kiếm và nhấn ENTER."
+
+#: thonny/plugins/pip_gui.py:402
+msgid "to locate requirements.txt file and install the packages specified in it."
+msgstr "để định vị tệp requirements.txt và cài đặt các gói được đề cập trong đó."
+
+#: thonny/plugins/pip_gui.py:408
+msgid "Click"
+msgstr "Nhấn chuột vào"
+
+#: thonny/plugins/pip_gui.py:413
+msgid "to locate and install the package file (usually with .whl, .tar.gz or .zip extension)."
+msgstr "để định vị và cài đặt tệp gói (thường có đuôi .whl, .tar.gz hoặc .zip)."
+
+#: thonny/plugins/pip_gui.py:420
+msgid "Upgrade or uninstall"
+msgstr "Nâng cấp hoặc gỡ cài"
+
+#: thonny/plugins/pip_gui.py:422
+msgid "Start by selecting the package from the left."
+msgstr "Bắt đầu bằng cách chọn gói từ bên trái."
+
+#: thonny/plugins/pip_gui.py:430
+msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
+msgstr "Hộp thoại này liệt kê các gói có sẵn, nhưng cho phép bạn nâng cấp hoặc gỡ cài các gói chỉ có ở thư mục"
+
+#: thonny/plugins/pip_gui.py:440
+msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means."
+msgstr "Các gói mới cũng sẽ được cài đặt vào đường dẫn này. Các đường dẫn khác phải được quản lý bằng các phương thức thay thế."
+
+#: thonny/plugins/pip_gui.py:493
+msgid "Installed version:"
+msgstr "Phiên bản đã cài đặt:"
+
+#: thonny/plugins/pip_gui.py:495
+msgid "Installed to:"
+msgstr "Đã cài đến:"
+
+#: thonny/plugins/pip_gui.py:573
+msgid "Please check your spelling!"
+msgstr "Hãy xem lỗi chính tả của bạn!"
+
+#: thonny/plugins/pip_gui.py:577
+msgid "Could not find the package info from PyPI."
+msgstr "Không thể tìm được thông tin gói từ PyPI."
+
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
+msgid "Error code:"
+msgstr "Mã lỗi:"
+
+#: thonny/plugins/pip_gui.py:748
+msgid "Can't find package name from the list:"
+msgstr "Không thể tìm tên gói trong danh sách:"
+
+#: thonny/plugins/pip_gui.py:803
+msgid "Package '{}' is required for installing and uninstalling other packages."
+msgstr "Yêu cầu gói \"{}\" để cài đặt và gỡ cài các gói khác."
+
+#: thonny/plugins/pip_gui.py:848
+msgid "Package"
+msgstr "Gói"
+
+#: thonny/plugins/pip_gui.py:960
+msgid "Manage packages for %s"
+msgstr "Quản lý các gói cho %s"
+
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
+msgid "Confirmation"
+msgstr "Xác nhận"
+
+#: thonny/plugins/pip_gui.py:1035
+#, fuzzy
+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 "Có thể bạn đang cài một gói liên quan đến Thonny.\n"
+"Nếu bạn có ý định cài một tiện ích Thonny, bạn sẽ phải\n"
+"chọn \"Công cụ → Quản lý tiện ích...\"\n"
+"\n"
+"Bạn có muốn cài %s cho backend không?"
+
+#: thonny/plugins/pip_gui.py:1141
+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 "LƯU Ý! Đã có một phiên bản khác tương thích với phiên bản hiện tại của Thonny. Nhấp vào nút \"...\" để chọn phiên bản cài đặt."
+
+#: thonny/plugins/pip_gui.py:1149
+msgid "Thonny plugin without requirements"
+msgstr "Tiện ích Thonny không có quy định"
+
+#: thonny/plugins/pip_gui.py:1165
+msgid "Unsuitable requirements"
+msgstr "Các quy định không thỏa mãn"
+
+#: thonny/plugins/pip_gui.py:1166
+msgid "This package requires different Thonny version:"
+msgstr "Gói này yêu cầu phiên bản Thonny khác:"
+
+#: thonny/plugins/pip_gui.py:1170
+msgid "If you still want it, then please install it from the command line."
+msgstr "Nếu bạn vẫn muốn có nó, vui lòng cài đặt nó từ dòng lệnh."
+
+#: thonny/plugins/pip_gui.py:1207
+msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
+msgstr "LƯU Ý! Bạn cần phải khởi động lại Thonny sau khi cài đặt / cập nhật / gỡ cài một tiện ích."
+
+#: thonny/plugins/pip_gui.py:1217
+msgid "Thonny plug-ins"
+msgstr "Tiện ích Thonny"
+
+#: thonny/plugins/pip_gui.py:1253
+msgid "Advanced install / upgrade / downgrade"
+msgstr "Cài đặt / nâng cấp / hạ cấp nâng cao"
+
+#: thonny/plugins/pip_gui.py:1262
+msgid "Desired version"
+msgstr "Phiên bản mong muốn"
+
+#: thonny/plugins/pip_gui.py:1321
+msgid "Upgrade dependencies"
+msgstr "Nâng cấp các phụ thuộc"
+
+#: thonny/plugins/pip_gui.py:1406
+msgid "Requires:"
+msgstr "Yêu cầu:"
+
+#: thonny/plugins/pip_gui.py:1410
+msgid "Error:"
+msgstr "Lỗi:"
+
+#: thonny/plugins/pip_gui.py:1601
+msgid "Manage packages..."
+msgstr "Quản lý gói..."
+
+#: thonny/plugins/pip_gui.py:1607
+msgid "Manage plug-ins..."
+msgstr "Quản lý tiện ích..."
+
+#: thonny/plugins/replayer.py:364
+msgid "Open replayer..."
+msgstr "Mở replayer..."
+
+#: thonny/plugins/run_debug_config_page.py:21
+msgid "Change working directory to script directory on Run / Debug"
+msgstr "Thay đổi đường dẫn làm việc thành đường dẫn đoạn mã trong chế độ Chạy / Gỡ lỗi"
+
+#: thonny/plugins/run_debug_config_page.py:35
+msgid "Show function calls (frames) in separate windows"
+msgstr "Hiện các lệnh gọi hàm (bước) tại cửa sổ riêng"
+
+#: thonny/plugins/run_debug_config_page.py:36
+msgid "Uncheck if you want more traditional experience."
+msgstr "Bỏ chọn nếu bạn muốn một trải nghiệm truyền thống hơn."
+
+#: thonny/plugins/run_debug_config_page.py:42
+msgid "Open and close Stack view automatically"
+msgstr "Tự động mở và đóng giao diện Ngăn xếp"
+
+#: thonny/plugins/run_debug_config_page.py:43
+msgid "Opens the Stack view on first call and closes it when program returns to main frame."
+msgstr "Mở cửa số Ngăn xếp trong lần gọi hàm đầu tiên và đóng lại nó khi chương trình trở về cửa số chính."
+
+#: thonny/plugins/run_debug_config_page.py:52
+msgid "Allow stepping into libraries (ie. outside of main script directory)"
+msgstr "Cho phép bước vào thư viện (tức là ngoài đường dẫn đoạn mã chính)"
+
+#: thonny/plugins/run_debug_config_page.py:53
+msgid "May make debugging slower."
+msgstr "Có nguy cơ làm chậm quá trình gỡ lỗi."
+
+#: thonny/plugins/run_debug_config_page.py:58
+msgid "Preferred debugger"
+msgstr "Trình sửa lỗi đề nghị"
+
+#: thonny/plugins/run_debug_config_page.py:70
+msgid "(used when clicking Debug toolbar button)"
+msgstr "(được sử dụng khi nhấp chuột vào nút Gỡ lỗi trên thanh công cụ)"
+
+#: thonny/plugins/run_debug_config_page.py:75
+msgid "Birdseye port"
+msgstr "Cổng Birdseye"
+
+#: thonny/plugins/run_debug_config_page.py:79
+msgid "(restart Thonny after changing this)"
+msgstr "(phải khởi động lại Thonny sau khi thay đổi thiết lập này)"
+
+#: thonny/plugins/run_debug_config_page.py:87
+msgid "Run & Debug"
+msgstr "Chạy và Gỡ lỗi"
+
+#: thonny/plugins/shell_config_page.py:26
+msgid "Terminal emulation"
+msgstr "Mô phỏng đầu cuối"
+
+#: thonny/plugins/shell_config_page.py:28
+msgid "supports basic ANSI-colors and styles"
+msgstr "hỗ trợ màu và kiểu chữ ANSI cơ bản"
+
+#: thonny/plugins/shell_config_page.py:40
+msgid "Maximum number of lines to keep."
+msgstr "Số dòng tối đa để giữ."
+
+#: thonny/plugins/shell_config_page.py:42
+msgid "NB! Large values may cause poor performance!"
+msgstr "LƯU Ý! Các giá trị quá lớn có thể khiến máy chạy chậm!"
+
+#: thonny/plugins/shell_config_page.py:58
+msgid "Maximum length of line fragments before squeezing"
+msgstr ""
+
+#: thonny/plugins/terminal_config_page.py:12
+msgid "Running current script in terminal"
+msgstr "Đang chạy đoạn mã hiện tại bằng đầu cuối"
+
+#: thonny/plugins/terminal_config_page.py:17
+msgid "Present Python REPL after program ends"
+msgstr ""
+
+#: thonny/plugins/terminal_config_page.py:24
+msgid "Keep terminal window open after Python process ends"
+msgstr "Giữ cho cửa số đầu cuối được mở sau khi kết thúc lệnh Python"
+
+#: 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 "LƯU Ý! Phải bật chức năng tự động đóng trong phần cài đặt Đầu cuối\n"
+"(Terminal → Tùy chọn → Cấu hình → Shell → Khi shell thoát)"
+
+#: thonny/plugins/terminal_config_page.py:41
+msgid "Terminal"
+msgstr "Đầu cuối"
+
+#: thonny/plugins/theme_and_font_config_page.py:39
+msgid "UI theme"
+msgstr "Màu nền giao diện"
+
+#: thonny/plugins/theme_and_font_config_page.py:52
+msgid "Syntax theme"
+msgstr "Màu nền cú pháp"
+
+#: thonny/plugins/theme_and_font_config_page.py:84
+msgid "Editor font"
+msgstr "Phông chữ trình sửa mã"
+
+#: thonny/plugins/theme_and_font_config_page.py:107
+msgid "IO font"
+msgstr "Phông chữ đầu cuối"
+
+#: thonny/plugins/theme_and_font_config_page.py:132
+msgid "Preview"
+msgstr "Mẫu"
+
+#: thonny/plugins/theme_and_font_config_page.py:150
+msgid "This is a comment"
+msgstr "Đây là chú thích"
+
+#: thonny/plugins/theme_and_font_config_page.py:153
+msgid "The answer is"
+msgstr "Đáp án chính xác là "
+
+#. Python 3 allows Unicode characters for variable names. Therefore, the variables can be written in Vietnamese diacritics as well.
+#: thonny/plugins/theme_and_font_config_page.py:157
+msgid "unclosed_string"
+msgstr "chuỗiThiếuDấuĐóngNgoặc"
+
+#: thonny/plugins/theme_and_font_config_page.py:159
+msgid "blah, blah"
+msgstr "linh ta linh tinh"
+
+#: thonny/plugins/theme_and_font_config_page.py:183
+msgid "NB! Some style elements change only after restarting Thonny!"
+msgstr "LƯU Ý! Một vài phần tử định dạng văn bản có thể được thay đổi sau khi khởi động lại Thonny!"
+
+#: thonny/plugins/theme_and_font_config_page.py:222
+msgid "Enter an integer"
+msgstr "Nhập số nguyên"
+
+#: thonny/plugins/theme_and_font_config_page.py:235
+msgid "Theme & Font"
+msgstr "Màu nền và phông chữ"
+
+#: thonny/plugins/thonny_folders.py:19
+msgid "Open Thonny program folder..."
+msgstr "Mở thư mục chương trình Thonny..."
+
+#: thonny/plugins/thonny_folders.py:24
+msgid "Open Thonny data folder..."
+msgstr "Mở thư mục dữ liệu Thonny..."
+
+#: thonny/plugins/help/__init__.py:70
+msgid "Home"
+msgstr "Trang chính"
+
+#: thonny/plugins/help/__init__.py:81
+msgid "Help contents"
+msgstr "Mục lục trợ giúp"
+
+#: thonny/plugins/micropython/mp_front.py:303
+msgid "CircuitPython device"
+msgstr "Thiết bị CircuitPython"
+
+#: thonny/plugins/micropython/mp_front.py:307
+msgid "MicroPython device"
+msgstr "Thiết bị MicroPython"
+
+#: thonny/plugins/micropython/mp_front.py:558
+msgid "Connect your device to the computer and select corresponding port below"
+msgstr "Kết nối thiết bị của bạn vào máy tính và chọn cổng tương ứng dưới đây"
+
+#: thonny/plugins/micropython/mp_front.py:561
+msgid "look for your device name, \"USB Serial\" or \"UART\""
+msgstr ""
+
+#: thonny/plugins/micropython/mp_front.py:563
+msgid "If you can't find it, you may need to install proper USB driver first."
+msgstr "Nếu bạn không tìm được nó, bạn có thể cần phải cài đặt driver USB thích hợp trước."
+
+#: thonny/plugins/micropython/mp_front.py:453
+msgid "Port"
+msgstr "Cổng"
+
+#: thonny/plugins/micropython/mp_front.py:458
+msgid "Try to detect port automatically"
+msgstr "Đang cố gắng tự động phát hiện cổng"
+
+#: thonny/plugins/micropython/__init__.py:24
+msgid "MicroPython (generic)"
+msgstr "MicroPython (chung)"
+
+#: thonny/plugins/printing/__init__.py:98
+msgid "Print..."
+msgstr "In..."
+
+#: thonny/plugins/system_shell/__init__.py:63
+msgid "Open system shell..."
+msgstr "Mở shell hệ thống..."
+
+#: thonny/plugins/backend_config_page.py:109
+msgid "Details"
+msgstr "Chi tiết"
+
+#: thonny/plugins/pip_gui.py:395
+msgid "Install from requirements file"
+msgstr "Cài đặt từ tệp quy định"
+
+#: thonny/plugins/pip_gui.py:407
+msgid "Install from local file"
+msgstr "Cài đặt từ tệp cục bộ"
+
+#: thonny/plugins/pip_gui.py:1200
+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 "Hộp thoại này sẽ dành cho việc quản lý các tiện ích của Thonny và các phụ thuộc của chúng.\n"
+"Nếu bạn muốn cài đặt gói tiện ích cho chương trình của riêng bạn, hãy chọn \"Công cụ→ Quản lý gói...\""
+
+#: thonny/plugins/circuitpython/__init__.py:10
+msgid "CircuitPython (generic)"
+msgstr "CircuitPython (chung)"
+
+#: thonny/plugins/commenting_indenting.py:142
+msgid "Indent selected lines"
+msgstr "Thụt vào các dòng đã chọn"
+
+#: thonny/plugins/commenting_indenting.py:152
+msgid "Dedent selected lines"
+msgstr "Thụt ra các dòng đã chọn"
+
+#: thonny/workbench.py:1481
+msgid "Switch to\n"
+"regular\n"
+"mode"
+msgstr "Chuyển sang\n"
+"chế độ\n"
+"bình thường"
+
+#: thonny/plugins/microbit/__init__.py:62
+msgid "Make sure MicroPython has been installed to your micro:bit."
+msgstr "Đảm bảo rằng MicroPython đã được cài đặt lên micro:bit của bạn."
+
+#: thonny/plugins/microbit/__init__.py:64
+msgid "Don't forget that main.py only works without embedded main script."
+msgstr "Đừng quên rằng main.py chỉ hoạt động mà không cần nhúng đoạn mã chính."
+
+#: thonny/misc_utils.py:177
+msgid "Could not find disk '%s'. Do you want to locate it yourself?"
+msgstr "Không thể tìm thấy ổ đĩa \"%s\". Bạn có muốn tự định vị nó không?"
+
+#: thonny/misc_utils.py:180
+msgid "Found several '%s' disks. Do you want to choose one yourself?"
+msgstr "Đã tìm thấy một số ổ đĩa \"%s\". Bạn có muốn tự chọn nó không?"
+
+#: thonny/misc_utils.py:196
+msgid "Can't find suitable disk"
+msgstr "Không tìm thấy ổ đĩa hợp lệ"
+
+#: thonny/base_file_browser.py:294
+msgid "%d items"
+msgstr "%d mục"
+
+#: thonny/base_file_browser.py:743
+msgid "Move to Trash"
+msgstr "Chuyển vào Thùng rác"
+
+#: thonny/base_file_browser.py:746
+msgid "Delete"
+msgstr "Xóa"
+
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
+msgid "New directory"
+msgstr "Đường dẫn mới"
+
+#: thonny/base_file_browser.py:749
+msgid "Properties"
+msgstr "Thuộc tính"
+
+#: thonny/base_file_browser.py:751
+msgid "Storage space"
+msgstr "Dụng lượng lưu trữ"
+
+#: thonny/base_file_browser.py:761
+msgid "Path"
+msgstr "Đường dẫn"
+
+#: thonny/base_file_browser.py:763
+msgid "Directory properties"
+msgstr "Thuộc tính đường dẫn"
+
+#: thonny/base_file_browser.py:765
+msgid "File properties"
+msgstr "Thuộc tính tệp"
+
+#: thonny/base_file_browser.py:767
+msgid "bytes"
+msgstr "byte"
+
+#: thonny/base_file_browser.py:770
+msgid "Size"
+msgstr "Kích thước"
+
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
+msgid "Modified"
+msgstr ""
+
+#: thonny/base_file_browser.py:842
+msgid "Deleting %s"
+msgstr "Đang xóa %s"
+
+#: thonny/editors.py:262
+msgid "Loading"
+msgstr "Đang tải"
+
+#: thonny/editors.py:395
+msgid "Saving"
+msgstr "Đang lưu"
+
+#: thonny/plugins/files.py:219
+msgid "Upload to %s"
+msgstr "Tải lên %s"
+
+#: thonny/plugins/files.py:420
+msgid "Downloading %s to %s"
+msgstr "Đang tải về %s đến %s"
+
+#: thonny/plugins/files.py:326
+msgid "Download to %s"
+msgstr "Tải về %s"
+
+#: thonny/base_file_browser.py:650
+msgid "Open in system file manager"
+msgstr "Mở bằng trình quản lý tệp hệ thống"
+
+#: thonny/base_file_browser.py:678
+msgid "Hide hidden files"
+msgstr "Ẩn các tệp bị ẩn"
+
+#: thonny/base_file_browser.py:678
+msgid "Show hidden files"
+msgstr "Hiện các tệp bị ẩn"
+
+#: thonny/base_file_browser.py:661
+msgid "Open in Thonny"
+msgstr "Mở bằng Thonny"
+
+#: thonny/base_file_browser.py:692
+msgid "Open in system default app"
+msgstr "Mở bằng ứng dụng mặc định của hệ thống"
+
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
+msgid "Configure %s files"
+msgstr "Cấu hình %s tệp"
+
+#: thonny/base_file_browser.py:701
+msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
+msgstr "Bạn sẽ làm gì với một tệp %s khi nhấn đúp chuột vào nó trong trình duyệt tệp của Thonny?"
+
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
+msgid "Deleting"
+msgstr "Đang xóa"
+
+#: thonny/base_file_browser.py:1265
+msgid "Creating directory"
+msgstr "Đang tạo đường dẫn"
+
+#: thonny/editors.py:260
+msgid "Loading %s"
+msgstr "Đang tải %s"
+
+#: thonny/editors.py:390
+msgid "Saving to %s"
+msgstr "Lưu vào %s"
+
+#: thonny/editors.py:728 thonny/editors.py:730
+msgid "Save All files"
+msgstr "Lưu hết các tệp"
+
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
+msgid "Configure interpreter..."
+msgstr "Cấu hình trình thông dịch..."
+
+#: thonny/workbench.py:1591
+msgid "Device"
+msgstr "Thiết bị"
+
+#: thonny/workdlg.py:234
+msgid "Cancelling"
+msgstr "Đang hủy"
+
+#: thonny/workdlg.py:270
+msgid "Starting"
+msgstr ""
+
+#: thonny/plugins/backend_config_page.py:249
+msgid "Authentication"
+msgstr "Xác thực"
+
+#: thonny/plugins/backend_config_page.py:251
+msgid "Enter the passphrase of your private key for\n"
+"{}"
+msgstr "Nhập mật mã khóa riêng tư của bạn cho\n"
+"{}"
+
+#: thonny/plugins/backend_config_page.py:254
+msgid "Enter your password for\n"
+"{}"
+msgstr "Nhập mật khẩu cho\n"
+"{}"
+
+#: thonny/plugins/object_inspector.py:486
+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:682
+msgid "Search results"
+msgstr "Kết quả tìm kiếm"
+
+#: thonny/plugins/pip_gui.py:683
+msgid "Searching"
+msgstr "Đang tìm kiếm"
+
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
+msgid "Installing '%s'"
+msgstr "Đang cài \"%s\""
+
+#: thonny/plugins/pip_gui.py:793
+msgid "Upgrading '%s'"
+msgstr "Đang nâng cấp \"%s\""
+
+#: thonny/plugins/pip_gui.py:800
+msgid "Uninstalling '%s'"
+msgstr "Đang gỡ cài \"%s\""
+
+#: thonny/plugins/pip_gui.py:814
+msgid "Installing"
+msgstr "Đang cài đặt"
+
+#: thonny/plugins/pip_gui.py:1562
+msgid "Package manager is not available for this interpreter"
+msgstr "Trình quản lý gói không có sẵn cho trình thông dịch này"
+
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
+msgid "Not supported"
+msgstr "Không được hỗ trợ"
+
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
+msgid "Not available"
+msgstr "Không có sẵn"
+
+#: thonny/plugins/pip_gui.py:1582
+msgid "You need to stop your program before launching the package manager."
+msgstr "Bạn phải dừng chương trình trước khi chạy trình quản lý gói."
+
+#: thonny/plugins/shell_config_page.py:73
+msgid "Open evaluated values in Object inspector"
+msgstr ""
+
+#: thonny/plugins/cpython_frontend/cp_front.py:234
+msgid "Python executable"
+msgstr "Tệp thực thi Python"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:258
+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:17
+msgid "Remote Python 3 (SSH)"
+msgstr "Điều khiển từ xa Python 3 (SSH)"
+
+#: thonny/plugins/micropython/mp_front.py:313
+msgid "Not connected"
+msgstr "Không kết nối"
+
+#: thonny/plugins/micropython/__init__.py:35
+msgid "MicroPython (local)"
+msgstr "MicroPython (cục bộ)"
+
+#: thonny/plugins/micropython/__init__.py:46
+msgid "MicroPython (SSH)"
+msgstr "MicroPython (SSH)"
+
+#: thonny/plugins/micropython/pip_gui.py:144
+msgid "no absolute lib directory in sys.path"
+msgstr "không có đường dẫn lib chính xác trên sys.path"
+
+#: thonny/plugins/pip_gui.py:71
+msgid "Search on PyPI"
+msgstr "Tìm kiếm trên PyPI"
+
+#: thonny/base_file_browser.py:693
+msgid "Open in Thonny's text editor"
+msgstr "Mở bằng trình sửa mã của Thonny"
+
+#: thonny/base_file_browser.py:346
+msgid "Storage space on this drive or filesystem"
+msgstr "Dung lượng trên ổ đĩa hoặc hệ thống tệp này"
+
+#: thonny/base_file_browser.py:347
+msgid "total space"
+msgstr "tổng dung lương"
+
+#: thonny/base_file_browser.py:349
+msgid "used space"
+msgstr "dung lượng đã dùng"
+
+#: thonny/base_file_browser.py:350
+msgid "free space"
+msgstr "dung lượng trống"
+
+#: thonny/base_file_browser.py:357
+msgid "Storage info"
+msgstr "Thông tin dung lượng"
+
+#: thonny/plugins/commenting_indenting.py:162
+msgid "Replace tabs with spaces"
+msgstr "Thay các ký tự tab bằng khoảng trắng"
+
+#: thonny/plugins/editor_config_page.py:33
+msgid "Highlight tab characters"
+msgstr "Tô màu các ký tự tab"
+
+#: thonny/plugins/editor_config_page.py:68
+msgid "Indent with tab characters (not recommended for Python)"
+msgstr "Thụt vào bằng ký tự tab (không khuyên dùng cho Python)"
+
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
+msgid "Name"
+msgstr "Tên"
+
+#: thonny/base_file_browser.py:96
+msgid "Size (bytes)"
+msgstr "Kích thước (byte)"
+
+#: thonny/base_file_browser.py:879
+msgid "Enter name for new directory under\n"
+"%s"
+msgstr "Nhập tên cho đường dẫn mới dưới đây\n"
+"%s"
+
+#: thonny/base_file_browser.py:902
+msgid "Nothing selected"
+msgstr "Không chọn gì"
+
+#: thonny/base_file_browser.py:902
+msgid "Select an item and try again!"
+msgstr "Hãy chọn một mục và thử lại!"
+
+#: thonny/base_file_browser.py:1329
+msgid "Open from %s"
+msgstr "Mở từ %s"
+
+#: thonny/base_file_browser.py:1332
+msgid "Save to %s"
+msgstr "Lưu vào %s"
+
+#: thonny/base_file_browser.py:1351
+msgid "File name:"
+msgstr "Tên tệp:"
+
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
+msgid "Value ID"
+msgstr "ID giá trị"
+
+#: thonny/memory.py:65 thonny/plugins/heap.py:23
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
+msgid "Value"
+msgstr "Giá trị"
+
+#: thonny/plugins/backend_config_page.py:272
+msgid "Save password"
+msgstr "Lưu mật khẩu"
+
+#: thonny/plugins/debugger.py:557
+msgid "Function call at %s"
+msgstr "Gọi hàm tại %s"
+
+#: thonny/plugins/debugger.py:1006
+msgid "Local variables"
+msgstr "Biến cục bộ"
+
+#: thonny/plugins/debugger.py:1038
+msgid "Function"
+msgstr "Hàm"
+
+#: thonny/plugins/debugger.py:1039
+msgid "Location"
+msgstr "Vị trí"
+
+#: thonny/plugins/debugger.py:1115
+msgid "If last command raised an exception then this view will show the stacktrace."
+msgstr "Nếu lệnh trước đó bị lỗi ngoại lệ thì giao diện này sẽ hiện stacktrace (dấu vết ngăn xếp)."
+
+#: thonny/plugins/heap.py:22
+msgid "ID"
+msgstr "ID"
+
+#: thonny/plugins/object_inspector.py:92
+msgid "Data"
+msgstr "Dữ liệu"
+
+#: thonny/plugins/object_inspector.py:93
+msgid "Attributes"
+msgstr "Thuộc tính"
+
+#: thonny/plugins/object_inspector.py:537
+msgid "Index"
+msgstr "Chỉ số"
+
+#: thonny/plugins/object_inspector.py:615
+msgid "Key ID"
+msgstr "ID khóa"
+
+#: thonny/plugins/object_inspector.py:616
+msgid "Key"
+msgstr "Khóa"
+
+#: thonny/plugins/variables.py:39
+msgid "Back to\n"
+"%s"
+msgstr "Trở về\n"
+"%s"
+
+#: thonny/plugins/micropython/mp_front.py:453
+msgid "Port or WebREPL"
+msgstr "Cổng hoặc WebREPL"
+
+#: thonny/plugins/micropython/mp_front.py:599
+msgid "Password"
+msgstr "Mật khẩu"
+
+#: thonny/plugins/debugger.py:964
+msgid "Source code"
+msgstr "Mã nguồn"
+
+#: thonny/plugins/general_config_page.py:29
+msgid "Use Tk file dialogs instead of Zenity"
+msgstr "Sử dụng hộp thoại tệp Tk thay cho 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 "Các biến môi trường (mỗi dòng một KEY=VALUE)"
+
+#: thonny/base_file_browser.py:722
+msgid "New file"
+msgstr "Tệp mới"
+
+#: thonny/base_file_browser.py:740
+msgid "Rename"
+msgstr "Đổi tên"
+
+#: thonny/base_file_browser.py:928
+msgid "Rename '%s'"
+msgstr "Đổi tên \"%s\""
+
+#: thonny/base_file_browser.py:928
+msgid "Enter new name"
+msgstr "Nhập tên mới"
+
+#: thonny/base_file_browser.py:1016
+msgid "Paste failed"
+msgstr "Không thể dán được"
+
+#: thonny/base_file_browser.py:1016
+msgid "There are conflicting folders"
+msgstr "Thư mục trùng tên với các thư mục khác"
+
+#: thonny/base_file_browser.py:1144
+msgid "File already exists"
+msgstr "Tệp đã tồn tại"
+
+#: thonny/base_file_browser.py:1212
+msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
+msgstr "Nếu đó là tệp văn bản thì bạn có thể cấu hình tệp đó để mở nó bằng Thonny bằng cách nhấp chuột phải vào nó và chọn \"Cấu hình ... tệp\"."
+
+#: thonny/editors.py:38
+msgid "Python files"
+msgstr "Các tệp Python"
+
+#: thonny/editors.py:123 thonny/editors.py:189
+msgid "<untitled>"
+msgstr "<không có tiêu đề>"
+
+#: thonny/editors.py:150
+msgid "File is gone"
+msgstr "Tệp bị mất"
+
+#: thonny/editors.py:153
+msgid "Do you want to also close the editor?"
+msgstr "Bạn có muốn đóng thêm trình sửa mã không?"
+
+#: thonny/editors.py:169
+msgid "External modification"
+msgstr "Thay đổi ngoại vi"
+
+#: thonny/editors.py:172
+msgid "Do you want to discard current editor content and reload the file from disk?"
+msgstr "Bạn có muốn bỏ nội dung trình sửa mã hiện tại và tải lại tệp từ ổ đĩa không?"
+
+#: thonny/editors.py:588
+msgid "Python files usually have .py extension."
+msgstr "Các tệp Python thường có đuôi .py."
+
+#: thonny/editors.py:590
+msgid "Did you mean '%s'?"
+msgstr "Ý bạn là \"%s\"?"
+
+#: thonny/editors.py:759
+msgid "Move / rename..."
+msgstr "Di chuyển / đổi tên..."
+
+#: thonny/editors.py:768
+msgid "Go to line..."
+msgstr "Đi đến dòng..."
+
+#: thonny/editors.py:1010
+msgid "Line number"
+msgstr "Số dòng"
+
+#: thonny/editors.py:1156
+msgid "Do you want to save files before closing?"
+msgstr "Bạn có muốn lưu các tệp trước khi đóng không?"
+
+#: thonny/editors.py:1158
+msgid "Do you want to save file before closing?"
+msgstr "Bạn có muốn lưu tệp trước khi đóng không?"
+
+#: thonny/editors.py:1161
+msgid "Save On Close"
+msgstr "Lưu Trong Khi Đóng"
+
+#: thonny/misc_utils.py:539
+msgid "Command not available"
+msgstr "Lệnh không có sắn"
+
+#: thonny/misc_utils.py:540
+msgid "This command is not available if Thonny is run via Flatpak"
+msgstr "Lệnh này không có sẵn nếu Thonny được chạy bằng Flatpak"
+
+#: thonny/workbench.py:700 thonny/workbench.py:799
+msgid "Support Ukraine"
+msgstr "Ủng hộ Ukraina"
+
+#: thonny/plugins/backend_config_page.py:90
+msgid "Which kind of interpreter should Thonny use for running your code?"
+msgstr "Thonny sẽ dùng trình thông dịch nào để chạy đoạn mã của bạn đây?"
+
+#: thonny/plugins/calltip.py:159
+msgid "Show parameter info"
+msgstr "Hiện thông tin tham số"
+
+#: thonny/plugins/editor_config_page.py:41
+msgid "Automatically show parameter info after typing '('"
+msgstr "Tự động hiện thông tin tham số sau khi gõ \"(\""
+
+#: thonny/plugins/editor_config_page.py:47
+msgid "Automatically propose completions while typing"
+msgstr "Tự động đề xuất các biến hoặc các hàm đầy đủ khi gõ"
+
+#: thonny/plugins/editor_config_page.py:52
+msgid "Automatically show documentation for completions"
+msgstr "Tự động hiển thị tài liệu liên quan đến việc tự viết đầy đủ"
+
+#: thonny/plugins/editor_config_page.py:57
+msgid "Request completions with Tab-key in editors"
+msgstr "Yêu cầu tự viết đầy đủ bằng phím Tab trong trình sửa mã"
+
+#: thonny/plugins/editor_config_page.py:62
+msgid "Request completions with Tab-key in Shell"
+msgstr "Yêu cầu tự viết đầy đủ bằng phím Tab trong Shell"
+
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
+msgid "Problem"
+msgstr "Vấn đề"
+
+#: thonny/plugins/goto_definition.py:58
+msgid "Could not find definition"
+msgstr "Không thể tìm định nghĩa khai báo"
+
+#: thonny/plugins/shell_config_page.py:17
+msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
+msgstr "Xóa Shell trước khi bắt đầu thực hiện lệnh mới (Chạy, Gỡ lỗi, Dừng/Khởi động lại, ...)"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:196
+msgid "Thonny's Python"
+msgstr "Python của Thonny"
+
+#: thonny/plugins/micropython/mp_front.py:496
+msgid "Interrupt working program on connect"
+msgstr "Ngắt chương trình đang chạy khi kết nối"
+
+#: thonny/plugins/micropython/mp_front.py:504
+msgid "Synchronize device's real time clock"
+msgstr "Đồng bộ hóa đồng hồ của thiết bị"
+
+#: thonny/plugins/micropython/mp_front.py:510
+msgid "Use local time in real time clock"
+msgstr "Sử dụng giờ địa phương trong đồng hồ thật"
+
+#: thonny/plugins/micropython/mp_front.py:516
+msgid "Restart interpreter before running a script"
+msgstr "Khởi động lại trình thông dịch trước khi chạy đoạn mã"
+
+#: thonny/plugins/micropython/pip_gui.py:26
+msgid "This doesn't look like MicroPython/CircuitPython package.\n"
+"Are you sure you want to install it?"
+msgstr "Đây không phải là gói MicroPython/CircuitPython hợp lệ.\n"
+"Bạn có muốn cài đặt nó không?"
+
+#: thonny/base_file_browser.py:853
+msgid "Moving to Trash"
+msgstr "Đang chuyển vào Thùng rác"
+
+#: thonny/base_file_browser.py:854
+msgid "Move %s to Trash?"
+msgstr "Chuyển %s vào Thùng rác?"
+
+#: thonny/base_file_browser.py:861
+msgid "Moving %s to Trash"
+msgstr "Đang chuyển %s vào Thùng rác"
+
+#: thonny/base_file_browser.py:666
+msgid "Open in default external app"
+msgstr "Mở bằng ứng dụng ngoại vi mặc định"
+
+#: thonny/base_file_browser.py:1210
+msgid "Opening remote files in external app is not supported."
+msgstr "Không hỗ trợ việc mở các tệp từ xa bằng ứng dụng ngoại vi."
+
+#: thonny/base_file_browser.py:1217
+msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
+msgstr "Nều tệp này cần được mở bằng các ứng dụng ngoài Thonny, bạn phải tải nó về một đường dẫn cục bộ và mở tệp từ đường dẫn đó!"
+
+#: thonny/editors.py:151
+msgid "Looks like '%s' was deleted or moved."
+msgstr "Có thể \"%s\" đã bị xóa hoặc bị chuyển."
+
+#: thonny/editors.py:170
+msgid "Looks like '%s' was modified outside of the editor."
+msgstr "Có thể \"%s\" đã được cập nhật ngoài trình sửa mã."
+
+#: thonny/plugins/cpython_frontend/cp_front.py:256
+msgid "NB! Thonny only supports Python %s and later"
+msgstr "LƯU Ý! Thonny chỉ hỗ trợ Python phiên bản %s trở lên"
+
+#: thonny/editors.py:1010
+msgid "Go to line"
+msgstr "Đi đến dòng"
+
+#: thonny/workbench.py:703
+msgid "Support"
+msgstr "Hỗ trợ"
+
+#: thonny/editors.py:399 thonny/editors.py:414
+msgid "Could not save"
+msgstr "Không thể lưu"
+
+#: thonny/plugins/general_config_page.py:135
+msgid "Warning"
+msgstr "Cảnh báo"
+
+#: thonny/plugins/general_config_page.py:136
+msgid "If you quote the value of an environment variable, the quotes will be part of the value.\n"
+"Did you intend this?"
+msgstr "Nếu bạn trích dẫn giá trị của biến môi trường, phần trích dẫn đó sẽ trở thành một phần của giá trị đó.\n"
+"Bạn muốn làm như thế chứ?"
+
+#: thonny/workbench.py:870
+msgid "Install MicroPython"
+msgstr "Cài đặt MicroPython"
+
+#: thonny/workbench.py:874
+msgid "Install CircuitPython"
+msgstr "Cài đặt CircuitPython"
+
+#: thonny/plugins/backend_config_page.py:210
+msgid "Make uploaded shebang scripts executable"
+msgstr "Bật thực thi mã script shebang đã tải lên"
+
+#: thonny/plugins/editor_config_page.py:91
+msgid "Make saved shebang scripts executable"
+msgstr "Bật thực thi mã script shebang đã lưu"
+
+#: thonny/plugins/files.py:224
+msgid "Activate virtual environment"
+msgstr "Kích hoạt môi trường ảo"
+
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
+msgid "Target"
+msgstr "Đường dẫn mục tiêu"
+
+#: thonny/plugins/pythontutor.py:41
+msgid "Visualize current script at Python Tutor"
+msgstr "Trực quan hóa đoạn mã hiện tại trên trang Python Tutor"
+
+#: thonny/plugins/todo_view.py:43
+msgid "Line"
+msgstr "Dòng"
+
+#: thonny/plugins/todo_view.py:44
+msgid "Info"
+msgstr "Thông tin"
+
+#: thonny/plugins/todo_view.py:121
+msgid "No line marked with #todo found"
+msgstr "Không tìm thấy dòng nào đước đánh dấu bằng #todo"
+
+#: thonny/plugins/todo_view.py:141
+msgid "TODO"
+msgstr "TODO"
+
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
+msgid "Install or update %s"
+msgstr "Cài đặt hoặc cập nhật %s"
+
+#: thonny/plugins/cpython_frontend/__init__.py:24
+msgid "Local Python 3"
+msgstr "Python 3 cục bộ"
+
+#: thonny/plugins/cpython_frontend/cp_front.py:266
+msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
+msgstr ""
+
+#: thonny/plugins/ev3/__init__.py:72
+msgid "Preparations (skip the VS Code part)"
+msgstr "Chuẩn bị (bỏ qua công đoạn VS Code)"
+
+#: thonny/plugins/ev3/__init__.py:78
+msgid "Default password"
+msgstr "Mật khẩu mặc định"
+
+#: thonny/running.py:392
+msgid "Information"
+msgstr "Thông tin"
+
+#: thonny/running.py:393
+msgid "For debugging the program must be saved first."
+msgstr "Chương trình phải được lưu trước khi gỡ lỗi."
+
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr "%s có thể không phải là tệp văn bản"
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr "Có vấn đề trong khi tải tệp"
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr "Tệp này có thể có vấn đề về mã hóa ký tự.\n"
+"\n"
+"Hãy chỉnh thành UTF-8 hoặc chèn thêm gợi ý mã hóa ký tự phù hợp."
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr "Tệp đã mở"
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr "Tệp này đã được mở bằng Thonny rồi.\n"
+"\n"
+"Nếu bạn muốn lưu bằng tên này,\n"
+"hãy đóng cửa sổ trình sửa mã này trước!"
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr "Lỗi Phân Quyền"
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr ""
+
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr "Back-end chưa sẵn sàng"
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr "Lưu đến đâu?"
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr "Vấn đề khả nghi"
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr ""
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr "Bạn vẫn muốn dùng tên này cho mã của mình chứ?"
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr "Đã gặp phải lỗi phân quyền khi đang cố gắng tải tệp\n"
+"%s"
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr ""
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr "Lỗi phân quyền"
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr "Cho phép chạy các tệp không có tên"
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr ""
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr ""
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
+msgstr ""
+
diff --git a/thonny/locale/zh_CN/LC_MESSAGES/thonny.mo b/thonny/locale/zh_CN/LC_MESSAGES/thonny.mo
index 561854d..50060fa 100644
Binary files a/thonny/locale/zh_CN/LC_MESSAGES/thonny.mo and b/thonny/locale/zh_CN/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/zh_CN/LC_MESSAGES/thonny.po b/thonny/locale/zh_CN/LC_MESSAGES/thonny.po
index 6fd569a..0ea6a19 100644
--- a/thonny/locale/zh_CN/LC_MESSAGES/thonny.po
+++ b/thonny/locale/zh_CN/LC_MESSAGES/thonny.po
@@ -7,77 +7,77 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: zh-CN\n"
 
-#: thonny/workbench.py:361
+#: thonny/workbench.py:369
 #, fuzzy
 msgid "File"
 msgstr "文件"
 
-#: thonny/workbench.py:362
+#: thonny/workbench.py:370
 #, fuzzy
 msgid "Edit"
 msgstr "编辑"
 
-#: thonny/workbench.py:363
+#: thonny/workbench.py:371
 #, fuzzy
 msgid "View"
 msgstr "视图"
 
-#: thonny/running.py:116 thonny/workbench.py:364
+#: thonny/running.py:116 thonny/workbench.py:372
 #, fuzzy
 msgid "Run"
 msgstr "运行"
 
-#: thonny/workbench.py:365
+#: thonny/workbench.py:373
 #, fuzzy
 msgid "Tools"
 msgstr "工具"
 
-#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:366
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:374
 #, fuzzy
 msgid "Help"
 msgstr "帮助"
 
-#: thonny/workbench.py:583
+#: thonny/workbench.py:591
 #, fuzzy
 msgid "Exit"
 msgstr "退出"
 
-#: thonny/workbench.py:610
+#: thonny/workbench.py:618
 #, fuzzy
 msgid "Decrease font size"
 msgstr "缩小字体"
 
-#: thonny/workbench.py:622
+#: thonny/workbench.py:630
 #, fuzzy
 msgid "Focus editor"
 msgstr "切换到编辑器"
 
-#: thonny/workbench.py:631
+#: thonny/workbench.py:639
 #, fuzzy
 msgid "Focus shell"
 msgstr "切换到shell"
 
-#: thonny/workbench.py:642
+#: thonny/workbench.py:650
 #, fuzzy
 msgid "Maximize view"
 msgstr "最大化查看"
 
-#: thonny/workbench.py:654
+#: thonny/workbench.py:662
 #, fuzzy
 msgid "Full screen"
 msgstr "全屏"
 
-#: thonny/workbench.py:1457
+#: thonny/workbench.py:1465
 #, fuzzy
 msgid "Program arguments"
 msgstr "程序参数"
 
-#: thonny/plugins/about.py:21 thonny/plugins/about.py:140
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:151
 #, fuzzy
 msgid "About Thonny"
 msgstr "关于Thonny"
 
-#: thonny/plugins/about.py:66
+#: thonny/plugins/about.py:77
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -90,7 +90,7 @@ msgstr "编写于:\n"
 "开源社区,树莓派基金会\n"
 "和Cybernetica AS"
 
-#: thonny/plugins/about.py:86
+#: thonny/plugins/about.py:97
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -102,11 +102,11 @@ msgstr "此软件绝不担保!\n"
 "你也可以在特定的条款下分发它,详细请查看\n"
 "https://opensource.org/licenses/MIT"
 
-#: thonny/plugins/about.py:129
+#: thonny/plugins/about.py:140
 msgid "Version history"
 msgstr "历史版本"
 
-#: thonny/plugins/about.py:136
+#: thonny/plugins/about.py:147
 msgid "Report problems"
 msgstr "反馈问题"
 
@@ -140,7 +140,7 @@ msgstr "禁用检查 (每行一个 id)"
 msgid "Assistant"
 msgstr "助手"
 
-#: thonny/plugins/autocomplete.py:512
+#: thonny/plugins/autocomplete.py:522
 #, fuzzy
 msgid "Auto-complete"
 msgstr "自动补全"
@@ -160,8 +160,8 @@ msgstr "关于Birdseye"
 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"
-"你想打开帮助页了解更多吗?"
+msgstr "Birdseye是一个需要独立安装的Python调试器。\n"
+"你想打开帮助页了解更多信息吗?"
 
 #: thonny/plugins/birdseye_frontend.py:84
 #, fuzzy
@@ -190,20 +190,20 @@ msgstr "撤销"
 msgid "Redo"
 msgstr "恢复"
 
-#: thonny/base_file_browser.py:721 thonny/plugins/common_editing_commands.py:49
-#: thonny/ui_utils.py:2294
+#: thonny/base_file_browser.py:724 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2295
 #, fuzzy
 msgid "Cut"
 msgstr "剪切"
 
-#: thonny/base_file_browser.py:722 thonny/plugins/common_editing_commands.py:61
-#: thonny/ui_utils.py:2295
+#: thonny/base_file_browser.py:725 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2296
 #, fuzzy
 msgid "Copy"
 msgstr "复制"
 
-#: thonny/base_file_browser.py:724 thonny/base_file_browser.py:730
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2296
+#: thonny/base_file_browser.py:727 thonny/base_file_browser.py:733
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2297
 #, fuzzy
 msgid "Paste"
 msgstr "粘贴"
@@ -282,12 +282,12 @@ msgstr "导出使用日志"
 msgid "Events"
 msgstr "事件"
 
-#: thonny/plugins/files.py:606
+#: thonny/plugins/files.py:609
 #, fuzzy
 msgid "Files"
 msgstr "文件"
 
-#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:430
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:437
 msgid "Find & Replace"
 msgstr "查找和替换"
 
@@ -336,12 +336,12 @@ msgstr "替换+查找"
 msgid "Replace all"
 msgstr "全部替换"
 
-#: thonny/plugins/find_replace.py:249
+#: thonny/plugins/find_replace.py:253
 #, fuzzy
 msgid "Enter string to be replaced."
 msgstr "输入替换的字符串"
 
-#: thonny/plugins/find_replace.py:333
+#: thonny/plugins/find_replace.py:338
 #, fuzzy
 msgid "The specified text was not found!"
 msgstr "找不到替换的文字!"
@@ -426,8 +426,8 @@ msgstr "Pygame Zero模式"
 msgid "Uninstall"
 msgstr "卸载"
 
-#: thonny/editors.py:667 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
-#: thonny/ui_utils.py:1871 thonny/workdlg.py:162
+#: thonny/editors.py:685 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
+#: thonny/ui_utils.py:1872 thonny/workdlg.py:162
 #, fuzzy
 msgid "Close"
 msgstr "关闭"
@@ -448,7 +448,7 @@ msgid "Upgrade"
 msgstr "升级"
 
 #: thonny/plugins/esp/__init__.py:349
-#: thonny/plugins/micropython/uf2dialog.py:348 thonny/plugins/pip_gui.py:73
+#: thonny/plugins/micropython/uf2dialog.py:410 thonny/plugins/pip_gui.py:73
 #, fuzzy
 msgid "Install"
 msgstr "安装"
@@ -524,75 +524,75 @@ msgstr "回到当前frame"
 msgid "Variables"
 msgstr "变量"
 
-#: thonny/base_file_browser.py:1558
+#: thonny/base_file_browser.py:1572
 #, fuzzy
 msgid "This computer"
 msgstr "此电脑"
 
-#: thonny/base_file_browser.py:641
+#: thonny/base_file_browser.py:644
 #, fuzzy
 msgid "Refresh"
 msgstr "刷新"
 
-#: thonny/base_file_browser.py:650
+#: thonny/base_file_browser.py:653
 #, fuzzy
 msgid "Focus into"
 msgstr "切换"
 
-#: thonny/base_file_browser.py:1393 thonny/base_file_browser.py:1405
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
 #: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
 #, fuzzy
 msgid "Error"
 msgstr "错误"
 
-#: thonny/base_file_browser.py:1393 thonny/base_file_browser.py:1405
+#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
 msgid "You need to select a file!"
 msgstr "你需要选择一个文件!"
 
-#: thonny/base_file_browser.py:1409
+#: thonny/base_file_browser.py:1423
 #, fuzzy
 msgid "Overwrite?"
 msgstr "覆盖?"
 
-#: thonny/base_file_browser.py:1409
+#: thonny/base_file_browser.py:1423
 #, fuzzy
 msgid "Do you want to overwrite '%s' ?"
 msgstr "你想要覆盖掉'%s'?"
 
-#: thonny/editors.py:632 thonny/editors.py:634
+#: thonny/editors.py:650 thonny/editors.py:652
 msgid "New"
 msgstr "新建"
 
-#: thonny/editors.py:645
+#: thonny/editors.py:663
 #, fuzzy
 msgid "Open..."
 msgstr "打开..."
 
-#: thonny/editors.py:647
+#: thonny/editors.py:665
 #, fuzzy
 msgid "Load"
 msgstr "加载"
 
-#: thonny/editors.py:656
+#: thonny/editors.py:674
 #, fuzzy
 msgid "Recent files"
 msgstr "最近的文件"
 
-#: thonny/editors.py:678 thonny/ui_utils.py:493
+#: thonny/editors.py:696 thonny/ui_utils.py:493
 msgid "Close all"
 msgstr "关闭全部"
 
-#: thonny/editors.py:688 thonny/editors.py:690
+#: thonny/editors.py:706 thonny/editors.py:708
 #, fuzzy
 msgid "Save"
 msgstr "保存"
 
-#: thonny/editors.py:713
+#: thonny/editors.py:731
 #, fuzzy
 msgid "Save as..."
 msgstr "另存为..."
 
-#: thonny/editors.py:724
+#: thonny/editors.py:742
 #, fuzzy
 msgid "Save copy..."
 msgstr "保存一个副本..."
@@ -636,88 +636,88 @@ msgstr "发送 EOF/软重启"
 msgid "Disconnect"
 msgstr "断开"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:268
+#: thonny/plugins/cpython_frontend/cp_front.py:269
 #, fuzzy
 msgid "Python interpreters"
 msgstr "Python解释器"
 
-#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:269
+#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:270
 #: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
 #, fuzzy
 msgid "all files"
 msgstr "全部文件"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:297
+#: thonny/plugins/cpython_frontend/cp_front.py:298
 #, fuzzy
 msgid "Select empty directory for new virtual environment"
 msgstr "为新的虚拟环境选择一个新的文件夹"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:304
+#: thonny/plugins/cpython_frontend/cp_front.py:305
 #, fuzzy
 msgid "Bad directory"
 msgstr "无效的文件夹"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:305
+#: thonny/plugins/cpython_frontend/cp_front.py:306
 #, fuzzy
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "选择的文件夹非空,\n"
 "请选择另一个或取消."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:322
+#: thonny/plugins/cpython_frontend/cp_front.py:323
 #, fuzzy
 msgid "Creating virtual environment"
 msgstr "新的虚拟环境"
 
-#: thonny/shell.py:100
+#: thonny/shell.py:101
 #, fuzzy
 msgid "Clear shell"
 msgstr "清空shell"
 
-#: thonny/shell.py:174
+#: thonny/shell.py:185
 #, fuzzy
 msgid "Plotter"
 msgstr "绘图器"
 
-#: thonny/shell.py:306
+#: thonny/shell.py:317
 #, fuzzy
 msgid "Clear"
 msgstr "清空"
 
-#: thonny/shell.py:319
+#: thonny/shell.py:330
 #, fuzzy
 msgid "Show Plotter"
 msgstr "显示绘图器"
 
-#: thonny/shell.py:1648
+#: thonny/shell.py:1659
 #, fuzzy
 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 "出于性能原因,Shell避免显示非常长的行(请参阅 工具 => 设置 => Shell).\n"
 "在这里,您可以与原始文本片段进行交互."
 
-#: thonny/shell.py:1659
+#: thonny/shell.py:1670
 #, fuzzy
 msgid "Wrap text (may be slow)"
 msgstr "换行文字(可能很慢)"
 
-#: thonny/ui_utils.py:1866
+#: thonny/ui_utils.py:1867
 msgid "Copy to clipboard"
 msgstr "复制文本到剪切板"
 
-#: thonny/shell.py:1701
+#: thonny/shell.py:1712
 #, fuzzy
 msgid "Squeezed text (%d characters)"
 msgstr "提取的文本(%d 个字符)"
 
-#: thonny/shell.py:1871
+#: thonny/shell.py:1882
 #, fuzzy
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
 msgstr "绘图器可以把输出到\n"
 "Shell中的数字可视化"
 
-#: thonny/shell.py:1873
+#: thonny/shell.py:1884
 #, fuzzy
 msgid "See Help for details."
 msgstr "详细请查看帮助."
@@ -742,76 +742,76 @@ msgstr "复制\n"
 "到\n"
 "  %s"
 
-#: thonny/base_file_browser.py:1364 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/base_file_browser.py:1378 thonny/config_ui.py:42 thonny/export.py:28
 #: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
-#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1818
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1819
 #: thonny/workdlg.py:164 thonny/workdlg.py:209
 #, fuzzy
 msgid "Cancel"
 msgstr "取消"
 
-#: thonny/base_file_browser.py:1355 thonny/config_ui.py:41 thonny/export.py:25
-#: thonny/plugins/about.py:100 thonny/plugins/backend_config_page.py:285
-#: thonny/ui_utils.py:154 thonny/ui_utils.py:1815 thonny/workdlg.py:206
+#: thonny/base_file_browser.py:1369 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:111 thonny/plugins/backend_config_page.py:285
+#: thonny/ui_utils.py:154 thonny/ui_utils.py:1816 thonny/workdlg.py:206
 msgid "OK"
 msgstr "好的"
 
-#: thonny/ui_utils.py:2300
+#: thonny/ui_utils.py:2301
 #, fuzzy
 msgid "Select All"
 msgstr "全选"
 
-#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:155
+#: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
 #: thonny/workbench.py:162
 #, fuzzy
 msgid "Shell"
 msgstr "Shell"
 
-#: thonny/workbench.py:593
+#: thonny/workbench.py:601
 msgid "Options..."
 msgstr "选项..."
 
-#: thonny/workbench.py:600
+#: thonny/workbench.py:608
 #, fuzzy
 msgid "Increase font size"
 msgstr "增大字体"
 
-#: thonny/workbench.py:665
+#: thonny/workbench.py:673
 #, fuzzy
 msgid "Change font size"
 msgstr "改变字体大小"
 
-#: thonny/workbench.py:666
+#: thonny/workbench.py:674
 #, fuzzy
 msgid "Zoom"
 msgstr "放大"
 
-#: thonny/workbench.py:675
+#: thonny/workbench.py:683
 #, fuzzy
 msgid "Exit Thonny"
 msgstr "退出Thonny"
 
-#: thonny/workbench.py:678
+#: thonny/workbench.py:686
 #, fuzzy
 msgid "Quit"
 msgstr "退出"
 
-#: thonny/workbench.py:1236 thonny/workbench.py:1244
+#: thonny/workbench.py:1244 thonny/workbench.py:1252
 #, fuzzy
 msgid "Overwriting theme '%s'"
 msgstr "重写主题 '%s'"
 
-#: thonny/workbench.py:1428
+#: thonny/workbench.py:1436
 #, fuzzy
 msgid "Program arguments:"
 msgstr "程序参数:"
 
-#: thonny/workbench.py:1482
+#: thonny/workbench.py:1490
 #, fuzzy
 msgid "Regular mode"
 msgstr "常规模式"
 
-#: thonny/workbench.py:1483
+#: thonny/workbench.py:1491
 #, fuzzy
 msgid "Configuration has been updated. Restart Thonny to start working in regular mode.\n"
 "\n"
@@ -887,12 +887,12 @@ msgstr "步出"
 #: thonny/plugins/debugger.py:1413
 #, fuzzy
 msgid "Step back"
-msgstr "回执"
+msgstr "回退"
 
 #: thonny/plugins/debugger.py:1415
 #, fuzzy
 msgid "Back"
-msgstr "回执"
+msgstr "退回"
 
 #: thonny/plugins/debugger.py:1421
 #, fuzzy
@@ -1059,7 +1059,7 @@ msgstr "包"
 msgid "Manage packages for %s"
 msgstr "管理%s包"
 
-#: thonny/editors.py:571 thonny/plugins/micropython/pip_gui.py:23
+#: thonny/editors.py:579 thonny/plugins/micropython/pip_gui.py:23
 #: thonny/plugins/pip_gui.py:953
 #, fuzzy
 msgid "Confirmation"
@@ -1206,7 +1206,7 @@ msgstr "Birdseye端口"
 #: thonny/plugins/run_debug_config_page.py:66
 #, fuzzy
 msgid "(restart Thonny after changing this)"
-msgstr "(改变后重启Thonny)"
+msgstr "(改变此项后要重启Thonny)"
 
 #: thonny/plugins/run_debug_config_page.py:74
 msgid "Run & Debug"
@@ -1344,36 +1344,36 @@ msgstr "主页"
 msgid "Help contents"
 msgstr "帮助内容"
 
-#: thonny/plugins/micropython/mp_front.py:300
+#: thonny/plugins/micropython/mp_front.py:303
 #, fuzzy
 msgid "CircuitPython device"
 msgstr "CircuitPython设备"
 
-#: thonny/plugins/micropython/mp_front.py:304
+#: thonny/plugins/micropython/mp_front.py:307
 #, fuzzy
 msgid "MicroPython device"
 msgstr "MicroPython设备"
 
-#: thonny/plugins/micropython/mp_front.py:541
+#: thonny/plugins/micropython/mp_front.py:547
 #, fuzzy
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "连接你的设备到电脑,并在下方选择响应端口"
 
-#: thonny/plugins/micropython/mp_front.py:544
+#: thonny/plugins/micropython/mp_front.py:550
 #, fuzzy
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "查找你的设备名字,\"USB Serial\"或\"UART\""
 
-#: thonny/plugins/micropython/mp_front.py:546
+#: thonny/plugins/micropython/mp_front.py:552
 #, fuzzy
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "如果未找到,你可能需要安装相应的USB驱动程序"
 
-#: thonny/plugins/micropython/mp_front.py:439
+#: thonny/plugins/micropython/mp_front.py:444
 msgid "Port"
 msgstr "端口"
 
-#: thonny/plugins/micropython/mp_front.py:449
+#: thonny/plugins/micropython/mp_front.py:454
 #, fuzzy
 msgid "Try to detect port automatically"
 msgstr "自动探测端口"
@@ -1430,7 +1430,7 @@ msgstr "缩进选择的行"
 msgid "Dedent selected lines"
 msgstr "反缩进选择的行"
 
-#: thonny/workbench.py:1471
+#: thonny/workbench.py:1479
 #, fuzzy
 msgid "Switch to\n"
 "regular\n"
@@ -1465,74 +1465,74 @@ msgstr "找到多个 '%s' 磁盘, 你想自己选择一个吗?"
 msgid "Can't find suitable disk"
 msgstr "无法找到合适的磁盘"
 
-#: thonny/base_file_browser.py:287
+#: thonny/base_file_browser.py:290
 msgid "%d items"
 msgstr "%d 项"
 
-#: thonny/base_file_browser.py:736
+#: thonny/base_file_browser.py:739
 msgid "Move to Trash"
 msgstr "移动到回收站"
 
-#: thonny/base_file_browser.py:739
+#: thonny/base_file_browser.py:742
 #, fuzzy
 msgid "Delete"
 msgstr "删除"
 
-#: thonny/base_file_browser.py:718 thonny/base_file_browser.py:869
+#: thonny/base_file_browser.py:721 thonny/base_file_browser.py:874
 msgid "New directory"
 msgstr "新建文件夹"
 
-#: thonny/base_file_browser.py:742
+#: thonny/base_file_browser.py:745
 #, fuzzy
 msgid "Properties"
 msgstr "属性"
 
-#: thonny/base_file_browser.py:744
+#: thonny/base_file_browser.py:747
 #, fuzzy
 msgid "Storage space"
 msgstr "存储空间"
 
-#: thonny/base_file_browser.py:754
+#: thonny/base_file_browser.py:757
 #, fuzzy
 msgid "Path"
 msgstr "路径"
 
-#: thonny/base_file_browser.py:756
+#: thonny/base_file_browser.py:759
 #, fuzzy
 msgid "Directory properties"
 msgstr "文件夹属性"
 
-#: thonny/base_file_browser.py:758
+#: thonny/base_file_browser.py:761
 #, fuzzy
 msgid "File properties"
 msgstr "文件属性"
 
-#: thonny/base_file_browser.py:760
+#: thonny/base_file_browser.py:763
 #, fuzzy
 msgid "bytes"
 msgstr "字节"
 
-#: thonny/base_file_browser.py:763
+#: thonny/base_file_browser.py:766
 #, fuzzy
 msgid "Size"
 msgstr "大小"
 
-#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:774
+#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:777
 #, fuzzy
 msgid "Modified"
 msgstr "修改时间"
 
-#: thonny/base_file_browser.py:833
+#: thonny/base_file_browser.py:838
 #, fuzzy
 msgid "Deleting %s"
 msgstr "删除 %s"
 
-#: thonny/editors.py:253
+#: thonny/editors.py:260
 #, fuzzy
 msgid "Loading"
 msgstr "加载中"
 
-#: thonny/editors.py:382
+#: thonny/editors.py:389
 #, fuzzy
 msgid "Saving"
 msgstr "保存中"
@@ -1542,69 +1542,69 @@ msgstr "保存中"
 msgid "Upload to %s"
 msgstr "上传到 %s"
 
-#: thonny/plugins/files.py:417
+#: thonny/plugins/files.py:420
 #, fuzzy
 msgid "Downloading %s to %s"
 msgstr "下载 %s 到 %s"
 
-#: thonny/plugins/files.py:323
+#: thonny/plugins/files.py:326
 #, fuzzy
 msgid "Download to %s"
 msgstr "下载到 %s"
 
-#: thonny/base_file_browser.py:643
+#: thonny/base_file_browser.py:646
 msgid "Open in system file manager"
 msgstr "打开系统文件管理器"
 
-#: thonny/base_file_browser.py:671
+#: thonny/base_file_browser.py:674
 msgid "Hide hidden files"
 msgstr "不显示隐藏文件"
 
-#: thonny/base_file_browser.py:671
+#: thonny/base_file_browser.py:674
 msgid "Show hidden files"
 msgstr "显示隐藏文件"
 
-#: thonny/base_file_browser.py:654
+#: thonny/base_file_browser.py:657
 msgid "Open in Thonny"
 msgstr "使用 Thonny 打开"
 
-#: thonny/base_file_browser.py:685
+#: thonny/base_file_browser.py:688
 msgid "Open in system default app"
 msgstr "使用系统默认应用打开"
 
-#: thonny/base_file_browser.py:666 thonny/base_file_browser.py:693
+#: thonny/base_file_browser.py:669 thonny/base_file_browser.py:696
 msgid "Configure %s files"
 msgstr "配置 %s 文件"
 
-#: thonny/base_file_browser.py:694
+#: thonny/base_file_browser.py:697
 msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
 msgstr "在 Thonny 文件浏览里双击 %s 文件时, 要执行什么?"
 
-#: thonny/base_file_browser.py:1240 thonny/editors.py:953 thonny/editors.py:955
+#: thonny/base_file_browser.py:1254 thonny/editors.py:979 thonny/editors.py:981
 msgid "Deleting"
 msgstr "正在删除"
 
-#: thonny/base_file_browser.py:1247
+#: thonny/base_file_browser.py:1261
 msgid "Creating directory"
 msgstr "正在创建文件夹"
 
-#: thonny/editors.py:251
+#: thonny/editors.py:258
 msgid "Loading %s"
 msgstr "加载 %s"
 
-#: thonny/editors.py:377
+#: thonny/editors.py:384
 msgid "Saving to %s"
 msgstr "正在保存到 %s"
 
-#: thonny/editors.py:702 thonny/editors.py:704
+#: thonny/editors.py:720 thonny/editors.py:722
 msgid "Save All files"
 msgstr "保存全部文件"
 
-#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:869
+#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:877
 msgid "Configure interpreter..."
 msgstr "配置解释器"
 
-#: thonny/workbench.py:1581
+#: thonny/workbench.py:1589
 msgid "Device"
 msgstr "设备"
 
@@ -1662,7 +1662,7 @@ msgstr "正在安装"
 msgid "Package manager is not available for this interpreter"
 msgstr "此解释器的包管理无法使用"
 
-#: thonny/base_file_browser.py:1191 thonny/plugins/pip_gui.py:1516
+#: thonny/base_file_browser.py:1205 thonny/plugins/pip_gui.py:1516
 msgid "Not supported"
 msgstr "不支持"
 
@@ -1678,11 +1678,11 @@ msgstr "启动包管理之前你需要停止你的应用。"
 msgid "Open evaluated values in Object inspector"
 msgstr "在对象检查器打开评估值"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:208
+#: thonny/plugins/cpython_frontend/cp_front.py:209
 msgid "Python executable"
 msgstr "Python可执行程序"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:231
+#: thonny/plugins/cpython_frontend/cp_front.py:232
 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)!"
@@ -1692,11 +1692,11 @@ msgstr "注意! 当从虚拟环境中选择可执行文件时文件选择按钮
 msgid "Remote Python 3 (SSH)"
 msgstr "远程 Python 3 (SSH)"
 
-#: thonny/plugins/micropython/mp_front.py:310
+#: thonny/plugins/micropython/mp_front.py:313
 msgid "Not connected"
 msgstr "无法连接"
 
-#: thonny/plugins/micropython/mp_front.py:515
+#: thonny/plugins/micropython/mp_front.py:521
 msgid "Advanced options"
 msgstr "高级选项"
 
@@ -1750,27 +1750,27 @@ msgstr "请等待"
 msgid "Search on PyPI"
 msgstr "在PyPI上搜索"
 
-#: thonny/base_file_browser.py:686
+#: thonny/base_file_browser.py:689
 msgid "Open in Thonny's text editor"
 msgstr "用 Thonny 打开"
 
-#: thonny/base_file_browser.py:339
+#: thonny/base_file_browser.py:342
 msgid "Storage space on this drive or filesystem"
 msgstr "磁盘或文件系统上的存储空间"
 
-#: thonny/base_file_browser.py:340
+#: thonny/base_file_browser.py:343
 msgid "total space"
 msgstr "总空间"
 
-#: thonny/base_file_browser.py:342
+#: thonny/base_file_browser.py:345
 msgid "used space"
 msgstr "已使用"
 
-#: thonny/base_file_browser.py:343
+#: thonny/base_file_browser.py:346
 msgid "free space"
 msgstr "剩余"
 
-#: thonny/base_file_browser.py:350
+#: thonny/base_file_browser.py:353
 msgid "Storage info"
 msgstr "存储信息"
 
@@ -1794,28 +1794,28 @@ msgstr "名称"
 msgid "Size (bytes)"
 msgstr "大小(字节)"
 
-#: thonny/base_file_browser.py:870
+#: thonny/base_file_browser.py:875
 msgid "Enter name for new directory under\n"
 "%s"
 msgstr "输入在 %s 目录下的新文件夹名"
 
-#: thonny/base_file_browser.py:893
+#: thonny/base_file_browser.py:898
 msgid "Nothing selected"
 msgstr "未选择"
 
-#: thonny/base_file_browser.py:893
+#: thonny/base_file_browser.py:898
 msgid "Select an item and try again!"
 msgstr "选择一项然后重试!"
 
-#: thonny/base_file_browser.py:1311
+#: thonny/base_file_browser.py:1325
 msgid "Open from %s"
 msgstr "打开自 %s"
 
-#: thonny/base_file_browser.py:1314
+#: thonny/base_file_browser.py:1328
 msgid "Save to %s"
 msgstr "保存到 %s"
 
-#: thonny/base_file_browser.py:1333
+#: thonny/base_file_browser.py:1347
 msgid "File name:"
 msgstr "文件名:"
 
@@ -1860,7 +1860,7 @@ msgstr "ID"
 
 #: thonny/plugins/object_inspector.py:92
 msgid "Data"
-msgstr "日期"
+msgstr "数据"
 
 #: thonny/plugins/object_inspector.py:93
 msgid "Attributes"
@@ -1884,11 +1884,11 @@ msgid "Back to\n"
 msgstr "回到\n"
 "%s"
 
-#: thonny/plugins/micropython/mp_front.py:439
+#: thonny/plugins/micropython/mp_front.py:444
 msgid "Port or WebREPL"
 msgstr "端口或 WebREPL"
 
-#: thonny/plugins/micropython/mp_front.py:583
+#: thonny/plugins/micropython/mp_front.py:589
 msgid "Password"
 msgstr "密码"
 
@@ -1908,35 +1908,35 @@ msgstr "选择它如果你的文件对话框一直出现在主窗口下层"
 msgid "Environment variables (one KEY=VALUE per line)"
 msgstr "环境变量(每行一个 KEY=VALUE )"
 
-#: thonny/base_file_browser.py:715
+#: thonny/base_file_browser.py:718
 msgid "New file"
 msgstr "新建文件"
 
-#: thonny/base_file_browser.py:733
+#: thonny/base_file_browser.py:736
 msgid "Rename"
 msgstr "重命名"
 
-#: thonny/base_file_browser.py:919
+#: thonny/base_file_browser.py:924
 msgid "Rename '%s'"
 msgstr "重命名 '%s'"
 
-#: thonny/base_file_browser.py:919
+#: thonny/base_file_browser.py:924
 msgid "Enter new name"
 msgstr "输入新名称"
 
-#: thonny/base_file_browser.py:1007
+#: thonny/base_file_browser.py:1012
 msgid "Paste failed"
 msgstr "粘贴失败"
 
-#: thonny/base_file_browser.py:1007
+#: thonny/base_file_browser.py:1012
 msgid "There are conflicting folders"
 msgstr "存在冲突的文件夹"
 
-#: thonny/base_file_browser.py:1129
+#: thonny/base_file_browser.py:1140
 msgid "File already exists"
 msgstr "文件已存在"
 
-#: thonny/base_file_browser.py:1194
+#: thonny/base_file_browser.py:1208
 msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
 msgstr "如果这是一个文本文件,你可以右键该文件并选择“配置...文件”来设置默认用 Thonny 打开"
 
@@ -1944,55 +1944,55 @@ msgstr "如果这是一个文本文件,你可以右键该文件并选择“配
 msgid "Python files"
 msgstr "Python 文件"
 
-#: thonny/editors.py:119 thonny/editors.py:182
+#: thonny/editors.py:122 thonny/editors.py:189
 msgid "<untitled>"
 msgstr "<无标题>"
 
-#: thonny/editors.py:146
+#: thonny/editors.py:149
 msgid "File is gone"
 msgstr "文件不见了"
 
-#: thonny/editors.py:149
+#: thonny/editors.py:152
 msgid "Do you want to also close the editor?"
 msgstr "你想关闭编辑器吗?"
 
-#: thonny/editors.py:165
+#: thonny/editors.py:168
 msgid "External modification"
 msgstr "文件被修改"
 
-#: thonny/editors.py:168
+#: thonny/editors.py:171
 msgid "Do you want to discard current editor content and reload the file from disk?"
 msgstr "是否要放弃当前编辑器内容并重新加载文件?"
 
-#: thonny/editors.py:572
+#: thonny/editors.py:580
 msgid "Python files usually have .py extension."
 msgstr "Python 文件通常具有 .py 扩展名。"
 
-#: thonny/editors.py:574
+#: thonny/editors.py:582
 msgid "Did you mean '%s'?"
 msgstr "您是指 '%s' 吗?"
 
-#: thonny/editors.py:733
+#: thonny/editors.py:751
 msgid "Move / rename..."
 msgstr "移动 / 重命名..."
 
-#: thonny/editors.py:742
+#: thonny/editors.py:760
 msgid "Go to line..."
 msgstr "跳转到行..."
 
-#: thonny/editors.py:977
+#: thonny/editors.py:1003
 msgid "Line number"
 msgstr "行号"
 
-#: thonny/editors.py:1123
+#: thonny/editors.py:1149
 msgid "Do you want to save files before closing?"
 msgstr "您想在关闭前保存文件吗?"
 
-#: thonny/editors.py:1125
+#: thonny/editors.py:1151
 msgid "Do you want to save file before closing?"
 msgstr "您想在关闭前保存文件吗?"
 
-#: thonny/editors.py:1128
+#: thonny/editors.py:1154
 msgid "Save On Close"
 msgstr "关闭文件时保存"
 
@@ -2004,7 +2004,7 @@ msgstr "命令不可用"
 msgid "This command is not available if Thonny is run via Flatpak"
 msgstr "如果 Thonny 通过 Flatpak 运行,则此命令不可用"
 
-#: thonny/workbench.py:686 thonny/workbench.py:786
+#: thonny/workbench.py:694 thonny/workbench.py:794
 msgid "Support Ukraine"
 msgstr "支持乌克兰"
 
@@ -2048,23 +2048,23 @@ msgstr "找不到定义"
 msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
 msgstr "在启动新进程之前清空 Shell(运行、调试、停止/重新启动,...)"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:170
+#: thonny/plugins/cpython_frontend/cp_front.py:171
 msgid "Thonny's Python"
 msgstr "Thonny 的 Python"
 
-#: thonny/plugins/micropython/mp_front.py:487
+#: thonny/plugins/micropython/mp_front.py:492
 msgid "Interrupt working program on connect"
 msgstr "连接时中断运行中的程序"
 
-#: thonny/plugins/micropython/mp_front.py:494
+#: thonny/plugins/micropython/mp_front.py:500
 msgid "Synchronize device's real time clock"
 msgstr "同步设备的实时时钟"
 
-#: thonny/plugins/micropython/mp_front.py:500
+#: thonny/plugins/micropython/mp_front.py:506
 msgid "Use local time in real time clock"
 msgstr "在实时时钟中使用本地时间"
 
-#: thonny/plugins/micropython/mp_front.py:506
+#: thonny/plugins/micropython/mp_front.py:512
 msgid "Restart interpreter before running a script"
 msgstr "运行代码前,先重启解释器"
 
@@ -2074,51 +2074,51 @@ msgid "This doesn't look like MicroPython/CircuitPython package.\n"
 msgstr "这看起来不像是 MicroPython/CircuitPython 包。\n"
 "您确定要安装它吗?"
 
-#: thonny/base_file_browser.py:844
+#: thonny/base_file_browser.py:849
 msgid "Moving to Trash"
 msgstr "移动到回收站"
 
-#: thonny/base_file_browser.py:845
+#: thonny/base_file_browser.py:850
 msgid "Move %s to Trash?"
 msgstr "移动 %s 到回收站?"
 
-#: thonny/base_file_browser.py:852
+#: thonny/base_file_browser.py:857
 msgid "Moving %s to Trash"
 msgstr "正在移动 %s 到回收站"
 
-#: thonny/base_file_browser.py:659
+#: thonny/base_file_browser.py:662
 msgid "Open in default external app"
 msgstr "在默认外部应用中打开"
 
-#: thonny/base_file_browser.py:1192
+#: thonny/base_file_browser.py:1206
 msgid "Opening remote files in external app is not supported."
 msgstr "不支持在外部应用程序中打开远程文件。"
 
-#: thonny/base_file_browser.py:1199
+#: thonny/base_file_browser.py:1213
 msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
 msgstr "如果文件需要在外部应用程序中打开,则将其下载到本地目录并从那里打开!"
 
-#: thonny/editors.py:147
+#: thonny/editors.py:150
 msgid "Looks like '%s' was deleted or moved."
 msgstr "文件“%s”已被删除或移动。"
 
-#: thonny/editors.py:166
+#: thonny/editors.py:169
 msgid "Looks like '%s' was modified outside of the editor."
 msgstr "文件“%s”在编辑器外被改动。"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:229
+#: thonny/plugins/cpython_frontend/cp_front.py:230
 msgid "NB! Thonny only supports Python %s and later"
 msgstr "注意!Thonny 仅支持 Python %s 及更高"
 
-#: thonny/editors.py:977
+#: thonny/editors.py:1003
 msgid "Go to line"
 msgstr "跳转到行"
 
-#: thonny/workbench.py:689
+#: thonny/workbench.py:697
 msgid "Support"
 msgstr "支持"
 
-#: thonny/editors.py:386 thonny/editors.py:401
+#: thonny/editors.py:393 thonny/editors.py:408
 msgid "Could not save"
 msgstr "无法保存"
 
@@ -2132,68 +2132,76 @@ msgid "If you quote the value of an environment variable, the quotes will be par
 msgstr "如果您引用环境变量的值,则引号将成为该值的一部分。\n"
 "你是故意的吗?"
 
-#: thonny/workbench.py:859
+#: thonny/workbench.py:867
 msgid "Install MicroPython"
-msgstr ""
+msgstr "安装 MicroPython 解释器"
 
-#: thonny/workbench.py:863
+#: thonny/workbench.py:871
 msgid "Install CircuitPython"
-msgstr ""
+msgstr "安装CircuitPython"
 
 #: thonny/plugins/backend_config_page.py:212
 msgid "Make uploaded shebang scripts executable"
-msgstr ""
+msgstr "使上传的shebang脚本可执行"
 
 #: thonny/plugins/editor_config_page.py:91
 msgid "Make saved shebang scripts executable"
-msgstr ""
+msgstr "使保存的shebang脚本可执行"
 
 #: thonny/plugins/files.py:224
 msgid "Activate virtual environment"
-msgstr ""
+msgstr "激活虚拟环境"
 
 #: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
 msgid "Target"
-msgstr ""
+msgstr "目标"
 
 #: thonny/plugins/pythontutor.py:41
 msgid "Visualize current script at Python Tutor"
-msgstr ""
+msgstr "在Python Tutor上可视化当前脚本"
 
-#: thonny/plugins/todo_view.py:42
+#: thonny/plugins/todo_view.py:44
 msgid "Line"
-msgstr ""
+msgstr "行"
 
-#: thonny/plugins/todo_view.py:43
+#: thonny/plugins/todo_view.py:45
 msgid "Info"
-msgstr ""
+msgstr "信息"
 
-#: thonny/plugins/todo_view.py:121
+#: thonny/plugins/todo_view.py:123
 msgid "No line marked with #todo found"
-msgstr ""
+msgstr "找不到标有 #todo 的行"
 
-#: thonny/plugins/todo_view.py:141
+#: thonny/plugins/todo_view.py:143
 msgid "TODO"
-msgstr ""
+msgstr "TODO"
 
 #: thonny/plugins/circuitpython/cirpy_front.py:98
-#: thonny/plugins/micropython/mp_front.py:530
+#: thonny/plugins/micropython/mp_front.py:536
 msgid "Install or update %s"
-msgstr ""
+msgstr "安装或更新 %s"
 
 #: thonny/plugins/cpython_frontend/__init__.py:24
 msgid "Local Python 3"
-msgstr ""
+msgstr "本地 Python3"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:239
+#: thonny/plugins/cpython_frontend/cp_front.py:240
 msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
-msgstr ""
+msgstr "选择虚拟环境文件夹或其中的“pyveng.cfg”时,您也可以通过文件导航中的右键单击上下文菜单来激活现有的虚拟环境。"
 
 #: thonny/plugins/ev3/__init__.py:72
 msgid "Preparations (skip the VS Code part)"
-msgstr ""
+msgstr "准备工作(跳过VS代码部分)"
 
 #: thonny/plugins/ev3/__init__.py:78
 msgid "Default password"
-msgstr ""
+msgstr "默认密码"
+
+#: thonny/running.py:338
+msgid "Information"
+msgstr "信息"
+
+#: thonny/running.py:339
+msgid "For debugging the program must be saved first."
+msgstr "在调试程序前必须保存"
 
diff --git a/thonny/locale/zh_TW/LC_MESSAGES/thonny.mo b/thonny/locale/zh_TW/LC_MESSAGES/thonny.mo
index a6db3c7..cb17abf 100644
Binary files a/thonny/locale/zh_TW/LC_MESSAGES/thonny.mo and b/thonny/locale/zh_TW/LC_MESSAGES/thonny.mo differ
diff --git a/thonny/locale/zh_TW/LC_MESSAGES/thonny.po b/thonny/locale/zh_TW/LC_MESSAGES/thonny.po
index 4d2edf2..db74865 100644
--- a/thonny/locale/zh_TW/LC_MESSAGES/thonny.po
+++ b/thonny/locale/zh_TW/LC_MESSAGES/thonny.po
@@ -7,63 +7,63 @@ msgstr ""
 "Project-Id-Version: Thonny\n"
 "Language: zh-TW\n"
 
-#: thonny/workbench.py:369
+#: thonny/workbench.py:375
 msgid "File"
 msgstr "檔案"
 
-#: thonny/workbench.py:370
+#: thonny/workbench.py:376
 msgid "Edit"
 msgstr "編輯"
 
-#: thonny/workbench.py:371
+#: thonny/workbench.py:377
 msgid "View"
 msgstr "檢視"
 
-#: thonny/running.py:116 thonny/workbench.py:372
+#: thonny/running.py:161 thonny/workbench.py:378
 msgid "Run"
 msgstr "執行"
 
-#: thonny/workbench.py:373
+#: thonny/workbench.py:379
 msgid "Tools"
 msgstr "工具"
 
-#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:374
+#: thonny/plugins/help/__init__.py:80 thonny/workbench.py:380
 msgid "Help"
 msgstr "說明"
 
-#: thonny/workbench.py:591
+#: thonny/workbench.py:598
 msgid "Exit"
 msgstr "結束"
 
-#: thonny/workbench.py:618
+#: thonny/workbench.py:625
 msgid "Decrease font size"
 msgstr "縮小字體"
 
-#: thonny/workbench.py:630
+#: thonny/workbench.py:637
 msgid "Focus editor"
 msgstr "取得焦點 (編輯器)"
 
-#: thonny/workbench.py:639
+#: thonny/workbench.py:646
 msgid "Focus shell"
-msgstr "取得焦點 (互動環境Shell)"
+msgstr "切換輸入焦點到互動環境"
 
-#: thonny/workbench.py:650
+#: thonny/workbench.py:656
 msgid "Maximize view"
 msgstr "最大化視窗"
 
-#: thonny/workbench.py:662
+#: thonny/workbench.py:668
 msgid "Full screen"
 msgstr "全螢幕"
 
-#: thonny/workbench.py:1465
+#: thonny/workbench.py:1467
 msgid "Program arguments"
 msgstr "程式引數 (args)"
 
-#: thonny/plugins/about.py:24 thonny/plugins/about.py:151
+#: thonny/plugins/about.py:24 thonny/plugins/about.py:153
 msgid "About Thonny"
 msgstr "關於 Thonny"
 
-#: thonny/plugins/about.py:77
+#: thonny/plugins/about.py:81
 msgid "Made in\n"
 "University of Tartu, Estonia,\n"
 "with the help from\n"
@@ -72,7 +72,7 @@ msgid "Made in\n"
 "and Cybernetica AS"
 msgstr "在 Cybernetica AS、樹莓派基金會及開源社區的協助下,由愛沙尼亞,塔爾圖大學製作"
 
-#: thonny/plugins/about.py:97
+#: thonny/plugins/about.py:101
 msgid "This program comes with\n"
 "ABSOLUTELY NO WARRANTY!\n"
 "It is free software, and you are welcome to\n"
@@ -85,11 +85,11 @@ msgstr "本程式不負任何瑕疵擔保!\n"
 "詳情請參閱 MIT License\n"
 "https://opensource.org/licenses/MIT"
 
-#: thonny/plugins/about.py:140
+#: thonny/plugins/about.py:142
 msgid "Version history"
 msgstr "版本歷史"
 
-#: thonny/plugins/about.py:147
+#: thonny/plugins/about.py:149
 msgid "Report problems"
 msgstr "回報問題"
 
@@ -113,15 +113,15 @@ msgstr "執行 MyPy 檢查"
 msgid "Disabled checks (one id per line)"
 msgstr "取消檢查 (每行 1 個 id)"
 
-#: thonny/assistance.py:985 thonny/plugins/assistant_config_page.py:74
+#: thonny/assistance.py:981 thonny/plugins/assistant_config_page.py:74
 msgid "Assistant"
 msgstr "協助功能"
 
-#: thonny/plugins/autocomplete.py:522
+#: thonny/plugins/autocomplete.py:529
 msgid "Auto-complete"
 msgstr "自動完成"
 
-#: thonny/plugins/backend_config_page.py:337
+#: thonny/plugins/backend_config_page.py:335
 msgid "Interpreter"
 msgstr "直譯器"
 
@@ -138,17 +138,17 @@ msgstr "Birdseye 是一個 Python 除錯器,需要獨立安裝。\n"
 
 #: thonny/plugins/birdseye_frontend.py:84
 msgid "Debug current script (birdseye)"
-msgstr "除錯目前程式 (birdseye)"
+msgstr "使用 birdseye 為目前腳本除錯"
 
-#: thonny/plugins/commenting_indenting.py:172
+#: thonny/plugins/commenting_indenting.py:171
 msgid "Toggle comment"
 msgstr "切換註解"
 
-#: thonny/plugins/commenting_indenting.py:182
+#: thonny/plugins/commenting_indenting.py:181
 msgid "Comment out"
 msgstr "轉為註解"
 
-#: thonny/plugins/commenting_indenting.py:192
+#: thonny/plugins/commenting_indenting.py:191
 msgid "Uncomment"
 msgstr "取消註解"
 
@@ -160,18 +160,18 @@ msgstr "復原"
 msgid "Redo"
 msgstr "取消復原"
 
-#: thonny/base_file_browser.py:724 thonny/plugins/common_editing_commands.py:49
-#: thonny/ui_utils.py:2295
+#: thonny/base_file_browser.py:728 thonny/plugins/common_editing_commands.py:49
+#: thonny/ui_utils.py:2339
 msgid "Cut"
 msgstr "剪下"
 
-#: thonny/base_file_browser.py:725 thonny/plugins/common_editing_commands.py:61
-#: thonny/ui_utils.py:2296
+#: thonny/base_file_browser.py:729 thonny/plugins/common_editing_commands.py:61
+#: thonny/ui_utils.py:2340
 msgid "Copy"
 msgstr "複製"
 
-#: thonny/base_file_browser.py:727 thonny/base_file_browser.py:733
-#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2297
+#: thonny/base_file_browser.py:731 thonny/base_file_browser.py:737
+#: thonny/plugins/common_editing_commands.py:73 thonny/ui_utils.py:2341
 msgid "Paste"
 msgstr "貼上"
 
@@ -179,15 +179,15 @@ msgstr "貼上"
 msgid "Select all"
 msgstr "全選"
 
-#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1401
+#: thonny/plugins/debugger.py:145 thonny/plugins/debugger.py:1402
 msgid "Run to cursor"
 msgstr "執行至游標"
 
-#: thonny/plugins/debugger.py:982
+#: thonny/plugins/debugger.py:985
 msgid "Can't close yet"
 msgstr "目前還不能關閉"
 
-#: thonny/plugins/debugger.py:983
+#: thonny/plugins/debugger.py:986
 msgid "Use \"Stop\" command if you want to cancel debugging"
 msgstr "要取消除錯,請使用 “停止” 指令"
 
@@ -240,7 +240,7 @@ msgstr "事件"
 msgid "Files"
 msgstr "檔案"
 
-#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:437
+#: thonny/plugins/find_replace.py:60 thonny/plugins/find_replace.py:438
 msgid "Find & Replace"
 msgstr "尋找/取代"
 
@@ -248,43 +248,43 @@ msgstr "尋找/取代"
 msgid "Find:"
 msgstr "尋找:"
 
-#: thonny/plugins/find_replace.py:87
+#: thonny/plugins/find_replace.py:90
 msgid "Replace with:"
 msgstr "取代:"
 
-#: thonny/plugins/find_replace.py:105
+#: thonny/plugins/find_replace.py:108
 msgid "Case sensitive"
 msgstr "區分大小寫"
 
-#: thonny/plugins/find_replace.py:112
+#: thonny/plugins/find_replace.py:115
 msgid "Up"
 msgstr "向上"
 
-#: thonny/plugins/find_replace.py:116
+#: thonny/plugins/find_replace.py:119
 msgid "Down"
 msgstr "向下"
 
-#: thonny/plugins/find_replace.py:125
+#: thonny/plugins/find_replace.py:128
 msgid "Find"
 msgstr "尋找"
 
-#: thonny/plugins/find_replace.py:135
+#: thonny/plugins/find_replace.py:138
 msgid "Replace"
 msgstr "取代"
 
-#: thonny/plugins/find_replace.py:143
+#: thonny/plugins/find_replace.py:146
 msgid "Replace+Find"
 msgstr "取代+尋找"
 
-#: thonny/plugins/find_replace.py:153
+#: thonny/plugins/find_replace.py:156
 msgid "Replace all"
 msgstr "全部取代"
 
-#: thonny/plugins/find_replace.py:253
+#: thonny/plugins/find_replace.py:254
 msgid "Enter string to be replaced."
 msgstr "輸入要取代的字符串"
 
-#: thonny/plugins/find_replace.py:338
+#: thonny/plugins/find_replace.py:339
 msgid "The specified text was not found!"
 msgstr "找不到指定的文字!"
 
@@ -342,7 +342,7 @@ msgstr "前一個物件"
 msgid "Next object"
 msgstr "下一個物件"
 
-#: thonny/plugins/object_inspector.py:733
+#: thonny/plugins/object_inspector.py:732
 msgid "Object inspector"
 msgstr "物件檢查"
 
@@ -354,12 +354,12 @@ msgstr "大綱"
 msgid "Pygame Zero mode"
 msgstr "Pygame Zero 模式"
 
-#: thonny/plugins/pip_gui.py:79
+#: thonny/plugins/pip_gui.py:80
 msgid "Uninstall"
 msgstr "解除安裝"
 
-#: thonny/editors.py:685 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:491
-#: thonny/ui_utils.py:1872 thonny/workdlg.py:162
+#: thonny/editors.py:693 thonny/plugins/pip_gui.py:251 thonny/ui_utils.py:496
+#: thonny/ui_utils.py:1884 thonny/workdlg.py:203
 msgid "Close"
 msgstr "關閉"
 
@@ -371,60 +371,60 @@ msgstr "點擊"
 msgid "here"
 msgstr "這裡"
 
-#: thonny/plugins/pip_gui.py:76
+#: thonny/plugins/pip_gui.py:77
 msgid "Upgrade"
 msgstr "更新"
 
-#: thonny/plugins/esp/__init__.py:349
-#: thonny/plugins/micropython/uf2dialog.py:410 thonny/plugins/pip_gui.py:73
+#: thonny/plugins/micropython/base_flashing_dialog.py:398
+#: thonny/plugins/pip_gui.py:74
 msgid "Install"
 msgstr "安裝"
 
-#: thonny/plugins/pip_gui.py:535
+#: thonny/plugins/pip_gui.py:570
 msgid "Could not find the package from PyPI."
 msgstr "無法從 PyPI 中找到該套件"
 
-#: thonny/plugins/pip_gui.py:557
+#: thonny/plugins/pip_gui.py:592
 msgid "Latest stable version"
 msgstr "最新穩定版本"
 
-#: thonny/plugins/pip_gui.py:559
+#: thonny/plugins/pip_gui.py:594
 msgid "Latest version"
 msgstr "最新版本"
 
-#: thonny/plugins/pip_gui.py:561
+#: thonny/plugins/pip_gui.py:596
 msgid "Summary"
 msgstr "摘要"
 
-#: thonny/plugins/pip_gui.py:563
+#: thonny/plugins/pip_gui.py:598
 msgid "Author"
 msgstr "作者"
 
-#: thonny/plugins/pip_gui.py:565
+#: thonny/plugins/pip_gui.py:602
 msgid "Homepage"
 msgstr "網站主頁"
 
-#: thonny/plugins/pip_gui.py:567
+#: thonny/plugins/pip_gui.py:604
 msgid "Bugtracker"
 msgstr "問題追蹤"
 
-#: thonny/plugins/pip_gui.py:569
+#: thonny/plugins/pip_gui.py:606
 msgid "Documentation"
 msgstr "文件"
 
-#: thonny/plugins/pip_gui.py:571
+#: thonny/plugins/pip_gui.py:608
 msgid "PyPI page"
 msgstr "PyPI 頁面"
 
-#: thonny/plugins/pip_gui.py:611
+#: thonny/plugins/pip_gui.py:648
 msgid "Requires"
 msgstr "相依套件"
 
-#: thonny/plugins/pip_gui.py:743
+#: thonny/plugins/pip_gui.py:802
 msgid "Really uninstall?"
 msgstr "確定要解除安裝?"
 
-#: thonny/plugins/pip_gui.py:748
+#: thonny/plugins/pip_gui.py:807
 msgid "Are you sure you want to uninstall it?"
 msgstr "您確定要將它解除安裝嗎?"
 
@@ -438,64 +438,64 @@ msgstr "跳到目前 frame"
 msgid "Variables"
 msgstr "變數"
 
-#: thonny/base_file_browser.py:1572
+#: thonny/base_file_browser.py:1576
 msgid "This computer"
 msgstr "本機"
 
-#: thonny/base_file_browser.py:644
+#: thonny/base_file_browser.py:648
 msgid "Refresh"
 msgstr "重新整理"
 
-#: thonny/base_file_browser.py:653
+#: thonny/base_file_browser.py:657
 msgid "Focus into"
 msgstr "取得焦點 (切換目錄)"
 
-#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
-#: thonny/plugins/autocomplete.py:300 thonny/plugins/highlight_names.py:87
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
+#: thonny/plugins/autocomplete.py:303 thonny/plugins/highlight_names.py:86
 msgid "Error"
 msgstr "錯誤"
 
-#: thonny/base_file_browser.py:1407 thonny/base_file_browser.py:1419
+#: thonny/base_file_browser.py:1411 thonny/base_file_browser.py:1423
 msgid "You need to select a file!"
-msgstr "你必須選取一個檔案!"
+msgstr "你必須選取一個檔案!"
 
-#: thonny/base_file_browser.py:1423
+#: thonny/base_file_browser.py:1427
 msgid "Overwrite?"
 msgstr "覆寫?"
 
-#: thonny/base_file_browser.py:1423
+#: thonny/base_file_browser.py:1427
 msgid "Do you want to overwrite '%s' ?"
-msgstr "你想要覆寫 '%s' 嗎?"
+msgstr "你想要覆蓋 '%s' 嗎?"
 
-#: thonny/editors.py:650 thonny/editors.py:652
+#: thonny/editors.py:658 thonny/editors.py:660
 msgid "New"
 msgstr "開新檔案"
 
-#: thonny/editors.py:663
+#: thonny/editors.py:671
 msgid "Open..."
 msgstr "開啟舊檔"
 
-#: thonny/editors.py:665
+#: thonny/editors.py:673
 msgid "Load"
 msgstr "載入"
 
-#: thonny/editors.py:674
+#: thonny/editors.py:682
 msgid "Recent files"
 msgstr "最近編輯的檔案"
 
-#: thonny/editors.py:696 thonny/ui_utils.py:493
+#: thonny/editors.py:704 thonny/ui_utils.py:498
 msgid "Close all"
 msgstr "關閉全部"
 
-#: thonny/editors.py:706 thonny/editors.py:708
+#: thonny/editors.py:714 thonny/editors.py:716
 msgid "Save"
 msgstr "儲存檔案"
 
-#: thonny/editors.py:731
+#: thonny/editors.py:739
 msgid "Save as..."
 msgstr "另存新檔"
 
-#: thonny/editors.py:742
+#: thonny/editors.py:750
 msgid "Save copy..."
 msgstr "儲存複本..."
 
@@ -503,64 +503,64 @@ msgstr "儲存複本..."
 msgid "Thonny options"
 msgstr "Thonny 選項"
 
-#: thonny/running.py:115
+#: thonny/running.py:160
 msgid "Run current script"
-msgstr "執行目前程式"
+msgstr "執行目前腳本"
 
-#: thonny/running.py:146
+#: thonny/running.py:191
 msgid "Run current script in terminal"
-msgstr "在終端機執行目前程式"
+msgstr "在終端機執行目前腳本"
 
-#: thonny/running.py:159
+#: thonny/running.py:204
 msgid "Stop/Restart backend"
 msgstr "停止 / 重新啟動 後端程式"
 
-#: thonny/running.py:160
+#: thonny/running.py:205
 msgid "Stop"
 msgstr "停止"
 
-#: thonny/running.py:171
+#: thonny/running.py:216
 msgid "Interrupt execution"
 msgstr "中斷程式執行"
 
-#: thonny/running.py:184
+#: thonny/running.py:229
 msgid "Send EOF / Soft reboot"
 msgstr "送出 EOF / 軟開機"
 
-#: thonny/running.py:195
+#: thonny/running.py:240
 msgid "Disconnect"
 msgstr "中斷連接"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:269
+#: thonny/plugins/cpython_frontend/cp_front.py:295
 msgid "Python interpreters"
 msgstr "Python 直譯器"
 
-#: thonny/editors.py:36 thonny/plugins/cpython_frontend/cp_front.py:270
-#: thonny/plugins/pip_gui.py:789 thonny/plugins/pip_gui.py:802
+#: thonny/editors.py:39 thonny/plugins/cpython_frontend/cp_front.py:296
+#: thonny/plugins/pip_gui.py:848 thonny/plugins/pip_gui.py:861
 msgid "all files"
 msgstr "所有檔案"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:298
+#: thonny/plugins/cpython_frontend/cp_front.py:324
 msgid "Select empty directory for new virtual environment"
 msgstr "為新的虛擬環境選取一個空的資料夾"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:305
+#: thonny/plugins/cpython_frontend/cp_front.py:331
 msgid "Bad directory"
 msgstr "不合適的資料夾"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:306
+#: thonny/plugins/cpython_frontend/cp_front.py:332
 msgid "Selected directory is not empty.\n"
 "Select another or cancel."
 msgstr "選取的並不是空的資料夾.\n"
 "請選取其他資料夾或是取消."
 
-#: thonny/plugins/cpython_frontend/cp_front.py:323
+#: thonny/plugins/cpython_frontend/cp_front.py:349
 msgid "Creating virtual environment"
 msgstr "建立虛擬環境"
 
 #: thonny/shell.py:101
 msgid "Clear shell"
-msgstr "清除互動環境 (Shell)"
+msgstr "清除互動環境"
 
 #: thonny/shell.py:185
 msgid "Plotter"
@@ -574,41 +574,42 @@ msgstr "清除"
 msgid "Show Plotter"
 msgstr "顯示繪圖器"
 
-#: thonny/shell.py:1659
+#: thonny/shell.py:1660
 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 "為了效能,互動環境 (Shell) 會避免完整顯示過長的行 (請參考 工具 -> 選項  -> 互動環境) 。這裡可以調整原本的文字片段"
+msgstr "互動環境會為了效能而避免完整顯示過長的內容 (請參考『工具/選項/互動環境)。\n"
+"這裡可以看到原本的文字片段。"
 
-#: thonny/shell.py:1670
+#: thonny/shell.py:1671
 msgid "Wrap text (may be slow)"
 msgstr "自動換行 (可能會變慢)"
 
-#: thonny/ui_utils.py:1867
+#: thonny/ui_utils.py:1879
 msgid "Copy to clipboard"
 msgstr "複製到剪貼簿"
 
-#: thonny/shell.py:1712
+#: thonny/shell.py:1713
 msgid "Squeezed text (%d characters)"
 msgstr "縮減文字 (%d 個字元)"
 
-#: thonny/shell.py:1882
+#: thonny/shell.py:1883
 msgid "Plotter visualizes series of\n"
 "numbers printed to the Shell."
-msgstr "繪圖器會畫出圖表 (一連串列印到互動環境Shell的數字)"
+msgstr "繪圖器會將一連串輸出到互動環境的數值繪成圖表。"
 
-#: thonny/shell.py:1884
+#: thonny/shell.py:1885
 msgid "See Help for details."
-msgstr "請看說明了解更多細節."
+msgstr "請看說明了解更多細節。"
 
-#: thonny/ui_utils.py:492
+#: thonny/ui_utils.py:497
 msgid "Close others"
 msgstr "關閉其他"
 
-#: thonny/ui_utils.py:1722
+#: thonny/ui_utils.py:1734
 msgid "Copying"
 msgstr "複製"
 
-#: thonny/ui_utils.py:1725
+#: thonny/ui_utils.py:1737
 msgid "Copying\n"
 "  %s\n"
 "to\n"
@@ -618,137 +619,137 @@ msgstr "複製\n"
 "到 \n"
 "%s"
 
-#: thonny/base_file_browser.py:1378 thonny/config_ui.py:42 thonny/export.py:28
-#: thonny/plugins/backend_config_page.py:290 thonny/plugins/pip_gui.py:1256
-#: thonny/ui_utils.py:157 thonny/ui_utils.py:1733 thonny/ui_utils.py:1819
-#: thonny/workdlg.py:164 thonny/workdlg.py:209
+#: thonny/base_file_browser.py:1382 thonny/config_ui.py:42 thonny/export.py:28
+#: thonny/plugins/backend_config_page.py:288 thonny/plugins/pip_gui.py:1338
+#: thonny/ui_utils.py:160 thonny/ui_utils.py:1745 thonny/ui_utils.py:1831
+#: thonny/workdlg.py:205 thonny/workdlg.py:259
 msgid "Cancel"
 msgstr "取消"
 
-#: thonny/base_file_browser.py:1369 thonny/config_ui.py:41 thonny/export.py:25
-#: thonny/plugins/about.py:111 thonny/plugins/backend_config_page.py:285
-#: thonny/ui_utils.py:154 thonny/ui_utils.py:1816 thonny/workdlg.py:206
+#: thonny/base_file_browser.py:1373 thonny/config_ui.py:41 thonny/export.py:25
+#: thonny/plugins/about.py:115 thonny/plugins/backend_config_page.py:283
+#: thonny/ui_utils.py:157 thonny/ui_utils.py:1828 thonny/workdlg.py:256
 msgid "OK"
 msgstr "確認"
 
-#: thonny/ui_utils.py:2301
+#: thonny/ui_utils.py:2345
 msgid "Select All"
 msgstr "全選"
 
 #: thonny/plugins/shell_config_page.py:82 thonny/shell.py:149
-#: thonny/workbench.py:162
+#: thonny/workbench.py:164
 msgid "Shell"
-msgstr "互動環境 (Shell)"
+msgstr "互動環境"
 
-#: thonny/workbench.py:601
+#: thonny/workbench.py:608
 msgid "Options..."
 msgstr "選項..."
 
-#: thonny/workbench.py:608
+#: thonny/workbench.py:615
 msgid "Increase font size"
 msgstr "放大字體"
 
-#: thonny/workbench.py:673
+#: thonny/workbench.py:679
 msgid "Change font size"
 msgstr "變更字型尺寸"
 
-#: thonny/workbench.py:674
+#: thonny/workbench.py:680
 msgid "Zoom"
 msgstr "縮放"
 
-#: thonny/workbench.py:683
+#: thonny/workbench.py:689
 msgid "Exit Thonny"
 msgstr "離開Thonny"
 
-#: thonny/workbench.py:686
+#: thonny/workbench.py:692
 msgid "Quit"
 msgstr "離開"
 
-#: thonny/workbench.py:1244 thonny/workbench.py:1252
+#: thonny/workbench.py:1247 thonny/workbench.py:1255
 msgid "Overwriting theme '%s'"
 msgstr "覆寫主題 '%s'"
 
-#: thonny/workbench.py:1436
+#: thonny/workbench.py:1438
 msgid "Program arguments:"
 msgstr "程式引數:"
 
-#: thonny/workbench.py:1490
+#: thonny/workbench.py:1492
 msgid "Regular mode"
 msgstr "一般模式"
 
-#: thonny/workbench.py:1491
+#: thonny/workbench.py:1493
 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:212
+#: thonny/plugins/ast_view.py:211
 msgid "Program tree"
 msgstr "程式樹"
 
-#: thonny/plugins/debugger.py:1283
+#: thonny/plugins/debugger.py:1284
 msgid "Resume"
 msgstr "繼續"
 
-#: thonny/plugins/debugger.py:1299
+#: thonny/plugins/debugger.py:1300
 msgid "Run / resume"
 msgstr "執行 / 繼續"
 
-#: thonny/plugins/debugger.py:1314
+#: thonny/plugins/debugger.py:1315
 msgid "Debug current script"
-msgstr "除錯目前程式"
+msgstr "為目前腳本除錯"
 
-#: thonny/plugins/debugger.py:1316
+#: thonny/plugins/debugger.py:1317
 msgid "Debug"
 msgstr "除錯"
 
-#: thonny/plugins/debugger.py:1327
+#: thonny/plugins/debugger.py:1328
 msgid "Debug current script (nicer)"
-msgstr "除錯目前的程式 (較佳)"
+msgstr "為目前腳本除錯 (呈現詳細步驟)"
 
-#: thonny/plugins/debugger.py:1339
+#: thonny/plugins/debugger.py:1340
 msgid "Debug current script (faster)"
-msgstr "除錯目前的程式 (較快)"
+msgstr "為目前腳本除錯 (不呈現詳細步驟)"
 
-#: thonny/plugins/debugger.py:1350
+#: thonny/plugins/debugger.py:1351
 msgid "Step over"
 msgstr "跳過 (Step Over)"
 
-#: thonny/plugins/debugger.py:1352
+#: thonny/plugins/debugger.py:1353
 msgid "Over"
 msgstr "跳下一步"
 
-#: thonny/plugins/debugger.py:1363
+#: thonny/plugins/debugger.py:1364
 msgid "Step into"
 msgstr "跳入 (Step into)"
 
-#: thonny/plugins/debugger.py:1365
+#: thonny/plugins/debugger.py:1366
 msgid "Into"
 msgstr "跳入"
 
-#: thonny/plugins/debugger.py:1376
+#: thonny/plugins/debugger.py:1377
 msgid "Step out"
 msgstr "跳出 (Step out) "
 
-#: thonny/plugins/debugger.py:1378
+#: thonny/plugins/debugger.py:1379
 msgid "Out"
 msgstr "跳出"
 
-#: thonny/plugins/debugger.py:1413
+#: thonny/plugins/debugger.py:1414
 msgid "Step back"
 msgstr "跳回 (Step back)"
 
-#: thonny/plugins/debugger.py:1415
+#: thonny/plugins/debugger.py:1416
 msgid "Back"
 msgstr "跳回"
 
-#: thonny/plugins/debugger.py:1421
+#: thonny/plugins/debugger.py:1422
 msgid "Stack"
 msgstr "堆疊 (Stack)"
 
-#: thonny/plugins/debugger.py:1422
+#: thonny/plugins/debugger.py:1423
 msgid "Exception"
 msgstr "異常 (Exception)"
 
@@ -787,7 +788,8 @@ msgstr "瀏覽套件"
 #: thonny/plugins/pip_gui.py:370
 msgid "With current interpreter you can only browse the packages here.\n"
 "Use 'Tools → Open system shell...' for installing, upgrading or uninstalling."
-msgstr "目前的直譯器只能瀏覽套件。可另外使用 '工具 -> 開啟系統工具列' 來安裝、升級或移除套件"
+msgstr "目前的直譯器只能瀏覽套件。\n"
+"請使用『'工具/開啟系統終端機』來安裝、升級或移除套件。"
 
 #: thonny/plugins/pip_gui.py:378
 msgid "Packages' directory"
@@ -822,18 +824,6 @@ msgstr "升級或移除"
 msgid "Start by selecting the package from the left."
 msgstr "從左方的套件開始選擇"
 
-#: thonny/plugins/pip_gui.py:410
-msgid "Target:"
-msgstr "目標:"
-
-#: thonny/plugins/pip_gui.py:414
-msgid "virtual environment"
-msgstr "虛擬環境"
-
-#: thonny/plugins/pip_gui.py:412
-msgid "user site packages"
-msgstr "使用者本地套件"
-
 #: thonny/plugins/pip_gui.py:430
 msgid "This dialog lists all available packages, but allows upgrading and uninstalling only packages from"
 msgstr "這裡會列出所有可用的套件,但允許能升級或移除的套件只有在"
@@ -842,48 +832,48 @@ msgstr "這裡會列出所有可用的套件,但允許能升級或移除的套
 msgid "New packages will be also installed into this directory. Other locations must be managed by alternative means."
 msgstr "新套件也會安裝在這個資料夾。其他的地方需要另外處理"
 
-#: thonny/plugins/pip_gui.py:485
+#: thonny/plugins/pip_gui.py:493
 msgid "Installed version:"
 msgstr "安裝版本:"
 
-#: thonny/plugins/pip_gui.py:487
+#: thonny/plugins/pip_gui.py:495
 msgid "Installed to:"
 msgstr "安裝到: "
 
-#: thonny/plugins/pip_gui.py:538
+#: thonny/plugins/pip_gui.py:573
 msgid "Please check your spelling!"
 msgstr "請檢查你的拼字"
 
-#: thonny/plugins/pip_gui.py:542
+#: thonny/plugins/pip_gui.py:577
 msgid "Could not find the package info from PyPI."
 msgstr "無法從 PyPI 找到套件的資訊"
 
-#: thonny/plugins/pip_gui.py:544 thonny/plugins/pip_gui.py:1326
+#: thonny/plugins/pip_gui.py:579 thonny/plugins/pip_gui.py:1408
 msgid "Error code:"
 msgstr "錯誤碼: "
 
-#: thonny/plugins/pip_gui.py:689
+#: thonny/plugins/pip_gui.py:748
 msgid "Can't find package name from the list:"
 msgstr "無法從清單中找到套件名稱"
 
-#: thonny/plugins/pip_gui.py:744
+#: thonny/plugins/pip_gui.py:803
 msgid "Package '{}' is required for installing and uninstalling other packages."
 msgstr "需要 '{}' 套件來安裝或移除其他套件"
 
-#: thonny/plugins/pip_gui.py:789
+#: thonny/plugins/pip_gui.py:848
 msgid "Package"
 msgstr "套件"
 
-#: thonny/plugins/pip_gui.py:902
+#: thonny/plugins/pip_gui.py:960
 msgid "Manage packages for %s"
 msgstr "為 %s 管理套件"
 
-#: thonny/editors.py:579 thonny/plugins/micropython/pip_gui.py:23
-#: thonny/plugins/pip_gui.py:953
+#: thonny/editors.py:587 thonny/plugins/micropython/pip_gui.py:25
+#: thonny/plugins/pip_gui.py:1034
 msgid "Confirmation"
 msgstr "確認"
 
-#: thonny/plugins/pip_gui.py:954
+#: thonny/plugins/pip_gui.py:1035
 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"
@@ -895,111 +885,111 @@ msgstr "看來你正要安裝 Thonny 相關套件。\n"
 "\n"
 "你確定要為後端程式安裝 %s  嗎?"
 
-#: thonny/plugins/pip_gui.py:1059
+#: thonny/plugins/pip_gui.py:1141
 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:1067
+#: thonny/plugins/pip_gui.py:1149
 msgid "Thonny plugin without requirements"
 msgstr "沒有相依套件的 Thonny 外掛 "
 
-#: thonny/plugins/pip_gui.py:1083
+#: thonny/plugins/pip_gui.py:1165
 msgid "Unsuitable requirements"
 msgstr "不相配的相依套件"
 
-#: thonny/plugins/pip_gui.py:1084
+#: thonny/plugins/pip_gui.py:1166
 msgid "This package requires different Thonny version:"
 msgstr "這個套件需要不同版本的 Thonny"
 
-#: thonny/plugins/pip_gui.py:1088
+#: thonny/plugins/pip_gui.py:1170
 msgid "If you still want it, then please install it from the command line."
-msgstr "如果你仍想要,請從命令列進行安裝"
+msgstr "如果你仍想要,請從終端機進行安裝"
 
-#: thonny/plugins/pip_gui.py:1125
+#: thonny/plugins/pip_gui.py:1207
 msgid "NB! You need to restart Thonny after installing / upgrading / uninstalling a plug-in."
 msgstr "注意!在安裝 / 升級 / 移除外掛後,你必須要重新啟動 Thonny"
 
-#: thonny/plugins/pip_gui.py:1135
+#: thonny/plugins/pip_gui.py:1217
 msgid "Thonny plug-ins"
 msgstr "Thonny 外掛"
 
-#: thonny/plugins/pip_gui.py:1171
+#: thonny/plugins/pip_gui.py:1253
 msgid "Advanced install / upgrade / downgrade"
 msgstr "進階 安裝 / 升級 / 降級"
 
-#: thonny/plugins/pip_gui.py:1180
+#: thonny/plugins/pip_gui.py:1262
 msgid "Desired version"
 msgstr "想要的版本"
 
-#: thonny/plugins/pip_gui.py:1239
+#: thonny/plugins/pip_gui.py:1321
 msgid "Upgrade dependencies"
 msgstr "升級相依套件"
 
-#: thonny/plugins/pip_gui.py:1324
+#: thonny/plugins/pip_gui.py:1406
 msgid "Requires:"
 msgstr "相依套件:"
 
-#: thonny/plugins/pip_gui.py:1328
+#: thonny/plugins/pip_gui.py:1410
 msgid "Error:"
 msgstr "錯誤: "
 
-#: thonny/plugins/pip_gui.py:1541
+#: thonny/plugins/pip_gui.py:1601
 msgid "Manage packages..."
 msgstr "管理套件..."
 
-#: thonny/plugins/pip_gui.py:1547
+#: thonny/plugins/pip_gui.py:1607
 msgid "Manage plug-ins..."
 msgstr "管理外掛..."
 
-#: thonny/plugins/replayer.py:365
+#: thonny/plugins/replayer.py:364
 msgid "Open replayer..."
 msgstr "開"
 
-#: thonny/plugins/run_debug_config_page.py:14
+#: thonny/plugins/run_debug_config_page.py:21
 msgid "Change working directory to script directory on Run / Debug"
-msgstr "在執行 / 除錯時,將工作資料夾更改為程式檔資料夾"
+msgstr "在執行 / 除錯時,將工作資料夾更改為腳本資料夾"
 
-#: thonny/plugins/run_debug_config_page.py:22
+#: thonny/plugins/run_debug_config_page.py:35
 msgid "Show function calls (frames) in separate windows"
 msgstr "將函式呼叫 (frames) 顯示在單獨的視窗"
 
-#: thonny/plugins/run_debug_config_page.py:23
+#: thonny/plugins/run_debug_config_page.py:36
 msgid "Uncheck if you want more traditional experience."
 msgstr "如果你想要更傳統的體驗,請取消勾選"
 
-#: thonny/plugins/run_debug_config_page.py:29
+#: thonny/plugins/run_debug_config_page.py:42
 msgid "Open and close Stack view automatically"
 msgstr "自動開啟與關閉堆疊 (Stack) 檢視"
 
-#: thonny/plugins/run_debug_config_page.py:30
+#: thonny/plugins/run_debug_config_page.py:43
 msgid "Opens the Stack view on first call and closes it when program returns to main frame."
 msgstr "在第一次呼叫時打開堆疊 (Stack) 檢視,並在程式返回主要 frame 時關閉"
 
-#: thonny/plugins/run_debug_config_page.py:39
+#: thonny/plugins/run_debug_config_page.py:52
 msgid "Allow stepping into libraries (ie. outside of main script directory)"
-msgstr "允許跳入函式庫 (會跳離程式資料夾)"
+msgstr "允許跳入函式庫 (會跳離腳本資料夾)"
 
-#: thonny/plugins/run_debug_config_page.py:40
+#: thonny/plugins/run_debug_config_page.py:53
 msgid "May make debugging slower."
 msgstr "也許會讓除錯器更慢"
 
-#: thonny/plugins/run_debug_config_page.py:45
+#: thonny/plugins/run_debug_config_page.py:58
 msgid "Preferred debugger"
 msgstr "偏愛的除錯器"
 
-#: thonny/plugins/run_debug_config_page.py:57
+#: thonny/plugins/run_debug_config_page.py:70
 msgid "(used when clicking Debug toolbar button)"
 msgstr "(當點選工具列除錯按鈕時使用)"
 
-#: thonny/plugins/run_debug_config_page.py:62
+#: thonny/plugins/run_debug_config_page.py:75
 msgid "Birdseye port"
 msgstr "Birdseye 埠號 (port)"
 
-#: thonny/plugins/run_debug_config_page.py:66
+#: thonny/plugins/run_debug_config_page.py:79
 msgid "(restart Thonny after changing this)"
 msgstr "(在變更後請重新啟動 Thonny)"
 
-#: thonny/plugins/run_debug_config_page.py:74
+#: thonny/plugins/run_debug_config_page.py:87
 msgid "Run & Debug"
 msgstr "執行 & 除錯"
 
@@ -1025,7 +1015,7 @@ msgstr "在縮減前最大的行長度"
 
 #: thonny/plugins/terminal_config_page.py:12
 msgid "Running current script in terminal"
-msgstr "在終端機中執行目前程式"
+msgstr "在終端機中執行目前腳本"
 
 #: thonny/plugins/terminal_config_page.py:17
 msgid "Present Python REPL after program ends"
@@ -1044,51 +1034,51 @@ msgstr "注意! 需要開啟終端機設定才能自動關閉"
 msgid "Terminal"
 msgstr "終端機"
 
-#: thonny/plugins/theme_and_font_config_page.py:40
+#: thonny/plugins/theme_and_font_config_page.py:39
 msgid "UI theme"
 msgstr "介面主題"
 
-#: thonny/plugins/theme_and_font_config_page.py:53
+#: thonny/plugins/theme_and_font_config_page.py:52
 msgid "Syntax theme"
 msgstr "語法主題"
 
-#: thonny/plugins/theme_and_font_config_page.py:85
+#: thonny/plugins/theme_and_font_config_page.py:84
 msgid "Editor font"
 msgstr "編輯器字型"
 
-#: thonny/plugins/theme_and_font_config_page.py:108
+#: thonny/plugins/theme_and_font_config_page.py:107
 msgid "IO font"
 msgstr "輸入輸出 (IO) 字型"
 
-#: thonny/plugins/theme_and_font_config_page.py:133
+#: thonny/plugins/theme_and_font_config_page.py:132
 msgid "Preview"
 msgstr "預覽"
 
-#: thonny/plugins/theme_and_font_config_page.py:151
+#: thonny/plugins/theme_and_font_config_page.py:150
 msgid "This is a comment"
 msgstr "這是註解"
 
-#: thonny/plugins/theme_and_font_config_page.py:154
+#: thonny/plugins/theme_and_font_config_page.py:153
 msgid "The answer is"
 msgstr "The answer is"
 
-#: thonny/plugins/theme_and_font_config_page.py:158
+#: thonny/plugins/theme_and_font_config_page.py:157
 msgid "unclosed_string"
 msgstr "unclosed_string"
 
-#: thonny/plugins/theme_and_font_config_page.py:160
+#: thonny/plugins/theme_and_font_config_page.py:159
 msgid "blah, blah"
 msgstr "blah, blah"
 
-#: thonny/plugins/theme_and_font_config_page.py:184
+#: thonny/plugins/theme_and_font_config_page.py:183
 msgid "NB! Some style elements change only after restarting Thonny!"
-msgstr "注意!有些樣式項目在重新啟動Thonny後才會套用"
+msgstr "注意!有些樣式項目在重新啟動 Thonny後才會套用"
 
-#: thonny/plugins/theme_and_font_config_page.py:223
+#: thonny/plugins/theme_and_font_config_page.py:222
 msgid "Enter an integer"
 msgstr "Enter an integer"
 
-#: thonny/plugins/theme_and_font_config_page.py:236
+#: thonny/plugins/theme_and_font_config_page.py:235
 msgid "Theme & Font"
 msgstr "主題和字型"
 
@@ -1116,27 +1106,27 @@ msgstr "CircuitPython 設備"
 msgid "MicroPython device"
 msgstr "MicroPython 設備"
 
-#: thonny/plugins/micropython/mp_front.py:547
+#: thonny/plugins/micropython/mp_front.py:558
 msgid "Connect your device to the computer and select corresponding port below"
 msgstr "將設備連接到電腦,並選擇下方的連接埠"
 
-#: thonny/plugins/micropython/mp_front.py:550
+#: thonny/plugins/micropython/mp_front.py:561
 msgid "look for your device name, \"USB Serial\" or \"UART\""
 msgstr "尋找名稱中有 \"USB Serial\" 或是 \"UART\" 的設備 "
 
-#: thonny/plugins/micropython/mp_front.py:552
+#: thonny/plugins/micropython/mp_front.py:563
 msgid "If you can't find it, you may need to install proper USB driver first."
 msgstr "如果找不到,你需要先安裝正確的 USB 驅動程式"
 
-#: thonny/plugins/micropython/mp_front.py:444
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port"
 msgstr "連接埠"
 
-#: thonny/plugins/micropython/mp_front.py:454
+#: thonny/plugins/micropython/mp_front.py:458
 msgid "Try to detect port automatically"
 msgstr "自動偵測連接埠"
 
-#: thonny/plugins/micropython/__init__.py:25
+#: thonny/plugins/micropython/__init__.py:24
 msgid "MicroPython (generic)"
 msgstr "MicroPython (一般)"
 
@@ -1146,9 +1136,9 @@ msgstr "列印..."
 
 #: thonny/plugins/system_shell/__init__.py:63
 msgid "Open system shell..."
-msgstr "開啟系統命令列"
+msgstr "開啟系統終端機..."
 
-#: thonny/plugins/backend_config_page.py:110
+#: thonny/plugins/backend_config_page.py:109
 msgid "Details"
 msgstr "詳細"
 
@@ -1160,112 +1150,109 @@ msgstr "從 requirements 檔案來安裝"
 msgid "Install from local file"
 msgstr "從本地檔案安裝"
 
-#: thonny/plugins/pip_gui.py:1118
+#: thonny/plugins/pip_gui.py:1200
 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 "這是為了要管理"
+msgstr "這是管理 Thonny 本身的外掛以及相依模組的交談窗。\n"
+"如果是要安裝程式所需的套件, 請改用『工具/管理套件...』功能表指令"
 
 #: thonny/plugins/circuitpython/__init__.py:10
 msgid "CircuitPython (generic)"
 msgstr "CircuitPython (一般)"
 
-#: thonny/plugins/commenting_indenting.py:143
+#: thonny/plugins/commenting_indenting.py:142
 msgid "Indent selected lines"
 msgstr "增加選取行的縮排"
 
-#: thonny/plugins/commenting_indenting.py:153
+#: thonny/plugins/commenting_indenting.py:152
 msgid "Dedent selected lines"
 msgstr "減少選取行的縮排"
 
-#: thonny/workbench.py:1479
+#: thonny/workbench.py:1481
 msgid "Switch to\n"
 "regular\n"
 "mode"
 msgstr "切換至\n"
 "一般模式"
 
-#: thonny/plugins/microbit/__init__.py:58
+#: thonny/plugins/microbit/__init__.py:62
 msgid "Make sure MicroPython has been installed to your micro:bit."
 msgstr "請確定 MicroPython 已安裝到你的 micro:bit 上"
 
-#: thonny/plugins/microbit/__init__.py:60
+#: thonny/plugins/microbit/__init__.py:64
 msgid "Don't forget that main.py only works without embedded main script."
-msgstr "不要忘記 main.py 在沒有內嵌主要腳本程式時才會有效"
-
-#: thonny/plugins/micropython/uf2dialog.py:44
-msgid "please wait"
-msgstr "請等待"
+msgstr "不要忘記 main.py 只有在沒有內嵌到主要腳本時才會有效"
 
-#: thonny/misc_utils.py:151
+#: thonny/misc_utils.py:177
 msgid "Could not find disk '%s'. Do you want to locate it yourself?"
 msgstr "找不到磁碟機 '%s' 。你想要自己找出位置嗎?\n"
 ""
 
-#: thonny/misc_utils.py:154
+#: thonny/misc_utils.py:180
 msgid "Found several '%s' disks. Do you want to choose one yourself?"
 msgstr "發現多個 '%s' 磁碟機。你想要自己選擇嗎?"
 
-#: thonny/misc_utils.py:170
+#: thonny/misc_utils.py:196
 msgid "Can't find suitable disk"
 msgstr "找不到合適的磁碟機"
 
-#: thonny/base_file_browser.py:290
+#: thonny/base_file_browser.py:294
 msgid "%d items"
 msgstr "%d 個項目"
 
-#: thonny/base_file_browser.py:739
+#: thonny/base_file_browser.py:743
 msgid "Move to Trash"
 msgstr "移至垃圾桶"
 
-#: thonny/base_file_browser.py:742
+#: thonny/base_file_browser.py:746
 msgid "Delete"
 msgstr "刪除"
 
-#: thonny/base_file_browser.py:721 thonny/base_file_browser.py:874
+#: thonny/base_file_browser.py:725 thonny/base_file_browser.py:878
 msgid "New directory"
 msgstr "新增目錄"
 
-#: thonny/base_file_browser.py:745
+#: thonny/base_file_browser.py:749
 msgid "Properties"
 msgstr "屬性"
 
-#: thonny/base_file_browser.py:747
+#: thonny/base_file_browser.py:751
 msgid "Storage space"
 msgstr "儲存空間"
 
-#: thonny/base_file_browser.py:757
+#: thonny/base_file_browser.py:761
 msgid "Path"
 msgstr "路徑"
 
-#: thonny/base_file_browser.py:759
+#: thonny/base_file_browser.py:763
 msgid "Directory properties"
 msgstr "目錄屬性"
 
-#: thonny/base_file_browser.py:761
+#: thonny/base_file_browser.py:765
 msgid "File properties"
 msgstr "檔案屬性"
 
-#: thonny/base_file_browser.py:763
+#: thonny/base_file_browser.py:767
 msgid "bytes"
 msgstr "位元組"
 
-#: thonny/base_file_browser.py:766
+#: thonny/base_file_browser.py:770
 msgid "Size"
 msgstr "大小"
 
-#: thonny/base_file_browser.py:93 thonny/base_file_browser.py:777
+#: thonny/base_file_browser.py:94 thonny/base_file_browser.py:781
 msgid "Modified"
 msgstr "已變更"
 
-#: thonny/base_file_browser.py:838
+#: thonny/base_file_browser.py:842
 msgid "Deleting %s"
 msgstr "刪除 %s"
 
-#: thonny/editors.py:260
+#: thonny/editors.py:262
 msgid "Loading"
 msgstr "載入"
 
-#: thonny/editors.py:389
+#: thonny/editors.py:395
 msgid "Saving"
 msgstr "保存"
 
@@ -1281,125 +1268,125 @@ msgstr "下載 %s 到 %s"
 msgid "Download to %s"
 msgstr "下載到 %s"
 
-#: thonny/base_file_browser.py:646
+#: thonny/base_file_browser.py:650
 msgid "Open in system file manager"
 msgstr "在系統的檔案管理員中開啟"
 
-#: thonny/base_file_browser.py:674
+#: thonny/base_file_browser.py:678
 msgid "Hide hidden files"
 msgstr "不顯示隱藏檔"
 
-#: thonny/base_file_browser.py:674
+#: thonny/base_file_browser.py:678
 msgid "Show hidden files"
 msgstr "顯示隱藏檔"
 
-#: thonny/base_file_browser.py:657
+#: thonny/base_file_browser.py:661
 msgid "Open in Thonny"
 msgstr "在 Thonny 中開啟"
 
-#: thonny/base_file_browser.py:688
+#: thonny/base_file_browser.py:692
 msgid "Open in system default app"
 msgstr "以系統預設的應用程式開啟"
 
-#: thonny/base_file_browser.py:669 thonny/base_file_browser.py:696
+#: thonny/base_file_browser.py:673 thonny/base_file_browser.py:700
 msgid "Configure %s files"
 msgstr "設定 %s 檔"
 
-#: thonny/base_file_browser.py:697
+#: thonny/base_file_browser.py:701
 msgid "What to do with a %s file when you double-click it in Thonny's file browser?"
 msgstr "在 Thonny 的檔案檢視中按兩下 %s 檔時要進行哪個動作?"
 
-#: thonny/base_file_browser.py:1254 thonny/editors.py:979 thonny/editors.py:981
+#: thonny/base_file_browser.py:1258 thonny/editors.py:986 thonny/editors.py:988
 msgid "Deleting"
 msgstr "正在刪除"
 
-#: thonny/base_file_browser.py:1261
+#: thonny/base_file_browser.py:1265
 msgid "Creating directory"
 msgstr "建立資料夾"
 
-#: thonny/editors.py:258
+#: thonny/editors.py:260
 msgid "Loading %s"
 msgstr "載入 %s"
 
-#: thonny/editors.py:384
+#: thonny/editors.py:390
 msgid "Saving to %s"
 msgstr "儲存到 %s"
 
-#: thonny/editors.py:720 thonny/editors.py:722
+#: thonny/editors.py:728 thonny/editors.py:730
 msgid "Save All files"
 msgstr "儲存所有檔案"
 
-#: thonny/plugins/backend_config_page.py:340 thonny/workbench.py:877
+#: thonny/plugins/backend_config_page.py:338 thonny/workbench.py:880
 msgid "Configure interpreter..."
 msgstr "設定直譯器"
 
-#: thonny/workbench.py:1589
+#: thonny/workbench.py:1591
 msgid "Device"
 msgstr "設備"
 
-#: thonny/workdlg.py:193
+#: thonny/workdlg.py:234
 msgid "Cancelling"
 msgstr "正在取消"
 
-#: thonny/workdlg.py:220
+#: thonny/workdlg.py:270
 msgid "Starting"
 msgstr "啟始"
 
-#: thonny/plugins/backend_config_page.py:251
+#: thonny/plugins/backend_config_page.py:249
 msgid "Authentication"
 msgstr "認證"
 
-#: thonny/plugins/backend_config_page.py:253
+#: thonny/plugins/backend_config_page.py:251
 msgid "Enter the passphrase of your private key for\n"
 "{}"
 msgstr "鍵入 {} 的私有金鑰的通行密語"
 
-#: thonny/plugins/backend_config_page.py:256
+#: thonny/plugins/backend_config_page.py:254
 msgid "Enter your password for\n"
 "{}"
 msgstr "鍵入 {} 的密碼"
 
-#: thonny/plugins/object_inspector.py:487
+#: thonny/plugins/object_inspector.py:486
 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:645
+#: thonny/plugins/pip_gui.py:682
 msgid "Search results"
 msgstr "搜尋結果"
 
-#: thonny/plugins/pip_gui.py:646
+#: thonny/plugins/pip_gui.py:683
 msgid "Searching"
 msgstr "搜尋中"
 
-#: thonny/plugins/pip_gui.py:728 thonny/plugins/pip_gui.py:817
+#: thonny/plugins/pip_gui.py:787 thonny/plugins/pip_gui.py:876
 msgid "Installing '%s'"
 msgstr "安裝 '%s'"
 
-#: thonny/plugins/pip_gui.py:734
+#: thonny/plugins/pip_gui.py:793
 msgid "Upgrading '%s'"
 msgstr "更新 '%s'"
 
-#: thonny/plugins/pip_gui.py:741
+#: thonny/plugins/pip_gui.py:800
 msgid "Uninstalling '%s'"
 msgstr "解除安裝 '%s'"
 
-#: thonny/plugins/pip_gui.py:755
+#: thonny/plugins/pip_gui.py:814
 msgid "Installing"
 msgstr "安裝中"
 
-#: thonny/plugins/pip_gui.py:1502
+#: thonny/plugins/pip_gui.py:1562
 msgid "Package manager is not available for this interpreter"
 msgstr "此直譯器無法使用套件管理員"
 
-#: thonny/base_file_browser.py:1205 thonny/plugins/pip_gui.py:1516
+#: thonny/base_file_browser.py:1209 thonny/plugins/pip_gui.py:1576
 msgid "Not supported"
 msgstr "不支援"
 
-#: thonny/plugins/micropython/pip_gui.py:100 thonny/plugins/pip_gui.py:1521
+#: thonny/plugins/micropython/pip_gui.py:142 thonny/plugins/pip_gui.py:1581
 msgid "Not available"
 msgstr "無法使用"
 
-#: thonny/plugins/pip_gui.py:1522
+#: thonny/plugins/pip_gui.py:1582
 msgid "You need to stop your program before launching the package manager."
 msgstr "你需要先停止執行程式才能開啟套件管理員"
 
@@ -1407,15 +1394,15 @@ msgstr "你需要先停止執行程式才能開啟套件管理員"
 msgid "Open evaluated values in Object inspector"
 msgstr "在物件檢視器中開啟計算項目"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:209
+#: thonny/plugins/cpython_frontend/cp_front.py:234
 msgid "Python executable"
 msgstr "Python 可執行檔"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:232
+#: thonny/plugins/cpython_frontend/cp_front.py:258
 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”腳本而不是直譯器(或直接在框中輸入路徑)!"
+msgstr "注意!使用檔案選擇按鈕可能無法正常選用虛擬環境中的執行檔, 如果遇到這種情況,請改選虛擬環境中的 activate 腳本, 不要選直譯器 (或直接在框中輸入執行檔路徑)!"
 
 #: thonny/plugins/cpython_ssh/__init__.py:17
 msgid "Remote Python 3 (SSH)"
@@ -1425,84 +1412,47 @@ msgstr "遠端的 Python 3(SSH)"
 msgid "Not connected"
 msgstr "未連線"
 
-#: thonny/plugins/micropython/mp_front.py:521
-msgid "Advanced options"
-msgstr "進階選項"
-
-#: thonny/plugins/micropython/mp_front.py:547
-msgid "Install or update firmware"
-msgstr "安裝或更新韌體"
-
-#: thonny/plugins/micropython/__init__.py:36
+#: thonny/plugins/micropython/__init__.py:35
 msgid "MicroPython (local)"
 msgstr "MicroPython (本機)"
 
-#: thonny/plugins/micropython/__init__.py:47
+#: thonny/plugins/micropython/__init__.py:46
 msgid "MicroPython (SSH)"
 msgstr " MicroPython (SSH) "
 
-#: thonny/plugins/micropython/pip_gui.py:77
-msgid "Scope"
-msgstr "作用範圍"
-
-#: thonny/plugins/micropython/pip_gui.py:90
-msgid "This dialog lists top-level modules from following directories:\n"
-""
-msgstr "這個交談窗會列出以下資料夾中的最上層模組:"
-
-#: thonny/plugins/micropython/pip_gui.py:99
-msgid "New packages will be installed to"
-msgstr "新模組會安裝到"
-
-#: thonny/plugins/micropython/pip_gui.py:102
+#: thonny/plugins/micropython/pip_gui.py:144
 msgid "no absolute lib directory in sys.path"
 msgstr "在 sys.path 中沒有程式庫的絕對路徑"
 
-#: thonny/plugins/micropython/uf2dialog.py:39
-msgid "Version to be installed"
-msgstr "即將安裝的版本"
-
-#: thonny/plugins/micropython/uf2dialog.py:47
-msgid "Target device location"
-msgstr "目標設備的位置"
-
-#: thonny/plugins/micropython/uf2dialog.py:58
-msgid "Target device model"
-msgstr "目標設備的型號"
-
-#: thonny/plugins/micropython/uf2dialog.py:146
-msgid "Please wait"
-msgstr "請稍等"
-
-#: thonny/plugins/pip_gui.py:70
+#: thonny/plugins/pip_gui.py:71
 msgid "Search on PyPI"
 msgstr "在 PyPI 中搜尋"
 
-#: thonny/base_file_browser.py:689
+#: thonny/base_file_browser.py:693
 msgid "Open in Thonny's text editor"
 msgstr "在 Thonny 的文字編輯器中開啟"
 
-#: thonny/base_file_browser.py:342
+#: thonny/base_file_browser.py:346
 msgid "Storage space on this drive or filesystem"
 msgstr "設備或檔案系統中的儲存空間"
 
-#: thonny/base_file_browser.py:343
+#: thonny/base_file_browser.py:347
 msgid "total space"
 msgstr "總空間"
 
-#: thonny/base_file_browser.py:345
+#: thonny/base_file_browser.py:349
 msgid "used space"
 msgstr "已使用空間"
 
-#: thonny/base_file_browser.py:346
+#: thonny/base_file_browser.py:350
 msgid "free space"
 msgstr "可用空間"
 
-#: thonny/base_file_browser.py:353
+#: thonny/base_file_browser.py:357
 msgid "Storage info"
 msgstr "儲存空間資訊"
 
-#: thonny/plugins/commenting_indenting.py:163
+#: thonny/plugins/commenting_indenting.py:162
 msgid "Replace tabs with spaces"
 msgstr "用空白取代定位 (tab) 字元"
 
@@ -1514,71 +1464,71 @@ msgstr "標示定位 (tab) 字元"
 msgid "Indent with tab characters (not recommended for Python)"
 msgstr "使用定位 (tab) 字元縮排 (不建議用在 Python 上)"
 
-#: thonny/base_file_browser.py:91 thonny/memory.py:63
+#: thonny/base_file_browser.py:92 thonny/memory.py:63
 msgid "Name"
 msgstr "名稱"
 
-#: thonny/base_file_browser.py:95
+#: thonny/base_file_browser.py:96
 msgid "Size (bytes)"
 msgstr "大小 (位元組)"
 
-#: thonny/base_file_browser.py:875
+#: thonny/base_file_browser.py:879
 msgid "Enter name for new directory under\n"
 "%s"
 msgstr "鍵入要在 %s 下建立的新資料夾名稱"
 
-#: thonny/base_file_browser.py:898
+#: thonny/base_file_browser.py:902
 msgid "Nothing selected"
 msgstr "沒有選取項目"
 
-#: thonny/base_file_browser.py:898
+#: thonny/base_file_browser.py:902
 msgid "Select an item and try again!"
 msgstr "選取項目後再重試"
 
-#: thonny/base_file_browser.py:1325
+#: thonny/base_file_browser.py:1329
 msgid "Open from %s"
 msgstr "從 %s 開啟"
 
-#: thonny/base_file_browser.py:1328
+#: thonny/base_file_browser.py:1332
 msgid "Save to %s"
 msgstr "儲存到 %s"
 
-#: thonny/base_file_browser.py:1347
+#: thonny/base_file_browser.py:1351
 msgid "File name:"
 msgstr "檔案名稱:"
 
-#: thonny/memory.py:64 thonny/plugins/object_inspector.py:539
-#: thonny/plugins/object_inspector.py:618
+#: thonny/memory.py:64 thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:617
 msgid "Value ID"
 msgstr "識別碼"
 
 #: thonny/memory.py:65 thonny/plugins/heap.py:23
-#: thonny/plugins/object_inspector.py:540
-#: thonny/plugins/object_inspector.py:619
+#: thonny/plugins/object_inspector.py:539
+#: thonny/plugins/object_inspector.py:618
 msgid "Value"
 msgstr "值"
 
-#: thonny/plugins/backend_config_page.py:274
+#: thonny/plugins/backend_config_page.py:272
 msgid "Save password"
 msgstr "儲存密碼"
 
-#: thonny/plugins/debugger.py:553
+#: thonny/plugins/debugger.py:557
 msgid "Function call at %s"
 msgstr "在 %s 的函式叫用"
 
-#: thonny/plugins/debugger.py:1003
+#: thonny/plugins/debugger.py:1006
 msgid "Local variables"
 msgstr "區域變數"
 
-#: thonny/plugins/debugger.py:1035
+#: thonny/plugins/debugger.py:1038
 msgid "Function"
 msgstr "函式"
 
-#: thonny/plugins/debugger.py:1036
+#: thonny/plugins/debugger.py:1039
 msgid "Location"
 msgstr "位置"
 
-#: thonny/plugins/debugger.py:1112
+#: thonny/plugins/debugger.py:1115
 msgid "If last command raised an exception then this view will show the stacktrace."
 msgstr "如果上個指令引發異常, 此檢視畫面會顯示堆疊追蹤資訊"
 
@@ -1594,15 +1544,15 @@ msgstr "資料"
 msgid "Attributes"
 msgstr "屬性"
 
-#: thonny/plugins/object_inspector.py:538
+#: thonny/plugins/object_inspector.py:537
 msgid "Index"
 msgstr "索引"
 
-#: thonny/plugins/object_inspector.py:616
+#: thonny/plugins/object_inspector.py:615
 msgid "Key ID"
 msgstr "鍵識別碼"
 
-#: thonny/plugins/object_inspector.py:617
+#: thonny/plugins/object_inspector.py:616
 msgid "Key"
 msgstr "鍵"
 
@@ -1612,15 +1562,15 @@ msgid "Back to\n"
 msgstr "回到\n"
 "%s"
 
-#: thonny/plugins/micropython/mp_front.py:444
+#: thonny/plugins/micropython/mp_front.py:453
 msgid "Port or WebREPL"
 msgstr "選擇連接埠或是 WebREPL"
 
-#: thonny/plugins/micropython/mp_front.py:589
+#: thonny/plugins/micropython/mp_front.py:599
 msgid "Password"
 msgstr "密碼"
 
-#: thonny/plugins/debugger.py:961
+#: thonny/plugins/debugger.py:964
 msgid "Source code"
 msgstr "原始碼"
 
@@ -1636,107 +1586,107 @@ msgstr "如果檔案交談窗被主視窗擋住, 請先選取它"
 msgid "Environment variables (one KEY=VALUE per line)"
 msgstr "環境變數 (每行一對 鍵=值)"
 
-#: thonny/base_file_browser.py:718
+#: thonny/base_file_browser.py:722
 msgid "New file"
 msgstr "建立新檔"
 
-#: thonny/base_file_browser.py:736
+#: thonny/base_file_browser.py:740
 msgid "Rename"
 msgstr "重新命名"
 
-#: thonny/base_file_browser.py:924
+#: thonny/base_file_browser.py:928
 msgid "Rename '%s'"
 msgstr "將 %s 重新命名"
 
-#: thonny/base_file_browser.py:924
+#: thonny/base_file_browser.py:928
 msgid "Enter new name"
 msgstr "鍵入新的名稱"
 
-#: thonny/base_file_browser.py:1012
+#: thonny/base_file_browser.py:1016
 msgid "Paste failed"
 msgstr "貼上的動作失敗"
 
-#: thonny/base_file_browser.py:1012
+#: thonny/base_file_browser.py:1016
 msgid "There are conflicting folders"
 msgstr "找到衝突的資料夾"
 
-#: thonny/base_file_browser.py:1140
+#: thonny/base_file_browser.py:1144
 msgid "File already exists"
 msgstr "檔案已經存在"
 
-#: thonny/base_file_browser.py:1208
+#: thonny/base_file_browser.py:1212
 msgid "If it is a text file, then you can configure it to open in Thonny by right-clicking it and selecting 'Configure ... files'."
 msgstr "如果這是文字檔, 可以用滑鼠右鍵按一下後選取 '設定 ... 檔案' 以便在 Thonny 中開啟"
 
-#: thonny/editors.py:35
+#: thonny/editors.py:38
 msgid "Python files"
 msgstr "Python 檔案"
 
-#: thonny/editors.py:122 thonny/editors.py:189
+#: thonny/editors.py:123 thonny/editors.py:189
 msgid "<untitled>"
 msgstr "未命名"
 
-#: thonny/editors.py:149
+#: thonny/editors.py:150
 msgid "File is gone"
 msgstr "檔案不見了"
 
-#: thonny/editors.py:152
+#: thonny/editors.py:153
 msgid "Do you want to also close the editor?"
 msgstr "要同時關閉編輯器嗎?"
 
-#: thonny/editors.py:168
+#: thonny/editors.py:169
 msgid "External modification"
 msgstr "外部的修改"
 
-#: thonny/editors.py:171
+#: thonny/editors.py:172
 msgid "Do you want to discard current editor content and reload the file from disk?"
 msgstr "你要丟棄目前編輯內容從磁碟重新載入檔案嗎?"
 
-#: thonny/editors.py:580
+#: thonny/editors.py:588
 msgid "Python files usually have .py extension."
 msgstr "Python 檔通常會以 .py 為附檔名"
 
-#: thonny/editors.py:582
+#: thonny/editors.py:590
 msgid "Did you mean '%s'?"
 msgstr "你是指 %s 嗎?"
 
-#: thonny/editors.py:751
+#: thonny/editors.py:759
 msgid "Move / rename..."
 msgstr "移動/重新命名..."
 
-#: thonny/editors.py:760
+#: thonny/editors.py:768
 msgid "Go to line..."
 msgstr "到指定行..."
 
-#: thonny/editors.py:1003
+#: thonny/editors.py:1010
 msgid "Line number"
 msgstr "行號"
 
-#: thonny/editors.py:1149
+#: thonny/editors.py:1156
 msgid "Do you want to save files before closing?"
 msgstr "關閉之前要儲存檔案嗎?"
 
-#: thonny/editors.py:1151
+#: thonny/editors.py:1158
 msgid "Do you want to save file before closing?"
 msgstr "關閉之前要儲存檔案嗎?"
 
-#: thonny/editors.py:1154
+#: thonny/editors.py:1161
 msgid "Save On Close"
 msgstr "關閉時儲存"
 
-#: thonny/misc_utils.py:513
+#: thonny/misc_utils.py:539
 msgid "Command not available"
 msgstr "無法執行指令"
 
-#: thonny/misc_utils.py:514
+#: thonny/misc_utils.py:540
 msgid "This command is not available if Thonny is run via Flatpak"
 msgstr "透過 Flatpak 執行 Thonny 實無法執行這個指令"
 
-#: thonny/workbench.py:694 thonny/workbench.py:794
+#: thonny/workbench.py:700 thonny/workbench.py:799
 msgid "Support Ukraine"
 msgstr "聲援烏克蘭"
 
-#: thonny/plugins/backend_config_page.py:91
+#: thonny/plugins/backend_config_page.py:90
 msgid "Which kind of interpreter should Thonny use for running your code?"
 msgstr "Thonny 應該要用哪一種直譯器執行你的程式?"
 
@@ -1764,7 +1714,7 @@ msgstr "在編輯器中使用 Tab 鍵要求自動補全"
 msgid "Request completions with Tab-key in Shell"
 msgstr "在互動環境中使用 Tab 鍵要求自動補全"
 
-#: thonny/plugins/goto_definition.py:58
+#: thonny/editors.py:213 thonny/plugins/goto_definition.py:58
 msgid "Problem"
 msgstr "問題"
 
@@ -1776,77 +1726,77 @@ msgstr "無法找到定義"
 msgid "Clear Shell before starting new process (Run, Debug, Stop/Restart, ...)"
 msgstr "在啟動新的程序  (執行、除錯、停止/除新啟動...) 前清除互動環境窗格"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:171
+#: thonny/plugins/cpython_frontend/cp_front.py:196
 msgid "Thonny's Python"
 msgstr "Thonny 的 Python"
 
-#: thonny/plugins/micropython/mp_front.py:492
+#: thonny/plugins/micropython/mp_front.py:496
 msgid "Interrupt working program on connect"
 msgstr "連線時中斷目前程式"
 
-#: thonny/plugins/micropython/mp_front.py:500
+#: thonny/plugins/micropython/mp_front.py:504
 msgid "Synchronize device's real time clock"
 msgstr "為裝置的 RTC 同步時間"
 
-#: thonny/plugins/micropython/mp_front.py:506
+#: thonny/plugins/micropython/mp_front.py:510
 msgid "Use local time in real time clock"
 msgstr "在 RTC 中使用本地時間"
 
-#: thonny/plugins/micropython/mp_front.py:512
+#: thonny/plugins/micropython/mp_front.py:516
 msgid "Restart interpreter before running a script"
 msgstr "執行腳本前重啟直譯器"
 
-#: thonny/plugins/micropython/pip_gui.py:24
+#: thonny/plugins/micropython/pip_gui.py:26
 msgid "This doesn't look like MicroPython/CircuitPython package.\n"
 "Are you sure you want to install it?"
 msgstr "這並不是 MicroPython/CircuitPython 的套件。\n"
 "你確定要安裝嗎?"
 
-#: thonny/base_file_browser.py:849
+#: thonny/base_file_browser.py:853
 msgid "Moving to Trash"
 msgstr "移到資源回收桶"
 
-#: thonny/base_file_browser.py:850
+#: thonny/base_file_browser.py:854
 msgid "Move %s to Trash?"
 msgstr "將 %s 移到資源回收桶?"
 
-#: thonny/base_file_browser.py:857
+#: thonny/base_file_browser.py:861
 msgid "Moving %s to Trash"
 msgstr "將 %s 移到資源回收桶"
 
-#: thonny/base_file_browser.py:662
+#: thonny/base_file_browser.py:666
 msgid "Open in default external app"
 msgstr "使用預設的外部程式開啟"
 
-#: thonny/base_file_browser.py:1206
+#: thonny/base_file_browser.py:1210
 msgid "Opening remote files in external app is not supported."
 msgstr "不支援使用外部程式開啟遠端檔案。"
 
-#: thonny/base_file_browser.py:1213
+#: thonny/base_file_browser.py:1217
 msgid "If the file needs to be opened in external app, then download it to a local directory and open it from there!"
 msgstr "如果要使用外部程式開啟檔案, 請先下載到本地資料夾後再開啟!"
 
-#: thonny/editors.py:150
+#: thonny/editors.py:151
 msgid "Looks like '%s' was deleted or moved."
 msgstr "%s 似乎已經刪除或是移到他處。"
 
-#: thonny/editors.py:169
+#: thonny/editors.py:170
 msgid "Looks like '%s' was modified outside of the editor."
 msgstr "'%s' 在編輯器外被修改了"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:230
+#: thonny/plugins/cpython_frontend/cp_front.py:256
 msgid "NB! Thonny only supports Python %s and later"
 msgstr "注意!Thonny 只支援 Python %s 及更新的版本"
 
-#: thonny/editors.py:1003
+#: thonny/editors.py:1010
 msgid "Go to line"
 msgstr "到指定行"
 
-#: thonny/workbench.py:697
+#: thonny/workbench.py:703
 msgid "Support"
 msgstr "支援"
 
-#: thonny/editors.py:393 thonny/editors.py:408
+#: thonny/editors.py:399 thonny/editors.py:414
 msgid "Could not save"
 msgstr "無法儲存"
 
@@ -1860,15 +1810,15 @@ msgid "If you quote the value of an environment variable, the quotes will be par
 msgstr "如果為環境變數加上引號, 引號也會成為變數值的一部份。\n"
 "你確定要這樣做嗎?"
 
-#: thonny/workbench.py:867
+#: thonny/workbench.py:870
 msgid "Install MicroPython"
 msgstr "安裝 MicroPython"
 
-#: thonny/workbench.py:871
+#: thonny/workbench.py:874
 msgid "Install CircuitPython"
 msgstr "安裝 CircuitPython"
 
-#: thonny/plugins/backend_config_page.py:212
+#: thonny/plugins/backend_config_page.py:210
 msgid "Make uploaded shebang scripts executable"
 msgstr "設定上傳的 shebang 腳本為可執行檔"
 
@@ -1880,7 +1830,7 @@ msgstr "設定儲存的 shebang 腳本為可執行檔"
 msgid "Activate virtual environment"
 msgstr "啟用虛擬環境"
 
-#: thonny/plugins/micropython/pip_gui.py:77 thonny/plugins/pip_gui.py:426
+#: thonny/plugins/micropython/pip_gui.py:119 thonny/plugins/pip_gui.py:426
 msgid "Target"
 msgstr "目的地"
 
@@ -1888,24 +1838,24 @@ msgstr "目的地"
 msgid "Visualize current script at Python Tutor"
 msgstr "在 Python Tutor 網站中視覺化呈現當前腳本"
 
-#: thonny/plugins/todo_view.py:44
+#: thonny/plugins/todo_view.py:43
 msgid "Line"
 msgstr "行"
 
-#: thonny/plugins/todo_view.py:45
+#: thonny/plugins/todo_view.py:44
 msgid "Info"
 msgstr "資訊"
 
-#: thonny/plugins/todo_view.py:123
+#: thonny/plugins/todo_view.py:121
 msgid "No line marked with #todo found"
 msgstr "沒有找到標記 #todo 的地方"
 
-#: thonny/plugins/todo_view.py:143
+#: thonny/plugins/todo_view.py:141
 msgid "TODO"
 msgstr "代辦事項"
 
-#: thonny/plugins/circuitpython/cirpy_front.py:98
-#: thonny/plugins/micropython/mp_front.py:536
+#: thonny/plugins/circuitpython/cirpy_front.py:113
+#: thonny/plugins/micropython/mp_front.py:550
 msgid "Install or update %s"
 msgstr "安裝或是更新 %s"
 
@@ -1913,7 +1863,7 @@ msgstr "安裝或是更新 %s"
 msgid "Local Python 3"
 msgstr "本地端的 Python 3"
 
-#: thonny/plugins/cpython_frontend/cp_front.py:240
+#: thonny/plugins/cpython_frontend/cp_front.py:266
 msgid "You can activate an existing virtual environment also via the right-click context menu in the file navagation when selecting a virtual environment folder, or the 'pyveng.cfg' file inside."
 msgstr "你也可以透過檔案窗格, 在虛擬環境資料夾或是其中的 'pyveng.cfg' 檔案上按滑鼠右鍵顯示的功能表啟用既有的虛擬環境"
 
@@ -1925,11 +1875,97 @@ msgstr "準備 (略過 VS Code 的部分)"
 msgid "Default password"
 msgstr "預設密碼"
 
-#: thonny/running.py:338
+#: thonny/running.py:392
 msgid "Information"
-msgstr ""
+msgstr "資訊"
 
-#: thonny/running.py:339
+#: thonny/running.py:393
 msgid "For debugging the program must be saved first."
-msgstr ""
+msgstr "程式必須先存檔才能除錯。"
+
+#: thonny/editors.py:213
+msgid "%s doesn't look like a text file"
+msgstr "%s 似乎不是文字檔"
+
+#: thonny/editors.py:219
+msgid "Problem loading file"
+msgstr "載入檔案遇到問題"
+
+#: thonny/editors.py:220
+msgid "This file seems to have problems with encoding.\n"
+"\n"
+"Make sure it is in UTF-8 or contains proper encoding hint."
+msgstr "此檔案編碼有問題。\n"
+"\n"
+"請確認使用 UTF-8 編碼或是加入正確的編碼指示。"
+
+#: thonny/editors.py:295
+msgid "File is open"
+msgstr "檔案已經開啟"
+
+#: thonny/editors.py:296
+msgid "This file is already open in Thonny.\n"
+"\n"
+"If you want to save with this name,\n"
+"close the existing editor first!"
+msgstr "此檔案已經在 Thonny 中開啟。\n"
+"\n"
+"如果要以此名稱存檔, 請先關閉編輯中的同名檔案!"
+
+#: thonny/editors.py:349
+msgid "Permission Error"
+msgstr "權限錯誤"
+
+#: thonny/editors.py:350
+msgid "Looks like this file or folder is not writable."
+msgstr "無法寫入此檔案或資料夾。"
+
+#: thonny/editors.py:414
+msgid "Back-end is not ready"
+msgstr "後端尚未就緒"
+
+#: thonny/editors.py:419
+msgid "Where to save to?"
+msgstr "存檔位置?"
+
+#: thonny/editors.py:490
+msgid "Potential problem"
+msgstr "潛在問題"
+
+#: thonny/editors.py:491
+msgid "If you name your script '%s', you won't be able to import the library module named '%s'"
+msgstr "如果將腳本存成 '%s', 就無法匯入名稱為 '%s' 的程式庫模組"
+
+#: thonny/editors.py:497
+msgid "Do you still want to use this name for your script?"
+msgstr "仍然要為腳本使用此檔名?"
+
+#: thonny/editors.py:1053
+msgid "Got permission error when trying to load\n"
+"%s"
+msgstr "儲存 %s 時發生權限錯誤"
+
+#: thonny/editors.py:1055
+msgid "Try opening it with File => Open."
+msgstr "請試看看用『檔案/開啟』來開檔。"
+
+#: thonny/editors.py:1057
+msgid "Permission error"
+msgstr "權限錯誤"
+
+#: thonny/plugins/run_debug_config_page.py:14
+msgid "Allow running unnamed programs"
+msgstr "允許執行尚未命名的程式"
+
+#: thonny/plugins/pip_gui.py:600
+msgid "License"
+msgstr "授權"
+
+#: thonny/plugins/run_debug_config_page.py:27
+msgid "Warn if a user module shadows a library module"
+msgstr "在使用者自己的模組會遮蓋掉程式庫模組時發出警告"
+
+#: thonny/plugins/micropython/pip_gui.py:65
+msgid "Search micropython-lib and PyPI"
+msgstr "搜尋 micropython-lib 與 PyPI"
 
diff --git a/thonny/memory.py b/thonny/memory.py
index afbea29..6296804 100644
--- a/thonny/memory.py
+++ b/thonny/memory.py
@@ -105,7 +105,6 @@ class VariablesFrame(MemoryFrame):
                 self.tree.set(node_id, "name", group_title)
 
             for name in sorted(variables.keys()):
-
                 if not name.startswith("__"):
                     node_id = self.tree.insert("", "end", tags="item")
                     self.tree.set(node_id, "name", name)
diff --git a/thonny/misc_utils.py b/thonny/misc_utils.py
index 6442048..c97808e 100644
--- a/thonny/misc_utils.py
+++ b/thonny/misc_utils.py
@@ -8,12 +8,15 @@ import subprocess
 import sys
 import threading
 import time
+from logging import getLogger
 from typing import Optional, Sequence, Tuple
 
 PASSWORD_METHOD = "password"
 PUBLIC_KEY_NO_PASS_METHOD = "public-key (without passphrase)"
 PUBLIC_KEY_WITH_PASS_METHOD = "public-key (with passphrase)"
 
+logger = getLogger(__name__)
+
 
 def delete_dir_try_hard(path: str, hardness: int = 5) -> None:
     # Deleting the folder on Windows is not so easy task
@@ -45,9 +48,12 @@ def running_on_linux() -> bool:
 
 
 def running_on_rpi() -> bool:
+    machine_lower = platform.uname().machine.lower()
     return running_on_linux() and (
-        platform.uname().machine.lower().startswith("arm")
-        or os.environ.get("DESKTOP_SESSION") == "LXDE-pi"
+        # not great heuristics, I know
+        machine_lower.startswith("arm")
+        or machine_lower.startswith("aarch64")
+        or "LXDE-pi" in os.environ.get("DESKTOP_SESSION", "")
     )
 
 
@@ -92,11 +98,31 @@ def list_volumes(skip_letters=set()) -> Sequence[str]:
             return volumes
         finally:
             ctypes.windll.kernel32.SetErrorMode(old_mode)  # @UndefinedVariable
+    if sys.platform == "linux":
+        try:
+            from dbus_next.errors import DBusError
+        except ImportError:
+            logger.info("Could not import dbus_next, falling back to mount command")
+            return list_volumes_with_mount_command()
+
+        from thonny.udisks import list_volumes_sync
+
+        try:
+            return list_volumes_sync()
+        except DBusError as error:
+            if "org.freedesktop.DBus.Error.ServiceUnknown" not in error.text:
+                raise
+            # Fallback to using the 'mount' command on Linux if the Udisks D-Bus service is unavailable.
+            return list_volumes_with_mount_command()
     else:
-        # 'posix' means we're on Linux or OSX (Mac).
+        # 'posix' means we're on *BSD or OSX (Mac).
         # Call the unix "mount" command to list the mounted volumes.
-        mount_output = subprocess.check_output("mount").splitlines()
-        return [x.split()[2].decode("utf-8") for x in mount_output]
+        return list_volumes_with_mount_command()
+
+
+def list_volumes_with_mount_command() -> Sequence[str]:
+    mount_output = subprocess.check_output("mount").splitlines()
+    return [x.split()[2].decode("utf-8") for x in mount_output]
 
 
 def get_win_volume_name(path: str) -> str:
@@ -514,3 +540,10 @@ def show_command_not_available_in_flatpak_message():
         tr("This command is not available if Thonny is run via Flatpak"),
         parent=get_workbench(),
     )
+
+
+def get_menu_char():
+    if running_on_windows():
+        return "≡"  # Identical to
+    else:
+        return "☰"  # Trigram for heaven, too heavy on Windows
diff --git a/thonny/plugins/about.py b/thonny/plugins/about.py
index f087f48..3fcf0d3 100644
--- a/thonny/plugins/about.py
+++ b/thonny/plugins/about.py
@@ -44,7 +44,11 @@ class AboutDialog(CommonDialogEx):
                 system_desc = "Linux"
 
             if "32" not in system_desc and "64" not in system_desc:
-                system_desc += " " + self.get_os_word_size_guess()
+                system_desc += self.get_os_word_size_suffix()
+        elif sys.platform == "darwin":
+            mac_ver = platform.mac_ver()[0]
+            mac_arch = platform.mac_ver()[2]
+            system_desc = f"macOS {mac_ver} ({mac_arch})"
         else:
             release = platform.release()
             if sys.platform == "win32":
@@ -56,7 +60,7 @@ class AboutDialog(CommonDialogEx):
                 except Exception:
                     logger.exception("Could not determine Windows version")
 
-            system_desc = platform.system() + " " + release + " " + self.get_os_word_size_guess()
+            system_desc = platform.system() + " " + release + self.get_os_word_size_suffix()
 
         platform_label = ttk.Label(
             self.main_frame,
@@ -64,7 +68,7 @@ class AboutDialog(CommonDialogEx):
             text=system_desc
             + "\n"
             + "Python "
-            + get_python_version_string(maxsize=sys.maxsize)
+            + get_python_version_string()
             + "\n"
             + "Tk "
             + ui_utils.get_tk_version_str(),
@@ -115,11 +119,9 @@ class AboutDialog(CommonDialogEx):
 
         self.bind("<Return>", self.on_close, True)
 
-    def get_os_word_size_guess(self):
+    def get_os_word_size_suffix(self):
         if "32" in platform.machine() and "64" not in platform.machine():
-            return "(32-bit)"
-        elif "64" in platform.machine() and "32" not in platform.machine():
-            return "(64-bit)"
+            return " (32-bit)"
         else:
             return ""
 
diff --git a/thonny/plugins/ast_view.py b/thonny/plugins/ast_view.py
index d365cba..aa395d6 100644
--- a/thonny/plugins/ast_view.py
+++ b/thonny/plugins/ast_view.py
@@ -79,7 +79,6 @@ class AstView(ui_utils.TreeFrame):
             return
 
         def _format(key, node, parent_id):
-
             if isinstance(node, ast.AST):
                 fields = list(ast.iter_fields(node))
 
diff --git a/thonny/plugins/autocomplete.py b/thonny/plugins/autocomplete.py
index 7d21fc3..273ea09 100644
--- a/thonny/plugins/autocomplete.py
+++ b/thonny/plugins/autocomplete.py
@@ -171,7 +171,10 @@ class CompletionsBox(EditorInfoBox):
         self._check_request_details()
 
     def _check_request_details(self) -> None:
-        assert self.winfo_ismapped()
+        if not self.winfo_ismapped():
+            # can happen, see https://github.com/thonny/thonny/issues/2162
+            return
+
         if (
             self._details_box
             and self._details_box.is_visible()
@@ -376,6 +379,11 @@ class Completer:
         if not get_workbench().get_option("edit.automatic_completions"):
             return False
 
+        # Don't autocomplete in remote shells
+        proxy = get_runner().get_backend_proxy()
+        if isinstance(event.widget, ShellText) and (not proxy or not proxy.has_local_interpreter()):
+            return False
+
         # Don't autocomplete inside comments
         line_prefix = event.widget.get("insert linestart", "insert")
         if "#" in line_prefix:
@@ -509,7 +517,6 @@ def _is_python_name_char(c: str) -> bool:
 
 
 def load_plugin() -> None:
-
     completer = Completer()
 
     def can_complete():
diff --git a/thonny/plugins/backend/flask_backend.py b/thonny/plugins/backend/flask_backend.py
index 674829c..b8c5021 100644
--- a/thonny/plugins/backend/flask_backend.py
+++ b/thonny/plugins/backend/flask_backend.py
@@ -43,11 +43,6 @@ def augment_source(source, cmd):
             + """
 
 if "{app_name}" in globals():
-    import os as __temp_os__
-    if "FLASK_ENV" not in __temp_os__.environ:
-        __temp_os__.environ["FLASK_ENV"] = "development"
-    del __temp_os__
-    
     # Conservative options for minimum technical risks.
     # Users who need more control should call run explicitly.
     print(" # Running the app with options chosen by Thonny. See Help for details.")
diff --git a/thonny/plugins/backend/matplotlib_backend.py b/thonny/plugins/backend/matplotlib_backend.py
index 60518f0..72161ef 100644
--- a/thonny/plugins/backend/matplotlib_backend.py
+++ b/thonny/plugins/backend/matplotlib_backend.py
@@ -25,7 +25,6 @@ def set_default_backend(matplotlib):
         # done or the user knows what (s)he's doing
         pass
     else:
-
         try:
             import tkinter  # @UnusedImport
 
diff --git a/thonny/plugins/backend_config_page.py b/thonny/plugins/backend_config_page.py
index b963795..46c23f9 100644
--- a/thonny/plugins/backend_config_page.py
+++ b/thonny/plugins/backend_config_page.py
@@ -32,7 +32,6 @@ class BackendDetailsConfigPage(ConfigurationPage):
         width=None,
         **kwargs,
     ):
-
         if isinstance(pady, int):
             pady = (pady, pady)
 
@@ -129,7 +128,6 @@ class BackendConfigurationPage(ConfigurationPage):
         page = self._get_conf_page(backend_desc)
 
         if page != self._current_page:
-
             if self._current_page is not None:
                 self._current_page.grid_forget()
 
diff --git a/thonny/plugins/base_ui_themes.py b/thonny/plugins/base_ui_themes.py
index dbc324a..3c49f00 100644
--- a/thonny/plugins/base_ui_themes.py
+++ b/thonny/plugins/base_ui_themes.py
@@ -381,7 +381,7 @@ def vista() -> BasicUiThemeSettings:
 
 
 def aqua() -> BasicUiThemeSettings:
-    # https://github.com/tcltk/tk/blob/master/library/ttk/aquaTheme.tcl
+    # https://github.com/tcltk/tk/blob/main/library/ttk/aquaTheme.tcl
     return {
         ".": {
             "configure": {
@@ -410,7 +410,27 @@ def aqua() -> BasicUiThemeSettings:
             },
         },
         "TButton": {"configure": {"anchor": "center", "width": "6"}},
-        "Toolbutton": {"configure": {"padding": 4}},
+        # "Toolbutton": {"configure": {"padding": 0}},
+        "Toolbutton": {
+            "configure": {"anchor": "center", "padding": scale(2), "relief": "flat"},
+            "map": {
+                "relief": [
+                    ("disabled", "flat"),
+                    ("selected", "sunken"),
+                    ("pressed", "sunken"),
+                    ("active", "raised"),
+                ],
+                "background": [("disabled", "gray"), ("pressed", "gray"), ("active", "gray")],
+                "lightcolor": [("pressed", "red")],
+                "darkcolor": [("pressed", "red")],
+            },
+            "layout": [
+                (
+                    "Toolbutton.padding",
+                    {"sticky": "nswe", "children": [("Toolbutton.label", {"sticky": "nswe"})]},
+                )
+            ],
+        },
         "TNotebook": {
             "configure": {"tabmargins": [10, 0], "tabposition": "n", "padding": [18, 8, 18, 17]}
         },
@@ -582,8 +602,8 @@ def enhanced_aqua() -> CompoundUiThemeSettings:
         {
             "TPanedWindow": {"configure": {"background": "systemDialogBackgroundActive"}},
             "TFrame": {"configure": {"background": "systemDialogBackgroundActive"}},
-            "Tab": {"map": {"foreground": [("selected", "white")]}},
             "ViewTab.TLabel": {"configure": {"padding": [scale(5), 0]}},
+            "Tab": {"map": {"foreground": [("selected", "systemSelectedTabTextColor")]}},
             "Active.ViewTab.TLabel": {
                 "configure": {
                     # "font" : "BoldTkDefaultFont",
diff --git a/thonny/plugins/cells.py b/thonny/plugins/cells.py
index bbe43d6..5bedb54 100644
--- a/thonny/plugins/cells.py
+++ b/thonny/plugins/cells.py
@@ -86,7 +86,6 @@ def _patch_perform_return():
         if len(ranges) == 2 and (
             ui_utils.shift_is_pressed(event) or ui_utils.control_is_pressed(event)
         ):
-
             if run_enabled():
                 code = text.get(ranges[0], ranges[1]).strip()
                 _submit_code(code)
diff --git a/thonny/plugins/circuitpython/cirpy_back.py b/thonny/plugins/circuitpython/cirpy_back.py
index e352aac..ae4a939 100644
--- a/thonny/plugins/circuitpython/cirpy_back.py
+++ b/thonny/plugins/circuitpython/cirpy_back.py
@@ -1,7 +1,14 @@
 import os.path
+import sys
 from logging import getLogger
 from typing import List, Optional
 
+# make sure thonny folder is in sys.path (relevant in dev)
+thonny_container = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
+if thonny_container not in sys.path:
+    sys.path.insert(0, thonny_container)
+
+
 from thonny.plugins.micropython.bare_metal_backend import (
     BareMetalMicroPythonBackend,
     launch_bare_metal_backend,
diff --git a/thonny/plugins/circuitpython/cirpy_front.py b/thonny/plugins/circuitpython/cirpy_front.py
index f2d3cc2..901a180 100644
--- a/thonny/plugins/circuitpython/cirpy_front.py
+++ b/thonny/plugins/circuitpython/cirpy_front.py
@@ -1,10 +1,15 @@
 import sys
 from logging import getLogger
+from typing import List
 
+from thonny import ui_utils
 from thonny.languages import tr
+from thonny.plugins.microbit import MicrobitFlashingDialog
+from thonny.plugins.micropython.esptool_dialog import try_launch_esptool_dialog
 from thonny.plugins.micropython.mp_front import (
     BareMetalMicroPythonConfigPage,
     BareMetalMicroPythonProxy,
+    get_uart_adapter_vids_pids,
 )
 from thonny.plugins.micropython.uf2dialog import show_uf2_installer
 
@@ -77,6 +82,10 @@ class CircuitPythonProxy(BareMetalMicroPythonProxy):
         if (p.vid, p.pid) == (0x0D28, 0x0204):
             return True
 
+        # ESP-32 and ESP32-C3 can have CP but don't expose this information
+        if (p.vid, p.pid) in get_uart_adapter_vids_pids():
+            return True
+
         if "adafruit_board_toolkit" in sys.modules or sys.platform == "linux":
             # can trust p.interface value
             return "CircuitPython CDC " in (p.interface or "")
@@ -88,11 +97,17 @@ class CircuitPythonConfigPage(BareMetalMicroPythonConfigPage):
     def _get_intro_url(self):
         return "https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython"
 
-    def _has_flashing_dialog(self):
-        return True
-
-    def _open_flashing_dialog(self):
-        show_uf2_installer(self, firmware_name="CircuitPython")
+    def get_flashing_dialog_kinds(self) -> List[str]:
+        return ["UF2", "esptool", "BBC micro:bit"]
+
+    def _open_flashing_dialog(self, kind: str) -> None:
+        if kind == "UF2":
+            show_uf2_installer(self, firmware_name="CircuitPython")
+        elif kind == "esptool":
+            try_launch_esptool_dialog(self.winfo_toplevel(), "CircuitPython")
+        elif kind == "BBC micro:bit":
+            dlg = MicrobitFlashingDialog(self, "CircuitPython")
+            ui_utils.show_dialog(dlg)
 
     def _get_flasher_link_title(self) -> str:
         return tr("Install or update %s") % "CircuitPython"
diff --git a/thonny/plugins/clean_ui_themes.py b/thonny/plugins/clean_ui_themes.py
index 0d46766..908a207 100644
--- a/thonny/plugins/clean_ui_themes.py
+++ b/thonny/plugins/clean_ui_themes.py
@@ -19,7 +19,6 @@ def clean(
         int
     ] = None,  # NB! Should be 1 or 0, not True or False (Tk would convert False to "False")
 ) -> UiThemeSettings:
-
     # https://wiki.tcl.tk/37973 (Changing colors)
     # https://github.com/tcltk/tk/blob/master/library/ttk/clamTheme.tcl
     # https://github.com/tcltk/tk/blob/master/generic/ttk/ttkClamTheme.c
diff --git a/thonny/plugins/commenting_indenting.py b/thonny/plugins/commenting_indenting.py
index 021c703..319ff2c 100644
--- a/thonny/plugins/commenting_indenting.py
+++ b/thonny/plugins/commenting_indenting.py
@@ -136,7 +136,6 @@ def _cmd_replace_tabs():
 
 
 def load_plugin() -> None:
-
     get_workbench().add_command(
         "indent",
         "edit",
diff --git a/thonny/plugins/cpython_backend/cp_back.py b/thonny/plugins/cpython_backend/cp_back.py
index 789f48d..84620fd 100644
--- a/thonny/plugins/cpython_backend/cp_back.py
+++ b/thonny/plugins/cpython_backend/cp_back.py
@@ -2,7 +2,7 @@
 import ast
 import builtins
 import functools
-import importlib
+import importlib.util
 import inspect
 import io
 import os.path
@@ -61,7 +61,7 @@ _backend = None
 
 
 class MainCPythonBackend(MainBackend):
-    def __init__(self, target_cwd):
+    def __init__(self, target_cwd, options):
         report_time("Before MainBackend")
         MainBackend.__init__(self)
         report_time("After MainBackend")
@@ -70,7 +70,9 @@ class MainCPythonBackend(MainBackend):
         _backend = self
 
         self._ini = None
+        self._options = options
         self._object_info_tweakers = []
+        self._warned_shadow_casters = set()
         self._import_handlers = {}
         self._input_queue = queue.Queue()
         self._source_preprocessors = []
@@ -102,8 +104,10 @@ class MainCPythonBackend(MainBackend):
         report_time("Before loading plugins")
         execute_with_frontend_sys_path(self._load_plugins)
         report_time("After loading plugins")
+        if self._options.get("run.warn_module_shadowing", False):
+            sys.addaudithook(self.import_audit_hook)
 
-        # preceding code was run in the directory containing thonny module, now switch to provided
+        # preceding code was run in an empty directory, now switch to provided
         try:
             os.chdir(os.path.expanduser(target_cwd))
         except OSError:
@@ -115,8 +119,10 @@ class MainCPythonBackend(MainBackend):
         # ... and replace current-dir path item
         # start in shell mode (may be later switched to script mode)
         # required in shell mode and also required to overwrite thonny location dir
-        sys.path[0] = ""
+        assert "" not in sys.path  # for avoiding
+        sys.path.insert(0, "")
         sys.argv[:] = [""]  # empty "script name"
+        self._check_warn_avoided_sys_path_conflicts()
 
         if os.name == "nt":
             self._install_signal_handler()
@@ -161,6 +167,86 @@ class MainCPythonBackend(MainBackend):
     def get_main_module(self):
         return __main__
 
+    def import_audit_hook(self, event: str, args):
+        if event == "import":
+            logger.debug("detected Import event with args %r", args)
+            module_name = args[0]
+            self._check_warn_sys_path_conflict(module_name.split(".")[0])
+
+    def _check_warn_avoided_sys_path_conflicts(self):
+        if not self._options.get("run.warn_module_shadowing", False):
+            return
+
+        for name in sys.modules.keys():
+            if name != "__main__":
+                self._check_warn_sys_path_conflict(name.split(".")[0])
+
+    def _check_warn_sys_path_conflict(self, root_module_name: str):
+        user_dir = sys.path[0]
+        if user_dir == "":
+            user_dir = os.getcwd()
+
+        # rough test to see if it's worth invoking the finder
+        for ext in ["", ".py", ".pyw"]:
+            pot_path = os.path.join(user_dir, root_module_name + ext)
+            if os.path.exists(pot_path):
+                logger.debug("Found import candidate: %r", pot_path)
+                break
+        else:
+            return
+
+        # It looks like a module is importable from the script dir or current dir.
+        # Is it shadowing a library module?
+
+        current_spec = self._find_spec_ignore_loaded(root_module_name)
+
+        first_entry = sys.path[0]
+        del sys.path[0]
+        try:
+            shadowed_spec = self._find_spec_ignore_loaded(root_module_name)
+        finally:
+            sys.path.insert(0, first_entry)
+
+        if shadowed_spec is None:
+            logger.debug("No shadowed spec")
+            return
+
+        if shadowed_spec.origin == current_spec.origin:
+            logger.debug("Equal current and shadowed spec")
+            return
+
+        logger.debug("%r shadows %r", current_spec.origin, shadowed_spec.origin)
+
+        if current_spec.origin in self._warned_shadow_casters:
+            return
+
+        if root_module_name in sys.modules:
+            # i.e. the method is called for post-import warning
+            verb = "can shadow"
+        else:
+            verb = "is shadowing"
+
+        self._send_output(
+            # NB! Using backticks, because Shell would present file path in quotes as frame link
+            f"WARNING: Your `{current_spec.origin}` {verb} the library module '{root_module_name}'. Consider renaming or moving it!\n\n",
+            "stderr",
+        )
+
+        self._warned_shadow_casters.add(current_spec.origin)
+
+    def _find_spec_ignore_loaded(self, module_name):
+        if module_name not in sys.modules:
+            return importlib.util.find_spec(module_name)
+
+        old_modules = sys.modules
+        try:
+            modules_copy = old_modules.copy()
+            del modules_copy[module_name]
+            sys.modules = modules_copy
+            return importlib.util.find_spec(module_name)
+        finally:
+            sys.modules = old_modules
+
     def _read_incoming_msg_line(self) -> str:
         return self._original_stdin.readline()
 
@@ -256,8 +342,11 @@ class MainCPythonBackend(MainBackend):
 
         filename = cmd.args[0]
         if os.path.isfile(filename):
-            sys.path.insert(0, os.path.abspath(os.path.dirname(filename)))
-            __main__.__dict__["__file__"] = filename
+            abs_filename = os.path.abspath(filename)
+            sys.path.insert(0, os.path.dirname(abs_filename))
+            __main__.__dict__["__file__"] = abs_filename
+
+        self._check_warn_avoided_sys_path_conflicts()
 
     def _custom_import(self, *args, **kw):
         module = self._original_import(*args, **kw)
@@ -582,7 +671,6 @@ class MainCPythonBackend(MainBackend):
     def _perform_pip_operation_and_list(
         self, cmd_line: List[str]
     ) -> Tuple[int, Dict[str, DistInfo]]:
-
         extra_switches = ["--disable-pip-version-check"]
         proxy = os.environ.get("https_proxy", os.environ.get("http_proxy", None))
         if proxy:
@@ -633,7 +721,6 @@ class MainCPythonBackend(MainBackend):
         return get_single_dir_child_data(path, include_hidden)
 
     def _get_path_info(self, path: str) -> Optional[Dict]:
-
         try:
             if not os.path.exists(path):
                 return None
@@ -1034,6 +1121,8 @@ class FakeOutputStream(FakeStream):
         finally:
             self._backend._exit_io_function()
 
+        return len(data)
+
     def writelines(self, lines):
         try:
             self._backend._enter_io_function()
diff --git a/thonny/plugins/cpython_backend/cp_launcher.py b/thonny/plugins/cpython_backend/cp_launcher.py
index cf64b3d..8f00efa 100644
--- a/thonny/plugins/cpython_backend/cp_launcher.py
+++ b/thonny/plugins/cpython_backend/cp_launcher.py
@@ -9,12 +9,19 @@ is far from clean.
 I could also do python -c "from backend import MainCPythonBackend: MainCPythonBackend().mainloop()",
 but looks like this gives relative __file__-s on imported modules.)
 """
+import ast
 
 # NB! This module can be also imported (when querying its path for uploading)
 if __name__ == "__main__":
-    import os
+    import ast
+    import os.path
     import sys
 
+    # make sure thonny folder is in sys.path (relevant in dev)
+    thonny_container = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
+    if thonny_container not in sys.path:
+        sys.path.insert(0, thonny_container)
+
     if sys.platform == "darwin":
         try:
             os.getcwd()
@@ -35,11 +42,14 @@ if __name__ == "__main__":
     from thonny import report_time
 
     report_time("Before importing MainCPythonBackend")
+    from thonny.common import PROCESS_ACK
     from thonny.plugins.cpython_backend.cp_back import MainCPythonBackend
 
     thonny.prepare_thonny_user_dir()
     thonny.configure_backend_logging()
+    print(PROCESS_ACK)
 
     target_cwd = sys.argv[1]
+    options = ast.literal_eval(sys.argv[2])
     report_time("Before constructing backend")
-    MainCPythonBackend(target_cwd).mainloop()
+    MainCPythonBackend(target_cwd, options).mainloop()
diff --git a/thonny/plugins/cpython_backend/cp_tracers.py b/thonny/plugins/cpython_backend/cp_tracers.py
index b94bad2..9cc6d0b 100644
--- a/thonny/plugins/cpython_backend/cp_tracers.py
+++ b/thonny/plugins/cpython_backend/cp_tracers.py
@@ -390,7 +390,6 @@ class FastTracer(Tracer):
         return self._at_a_breakpoint(frame)
 
     def _get_breakpoints_in_code(self, f_code):
-
         bps_in_file = self._get_breakpoints_in_file(f_code.co_filename)
 
         code_id = id(f_code)
@@ -693,7 +692,6 @@ class NiceTracer(Tracer):
             and prev_state["fresh_exception_id"] == id(self._fresh_exception)
             and ("before" in event or "skipexport" in node.tags)
         ):
-
             exception_info = prev_state["exception_info"]
             # share the stack ...
             stack = prev_state["stack"]
@@ -850,7 +848,6 @@ class NiceTracer(Tracer):
                 or "and_arg" in original_node.tags
                 and not value
             ):
-
                 # there may be explicit exceptions
                 if (
                     "skip_after_statement_again" in original_node.parent_node.tags
diff --git a/thonny/plugins/cpython_frontend/cp_front.py b/thonny/plugins/cpython_frontend/cp_front.py
index 75ab6c9..d7d4f0a 100644
--- a/thonny/plugins/cpython_frontend/cp_front.py
+++ b/thonny/plugins/cpython_frontend/cp_front.py
@@ -3,12 +3,13 @@ import subprocess
 import sys
 import textwrap
 import tkinter as tk
+import traceback
 from logging import getLogger
 from tkinter import messagebox, ttk
 from typing import Any, Dict
 
 import thonny
-from thonny import get_runner, get_workbench, running, ui_utils
+from thonny import get_runner, get_shell, get_workbench, running, ui_utils
 from thonny.common import (
     InlineCommand,
     InlineResponse,
@@ -34,17 +35,39 @@ class LocalCPythonProxy(SubprocessProxy):
         executable = get_workbench().get_option("LocalCPython.executable")
         self._expecting_response_for_gui_update = False
         super().__init__(clean, executable)
-        self._send_msg(ToplevelCommand("get_environment_info"))
+        try:
+            self._send_msg(ToplevelCommand("get_environment_info"))
+        except Exception:
+            get_shell().report_exception()
 
     def _get_initial_cwd(self):
         return get_workbench().get_local_cwd()
 
     def _get_launch_cwd(self):
-        # launch in the directory containing thonny package, so that other interpreters can import it as well
-        return os.path.dirname(os.path.dirname(thonny.__file__))
+        # use a directory which doesn't contain misleading modules
+        empty_dir = os.path.join(thonny.THONNY_USER_DIR, "leave_this_empty")
+        os.makedirs(empty_dir, exist_ok=True)
+        return empty_dir
 
     def _get_launcher_with_args(self):
-        return ["-m", "thonny.plugins.cpython_backend.cp_launcher", self.get_cwd()]
+        launcher_file = os.path.join(
+            os.path.dirname(os.path.dirname(__file__)), "cpython_backend", "cp_launcher.py"
+        )
+        return [
+            launcher_file,
+            self.get_cwd(),
+            repr(
+                {
+                    "run.warn_module_shadowing": get_workbench().get_option(
+                        "run.warn_module_shadowing"
+                    )
+                }
+            ),
+        ]
+
+    def can_be_isolated(self) -> bool:
+        # Can't run in isolated mode as it would hide user site-packages
+        return False
 
     def _store_state_info(self, msg):
         super()._store_state_info(msg)
@@ -77,8 +100,10 @@ class LocalCPythonProxy(SubprocessProxy):
 
         if msg["gui_is_active"] and self._gui_update_loop_id is None:
             # Start updating
+            logger.info("Starting GUI update loop")
             self._loop_gui_update(True)
         elif not msg["gui_is_active"] and self._gui_update_loop_id is not None:
+            logger.info("Cancelling GUI update loop")
             self._cancel_gui_update_loop()
 
     def _loop_gui_update(self, force=False):
@@ -215,6 +240,7 @@ class LocalCPythonConfigurationPage(BackendDetailsConfigPage):
             textvariable=self._configuration_variable,
             values=_get_interpreters(),
         )
+        self._entry.state(["!disabled", "readonly"])
 
         self._entry.grid(row=1, column=1, sticky=tk.NSEW)
 
@@ -350,7 +376,7 @@ def _get_interpreters():
         # registry
         result.update(_get_interpreters_from_windows_registry())
 
-        for minor in [7, 8, 9, 10, 11]:
+        for minor in [8, 9, 10, 11, 12]:
             for dir_ in [
                 "C:\\Python3%d" % minor,
                 "C:\\Python3%d-32" % minor,
@@ -360,8 +386,8 @@ def _get_interpreters():
                 "C:\\Program Files (x86)\\Python 3.%d" % minor,
                 "C:\\Program Files (x86)\\Python 3.%d-32" % minor,
                 "C:\\Program Files (x86)\\Python 3.%d-32" % minor,
-                os.path.expanduser("~\\AppData\Local\Programs\Python\Python3%d" % minor),
-                os.path.expanduser("~\\AppData\Local\Programs\Python\Python3%d-32" % minor),
+                os.path.expanduser(r"~\AppData\Local\Programs\Python\Python3%d" % minor),
+                os.path.expanduser(r"~\AppData\Local\Programs\Python\Python3%d-32" % minor),
             ]:
                 path = os.path.join(dir_, WINDOWS_EXE)
                 if os.path.exists(path):
@@ -402,13 +428,14 @@ def _get_interpreters():
                 "python3.9",
                 "python3.10",
                 "python3.11",
+                "python3.12",
             ]:
                 path = os.path.join(dir_, name)
                 if os.path.exists(path):
                     result.add(path)
 
     if running_on_mac_os():
-        for version in ["3.8", "3.9", "3.10", "3.11"]:
+        for version in ["3.8", "3.9", "3.10", "3.11", "3.12"]:
             dir_ = os.path.join("/Library/Frameworks/Python.framework/Versions", version, "bin")
             path = os.path.join(dir_, "python3")
 
@@ -417,7 +444,7 @@ def _get_interpreters():
 
     from shutil import which
 
-    for command in ["python3", "python3.8", "python3.9", "python3.10", "python3.11"]:
+    for command in ["python3", "python3.8", "python3.9", "python3.10", "python3.11", "python3.12"]:
         path = which(command)
         if path is not None and os.path.isabs(path):
             result.add(path)
@@ -470,9 +497,6 @@ def _get_interpreters_from_windows_registry():
     result = set()
     for key in [winreg.HKEY_LOCAL_MACHINE, winreg.HKEY_CURRENT_USER]:
         for version in [
-            "3.6",
-            "3.6-32",
-            "3.6-64",
             "3.8",
             "3.8-32",
             "3.8-64",
diff --git a/thonny/plugins/cpython_ssh/cps_back.py b/thonny/plugins/cpython_ssh/cps_back.py
index 5973378..04cceb0 100644
--- a/thonny/plugins/cpython_ssh/cps_back.py
+++ b/thonny/plugins/cpython_ssh/cps_back.py
@@ -6,6 +6,13 @@ import sys
 import threading
 from logging import getLogger
 from threading import Thread
+from typing import Any, Dict
+
+# make sure thonny folder is in sys.path (relevant in dev)
+thonny_container = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
+if thonny_container not in sys.path:
+    sys.path.insert(0, thonny_container)
+
 
 import thonny
 from thonny.backend import (
@@ -16,6 +23,7 @@ from thonny.backend import (
     interrupt_local_process,
 )
 from thonny.common import (
+    PROCESS_ACK,
     CommandToBackend,
     EOFCommand,
     ImmediateCommand,
@@ -28,8 +36,9 @@ logger = getLogger("thonny.plugins.cpython_ssh.cps_back")
 
 
 class SshCPythonBackend(BaseBackend, SshMixin):
-    def __init__(self, host, user, interpreter, cwd):
+    def __init__(self, host, user, interpreter, cwd, main_backend_options: Dict[str, Any]):
         logger.info("Starting mediator for %s @ %s", user, host)
+        self._main_backend_options = main_backend_options
         password = sys.stdin.readline().strip("\r\n")
         SshMixin.__init__(self, host, user, password, interpreter, cwd)
         self._upload_main_backend()
@@ -129,11 +138,16 @@ class SshCPythonBackend(BaseBackend, SshMixin):
         env = {"THONNY_USER_DIR": "~/.config/Thonny", "THONNY_FRONTEND_SYS_PATH": "[]"}
         self._main_backend_is_fresh = True
 
+        cp_launcher_file = (
+            self._get_remote_program_directory()
+            + "/"
+            + "thonny/plugins/cpython_backend/cp_launcher.py"
+        )
         args = [
             self._target_interpreter,
-            "-m",
-            "thonny.plugins.cpython_backend.cp_launcher",
+            cp_launcher_file,
             self._cwd,
+            repr(self._main_backend_options),
         ]
         logger.info("Starting remote process: %r", args)
         return self._create_remote_process(
@@ -194,6 +208,7 @@ class SshCPythonBackend(BaseBackend, SshMixin):
 
 if __name__ == "__main__":
     thonny.configure_backend_logging()
+    print(PROCESS_ACK)
     args = ast.literal_eval(sys.argv[1])
     backend = SshCPythonBackend(**args)
     backend.mainloop()
diff --git a/thonny/plugins/cpython_ssh/cps_front.py b/thonny/plugins/cpython_ssh/cps_front.py
index 0ee33c1..89a3c59 100644
--- a/thonny/plugins/cpython_ssh/cps_front.py
+++ b/thonny/plugins/cpython_ssh/cps_front.py
@@ -1,3 +1,4 @@
+import os.path
 import shutil
 from tkinter import messagebox
 from typing import Any, Dict, Optional
@@ -30,15 +31,20 @@ class SshCPythonProxy(SubprocessProxy):
         return True
 
     def _get_launcher_with_args(self):
+        launcher_file = os.path.join(os.path.dirname(__file__), "cps_back.py")
         return [
-            "-m",
-            "thonny.plugins.cpython_ssh.cps_back",
+            launcher_file,
             repr(
                 {
                     "host": self._host,
                     "user": self._user,
                     "interpreter": self._target_executable,
                     "cwd": self._get_initial_cwd(),
+                    "main_backend_options": {
+                        "run.warn_module_shadowing": get_workbench().get_option(
+                            "run.warn_module_shadowing"
+                        )
+                    },
                 }
             ),
         ]
diff --git a/thonny/plugins/debugger.py b/thonny/plugins/debugger.py
index 43598c1..636a127 100644
--- a/thonny/plugins/debugger.py
+++ b/thonny/plugins/debugger.py
@@ -354,9 +354,13 @@ class FrameVisualizer:
         self._frame_id = frame_info.id
         self._filename = frame_info.filename
         self._firstlineno = None
-        if running_on_mac_os():
+        if running_on_mac_os() and get_tk_version_info() < (8, 6, 11):
+            # Older Tk versions had glitch with placement of the expression box
+            # (closed box was not cleaned up)
             self._expression_box = ToplevelExpressionBox(text_frame)
         else:
+            # since 8.6.11 Tk on macOS has glitch with ToplevelExpressionBox
+            # (bad z-index)
             self._expression_box = PlacedExpressionBox(text_frame)
 
         self._note_box = ui_utils.NoteBox(text_frame.winfo_toplevel())
@@ -641,7 +645,6 @@ class BaseExpressionBox:
         event = frame_info.event
 
         if frame_info.current_root_expression is not None:
-
             if self._last_root_expression != frame_info.current_root_expression:
                 # can happen, eg. when focus jumps from the last expr in while body
                 # to while test expression
@@ -1124,7 +1127,6 @@ class ExceptionView(TextFrame):
 
         self.text.configure(foreground=get_syntax_options_for_tag("stderr")["foreground"])
         for line, frame_id, filename, lineno in exception_lines_with_frame_info:
-
             if frame_id is not None:
                 frame_tag = "frame_%d" % frame_id
 
@@ -1278,7 +1280,6 @@ def run_preferred_debug_command():
 
 
 def load_plugin() -> None:
-
     global RESUME_COMMAND_CAPTION
     RESUME_COMMAND_CAPTION = tr("Resume")
 
diff --git a/thonny/plugins/esp/__init__.py b/thonny/plugins/esp/__init__.py
index 8fb1b93..aa8bc79 100644
--- a/thonny/plugins/esp/__init__.py
+++ b/thonny/plugins/esp/__init__.py
@@ -1,26 +1,12 @@
-import os
-import signal
-import subprocess
-import threading
-import time
-import tkinter as tk
-from collections import OrderedDict
 from logging import getLogger
-from tkinter import messagebox, ttk
-from typing import Optional
+from typing import List
 
-from thonny import get_runner, ui_utils
-from thonny.languages import tr
-from thonny.misc_utils import running_on_windows
-from thonny.plugins.micropython import (
-    BareMetalMicroPythonConfigPage,
-    BareMetalMicroPythonProxy,
-    add_micropython_backend,
-    list_serial_ports_with_descriptions,
-)
-from thonny.plugins.micropython.mp_front import get_uart_adapter_vids_pids
-from thonny.running import get_front_interpreter_for_subprocess
-from thonny.workdlg import WorkDialog
+from thonny.plugins.micropython import BareMetalMicroPythonConfigPage, BareMetalMicroPythonProxy
+from thonny.plugins.micropython.esptool_dialog import try_launch_esptool_dialog
+
+# from thonny.plugins.micropython.esptool_dialog import try_launch_esptool_dialog
+from thonny.plugins.micropython.mp_front import add_micropython_backend, get_uart_adapter_vids_pids
+from thonny.plugins.micropython.uf2dialog import show_uf2_installer
 
 logger = getLogger(__name__)
 
@@ -50,51 +36,25 @@ class ESP8266Proxy(ESPProxy):
 class ESP32Proxy(ESPProxy):
     @classmethod
     def get_known_usb_vids_pids(cls):
-        return get_uart_adapter_vids_pids()
-
-
-class ESPConfigPage(BareMetalMicroPythonConfigPage):
-    def __init__(self, master, chip, firmware_start_address):
-        self._chip = chip
-        self._firmware_start_address = firmware_start_address
-        super().__init__(master)
-
-    def _has_flashing_dialog(self):
-        return True
-
-    def _open_flashing_dialog(self):
-        esptool_command = self._get_esptool_command()
-        if not esptool_command:
-            messagebox.showerror(
-                "Can't find esptool",
-                "esptool not found.\n" + "Install it via 'Tools => Manage plug-ins'\n" + "or "
-                "using your OP-system package manager.",
-                master=self,
-            )
-            return
+        # See https://github.com/espressif/usb-pids for 0x303A
+        return get_uart_adapter_vids_pids() | {(0x303A, None)}
 
-        dlg = ESPFlashingDialog(
-            self.winfo_toplevel(), self._chip, self._firmware_start_address, esptool_command
-        )
-        ui_utils.show_dialog(dlg)
-
-    def _get_esptool_command(self):
-        try:
-            import esptool
+    @classmethod
+    def _is_potential_port(cls, p):
+        lower_desc = p.description.lower()
+        return (
+            super()._is_potential_port(p) or "m5stack" in lower_desc or "esp32" in lower_desc
+        ) and "circuitpython" not in lower_desc
 
-            return [get_front_interpreter_for_subprocess(), "-u", "-m", "esptool"]
-        except ImportError:
-            import shutil
 
-            result = shutil.which("esptool")
-            if result:
-                return [result]
-            else:
-                result = shutil.which("esptool.py")
-                if result:
-                    return [result]
-                else:
-                    return None
+class ESPConfigPage(BareMetalMicroPythonConfigPage):
+    def _open_flashing_dialog(self, kind: str) -> None:
+        if kind == "esptool":
+            try_launch_esptool_dialog(self.winfo_toplevel(), "MicroPython")
+        elif kind == "UF2":
+            show_uf2_installer(self, firmware_name="MicroPython")
+        else:
+            raise ValueError(f"Unexpected kind{kind}")
 
     @property
     def allow_webrepl(self):
@@ -102,270 +62,13 @@ class ESPConfigPage(BareMetalMicroPythonConfigPage):
 
 
 class ESP8266ConfigPage(ESPConfigPage):
-    def __init__(self, master):
-        super().__init__(master, "esp8266", "0x0")
+    def get_flashing_dialog_kinds(self) -> List[str]:
+        return ["esptool"]
 
 
 class ESP32ConfigPage(ESPConfigPage):
-    def __init__(self, master):
-        super().__init__(master, "esp32", "0x1000")
-
-
-class ESPFlashingDialog(WorkDialog):
-    def __init__(self, master, chip, start_address, esptool_command):
-        self._chip = chip
-        self._start_address = start_address
-
-        super().__init__(master)
-
-        self._esptool_command = esptool_command
-
-    def get_title(self):
-        return "%s firmware installer" % self._chip.upper()
-
-    def get_instructions(self) -> Optional[str]:
-        return (
-            "This dialog allows installing or updating firmware on %s using the most common settings.\n"
-            % self._chip.upper()
-            + "If you need to set other options, then please use 'esptool' on the command line.\n\n"
-            + "Note that there are many variants of MicroPython for ESP devices. If the firmware provided\n"
-            + "at micropython.org/download doesn't work for your device, then there may exist better\n"
-            + "alternatives -- look around in your device's documentation or at MicroPython forum."
-        )
-
-    def is_ready_for_work(self):
-        return self._port_desc_variable.get() and self._firmware_entry.get()
-
-    def get_action_text_max_length(self):
-        return 35
-
-    def populate_main_frame(self):
-        epadx = self.get_large_padding()
-        ipadx = self.get_small_padding()
-        epady = epadx
-        ipady = ipadx
-
-        # Port
-        port_label = ttk.Label(self.main_frame, text="Port")
-        port_label.grid(row=1, column=1, sticky="w", padx=(epadx, 0), pady=(epady, 0))
-
-        self._port_desc_variable = tk.StringVar(value="")
-        self._port_combo = ttk.Combobox(
-            self.main_frame, exportselection=False, textvariable=self._port_desc_variable, values=[]
-        )
-        self._port_combo.state(["!disabled", "readonly"])
-        self._port_combo.grid(row=1, column=2, sticky="nsew", padx=ipadx, pady=(epady, 0))
-
-        port_reload_button = ttk.Button(self.main_frame, text="Reload", command=self._reload_ports)
-        port_reload_button.grid(row=1, column=3, sticky="ew", padx=(0, epadx), pady=(epady, 0))
-
-        # Firmware
-        firmware_label = ttk.Label(self.main_frame, text="Firmware")
-        firmware_label.grid(row=2, column=1, sticky="w", padx=(epadx, 0), pady=(ipady, 0))
-
-        self._firmware_entry = ttk.Entry(self.main_frame, width=50)
-        self._firmware_entry.grid(row=2, column=2, sticky="nsew", padx=ipadx, pady=(ipady, 0))
-
-        browse_button = ttk.Button(self.main_frame, text="Browse...", command=self._browse)
-        browse_button.grid(row=2, column=3, sticky="we", padx=(0, epadx), pady=(ipady, 0))
-
-        self.main_frame.columnconfigure(2, weight=1)
-
-        # FLASH_MODE
-        self._flashmode = tk.StringVar(None, "keep")
-        flashmode_group = ttk.Labelframe(self.main_frame, text="Flash mode")
-        flashmode_group.grid(
-            row=4, column=1, columnspan=2, sticky="w", padx=(epadx, 0), pady=(ipady * 2, 0)
-        )
-
-        self._flashmode_keep_radiobutton = ttk.Radiobutton(
-            flashmode_group, text="From image file (keep)", variable=self._flashmode, value="keep"
-        )
-        self._flashmode_keep_radiobutton.grid(row=0, column=0, sticky="w")
-
-        # self._flashmode_variable.value=False
-        self._flashmode_qio_radiobutton = ttk.Radiobutton(
-            flashmode_group, text="Quad I/O (qio)", variable=self._flashmode, value="qio"
-        )
-        self._flashmode_qio_radiobutton.grid(row=0, column=1, sticky="w")
-
-        self._flashmode_dio_radiobutton = ttk.Radiobutton(
-            flashmode_group, text="Dual I/O (dio)", variable=self._flashmode, value="dio"
-        )
-        self._flashmode_dio_radiobutton.grid(row=1, column=0, sticky="w")
-
-        self._flashmode_dout_radiobutton = ttk.Radiobutton(
-            flashmode_group, text="Dual Output (dout)", variable=self._flashmode, value="dout"
-        )
-        self._flashmode_dout_radiobutton.grid(row=1, column=1, sticky="w")
-
-        # Erase
-        self._erase_variable = tk.BooleanVar(value=True)
-        self._erase_checkbutton = ttk.Checkbutton(
-            self.main_frame, text="Erase flash before installing", variable=self._erase_variable
-        )
-        self._erase_checkbutton.grid(
-            row=6, column=1, columnspan=2, sticky="w", padx=(epadx, 0), pady=(ipady, epady)
-        )
-
-        self._reload_ports()
-
-    def _reload_ports(self):
-        pairs = list_serial_ports_with_descriptions()
-        self._ports_by_desc = OrderedDict(pairs)
-        self._port_combo.configure(values=list(self._ports_by_desc.keys()))
-
-    def _browse(self):
-        initialdir = os.path.normpath(os.path.expanduser("~/Downloads"))
-        if not os.path.isdir(initialdir):
-            initialdir = None
-
-        path = ui_utils.askopenfilename(
-            filetypes=[("bin-files", ".bin"), ("all files", ".*")],
-            parent=self.winfo_toplevel(),
-            initialdir=initialdir,
-        )
-        if path:
-            self._firmware_entry.delete(0, "end")
-            self._firmware_entry.insert(0, path)
-
-    def _check_connection(self, port):
-        # wait a bit in case existing connection was just closed
-        time.sleep(1.5)
-
-        # Maybe another program is connected
-        # or the user doesn't have sufficient permissions?
-        try:
-            import serial
-
-            conn = serial.Serial(port)
-            conn.close()
-            return True
-        except Exception as e:
-            messagebox.showerror("Can't connect", str(e), master=self)
-            return False
-
-    def start_work(self):
-        port = self._ports_by_desc[self._port_desc_variable.get()]
-        if not self._port_desc_variable.get():
-            messagebox.showerror("Select port", "Please select port", parent=self)
-            return False
-
-        firmware_path = self._firmware_entry.get()
-        if not os.path.exists(firmware_path):
-            messagebox.showerror(
-                "Bad firmware path", "Can't find firmware, please check path", master=self
-            )
-            return False
-
-        flash_mode = self._flashmode.get()
-        erase_flash = self._erase_variable.get()
-
-        proxy = get_runner().get_backend_proxy()
-        port_was_used_in_thonny = (
-            isinstance(proxy, BareMetalMicroPythonProxy) and proxy._port == port
-        )
-        if port_was_used_in_thonny:
-            proxy.disconnect()
-
-        commands = []
-        threading.Thread(
-            target=self.work_in_thread,
-            daemon=True,
-            args=[port, firmware_path, flash_mode, erase_flash, port_was_used_in_thonny],
-        ).start()
-
-    def work_in_thread(self, port, firmware_path, flash_mode, erase_flash, port_was_used_in_thonny):
-        if port_was_used_in_thonny:
-            time.sleep(1.5)
-
-        erase_command = self._esptool_command + [
-            "--port",
-            port,
-            "erase_flash",
-        ]
-
-        write_command = self._esptool_command + [
-            "--port",
-            port,
-            "write_flash",
-            "--flash_mode",
-            flash_mode,
-            "--flash_size",  # default changed in esptool 3.0
-            "detect",
-            self._start_address,
-            firmware_path,
-        ]
-
-        if not self._check_connection(port):
-            self.set_action_text("Problem")
-            self.append_text("Could not connect to port\n")
-            self.report_done(False)
-            return
-
-        if erase_flash:
-            self.set_action_text("Erasing flash")
-            self.append_text(subprocess.list2cmdline(erase_command) + "\n")
-            self._proc = self._create_subprocess(erase_command)
-            while True:
-                line = self._proc.stdout.readline()
-                if not line:
-                    break
-                self.append_text(line)
-                self.set_action_text_smart(line)
-            returncode = self._proc.wait()
-            if returncode:
-                self.set_action_text("Error")
-                self.append_text("\nErase command returned with error code %s" % returncode)
-                self.report_done(False)
-                return
-            else:
-                self.append_text("Erasing done\n------------------------------------\n\n")
-
-        self.set_action_text("Writing firmware")
-        self.append_text(subprocess.list2cmdline(write_command) + "\n")
-        self._proc = self._create_subprocess(write_command)
-        while True:
-            line = self._proc.stdout.readline()
-            if not line:
-                break
-            self.append_text(line)
-            self.set_action_text_smart(line)
-        returncode = self._proc.wait()
-        if returncode:
-            self.set_action_text("Error")
-            self.append_text("\nWrite command returned with error code %s" % returncode)
-        else:
-            self.set_action_text("Done!")
-            self.append_text("Done!")
-        self.report_done(returncode == 0)
-
-    def _create_subprocess(self, cmd) -> subprocess.Popen:
-        return subprocess.Popen(
-            cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True
-        )
-
-    def get_ok_text(self):
-        return tr("Install")
-
-    def cancel_work(self):
-        super().cancel_work()
-        # try gently first
-        try:
-            try:
-                if running_on_windows():
-                    os.kill(self._proc.pid, signal.CTRL_BREAK_EVENT)  # pylint: disable=no-member
-                else:
-                    os.kill(self._proc.pid, signal.SIGINT)
-
-                self._proc.wait(2)
-            except subprocess.TimeoutExpired:
-                if self._proc.poll() is None:
-                    # now let's be more concrete
-                    self._proc.kill()
-        except OSError as e:
-            messagebox.showerror("Error", "Could not kill subprocess: " + str(e), master=self)
-            logger.error("Could not kill subprocess", exc_info=e)
+    def get_flashing_dialog_kinds(self) -> List[str]:
+        return ["esptool", "UF2"]
 
 
 def load_plugin():
diff --git a/thonny/plugins/esp/esp_back.py b/thonny/plugins/esp/esp_back.py
index 1e31228..64b30b8 100644
--- a/thonny/plugins/esp/esp_back.py
+++ b/thonny/plugins/esp/esp_back.py
@@ -1,7 +1,13 @@
 import os.path
+import sys
 from logging import getLogger
 from typing import List, Optional
 
+# make sure thonny folder is in sys.path (relevant in dev)
+thonny_container = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
+if thonny_container not in sys.path:
+    sys.path.insert(0, thonny_container)
+
 from thonny.plugins.micropython.bare_metal_backend import (
     BareMetalMicroPythonBackend,
     launch_bare_metal_backend,
diff --git a/thonny/plugins/ev3/ev3_back.py b/thonny/plugins/ev3/ev3_back.py
index cc2be9f..d9fec65 100644
--- a/thonny/plugins/ev3/ev3_back.py
+++ b/thonny/plugins/ev3/ev3_back.py
@@ -3,7 +3,13 @@ import sys
 from logging import getLogger
 from typing import List, Optional
 
+# make sure thonny folder is in sys.path (relevant in dev)
+thonny_container = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
+if thonny_container not in sys.path:
+    sys.path.insert(0, thonny_container)
+
 import thonny
+from thonny.common import PROCESS_ACK
 from thonny.plugins.micropython.os_mp_backend import SshUnixMicroPythonBackend
 
 logger = getLogger("thonny.plugins.ev3.ev3_back")
@@ -19,6 +25,7 @@ class EV3MicroPythonBackend(SshUnixMicroPythonBackend):
 if __name__ == "__main__":
     THONNY_USER_DIR = os.environ["THONNY_USER_DIR"]
     thonny.configure_backend_logging()
+    print(PROCESS_ACK)
 
     import ast
 
diff --git a/thonny/plugins/files.py b/thonny/plugins/files.py
index 53f8fa2..9e7c1c6 100644
--- a/thonny/plugins/files.py
+++ b/thonny/plugins/files.py
@@ -608,7 +608,21 @@ def load_plugin() -> None:
 
     get_workbench().add_view(FilesView, tr("Files"), "nw")
 
-    for ext in [".py", ".pyw", ".pyi", ".txt", ".log", ".json", ".yml", ".yaml", ".md", ".rst"]:
+    for ext in [
+        ".py",
+        ".pyw",
+        ".pyi",
+        ".txt",
+        ".log",
+        ".json",
+        ".yml",
+        ".yaml",
+        ".md",
+        ".rst",
+        ".toml",
+        ".gitignore",
+        ".env",
+    ]:
         get_workbench().set_default(get_file_handler_conf_key(ext), "thonny")
 
 
diff --git a/thonny/plugins/find_replace.py b/thonny/plugins/find_replace.py
index 72a77de..2d35571 100644
--- a/thonny/plugins/find_replace.py
+++ b/thonny/plugins/find_replace.py
@@ -6,6 +6,7 @@ from tkinter import ttk
 
 from thonny import get_workbench
 from thonny.languages import tr
+from thonny.misc_utils import running_on_mac_os
 from thonny.ui_utils import CommonDialog, select_sequence, show_dialog
 
 # TODO - consider moving the cmd_find method to main class in order to pass the editornotebook reference
@@ -22,14 +23,13 @@ logger = getLogger(__name__)
 
 
 class FindDialog(CommonDialog):
-
     last_searched_word = None
 
     def __init__(self, master):
         padx = 15
         pady = 15
 
-        super().__init__(master, takefocus=1, background="pink")
+        super().__init__(master, skip_tk_dialog_attributes=running_on_mac_os(), takefocus=1)
         main_frame = ttk.Frame(self)
         main_frame.grid(row=1, column=1, sticky="nsew")
         self.columnconfigure(1, weight=1)
@@ -67,20 +67,23 @@ class FindDialog(CommonDialog):
         self.find_label.grid(column=0, row=0, sticky="w", padx=(padx, 0), pady=(pady, 0))
 
         # Find text field
-        initial_text = ""
+        seed_text = ""
         try:
             widget = get_workbench().focus_get()
             if isinstance(widget, tk.Text):
+                # NB! selection_get may give selection from another app,
+                # that's why I'm checkin that Text has sel tags
                 selected_lines = widget.selection_get().splitlines()
-                if selected_lines:
-                    initial_text = selected_lines[0]
+                if selected_lines and len(widget.tag_ranges("sel")) > 0:
+                    seed_text = selected_lines[0]
+                    logger.debug("Got seed text %r from widget %s", seed_text, widget)
         except Exception:
-            logger.exception("Could not get initial text")
+            logger.exception("Could not get seed text")
 
-        self.find_entry_var = tk.StringVar(value=initial_text)
+        self.find_entry_var = tk.StringVar(value=seed_text)
         self.find_entry = ttk.Entry(main_frame, textvariable=self.find_entry_var)
         self.find_entry.grid(column=1, row=0, columnspan=2, padx=(0, 10), pady=(pady, 0))
-        if FindDialog.last_searched_word is not None:
+        if not seed_text and FindDialog.last_searched_word is not None:
             self.find_entry.insert(0, FindDialog.last_searched_word)
 
         # Replace text label
@@ -208,7 +211,6 @@ class FindDialog(CommonDialog):
 
     # performs the replace operation - replaces the currently active found word with what is entered in the replace field
     def _perform_replace(self):
-
         # nothing is currently in found status
         if self.active_found_tag == None:
             return
@@ -247,7 +249,6 @@ class FindDialog(CommonDialog):
 
     # replaces all occurrences of the search string with the replace string
     def _perform_replace_all(self):
-
         tofind = self.find_entry.get()
         if len(tofind) == 0:
             self.infotext_label_var.set(tr("Enter string to be replaced."))
@@ -423,7 +424,7 @@ def load_plugin() -> None:
             editor = get_workbench().get_editor_notebook().get_current_editor()
             if editor:
                 dlg = FindDialog(editor._code_view)
-                show_dialog(dlg)
+                show_dialog(dlg, modal=False)
 
     def find_f3(event):
         if _active_find_dialog is None:
diff --git a/thonny/plugins/help/assistant.rst b/thonny/plugins/help/assistant.rst
index 0ef75e3..68e99bb 100644
--- a/thonny/plugins/help/assistant.rst
+++ b/thonny/plugins/help/assistant.rst
@@ -9,7 +9,7 @@ to explain it in simpler terms and offers some advice for finding and fixing the
 Sometimes your program may not work as you want even if you don't get any error messages. In this case
 sometimes it helps to investigate the code carefully in order to spot certain bad smells or
 peculiarities, which may lead to discovering the problem. There are two popular tools, which are used
-for such investigations: `Pylint <pylint.pycqa.or>`_ and `Mypy <http://mypy-lang.org/>`_.
+for such investigations: `Pylint <pylint.pycqa.org>`_ and `Mypy <http://mypy-lang.org/>`_.
 
 Mypy tries to detect certain contradictions in your code, for example when a function seems to
 expect an integer argument, but your code calls it with a string. Pylint is not as good with this
diff --git a/thonny/plugins/help/birdseye.rst b/thonny/plugins/help/birdseye.rst
index 69fb5a3..e2873f5 100644
--- a/thonny/plugins/help/birdseye.rst
+++ b/thonny/plugins/help/birdseye.rst
@@ -21,4 +21,4 @@ for decorating your functions. Thonny executes Birdseye such that it records inf
 functions.
 
 The local server uses port 7777 by default. If this is used by another application, then configure
-another port (Tools → Options → Debugger) and restart Thonny.
\ No newline at end of file
+another port in *Tools → Options → Run & Debug* and restart Thonny.
diff --git a/thonny/plugins/help/debuggers.rst b/thonny/plugins/help/debuggers.rst
index 08582e3..86be6ca 100644
--- a/thonny/plugins/help/debuggers.rst
+++ b/thonny/plugins/help/debuggers.rst
@@ -33,7 +33,7 @@ If you want to reach a specific part of the code, then you can speed up the
 process by placing your cursor on that line and selecting *Run → Run to cursor*. 
 This makes Thonny automatically step until this line. You can take the command from there.
 
-If you have editor line numbers enabled (Tools → Options → Editor), then you can 
+If you have editor line numbers enabled in *Tools → Options → Editor*, then you can 
 also use **breakpoints**. When you click next to a statement in the editor left margin, a dot
 appears. When you now start the debugger, it doesn't stop before first statement but runs to the 
 statement marked with the dot a.k.a breakpoint. You can place as many breakpoints to your programs as 
@@ -55,10 +55,10 @@ Different styles for showing the call stack
 -------------------------------------------
 By default Thonny uses stacked windows for presenting the call stack. This gives good intuition about 
 the concept, but it may become cumbersome to use. Therefore, since version 3.0 one can choose between 
-two different styles for presenting call stack. In “Tools → Options → Debugger” you can switch to more 
+two different styles for presenting call stack. In *Tools → Options → Run & Debug* you can switch to more 
 traditional style with a separate view for presenting and switching call frames. Note that both 
 styles can be used with both debugging modes.
 
 Birdseye
 --------
-Command *Debug current script (Birdseye)* is explained at a `separate page <birdseye.rst>`_
+Command *Debug current script (Birdseye)* is explained at a `separate page <birdseye.rst>`_.
diff --git a/thonny/plugins/help/dock.rst b/thonny/plugins/help/dock.rst
index 5b09e83..7d16500 100644
--- a/thonny/plugins/help/dock.rst
+++ b/thonny/plugins/help/dock.rst
@@ -12,4 +12,4 @@ check it and run your Tkinter program, Thonny performs following magic tricks:
 * It remembers where you position your window. Next time it places the window at the same position.
 * It makes your window stay on top even if you click on Thonny window to start modifying the code. In fact, after your Tkinter window becomes visible, Thonny automatically focuses its own window so that you can continue editing the script without grabbing the mouse. When you're done, just press F5 again and old window gets replaced with the new one.
  
-*Staying on top currently does not work with turtle programs on macOS (https://github.com/thonny/thonny/issues/798)*
+Staying on top currently does not work with turtle programs on macOS (https://github.com/thonny/thonny/issues/798).
diff --git a/thonny/plugins/help/flask.rst b/thonny/plugins/help/flask.rst
index 914fc3b..53bfaad 100644
--- a/thonny/plugins/help/flask.rst
+++ b/thonny/plugins/help/flask.rst
@@ -12,8 +12,8 @@ Debugging
 ---------
 If you want to step through your Flask program, set a breakpoint inside some function and invoke 
 the debugger (both nicer and faster work, but faster is ... faster). Reload your page and start 
-stepping inside the function. You may want to turn off "Frames in separate windows" (Tools => Options
-=> Run & Debug) for more comfortable operation. 
+stepping inside the function. You may want to turn off "Frames in separate windows" in *Tools → Options
+→ Run & Debug* for more comfortable operation.
 
 Details
 -------
diff --git a/thonny/plugins/help/modes.rst b/thonny/plugins/help/modes.rst
index ee7573a..255464e 100644
--- a/thonny/plugins/help/modes.rst
+++ b/thonny/plugins/help/modes.rst
@@ -8,7 +8,7 @@ This is the default mode. Nothing much to say about this.
 
 Simple mode
 -----------
-In this mode the menus are hidden, toolbar buttons have captions and Variables view gets automatically opened. 
+In this mode the menus are hidden and toolbar buttons have captions.
 Use a small link in the upper-right corner of the main window to return to regular mode.
 
 Expert mode
@@ -17,6 +17,6 @@ This mode looks almost like regular mode, but has some extra features, which are
 useful for teachers.
 
 * View menu gets an extra item *Full screen* which puts Thonny to full screen.
-* Double clicking on the tab of an editor or view maximizes this editor or view. Unmaximize by double clicking the tab again.
+* Double clicking on the tab of an editor or view maximizes this editor or view. Unmaximize by typing ESC.
 * Tools menu gets an extra item *Open replayer...* which allows replaying user action logs.   
 
diff --git a/thonny/plugins/help/packages.rst b/thonny/plugins/help/packages.rst
index 2339310..d73d673 100644
--- a/thonny/plugins/help/packages.rst
+++ b/thonny/plugins/help/packages.rst
@@ -10,10 +10,10 @@ With pip on command line
 ------------------------
 #. From "Tools" menu select "Open system shell...". You should get a new terminal window stating the correct name of *pip* command (usually ``pip`` or ``pip3``). In the following I've assumed the command name is ``pip``.
 #. Enter ``pip install <package name>`` (eg. ``pip install pygame``) and press ENTER. You should see *pip* downloading and installing the package and printing a success message.
-#. Close the terminal (optional)
-#. Return to Thonny
-#. Reset interpreter by selecting "Stop/Reset" from "Run menu" (this is required only first time you do pip install)
-#. Start using the package
+#. Close the terminal (optional).
+#. Return to Thonny.
+#. Reset interpreter by selecting "Stop/Restart backend" from "Run" menu (this is required only first time you do pip install).
+#. Start using the package.
 
 .. NOTE::
    The "Open system shell..." menu is not available when running from the Flatpak on Linux.
@@ -45,7 +45,7 @@ Install it and find out where it puts Python executable (*pythonw.exe* in Window
 *python3* or *python* in Linux and Mac).
 
 In Thonny open "Tools" menu and select "Options...". In the options dialog open "Interpreter" 
-tab, click "Select executable" and show the location of Anaconda's Python executable.
+tab and show the location of Anaconda's Python executable.
 
 After you have done this, next time you run your program, it will be run through Anaconda's 
 Python and all the libraries installed there are available.
diff --git a/thonny/plugins/help/program_arguments.rst b/thonny/plugins/help/program_arguments.rst
index e2cc896..aa33e6e 100644
--- a/thonny/plugins/help/program_arguments.rst
+++ b/thonny/plugins/help/program_arguments.rst
@@ -19,7 +19,6 @@ When you run your program like this, you can access the arguments from ``sys.arg
 Fixing the command line arguments
 ---------------------------------
 If you need to use same set of arguments several times, it may become tedious to construct
-the ``%Run`` by hand. In this case check **Program arguments** in the **View menu**. This 
+the ``%Run`` by hand. In this case check **Program arguments** in the **View** menu. This
 opens a small entry box next to the toolbar buttons. From now on, everything you type in this
 box gets appended to ``%Run <script name>`` each time you press F5.
- 	
\ No newline at end of file
diff --git a/thonny/plugins/help/shell.rst b/thonny/plugins/help/shell.rst
index 872e858..0eafd7f 100644
--- a/thonny/plugins/help/shell.rst
+++ b/thonny/plugins/help/shell.rst
@@ -14,9 +14,9 @@ to close some parentheses.
 
 Magic commands
 --------------
-If you select "Run => Run current script" or press F5, then you'll see how Thonny inserts a command
+If you select *Run →  Run current script* or press F5, then you'll see how Thonny inserts a command
 starting with ``%Run`` into Shell. Commands starting with ``%`` are called *magic commands* (just 
-like in `IPython <https://ipython.org/>`_ and they perform certain actions, which can't be
+like in `IPython <https://ipython.org/>`_) and they perform certain actions, which can't be
 (easily) expressed as Python commands. Thonny's magic commands usually have
 corresponding menu commands so you don't need write them by hand.
 
@@ -33,7 +33,7 @@ before that and so on. Use Down-key to move in the opposite direction in history
 
 Colored output
 --------------
-If you have your Shell in Terminal emulation mode (see Tools => Options => Shell), then you can
+If you have your Shell in Terminal emulation mode (see *Tools → Options → Shell*), then you can
 use `ANSI codes <https://en.wikipedia.org/wiki/ANSI_escape_code>`_ to produce colored output. 
 
 Try the following example:
diff --git a/thonny/plugins/highlight_names.py b/thonny/plugins/highlight_names.py
index 0019058..ae34096 100644
--- a/thonny/plugins/highlight_names.py
+++ b/thonny/plugins/highlight_names.py
@@ -28,7 +28,6 @@ class OccurrencesHighlighter:
         if self.text.tag_prevrange("open_string", index) or self.text.tag_prevrange(
             "open_string3", index
         ):
-
             return set()
 
         source = self.text.get("1.0", "end")
diff --git a/thonny/plugins/microbit/__init__.py b/thonny/plugins/microbit/__init__.py
index 1e34b59..e6bee6e 100644
--- a/thonny/plugins/microbit/__init__.py
+++ b/thonny/plugins/microbit/__init__.py
@@ -2,7 +2,7 @@ import os.path
 import sys
 import time
 from time import sleep
-from typing import Optional
+from typing import Dict, List, Optional
 
 from thonny import ui_utils
 from thonny.languages import tr
@@ -12,7 +12,11 @@ from thonny.plugins.micropython import (
     add_micropython_backend,
 )
 from thonny.plugins.micropython.mp_common import PASTE_SUBMIT_MODE
-from thonny.plugins.micropython.uf2dialog import TargetInfo, Uf2FlashingDialog
+from thonny.plugins.micropython.uf2dialog import (
+    TargetInfo,
+    Uf2FlashingDialog,
+    create_volume_description,
+)
 
 LATEST_RELEASE_URL = "https://api.github.com/repos/bbcmicrobit/micropython/releases/latest"
 
@@ -61,10 +65,11 @@ class MicrobitConfigPage(BareMetalMicroPythonConfigPage):
             + ")"
         )
 
-    def _has_flashing_dialog(self):
-        return True
+    def get_flashing_dialog_kinds(self) -> List[str]:
+        return [""]
 
-    def _open_flashing_dialog(self):
+    def _open_flashing_dialog(self, kind: str) -> None:
+        assert kind == ""
         dlg = MicrobitFlashingDialog(self, "MicroPython")
         ui_utils.show_dialog(dlg)
 
@@ -78,16 +83,22 @@ class MicrobitFlashingDialog(Uf2FlashingDialog):
     def get_variants_url(self) -> str:
         return f"https://raw.githubusercontent.com/thonny/thonny/master/data/{self.firmware_name.lower()}-variants-daplink.json"
 
+    def get_families_mapping(self) -> Dict[str, str]:
+        return {
+            "nRF51": "nrf51",
+            "nRF52": "nrf52",
+        }
+
     def get_instructions(self) -> Optional[str]:
         return (
-            "This dialog allows you to install or update MicroPython on your micro:bit.\n"
+            f"This dialog allows you to install or update {self.firmware_name} on your micro:bit.\n"
             "\n"
             "1. Plug in your micro:bit.\n"
             "2. Wait until device information appears.\n"
             "3. Click 'Install' and wait for some seconds until done.\n"
             "4. Close the dialog and start programming!\n"
             "\n"
-            "NB! Installing MicroPython will erase all files you may have on your\n"
+            f"NB! Installing {self.firmware_name} will erase all files you may have on your\n"
             "device. Make sure you have important files backed up!"
         )
 
@@ -118,11 +129,12 @@ class MicrobitFlashingDialog(Uf2FlashingDialog):
                     if board_id in models:
                         model, family = models[board_id]
                         return TargetInfo(
-                            title=self.describe_target_path(path),
+                            title=create_volume_description(path),
                             path=path,
                             family=family,
                             model=model,
                             board_id=board_id,
+                            port=None,
                         )
 
             # With older bootloaders, the file may be different
@@ -132,18 +144,19 @@ class MicrobitFlashingDialog(Uf2FlashingDialog):
                     board_id = "9900"
                     model, family = models[board_id]
                     return TargetInfo(
-                        title=self.describe_target_path(path),
+                        title=create_volume_description(path),
                         path=path,
                         family=family,
                         model=model,
                         board_id=board_id,
+                        port=None,
                     )
 
         # probably not micro:bit
         return None
 
     def get_title(self):
-        return f"Install {self.firmware_name} for BBC micro:bit"
+        return f"Install or update {self.firmware_name} for BBC micro:bit"
 
     def perform_post_installation_steps(self, ports_before):
         # can't check the ports as in the superclass, because the port is always there
diff --git a/thonny/plugins/microbit/api_stubs/builtins.py b/thonny/plugins/microbit/api_stubs/builtins.py
deleted file mode 100644
index 07c95e8..0000000
--- a/thonny/plugins/microbit/api_stubs/builtins.py
+++ /dev/null
@@ -1,659 +0,0 @@
-class ArithmeticError:
-    ""
-
-
-class AssertionError:
-    ""
-
-
-class AttributeError:
-    ""
-
-
-class BaseException:
-    ""
-
-
-class EOFError:
-    ""
-
-
-Ellipsis = None
-
-
-class Exception:
-    ""
-
-
-class GeneratorExit:
-    ""
-
-
-class ImportError:
-    ""
-
-
-class IndentationError:
-    ""
-
-
-class IndexError:
-    ""
-
-
-class KeyError:
-    ""
-
-
-class KeyboardInterrupt:
-    ""
-
-
-class LookupError:
-    ""
-
-
-class MemoryError:
-    ""
-
-
-class NameError:
-    ""
-
-
-class NotImplementedError:
-    ""
-
-
-class OSError:
-    ""
-
-
-class OverflowError:
-    ""
-
-
-class RuntimeError:
-    ""
-
-
-class StopIteration:
-    ""
-
-
-class SyntaxError:
-    ""
-
-
-class SystemExit:
-    ""
-
-
-class TypeError:
-    ""
-
-
-class UnicodeError:
-    ""
-
-
-class ValueError:
-    ""
-
-
-class ZeroDivisionError:
-    ""
-
-
-def abs():
-    pass
-
-
-def all():
-    pass
-
-
-def any():
-    pass
-
-
-def bin():
-    pass
-
-
-class bool:
-    ""
-
-
-class bytearray:
-    ""
-
-    def append():
-        pass
-
-    def extend():
-        pass
-
-
-class bytes:
-    ""
-
-    def count():
-        pass
-
-    def endswith():
-        pass
-
-    def find():
-        pass
-
-    def format():
-        pass
-
-    def index():
-        pass
-
-    def isalpha():
-        pass
-
-    def isdigit():
-        pass
-
-    def islower():
-        pass
-
-    def isspace():
-        pass
-
-    def isupper():
-        pass
-
-    def join():
-        pass
-
-    def lower():
-        pass
-
-    def lstrip():
-        pass
-
-    def replace():
-        pass
-
-    def rfind():
-        pass
-
-    def rindex():
-        pass
-
-    def rsplit():
-        pass
-
-    def rstrip():
-        pass
-
-    def split():
-        pass
-
-    def startswith():
-        pass
-
-    def strip():
-        pass
-
-    def upper():
-        pass
-
-
-def callable():
-    pass
-
-
-def chr():
-    pass
-
-
-class classmethod:
-    ""
-
-
-class dict:
-    ""
-
-    def clear():
-        pass
-
-    def copy():
-        pass
-
-    def fromkeys():
-        pass
-
-    def get():
-        pass
-
-    def items():
-        pass
-
-    def keys():
-        pass
-
-    def pop():
-        pass
-
-    def popitem():
-        pass
-
-    def setdefault():
-        pass
-
-    def update():
-        pass
-
-    def values():
-        pass
-
-
-def dir():
-    pass
-
-
-def divmod():
-    pass
-
-
-class enumerate:
-    ""
-
-
-def eval():
-    pass
-
-
-def exec():
-    pass
-
-
-class filter:
-    ""
-
-
-class float:
-    ""
-
-
-class frozenset:
-    ""
-
-    def add():
-        pass
-
-    def clear():
-        pass
-
-    def copy():
-        pass
-
-    def difference():
-        pass
-
-    def difference_update():
-        pass
-
-    def discard():
-        pass
-
-    def intersection():
-        pass
-
-    def intersection_update():
-        pass
-
-    def isdisjoint():
-        pass
-
-    def issubset():
-        pass
-
-    def issuperset():
-        pass
-
-    def pop():
-        pass
-
-    def remove():
-        pass
-
-    def symmetric_difference():
-        pass
-
-    def symmetric_difference_update():
-        pass
-
-    def union():
-        pass
-
-    def update():
-        pass
-
-
-def getattr():
-    pass
-
-
-def globals():
-    pass
-
-
-def hasattr():
-    pass
-
-
-def hash():
-    pass
-
-
-def help():
-    pass
-
-
-def hex():
-    pass
-
-
-def id():
-    pass
-
-
-def input():
-    pass
-
-
-class int:
-    ""
-
-    def from_bytes():
-        pass
-
-    def to_bytes():
-        pass
-
-
-def isinstance():
-    pass
-
-
-def issubclass():
-    pass
-
-
-def iter():
-    pass
-
-
-def len():
-    pass
-
-
-class list:
-    ""
-
-    def append():
-        pass
-
-    def clear():
-        pass
-
-    def copy():
-        pass
-
-    def count():
-        pass
-
-    def extend():
-        pass
-
-    def index():
-        pass
-
-    def insert():
-        pass
-
-    def pop():
-        pass
-
-    def remove():
-        pass
-
-    def reverse():
-        pass
-
-    def sort():
-        pass
-
-
-def locals():
-    pass
-
-
-class map:
-    ""
-
-
-def max():
-    pass
-
-
-def min():
-    pass
-
-
-def next():
-    pass
-
-
-class object:
-    ""
-
-
-def oct():
-    pass
-
-
-def open():
-    pass
-
-
-def ord():
-    pass
-
-
-def pow():
-    pass
-
-
-def print():
-    pass
-
-
-class range:
-    ""
-
-
-def repr():
-    pass
-
-
-class reversed:
-    ""
-
-
-def round():
-    pass
-
-
-class set:
-    ""
-
-    def add():
-        pass
-
-    def clear():
-        pass
-
-    def copy():
-        pass
-
-    def difference():
-        pass
-
-    def difference_update():
-        pass
-
-    def discard():
-        pass
-
-    def intersection():
-        pass
-
-    def intersection_update():
-        pass
-
-    def isdisjoint():
-        pass
-
-    def issubset():
-        pass
-
-    def issuperset():
-        pass
-
-    def pop():
-        pass
-
-    def remove():
-        pass
-
-    def symmetric_difference():
-        pass
-
-    def symmetric_difference_update():
-        pass
-
-    def union():
-        pass
-
-    def update():
-        pass
-
-
-def setattr():
-    pass
-
-
-class slice:
-    ""
-
-
-def sorted():
-    pass
-
-
-class staticmethod:
-    ""
-
-
-class str:
-    ""
-
-    def count():
-        pass
-
-    def endswith():
-        pass
-
-    def find():
-        pass
-
-    def format():
-        pass
-
-    def index():
-        pass
-
-    def isalpha():
-        pass
-
-    def isdigit():
-        pass
-
-    def islower():
-        pass
-
-    def isspace():
-        pass
-
-    def isupper():
-        pass
-
-    def join():
-        pass
-
-    def lower():
-        pass
-
-    def lstrip():
-        pass
-
-    def replace():
-        pass
-
-    def rfind():
-        pass
-
-    def rindex():
-        pass
-
-    def rsplit():
-        pass
-
-    def rstrip():
-        pass
-
-    def split():
-        pass
-
-    def startswith():
-        pass
-
-    def strip():
-        pass
-
-    def upper():
-        pass
-
-
-def sum():
-    pass
-
-
-class super:
-    ""
-
-
-class tuple:
-    ""
-
-    def count():
-        pass
-
-    def index():
-        pass
-
-
-class type:
-    ""
-
-
-class zip:
-    ""
diff --git a/thonny/plugins/microbit/microbit_back.py b/thonny/plugins/microbit/microbit_back.py
index ce54f4f..e0e38c4 100644
--- a/thonny/plugins/microbit/microbit_back.py
+++ b/thonny/plugins/microbit/microbit_back.py
@@ -1,7 +1,13 @@
 import os.path
+import sys
 from logging import getLogger
 from typing import List, Optional
 
+# make sure thonny folder is in sys.path (relevant in dev)
+thonny_container = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
+if thonny_container not in sys.path:
+    sys.path.insert(0, thonny_container)
+
 from thonny.plugins.micropython.bare_metal_backend import (
     BareMetalMicroPythonBackend,
     launch_bare_metal_backend,
diff --git a/thonny/plugins/micropython/__init__.py b/thonny/plugins/micropython/__init__.py
index 9402660..84b303c 100644
--- a/thonny/plugins/micropython/__init__.py
+++ b/thonny/plugins/micropython/__init__.py
@@ -14,7 +14,6 @@ from thonny.plugins.micropython.mp_front import (
     SshMicroPythonProxy,
     add_micropython_backend,
     list_serial_ports,
-    list_serial_ports_with_descriptions,
 )
 
 
@@ -56,3 +55,5 @@ def load_plugin():
     get_workbench().set_default("SshMicroPython.user", "")
     get_workbench().set_default("SshMicroPython.auth_method", "password")
     get_workbench().set_default("SshMicroPython.make_uploaded_shebang_scripts_executable", True)
+
+    get_workbench().set_default("esptool.show_advanced_options", False)
diff --git a/thonny/plugins/micropython/bare_metal_backend.py b/thonny/plugins/micropython/bare_metal_backend.py
index 0ceecff..8b2539f 100644
--- a/thonny/plugins/micropython/bare_metal_backend.py
+++ b/thonny/plugins/micropython/bare_metal_backend.py
@@ -8,10 +8,16 @@ from logging import getLogger
 from textwrap import dedent, indent
 from typing import BinaryIO, Callable, List, Optional, Union
 
+# make sure thonny folder is in sys.path (relevant in dev)
+thonny_container = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
+if thonny_container not in sys.path:
+    sys.path.insert(0, thonny_container)
+
 import thonny
 from thonny import report_time
 from thonny.backend import UploadDownloadMixin, convert_newlines_if_has_shebang
 from thonny.common import (
+    PROCESS_ACK,
     BackendEvent,
     EOFCommand,
     OscEvent,
@@ -38,7 +44,11 @@ from thonny.plugins.micropython.mp_back import (
     is_continuation_byte,
     starts_with_continuation_byte,
 )
-from thonny.plugins.micropython.mp_common import PASTE_SUBMIT_MODE, RAW_PASTE_SUBMIT_MODE
+from thonny.plugins.micropython.mp_common import (
+    PASTE_SUBMIT_MODE,
+    RAW_PASTE_SUBMIT_MODE,
+    RAW_SUBMIT_MODE,
+)
 from thonny.plugins.micropython.webrepl_connection import WebReplConnection
 
 RAW_PASTE_COMMAND = b"\x05A\x01"
@@ -122,7 +132,7 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
         self._last_inferred_fs_mount: Optional[str] = None
 
         self._submit_mode = args.get("submit_mode", None)
-        if self._submit_mode is None:
+        if self._submit_mode is None or self._connected_over_webrepl():
             self._submit_mode = self._infer_submit_mode()
 
         self._write_block_size = args.get("write_block_size", None)
@@ -468,7 +478,8 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
             W600_FIRST_RAW_PROMPT,
         ]:
             return
-        logger.debug("requesting raw mode at %r", self._last_prompt)
+
+        logger.info("Requesting raw mode at %r", self._last_prompt)
 
         # assuming we are currently on a normal prompt
         self._write(RAW_MODE_CMD)
@@ -487,12 +498,14 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
                 self._last_prompt,
             )
             raise ProtocolError("Could not enter raw prompt")
+        else:
+            logger.info("Entered raw prompt")
 
     def _ensure_normal_mode(self, force=False):
         if self._last_prompt == NORMAL_PROMPT and not force:
             return
 
-        logger.debug("requesting normal mode at %r", self._last_prompt)
+        logger.info("Requesting normal mode at %r", self._last_prompt)
         self._write(NORMAL_MODE_CMD)
         self._log_output_until_active_prompt()
         assert self._last_prompt == NORMAL_PROMPT, (
@@ -504,8 +517,11 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
         logger.debug("_create_fresh_repl")
         self._ensure_raw_mode()
         self._write(SOFT_REBOOT_CMD)
+        assuming_ok = self._connection.soft_read(2, timeout=0.1)
+        if assuming_ok != OK:
+            logger.warning("Got %r after requesting soft reboot")
         self._check_reconnect()
-        self._log_output_until_active_prompt()
+        self._forward_output_until_active_prompt()
         logger.debug("Done _create_fresh_repl")
 
     def _soft_reboot_for_restarting_user_program(self):
@@ -547,10 +563,19 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
                 try:
                     self._submit_code_via_raw_paste_mode(to_be_sent)
                 except RawPasteNotSupportedError:
-                    logger.info("WARNING: Could not use expected raw paste, falling back to raw")
-                    self._submit_code_via_raw_mode(
-                        to_be_sent, self._infer_write_block_size(), self._infer_write_block_delay()
+                    # raw is safest, as some M5 ESP32-s don't play nice with paste mode,
+                    # even with as small block size as 30 (echo is randomly missing characters)
+                    self._submit_mode = RAW_SUBMIT_MODE
+                    self._write_block_size = self._infer_write_block_size()
+                    self._write_block_delay = self._infer_write_block_delay()
+                    logger.warning(
+                        "Could not use raw_paste, falling back to %s"
+                        + " with write_block_size %s and write_block_delay %s",
+                        self._submit_mode,
+                        self._write_block_size,
+                        self._write_block_delay,
                     )
+                    self._submit_code_via_raw_mode(to_be_sent)
             else:
                 self._submit_code_via_raw_mode(to_be_sent)
 
@@ -596,15 +621,8 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
             actual_confirmation,
         )
 
-    def _submit_code_via_raw_mode(
-        self,
-        script_bytes: bytes,
-        block_size: Optional[int] = None,
-        block_delay: Optional[float] = None,
-    ) -> None:
+    def _submit_code_via_raw_mode(self, script_bytes: bytes) -> None:
         self._ensure_raw_mode()
-        block_size = block_size or self._write_block_size
-        block_delay = block_delay or self._write_block_delay
         to_be_written = script_bytes + EOT
 
         while to_be_written:
@@ -629,16 +647,18 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
             raise ProtocolError("Could not read command confirmation")
 
     def _submit_code_via_raw_paste_mode(self, script_bytes: bytes) -> None:
+        # Occasionally, the device initially supports raw paste but later doesn't allow it (?)
+        # https://github.com/thonny/thonny/issues/1545
+
         self._ensure_raw_mode()
         self._connection.set_text_mode(False)
         self._write(RAW_PASTE_COMMAND)
         response = self._connection.soft_read(2, timeout=WAIT_OR_CRASH_TIMEOUT)
         if response != RAW_PASTE_CONFIRMATION:
-            # Occasionally, the device initially supports raw paste but later doesn't allow it
-            # https://github.com/thonny/thonny/issues/1545
-            time.sleep(0.01)
-            response += self._connection.read_all()
-            if response == FIRST_RAW_PROMPT:
+            # perhaps the device doesn't support raw paste ...
+            response += self._connection.soft_read_until(FIRST_RAW_PROMPT, timeout=0.5)
+            if response.endswith(FIRST_RAW_PROMPT):
+                # ... yup, it doesn't support it
                 self._last_prompt = FIRST_RAW_PROMPT
                 raise RawPasteNotSupportedError()
             else:
@@ -904,6 +924,7 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
                     follow_up = b""
 
                 if follow_up:
+                    logger.info("Found inactive prompt followed by %r", follow_up)
                     # Nope, the prompt is not active.
                     # (Actually it may be that a background thread has produced this follow up,
                     # but this would be too hard to consider.)
@@ -923,7 +944,7 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
                             break
                     output_consumer(self._decode(pending), stream_name)
                     self._last_prompt = current_prompt
-                    # logger.debug("Found prompt %r", current_prompt)
+                    logger.debug("Found prompt %r", current_prompt)
                     return current_prompt
 
             if pending.endswith(LF):
@@ -988,6 +1009,13 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
             collect_output, interrupt_times=interrupt_times, poke_after=poke_after
         )
 
+    def _forward_output_until_active_prompt(
+        self, interrupt_times: Optional[List[float]] = None, poke_after: Optional[float] = None
+    ) -> None:
+        self._process_output_until_active_prompt(
+            self._send_output, interrupt_times=interrupt_times, poke_after=poke_after
+        )
+
     def _forward_unexpected_output(self, stream_name="stdout"):
         "Invoked between commands"
         # TODO: This should be as careful as _forward_output_until_active_prompt
@@ -1162,7 +1190,6 @@ class BareMetalMicroPythonBackend(MicroPythonBackend, UploadDownloadMixin):
     def _read_file_via_serial(
         self, source_path: str, target_fp: BinaryIO, callback: Callable[[int, int], None]
     ) -> None:
-
         hex_mode = self._should_hexlify(source_path)
 
         self._execute_without_output(
@@ -1695,6 +1722,7 @@ class RawPasteNotSupportedError(RuntimeError):
 
 def launch_bare_metal_backend(backend_class: Callable[..., BareMetalMicroPythonBackend]) -> None:
     thonny.configure_backend_logging()
+    print(PROCESS_ACK)
 
     import ast
 
diff --git a/thonny/plugins/micropython/base_flashing_dialog.py b/thonny/plugins/micropython/base_flashing_dialog.py
new file mode 100644
index 0000000..39eea31
--- /dev/null
+++ b/thonny/plugins/micropython/base_flashing_dialog.py
@@ -0,0 +1,554 @@
+import os.path
+import re
+import shutil
+import tempfile
+import threading
+import time
+import traceback
+import urllib.request
+from abc import ABC, abstractmethod
+from dataclasses import dataclass
+from logging import getLogger
+from tkinter import ttk
+from typing import Any, Dict, List, Optional, Tuple
+
+from thonny import get_runner
+from thonny.common import UserError
+from thonny.languages import tr
+from thonny.ui_utils import AdvancedLabel, MappingCombobox, set_text_if_different
+from thonny.workdlg import WorkDialog
+
+logger = getLogger(__name__)
+
+FAKE_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36"
+
+FAMILY_CODES_TO_NAMES = {
+    "rp2": "RP2",
+    "samd21": "SAMD21",
+    "samd51": "SAMD51",
+    "esp8266": "ESP8266",
+    "esp32": "ESP32",
+    "esp32s2": "ESP32-S2",
+    "esp32s3": "ESP32-S3",
+    "esp32c3": "ESP32-C3",
+    "nrf51": "nRF51",
+    "nrf52": "nRF52",
+}
+
+
+@dataclass()
+class TargetInfo:
+    title: str
+    path: Optional[str]
+    family: Optional[str]
+    model: Optional[str]
+    board_id: Optional[str]
+    port: Optional[Any]
+
+
+class BaseFlashingDialog(WorkDialog, ABC):
+    def __init__(self, master, firmware_name: str):
+        self._downloaded_variants: List[Dict[str, Any]] = []
+
+        self._last_handled_target = None
+        self._last_handled_family = None
+        self._last_handled_family_target = None
+        self._last_handled_variant = None
+        self.firmware_name = firmware_name
+
+        threading.Thread(target=self._download_variants, daemon=True).start()
+
+        super().__init__(master, autostart=False)
+
+    @abstractmethod
+    def get_variants_url(self) -> str:
+        ...
+
+    @abstractmethod
+    def get_target_label(self) -> str:
+        ...
+
+    def populate_main_frame(self):
+        epadx = self.get_large_padding()
+        ipadx = self.get_small_padding()
+        epady = epadx
+        ipady = ipadx
+
+        target_label = ttk.Label(self.main_frame, text=self.get_target_label())
+        target_label.grid(row=1, column=1, sticky="e", padx=(epadx, 0), pady=(epady, 0))
+        self._target_combo = MappingCombobox(self.main_frame, exportselection=False)
+        self._target_combo.grid(
+            row=1, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(epady, 0)
+        )
+        self._target_combo.bind("<<ComboboxSelected>>", self.register_settings_changed, True)
+
+        self._target_info_label = ttk.Label(self.main_frame, text="model")
+        self._target_info_label.grid(row=2, column=1, sticky="e", padx=(epadx, 0), pady=(ipady, 0))
+        self._target_info_content_label = ttk.Label(self.main_frame)
+        self._target_info_content_label.grid(
+            row=2, column=2, sticky="w", padx=(ipadx, epadx), pady=(ipady, 0)
+        )
+
+        family_label = ttk.Label(self.main_frame, text=f"{self.firmware_name} family")
+        family_label.grid(row=5, column=1, sticky="e", padx=(epadx, 0), pady=(epady, 0))
+        self._family_combo = MappingCombobox(
+            self.main_frame,
+            exportselection=False,
+            state="enabled",
+            mapping=self.get_families_mapping(),
+        )
+        self._family_combo.grid(
+            row=5, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(epady, 0)
+        )
+        self._family_combo.bind("<<ComboboxSelected>>", self.register_settings_changed, True)
+
+        variant_label = ttk.Label(self.main_frame, text=f"variant")
+        variant_label.grid(row=6, column=1, sticky="e", padx=(epadx, 0), pady=(ipady, 0))
+        self._variant_combo = MappingCombobox(
+            self.main_frame, exportselection=False, state="disabled"
+        )
+        self._variant_combo.grid(
+            row=6, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(ipady, 0)
+        )
+        self._variant_combo.bind("<<ComboboxSelected>>", self.register_settings_changed, True)
+
+        version_label = ttk.Label(self.main_frame, text="version")
+        version_label.grid(row=7, column=1, sticky="e", padx=(epadx, 0), pady=(ipady, 0))
+        self._version_combo = MappingCombobox(
+            self.main_frame, exportselection=False, state="disabled"
+        )
+        self._version_combo.grid(
+            row=7, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(ipady, 0)
+        )
+        self._version_combo.bind("<<ComboboxSelected>>", self.register_settings_changed, True)
+
+        variant_info_label = ttk.Label(self.main_frame, text="info")
+        variant_info_label.grid(row=8, column=1, sticky="e", padx=(epadx, 0), pady=(ipady, 0))
+        self._variant_info_content_label = AdvancedLabel(self.main_frame)
+        self._variant_info_content_label.grid(
+            row=8, column=2, sticky="w", padx=(ipadx, epadx), pady=(ipady, 0)
+        )
+
+        self.main_frame.columnconfigure(2, weight=1)
+
+    @abstractmethod
+    def get_families_mapping(self) -> Dict[str, str]:
+        ...
+
+    def update_ui(self):
+        for widget in self.main_frame.winfo_children():
+            if isinstance(widget, (ttk.Combobox, ttk.Checkbutton)):
+                if self._state == "working" or not self._downloaded_variants:
+                    widget.state(["disabled", "readonly"])
+                else:
+                    widget.state(["!disabled", "readonly"])
+
+        if self._state == "idle":
+            targets = self.find_targets()
+            if targets != self._target_combo.mapping:
+                self.show_new_targets(targets)
+                self._last_handled_target = None
+                self._last_handled_family_target = None
+
+            current_target = self._target_combo.get_selected_value()
+            if current_target != self._last_handled_target:
+                if current_target.family:
+                    self._family_combo.select_value(current_target.family)
+                self._update_target_info()
+                self._last_handled_target = current_target
+                self._last_handled_family_target = None
+
+            current_family = self._family_combo.get_selected_value()
+            if self._last_handled_family != current_family:
+                logger.debug(
+                    "Changing family from %r to %r", self._last_handled_family, current_family
+                )
+                self.on_change_family(current_family)
+                if self._downloaded_variants:
+                    # not handled yet if still downloading
+                    self._last_handled_family = current_family
+
+            if self._last_handled_family_target != (current_family, current_target):
+                if current_family and current_target and self._downloaded_variants:
+                    self._try_preselect_a_variant(current_target)
+                    self._last_handled_family_target = (current_family, current_target)
+
+            current_variant = self._variant_combo.get_selected_value()
+            if current_variant != self._last_handled_variant:
+                if not current_variant:
+                    self._version_combo.select_none()
+                    self._version_combo.set_mapping({})
+                else:
+                    self._present_versions_for_variant(current_variant)
+                self._last_handled_variant = current_variant
+
+            # always updating the multipurpose label
+            self._update_variant_info()
+
+        super().update_ui()
+
+    @abstractmethod
+    def find_targets(self) -> Dict[str, TargetInfo]:
+        ...
+
+    def show_new_targets(self, targets: Dict[str, TargetInfo]) -> None:
+        self._target_combo.set_mapping(targets)
+        if len(targets) == 1:
+            self._target_combo.select_value(list(targets.values())[0])
+        else:
+            self._target_combo.select_none()
+
+    @abstractmethod
+    def compute_target_info_text_and_label(self, target: TargetInfo) -> Tuple[str, str]:
+        ...
+
+    def _update_target_info(self):
+        current_target = self._target_combo.get_selected_value()
+        if current_target is not None:
+            text, label = self.compute_target_info_text_and_label(current_target)
+
+        elif not self._target_combo.mapping:
+            text = "[no suitable targets detected]"
+            label = ""
+        else:
+            text = f"[found {len(self._target_combo.mapping)} targets, please select one]"
+            label = ""
+
+        set_text_if_different(self._target_info_content_label, text)
+        set_text_if_different(self._target_info_label, label)
+
+    def _update_variant_info(self):
+        current_variant = self._variant_combo.get_selected_value()
+        if not self._downloaded_variants:
+            url = None
+            text = "[downloading variants info ...]"
+        elif current_variant:
+            url = current_variant["info_url"]
+            text = url
+        elif self._variant_combo.mapping:
+            url = None
+            text = f"[select one from {len(self._variant_combo.mapping)} variants]"
+        else:
+            url = None
+            text = ""
+
+        set_text_if_different(self._variant_info_content_label, text)
+        self._variant_info_content_label.set_url(url)
+
+    def on_change_family(self, family: Optional[str]) -> None:
+        self._variant_combo.select_none()
+
+        if not family or not self._downloaded_variants:
+            self._variant_combo.set_mapping({})
+            return
+
+        whole_mapping = {self._create_variant_description(v): v for v in self._downloaded_variants}
+
+        filtered_mapping = {
+            item[0]: item[1] for item in whole_mapping.items() if item[1]["family"] == family
+        }
+
+        populars = {
+            key: variant
+            for key, variant in filtered_mapping.items()
+            if variant.get("popular", False)
+        }
+        if populars and len(populars) < len(filtered_mapping):
+            enhanced_mapping = {"--- MOST POPULAR " + "-" * 100: {}}
+            for variant in populars.values():
+                popular_variant = variant.copy()
+                # need different title to distinguish it from the same item in ALL VARIANTS
+                popular_title = self._create_variant_description(variant) + " "
+                popular_variant["title"] = popular_title
+                enhanced_mapping[popular_title] = popular_variant
+
+            enhanced_mapping["--- ALL VARIANTS " + "-" * 100] = {}
+            enhanced_mapping.update(filtered_mapping)
+        else:
+            enhanced_mapping = filtered_mapping
+
+        self._variant_combo.set_mapping(enhanced_mapping)
+
+    def _try_preselect_a_variant(self, target: TargetInfo) -> None:
+        assert self._downloaded_variants
+        assert target
+
+        matches = []
+        for v in self._variant_combo.mapping.values():
+            if v and v not in matches and self._variant_can_be_recommended_for_target(v, target):
+                matches.append(v)
+
+        if len(matches) == 1:
+            self._variant_combo.select_value(matches[0])
+
+    def _present_versions_for_variant(self, variant: Dict[str, Any]) -> None:
+        versions_mapping = {d["version"]: d for d in variant["downloads"]}
+        self._version_combo.set_mapping(versions_mapping)
+        if len(versions_mapping) > 0:
+            self._version_combo.select_value(list(versions_mapping.values())[0])
+        else:
+            self._version_combo.select_none()
+
+    def _create_variant_description(self, variant: Dict[str, Any]) -> str:
+        result = variant.get("vendor", "")
+        if result:
+            result += " • "
+
+        result += variant.get("title", variant["model"])
+        return result
+
+    @abstractmethod
+    def _variant_can_be_recommended_for_target(self, variant: Dict[str, Any], target: TargetInfo):
+        ...
+
+    def _download_variants(self):
+        logger.info("Downloading %r", self.get_variants_url())
+        import json
+        from urllib.request import urlopen
+
+        try:
+            req = urllib.request.Request(
+                self.get_variants_url(),
+                data=None,
+                headers={
+                    "User-Agent": FAKE_USER_AGENT,
+                    "Cache-Control": "no-cache",
+                },
+            )
+            with urlopen(req) as fp:
+                json_str = fp.read().decode("UTF-8")
+                # logger.debug("Variants info: %r", json_str)
+            variants = json.loads(json_str)
+            logger.info("Got %r variants", len(variants))
+            self._tweak_variants(variants)
+        except Exception:
+            msg = f"Could not download variants info from {self.get_variants_url()}"
+            logger.exception(msg)
+            self.append_text(msg + "\n")
+            self.set_action_text("Error!")
+            self.grid_progress_widgets()
+            return
+
+        if self._downloaded_variants:
+            # it looks like the user already got ahead of us by browsing a local file
+            logger.warning("Ignoring downloaded variants as variants already present")
+            return
+        else:
+            logger.debug("Assigning self._downloaded_variants")
+            self._downloaded_variants = variants
+
+    def _tweak_variants(self, variants):
+        """
+        A hack for getting the latest pre-release for micropython.org downloads.
+        The build that is loaded from the json may already be deleted.
+        In order to avoid adding another async operation into the process (after selecting
+        a variant and before presenting versions), I'm getting the latest build substring
+        from the download page of the first board and downloading it together with the json.
+        """
+        latest_prerelease_substitute = None
+        latest_prerelease_regex: Optional[str] = None
+        for variant in variants:
+            new_regex = variant.get("latest_prerelease_regex", None)
+            if new_regex:
+                latest_prerelease_regex = new_regex
+                import json
+                import urllib.request
+
+                logger.info("Downloading %r", variant["info_url"])
+                try:
+                    req = urllib.request.Request(
+                        variant["info_url"],
+                        data=None,
+                        headers={
+                            "User-Agent": FAKE_USER_AGENT,
+                            "Cache-Control": "no-cache",
+                        },
+                    )
+                    with urllib.request.urlopen(req) as fp:
+                        html_str = fp.read().decode("UTF-8", errors="replace")
+                        # logger.debug("Variants info: %r", json_str)
+
+                    match = re.search(latest_prerelease_regex, html_str)
+                    if match:
+                        latest_prerelease_substitute = match.group(0)
+                        logger.info(
+                            "Using %r as prerelease substitute", latest_prerelease_substitute
+                        )
+                    else:
+                        latest_prerelease_substitute = None
+                except Exception:
+                    msg = f"Could not download variants info from {self.get_variants_url()}"
+                    logger.exception(msg)
+                    self.append_text(msg + "\n")
+                    self.set_action_text("Error!")
+                    self.grid_progress_widgets()
+
+            if latest_prerelease_substitute:
+                assert latest_prerelease_regex
+                for i, download in enumerate(variant["downloads"]):
+                    patched_url = re.sub(
+                        latest_prerelease_regex, latest_prerelease_substitute, download["url"]
+                    )
+                    if patched_url != download["url"]:
+                        logger.debug("Replacing %r with %r", download["url"], patched_url)
+                        download["url"] = patched_url
+                        download["version"] = latest_prerelease_substitute
+
+    def get_ok_text(self):
+        return tr("Install")
+
+    def is_ready_for_work(self):
+        return self._target_combo.get_selected_value() and self._version_combo.get_selected_value()
+
+    def start_work(self):
+        from thonny.plugins.micropython import BareMetalMicroPythonProxy
+
+        variant_info: Dict[str, Any] = self._variant_combo.get_selected_value()
+        download_info: Dict[str, Any] = self._version_combo.get_selected_value()
+        target_info: TargetInfo = self._target_combo.get_selected_value()
+
+        self.report_progress(0, 100)
+
+        work_options = self.prepare_work_get_options()
+        self.clear_log()
+        threading.Thread(
+            target=self._perform_work_and_update_status,
+            args=[variant_info, download_info, target_info, work_options],
+            daemon=True,
+        ).start()
+        return True
+
+    def prepare_work_get_options(self) -> Dict[str, Any]:
+        return {}
+
+    def _perform_work_and_update_status(
+        self,
+        variant_info: Dict[str, Any],
+        download_info: Dict[str, str],
+        target_info: TargetInfo,
+        work_options: Dict[str, Any],
+    ) -> None:
+        temp_file = None
+        try:
+            if download_info:
+                temp_file = self._download_to_temp(download_info)
+            else:
+                temp_file = None
+
+            core_result = self.perform_core_operation(
+                temp_file, variant_info, download_info, target_info, work_options
+            )
+        except Exception as e:
+            if isinstance(e, UserError):
+                self.append_text("\n" + str(e))
+            else:
+                self.append_text("\n" + "".join(traceback.format_exc()))
+            self.set_action_text("Error...")
+            self.report_done(False)
+            return
+        finally:
+            if temp_file:
+                os.remove(temp_file)
+
+        if core_result:
+            self.set_action_text("Done!")
+        else:
+            self.set_action_text("Error...")
+
+        self.report_done(core_result)
+
+    def _download_to_temp(self, download_info: Dict[str, str]) -> Optional[str]:
+        """Running in a bg thread"""
+        from urllib.request import urlopen
+
+        download_url = download_info["url"]
+        url_protocol = download_url.split(":")[0].lower()
+        size = download_info.get("size", None)
+
+        target_dir = tempfile.mkdtemp()
+        if url_protocol in ["http", "https"]:
+            inferred_filename = download_url.split("/")[-1]
+        else:
+            assert os.path.isfile(download_url)
+            inferred_filename = os.path.basename(download_url)
+        target_filename = download_info.get("filename", inferred_filename)
+        target_path = os.path.join(target_dir, target_filename)
+
+        if url_protocol not in ["http", "https"]:
+            logger.debug("Copying local file %r", download_url)
+            shutil.copyfile(download_url, target_path)
+            return target_path
+
+        logger.debug("Downloading from %s", download_url)
+
+        self.set_action_text("Starting...")
+        self.append_text("Downloading from %s\n" % download_url)
+
+        req = urllib.request.Request(
+            download_url,
+            data=None,
+            headers={
+                "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36"
+            },
+        )
+
+        with urlopen(req, timeout=5) as fsrc:
+            if size is None:
+                size = int(fsrc.getheader("Content-Length", str(500 * 1024)))
+
+            bytes_copied = 0
+            self.append_text("Writing to %s\n" % target_path)
+            self.append_text("Starting...")
+            if fsrc.length:
+                # override (possibly inaccurate) size
+                size = fsrc.length
+
+            block_size = 8 * 1024
+            with open(target_path, "wb") as fdst:
+                while True:
+                    block = fsrc.read(block_size)
+                    if not block:
+                        break
+
+                    if self._state == "cancelling":
+                        raise UserError("Cancelled download per user request")
+
+                    fdst.write(block)
+                    bytes_copied += len(block)
+                    percent_done = bytes_copied / size * 100
+                    percent_str = "%.0f%%" % (percent_done)
+                    self.set_action_text("Downloading... " + percent_str)
+
+                    # leaving left half of the progressbar for downloading
+                    self.report_progress(percent_done, 200)
+                    self.replace_last_line(percent_str)
+
+        return target_path
+
+    @abstractmethod
+    def perform_core_operation(
+        self,
+        source_path: Optional[str],
+        variant_info: Optional[Dict[str, Any]],
+        download_info: Optional[Dict[str, str]],
+        target_info: Optional[TargetInfo],
+        work_options: Dict[str, Any],
+    ) -> bool:
+        ...
+
+    def register_settings_changed(self, event=None):
+        if self._state == "done":
+            self.allow_new_work()
+
+
+def find_uf2_property(lines: List[str], prop_name: str) -> Optional[str]:
+    marker = prop_name + ": "
+    for line in lines:
+        if line.startswith(marker):
+            return line[len(marker) :]
+
+    return None
+
+
+def family_code_to_name(code: str) -> str:
+    return FAMILY_CODES_TO_NAMES.get(code, code)
diff --git a/thonny/plugins/micropython/esptool_dialog.py b/thonny/plugins/micropython/esptool_dialog.py
new file mode 100644
index 0000000..4b2660a
--- /dev/null
+++ b/thonny/plugins/micropython/esptool_dialog.py
@@ -0,0 +1,601 @@
+import io
+import os.path
+import signal
+import subprocess
+import threading
+import time
+import tkinter as tk
+from logging import getLogger
+from tkinter import messagebox, ttk
+from typing import Any, Dict, Optional, Tuple
+
+from thonny import get_runner, get_workbench, ui_utils
+from thonny.common import normpath_with_actual_case
+from thonny.misc_utils import get_menu_char, running_on_windows
+from thonny.plugins.micropython import BareMetalMicroPythonProxy, list_serial_ports
+from thonny.plugins.micropython.base_flashing_dialog import (
+    BaseFlashingDialog,
+    TargetInfo,
+    family_code_to_name,
+)
+from thonny.plugins.micropython.mp_front import get_serial_port_label
+from thonny.running import get_front_interpreter_for_subprocess
+from thonny.ui_utils import EnhancedBooleanVar, MappingCombobox
+
+logger = getLogger(__name__)
+
+LOCAL_VARIANT_TITLE = "<local file>"
+
+
+class ESPFlashingDialog(BaseFlashingDialog):
+    def __init__(self, master, firmware_name: str, esptool_command):
+        self._esptool_command = esptool_command
+        self._advanced_widgets = []
+        self._work_mode = None
+        self._proc = None
+
+        super().__init__(master, firmware_name)
+
+        if not get_workbench().get_option("esptool.show_advanced_options"):
+            self._hide_advanced_options()
+
+    def get_title(self):
+        return f"Install {self.firmware_name} (esptool)"
+
+    def get_target_label(self) -> str:
+        return "Target port"
+
+    def get_families_mapping(self) -> Dict[str, str]:
+        codes = ["esp32", "esp32s2", "esp32s3", "esp32c3"]
+        if self.firmware_name == "MicroPython":
+            codes.insert(0, "esp8266")
+
+        return {family_code_to_name(code): code for code in codes}
+
+    def get_instructions(self) -> Optional[str]:
+        return (
+            f"Click the {get_menu_char()} button to see all features and options. If you're stuck then check the variant's\n"
+            f"'info' page for details or ask in {self.firmware_name} forum.\n\n"
+            "NB! Some boards need to be put into a special mode before they can be managed here\n"
+            "(e.g. by holding the BOOT button while plugging in). Some require hard reset after installing.\n\n"
+            f"You may need to tweak the install options ({get_menu_char()}) if the selected {self.firmware_name} variant doesn't match\n"
+            f"your device precisely. For example, you may need to set flash-mode to 'dio' or flash-size to 'detect'."
+        )
+
+    def populate_main_frame(self):
+        super().populate_main_frame()
+        self._target_info_label.grid_forget()
+        self._target_info_content_label.grid_forget()
+
+        epadx = self.get_large_padding()
+        ipadx = self.get_small_padding()
+        epady = epadx
+        ipady = ipadx
+
+        self._erase_variable = EnhancedBooleanVar(
+            value=True, modification_listener=self.register_settings_changed
+        )
+        self._erase_checkbutton = ttk.Checkbutton(
+            self.main_frame,
+            text="Erase all flash before installing (not just the write areas)",
+            variable=self._erase_variable,
+        )
+        self._erase_checkbutton.grid(row=3, column=2, sticky="w", padx=(ipadx, 0), pady=(ipady, 0))
+
+        x0_target_description = (
+            "for CircuitPython and some variants of MicroPython"
+            if self.firmware_name == "CircuitPython"
+            else "for MicroPython on ESP8266, ESP32-S3 and ESP32-C3"
+        )
+        x1000_target_description = "for MicroPython on ESP32 and ESP32-S2"
+        address_mapping = {
+            f"0x0 ({x0_target_description})": "0x0",
+            f"0x1000 ({x1000_target_description})": "0x1000",
+        }
+        address_label = ttk.Label(self.main_frame, text=f"Target address")
+        address_label.grid(row=9, column=1, sticky="e", padx=(epadx, 0), pady=(epady, 0))
+        self._address_combo = MappingCombobox(
+            self.main_frame, exportselection=False, mapping=address_mapping
+        )
+        self._address_combo.grid(
+            row=9, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(epady, 0)
+        )
+        self._address_combo.bind("<<ComboboxSelected>>", self.register_settings_changed, True)
+
+        self._advanced_widgets += [address_label, self._address_combo]
+
+        speed_mapping = {
+            "460800 (supported by some boards)": "460800",
+            "230400 (supported by many boards)": "230400",
+            "115200 (default)": "115200",
+            "38400 (a fallback to try if installation fails at higher speeds)": "38400",
+            "9600 (the last resort for ruling out installation speed problems)": "9600",
+        }
+        speed_label = ttk.Label(self.main_frame, text=f"Install speed")
+        speed_label.grid(row=10, column=1, sticky="e", padx=(epadx, 0), pady=(ipady, 0))
+        self._speed_combo = MappingCombobox(
+            self.main_frame, exportselection=False, mapping=speed_mapping
+        )
+        self._speed_combo.grid(
+            row=10, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(ipady, 0)
+        )
+        self._speed_combo.select_value("115200")
+        self._advanced_widgets += [speed_label, self._speed_combo]
+        self._speed_combo.bind("<<ComboboxSelected>>", self.register_settings_changed, True)
+
+        flash_mode_mapping = {
+            f"keep (reads the setting from the selected {self.firmware_name} image)": "keep",
+            "dio (next to try if 'keep' doesn't give working result)": "dio",
+            "qio (another alternative to try if 'keep' fails)": "qio",
+            "dout (a less common option)": "dout",
+            "qout (a less common option)": "qout",
+        }
+        flash_mode_label = ttk.Label(self.main_frame, text=f"Flash mode")
+        flash_mode_label.grid(row=11, column=1, sticky="e", padx=(epadx, 0), pady=(ipady, 0))
+        self._flash_mode_combo = MappingCombobox(
+            self.main_frame, exportselection=False, mapping=flash_mode_mapping
+        )
+        self._flash_mode_combo.grid(
+            row=11, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(ipady, 0)
+        )
+        self._flash_mode_combo.select_value("keep")
+        self._advanced_widgets += [flash_mode_label, self._flash_mode_combo]
+        self._flash_mode_combo.bind("<<ComboboxSelected>>", self.register_settings_changed, True)
+
+        flash_size_mapping = {
+            f"keep (reads the setting from the selected {self.firmware_name} image)": "keep",
+            "detect (uses detection based on flash ID)": "detect",
+            "256KB": "256KB",
+            "512KB": "512KB",
+            "1MB": "1MB",
+            "2MB": "2MB",
+            "4MB": "4MB",
+            "8MB": "8MB",
+            "16MB": "16MB",
+            "32MB": "32MB",
+            "64MB": "64MB",
+            "2MB-c1": "2MB-c1",
+            "4MB-c1": "4MB-c1",
+        }
+        flash_size_label = ttk.Label(self.main_frame, text=f"Flash size")
+        flash_size_label.grid(row=12, column=1, sticky="e", padx=(epadx, 0), pady=(ipady, 0))
+        self._flash_size_combo = MappingCombobox(
+            self.main_frame, exportselection=False, mapping=flash_size_mapping
+        )
+        self._flash_size_combo.grid(
+            row=12, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(ipady, 0)
+        )
+        self._flash_size_combo.select_value("keep")
+        self._advanced_widgets += [flash_size_label, self._flash_size_combo]
+        self._flash_size_combo.bind("<<ComboboxSelected>>", self.register_settings_changed, True)
+
+        self._no_stub_variable = EnhancedBooleanVar(
+            value=False, modification_listener=self.register_settings_changed
+        )
+        self._no_stub_checkbutton = ttk.Checkbutton(
+            self.main_frame,
+            text="Disable stub loader (--no-stub, some boards require this)",
+            variable=self._no_stub_variable,
+        )
+        self._no_stub_checkbutton.grid(
+            row=14, column=2, sticky="w", padx=(ipadx, 0), pady=(ipady, 0)
+        )
+        self._advanced_widgets += [self._no_stub_checkbutton]
+
+    def get_initial_log_line_count(self):
+        return 10
+
+    def find_targets(self) -> Dict[str, TargetInfo]:
+        def port_order(p):
+            name = p.device
+            if name is None:
+                return ""
+            elif name.startswith("COM") and len(name) == 4:
+                # Make one-digit COM ports go before COM10
+                return name.replace("COM", "COM0")
+            else:
+                return name
+
+        sorted_ports = sorted(list_serial_ports(max_cache_age=0, skip_logging=True), key=port_order)
+
+        result = {}
+        for p in sorted_ports:
+            desc = get_serial_port_label(p)
+            result[desc] = TargetInfo(
+                title=desc, path=None, board_id=None, family=None, model=None, port=p
+            )
+
+        return result
+
+    def on_change_family(self, family: Optional[str]) -> None:
+        super().on_change_family(family)
+        if family:
+            self._address_combo.select_value(self._compute_start_address(family))
+
+    def compute_target_info_text_and_label(self, target: TargetInfo) -> Tuple[str, str]:
+        return target.path, "info"
+
+    def _variant_can_be_recommended_for_target(self, variant: Dict[str, Any], target: TargetInfo):
+        # TODO: consider certain USB VID/PID-s
+        return False
+
+    def get_variants_url(self) -> str:
+        return f"https://raw.githubusercontent.com/thonny/thonny/master/data/{self.firmware_name.lower()}-variants-esptool.json"
+
+    def get_action_text_max_length(self):
+        return 35
+
+    def _work_needs_disconnect(self):
+        return self._work_mode not in ["image_info", "esptool_version"]
+
+    def prepare_work_get_options(self) -> Dict[str, Any]:
+        target = self._target_combo.get_selected_value()
+        proxy = get_runner().get_backend_proxy()
+        port_was_used_in_thonny = (
+            isinstance(proxy, BareMetalMicroPythonProxy) and proxy._port == target.port.device
+        )
+        if port_was_used_in_thonny and self._work_needs_disconnect():
+            logger.info("Disconnecting")
+            proxy.disconnect()
+
+        if self._work_mode in ["device_info", "image_info", "esptool_version"]:
+            self.show_log_frame()
+
+        return {
+            "erase_flash": self._erase_variable.get(),
+            "family": self._family_combo.get_selected_value(),
+            "address": self._address_combo.get_selected_value(),
+            "speed": self._speed_combo.get_selected_value(),
+            "flash_mode": self._flash_mode_combo.get_selected_value(),
+            "flash_size": self._flash_size_combo.get_selected_value(),
+            "no_stub": self._no_stub_variable.get(),
+            "port_was_used_in_thonny": port_was_used_in_thonny,
+        }
+
+    def _download_to_temp(self, download_info: Dict[str, str]) -> Optional[str]:
+        if self._work_mode == "device_info":
+            return None
+        else:
+            return super()._download_to_temp(download_info)
+
+    def allow_single_success(self) -> bool:
+        return self._work_mode == "install"
+
+    def perform_core_operation(
+        self,
+        source_path: str,
+        variant_info: Dict[str, Any],
+        download_info: Dict[str, str],
+        target_info: TargetInfo,
+        work_options: Dict[str, Any],
+    ) -> bool:
+        """Running in a bg thread"""
+
+        self.report_progress(None, None)
+
+        if self._work_mode == "install":
+            assert source_path
+            assert target_info
+
+            command = self._esptool_command + [
+                "--port",
+                target_info.port.device,
+                "--chip",
+                work_options["family"],
+                "--baud",
+                work_options["speed"],
+            ]
+            if work_options["no_stub"]:
+                command.append("--no-stub")
+
+            command += [
+                "write_flash",
+                "--flash_mode",
+                work_options["flash_mode"],
+                "--flash_size",
+                work_options["flash_size"],
+            ]
+
+            if work_options["erase_flash"]:
+                command.append("--erase-all")
+
+            command += [
+                work_options["address"],
+                source_path,
+            ]
+
+            progress_text = "Installing"
+
+        elif self._work_mode == "device_info":
+            assert target_info
+            command = self._esptool_command + [
+                "--port",
+                target_info.port.device,
+            ]
+            if work_options["no_stub"]:
+                command.append("--no-stub")
+            command.append("flash_id")
+
+            progress_text = "Querying device info"
+
+        elif self._work_mode == "esptool_version":
+            command = self._esptool_command + [
+                "version",
+            ]
+
+            progress_text = "Querying esptool version"
+
+        elif self._work_mode == "image_info":
+            assert source_path
+            command = self._esptool_command + ["image_info", "--version", "2", source_path]
+            progress_text = "Reading image info"
+
+        else:
+            raise RuntimeError(f"Unknown work mode {self._work_mode!r}")
+
+        if self._work_needs_disconnect() and work_options["port_was_used_in_thonny"]:
+            self.append_text("Disconnecting from REPL...")
+            self.set_action_text("Disconnecting from REPL...")
+            time.sleep(1.5)
+
+            if not self._check_connection(target_info.port.device):
+                self.set_action_text("Problem")
+                self.append_text("Could not connect to port\n")
+                self.report_done(False)
+                return False
+
+        self.set_action_text(progress_text)
+        self.append_text(subprocess.list2cmdline(command) + "\n")
+        self._proc = self._create_subprocess(command)
+        try:
+            while True:
+                line = self._proc.stdout.readline()
+                if not line:
+                    break
+                self.append_text(line)
+                self.set_action_text_smart(line)
+            returncode = self._proc.wait()
+        finally:
+            self._proc = None
+
+        if returncode:
+            self.set_action_text("Error")
+            self.append_text("\nCommand returned with error code %s" % returncode)
+        else:
+            self.set_action_text("Done!")
+            self.append_text("Done!")
+
+        return returncode == 0
+
+    def _compute_start_address(self, family: str) -> str:
+        if self.firmware_name == "MicroPython" and family in ["esp32", "esp32-s2"]:
+            return "0x1000"
+        else:
+            return "0x0"
+
+    def _browse_image(self):
+        initialdir = os.path.normpath(os.path.expanduser("~/Downloads"))
+        if not os.path.isdir(initialdir):
+            initialdir = None
+
+        path = ui_utils.askopenfilename(
+            filetypes=[("bin-files", ".bin"), ("all files", ".*")],
+            parent=self.winfo_toplevel(),
+            initialdir=initialdir,
+        )
+        if not path:
+            return
+
+        if running_on_windows():
+            path = normpath_with_actual_case(path)
+
+        family = self._infer_firmware_family(path)
+        if not family:
+            famkey = ui_utils.ask_one_from_choices(
+                self,
+                title="Problem",
+                question="Could not determine image type.\nPlease select the correct family manually!",
+                choices=self.get_families_mapping().keys(),
+            )
+
+            if not famkey:
+                return
+
+            family = self.get_families_mapping()[famkey]
+
+        if family not in self.get_families_mapping().values():
+            messagebox.showerror("Error", f"Unkown image type '{family!r}'", parent=self)
+            return
+
+        if not self._downloaded_variants:
+            self._downloaded_variants = []
+
+        for variant in self._downloaded_variants:
+            if variant.get("title", "") == LOCAL_VARIANT_TITLE and variant["family"] == family:
+                break
+        else:
+            variant = {
+                "title": LOCAL_VARIANT_TITLE,
+                "model": "unknown",
+                "family": family,
+                "info_url": os.path.dirname(path),
+                "downloads": [],
+            }
+            self._downloaded_variants.insert(0, variant)
+
+        for download in variant["downloads"]:
+            if download["url"] == path:
+                break
+        else:
+            download = {"version": os.path.basename(path), "url": path}
+            variant["downloads"].insert(0, download)
+
+        self._family_combo.select_value(family)
+        self.on_change_family(family)
+        self._variant_combo.select_value(variant)
+        self._present_versions_for_variant(variant)
+        self._update_variant_info()
+        self._version_combo.select_value(download)
+
+        # avoid automatic updates
+        self._last_handled_family = family
+        self._last_handled_family_target = (family, self._target_combo.get_selected_value())
+        self._last_handled_variant = variant
+
+    def _infer_firmware_family(self, path: str) -> Optional[str]:
+        from contextlib import redirect_stdout
+
+        import esptool
+
+        f = io.StringIO()
+        with redirect_stdout(f):
+            try:
+                esptool.main(["image_info", "--version", "2", path])
+            except Exception:
+                logger.exception("Could not infer image family")
+                return None
+
+        out = f.getvalue()
+
+        for line in out.splitlines():
+            if line.startswith("Detected image type:"):
+                family = line.split()[-1].lower().replace("-", "").replace("'", "").replace('"', "")
+                logger.info("Detected family %r", family)
+                return family
+
+        logger.warning("Could not detect image family. image_info output:\n%s", out)
+        return None
+
+    def _check_connection(self, port):
+        # wait a bit in case existing connection was just closed
+        time.sleep(1.5)
+
+        # Maybe another program is connected
+        # or the user doesn't have sufficient permissions?
+        try:
+            import serial
+
+            conn = serial.Serial(port)
+            conn.close()
+            return True
+        except Exception as e:
+            messagebox.showerror("Can't connect", str(e), master=self)
+            return False
+
+    def on_click_ok_button(self):
+        self._work_mode = "install"
+        super().on_click_ok_button()
+
+    def _create_subprocess(self, cmd) -> subprocess.Popen:
+        return subprocess.Popen(
+            cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True
+        )
+
+    def cancel_work(self):
+        super().cancel_work()
+        if not self._proc:
+            return
+
+        # try gently first
+        try:
+            try:
+                if running_on_windows():
+                    os.kill(self._proc.pid, signal.CTRL_BREAK_EVENT)  # pylint: disable=no-member
+                else:
+                    os.kill(self._proc.pid, signal.SIGINT)
+
+                self._proc.wait(2)
+            except subprocess.TimeoutExpired:
+                if self._proc.poll() is None:
+                    # now let's be more concrete
+                    self._proc.kill()
+        except OSError as e:
+            messagebox.showerror("Error", "Could not kill subprocess: " + str(e), master=self)
+            logger.error("Could not kill subprocess", exc_info=e)
+
+    def has_action_menu(self) -> bool:
+        return True
+
+    def populate_action_menu(self, action_menu: tk.Menu) -> None:
+        action_menu.add_command(
+            label="Select local MicroPython image ...", command=self._browse_image
+        )
+        action_menu.add_separator()
+
+        action_menu.add_command(
+            label="Query device info",
+            command=self._query_device_info,
+            state="normal" if self._can_query_device_info() else "disabled",
+        )
+        action_menu.add_command(
+            label="Show image info",
+            command=self._show_image_info,
+            state="normal" if self._can_query_image_info() else "disabled",
+        )
+        action_menu.add_command(
+            label="Show esptool version",
+            command=self._show_esptool_version,
+            state="normal" if self._can_show_esptool_version() else "disabled",
+        )
+
+        action_menu.add_separator()
+        if self._advanced_widgets[0].winfo_ismapped():
+            action_menu.add_command(
+                label="Hide install options",
+                command=self._hide_advanced_options,
+            )
+        else:
+            action_menu.add_command(
+                label="Show install options",
+                command=self._show_advanced_options,
+            )
+
+    def _query_device_info(self) -> None:
+        self._work_mode = "device_info"
+        self.start_work_and_update_ui()
+
+    def _show_image_info(self) -> None:
+        self._work_mode = "image_info"
+        self.start_work_and_update_ui()
+
+    def _show_esptool_version(self) -> None:
+        self._work_mode = "esptool_version"
+        self.start_work_and_update_ui()
+
+    def _can_query_device_info(self) -> bool:
+        return self._state == "idle" and self._target_combo.get_selected_value() is not None
+
+    def _can_query_image_info(self) -> bool:
+        return self._state == "idle" and self._version_combo.get_selected_value() is not None
+
+    def _can_show_esptool_version(self) -> bool:
+        return self._state == "idle"
+
+    def _hide_advanced_options(self) -> None:
+        for widget in self._advanced_widgets:
+            widget.grid_remove()
+
+        get_workbench().set_option("esptool.show_advanced_options", False)
+
+    def _show_advanced_options(self) -> None:
+        for widget in self._advanced_widgets:
+            if not widget.winfo_ismapped():
+                widget.grid()
+
+        get_workbench().set_option("esptool.show_advanced_options", True)
+
+
+def try_launch_esptool_dialog(master, firmware_name: str):
+    try:
+        import esptool
+    except ImportError:
+        messagebox.showerror(
+            "Can't find esptool",
+            "esptool not found.\n" + "Install it via 'Tools => Manage plug-ins'",
+            master=master,
+        )
+        return
+
+    cmd = [get_front_interpreter_for_subprocess(), "-u", "-m", "esptool"]
+    dlg = ESPFlashingDialog(master.winfo_toplevel(), firmware_name, cmd)
+    ui_utils.show_dialog(dlg)
diff --git a/thonny/plugins/micropython/mp_back.py b/thonny/plugins/micropython/mp_back.py
index 7669f92..e673849 100644
--- a/thonny/plugins/micropython/mp_back.py
+++ b/thonny/plugins/micropython/mp_back.py
@@ -59,6 +59,7 @@ from thonny.common import (
     OBJECT_LINK_START,
     BackendEvent,
     CommandToBackend,
+    CompletionInfo,
     DistInfo,
     EOFCommand,
     ImmediateCommand,
@@ -131,8 +132,6 @@ class MicroPythonBackend(MainBackend, ABC):
         self._builtin_modules = []
         self._number_of_interrupts_sent = 0
 
-        self._builtins_info = self._fetch_builtins_info()
-
         MainBackend.__init__(self)
         try:
             report_time("before prepare")
@@ -171,6 +170,8 @@ class MicroPythonBackend(MainBackend, ABC):
         logger.debug("Helper code:\n%s", script)
         self._check_perform_just_in_case_gc()
         self._execute_without_output(script)
+
+        # See https://github.com/thonny/thonny/issues/1877
         # self._execute_without_output(
         #     dedent(
         #         """
@@ -180,6 +181,7 @@ class MicroPythonBackend(MainBackend, ABC):
         #     """
         #     ).strip()
         # )
+
         report_time("prepared helpers")
 
         self._update_cwd()
@@ -345,6 +347,8 @@ class MicroPythonBackend(MainBackend, ABC):
 
         if "local_cwd" in cmd:
             self._local_cwd = cmd["local_cwd"]
+            if os.path.isdir(self._local_cwd):
+                os.chdir(self._local_cwd)
 
         super()._handle_normal_command(cmd)
 
@@ -394,15 +398,6 @@ class MicroPythonBackend(MainBackend, ABC):
         else:
             return self._evaluate("__thonny_helper.sys.path")
 
-    def _fetch_builtins_info(self):
-        for stubs_dir in self._get_sys_path_for_analysis():
-            for name in ["builtins.py", "builtins.pyi"]:
-                path = os.path.join(stubs_dir, name)
-                if os.path.exists(path):
-                    return parse_api_information(path)
-
-        return {}
-
     def _fetch_epoch_year(self):
         if self._using_microbit_micropython():
             return None
@@ -719,6 +714,73 @@ class MicroPythonBackend(MainBackend, ABC):
 
         return {"id": cmd.object_id, "info": info}
 
+    def _cmd_shell_autocomplete(self, cmd):
+        source = cmd.source
+        response = dict(source=cmd.source, row=cmd.row, column=cmd.column, completions=[])
+
+        # First the dynamic completions
+        match = re.search(
+            r"(\w+\.)*(\w+)?$", source
+        )  # https://github.com/takluyver/ubit_kernel/blob/master/ubit_kernel/kernel.py
+        if match:
+            prefix = match.group()
+            if "." in prefix:
+                obj, prefix = prefix.rsplit(".", 1)
+                names = self._evaluate(
+                    "__thonny_helper.builtins.dir({obj}) if '{obj}' in __thonny_helper.builtins.locals() or '{obj}' in __thonny_helper.builtins.globals() else []".format(
+                        obj=obj
+                    )
+                )
+            else:
+                names = self._evaluate("__thonny_helper.builtins.dir()")
+        else:
+            names = []
+            prefix = ""
+
+        # prevent TypeError (iterating over None)
+        names = names if names else []
+
+        for name in names:
+            if name.startswith(prefix) and not name.startswith("__"):
+                response["completions"].append(self._create_shell_completion(name, prefix))
+
+        # add keywords, import modules etc. from jedi
+        try:
+            from thonny import jedi_utils
+
+            # at the moment I'm assuming source is the code before cursor, not whole input
+            lines = source.split("\n")
+            jedi_completions = jedi_utils.get_script_completions(
+                source,
+                len(lines),
+                len(lines[-1]),
+                "<shell>",
+                sys_path=self._get_sys_path_for_analysis(),
+            )
+            response["completions"] += [
+                comp
+                for comp in jedi_completions
+                if (comp.type in ["module", "keyword"] or comp.module_name == "builtins")
+                and self._should_present_completion(comp)
+            ]
+        except Exception as e:
+            logger.exception("Problem with jedi shell autocomplete")
+
+        return response
+
+    def _create_shell_completion(self, name: str, prefix: str) -> CompletionInfo:
+        return CompletionInfo(
+            name=name,
+            name_with_symbols=name,
+            full_name=name,
+            type="name",
+            prefix_length=len(prefix),
+            signatures=None,  # must be queried separately
+            docstring=None,  # must be queried separately
+            module_path=None,
+            module_name=None,
+        )
+
     def _find_basic_object_info(self, object_id, context_id):
         """If object is found then returns basic info and leaves object reference
         to __thonny_helper.object_info.
@@ -879,10 +941,10 @@ class MicroPythonBackend(MainBackend, ABC):
             user = False
 
         if "--upgrade" in args:
-            update = True
+            upgrade = True
             args.remove("--upgrade")
         else:
-            update = False
+            upgrade = False
 
         if "-r" in args:
             pos = args.index("-r")
@@ -901,7 +963,7 @@ class MicroPythonBackend(MainBackend, ABC):
                 command="install",
                 specs=specs,
                 user=user,
-                update=update,
+                upgrade=upgrade,
                 requirement_files=requirement_files,
             )
         except Exception as e:
@@ -1028,28 +1090,28 @@ class MicroPythonBackend(MainBackend, ABC):
         assert not cmd.path.startswith("//")
         self._mkdir(cmd.path)
 
-    def _filter_completions(self, completions):
-        # filter out completions not applicable to MicroPython
-        result = []
-        for completion in completions:
-            if completion.name.startswith("__"):
-                continue
+    def _should_present_completion(self, completion: CompletionInfo) -> bool:
+        if completion.name.startswith("__"):
+            return False
 
-            if completion.parent() and completion.full_name:
-                parent_name = completion.parent().name
-                name = completion.name
-                root = completion.full_name.split(".")[0]
+        if completion.module_path is None and completion.type == "module":
+            # That's how jedi 0.18 (and maybe later) lists CPython stdlib modules
+            return False
 
-                # jedi proposes names from CPython builtins
-                if root in self._builtins_info and name not in self._builtins_info[root]:
-                    continue
+        if completion.module_name == "builtins":
+            # Jedi's builtins.pyi is pretty good
+            return True
 
-                if parent_name == "builtins" and name not in self._builtins_info:
-                    continue
+        if completion.module_path:
+            # if it's in our stubs folder, then it's good
+            for path in self._get_sys_path_for_analysis():
+                if os.path.normcase(completion.module_path).startswith(os.path.normcase(path)):
+                    return True
 
-            result.append({"name": completion.name})
+            # somewhere else, not good
+            return False
 
-        return result
+        return True
 
     def _get_sys_path_for_analysis(self) -> Optional[List[str]]:
         return [os.path.join(os.path.dirname(__file__), "base_api_stubs")]
@@ -1351,34 +1413,6 @@ class ManagementError(ProtocolError):
         self.err = err
 
 
-def parse_api_information(file_path):
-    import tokenize
-
-    with tokenize.open(file_path) as fp:
-        source = fp.read()
-
-    tree = ast.parse(source)
-
-    defs = {}
-
-    # TODO: read also docstrings ?
-
-    for toplevel_item in tree.body:
-        if isinstance(toplevel_item, ast.ClassDef):
-            class_name = toplevel_item.name
-            member_names = []
-            for item in toplevel_item.body:
-                if isinstance(item, ast.FunctionDef):
-                    member_names.append(item.name)
-                elif isinstance(item, ast.Assign):
-                    # TODO: check Python 3.4
-                    "TODO: item.targets[0].id"
-
-            defs[class_name] = member_names
-
-    return defs
-
-
 def unix_dirname_basename(path):
     if path == "/":
         return ("/", "")
diff --git a/thonny/plugins/micropython/mp_front.py b/thonny/plugins/micropython/mp_front.py
index 7a103a8..50184d4 100644
--- a/thonny/plugins/micropython/mp_front.py
+++ b/thonny/plugins/micropython/mp_front.py
@@ -35,7 +35,6 @@ class MicroPythonProxy(SubprocessProxy):
         return None
 
     def get_pip_target_dir(self) -> Optional[str]:
-
         lib_dirs = self.get_lib_dirs()
         if not lib_dirs:
             return None
@@ -187,7 +186,8 @@ class BareMetalMicroPythonProxy(MicroPythonProxy):
 
     def send_command(self, cmd: CommandToBackend) -> Optional[str]:
         if isinstance(cmd, EOFCommand):
-            get_shell().restart()  # Runner doesn't notice restart
+            # Runner doesn't notice restart
+            get_shell().restart(was_running=get_runner().is_running())
 
         return super().send_command(cmd)
 
@@ -253,19 +253,6 @@ class BareMetalMicroPythonProxy(MicroPythonProxy):
         """
         return set()
 
-    @classmethod
-    def get_uart_adapter_vids_pids(cls):
-        return {
-            (0x1A86, 0x7523),  # HL-340
-            (0x10C4, 0xEA60),  # CP210x"),
-            (0x0403, 0x6001),  # FT232/FT245 (XinaBox CW01, CW02)
-            (0x0403, 0x6010),  # FT2232C/D/L/HL/Q (ESP-WROVER-KIT)
-            (0x0403, 0x6011),  # FT4232
-            (0x0403, 0x6014),  # FT232H
-            (0x0403, 0x6015),  # FT X-Series (Sparkfun ESP32)
-            (0x0403, 0x601C),  # FT4222H
-        }
-
     @classmethod
     def should_consider_unknown_devices(cls):
         return True
@@ -355,7 +342,16 @@ class BareMetalMicroPythonProxy(MicroPythonProxy):
             url = conf[f"{cls.backend_name}.webrepl_url"]
             return f"{cls.backend_description}  •  {url}"
         else:
-            return f"{cls.backend_description}  •  {port}"
+            try:
+                p = get_port_info(port)
+            except Exception:
+                p = None
+                logger.exception("Could not get port info for %r", port)
+
+            if p:
+                return f"{cls.backend_description}  •  {get_serial_port_label(p)}"
+            else:
+                return f"{cls.backend_description}  •  {port}"
 
     @classmethod
     def get_switcher_entries(cls):
@@ -445,12 +441,7 @@ class BareMetalMicroPythonConfigPage(BackendDetailsConfigPage):
         )
         port_label.grid(row=3, column=0, sticky="nw", pady=(10, 0))
 
-        self._ports_by_desc = {
-            p.description
-            if p.device in p.description
-            else p.description + " (" + p.device + ")": p.device
-            for p in list_serial_ports()
-        }
+        self._ports_by_desc = {get_serial_port_label(p): p.device for p in list_serial_ports()}
         self._ports_by_desc["< " + tr("Try to detect port automatically") + " >"] = "auto"
 
         self._WEBREPL_OPTION_DESC = "< WebREPL >"
@@ -517,31 +508,38 @@ class BareMetalMicroPythonConfigPage(BackendDetailsConfigPage):
         self.rowconfigure(100, weight=1)
         last_row.columnconfigure(1, weight=1)
 
-        advanced_link = ui_utils.create_action_label(
-            last_row, tr("Advanced options"), lambda event: self._show_advanced_options()
-        )
-        # advanced_link.grid(row=0, column=1, sticky="e")
+        kinds = self.get_flashing_dialog_kinds()
+        for i, kind in enumerate(kinds):
+
+            def _click_flashing_link(event, kind=kind):
+                self._handle_python_installer_link(kind=kind)
+
+            if i == 0:
+                link_text = self._get_flasher_link_title()
+            else:
+                link_text = ""
+
+            if kind != "":
+                if link_text:
+                    link_text += " "
+                link_text += f"({kind})"
 
-        if self._has_flashing_dialog():
             python_link = ui_utils.create_action_label(
                 last_row,
-                self._get_flasher_link_title(),
-                self._on_click_python_installer_link,
+                link_text,
+                _click_flashing_link,
             )
-            python_link.grid(row=1, column=1, sticky="e")
+            python_link.grid(row=i, column=1, sticky="e")
 
         self._on_change_port()
 
     def _get_flasher_link_title(self) -> str:
         return tr("Install or update %s") % "MicroPython"
 
-    def _on_click_python_installer_link(self, event=None):
-        self._open_flashing_dialog()
+    def _handle_python_installer_link(self, kind: str):
+        self._open_flashing_dialog(kind)
         self._has_opened_python_flasher = True
 
-    def _show_advanced_options(self):
-        pass
-
     def _get_intro_text(self):
         result = (
             tr("Connect your device to the computer and select corresponding port below")
@@ -569,7 +567,6 @@ class BareMetalMicroPythonConfigPage(BackendDetailsConfigPage):
         return result
 
     def _get_webrepl_frame(self):
-
         if self._webrepl_frame is not None:
             return self._webrepl_frame
 
@@ -630,6 +627,12 @@ class BareMetalMicroPythonConfigPage(BackendDetailsConfigPage):
             port_name = self.get_selected_port_name()
             get_workbench().set_option(self.backend_name + ".port", port_name)
             if self.webrepl_selected():
+                if not self._webrepl_url_var.get().lower().startswith("ws://"):
+                    messagebox.showerror(
+                        "Bad URL", "WebREPL URL should start with ws://", parent=self
+                    )
+                    return False
+
                 get_workbench().set_option(
                     self.backend_name + ".webrepl_url", self._webrepl_url_var.get()
                 )
@@ -650,10 +653,10 @@ class BareMetalMicroPythonConfigPage(BackendDetailsConfigPage):
     def _get_intro_url(self) -> Optional[str]:
         return None
 
-    def _has_flashing_dialog(self):
-        return False
+    def get_flashing_dialog_kinds(self) -> List[str]:
+        return []
 
-    def _open_flashing_dialog(self):
+    def _open_flashing_dialog(self, kind: str) -> None:
         raise NotImplementedError()
 
     @property
@@ -716,7 +719,8 @@ class LocalMicroPythonProxy(MicroPythonProxy):
 
     def send_command(self, cmd: CommandToBackend) -> Optional[str]:
         if isinstance(cmd, EOFCommand):
-            get_shell().restart()  # Runner doesn't notice restart
+            # Runner doesn't notice restart
+            get_shell().restart(was_running=get_runner().is_running())
 
         return super().send_command(cmd)
 
@@ -860,7 +864,8 @@ class SshMicroPythonProxy(MicroPythonProxy):
 
     def send_command(self, cmd: CommandToBackend) -> Optional[str]:
         if isinstance(cmd, EOFCommand):
-            get_shell().restart()  # Runner doesn't notice restart
+            # Runner doesn't notice restart
+            get_shell().restart(was_running=get_runner().is_running())
 
         return super().send_command(cmd)
 
@@ -958,7 +963,43 @@ class SshMicroPythonConfigPage(BaseSshProxyConfigPage):
     pass
 
 
-def list_serial_ports():
+_PORTS_CACHE = []
+_PORTS_CACHE_TIME = 0
+
+
+def get_serial_port_label(p) -> str:
+    # On Windows, port is given also in description
+    if p.product:
+        desc = p.product
+    elif p.interface:
+        desc = p.interface
+    else:
+        desc = p.description.replace(f" ({p.device})", "")
+
+    if desc == "USB Serial Device":
+        # Try finding something less generic
+        if p.product:
+            desc = p.product
+        elif p.interface:
+            desc = p.interface
+
+    return f"{desc} @ {p.device}"
+
+
+def list_serial_ports(max_cache_age: float = 0.5, skip_logging: bool = False):
+    global _PORTS_CACHE, _PORTS_CACHE_TIME
+
+    cur_time = time.time()
+    if cur_time - _PORTS_CACHE_TIME > max_cache_age:
+        _PORTS_CACHE = _list_serial_ports_uncached(skip_logging=skip_logging)
+        _PORTS_CACHE_TIME = cur_time
+
+    return _PORTS_CACHE
+
+
+def _list_serial_ports_uncached(skip_logging: bool = False):
+    if not skip_logging:
+        logger.info("Listing serial ports")
     # serial.tools.list_ports.comports() can be too slow
     # because os.path.islink can be too slow (https://github.com/pyserial/pyserial/pull/303)
     # Workarond: temporally patch os.path.islink
@@ -982,7 +1023,13 @@ def list_serial_ports():
         else:
             from serial.tools.list_ports import comports
 
-        return comports()
+        irrelevant = ["/dev/cu.Bluetooth-Incoming-Port", "/dev/cu.iPhone-WirelessiAP"]
+        result = []
+        for p in comports():
+            if p.device not in irrelevant:
+                result.append(p)
+
+        return result
     finally:
         os.path.islink = old_islink
 
@@ -995,37 +1042,16 @@ def port_exists(device):
     return False
 
 
-def list_serial_ports_with_descriptions():
-    def port_order(p):
-        name = p.device
-        if name is None:
-            return ""
-        elif name.startswith("COM") and len(name) == 4:
-            # Make one-digit COM ports go before COM10
-            return name.replace("COM", "COM0")
-        else:
-            return name
-
-    sorted_ports = sorted(list_serial_ports(), key=port_order)
-
-    return [
-        (
-            p.description if p.device in p.description else p.description + " (" + p.device + ")",
-            p.device,
-        )
-        for p in sorted_ports
-    ]
-
-
 def get_uart_adapter_vids_pids():
     # https://github.com/per1234/zzInoVIDPID
     # https://github.com/per1234/zzInoVIDPID/blob/master/zzInoVIDPID/boards.txt
     # http://esp32.net/usb-uart/
     # https://www.usb.org/developers
+    # https://github.com/espressif/usb-pids
     return {
         (0x1A86, 0x7523),  # CH340 (HL-340?)
         (0x1A86, 0x5523),  # CH341
-        (0x1A86, 0x55D4),  # CH9102F, seen at Adafruit Feather ESP32 V2
+        (0x1A86, 0x55D4),  # CH9102F, seen at Adafruit Feather ESP32 V2, M5 stamp C3
         (0x10C4, 0xEA60),  # CP210x,
         (0x0403, 0x6001),  # FT232/FT245 (XinaBox CW01, CW02)
         (0x0403, 0x6010),  # FT2232C/D/L/HL/Q (ESP-WROVER-KIT)
diff --git a/thonny/plugins/micropython/os_mp_backend.py b/thonny/plugins/micropython/os_mp_backend.py
index fb06c99..57b8018 100644
--- a/thonny/plugins/micropython/os_mp_backend.py
+++ b/thonny/plugins/micropython/os_mp_backend.py
@@ -10,10 +10,15 @@ from abc import ABC
 from logging import getLogger
 from typing import Callable, Optional, Union
 
+# make sure thonny folder is in sys.path (relevant in dev)
+thonny_container = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
+if thonny_container not in sys.path:
+    sys.path.insert(0, thonny_container)
+
 import thonny
 from thonny import report_time
 from thonny.backend import SshMixin
-from thonny.common import BackendEvent, serialize_message
+from thonny.common import PROCESS_ACK, BackendEvent, serialize_message
 from thonny.plugins.micropython.bare_metal_backend import LF, NORMAL_PROMPT
 from thonny.plugins.micropython.connection import MicroPythonConnection
 from thonny.plugins.micropython.mp_back import (
@@ -148,7 +153,7 @@ class UnixMicroPythonBackend(MicroPythonBackend, ABC):
             output.append(data)
 
         report_time("befini")
-        self._forward_output_until_active_prompt(collect_output, "stdout")
+        self._process_output_until_active_prompt(collect_output, "stdout")
         self._original_welcome_text = "".join(output).replace("\r\n", "\n")
         self._welcome_text = self._tweak_welcome_text(self._original_welcome_text)
         report_time("afini")
@@ -175,9 +180,9 @@ class UnixMicroPythonBackend(MicroPythonBackend, ABC):
         self._connection.read_until(end_marker.encode("ascii"))
         self._write(EOT)
         self._connection.read_until(b"\n")
-        self._forward_output_until_active_prompt(output_consumer)
+        self._process_output_until_active_prompt(output_consumer)
 
-    def _forward_output_until_active_prompt(
+    def _process_output_until_active_prompt(
         self, output_consumer: Callable[[str, str], None], stream_name="stdout"
     ):
         INCREMENTAL_OUTPUT_BLOCK_CLOSERS = re.compile(
@@ -248,7 +253,7 @@ class UnixMicroPythonBackend(MicroPythonBackend, ABC):
 
         self._connection = self._create_connection(args)
         report_time("afconn")
-        self._forward_output_until_active_prompt(self._send_output, "stdout")
+        self._process_output_until_active_prompt(self._send_output, "stdout")
         report_time("afforv")
         self.send_message(
             BackendEvent(event_type="HideTrailingOutput", text=self._original_welcome_text)
@@ -383,6 +388,7 @@ class SshUnixMicroPythonBackend(UnixMicroPythonBackend, SshMixin):
 if __name__ == "__main__":
     THONNY_USER_DIR = os.environ["THONNY_USER_DIR"]
     thonny.configure_backend_logging()
+    print(PROCESS_ACK)
 
     import ast
 
diff --git a/thonny/plugins/micropython/pip_gui.py b/thonny/plugins/micropython/pip_gui.py
index ad4d735..4458210 100644
--- a/thonny/plugins/micropython/pip_gui.py
+++ b/thonny/plugins/micropython/pip_gui.py
@@ -1,19 +1,21 @@
 import urllib.parse
 from logging import getLogger
 from tkinter import messagebox
-from typing import Dict, Optional
+from typing import Any, Dict, List, Optional
 
 from thonny.languages import tr
+from thonny.misc_utils import levenshtein_distance
 from thonny.plugins.micropython import LocalMicroPythonProxy, MicroPythonProxy
 from thonny.plugins.pip_gui import BackendPipDialog, get_not_supported_translation
 
-MICROPYTHON_ORG_JSON = "https://micropython.org/pi/%s/json"
+MICROPYTHON_ORG_JSON = "https://micropython.org/pi/v2/index.json"
 
 logger = getLogger(__name__)
 
 
 class MicroPythonPipDialog(BackendPipDialog):
     def __init__(self, master):
+        self._mp_org_index_data = None
         super().__init__(master)
         assert isinstance(self._backend_proxy, MicroPythonProxy)
 
@@ -32,6 +34,9 @@ class MicroPythonPipDialog(BackendPipDialog):
         return super()._confirm_install(package_data)
 
     def _looks_like_micropython_package(self, package_data: Dict) -> bool:
+        if package_data.get("mp_org", False):
+            return True
+
         name = package_data["info"]["name"]
         for token in ["micropython", "circuitpython", "pycopy"]:
             if token in name.lower():
@@ -56,6 +61,43 @@ class MicroPythonPipDialog(BackendPipDialog):
     ) -> Optional[str]:
         return super()._get_package_metadata_url(name, version_str)
 
+    def get_search_button_text(self):
+        return tr("Search micropython-lib and PyPI")
+
+    def _download_package_info(self, name: str, version_str: Optional[str]) -> Dict:
+        # Try mp.org first
+        index_data = self._get_mp_org_index_data()
+
+        for package in index_data["packages"]:
+            if self._normalize_name(package["name"]) == self._normalize_name(name):
+                info = {
+                    "name": package["name"],
+                    "version": package["version"],
+                }
+                if package.get("author"):
+                    info["author"] = package["author"]
+                if package.get("license"):
+                    info["license"] = package["license"]
+                if package.get("description"):
+                    info["summary"] = package["description"]
+                # TODO: deps?
+
+                releases = {ver: [] for ver in package["versions"]["py"]}
+
+                return {"info": info, "releases": releases, "mp_org": True}
+
+        return super()._download_package_info(name, version_str)
+
+    def _get_mp_org_index_data(self) -> Dict[str, Any]:
+        if not self._mp_org_index_data:
+            import json
+            from urllib.request import urlopen
+
+            with urlopen(MICROPYTHON_ORG_JSON, timeout=10) as fp:
+                self._mp_org_index_data = json.load(fp)
+
+        return self._mp_org_index_data
+
     def _get_target_directory(self):
         # TODO: should this be pipkin's decision?
         target_dir = self._backend_proxy.get_pip_target_dir()
@@ -107,31 +149,50 @@ class MicroPythonPipDialog(BackendPipDialog):
             get_not_supported_translation() + reason + "\n\n",
         )
 
-    def _tweak_search_results(self, results, query):
-        if results is None:
-            return results
-        query = query.lower()
-
-        def get_order(item):
-            name = item["name"].lower()
-            if name == query:
-                return 0
-            elif name == "micropython-" + query:
-                return 1
-            elif name == "pycopy-" + query:
-                return 2
-            elif "micropython" in name:
-                return 3
-            elif "pycopy" in name:
-                return 4
-            elif item.get("description"):
-                description = item["description"]
-                if "micropython" in description.lower() or "pycopy" in description.lower():
-                    return 5
-
-            return 6
-
-        return sorted(results, key=get_order)
+    def _fetch_search_results(self, query: str) -> Dict[str, List[Dict[str, str]]]:
+        """Will be executed in background thread"""
+
+        mp_org_result = self._perform_micropython_org_search(query)
+        pypi_result = self._perform_pypi_search(query, source="PyPI")
+
+        combined_result = []
+        mp_org_names = set()
+
+        for item in mp_org_result:
+            combined_result.append(item)
+            mp_org_names.add(item["name"])
+
+        for item in pypi_result:
+            # TODO: normalize?
+            if item["name"] not in mp_org_names:
+                # add slight penalty for non-perfect PyPI matches, as most users look for mp.org results
+                if item["distance"] != 0:
+                    item["distance"] += 1
+                combined_result.append(item)
+
+        sorted_result = sorted(combined_result, key=lambda x: x["distance"])
+        filtered_result = filter(lambda x: x["distance"] < 5, sorted_result[:20])
+
+        # Combining, because this makes the shadowing performed by Pipkin more clear
+        return {"combined": list(filtered_result)}
+
+    def _perform_micropython_org_search(self, query: str) -> List[Dict[str, str]]:
+        logger.info("Searching %r for %r", MICROPYTHON_ORG_JSON, query)
+        data = self._get_mp_org_index_data()
+
+        result = []
+        for package in data["packages"]:
+            result.append(
+                {
+                    "name": package["name"],
+                    "description": package["description"] or None,
+                    "source": "micropython-lib",
+                    "distance": levenshtein_distance(query, package["name"]),
+                }
+            )
+
+        logger.info("Got %r items", len(result))
+        return result
 
     def _get_interpreter_description(self):
         return self._backend_proxy.get_full_label()
diff --git a/thonny/plugins/micropython/serial_connection.py b/thonny/plugins/micropython/serial_connection.py
index c94b7e2..5540829 100644
--- a/thonny/plugins/micropython/serial_connection.py
+++ b/thonny/plugins/micropython/serial_connection.py
@@ -19,7 +19,6 @@ logger = getLogger(__name__)
 
 class SerialConnection(MicroPythonConnection):
     def __init__(self, port, baudrate=115200, dtr=None, rts=None, skip_reader=False):
-
         import serial
         from serial.serialutil import SerialException
 
@@ -159,7 +158,6 @@ class DifficultSerialConnection(SerialConnection):
     """For hardening the communication protocol"""
 
     def _make_output_available(self, data, block=True):
-
         # output prompts in parts
         if FIRST_RAW_PROMPT in data or NORMAL_PROMPT in data:
             if FIRST_RAW_PROMPT in data:
diff --git a/thonny/plugins/micropython/uf2dialog.py b/thonny/plugins/micropython/uf2dialog.py
index a4c7ed1..d5c1f14 100644
--- a/thonny/plugins/micropython/uf2dialog.py
+++ b/thonny/plugins/micropython/uf2dialog.py
@@ -1,120 +1,31 @@
 import os.path
-import re
 import sys
-import threading
 import time
-import traceback
-import urllib.request
-from dataclasses import dataclass
 from logging import getLogger
-from tkinter import ttk
-from typing import Any, Dict, List, Optional, Set
+from typing import Any, Dict, List, Optional, Set, Tuple
 
-from thonny import get_runner
-from thonny.languages import tr
+from thonny.common import UserError
 from thonny.misc_utils import get_win_volume_name, list_volumes
-from thonny.ui_utils import AdvancedLabel, MappingCombobox, set_text_if_different
-from thonny.workdlg import WorkDialog
+from thonny.plugins.micropython.base_flashing_dialog import (
+    BaseFlashingDialog,
+    TargetInfo,
+    family_code_to_name,
+)
+from thonny.plugins.micropython.mp_front import list_serial_ports
 
 logger = getLogger(__name__)
 
-FAKE_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36"
 
-
-@dataclass()
-class TargetInfo:
-    title: str
-    path: str
-    family: Optional[str]
-    model: Optional[str]
-    board_id: Optional[str]
-
-
-class Uf2FlashingDialog(WorkDialog):
-    def __init__(self, master, firmware_name: str):
-        self._downloaded_variants: List[Dict[str, Any]] = []
-
-        self._last_handled_target = None
-        self._last_handled_variant = None
-        self.firmware_name = firmware_name
-
-        threading.Thread(target=self._download_variants, daemon=True).start()
-
-        super().__init__(master, autostart=False)
+class Uf2FlashingDialog(BaseFlashingDialog):
+    def get_target_label(self) -> str:
+        return "Target volume"
 
     def get_variants_url(self) -> str:
         return f"https://raw.githubusercontent.com/thonny/thonny/master/data/{self.firmware_name.lower()}-variants-uf2.json"
 
-    def populate_main_frame(self):
-        epadx = self.get_large_padding()
-        ipadx = self.get_small_padding()
-        epady = epadx
-        ipady = ipadx
-
-        target_label = ttk.Label(self.main_frame, text="Target volume")
-        target_label.grid(row=1, column=1, sticky="e", padx=(epadx, 0), pady=(epady, 0))
-        self._target_combo = MappingCombobox(self.main_frame, exportselection=False)
-        self._target_combo.grid(
-            row=1, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(epady, 0)
-        )
-
-        self._target_info_label = ttk.Label(self.main_frame, text="model")
-        self._target_info_label.grid(row=2, column=1, sticky="e", padx=(epadx, 0), pady=(ipady, 0))
-        self._target_info_content_label = ttk.Label(self.main_frame)
-        self._target_info_content_label.grid(
-            row=2, column=2, sticky="w", padx=(ipadx, epadx), pady=(ipady, 0)
-        )
-
-        variant_label = ttk.Label(self.main_frame, text=f"{self.firmware_name} variant")
-        variant_label.grid(row=5, column=1, sticky="e", padx=(epadx, 0), pady=(epady, 0))
-        self._variant_combo = MappingCombobox(self.main_frame, exportselection=False)
-        self._variant_combo.grid(
-            row=5, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(epady, 0)
-        )
-
-        version_label = ttk.Label(self.main_frame, text="version")
-        version_label.grid(row=6, column=1, sticky="e", padx=(epadx, 0), pady=(ipady, 0))
-        self._version_combo = MappingCombobox(self.main_frame, exportselection=False)
-        self._version_combo.grid(
-            row=6, column=2, sticky="nsew", padx=(ipadx, epadx), pady=(ipady, 0)
-        )
-
-        variant_info_label = ttk.Label(self.main_frame, text="info")
-        variant_info_label.grid(row=7, column=1, sticky="e", padx=(epadx, 0), pady=(ipady, 0))
-        self._variant_info_content_label = AdvancedLabel(self.main_frame)
-        self._variant_info_content_label.grid(
-            row=7, column=2, sticky="w", padx=(ipadx, epadx), pady=(ipady, 0)
-        )
-
-        self.main_frame.columnconfigure(2, weight=1)
-
-    def update_ui(self):
-        if self._state == "idle":
-            targets = self.find_targets()
-            if targets != self._target_combo.mapping:
-                self.show_new_targets(targets)
-                self._last_handled_target = None
-
-            current_target = self._target_combo.get_selected_value()
-            if not current_target:
-                self._variant_combo.set_mapping({})
-                self._variant_combo.select_none()
-            elif current_target != self._last_handled_target and self._downloaded_variants:
-                self._present_variants_for_target(current_target)
-                self._last_handled_target = current_target
-                self._last_handled_variant = None
-            self._update_target_info()
-
-            current_variant = self._variant_combo.get_selected_value()
-            if not current_variant:
-                self._version_combo.select_none()
-                self._version_combo.set_mapping({})
-            elif current_variant != self._last_handled_variant:
-                self._present_versions_for_variant(current_variant)
-                self._last_handled_variant = current_variant
-            self._update_variant_info()
-
-        super().update_ui()
+    def get_families_mapping(self) -> Dict[str, str]:
+        codes = ["rp2", "samd21", "samd51", "esp32s2", "esp32s3", "nrf52"]
+        return {family_code_to_name(code): code for code in codes}
 
     def find_targets(self) -> Dict[str, TargetInfo]:
         paths = [
@@ -129,129 +40,33 @@ class Uf2FlashingDialog(WorkDialog):
                 target_info = self.create_target_info(path)
                 if target_info:
                     result[target_info.title] = target_info
-            except:
+            except Exception:
                 # the disk may have been ejected during read or smth like this
                 logger.exception("Could not create target info")
 
         return result
 
-    def show_new_targets(self, targets: Dict[str, TargetInfo]) -> None:
-        self._target_combo.set_mapping(targets)
-        if len(targets) == 1:
-            self._target_combo.select_value(list(targets.values())[0])
-        else:
-            self._target_combo.select_none()
-
-    def _update_target_info(self):
-        current_target = self._target_combo.get_selected_value()
-        if current_target is not None:
-            if current_target.model:
-                if current_target.model == "Raspberry Pi RP2":
-                    # too general to be called model
-                    text = "RP2"
-                    label = "family"
-                else:
-                    text = current_target.model
-                    label = "model"
-            elif current_target.board_id:
-                text = current_target.board_id
-                label = "board id"
-            elif current_target.family:
-                text = current_target.family
-                label = "family"
+    def compute_target_info_text_and_label(self, target: TargetInfo) -> Tuple[str, str]:
+        if target.model:
+            if target.model == "Raspberry Pi RP2":
+                # too general to be called model
+                return "RP2", "family"
             else:
-                text = "Unknown board"
-                label = "info"
-
-        elif not self._target_combo.mapping:
-            text = "[no suitable targets detected]"
-            label = ""
+                text = target.model
+                if target.family:
+                    text += f"   ({family_code_to_name(target.family)})"
+                return text, "model"
+        elif target.board_id:
+            text = target.board_id
+            if target.family:
+                text += f"   ({family_code_to_name(target.family)})"
+            return text, "board id"
+        elif target.family:
+            return target.family, "family"
         else:
-            text = f"[found {len(self._target_combo.mapping)} targets, please select one]"
-            label = ""
-
-        set_text_if_different(self._target_info_content_label, text)
-        set_text_if_different(self._target_info_label, label)
-
-    def _update_variant_info(self):
-        current_variant = self._variant_combo.get_selected_value()
-        if not self._downloaded_variants:
-            url = None
-            text = "[downloading variants info ...]"
-        elif current_variant:
-            url = current_variant["info_url"]
-            text = url
-        elif self._variant_combo.mapping:
-            url = None
-            text = f"[select one from {len(self._variant_combo.mapping)} variants]"
-        else:
-            url = None
-            text = ""
-
-        set_text_if_different(self._variant_info_content_label, text)
-        self._variant_info_content_label.set_url(url)
-
-    def _present_variants_for_target(self, target: TargetInfo) -> None:
-        assert self._downloaded_variants
-
-        whole_mapping = {self._create_variant_description(v): v for v in self._downloaded_variants}
-
-        if target.family is not None:
-            filtered_mapping = {
-                item[0]: item[1]
-                for item in whole_mapping.items()
-                if item[1]["family"].startswith(target.family)
-            }
-            if not filtered_mapping:
-                filtered_mapping = whole_mapping
-        else:
-            filtered_mapping = whole_mapping
-
-        prev_variant = self._variant_combo.get_selected_value()
-
-        populars = {
-            key: variant
-            for key, variant in filtered_mapping.items()
-            if variant.get("popular", False)
-        }
-        if populars and len(populars) < len(filtered_mapping):
-            enhanced_mapping = {"--- MOST POPULAR " + "-" * 100: {}}
-            for variant in populars.values():
-                popular_variant = variant.copy()
-                # need different title to distinguish it from the same item in ALL VARIANTS
-                popular_title = self._create_variant_description(variant) + " "
-                popular_variant["title"] = popular_title
-                enhanced_mapping[popular_title] = popular_variant
-
-            enhanced_mapping["--- ALL VARIANTS " + "-" * 100] = {}
-            enhanced_mapping.update(filtered_mapping)
-        else:
-            enhanced_mapping = filtered_mapping
-
-        self._variant_combo.set_mapping(enhanced_mapping)
-        matches = list(
-            filter(
-                lambda v: self._variant_is_meant_for_target(v, target), filtered_mapping.values()
-            )
-        )
+            return "Unknown board", "info"
 
-        if len(matches) == 1:
-            self._variant_combo.select_value(matches[0])
-        elif prev_variant and prev_variant in filtered_mapping.values():
-            self._variant_combo.select_value(prev_variant)
-
-    def _present_versions_for_variant(self, variant: Dict[str, Any]) -> None:
-        versions_mapping = {d["version"]: d for d in variant["downloads"]}
-        self._version_combo.set_mapping(versions_mapping)
-        if len(versions_mapping) > 0:
-            self._version_combo.select_value(list(versions_mapping.values())[0])
-        else:
-            self._version_combo.select_none()
-
-    def _create_variant_description(self, variant: Dict[str, Any]) -> str:
-        return variant["vendor"] + " • " + variant.get("title", variant["model"])
-
-    def _variant_is_meant_for_target(self, variant: Dict[str, Any], target: TargetInfo):
+    def _variant_can_be_recommended_for_target(self, variant: Dict[str, Any], target: TargetInfo):
         if target.family is None:
             # Don't assume anything about unknown targets
             return False
@@ -264,29 +79,14 @@ class Uf2FlashingDialog(WorkDialog):
 
         # Compare set of words both with and without considering the possibility that one of them
         # may have vendor name added and other not.
-        return self._extract_normalized_words(target.model) == self._extract_normalized_words(
+        return _extract_normalized_words(target.model) == _extract_normalized_words(
             variant["model"]
-        ) or self._extract_normalized_words(
+        ) or _extract_normalized_words(
             target.model + " " + variant["vendor"]
-        ) == self._extract_normalized_words(
+        ) == _extract_normalized_words(
             variant["model"] + " " + variant["vendor"]
         )
 
-    def _extract_normalized_words(self, text: str) -> Set[str]:
-        return set(text.replace("_", " ").replace("-", "").lower().split())
-
-    def describe_target_path(self, path: str) -> str:
-        if sys.platform == "win32":
-            try:
-                label = get_win_volume_name(path)
-                disk = path.strip("\\")
-                return f"{label} ({disk})"
-            except:
-                logger.error("Could not query volume name for %r", path)
-                return path
-        else:
-            return path
-
     def create_target_info(self, path: str) -> Optional[TargetInfo]:
         info_path = os.path.join(path, self.get_info_file_name())
         assert os.path.isfile(info_path)
@@ -309,106 +109,17 @@ class Uf2FlashingDialog(WorkDialog):
                 family = None
 
         return TargetInfo(
-            title=self.describe_target_path(path),
+            title=create_volume_description(path),
             path=path,
             family=family,
             model=model,
             board_id=board_id,
+            port=None,
         )
 
     def get_info_file_name(self):
         return "INFO_UF2.TXT"
 
-    def _download_variants(self):
-        logger.info("Downloading %r", self.get_variants_url())
-        import json
-        from urllib.request import urlopen
-
-        try:
-            req = urllib.request.Request(
-                self.get_variants_url(),
-                data=None,
-                headers={
-                    "User-Agent": FAKE_USER_AGENT,
-                    "Cache-Control": "no-cache",
-                },
-            )
-            with urlopen(req) as fp:
-                json_str = fp.read().decode("UTF-8")
-                # logger.debug("Variants info: %r", json_str)
-            variants = json.loads(json_str)
-            logger.info("Got %r variants", len(variants))
-            self._tweak_variants(variants)
-        except Exception:
-            msg = f"Could not download variants info from {self.get_variants_url()}"
-            logger.exception(msg)
-            self.append_text(msg + "\n")
-            self.set_action_text("Error!")
-            self.grid_progress_widgets()
-            return
-
-        self._downloaded_variants = variants
-
-    def _tweak_variants(self, variants):
-        """
-        A hack for getting the latest pre-release for micropython.org downloads.
-        The build that is loaded from the json may already be deleted.
-        In order to avoid adding another async operation into the process (after selecting
-        a variant and before presenting versions), I'm getting the latest build substring
-        from the download page of the first board and downloading it together with the json.
-        """
-        latest_prerelease_substitute = None
-        latest_prerelease_regex: str
-        for variant in variants:
-            new_regex = variant.get("latest_prerelease_regex", None)
-            if new_regex:
-                latest_prerelease_regex = new_regex
-                import json
-                import urllib.request
-
-                logger.info("Downloading %r", variant["info_url"])
-                try:
-                    req = urllib.request.Request(
-                        variant["info_url"],
-                        data=None,
-                        headers={
-                            "User-Agent": FAKE_USER_AGENT,
-                            "Cache-Control": "no-cache",
-                        },
-                    )
-                    with urllib.request.urlopen(req) as fp:
-                        html_str = fp.read().decode("UTF-8", errors="replace")
-                        # logger.debug("Variants info: %r", json_str)
-
-                    match = re.search(latest_prerelease_regex, html_str)
-                    if match:
-                        latest_prerelease_substitute = match.group(0)
-                        logger.info(
-                            "Using %r as prerelease substitute", latest_prerelease_substitute
-                        )
-                    else:
-                        latest_prerelease_substitute = None
-                except Exception:
-                    msg = f"Could not download variants info from {self.get_variants_url()}"
-                    logger.exception(msg)
-                    self.append_text(msg + "\n")
-                    self.set_action_text("Error!")
-                    self.grid_progress_widgets()
-
-            if latest_prerelease_substitute:
-                assert latest_prerelease_regex
-                for i, download in enumerate(variant["downloads"]):
-                    patched_url = re.sub(
-                        latest_prerelease_regex, latest_prerelease_substitute, download["url"]
-                    )
-                    if patched_url != download["url"]:
-                        logger.debug("Replacing %r with %r", download["url"], patched_url)
-                        download["url"] = patched_url
-                        download["version"] = latest_prerelease_substitute
-
-    def get_ok_text(self):
-        return tr("Install")
-
     def get_instructions(self) -> Optional[str]:
         return (
             f"Here you can install or update {self.firmware_name} for devices having an UF2 bootloader\n"
@@ -423,133 +134,84 @@ class Uf2FlashingDialog(WorkDialog):
             "5. Close the dialog and start programming!"
         )
 
-    def _on_variant_select(self, *args):
-        pass
-
     def get_title(self):
-        return f"Install {self.firmware_name}"
-
-    def is_ready_for_work(self):
-        return self._target_combo.get_selected_value() and self._version_combo.get_selected_value()
-
-    def start_work(self):
-        from thonny.plugins.micropython import BareMetalMicroPythonProxy
-
-        download_info: Dict[str, Any] = self._version_combo.get_selected_value()
+        return f"Install or update {self.firmware_name} (UF2)"
+
+    def perform_core_operation(
+        self,
+        source_path: Optional[str],
+        variant_info: Optional[Dict[str, Any]],
+        download_info: Optional[Dict[str, str]],
+        target_info: Optional[TargetInfo],
+        work_options: Dict[str, Any],
+    ) -> bool:
+        assert source_path
+        assert variant_info
         assert download_info
-        target: TargetInfo = self._target_combo.get_selected_value()
-        assert target
-
-        target_filename = download_info.get("filename", download_info["url"].split("/")[-1])
-
-        self.report_progress(0, 100)
-        proxy = get_runner().get_backend_proxy()
-        if isinstance(proxy, BareMetalMicroPythonProxy):
-            proxy.disconnect()
-
-        threading.Thread(
-            target=self._perform_work,
-            args=[
-                download_info["url"],
-                download_info.get("size", None),
-                target.path,
-                target_filename,
-            ],
-            daemon=True,
-        ).start()
-        return True
-
-    def _perform_work(
-        self, download_url: str, size: Optional[int], target_dir: str, target_filename: str
-    ) -> None:
-        from thonny.plugins.micropython import list_serial_ports
-
-        try:
-            ports_before = list_serial_ports()
-            self._download_to_the_device(download_url, size, target_dir, target_filename)
-            if self._state == "working":
-                self.perform_post_installation_steps(ports_before)
-        except Exception as e:
-            self.append_text("\n" + "".join(traceback.format_exc()))
-            self.set_action_text("Error...")
-            self.report_done(False)
-            return
-
-        if self._state == "working":
-            self.append_text("\nDone!\n")
-            self.set_action_text("Done!")
-            self.report_done(True)
-        else:
-            assert self._state == "cancelling"
-            self.append_text("\nCancelled\n")
-            self.set_action_text("Cancelled")
-            self.report_done(False)
-
-    def _download_to_the_device(
-        self, download_url: str, size: Optional[int], target_dir: str, target_filename: str
-    ):
-        from urllib.request import urlopen
+        assert target_info
 
         """Running in a bg thread"""
-        target_path = os.path.join(target_dir, target_filename)
-        logger.debug("Downloading from %s to %s", download_url, target_path)
+        size = os.path.getsize(source_path)
+        target_path = os.path.join(target_info.path, os.path.basename(source_path))
+
+        logger.debug("Copying from %s to %s", source_path, target_path)
 
         self.set_action_text("Starting...")
-        self.append_text("Downloading from %s\n" % download_url)
-
-        req = urllib.request.Request(
-            download_url,
-            data=None,
-            headers={
-                "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36"
-            },
-        )
+        self.append_text("Copying to %s\n" % target_path)
 
-        with urlopen(req, timeout=5) as fsrc:
-            if size is None:
-                size = int(fsrc.getheader("Content-Length", str(500 * 1024)))
+        ports_before = list_serial_ports_with_hw_info()
+        logger.debug("Ports before: %s", ports_before)
 
+        with open(source_path, "rb") as fsrc:
             bytes_copied = 0
             self.append_text("Writing to %s\n" % target_path)
             self.append_text("Starting...")
-            if fsrc.length:
-                # override (possibly inaccurate) size
-                size = fsrc.length
 
             block_size = 8 * 1024
             with open(target_path, "wb") as fdst:
                 while True:
-
                     block = fsrc.read(block_size)
                     if not block:
                         break
 
                     if self._state == "cancelling":
-                        break
+                        raise UserError("Cancelling copying per user request")
 
                     fdst.write(block)
-                    fdst.flush()
-                    os.fsync(fdst.fileno())
                     bytes_copied += len(block)
-                    percent_str = "%.0f%%" % (bytes_copied / size * 100)
+                    fdst.flush()
+                    try:
+                        # May fail after last block
+                        os.fsync(fdst.fileno())
+                    except Exception:
+                        if bytes_copied == size:
+                            logger.warning("Could not fsync last block")
+                        else:
+                            logger.exception("Could not fsync")
+                    percent_copied = bytes_copied / size * 100
+                    percent_str = "%.0f%%" % (percent_copied)
                     self.set_action_text("Copying... " + percent_str)
-                    self.report_progress(bytes_copied, size)
+                    # use the right half of the progress bar for copying
+                    self.report_progress(percent_copied + 100, 200)
                     self.replace_last_line(percent_str)
 
-    def _wait_for_new_ports(self, old_ports):
-        from thonny.plugins.micropython import list_serial_ports
+        if self._state == "working":
+            self.perform_post_installation_steps(ports_before)
+
+        return True
 
+    def _wait_for_new_ports(self, old_ports):
         self.append_text("\nWaiting for the port...\n")
         self.set_action_text("Waiting for the port...")
 
         wait_time = 0
         step = 0.2
         while wait_time < 10:
-            new_ports = list_serial_ports()
+            new_ports = list_serial_ports_with_hw_info()
             added_ports = set(new_ports) - set(old_ports)
             if added_ports:
                 for p in added_ports:
-                    self.append_text("Found %s at %s\n" % ("%04x:%04x" % (p.vid, p.pid), p.device))
+                    self.append_text("Found port %s\n" % p)
                     self.set_action_text("Found port")
                 return
             if self._state == "cancelling":
@@ -557,6 +219,7 @@ class Uf2FlashingDialog(WorkDialog):
             time.sleep(step)
             wait_time += step
         else:
+            logger.debug("Ports after: %s", list_serial_ports_with_hw_info())
             self.set_action_text("Warning: Could not find port")
             self.append_text("Warning: Could not find port in %s seconds\n" % int(wait_time))
             # leave some time to see the warning
@@ -589,3 +252,24 @@ def uf2_device_is_present_in_bootloader_mode() -> bool:
             return True
 
     return False
+
+
+def _extract_normalized_words(text: str) -> Set[str]:
+    return set(text.replace("_", " ").replace("-", "").lower().split())
+
+
+def create_volume_description(path: str) -> str:
+    if sys.platform == "win32":
+        try:
+            label = get_win_volume_name(path)
+            disk = path.strip("\\")
+            return f"{label} ({disk})"
+        except Exception:
+            logger.error("Could not query volume name for %r", path)
+            return path
+    else:
+        return path
+
+
+def list_serial_ports_with_hw_info():
+    return [f"{p.device} ({p.hwid})" for p in list_serial_ports(max_cache_age=0)]
diff --git a/thonny/plugins/micropython/webrepl_connection.py b/thonny/plugins/micropython/webrepl_connection.py
index 7fad137..a8fa3a2 100644
--- a/thonny/plugins/micropython/webrepl_connection.py
+++ b/thonny/plugins/micropython/webrepl_connection.py
@@ -17,7 +17,6 @@ class WebReplConnection(MicroPythonConnection):
     """
 
     def __init__(self, url, password, num_bytes_received=0):
-
         self.num_bytes_received = num_bytes_received
         super().__init__()
 
diff --git a/thonny/plugins/misc_analyzers.py b/thonny/plugins/misc_analyzers.py
index 472081c..fb89177 100644
--- a/thonny/plugins/misc_analyzers.py
+++ b/thonny/plugins/misc_analyzers.py
@@ -239,7 +239,6 @@ class ProgramNamingAnalyzer(ProgramAnalyzer):
         for item in os.listdir(main_file_dir):
             full_path = os.path.join(main_file_dir, item)
             if item.endswith(".py") and item[:-3] in library_modules:
-
                 if is_same_path(full_path, main_file_path):
                     prelude = "Your program file is named '%s'." % item
                     rename_hint = " (*File → Rename…* )"
diff --git a/thonny/plugins/mypy/__init__.py b/thonny/plugins/mypy/__init__.py
index 16afd65..af88951 100644
--- a/thonny/plugins/mypy/__init__.py
+++ b/thonny/plugins/mypy/__init__.py
@@ -1,7 +1,6 @@
 import os.path
 import re
 import subprocess
-import sys
 from logging import getLogger
 from typing import Iterable
 
@@ -107,7 +106,7 @@ class MyPyAnalyzer(SubprocessProgramAnalyzer):
                 atts["symbol"] = "mypy-" + atts["kind"]
                 warnings.append(atts)
             else:
-                logging.error("Can't parse MyPy line: " + line.strip())
+                logger.error("Can't parse MyPy line: " + line.strip())
 
         self.completion_handler(self, warnings)
 
diff --git a/thonny/plugins/object_inspector.py b/thonny/plugins/object_inspector.py
index c195469..8f733a6 100644
--- a/thonny/plugins/object_inspector.py
+++ b/thonny/plugins/object_inspector.py
@@ -327,7 +327,6 @@ class FileHandleInspector(TextFrame, ContentInspector):
         return "file_content" in object_info or "file_error" in object_info
 
     def set_object_info(self, object_info):
-
         if "file_content" not in object_info:
             logger.exception("File error: " + object_info["file_error"])
             return
diff --git a/thonny/plugins/paren_matcher.py b/thonny/plugins/paren_matcher.py
index 6076df4..e1a0008 100644
--- a/thonny/plugins/paren_matcher.py
+++ b/thonny/plugins/paren_matcher.py
@@ -167,7 +167,6 @@ class ParenMatcher:
 
 class ShellParenMatcher(ParenMatcher):
     def _update_highlighting_for_active_range(self):
-
         # TODO: check that cursor is in this range
         index_parts = self.text.tag_prevrange("command", "end")
 
diff --git a/thonny/plugins/pi/__init__.py b/thonny/plugins/pi/__init__.py
index 5956e9f..ee7409e 100644
--- a/thonny/plugins/pi/__init__.py
+++ b/thonny/plugins/pi/__init__.py
@@ -268,7 +268,6 @@ def update_fonts():
 
 
 def load_plugin():
-
     # set custom images
     if get_workbench().get_ui_mode() == "simple" and get_workbench().winfo_screenwidth() >= 1280:
         images = {
diff --git a/thonny/plugins/pip_gui.py b/thonny/plugins/pip_gui.py
index 8eb9ec3..586c2d5 100644
--- a/thonny/plugins/pip_gui.py
+++ b/thonny/plugins/pip_gui.py
@@ -18,6 +18,7 @@ import thonny
 from thonny import get_runner, get_workbench, running, tktextext, ui_utils
 from thonny.common import DistInfo, InlineCommand, normpath_with_actual_case, path_startswith
 from thonny.languages import tr
+from thonny.misc_utils import construct_cmd_line, levenshtein_distance
 from thonny.running import InlineCommandDialog, get_front_interpreter_for_subprocess
 from thonny.ui_utils import (
     AutoScrollbar,
@@ -79,7 +80,6 @@ class PipDialog(CommonDialog, ABC):
         return tr("Uninstall")
 
     def _create_widgets(self, parent):
-
         header_frame = ttk.Frame(parent)
         header_frame.grid(
             row=1,
@@ -103,7 +103,10 @@ class PipDialog(CommonDialog, ABC):
         self.search_box.bind("<B1-Motion>", lambda _: self.search_box.focus_set())
 
         self.search_button = ttk.Button(
-            header_frame, text=self.get_search_button_text(), command=self._on_search, width=25
+            header_frame,
+            text=self.get_search_button_text(),
+            command=self._on_search,
+            width=len(self.get_search_button_text()) + 2,
         )
         self.search_button.grid(row=1, column=1, sticky="nse", padx=(self.get_small_padding(), 0))
 
@@ -459,19 +462,27 @@ class PipDialog(CommonDialog, ABC):
     ) -> Optional[str]:
         return None
 
+    def _download_package_info(self, name: str, version_str: Optional[str]) -> Dict:
+        import json
+        from urllib.request import urlopen
+
+        """Running in a background thread"""
+        # Fetch info from PyPI
+        if version_str is None:
+            url = "https://pypi.org/pypi/{}/json".format(urllib.parse.quote(name))
+        else:
+            url = "https://pypi.org/pypi/{}/{}/json".format(
+                urllib.parse.quote(name), urllib.parse.quote(version_str)
+            )
+
+        logger.info("Downloading package info from %s", url)
+        with urlopen(url) as fp:
+            return json.load(fp)
+
     def _start_show_package_info(self, name):
         self.current_package_data = None
         # Fetch info from PyPI
         self._set_state("fetching")
-        # Following fetches info about latest version.
-        # This is OK even when we're looking an installed older version
-        # because new version may have more relevant and complete info.
-        _start_fetching_package_info(
-            name,
-            url=self._get_package_metadata_url(name, None),
-            fallback_url=self._get_package_metadata_fallback_url(name, None),
-            completion_handler=self._show_package_info,
-        )
 
         self._clear_info_text()
         self.title_label["text"] = ""
@@ -510,6 +521,33 @@ class PipDialog(CommonDialog, ABC):
                 self.install_button["text"] = self.get_install_button_text()
                 self.uninstall_button.grid_remove()
 
+        # start download and polling
+        from concurrent.futures.thread import ThreadPoolExecutor
+
+        executor = ThreadPoolExecutor(max_workers=1)
+        download_future = executor.submit(self._download_package_info, name, None)
+
+        def poll_fetch_complete():
+            if download_future.done():
+                try:
+                    data = download_future.result()
+                    if "info" in data and "name" not in data["info"]:
+                        # this is the case of micropython.org/pi
+                        data["info"]["name"] = name
+                    self._show_package_info(name, data)
+                except urllib.error.HTTPError as e:
+                    self._show_package_info(
+                        name, {"info": {"name": name}, "error": str(e), "releases": {}}, e.code
+                    )
+                except Exception as e:
+                    self._show_package_info(
+                        name, {"info": {"name": name}, "error": str(e), "releases": {}}, e
+                    )
+            else:
+                get_workbench().after(200, poll_fetch_complete)
+
+        poll_fetch_complete()
+
     def _append_location_to_info_path(self, path):
         self.info_text.direct_insert("end", path)
 
@@ -550,17 +588,19 @@ class PipDialog(CommonDialog, ABC):
             return
 
         info = data["info"]
-        # NB! Json from micropython.org/pi doesn't have all the same fields as PyPI!
+        # NB! Json from micropython.org index doesn't have all the same fields as PyPI!
         self.title_label["text"] = info["name"]  # search name could have been a bit different
         latest_stable_version = _get_latest_stable_version(data["releases"].keys())
         if latest_stable_version is not None:
             write_att(tr("Latest stable version"), latest_stable_version)
         else:
-            write_att(tr("Latest version"), data["info"]["version"])
+            write_att(tr("Latest version"), info["version"])
         if "summary" in info:
             write_att(tr("Summary"), info["summary"])
         if "author" in info:
             write_att(tr("Author"), info["author"])
+        if "license" in info:
+            write_att(tr("License"), info["license"])
         if "home_page" in info:
             write_att(tr("Homepage"), info["home_page"], "url")
         if info.get("bugtrack_url", None):
@@ -644,11 +684,29 @@ class PipDialog(CommonDialog, ABC):
         self.title_label.grid()
         self.title_label["text"] = tr("Search results")
         self.info_text.direct_insert("1.0", tr("Searching") + " ...")
-        _start_fetching_search_results(query, self._show_search_results)
         if discard_selection:
             self._select_list_item(0)
 
-    def _show_search_results(self, query, results: Union[List[Dict], str]) -> None:
+        from concurrent.futures.thread import ThreadPoolExecutor
+
+        executor = ThreadPoolExecutor(max_workers=1)
+        results_future = executor.submit(self._fetch_search_results, query)
+
+        def poll_fetch_complete():
+            if results_future.done():
+                try:
+                    results = results_future.result()
+                except OSError as e:
+                    self._show_search_results(query, str(e))
+                else:
+                    self._show_search_results(query, results)
+
+            else:
+                get_workbench().after(200, poll_fetch_complete)
+
+        poll_fetch_complete()
+
+    def _show_search_results(self, query, results: Union[Dict[str, List[Dict]], str]) -> None:
         self._set_state("idle")
         self._clear_info_text()
 
@@ -662,21 +720,25 @@ class PipDialog(CommonDialog, ABC):
             self._append_info_text("Try opening the package directly:\n")
             self._append_info_text(query, ("url",))
             return
-        else:
-            results = self._tweak_search_results(results, query)
 
-        for item in results:
-            # self._append_info_text("•")
-            tags = ("url",)
-            if item["name"].lower() == query.lower():
-                tags = tags + ("bold",)
-
-            self._append_info_text(item["name"], tags)
-            self._append_info_text("\n")
-            self.info_text.direct_insert(
-                "end", item.get("description", "<No description>").strip() + "\n"
-            )
-            self._append_info_text("\n")
+        for source, source_results in results.items():
+            if len(results) > 1:
+                self._append_info_text(source + "\n", tags=("caption",))
+
+            for item in source_results:
+                # self._append_info_text("•")
+                tags = ("url",)
+                if item["name"].lower() == query.lower():
+                    tags = tags + ("bold",)
+
+                self._append_info_text(item["name"], tags)
+                if item.get("source"):
+                    self._append_info_text(" @ " + item["source"])
+                self._append_info_text("\n")
+                self.info_text.direct_insert(
+                    "end", (item.get("description") or "<No description>").strip() + "\n"
+                )
+                self._append_info_text("\n")
 
     def _select_list_item(self, name_or_index):
         if isinstance(name_or_index, int):
@@ -869,7 +931,6 @@ class PipDialog(CommonDialog, ABC):
     def _get_active_dist(self, name):
         normname = self._normalize_name(name)
         for key in self._active_distributions:
-
             if self._normalize_name(key) == normname:
                 return self._active_distributions[key]
 
@@ -907,7 +968,30 @@ class PipDialog(CommonDialog, ABC):
     def _is_read_only(self):
         raise NotImplementedError()
 
-    def _tweak_search_results(self, results, query):
+    def _fetch_search_results(self, query: str) -> Dict[str, List[Dict[str, str]]]:
+        """Will be executed in background thread"""
+        return {"*": self._perform_pypi_search(query)}
+
+    def _perform_pypi_search(
+        self, query: str, source: Optional[str] = None
+    ) -> List[Dict[str, str]]:
+        import urllib.parse
+        from urllib.request import urlopen
+
+        logger.info("Performing PyPI search for %r", query)
+
+        url = "https://pypi.org/search/?q={}".format(urllib.parse.quote(query))
+        with urlopen(url, timeout=10) as fp:
+            data = fp.read()
+
+        results = _extract_pypi_search_results(data.decode("utf-8"))
+
+        for result in results:
+            if source:
+                result["source"] = source
+            result["distance"] = levenshtein_distance(query, result["name"])
+
+        logger.info("Got %r matches")
         return results
 
 
@@ -981,6 +1065,7 @@ class BackendPipDialog(PipDialog):
             title=command,
             instructions=title,
             autostart=True,
+            output_prelude=f"{command} {construct_cmd_line(args)}\n",
         )
         ui_utils.show_dialog(dlg)
 
@@ -1418,29 +1503,7 @@ def _start_fetching_package_info(name, url: str, fallback_url: str, completion_h
     poll_fetch_complete()
 
 
-def _start_fetching_search_results(query, completion_handler):
-    import urllib.parse
-
-    url = "https://pypi.org/search/?q={}".format(urllib.parse.quote(query))
-
-    url_future = _fetch_url_future(url)
-
-    def poll_fetch_complete():
-
-        if url_future.done():
-            try:
-                _, bin_data = url_future.result()
-                raw_data = bin_data.decode("UTF-8")
-                completion_handler(query, _extract_search_results(raw_data))
-            except Exception as e:
-                completion_handler(query, str(e))
-        else:
-            get_workbench().after(200, poll_fetch_complete)
-
-    poll_fetch_complete()
-
-
-def _extract_search_results(html_data: str) -> List:
+def _extract_pypi_search_results(html_data: str) -> List[Dict[str, str]]:
     from html.parser import HTMLParser
 
     def get_class(attrs):
diff --git a/thonny/plugins/prime_inventor/__init__.py b/thonny/plugins/prime_inventor/__init__.py
index ecd6aea..1004804 100644
--- a/thonny/plugins/prime_inventor/__init__.py
+++ b/thonny/plugins/prime_inventor/__init__.py
@@ -33,9 +33,6 @@ class PrimeInventorMicroPythonProxy(BareMetalMicroPythonProxy):
 
 
 class PrimeInventorMicroPythonConfigPage(BareMetalMicroPythonConfigPage):
-    def _has_flashing_dialog(self):
-        return False
-
     def _get_intro_text(self):
         return "Instructions:"
 
diff --git a/thonny/plugins/replayer.py b/thonny/plugins/replayer.py
index d613d0f..219cd0a 100644
--- a/thonny/plugins/replayer.py
+++ b/thonny/plugins/replayer.py
@@ -285,7 +285,6 @@ class ReplayerEditorNotebook(ttk.Notebook):
         self._editors_by_text_widget_id = {}
 
     def clear(self):
-
         for child in self.winfo_children():
             child.destroy()
 
diff --git a/thonny/plugins/rp2040/__init__.py b/thonny/plugins/rp2040/__init__.py
index 5858294..b0aa460 100644
--- a/thonny/plugins/rp2040/__init__.py
+++ b/thonny/plugins/rp2040/__init__.py
@@ -1,4 +1,5 @@
 from logging import getLogger
+from typing import List
 
 from thonny.plugins.micropython import add_micropython_backend
 from thonny.plugins.micropython.mp_common import RAW_PASTE_SUBMIT_MODE
@@ -38,12 +39,17 @@ class RP2040BackendProxy(BareMetalMicroPythonProxy):
 
 
 class RP2040BackendConfigPage(BareMetalMicroPythonConfigPage):
-    def _has_flashing_dialog(self):
-        return True
+    def get_flashing_dialog_kinds(self) -> List[str]:
+        return [""]
 
-    def _open_flashing_dialog(self):
+    def _open_flashing_dialog(self, kind: str) -> None:
+        assert kind == ""
         show_uf2_installer(self, firmware_name="MicroPython")
 
+    @property
+    def allow_webrepl(self):
+        return True
+
 
 def load_plugin():
     add_micropython_backend(
diff --git a/thonny/plugins/rp2040/rp2040_back.py b/thonny/plugins/rp2040/rp2040_back.py
index bca0a19..a62e36f 100644
--- a/thonny/plugins/rp2040/rp2040_back.py
+++ b/thonny/plugins/rp2040/rp2040_back.py
@@ -1,7 +1,13 @@
 import os.path
+import sys
 from logging import getLogger
 from typing import List, Optional
 
+# make sure thonny folder is in sys.path (relevant in dev)
+thonny_container = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
+if thonny_container not in sys.path:
+    sys.path.insert(0, thonny_container)
+
 from thonny.plugins.micropython.bare_metal_backend import (
     BareMetalMicroPythonBackend,
     launch_bare_metal_backend,
diff --git a/thonny/plugins/run_debug_config_page.py b/thonny/plugins/run_debug_config_page.py
index eb5437f..9dca6e2 100644
--- a/thonny/plugins/run_debug_config_page.py
+++ b/thonny/plugins/run_debug_config_page.py
@@ -9,11 +9,24 @@ class RunDebugConfigurationPage(ConfigurationPage):
     def __init__(self, master):
         super().__init__(master)
 
+        self.add_checkbox(
+            "run.allow_running_unnamed_programs",
+            tr("Allow running unnamed programs"),
+            row=3,
+            columnspan=3,
+        )
+
         self.add_checkbox(
             "run.auto_cd",
             tr("Change working directory to script directory on Run / Debug"),
             row=5,
             columnspan=3,
+        )
+        self.add_checkbox(
+            "run.warn_module_shadowing",
+            tr("Warn if a user module shadows a library module"),
+            row=6,
+            columnspan=3,
             pady=(0, 20),
         )
 
diff --git a/thonny/plugins/shell_macro.py b/thonny/plugins/shell_macro.py
index dd9a4af..084c87e 100644
--- a/thonny/plugins/shell_macro.py
+++ b/thonny/plugins/shell_macro.py
@@ -24,7 +24,6 @@ class ShellMacroDialog(CommonDialog):
         self.main_command_text.focus_set()
 
     def _create_widgets(self):
-
         bg = "#ffff99"
         banner_frame = tk.Frame(self, background=bg)
         banner_frame.grid(row=0, column=0, sticky="nsew")
diff --git a/thonny/plugins/statement_boxes.py b/thonny/plugins/statement_boxes.py
index 353997a..097702d 100644
--- a/thonny/plugins/statement_boxes.py
+++ b/thonny/plugins/statement_boxes.py
@@ -13,7 +13,6 @@ from thonny.codeview import get_syntax_options_for_tag
 
 
 def create_bitmap_file(width, height, predicate, name):
-
     cache_dir = os.path.join(thonny.THONNY_USER_DIR, "image_cache")
     name = "%s_%d_%d.xbm" % (name, width, height)
     filename = os.path.join(cache_dir, name)
@@ -158,7 +157,6 @@ def add_tags(text):
         from parso.python import tree as python_tree
 
         if node.type == "simple_stmt" or isinstance(node, (python_tree.Flow, python_tree.Scope)):
-
             start_line, start_col = node.start_pos
             end_line, end_col = node.end_pos
 
@@ -180,7 +178,6 @@ def add_tags(text):
             # exceptions: several statements on the same line (semicoloned statements)
             # also unclosed parens in if-header
             for lineno in range(start_line, end_line if end_col == 0 else end_line + 1):
-
                 top = lineno == start_line and lineno > 1
                 bottom = False  # start_line == end_line-1
 
diff --git a/thonny/plugins/stdlib_error_helpers.py b/thonny/plugins/stdlib_error_helpers.py
index 6368de8..2e5d7b9 100644
--- a/thonny/plugins/stdlib_error_helpers.py
+++ b/thonny/plugins/stdlib_error_helpers.py
@@ -104,7 +104,6 @@ class SyntaxErrorHelper(ErrorHelper):
                     ]
                     and self.tokens[i].string != ":"
                 ):
-
                     old_i = i
                     if self.tokens[i].string in "([{":
                         i = self._skip_braced_part(i)
@@ -163,7 +162,6 @@ class SyntaxErrorHelper(ErrorHelper):
         level = 1
         token_index += 1
         while token_index < len(self.tokens):
-
             if self.tokens[token_index].string in ["(", "[", "{"]:
                 level += 1
             elif self.tokens[token_index].string in [")", "]", "}"]:
@@ -271,7 +269,6 @@ class NameErrorHelper(ErrorHelper):
         )
 
     def _sug_bad_spelling(self):
-
         # Yes, it would be more proper to consult builtins from the backend,
         # but it's easier this way...
         all_names = {name for name in dir(builtins) if not name.startswith("_")}
@@ -496,7 +493,6 @@ class AttributeErrorHelper(ErrorHelper):
         ]
 
     def _sug_wrong_attribute_instead_of_len(self):
-
         if self.type_name == "str":
             goal = "length"
         elif self.type_name == "bytes":
diff --git a/thonny/plugins/system_shell/explain_environment.py b/thonny/plugins/system_shell/explain_environment.py
index e0de297..aa40c8f 100755
--- a/thonny/plugins/system_shell/explain_environment.py
+++ b/thonny/plugins/system_shell/explain_environment.py
@@ -46,7 +46,7 @@ def is_private_exe(p):
 
 
 def list_commands(prefix, highlighted_reals, highlighted_dirs):
-    for suffix in ["", "3", "3.8", "3.9", "3.10", "3.11"]:
+    for suffix in ["", "3", "3.8", "3.9", "3.10", "3.11", "3.12"]:
         cmd = prefix + suffix
         import shutil
 
diff --git a/thonny/plugins/theme_and_font_config_page.py b/thonny/plugins/theme_and_font_config_page.py
index 19845f1..87abd00 100644
--- a/thonny/plugins/theme_and_font_config_page.py
+++ b/thonny/plugins/theme_and_font_config_page.py
@@ -13,7 +13,6 @@ from thonny.ui_utils import create_string_var, scrollbar_style
 
 class ThemeAndFontConfigurationPage(ConfigurationPage):
     def __init__(self, master):
-
         ConfigurationPage.__init__(self, master)
 
         self._init_themes()
diff --git a/thonny/plugins/todo_view.py b/thonny/plugins/todo_view.py
index d8123cf..2daadc0 100644
--- a/thonny/plugins/todo_view.py
+++ b/thonny/plugins/todo_view.py
@@ -14,7 +14,6 @@ INFO_TEXT = "---"
 
 class TodoView(ui_utils.TreeFrame):
     def __init__(self, master):
-
         ui_utils.TreeFrame.__init__(
             self,
             master,
@@ -81,7 +80,6 @@ class TodoView(ui_utils.TreeFrame):
             self._update(event)
 
     def _update(self, event):
-
         if not self.winfo_ismapped():
             return
 
@@ -105,7 +103,7 @@ class TodoView(ui_utils.TreeFrame):
 
         # todo support of other file types and introducing comment tags
 
-        r_ex = r"^.*((#[\t ]*(TODO|BUG|FIXME|ERROR|NOTE|REMARK)([:\t ]*))(.*))$"
+        r_ex = r"^.*((#.*[\t ]*(TODO|BUG|FIXME|ERROR|NOTE|REMARK)([:\t ]*))(.*))$"
         r_match = re.compile(r_ex, re.IGNORECASE | re.MULTILINE)
 
         line_no = 0
diff --git a/thonny/rst_utils.py b/thonny/rst_utils.py
index bab5829..047975b 100644
--- a/thonny/rst_utils.py
+++ b/thonny/rst_utils.py
@@ -12,7 +12,6 @@ logger = getLogger(__name__)
 
 class RstText(TweakableText):
     def __init__(self, master=None, cnf={}, read_only=False, **kw):
-
         super().__init__(
             master=master,
             cnf=cnf,
diff --git a/thonny/running.py b/thonny/running.py
index f7cff66..ad77b4e 100644
--- a/thonny/running.py
+++ b/thonny/running.py
@@ -25,8 +25,17 @@ from tkinter import messagebox, ttk
 from typing import Any, Callable, Dict, List, Optional, Set, Union  # @UnusedImport; @UnusedImport
 
 import thonny
-from thonny import THONNY_USER_DIR, common, get_runner, get_shell, get_workbench, report_time
+from thonny import (
+    THONNY_USER_DIR,
+    common,
+    get_runner,
+    get_shell,
+    get_version,
+    get_workbench,
+    report_time,
+)
 from thonny.common import (
+    PROCESS_ACK,
     BackendEvent,
     CommandToBackend,
     DebuggerCommand,
@@ -85,10 +94,46 @@ io_animation_required = False
 
 _console_allocated = False
 
+BASE_MODULES = [
+    "_abc",
+    "_codecs",
+    "_collections_abc",
+    "_distutils_hack",
+    "_frozen_importlib",
+    "_frozen_importlib_external",
+    "_imp",
+    "_io",
+    "_signal",
+    "_sitebuiltins",
+    "_stat",
+    "_thread",
+    "_warnings",
+    "_weakref",
+    "_winapi",
+    "abc",
+    "builtins",
+    "codecs",
+    "encodings",
+    "genericpath",
+    "io",
+    "marshal",
+    "nt",
+    "ntpath",
+    "os",
+    "site",
+    "stat",
+    "sys",
+    "time",
+    "winreg",
+    "zipimport",
+]
+
 
 class Runner:
     def __init__(self) -> None:
+        get_workbench().set_default("run.allow_running_unnamed_programs", True)
         get_workbench().set_default("run.auto_cd", True)
+        get_workbench().set_default("run.warn_module_shadowing", True)
 
         self._init_commands()
         self._state = "starting"
@@ -309,15 +354,12 @@ class Runner:
         assert self.is_running()
         self._proxy.send_program_input(data)
 
-    def execute_script(
+    def execute_via_shell(
         self,
-        script_path: str,
-        args: List[str],
+        cmd_line: Union[str, List[str]],
         working_directory: Optional[str] = None,
-        command_name: str = "Run",
     ) -> None:
-
-        if self._proxy.get_cwd() != working_directory:
+        if working_directory and self._proxy.get_cwd() != working_directory:
             # create compound command
             # start with %cd
             cd_cmd_line = construct_cd_command(working_directory) + "\n"
@@ -325,15 +367,27 @@ class Runner:
             # create simple command
             cd_cmd_line = ""
 
+        if not isinstance(cmd_line, str):
+            cmd_line = construct_cmd_line(cmd_line)
+
+        # submit to shell (shell will execute it)
+        get_shell().submit_magic_command(cd_cmd_line + cmd_line)
+
+    def execute_script(
+        self,
+        script_path: str,
+        args: List[str],
+        working_directory: Optional[str],
+        command_name: str = "Run",
+    ) -> None:
         rel_filename = universal_relpath(script_path, working_directory)
         cmd_parts = ["%" + command_name, rel_filename] + args
-        exe_cmd_line = construct_cmd_line(cmd_parts, [EDITOR_CONTENT_TOKEN]) + "\n"
+        cmd_line = construct_cmd_line(cmd_parts, [EDITOR_CONTENT_TOKEN])
 
-        # submit to shell (shell will execute it)
-        get_shell().submit_magic_command(cd_cmd_line + exe_cmd_line)
+        self.execute_via_shell(cmd_line, working_directory)
 
     def execute_editor_content(self, command_name, args):
-        if command_name.lower() == "debug":
+        if command_name.lower() in ["debug", "fastdebug"]:
             messagebox.showinfo(
                 tr("Information"),
                 tr("For debugging the program must be saved first."),
@@ -393,7 +447,9 @@ class Runner:
             return
 
         UNTITLED = "<untitled>"
-        if editor.get_filename():
+        if editor.get_filename() or not get_workbench().get_option(
+            "run.allow_running_unnamed_programs"
+        ):
             filename = editor.save_file()
             if not filename:
                 # user has cancelled file saving
@@ -510,6 +566,8 @@ class Runner:
                     return None
             elif isinstance(widget, (tk.Listbox, ttk.Entry, tk.Entry, tk.Spinbox)):
                 try:
+                    # NB! On Linux, selection_get() gives X selection
+                    # i.e. it may be from another application when Thonny has nothing selected
                     selection = widget.selection_get()
                     if isinstance(selection, str) and len(selection) > 0:
                         # Assuming user meant to copy, not interrupt
@@ -652,7 +710,7 @@ class Runner:
 
     def restart_backend(self, clean: bool, first: bool = False, automatic: bool = False) -> None:
         """Recreate (or replace) backend proxy / backend process."""
-
+        was_running = self.is_running()
         self.destroy_backend()
         backend_name = get_workbench().get_option("run.backend_name")
         if backend_name not in get_workbench().get_backends():
@@ -668,7 +726,7 @@ class Runner:
         self._poll_backend_messages()
 
         if not first:
-            get_shell().restart(automatic=automatic)
+            get_shell().restart(automatic=automatic, was_running=was_running)
             get_shell().update_idletasks()
 
         get_workbench().event_generate("BackendRestart", full=True)
@@ -983,6 +1041,7 @@ class SubprocessProxy(BackendProxy, ABC):
         env["THONNY_FRONTEND_SYS_PATH"] = repr(sys.path)
 
         env["THONNY_LANGUAGE"] = get_workbench().get_option("general.language")
+        env["THONNY_VERSION"] = get_version()
 
         if thonny.in_debug_mode():
             env["THONNY_DEBUG"] = "1"
@@ -999,10 +1058,6 @@ class SubprocessProxy(BackendProxy, ABC):
                 f"Interpreter {self._mgmt_executable!r} not found.\nPlease select another!"
             )
             return
-            # raise UserError(
-            #    "Interpreter (%s) not found. Please recheck corresponding option!"
-            #    % self._mgmt_executable
-            # )
 
         cmd_line = (
             [
@@ -1015,6 +1070,9 @@ class SubprocessProxy(BackendProxy, ABC):
             + extra_args
         )
 
+        if self.can_be_isolated():
+            cmd_line.insert(1, "-I")
+
         creationflags = 0
         if running_on_windows():
             creationflags = subprocess.CREATE_NEW_PROCESS_GROUP
@@ -1035,17 +1093,30 @@ class SubprocessProxy(BackendProxy, ABC):
             encoding="utf-8",
         )
 
-        self._send_initial_input()
+        # read success acknowledgement
+        ack = self._proc.stdout.readline()
 
         # setup asynchronous output listeners
         Thread(target=self._listen_stdout, args=(self._proc.stdout,), daemon=True).start()
         Thread(target=self._listen_stderr, args=(self._proc.stderr,), daemon=True).start()
 
+        # only attempt initial input if process started nicely,
+        # otherwise can't read the error from stderr
+        if ack.strip() == PROCESS_ACK:
+            self._send_initial_input()
+        else:
+            get_shell().print_error(
+                f"INTERNAL ERROR, got {ack!r} instead of {PROCESS_ACK!r}\n---\n"
+            )
+
     def _send_initial_input(self) -> None:
+        # Used for sending data sending for startup, which can't be send by other means
+        # (e.g. don't want the password to end up in logs)
+
         pass
 
     def _get_launch_cwd(self):
-        return self.get_cwd() if self.uses_local_filesystem() else None
+        return get_workbench().get_local_cwd()
 
     def _get_launcher_with_args(self):
         raise NotImplementedError()
@@ -1221,6 +1292,10 @@ class SubprocessProxy(BackendProxy, ABC):
     def get_exe_dirs(self):
         return self._exe_dirs
 
+    def can_be_isolated(self) -> bool:
+        """Says whether the backend may be launched with -I switch"""
+        return True
+
     def fetch_next_message(self):
         if not self._response_queue or len(self._response_queue) == 0:
             if self.is_terminated():
@@ -1318,7 +1393,6 @@ def _create_python_process(
     env=None,
     universal_newlines=True,
 ):
-
     cmd = [python_exe] + args
 
     if running_on_windows():
@@ -1489,6 +1563,8 @@ class InlineCommandDialog(WorkDialog):
         self.response = None
         self._title = title
         self._instructions = instructions
+        if "id" not in cmd:
+            cmd["id"] = generate_command_id()
         self._cmd = cmd
         self.returncode = None
 
diff --git a/thonny/shell.py b/thonny/shell.py
index fc2355b..1ca1d84 100644
--- a/thonny/shell.py
+++ b/thonny/shell.py
@@ -259,8 +259,8 @@ class ShellView(tk.PanedWindow):
 
         self.text.submit_command(cmd_line, ("magic",))
 
-    def restart(self, automatic: bool = False):
-        self.text.restart(automatic)
+    def restart(self, automatic: bool = False, was_running: bool = False):
+        self.text.restart(automatic, was_running)
 
     def clear_shell(self):
         self.text._clear_shell()
@@ -937,10 +937,14 @@ class BaseShellText(EnhancedTextWithLogging, SyntaxText):
 
         self.tag_configure("io", tabs=tabs, tabstyle="wordprocessor")
 
-    def restart(self, automatic: bool = False):
+    def restart(self, automatic: bool = False, was_running: bool = False):
         logger.info("BaseShellText.restart(%r)", automatic)
         self.set_read_only(False)
-        if get_workbench().get_option("shell.clear_for_new_process") and not automatic:
+        if (
+            get_workbench().get_option("shell.clear_for_new_process")
+            and not automatic
+            and not was_running
+        ):
             self._clear_content("end")
         else:
             if (
@@ -1177,7 +1181,6 @@ class BaseShellText(EnhancedTextWithLogging, SyntaxText):
         return get_runner() is not None
 
     def _extract_submittable_input(self, input_text, tail):
-
         if get_runner().is_waiting_toplevel_command():
             if input_text.endswith("\n"):
                 if input_text.strip().startswith("%") or input_text.strip().startswith("!"):
@@ -1499,7 +1502,6 @@ class BaseShellText(EnhancedTextWithLogging, SyntaxText):
 
     def _show_user_exception(self, user_exception):
         for line, frame_id, *_ in user_exception["items"]:
-
             tags = ("io", "stderr")
             if frame_id is not None:
                 frame_tag = "frame_%d" % frame_id
@@ -1575,7 +1577,6 @@ class BaseShellText(EnhancedTextWithLogging, SyntaxText):
                 break
 
         self.tag_remove("value", "1.0", end_index)
-        self.tag_remove("stacktrace_hyperlink", "1.0", end_index)
 
         while len(self.active_extra_tags) > 0:
             self.tag_remove(self.active_extra_tags.pop(), "1.0", "end")
@@ -1970,7 +1971,6 @@ class PlotterCanvas(tk.Canvas):
         return count
 
     def draw_segment(self, color, pos, nums):
-
         x = self.x_padding_left + pos * self.x_scale
 
         args = []
diff --git a/thonny/terminal.py b/thonny/terminal.py
index 4a6307f..c3e641e 100644
--- a/thonny/terminal.py
+++ b/thonny/terminal.py
@@ -130,7 +130,7 @@ def _run_in_terminal_in_macos(cmd, cwd, env_overrides, keep_open):
 
     common_prefix = os.path.normpath(sys.prefix).rstrip("/")
     cmds = (
-        "export THOPR=" + common_prefix + " ; " + cmds.replace(common_prefix + "/", "$THOPR" + "/")
+        " export THOPR=" + common_prefix + " ; " + cmds.replace(common_prefix + "/", "$THOPR" + "/")
     )
     print(cmds)
 
diff --git a/thonny/test/plugins/test_locals_marker.py b/thonny/test/plugins/test_locals_marker.py
index f3ce358..220386f 100644
--- a/thonny/test/plugins/test_locals_marker.py
+++ b/thonny/test/plugins/test_locals_marker.py
@@ -15,7 +15,6 @@ def joo():
 
 
 def test_regular_closed():
-
     expected_local = {("5.4", "5.12"), ("6.10", "6.18"), ("6.21", "6.29")}
 
     text_widget = tkinter.Text()
diff --git a/thonny/tktextext.py b/thonny/tktextext.py
index 1da77c1..31f84f2 100644
--- a/thonny/tktextext.py
+++ b/thonny/tktextext.py
@@ -749,7 +749,6 @@ class EnhancedText(TweakableText):
             self.mark_set("insert", "@%d,%d" % (event.x, event.y))
 
     def _reload_theme_options(self, event=None):
-
         style = ttk.Style()
 
         states = []
@@ -1174,7 +1173,6 @@ class EnhancedTextFrame(TextFrame):
             self._reload_gutter_theme_options(event)
 
     def _reload_gutter_theme_options(self, event=None):
-
         style = ttk.Style()
         background = style.lookup("GUTTER", "background")
         if background:
diff --git a/thonny/udisks.py b/thonny/udisks.py
new file mode 100644
index 0000000..7823a8e
--- /dev/null
+++ b/thonny/udisks.py
@@ -0,0 +1,130 @@
+# -*- coding: utf-8 -*-
+
+import asyncio
+import os
+from logging import getLogger
+from typing import Sequence
+
+from dbus_next.aio import MessageBus
+from dbus_next.constants import BusType
+from dbus_next.errors import DBusError
+
+logger = getLogger(__name__)
+
+UDISKS2_BUS_NAME = "org.freedesktop.UDisks2"
+
+
+def list_volumes_sync() -> Sequence[str]:
+    loop = asyncio.get_event_loop()
+    return loop.run_until_complete(list_volumes())
+
+
+async def list_volumes() -> Sequence[str]:
+    bus = await MessageBus(bus_type=BusType.SYSTEM).connect()
+
+    introspection = None
+    with open(
+        os.path.join(os.path.dirname(__file__), "dbus", "org.freedesktop.UDisks2.xml"), "r"
+    ) as f:
+        introspection = f.read()
+
+    object_manager_introspection = None
+    with open(
+        os.path.join(os.path.dirname(__file__), "dbus", "org.freedesktop.DBus.ObjectManager.xml"),
+        "r",
+    ) as f:
+        object_manager_introspection = f.read()
+
+    proxy_object = bus.get_proxy_object(
+        UDISKS2_BUS_NAME, "/org/freedesktop/UDisks2/Manager", introspection
+    )
+
+    interface = proxy_object.get_interface("org.freedesktop.UDisks2.Manager")
+
+    block_devices = await interface.call_get_block_devices({})
+    logger.debug(f"Block devices: {block_devices}")
+
+    proxy_object = bus.get_proxy_object(
+        UDISKS2_BUS_NAME, "/org/freedesktop/UDisks2", object_manager_introspection
+    )
+    interface = proxy_object.get_interface("org.freedesktop.DBus.ObjectManager")
+    managed_objects = await interface.call_get_managed_objects()
+    logger.debug(f"Managed objects: {managed_objects}")
+
+    # Find all drives
+    drives = []
+    for device, values in managed_objects.items():
+        type = next(iter(values))
+        if type == "org.freedesktop.UDisks2.Drive":
+            drives.append(device)
+    logger.debug(f"\nDrives: {drives}\n")
+
+    discovered_usb_drives = []
+    for a_drive in drives:
+        proxy_object = bus.get_proxy_object(UDISKS2_BUS_NAME, a_drive, introspection)
+        interface = proxy_object.get_interface("org.freedesktop.UDisks2.Drive")
+        connection_bus = await interface.get_connection_bus()
+        time_media_detected = await interface.get_time_media_detected()
+        if connection_bus == "usb":
+            discovered_usb_drives.append(
+                {
+                    "drive": a_drive,
+                    "time_media_detected": time_media_detected,
+                }
+            )
+    logger.debug(f"\nUSB Drives: {discovered_usb_drives}\n")
+
+    if len(discovered_usb_drives) == 0:
+        logger.debug("No USB drive found")
+        return []
+
+    # Find the block devices associated with each USB drive
+    discovered_block_devices = []
+    for block_device in block_devices:
+        proxy_object = bus.get_proxy_object(UDISKS2_BUS_NAME, block_device, introspection)
+        interface = proxy_object.get_interface("org.freedesktop.UDisks2.Block")
+        id_usage = await interface.get_id_usage()
+        if id_usage != "filesystem":
+            continue
+        a_drive = await interface.get_drive()
+        for dictionary in discovered_usb_drives:
+            if dictionary["drive"] == a_drive:
+                discovered_block_devices.append(
+                    {
+                        "block_device": block_device,
+                        "time_media_detected": dictionary["time_media_detected"],
+                    }
+                )
+                break
+    logger.debug(f"\nDiscovered Block Devices: {discovered_block_devices}\n")
+
+    if len(discovered_block_devices) == 0:
+        logger.debug("No block devices found")
+        return []
+
+    # In case there are multiple block devices detected, sort by time the device was detected.
+    # Most recently detected are placed first.
+    discovered_block_devices = sorted(
+        discovered_block_devices, key=lambda x: x.get("time_media_detected")
+    )
+    discovered_block_devices = [i["block_device"] for i in discovered_block_devices]
+
+    discovered_mount_points = []
+    for block_device in discovered_block_devices:
+        # Make sure that the filesystem is mounted and get the mount point.
+        proxy_object = bus.get_proxy_object(UDISKS2_BUS_NAME, block_device, introspection)
+        interface = proxy_object.get_interface("org.freedesktop.UDisks2.Filesystem")
+
+        mount_point = None
+        try:
+            mount_point = await interface.call_mount({})
+        except DBusError as error:
+            if "is already mounted" not in error.text:
+                raise
+            mount_points = await interface.get_mount_points()
+            # todo Double check that I don't need to account for endianess or other encoding formats here.
+            mount_point = mount_points[0].decode("utf-8")
+        discovered_mount_points.append(mount_point.rstrip("\x00"))
+    logger.debug(f"\nFilesystem Mount Points: {discovered_mount_points}\n")
+
+    return discovered_mount_points
diff --git a/thonny/ui_utils.py b/thonny/ui_utils.py
index 56d3f1d..04d2e1a 100644
--- a/thonny/ui_utils.py
+++ b/thonny/ui_utils.py
@@ -33,7 +33,7 @@ logger = getLogger(__name__)
 
 
 class CommonDialog(tk.Toplevel):
-    def __init__(self, master=None, **kw):
+    def __init__(self, master=None, skip_tk_dialog_attributes=False, **kw):
         assert master
         super().__init__(master=master, class_="Thonny", **kw)
         self.withdraw()  # remain invisible until size calculations are done
@@ -41,11 +41,14 @@ class CommonDialog(tk.Toplevel):
         # TODO: Is it still required ?
         # self.bind("<FocusIn>", self._unlock_on_focus_in, True)
 
-        # https://bugs.python.org/issue43655
-        if self._windowingsystem == "aqua":
-            self.tk.call("::tk::unsupported::MacWindowStyle", "style", self, "moveableModal", "")
-        elif self._windowingsystem == "x11":
-            self.wm_attributes("-type", "dialog")
+        if not skip_tk_dialog_attributes:
+            # https://bugs.python.org/issue43655
+            if self._windowingsystem == "aqua":
+                self.tk.call(
+                    "::tk::unsupported::MacWindowStyle", "style", self, "moveableModal", ""
+                )
+            elif self._windowingsystem == "x11":
+                self.wm_attributes("-type", "dialog")
 
         self.parent = master
 
@@ -481,8 +484,10 @@ class ClosableNotebook(ttk.Notebook):
         if running_on_mac_os():
             self.bind("<ButtonPress-2>", self._right_btn_press, True)
             self.bind("<Control-Button-1>", self._right_btn_press, True)
+            self.bind("<ButtonPress-3>", self._middle_btn_press, True)
         else:
             self.bind("<ButtonPress-3>", self._right_btn_press, True)
+            self.bind("<ButtonPress-2>", self._middle_btn_press, True)
 
         # self._check_update_style()
 
@@ -531,6 +536,14 @@ class ClosableNotebook(ttk.Notebook):
         except Exception:
             logger.exception("Opening tab menu")
 
+    def _middle_btn_press(self, event):
+        try:
+            index = self.index("@%d,%d" % (event.x, event.y))
+            self.close_tab(index)
+
+        except Exception:
+            logger.exception("Middle click on tab")
+
     def _close_tab_from_menu(self):
         self.close_tab(self._popup_index)
 
@@ -833,6 +846,7 @@ def sequence_to_accelerator(sequence):
         .replace("minus", "-")
         .replace("Plus", "+")
         .replace("plus", "+")
+        .replace("space", "Space")
     )
 
     return accelerator
@@ -1316,7 +1330,6 @@ class NoteBox(CommonDialog):
         self._current_chars += chars
 
     def place(self, target, focus=None):
-
         # Compute the area that will be described by this Note
         focus_x = target.winfo_rootx()
         focus_y = target.winfo_rooty()
@@ -1375,7 +1388,6 @@ class NoteBox(CommonDialog):
         self.deiconify()
 
     def show_note(self, *content_items: Union[str, List], target=None, focus=None) -> None:
-
         self.set_content(*content_items)
         self.place(target, focus)
 
@@ -1976,28 +1988,60 @@ def _get_dialog_provider():
     return filedialog
 
 
+def try_restore_focus_after_file_dialog(dialog_parent):
+    if dialog_parent is None:
+        return
+
+    logger.info("Restoring focus to %s", dialog_parent)
+    old_focused_widget = dialog_parent.winfo_toplevel().focus_get()
+
+    dialog_parent.winfo_toplevel().lift()
+    dialog_parent.winfo_toplevel().focus_force()
+    dialog_parent.winfo_toplevel().grab_set()
+    if running_on_mac_os():
+        dialog_parent.winfo_toplevel().grab_release()
+
+    if old_focused_widget is not None:
+        try:
+            old_focused_widget.focus_force()
+        except TclError:
+            logger.warning("Could not restore focus to %r", old_focused_widget)
+
+
 def asksaveasfilename(**options):
     # https://tcl.tk/man/tcl8.6/TkCmd/getOpenFile.htm
-    _check_dialog_parent(options)
-    return _get_dialog_provider().asksaveasfilename(**options)
+    parent = _check_dialog_parent(options)
+    try:
+        return _get_dialog_provider().asksaveasfilename(**options)
+    finally:
+        try_restore_focus_after_file_dialog(parent)
 
 
 def askopenfilename(**options):
     # https://tcl.tk/man/tcl8.6/TkCmd/getOpenFile.htm
-    _check_dialog_parent(options)
-    return _get_dialog_provider().askopenfilename(**options)
+    parent = _check_dialog_parent(options)
+    try:
+        return _get_dialog_provider().askopenfilename(**options)
+    finally:
+        try_restore_focus_after_file_dialog(parent)
 
 
 def askopenfilenames(**options):
     # https://tcl.tk/man/tcl8.6/TkCmd/getOpenFile.htm
-    _check_dialog_parent(options)
-    return _get_dialog_provider().askopenfilenames(**options)
+    parent = _check_dialog_parent(options)
+    try:
+        return _get_dialog_provider().askopenfilenames(**options)
+    finally:
+        try_restore_focus_after_file_dialog(parent)
 
 
 def askdirectory(**options):
     # https://tcl.tk/man/tcl8.6/TkCmd/chooseDirectory.htm
-    _check_dialog_parent(options)
-    return _get_dialog_provider().askdirectory(**options)
+    parent = _check_dialog_parent(options)
+    try:
+        return _get_dialog_provider().askdirectory(**options)
+    finally:
+        try_restore_focus_after_file_dialog(parent)
 
 
 def _check_dialog_parent(options):
@@ -2030,6 +2074,8 @@ def _check_dialog_parent(options):
         del options["master"]
         del options["parent"]
 
+    return parent
+
 
 class _ZenityDialogProvider:
     # https://www.writebash.com/bash-gui/zenity-create-file-selection-dialog-224.html
@@ -2052,8 +2098,6 @@ class _ZenityDialogProvider:
     def asksaveasfilename(cls, **options):
         args = cls._convert_common_options("Save as", **options)
         args.append("--save")
-        if options.get("confirmoverwrite", True):
-            args.append("--confirm-overwrite")
 
         filename = cls._call(args)
         if not filename:
@@ -2078,7 +2122,6 @@ class _ZenityDialogProvider:
         parent = options.get("parent", options.get("master", None))
         if parent is not None:
             args.append("--modal")
-            args.append("--attach=%s" % hex(parent.winfo_id()))
 
         for desc, pattern in options.get("filetypes", ()):
             # zenity requires star before extension
@@ -2097,7 +2140,7 @@ class _ZenityDialogProvider:
 
     @classmethod
     def _call(cls, args):
-        args = ["zenity", "--name=Thonny", "--class=Thonny"] + args
+        args = ["zenity"] + args
         result = subprocess.run(
             args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True
         )
@@ -2159,7 +2202,7 @@ def handle_mistreated_latin_shortcuts(registry, event):
                     handler()
 
 
-def show_dialog(dlg, master=None, width=None, height=None):
+def show_dialog(dlg, master=None, width=None, height=None, modal=True):
     if getattr(dlg, "closed", False):
         return
 
@@ -2182,12 +2225,19 @@ def show_dialog(dlg, master=None, width=None, height=None):
     _place_window(dlg, master, width=width, height=height)
 
     dlg.lift()
-    dlg.wait_visibility()
-
     try:
-        dlg.grab_set()
-    except TclError as e:
-        logger.warning("Can't grab: %s", e)
+        dlg.wait_visibility()
+    except tk.TclError as e:
+        if "was deleted before its visibility changed" in str(e):
+            return
+        else:
+            raise
+
+    if modal:
+        try:
+            dlg.grab_set()
+        except TclError as e:
+            logger.warning("Can't grab: %s", e)
 
     dlg.update_idletasks()
     dlg.focus_set()
@@ -2451,7 +2501,10 @@ class MappingCombobox(ttk.Combobox):
         self.mapping_desc_variable = tk.StringVar(value="")
         self.configure(textvariable=self.mapping_desc_variable)
 
-        self.state(["!disabled", "readonly"])
+        if kw.get("state", None) == "disabled":
+            self.state(["readonly"])
+        else:
+            self.state(["!disabled", "readonly"])
 
     def set_mapping(self, mapping: Dict[str, Any]):
         self.mapping = mapping
@@ -2494,9 +2547,21 @@ class AdvancedLabel(ttk.Label):
 
     def _on_click(self, *event):
         if self._url:
-            import webbrowser
+            if os.path.isdir(self._url):
+                open_with_default_app(self._url)
+            else:
+                import webbrowser
 
-            webbrowser.open(self._url)
+                webbrowser.open(self._url)
+
+
+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])
 
 
 if __name__ == "__main__":
diff --git a/thonny/vendored_libs/filelock/__init__.py b/thonny/vendored_libs/filelock/__init__.py
index afcdb70..36fe7e4 100644
--- a/thonny/vendored_libs/filelock/__init__.py
+++ b/thonny/vendored_libs/filelock/__init__.py
@@ -9,6 +9,7 @@ from __future__ import annotations
 
 import sys
 import warnings
+from typing import TYPE_CHECKING
 
 from ._api import AcquireReturnProxy, BaseFileLock
 from ._error import Timeout
@@ -33,7 +34,10 @@ else:  # pragma: win32 no cover
 
 #: Alias for the lock, which should be used for the current platform. On Windows, this is an alias for
 # :class:`WindowsFileLock`, on Unix for :class:`UnixFileLock` and otherwise for :class:`SoftFileLock`.
-FileLock: type[BaseFileLock] = _FileLock
+if TYPE_CHECKING:
+    FileLock = SoftFileLock
+else:
+    FileLock = _FileLock
 
 
 __all__ = [
diff --git a/thonny/vendored_libs/filelock/_api.py b/thonny/vendored_libs/filelock/_api.py
index 282106f..273b82e 100644
--- a/thonny/vendored_libs/filelock/_api.py
+++ b/thonny/vendored_libs/filelock/_api.py
@@ -44,9 +44,9 @@ class BaseFileLock(ABC, contextlib.ContextDecorator):
         Create a new lock object.
 
         :param lock_file: path to the file
-        :param timeout: default timeout when acquiring the lock. It will be used as fallback value in the acquire
-        method, if no timeout value (``None``) is given. If you want to disable the timeout, set it to a negative value.
-         A timeout of 0 means, that there is exactly one attempt to acquire the file lock.
+        :param timeout: default timeout when acquiring the lock, in seconds. It will be used as fallback value in
+        the acquire method, if no timeout value (``None``) is given. If you want to disable the timeout, set it
+        to a negative value. A timeout of 0 means, that there is exactly one attempt to acquire the file lock.
         """
         # The path to the lock file.
         self._lock_file: str = os.fspath(lock_file)
@@ -56,7 +56,7 @@ class BaseFileLock(ABC, contextlib.ContextDecorator):
         self._lock_file_fd: int | None = None
 
         # The default timeout value.
-        self.timeout: float = timeout
+        self._timeout: float = timeout
 
         # We use this lock primarily for the lock counter.
         self._thread_lock: Lock = Lock()
@@ -73,7 +73,7 @@ class BaseFileLock(ABC, contextlib.ContextDecorator):
     @property
     def timeout(self) -> float:
         """
-        :return: the default timeout value
+        :return: the default timeout value, in seconds
 
         .. versionadded:: 2.0.0
         """
@@ -84,7 +84,7 @@ class BaseFileLock(ABC, contextlib.ContextDecorator):
         """
         Change the default timeout value.
 
-        :param value: the new value
+        :param value: the new value, in seconds
         """
         self._timeout = float(value)
 
@@ -116,6 +116,7 @@ class BaseFileLock(ABC, contextlib.ContextDecorator):
         poll_interval: float = 0.05,
         *,
         poll_intervall: float | None = None,
+        blocking: bool = True,
     ) -> AcquireReturnProxy:
         """
         Try to acquire the file lock.
@@ -124,6 +125,8 @@ class BaseFileLock(ABC, contextlib.ContextDecorator):
          if ``timeout < 0``, there is no timeout and this method will block until the lock could be acquired
         :param poll_interval: interval of trying to acquire the lock file
         :param poll_intervall: deprecated, kept for backwards compatibility, use ``poll_interval`` instead
+        :param blocking: defaults to True. If False, function will return immediately if it cannot obtain a lock on the
+         first attempt. Otherwise this method will block until the timeout expires or the lock is acquired.
         :raises Timeout: if fails to acquire lock within the timeout period
         :return: a context object that will unlock the file when the context is exited
 
@@ -172,6 +175,9 @@ class BaseFileLock(ABC, contextlib.ContextDecorator):
                 if self.is_locked:
                     _LOGGER.debug("Lock %s acquired on %s", lock_id, lock_filename)
                     break
+                elif blocking is False:
+                    _LOGGER.debug("Failed to immediately acquire lock %s on %s", lock_id, lock_filename)
+                    raise Timeout(self._lock_file)
                 elif 0 <= timeout < time.monotonic() - start_time:
                     _LOGGER.debug("Timeout on acquiring lock %s on %s", lock_id, lock_filename)
                     raise Timeout(self._lock_file)
diff --git a/thonny/vendored_libs/filelock/version.py b/thonny/vendored_libs/filelock/version.py
index 04265ee..6477018 100644
--- a/thonny/vendored_libs/filelock/version.py
+++ b/thonny/vendored_libs/filelock/version.py
@@ -1,5 +1,4 @@
-# coding: utf-8
 # file generated by setuptools_scm
 # don't change, don't track in version control
-version = '3.6.0'
-version_tuple = (3, 6, 0)
+__version__ = version = '3.9.0'
+__version_tuple__ = version_tuple = (3, 9, 0)
diff --git a/thonny/vendored_libs/pipkin/__init__.py b/thonny/vendored_libs/pipkin/__init__.py
index feb9fdc..37b6d44 100644
--- a/thonny/vendored_libs/pipkin/__init__.py
+++ b/thonny/vendored_libs/pipkin/__init__.py
@@ -4,13 +4,13 @@ import sys
 import traceback
 from typing import List, Optional
 
-from pipkin.adapters import create_adapter
+from pipkin.adapters import Adapter, DummyAdapter, create_adapter
 from pipkin.common import ManagementError, UserError
 from pipkin.session import Session
 
 logger = logging.getLogger("pipkin")
 
-__version__ = "1.0b4"
+__version__ = "2.0b2"
 
 
 def error(msg):
@@ -41,7 +41,11 @@ def main(raw_args: Optional[List[str]] = None) -> int:
     args_dict = vars(args)
 
     try:
-        adapter = create_adapter(**args_dict)
+        adapter: Adapter
+        if args.command == "cache":
+            adapter = DummyAdapter()
+        else:
+            adapter = create_adapter(**args_dict)
         session = Session(adapter)
         try:
             command_handler = getattr(session, args.command)
diff --git a/thonny/vendored_libs/pipkin/__main__.py b/thonny/vendored_libs/pipkin/__main__.py
index 21265c8..ad24ef9 100644
--- a/thonny/vendored_libs/pipkin/__main__.py
+++ b/thonny/vendored_libs/pipkin/__main__.py
@@ -1,8 +1,7 @@
-#!/usr/bin/env python3
 """
 MIT License
 
-Copyright (c) 2022 Aivar Annamaa
+Copyright (c) 2023 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
diff --git a/thonny/vendored_libs/pipkin/adapters.py b/thonny/vendored_libs/pipkin/adapters.py
index c7fe68b..6eeb2b8 100644
--- a/thonny/vendored_libs/pipkin/adapters.py
+++ b/thonny/vendored_libs/pipkin/adapters.py
@@ -81,6 +81,43 @@ class Adapter(ABC):
         ...
 
 
+class DummyAdapter(Adapter):
+    def get_user_packages_path(self) -> Optional[str]:
+        raise NotImplementedError()
+
+    def get_default_target(self) -> str:
+        raise NotImplementedError()
+
+    def list_dists(self, paths: List[str] = None) -> Dict[str, Tuple[str, str]]:
+        raise NotImplementedError()
+
+    def remove_dist(
+        self, dist_name: str, target: Optional[str] = None, above_target: bool = False
+    ) -> None:
+        raise NotImplementedError()
+
+    def read_file(self, path: str) -> bytes:
+        raise NotImplementedError()
+
+    def write_file(self, path: str, content: bytes) -> None:
+        raise NotImplementedError()
+
+    def join_path(self, *parts: str) -> str:
+        raise NotImplementedError()
+
+    def split_dir_and_basename(self, path: str) -> Tuple[str, str]:
+        raise NotImplementedError()
+
+    def normpath(self, path: str) -> str:
+        raise NotImplementedError()
+
+    def get_implementation_name_and_version_prefix(self) -> Tuple[str, str]:
+        raise NotImplementedError()
+
+    def get_mpy_cross_args(self) -> List[str]:
+        raise NotImplementedError()
+
+
 class BaseAdapter(Adapter, ABC):
     def __init__(self):
         self._ensured_directories = set()
@@ -423,7 +460,7 @@ class DirAdapter(LocalMirrorAdapter):
 
     def fetch_sys_implementation(self) -> Tuple[str, str, int]:
         # TODO:
-        return ("micropython", "1.18", 0)
+        return ("micropython", "1.20", 0)
 
     def get_default_target(self) -> str:
         return "/"
diff --git a/thonny/vendored_libs/pipkin/bare_metal.py b/thonny/vendored_libs/pipkin/bare_metal.py
index eed9daa..4e3d2ba 100644
--- a/thonny/vendored_libs/pipkin/bare_metal.py
+++ b/thonny/vendored_libs/pipkin/bare_metal.py
@@ -96,7 +96,6 @@ class BareMetalAdapter(BaseAdapter, ABC):
         write_block_size: Optional[int] = None,
         write_block_delay: Optional[float] = None,
     ) -> Tuple[str, int, float]:
-
         if submit_mode is None:
             submit_mode = RAW_PASTE_SUBMIT_MODE
 
@@ -194,7 +193,6 @@ class BareMetalAdapter(BaseAdapter, ABC):
         return None
 
     def read_file(self, path: str) -> bytes:
-
         hex_mode = self._should_hexlify(path)
 
         open_script = f"__pipkin_fp = __pipkin_helper.builtins.open({path!r}, 'rb')"
@@ -249,7 +247,7 @@ class BareMetalAdapter(BaseAdapter, ABC):
             dedent(
                 f"""
             try:
-                __pipkin_helper.os.stat({path!r})
+                __pipkin_helper.os.stat({path!r}) and None
             except __pipkin_helper.builtins.OSError:
                 pass
             else:
@@ -276,7 +274,7 @@ class BareMetalAdapter(BaseAdapter, ABC):
             dedent(
                 f"""
             try:
-                __pipkin_helper.os.stat({path!r})
+                __pipkin_helper.os.stat({path!r}) and None
             except __pipkin_helper.builtins.OSError:
                 __pipkin_helper.os.mkdir({path!r})
         """
@@ -389,7 +387,7 @@ class BareMetalAdapter(BaseAdapter, ABC):
             data += self._connection.read(1, timeout=1, timeout_is_soft=True)
             data += self._connection.read_all()
             logger.error(
-                "Could not read command confirmation for script\n\n: %s\n\n" "Got: %r",
+                "Could not read command confirmation for script\n\n: %s\n\n" + "Got: %r",
                 script_bytes,
                 data,
             )
@@ -498,7 +496,7 @@ class BareMetalAdapter(BaseAdapter, ABC):
         self._write(NORMAL_MODE_CMD)
         self._log_output_until_active_prompt()
         assert self._last_prompt == NORMAL_PROMPT, (
-            "Could not get normal prompt, got %s" % self._last_prompt
+            "Could not get normal prompt, got %r" % self._last_prompt
         )
 
     def _log_output_until_active_prompt(self, timeout: float = WAIT_OR_CRASH_TIMEOUT) -> None:
@@ -523,7 +521,6 @@ class BareMetalAdapter(BaseAdapter, ABC):
         output_consumer: OutputConsumer,
         timeout: float,
     ):
-
         PROMPT_MARKERS = [NORMAL_PROMPT, EOT + RAW_PROMPT, FIRST_RAW_PROMPT]
         PROMPT_MARKERS_RE = re.compile(
             b"|".join(
diff --git a/thonny/vendored_libs/pipkin/connection.py b/thonny/vendored_libs/pipkin/connection.py
index cf8706a..62c8378 100644
--- a/thonny/vendored_libs/pipkin/connection.py
+++ b/thonny/vendored_libs/pipkin/connection.py
@@ -20,7 +20,7 @@ class MicroPythonConnection:
 
     def __init__(self):
         self.encoding = "utf-8"
-        self._read_queue = Queue()  # populated by reader thread
+        self._read_queue: Queue = Queue()  # populated by reader thread
         self._read_buffer = bytearray()  # used for unreading and postponing bytes
         self.num_bytes_received = 0
         self.startup_time = time.time()
diff --git a/thonny/vendored_libs/pipkin/proxy.py b/thonny/vendored_libs/pipkin/proxy.py
index 87af4fa..e854cef 100644
--- a/thonny/vendored_libs/pipkin/proxy.py
+++ b/thonny/vendored_libs/pipkin/proxy.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python3
 """
 MIT License
 
@@ -25,27 +24,39 @@ SOFTWARE.
 import copy
 import email.parser
 import errno
+import hashlib
 import io
 import json
 import logging
 import os.path
 import shlex
+import socket
 import subprocess
 import sys
 import tarfile
 import tempfile
+import textwrap
 import threading
+import zipfile
+from abc import ABC, abstractmethod
 from html.parser import HTMLParser
 from http.server import BaseHTTPRequestHandler, HTTPServer
 from socketserver import BaseServer
 from textwrap import dedent
-from typing import Dict, List, Optional, Tuple
+from typing import Any, Dict, List, Optional, Tuple, Union
 from urllib.error import HTTPError
 from urllib.request import urlopen
 
-from pipkin.util import normalize_dist_name, parse_dist_file_name
+from pkg_resources import safe_name, safe_version
 
-MP_ORG_INDEX = "https://micropython.org/pi"
+from pipkin.util import (
+    create_dist_info_version_name,
+    custom_normalize_dist_name,
+    parse_dist_file_name,
+)
+
+MP_ORG_INDEX_V1 = "https://micropython.org/pi"
+MP_ORG_INDEX_V2 = "https://micropython.org/pi/v2"
 PYPI_SIMPLE_INDEX = "https://pypi.org/simple"
 SERVER_ENCODING = "utf-8"
 
@@ -56,8 +67,11 @@ NORMALIZED_IRRELEVANT_PACKAGE_NAMES = {
     "adafruit_blinka_displayio",
     "adafruit_blinka_pyportal",
     "adafruit_python_extended_bus",
+    "numpy",
+    "pillow",
+    "pyasin1",
     "pyserial",
-    "adafruit_circuitpython_busdevice",
+    "scipy",
 }
 
 # For efficient caching it's better if the proxy always runs at the same port
@@ -95,186 +109,62 @@ class SimpleUrlsParser(HTMLParser):
         pass
 
 
-class BaseIndexDownloader:
+class BaseIndexDownloader(ABC):
     def __init__(self, index_url: str):
         self._index_url = index_url.rstrip("/")
-        self._file_urls_cache: Dict[str, Dict[str, str]] = {}
-
-    def get_file_urls(self, dist_name: str) -> Dict[str, str]:
-        if dist_name not in self._file_urls_cache:
-            self._file_urls_cache[dist_name] = self._download_file_urls(dist_name)
-
-        return self._file_urls_cache[dist_name]
 
-    def _download_file_urls(self, dist_name) -> Optional[Dict[str, str]]:
+    @abstractmethod
+    def get_dist_file_names(self, dist_name: str) -> Optional[List[str]]:
         raise NotImplementedError()
 
+    @abstractmethod
+    def get_file_content(self, dist_name: str, file_name: str) -> bytes:
+        raise NotImplementedError()
 
-class SimpleIndexDownloader(BaseIndexDownloader):
-    def _download_file_urls(self, dist_name) -> Optional[Dict[str, str]]:
-        url = f"{self._index_url}/{dist_name}"
-        logger.info("Downloading file urls from simple index %s", url)
-
-        try:
-            with urlopen(url) as fp:
-                parser = SimpleUrlsParser()
-                parser.feed(fp.read().decode("utf-8"))
-                return parser.file_urls
-        except HTTPError as e:
-            if e.code == 404:
-                return None
-            else:
-                raise e
-
-
-class JsonIndexDownloader(BaseIndexDownloader):
-    def _download_file_urls(self, dist_name) -> Optional[Dict[str, str]]:
-        metadata_url = f"{self._index_url}/{dist_name}/json"
-        logger.info("Downloading file urls from json index at %s", metadata_url)
-
-        result = {}
-        try:
-            with urlopen(metadata_url) as fp:
-                data = json.load(fp)
-                releases = data["releases"]
-                for ver in releases:
-                    for file in releases[ver]:
-                        file_url = file["url"]
-                        if "filename" in file:
-                            file_name = file["filename"]
-                        else:
-                            # micropython.org/pi doesn't have it
-                            file_name = file_url.split("/")[-1]
-                            # may be missing micropython prefix
-                            if not file_name.startswith(dist_name):
-                                # Let's hope version part doesn't contain dashes
-                                _, suffix = file_name.split("-")
-                                file_name = dist_name + "-" + suffix
-                        result[file_name] = file_url
-        except HTTPError as e:
-            if e.code == 404:
-                return None
-            else:
-                raise e
-        return result
 
+class RegularIndexDownloader(BaseIndexDownloader, ABC):
+    def __init__(self, index_url: str):
+        super().__init__(index_url)
+        self._dist_urls_cache: Dict[str, Dict[str, str]] = {}
 
-class MpOrgIndexDownloader(JsonIndexDownloader):
-    def _download_file_urls(self, dist_name) -> Optional[Dict[str, str]]:
-        if not normalize_dist_name(dist_name).startswith("micropython_"):
+    def get_dist_file_names(self, dist_name: str) -> Optional[List[str]]:
+        urls = self._get_dist_urls(dist_name)
+        if urls is None:
             return None
+        return list(urls.keys())
 
-        return super()._download_file_urls(dist_name)
-
-
-class PipkinProxy(HTTPServer):
-    def __init__(
-        self, no_mp_org: bool, index_url: Optional[str], extra_index_urls: List[str], port: int
-    ):
-        self._downloaders: List[BaseIndexDownloader] = []
-        self._downloaders_by_dist_name: Dict[str, Optional[BaseIndexDownloader]] = {}
-        if not no_mp_org:
-            self._downloaders.append(MpOrgIndexDownloader(MP_ORG_INDEX))
-        self._downloaders.append(SimpleIndexDownloader(index_url or PYPI_SIMPLE_INDEX))
-        for url in extra_index_urls:
-            self._downloaders.append(SimpleIndexDownloader(url))
-        super().__init__(("127.0.0.1", port), PipkinProxyHandler)
-
-    def get_downloader_for_dist(self, dist_name: str) -> Optional[BaseIndexDownloader]:
-        if dist_name not in self._downloaders_by_dist_name:
-            for downloader in self._downloaders:
-                file_urls = downloader.get_file_urls(dist_name)
-                if file_urls is not None:
-                    self._downloaders_by_dist_name[dist_name] = downloader
-                    break
-            else:
-                self._downloaders_by_dist_name[dist_name] = None
-
-        return self._downloaders_by_dist_name[dist_name]
-
-    def get_index_url(self) -> str:
-        return f"http://127.0.0.1:{self.server_port}"
-
-
-class PipkinProxyHandler(BaseHTTPRequestHandler):
-    def __init__(self, request: bytes, client_address: Tuple[str, int], server: BaseServer):
-        logger.debug("Creating new handler")
-        assert isinstance(server, PipkinProxy)
-        self.proxy: PipkinProxy = server
-        super().__init__(request, client_address, server)
-
-    def do_GET(self) -> None:
-        path = self.path.strip("/")
-        logger.debug("do_GET for %s", path)
-        if "/" in path:
-            assert path.count("/") == 1
-            self._serve_file(*path.split("/"))
-        else:
-            self._serve_distribution_page(path)
-
-    def _serve_distribution_page(self, dist_name: str) -> None:
-        logger.debug("Serving index page for %s", dist_name)
-        downloader = self.proxy.get_downloader_for_dist(dist_name)
-        if downloader is None:
-            self.send_response(404)
-            self.end_headers()
-            return
-
-        # TODO: check https://discuss.python.org/t/community-testing-of-packaging-tools-against-non-warehouse-indexes/13442
-
-        file_urls = downloader.get_file_urls(dist_name)
-        # logger.debug("File urls: %r", file_urls)
-        self.send_response(200)
-        self.send_header("Content-type", f"text/html; charset={SERVER_ENCODING}")
-        self.send_header("Cache-Control", "max-age=600, public")
-        self.end_headers()
-        self.wfile.write("<!DOCTYPE html><html><body>\n".encode(SERVER_ENCODING))
-        for file_name in file_urls:
-            self.wfile.write(
-                f"<a href='/{dist_name}/{file_name}/'>{file_name}</a>\n".encode(SERVER_ENCODING)
-            )
-        self.wfile.write("</body></html>".encode(SERVER_ENCODING))
-
-    def _serve_file(self, dist_name: str, file_name: str):
-        logger.debug("Serving %s for %s", file_name, dist_name)
-
+    def get_file_content(self, dist_name: str, file_name: str) -> bytes:
         if self._should_return_dummy(dist_name):
-            tweaked_bytes = create_dummy_dist(dist_name, file_name)
+            return create_dummy_dist(dist_name, file_name)
         else:
             original_bytes = self._download_file(dist_name, file_name)
-            tweaked_bytes = self._tweak_file(dist_name, file_name, original_bytes)
+            return self._tweak_file(dist_name, file_name, original_bytes)
 
-        self.send_response(200)
-        self.send_header("Content-Type", "application/octet-stream")
-        self.send_header("Cache-Control", "max-age=365000000, immutable, public")
-        self.end_headers()
+    def _get_dist_urls(self, dist_name: str) -> Optional[Dict[str, str]]:
+        """
+        Returns file names and url-s for constructing the dist index page.
+        """
+        if dist_name not in self._dist_urls_cache:
+            self._dist_urls_cache[dist_name] = self._download_file_urls(dist_name)
 
-        block_size = 4096
-        for start_index in range(0, len(tweaked_bytes), block_size):
-            block = tweaked_bytes[start_index : start_index + block_size]
-            self.wfile.write(block)
+        return self._dist_urls_cache[dist_name]
 
-    def _download_file(self, dist_name: str, file_name: str) -> bytes:
-        downloader = self.proxy.get_downloader_for_dist(dist_name)
-        assert downloader is not None
+    @abstractmethod
+    def _download_file_urls(self, dist_name) -> Optional[Dict[str, str]]:
+        raise NotImplementedError()
 
-        urls = downloader.get_file_urls(dist_name)
+    def _download_file(self, dist_name: str, file_name: str) -> bytes:
+        urls = self._get_dist_urls(dist_name)
         assert urls
 
         assert file_name in urls
         url = urls[file_name]
+
         logger.debug("Downloading file from %s", url)
         with urlopen(url) as result:
             logger.debug("Headers: %r", result.headers.items())
             return result.read()
 
-    def _should_return_dummy(self, dist_name: str) -> bool:
-        return normalize_dist_name(
-            dist_name
-        ) in NORMALIZED_IRRELEVANT_PACKAGE_NAMES or normalize_dist_name(dist_name).startswith(
-            "adafruit_blinka_"
-        )
-
     def _tweak_file(self, dist_name: str, file_name: str, original_bytes: bytes) -> bytes:
         if not file_name.lower().endswith(".tar.gz"):
             return original_bytes
@@ -309,7 +199,9 @@ class PipkinProxyHandler(BaseHTTPRequestHandler):
                 assert info.isdir()
                 wrapper_dir, rel_name = info.name, ""
 
-            assert normalize_dist_name(wrapper_dir).startswith(normalize_dist_name(dist_name))
+            assert custom_normalize_dist_name(wrapper_dir).startswith(
+                custom_normalize_dist_name(dist_name)
+            )
 
             rel_name = rel_name.strip("/")
             rel_segments = rel_name.split("/")
@@ -393,6 +285,15 @@ tag_date = 0
         info.size = len(content)
         tar.addfile(info, stream)
 
+    def _should_return_dummy(self, dist_name: str) -> bool:
+        return custom_normalize_dist_name(
+            dist_name
+        ) in NORMALIZED_IRRELEVANT_PACKAGE_NAMES or custom_normalize_dist_name(
+            dist_name
+        ).startswith(
+            "adafruit_blinka_"
+        )
+
     def _parse_metadata(self, metadata_bytes) -> Dict[str, str]:
         metadata = email.parser.Parser().parsestr(metadata_bytes.decode("utf-8"))
         return {
@@ -416,7 +317,6 @@ tag_date = 0
         packages: List[str],
         requirements: List[str],
     ) -> str:
-
         src = dedent(
             """
             from setuptools import setup
@@ -452,15 +352,304 @@ tag_date = 0
         return src
 
 
+class SimpleIndexDownloader(RegularIndexDownloader):
+    def _download_file_urls(self, dist_name) -> Optional[Dict[str, str]]:
+        url = f"{self._index_url}/{dist_name}"
+        logger.info("Downloading file urls from simple index %s", url)
+
+        try:
+            with urlopen(url) as fp:
+                parser = SimpleUrlsParser()
+                parser.feed(fp.read().decode("utf-8"))
+                return parser.file_urls
+        except HTTPError as e:
+            if e.code == 404:
+                return None
+            else:
+                raise e
+
+
+class JsonIndexDownloader(RegularIndexDownloader):
+    def _download_file_urls(self, dist_name) -> Optional[Dict[str, str]]:
+        metadata_url = f"{self._index_url}/{dist_name}/json"
+        logger.info("Downloading file urls from json index at %s", metadata_url)
+
+        result = {}
+        try:
+            with urlopen(metadata_url) as fp:
+                data = json.load(fp)
+                releases = data["releases"]
+                for ver in releases:
+                    for file in releases[ver]:
+                        file_url = file["url"]
+                        if "filename" in file:
+                            file_name = file["filename"]
+                        else:
+                            # micropython.org/pi doesn't have it
+                            file_name = file_url.split("/")[-1]
+                            # may be missing micropython prefix
+                            if not file_name.startswith(dist_name):
+                                # Let's hope version part doesn't contain dashes
+                                _, suffix = file_name.split("-")
+                                file_name = dist_name + "-" + suffix
+                        result[file_name] = file_url
+        except HTTPError as e:
+            if e.code == 404:
+                return None
+            else:
+                raise e
+        return result
+
+
+class MpOrgV1IndexDownloader(JsonIndexDownloader):
+    def _download_file_urls(self, dist_name) -> Optional[Dict[str, str]]:
+        if not custom_normalize_dist_name(dist_name).startswith("micropython_"):
+            return None
+
+        return super()._download_file_urls(dist_name)
+
+
+class MpOrgV2IndexDownloader(BaseIndexDownloader):
+    def __init__(self, index_url):
+        self._packages = None
+        super().__init__(index_url)
+
+    def get_dist_file_names(self, dist_name: str) -> Optional[List[str]]:
+        # there is no per-package, all-versions metadata resource. Need to use the global index
+        meta = self._get_dist_metadata(dist_name)
+        if meta is None:
+            return None
+
+        # Collect relationship between version and constructed file names so that I won't need to parse file name later.
+        meta["original_versions_per_file_name"] = {}
+
+        result = []
+        for version in meta["versions"]["py"]:
+            file_name = create_dist_info_version_name(dist_name, version) + "-py3-none-any.whl"
+            meta["original_versions_per_file_name"][file_name] = version
+            result.append(file_name)
+
+        return result
+
+    def get_file_content(self, dist_name: str, file_name: str) -> bytes:
+        dist_meta = self._get_dist_metadata(dist_name)
+        original_name = dist_meta["name"]
+
+        original_versions = dist_meta.get("original_versions_per_file_name", None)
+        assert isinstance(original_versions, dict)
+        original_version = original_versions.get(file_name, None)
+        assert isinstance(original_version, str)
+
+        version_meta_url = f"{self._index_url}/package/py/{original_name}/{original_version}.json"
+        with urlopen(version_meta_url) as fp:
+            version_meta = json.load(fp)
+
+        return self._construct_wheel_content(dist_meta, version_meta)
+
+    def _construct_wheel_content(
+        self, dist_meta: Dict[str, Any], version_meta: Dict[str, Any]
+    ) -> bytes:
+        urls_per_wheel_path = {}
+
+        for wheel_path, short_hash in version_meta.get("hashes", []):
+            urls_per_wheel_path[
+                wheel_path
+            ] = f"{self._index_url}/file/{short_hash[:2]}/{short_hash}"
+
+        for wheel_path, url in version_meta.get("urls", []):
+            urls_per_wheel_path[wheel_path] = url
+
+        bytes_per_wheel_path = {}
+        for wheel_path, url in urls_per_wheel_path.items():
+            with urlopen(url) as fp:
+                bytes_per_wheel_path[wheel_path] = fp.read()
+
+        # construct metadata files
+        meta_dir_prefix = create_dist_info_version_name(dist_meta["name"], version_meta["version"])
+        meta_dir = f"{meta_dir_prefix}.dist-info"
+        summary = dist_meta.get("description", "").replace("\r\n", "\n").replace("\n", " ")
+
+        metadata = textwrap.dedent(
+            f"""
+            Metadata-Version: 2.1
+            Name: {safe_name(dist_meta["name"])}
+            Version: {safe_version(version_meta["version"])}
+            Summary: {summary}
+            Author: {dist_meta.get("author", "")}
+            License: {dist_meta.get("license", "")}
+            """
+        ).lstrip()
+
+        for dep_name, dep_version in version_meta.get("deps", []):
+            metadata += f"Requires-Dist: {dep_name}"
+            if dep_version and dep_version != "latest":
+                metadata += " ("
+                if dep_version[0] not in "<>=":
+                    metadata += "=="
+                metadata += dep_version
+                metadata += ")"
+            metadata += "\n"
+
+        bytes_per_wheel_path[f"{meta_dir}/METADATA"] = metadata.encode("utf-8")
+
+        bytes_per_wheel_path[f"{meta_dir}/WHEEL"] = (
+            textwrap.dedent(
+                """
+            Wheel-Version: 1.0
+            Generator: bdist_wheel (0.37.1)
+            Root-Is-Purelib: true
+            Tag: py3-none-any
+            """
+            )
+            .lstrip()
+            .encode("utf-8")
+        )
+
+        record_lines = []
+        for wheel_path, content in bytes_per_wheel_path.items():
+            digest = hashlib.sha256(content).hexdigest()
+            record_lines.append(f"{wheel_path},sha256={digest},{len(content)}")
+        record_lines.append(f"{meta_dir}/RECORD,,")
+
+        bytes_per_wheel_path[f"{meta_dir}/RECORD"] = ("\n".join(record_lines) + "\n").encode(
+            "utf-8"
+        )
+
+        zip_buffer = io.BytesIO()
+        with zipfile.ZipFile(
+            zip_buffer, mode="a", compression=zipfile.ZIP_DEFLATED, allowZip64=False
+        ) as fp:
+            for wheel_path, content in bytes_per_wheel_path.items():
+                fp.writestr(wheel_path, content)
+
+        with open(os.path.expanduser("~/out.whl"), "wb") as fp:
+            fp.write(zip_buffer.getvalue())
+        return zip_buffer.getvalue()
+
+    def _get_dist_metadata(self, dist_name: str) -> Optional[Dict[Any, Any]]:
+        if self._packages is None:
+            with urlopen(MP_ORG_INDEX_V2 + "/index.json") as fp:
+                self._packages = json.load(fp)["packages"]
+
+        for package in self._packages:
+            if custom_normalize_dist_name(package["name"]) == custom_normalize_dist_name(dist_name):
+                return package
+
+        return None
+
+
+class PipkinProxy(HTTPServer):
+    def __init__(
+        self, no_mp_org: bool, index_url: Optional[str], extra_index_urls: List[str], port: int
+    ):
+        self._downloaders: List[BaseIndexDownloader] = []
+        self._downloaders_by_dist_name: Dict[str, Optional[BaseIndexDownloader]] = {}
+        if not no_mp_org:
+            # V1 first, because it only considers packages with "micropython-"-prefix
+            self._downloaders.append(MpOrgV1IndexDownloader(MP_ORG_INDEX_V1))
+            self._downloaders.append(MpOrgV2IndexDownloader(MP_ORG_INDEX_V2))
+        self._downloaders.append(SimpleIndexDownloader(index_url or PYPI_SIMPLE_INDEX))
+        for url in extra_index_urls:
+            self._downloaders.append(SimpleIndexDownloader(url))
+        super().__init__(("127.0.0.1", port), PipkinProxyHandler)
+
+    def get_downloader_for_dist(self, dist_name: str) -> Optional[BaseIndexDownloader]:
+        if dist_name not in self._downloaders_by_dist_name:
+            for downloader in self._downloaders:
+                logger.debug("Checking if %s has %r", downloader, dist_name)
+                file_names = downloader.get_dist_file_names(dist_name)
+                if file_names is not None:
+                    logger.debug("Got %r file names", len(file_names))
+                    self._downloaders_by_dist_name[dist_name] = downloader
+                    break
+                else:
+                    logger.debug("Got None. Trying next downloader")
+            else:
+                self._downloaders_by_dist_name[dist_name] = None
+
+        return self._downloaders_by_dist_name[dist_name]
+
+    def get_index_url(self) -> str:
+        return f"http://127.0.0.1:{self.server_port}"
+
+
+class PipkinProxyHandler(BaseHTTPRequestHandler):
+    def __init__(
+        self,
+        request: Union[socket.socket, Tuple[bytes, socket.socket]],
+        client_address: Tuple[str, int],
+        server: BaseServer,
+    ):
+        logger.debug("Creating new handler")
+        assert isinstance(server, PipkinProxy)
+        self.proxy: PipkinProxy = server
+        super().__init__(request, client_address, server)
+
+    def do_GET(self) -> None:
+        path = self.path.strip("/")
+        logger.debug("do_GET for %s", path)
+        if "/" in path:
+            assert path.count("/") == 1
+            self._serve_file(*path.split("/"))
+        else:
+            self._serve_distribution_page(path)
+
+    def _serve_distribution_page(self, dist_name: str) -> None:
+        logger.debug("Serving index page for %s", dist_name)
+        downloader = self.proxy.get_downloader_for_dist(dist_name)
+        if downloader is None:
+            self.send_response(404)
+            self.end_headers()
+            return
+
+        # TODO: check https://discuss.python.org/t/community-testing-of-packaging-tools-against-non-warehouse-indexes/13442
+
+        file_names = downloader.get_dist_file_names(dist_name)
+        # logger.debug("File urls: %r", file_names)
+        self.send_response(200)
+        self.send_header("Content-type", f"text/html; charset={SERVER_ENCODING}")
+        self.send_header("Cache-Control", "max-age=600, public")
+        self.end_headers()
+        self.wfile.write("<!DOCTYPE html><html><body>\n".encode(SERVER_ENCODING))
+        for file_name in file_names:
+            self.wfile.write(
+                f"<a href='/{dist_name}/{file_name}/'>{file_name}</a>\n".encode(SERVER_ENCODING)
+            )
+        self.wfile.write("</body></html>".encode(SERVER_ENCODING))
+
+    def _serve_file(self, dist_name: str, file_name: str):
+        logger.debug("Serving %s for %s", file_name, dist_name)
+
+        downloader = self.proxy.get_downloader_for_dist(dist_name)
+        assert downloader is not None
+        file_content = downloader.get_file_content(dist_name, file_name)
+
+        self.send_response(200)
+        self.send_header("Content-Type", "application/octet-stream")
+        self.send_header("Cache-Control", "max-age=365000000, immutable, public")
+        self.end_headers()
+
+        block_size = 4096
+        for start_index in range(0, len(file_content), block_size):
+            block = file_content[start_index : start_index + block_size]
+            self.wfile.write(block)
+
+
 def start_proxy(
     no_mp_org: bool,
     index_url: Optional[str],
     extra_index_urls: List[str],
 ) -> PipkinProxy:
+    port = PREFERRED_PORT
+    if no_mp_org:
+        # Use different port for different set of source indexes, otherwise
+        # pip may use wrong cached wheel.
+        port += 7
     try:
-        proxy = PipkinProxy(no_mp_org, index_url, extra_index_urls, PREFERRED_PORT)
+        proxy = PipkinProxy(no_mp_org, index_url, extra_index_urls, port)
     except OSError as e:
         if e.errno == errno.EADDRINUSE:
+            logger.warning("Port %s was in use. Letting OS choose.", port)
             proxy = PipkinProxy(no_mp_org, index_url, extra_index_urls, 0)
         else:
             raise e
@@ -474,7 +663,7 @@ def start_proxy(
 def create_dummy_dist(dist_name: str, file_name: str) -> bytes:
     logger.info("Creating dummy content for %s", file_name)
     parsed_dist_name, version, suffix = parse_dist_file_name(file_name)
-    assert normalize_dist_name(dist_name) == normalize_dist_name(parsed_dist_name)
+    assert custom_normalize_dist_name(dist_name) == custom_normalize_dist_name(parsed_dist_name)
 
     with tempfile.TemporaryDirectory(prefix="pipkin-proxy") as tmp:
         setup_py_path = os.path.join(tmp, "setup.py")
@@ -505,7 +694,7 @@ def create_dummy_dist(dist_name: str, file_name: str) -> bytes:
             raise AssertionError("Unexpected suffix " + suffix)
 
         args = [sys.executable, setup_py_path] + setup_py_args
-        subprocess.check_call(args, cwd=tmp, stdin=subprocess.DEVNULL)
+        subprocess.check_call(args, executable=args[0], cwd=tmp, stdin=subprocess.DEVNULL)
 
         dist_dir = os.path.join(tmp, "dist")
         dist_files = os.listdir(dist_dir)
diff --git a/thonny/vendored_libs/pipkin/serial_connection.py b/thonny/vendored_libs/pipkin/serial_connection.py
index abe23ae..d6ecfe1 100644
--- a/thonny/vendored_libs/pipkin/serial_connection.py
+++ b/thonny/vendored_libs/pipkin/serial_connection.py
@@ -18,7 +18,6 @@ logger = getLogger(__name__)
 
 class SerialConnection(MicroPythonConnection):
     def __init__(self, port, baudrate=115200, dtr=None, rts=None, skip_reader=False):
-
         import serial
         from serial.serialutil import SerialException
 
@@ -33,6 +32,7 @@ class SerialConnection(MicroPythonConnection):
             # but in some cases it messes up communication.
             # At the same time, in some cases it is required
             # https://github.com/thonny/thonny/issues/1462
+            # See also https://github.com/micropython/micropython/pull/10347
             if dtr is not None:
                 logger.debug("Setting DTR to %s", dtr)
                 self._serial.dtr = dtr
@@ -158,7 +158,6 @@ class DifficultSerialConnection(SerialConnection):
     """For hardening the communication protocol"""
 
     def _make_output_available(self, data, block=True):
-
         # output prompts in parts
         if FIRST_RAW_PROMPT in data or NORMAL_PROMPT in data:
             if FIRST_RAW_PROMPT in data:
diff --git a/thonny/vendored_libs/pipkin/session.py b/thonny/vendored_libs/pipkin/session.py
index cf981c4..16c9dc0 100644
--- a/thonny/vendored_libs/pipkin/session.py
+++ b/thonny/vendored_libs/pipkin/session.py
@@ -110,7 +110,11 @@ class Session:
         state_after = self._get_venv_state()
 
         removed_meta_dirs = {name for name in state_before if name not in state_after}
-        assert not removed_meta_dirs
+        # removed meta dirs are expected when upgrading
+        for meta_dir_name in removed_meta_dirs:
+            self._report_progress(f"Removing {parse_meta_dir_name(meta_dir_name)[0]}")
+            dist_name, _version = parse_meta_dir_name(meta_dir_name)
+            self._adapter.remove_dist(dist_name)
 
         new_meta_dirs = {name for name in state_after if name not in state_before}
         changed_meta_dirs = {
@@ -209,7 +213,6 @@ class Session:
         excludes: Optional[List[str]] = None,
         **_,
     ):
-
         args = ["list"]
 
         if outdated:
@@ -260,7 +263,6 @@ class Session:
         excludes: Optional[List[str]] = None,
         **_,
     ):
-
         args = ["freeze"]
 
         args += self._format_exclusion_args(excludes)
@@ -352,9 +354,12 @@ class Session:
         if cache_command == "purge":
             if os.path.exists(self._get_pipkin_cache_dir()):
                 shutil.rmtree(self._get_pipkin_cache_dir())
+        elif not os.path.exists(self._get_pipkin_cache_dir()):
+            print(f"Cache dir ({self._get_pipkin_cache_dir()}) not created yet")
         elif cache_command == "dir":
             print(self._get_pipkin_cache_dir())
         else:
+            self._ensure_venv()
             self._invoke_pip(["cache", cache_command])
 
     def close(self) -> None:
@@ -477,34 +482,39 @@ class Session:
         if not os.path.exists(path):
             self._report_progress("Preparing working environment ...")
             logger.info("Start preparing working environment at %s ...", path)
+            venv_cmd = [
+                sys.executable,
+                "-I",
+                "-m",
+                "venv",
+                path,
+            ]
             subprocess.check_call(
-                [
-                    sys.executable,
-                    "-I",
-                    "-m",
-                    "venv",
-                    path,
-                ],
+                venv_cmd,
+                executable=venv_cmd[0],
                 stdin=subprocess.DEVNULL,
             )
             logger.info("Done creating venv")
             assert os.path.exists(path)
+            pip_cmd = [
+                get_venv_executable(path),
+                "-I",
+                "-m",
+                "pip",
+                "--disable-pip-version-check",
+                "install",
+                "--no-warn-script-location",
+                "--upgrade",
+                "pip==22.2.2",
+                "setuptools==65.4.1",
+                "wheel==0.38.4",
+            ]
             subprocess.check_call(
-                [
-                    get_venv_executable(path),
-                    "-I",
-                    "-m",
-                    "pip",
-                    "--disable-pip-version-check",
-                    "install",
-                    "--no-warn-script-location",
-                    "--upgrade",
-                    "pip==22.0.*",
-                    "setuptools==60.9.*",
-                    "wheel==0.37.*",
-                ],
+                pip_cmd,
+                executable=pip_cmd[0],
                 stdin=subprocess.DEVNULL,
             )
+            self._patch_pip(path)
             logger.info("Done preparing working environment.")
         else:
             logger.debug("Using existing working environment at %s", path)
@@ -524,16 +534,67 @@ class Session:
     def _get_venv_site_packages_path(self) -> str:
         return get_venv_site_packages_path(self._venv_dir)
 
+    def _patch_pip(self, venv_path: str) -> None:
+        sp_cmd = [
+            get_venv_executable(venv_path),
+            "-c",
+            "import sysconfig; print(sysconfig.get_paths()['purelib'])",
+        ]
+        site_packages_path = subprocess.check_output(
+            sp_cmd,
+            executable=sp_cmd[0],
+            stdin=subprocess.DEVNULL,
+            universal_newlines=True,
+        ).strip()
+
+        pip_init_path = os.path.join(site_packages_path, "pip", "__init__.py")
+
+        patch = """
+import os
+import pip._vendor.packaging.markers
+import pip._vendor.distlib.markers
+
+ENV_VAR_PREFIX = "pip_marker_"
+
+def patch_context(context):
+    for name in os.environ:
+        if name.startswith(ENV_VAR_PREFIX):
+            marker_name = name[len(ENV_VAR_PREFIX):]
+            value =  os.environ[name]
+            context[marker_name] = value
+
+
+def patch_context_function(fun):
+    def patched_context_function():
+        context = fun()
+        patch_context(context)
+        return context
+    
+    return patched_context_function
+
+pip._vendor.packaging.markers.default_environment = \
+    patch_context_function(pip._vendor.packaging.markers.default_environment)
+pip._vendor.distlib.markers.DEFAULT_CONTEXT = \
+    patch_context(pip._vendor.distlib.markers.DEFAULT_CONTEXT)        
+
+"""
+        logger.info("Patching %r", pip_init_path)
+        with open(pip_init_path, "a", encoding="utf-8") as fp:
+            fp.write(patch)
+
     def _clear_venv(self) -> None:
         sp_path = self._get_venv_site_packages_path()
         logger.debug("Clearing %s", sp_path)
         for name in os.listdir(sp_path):
             full_path = os.path.join(sp_path, name)
             if self._is_initial_venv_item(name):
+                logger.debug("skipping %r", name)
                 continue
             elif os.path.isfile(full_path):
+                logger.debug("removing file %r", name)
                 os.remove(full_path)
             else:
+                logger.debug("removing directory %r", name)
                 assert os.path.isdir(full_path)
                 shutil.rmtree(full_path)
 
@@ -635,7 +696,6 @@ class Session:
         no_index: bool,
         find_links: Optional[str],
     ):
-
         if no_index:
             assert find_links
             self._invoke_pip(pip_args + ["--no-index", "--find-links", find_links])
@@ -668,7 +728,7 @@ class Session:
         env = {key: os.environ[key] for key in os.environ if not key.startswith("PIP_")}
         env["PIP_CACHE_DIR"] = self._get_pipkin_cache_dir()
 
-        subprocess.check_call(pip_cmd, env=env, stdin=subprocess.DEVNULL)
+        subprocess.check_call(pip_cmd, executable=pip_cmd[0], env=env, stdin=subprocess.DEVNULL)
 
     def _compile_with_mpy_cross(
         self, source_path: str, target_path: str, mpy_cross_path: Optional[str]
@@ -682,7 +742,7 @@ class Session:
         args = (
             [mpy_cross_path] + self._adapter.get_mpy_cross_args() + ["-o", target_path, source_path]
         )
-        subprocess.check_call(args)
+        subprocess.check_call(args, executable=args[0], stdin=subprocess.DEVNULL)
 
     def _ensure_mpy_cross(self) -> str:
         impl_name, ver_prefix = self._adapter.get_implementation_name_and_version_prefix()
diff --git a/thonny/vendored_libs/pipkin/util.py b/thonny/vendored_libs/pipkin/util.py
index 4b352f2..b336056 100644
--- a/thonny/vendored_libs/pipkin/util.py
+++ b/thonny/vendored_libs/pipkin/util.py
@@ -2,12 +2,63 @@ import os.path
 import re
 import subprocess
 import sys
+from dataclasses import dataclass
 from logging import getLogger
 from typing import List, Optional, Set, Tuple
 
+import pkg_resources
+
 logger = getLogger(__name__)
 
 
+@dataclass
+class ParsedWheelFilename:
+    project: str
+    version: str
+    build: Optional[str]
+    python_tags: list[str]
+    abi_tags: list[str]
+    platform_tags: list[str]
+
+
+def parse_wheel_filename(filename: str) -> ParsedWheelFilename:
+    # Adapted from https://github.com/jwodder/wheel-filename/blob/1568eb2f1726425588550067f09f5c0fde6c9652/src/wheel_filename/__init__.py
+    PYTHON_TAG_RGX = r"[\w\d]+"
+    ABI_TAG_RGX = r"[\w\d]+"
+    PLATFORM_TAG_RGX = r"[\w\d]+"
+
+    WHEEL_FILENAME_CRGX = re.compile(
+        r"(?P<project>[A-Za-z0-9](?:[A-Za-z0-9._]*[A-Za-z0-9])?)"
+        r"-(?P<version>[A-Za-z0-9_.!+]+)"
+        r"(?:-(?P<build>[0-9][\w\d.]*))?"
+        r"-(?P<python_tags>{0}(?:\.{0})*)"
+        r"-(?P<abi_tags>{1}(?:\.{1})*)"
+        r"-(?P<platform_tags>{2}(?:\.{2})*)"
+        r"\.[Ww][Hh][Ll]".format(PYTHON_TAG_RGX, ABI_TAG_RGX, PLATFORM_TAG_RGX)
+    )
+    basename = os.path.basename(os.fsdecode(filename))
+    m = WHEEL_FILENAME_CRGX.fullmatch(basename)
+    if not m:
+        raise ValueError(f"Unexpected wheel filename {basename}")
+
+    return ParsedWheelFilename(
+        project=m.group("project"),
+        version=m.group("version"),
+        build=m.group("build"),
+        python_tags=m.group("python_tags").split("."),
+        abi_tags=m.group("abi_tags").split("."),
+        platform_tags=m.group("platform_tags").split("."),
+    )
+
+
+def create_dist_info_version_name(dist_name: str, version: str) -> str:
+    # https://packaging.python.org/en/latest/specifications/binary-distribution-format/#escaping-and-unicode
+    # https://peps.python.org/pep-0440/
+    safe_name = pkg_resources.safe_name(dist_name).replace("-", "_")
+    safe_version = pkg_resources.safe_version(version)
+    return f"{safe_name}-{safe_version}"
+
+
 def get_windows_folder(ID: int) -> str:
     # http://stackoverflow.com/a/3859336/261181
     # http://www.installmate.com/support/im9/using/symbols/functions/csidls.htm
@@ -64,12 +115,14 @@ def get_venv_executable(path: str) -> str:
 
 def get_venv_site_packages_path(venv_path: str) -> str:
     logger.debug("Querying site packages path for %s", venv_path)
+    args = [
+        get_venv_executable(venv_path),
+        "-c",
+        "import site; print([p for p in site.getsitepackages() if 'site-packages' in p][0])",
+    ]
     result = subprocess.check_output(
-        [
-            get_venv_executable(venv_path),
-            "-c",
-            "import site; print([p for p in site.getsitepackages() if 'site-packages' in p][0])",
-        ],
+        args,
+        executable=args[0],
         text=True,
         stdin=subprocess.DEVNULL,
     ).strip()
@@ -86,7 +139,12 @@ def parse_meta_dir_name(name: str) -> Tuple[str, str]:
 
 def parse_dist_file_name(file_name: str) -> Tuple[str, str, str]:
     file_name = file_name.lower()
-    for suffix in [".zip", ".whl", ".tar.gz"]:
+
+    if file_name.endswith(".whl"):
+        pwf = parse_wheel_filename(file_name)
+        return pwf.project, pwf.version, ".whl"
+
+    for suffix in [".zip", ".tar.gz"]:
         if file_name.endswith(suffix):
             file_name = file_name[: -len(suffix)]
             break
@@ -115,8 +173,9 @@ def is_continuation_byte(byte: int) -> bool:
     return (byte & 0b11000000) == 0b10000000
 
 
-def normalize_dist_name(name: str) -> str:
-    return name.lower().replace("-", "_")
+def custom_normalize_dist_name(name: str) -> str:
+    # https://peps.python.org/pep-0503/#normalized-names
+    return pkg_resources.safe_name(name).lower().replace("-", "_").replace(".", "_")
 
 
 def list_volumes(skip_letters: Optional[Set[str]] = None) -> List[str]:
diff --git a/thonny/vendored_libs/pipkin/webrepl_connection.py b/thonny/vendored_libs/pipkin/webrepl_connection.py
index ab03e0b..7ff0215 100644
--- a/thonny/vendored_libs/pipkin/webrepl_connection.py
+++ b/thonny/vendored_libs/pipkin/webrepl_connection.py
@@ -17,7 +17,6 @@ class WebReplConnection(MicroPythonConnection):
     """
 
     def __init__(self, url, password, num_bytes_received=0):
-
         self.num_bytes_received = num_bytes_received
         super().__init__()
 
@@ -31,12 +30,12 @@ class WebReplConnection(MicroPythonConnection):
             sys.exit(-1)
         self._url = url
         self._password = password
-        self._write_responses = Queue()
+        self._write_responses: Queue = Queue()
 
         # Some tricks are needed to use async library in a sync program.
         # Using thread-safe queues to communicate with async world in another thread
-        self._write_queue = Queue()
-        self._connection_result = Queue()
+        self._write_queue: Queue = Queue()
+        self._connection_result: Queue = Queue()
         self._ws_thread = threading.Thread(target=self._wrap_ws_main, daemon=True)
         self._ws_thread.start()
 
diff --git a/thonny/workbench.py b/thonny/workbench.py
index f1f19e2..4c7d522 100644
--- a/thonny/workbench.py
+++ b/thonny/workbench.py
@@ -37,6 +37,7 @@ from thonny.editors import EditorNotebook, is_local_path
 from thonny.languages import tr
 from thonny.misc_utils import (
     copy_to_clipboard,
+    get_menu_char,
     running_on_linux,
     running_on_mac_os,
     running_on_rpi,
@@ -115,6 +116,7 @@ class Workbench(tk.Tk):
     """
 
     def __init__(self) -> None:
+        logger.info("Starting Workbench")
         thonny._workbench = self
         self.ready = False
         self._closing = False
@@ -163,9 +165,12 @@ class Workbench(tk.Tk):
         )
 
         assistance.init()
+        logger.info("Creating runner")
         self._runner = Runner()
         self._init_hooks()  # Plugins may register hooks, so initialized them before to load plugins.
+        logger.info("Start loading plugins")
         self._load_plugins()
+        logger.info("Done loading plugins")
 
         self._editor_notebook = None  # type: Optional[EditorNotebook]
         self._init_fonts()
@@ -191,6 +196,7 @@ class Workbench(tk.Tk):
             self.report_exception()
 
         self._editor_notebook.focus_set()
+        logger.info("Opening views")
         self._try_action(self._open_views)
 
         self.bind_class("EditorCodeViewText", "<<CursorMove>>", self.update_title, True)
@@ -296,7 +302,7 @@ class Workbench(tk.Tk):
         self.set_default("layout.top", 50)
         self.set_default("layout.left", 150)
         if self.in_simple_mode():
-            self.set_default("layout.width", 1050)
+            self.set_default("layout.width", 1130)
             self.set_default("layout.height", 700)
         else:
             self.set_default("layout.width", 800)
@@ -358,7 +364,7 @@ class Workbench(tk.Tk):
             if "custom" in opts:
                 del opts["custom"]
             self._menubar = tk.Menu(self, **opts)
-            if self.get_ui_mode() != "simple":
+            if self.get_ui_mode() != "simple" or running_on_mac_os():
                 self["menu"] = self._menubar
         self._menus = {}  # type: Dict[str, tk.Menu]
         self._menu_item_specs = (
@@ -399,6 +405,7 @@ class Workbench(tk.Tk):
                 logger.debug("Skipping plug-in %s", module_name)
             else:
                 try:
+                    logger.debug("Importing %r", module_name)
                     m = importlib.import_module(module_name)
                     if hasattr(m, load_function_name):
                         modules.append(m)
@@ -409,6 +416,7 @@ class Workbench(tk.Tk):
             return getattr(m, "load_order_key", m.__name__)
 
         for m in sorted(modules, key=module_sort_key):
+            logger.debug("Loading %r", m.__file__)
             getattr(m, load_function_name)()
 
     def _init_fonts(self) -> None:
@@ -584,7 +592,6 @@ class Workbench(tk.Tk):
         return server_socket, secret
 
     def _init_commands(self) -> None:
-
         self.add_command(
             "exit",
             "file",
@@ -607,7 +614,7 @@ class Workbench(tk.Tk):
             "view",
             tr("Increase font size"),
             lambda: self._change_font_size(1),
-            default_sequence=select_sequence("<Control-plus>", "<Command-Shift-plus>"),
+            default_sequence=select_sequence("<Control-plus>", "<Command-plus>"),
             extra_sequences=["<Control-KP_Add>"],
             group=60,
         )
@@ -643,7 +650,6 @@ class Workbench(tk.Tk):
         )
 
         if self.get_ui_mode() == "expert":
-
             self.add_command(
                 "toggle_maximize_view",
                 "view",
@@ -706,7 +712,6 @@ class Workbench(tk.Tk):
         print(get_runner()._postponed_commands)
 
     def _init_containers(self) -> None:
-
         margin = ems_to_pixels(0.6)
         # Main frame functions as
         # - a background behind padding of main_pw, without this OS X leaves white border
@@ -802,7 +807,6 @@ class Workbench(tk.Tk):
         webbrowser.open("https://github.com/thonny/thonny/wiki/Support-Ukraine")
 
     def _init_backend_switcher(self):
-
         # Set up the menu
         self._backend_conf_variable = tk.StringVar(value="{}")
 
@@ -813,8 +817,7 @@ class Workbench(tk.Tk):
         self._backend_menu = tk.Menu(self._statusbar, tearoff=False, **menu_conf)
 
         # Set up the button.
-        # Using ≡ ("Identical to"), because ☰ ("Trigram for heaven") looks too heavy in Windows
-        self._backend_button = ttk.Button(self._statusbar, text="≡", style="Toolbutton")
+        self._backend_button = ttk.Button(self._statusbar, text=get_menu_char(), style="Toolbutton")
 
         self._backend_button.grid(row=1, column=3, sticky="nes")
         self._backend_button.configure(command=self._post_backend_menu)
@@ -910,7 +913,7 @@ class Workbench(tk.Tk):
             value = "n/a"
 
         self._backend_conf_variable.set(value=value)
-        self._backend_button.configure(text=desc)
+        self._backend_button.configure(text=desc + "  " + get_menu_char())
 
     def _init_theming(self) -> None:
         self._style = ttk.Style()
@@ -1405,7 +1408,6 @@ class Workbench(tk.Tk):
             return "Default Light"
 
     def uses_dark_ui_theme(self) -> bool:
-
         name = self._style.theme_use()
         while True:
             if "dark" in name.lower():
@@ -1643,7 +1645,6 @@ class Workbench(tk.Tk):
     def get_image(
         self, filename: str, tk_name: Optional[str] = None, disabled=False
     ) -> tk.PhotoImage:
-
         if filename in self._image_mapping_by_theme[self._current_theme_name]:
             filename = self._image_mapping_by_theme[self._current_theme_name][filename]
 
@@ -1981,7 +1982,6 @@ class Workbench(tk.Tk):
         tester: Optional[Callable[[], bool]],
         toolbar_group: int,
     ) -> None:
-
         assert caption is not None and len(caption) > 0, (
             "Missing caption for '%s'. Toolbar commands must have caption." % command_label
         )
@@ -2100,7 +2100,6 @@ class Workbench(tk.Tk):
         self.geometry("{0}x{1}+{2}+{3}".format(new_width, geo[1], geo[2], geo[3]))
 
     def _change_font_size(self, delta: int) -> None:
-
         if delta != 0:
             editor_font_size = self.get_option("view.editor_font_size")
             editor_font_size += delta
@@ -2259,7 +2258,6 @@ class Workbench(tk.Tk):
                     menu.entryconfigure(i, state=tk.DISABLED)
 
     def _find_location_for_menu_item(self, menu_name: str, command_label: str) -> Union[str, int]:
-
         menu = self.get_menu(menu_name)
 
         if menu.index("end") == None:  # menu is empty
diff --git a/thonny/workdlg.py b/thonny/workdlg.py
index 81b2555..0c2555e 100644
--- a/thonny/workdlg.py
+++ b/thonny/workdlg.py
@@ -11,8 +11,14 @@ from typing import Optional
 
 from thonny import tktextext
 from thonny.languages import tr
-from thonny.misc_utils import running_on_windows
-from thonny.ui_utils import CommonDialog, create_action_label, ems_to_pixels, set_text_if_different
+from thonny.misc_utils import get_menu_char, running_on_mac_os, running_on_windows
+from thonny.ui_utils import (
+    CommonDialog,
+    create_action_label,
+    ems_to_pixels,
+    get_style_configuration,
+    set_text_if_different,
+)
 
 logger = getLogger(__name__)
 
@@ -98,10 +104,26 @@ class WorkDialog(CommonDialog):
             row=1, column=2, sticky="we", pady=padding, padx=(0, intpad)
         )
 
+        self._menu_button = ttk.Button(
+            self.action_frame,
+            text=get_menu_char(),
+            command=self.post_action_menu,
+            # style="Toolbutton"
+            width=3,
+        )
+        if self.has_action_menu():
+            self._menu_button.grid(column=3, row=1, pady=padding, padx=(0, intpad))
+
+        if running_on_mac_os():
+            menu_conf = {}
+        else:
+            menu_conf = get_style_configuration("Menu")
+        self._action_menu = tk.Menu(self, tearoff=False, **menu_conf)
+
         self._ok_button = ttk.Button(
             self.action_frame,
             text=self.get_ok_text(),
-            command=self.start_work_and_update_ui,
+            command=self.on_click_ok_button,
             state="disabled",
             default="active",
         )
@@ -117,9 +139,28 @@ class WorkDialog(CommonDialog):
 
         self.action_frame.columnconfigure(2, weight=1)
 
+    def on_click_ok_button(self):
+        self.start_work_and_update_ui()
+
+    def has_action_menu(self) -> bool:
+        return False
+
+    def populate_action_menu(self, action_menu: tk.Menu) -> None:
+        pass
+
+    def post_action_menu(self) -> None:
+        self._action_menu.delete(0, "end")
+        post_x = self._menu_button.winfo_rootx()
+        post_y = self._menu_button.winfo_rooty() + self._menu_button.winfo_height()
+        self.populate_action_menu(self._action_menu)
+        self._action_menu.tk_popup(post_x, post_y)
+
     def get_action_text_max_length(self):
         return 35
 
+    def get_initial_log_line_count(self):
+        return 5
+
     def init_log_frame(self):
         self.log_frame = ttk.Frame(self)
         self.log_frame.columnconfigure(1, weight=1)
@@ -132,7 +173,7 @@ class WorkDialog(CommonDialog):
             horizontal_scrollbar=False,
             wrap="word",
             borderwidth=1,
-            height=5,
+            height=self.get_initial_log_line_count(),
             width=20,
             font=font,
             read_only=True,
@@ -194,13 +235,22 @@ class WorkDialog(CommonDialog):
 
     def toggle_log_frame(self, event=None):
         if self.log_frame.winfo_ismapped():
-            self.log_frame.grid_forget()
-            self.rowconfigure(2, weight=1)
-            self.rowconfigure(4, weight=0)
+            self.hide_log_frame()
         else:
-            self.log_frame.grid(row=4, column=0, sticky="nsew")
-            self.rowconfigure(2, weight=0)
-            self.rowconfigure(4, weight=1)
+            self.show_log_frame()
+
+    def show_log_frame(self):
+        self.log_frame.grid(row=4, column=0, sticky="nsew")
+        self.rowconfigure(2, weight=0)
+        self.rowconfigure(4, weight=1)
+
+    def hide_log_frame(self):
+        self.log_frame.grid_forget()
+        self.rowconfigure(2, weight=1)
+        self.rowconfigure(4, weight=0)
+
+    def clear_log(self) -> None:
+        self.log_text.text.direct_delete("1.0", "end")
 
     def get_ok_text(self):
         return tr("OK")
@@ -256,7 +306,7 @@ class WorkDialog(CommonDialog):
         self._work_events_queue.put(("replace", (text, stream_name)))
         setattr(self, stream_name, getattr(self, stream_name) + text)
 
-    def report_progress(self, value: float, maximum: float) -> None:
+    def report_progress(self, value: Optional[float], maximum: Optional[float]) -> None:
         """Updates progress bar. May be called from another thread."""
         self._work_events_queue.put(("progress", (value, maximum)))
 
@@ -300,26 +350,20 @@ class WorkDialog(CommonDialog):
         elif type == "done":
             self.on_done(args[0])
 
+    def allow_single_success(self) -> bool:
+        return True
+
     def on_done(self, success):
         """NB! Don't call from non-ui thread!"""
         self.success = success
-        if self.success:
-            self._state = "done"
-            self._cancel_button.focus_set()
-            self._cancel_button["default"] = "active"
-            self._ok_button["default"] = "normal"
-        elif self._autostart:
-            # Can't try again if failed with autostart
+        if self.success and self.allow_single_success() or self._autostart:
             self._state = "done"
             self._cancel_button.focus_set()
             self._cancel_button["default"] = "active"
             self._ok_button["default"] = "normal"
         else:
-            # allows trying again when failed
-            self._state = "idle"
-            self._ok_button.focus_set()
-            self._ok_button["default"] = "active"
-            self._cancel_button["default"] = "normal"
+            # allows trying again when failed or wasn't final action
+            self.allow_new_work()
 
         self._progress_bar.stop()
         # need to put to determinate mode, otherwise it looks half done
@@ -327,8 +371,14 @@ class WorkDialog(CommonDialog):
         if self.success and self._autostart and not self.log_frame.winfo_ismapped():
             self.close()
 
-        if not self.success and not self.log_frame.winfo_ismapped():
-            self.toggle_log_frame()
+        if not self.success:
+            self.show_log_frame()
+
+    def allow_new_work(self):
+        self._state = "idle"
+        self._ok_button.focus_set()
+        self._ok_button["default"] = "active"
+        self._cancel_button["default"] = "normal"
 
 
 class SubprocessDialog(WorkDialog):

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny-4.1.1.egg-info/PKG-INFO
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny-4.1.1.egg-info/dependency_links.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny-4.1.1.egg-info/entry_points.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny-4.1.1.egg-info/requires.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny-4.1.1.egg-info/top_level.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/dbus/org.freedesktop.DBus.ObjectManager.xml
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/dbus/org.freedesktop.UDisks2.xml
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/en_GB/LC_MESSAGES/thonny.mo
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/en_GB/LC_MESSAGES/thonny.po
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/assistant.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/birdseye.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/debuggers.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/debugging.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/dock.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/errors.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/flask.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/index.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/modes.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/packages.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/plotter.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/program_arguments.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/shell.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/pt_BR/HELP_CONTENT/turtle.rst
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/register_updates.py
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/vi_VN/LC_MESSAGES/thonny.mo
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/locale/vi_VN/LC_MESSAGES/thonny.po
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/plugins/micropython/base_flashing_dialog.py
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/plugins/micropython/esptool_dialog.py
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/udisks.py

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny-4.0.1.egg-info/PKG-INFO
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny-4.0.1.egg-info/dependency_links.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny-4.0.1.egg-info/entry_points.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny-4.0.1.egg-info/requires.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny-4.0.1.egg-info/top_level.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/thonny/plugins/microbit/api_stubs/builtins.py

No differences were encountered in the control files

More details

Full run details