From 8205c2f220bb7442f0a98b6c2745ab1dd60ac8f7 Mon Sep 17 00:00:00 2001 From: NVDA translation automation Date: Fri, 14 May 2021 00:00:28 +0000 Subject: [PATCH 1/5] L10n updates for: cs From translation svn revision: 61270 Authors: Martina Letochova Stats: 6 183 source/locale/cs/LC_MESSAGES/nvda.po 1 file changed, 6 insertions(+), 183 deletions(-) --- source/locale/cs/LC_MESSAGES/nvda.po | 189 +-------------------------- 1 file changed, 6 insertions(+), 183 deletions(-) diff --git a/source/locale/cs/LC_MESSAGES/nvda.po b/source/locale/cs/LC_MESSAGES/nvda.po index 8bf32012397..c26a279f054 100644 --- a/source/locale/cs/LC_MESSAGES/nvda.po +++ b/source/locale/cs/LC_MESSAGES/nvda.po @@ -5,16 +5,16 @@ msgid "" msgstr "" "Project-Id-Version: NVDA bzr main:5884\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-30 00:01+0000\n" -"PO-Revision-Date: 2021-05-04 23:28+0200\n" -"Last-Translator: Radek Žalud \n" +"POT-Creation-Date: 2021-05-07 00:01+0000\n" +"PO-Revision-Date: 2021-05-08 14:46+0100\n" +"Last-Translator: Martina \n" "Language-Team: CS \n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.4.3\n" +"X-Generator: Poedit 1.5.7\n" #. Translators: A mode that allows typing in the actual 'native' characters for an east-Asian input method language currently selected, rather than alpha numeric (Roman/English) characters. msgid "Native input" @@ -82,19 +82,16 @@ msgstr "neznámá metoda vstupu" #. Translators: The label shown for a spelling and grammar error in the NVDA Elements List dialog in Microsoft Word. #. {text} will be replaced with the text of the spelling error. -#, python-brace-format msgid "spelling and grammar: {text}" msgstr "pravopisná a gramatická chyba: {text}" #. Translators: The label shown for a spelling error in the NVDA Elements List dialog in Microsoft Word. #. {text} will be replaced with the text of the spelling error. -#, python-brace-format msgid "spelling: {text}" msgstr "pravopisná chyba: {text}" #. Translators: The label shown for a grammar error in the NVDA Elements List dialog in Microsoft Word. #. {text} will be replaced with the text of the spelling error. -#, python-brace-format msgid "grammar: {text}" msgstr "gramatická chyba: {text}" @@ -553,7 +550,6 @@ msgstr "navšt" #. Translators: Spoken to indicate the position of an item in a group of items (such as a list). #. {number} is replaced with the number of the item in the group. #. {total} is replaced with the total number of items in the group. -#, python-brace-format msgid "{number} of {total}" msgstr "{number} z {total}" @@ -565,25 +561,21 @@ msgstr "úr %s" #. Translators: Displayed in braille for the table cell row numbers when a cell spans multiple rows. #. Occurences of %s are replaced with the corresponding row numbers. -#, python-brace-format msgid "r{rowNumber}-{rowSpan}" msgstr "ř{rowNumber}-{rowSpan}" #. Translators: Displayed in braille for a table cell row number. #. %s is replaced with the row number. -#, python-brace-format msgid "r{rowNumber}" msgstr "ř{rowNumber}" #. Translators: Displayed in braille for the table cell column numbers when a cell spans multiple columns. #. Occurences of %s are replaced with the corresponding column numbers. -#, python-brace-format msgid "c{columnNumber}-{columnSpan}" msgstr "s{columnNumber}-{columnSpan}" #. Translators: Displayed in braille for a table cell column number. #. %s is replaced with the column number. -#, python-brace-format msgid "c{columnNumber}" msgstr "s{columnNumber}" @@ -623,13 +615,11 @@ msgid "Unknown braille display" msgstr "Neznámý braillský řádek" #. Translators: Name of a Bluetooth serial communications port. -#, python-brace-format msgid "Bluetooth Serial: {port} ({deviceName})" msgstr "Připojení Bluetooth: {port} ({deviceName})" #. Translators: Name of a serial communications port. #. Translators: Name of a serial communications port -#, python-brace-format msgid "Serial: {portName}" msgstr "Připojení: {portName}" @@ -638,12 +628,10 @@ msgid "Unsupported input" msgstr "Nepodporovaný vstup" #. Translators: Reported when a braille input modifier is released. -#, python-brace-format msgid "{modifier} released" msgstr "{modifier} uvolněno" #. Translators: Reported when a braille input modifier is pressed. -#, python-brace-format msgid "{modifier} pressed" msgstr "{modifier} stisknuto" @@ -2044,73 +2032,61 @@ msgid "pink-red" msgstr "růžově červená" #. Translators: a bright color (HSV saturation 100% and value 100%) -#, python-brace-format msgctxt "color variation" msgid "bright {color}" msgstr "jasně {color}" #. Translators: color (HSV saturation 100% and value 72%) -#, python-brace-format msgctxt "color variation" msgid "{color}" msgstr "{color}" #. Translators: a dark color (HSV saturation 100% and value 44%) -#, python-brace-format msgctxt "color variation" msgid "dark {color}" msgstr "tmavě {color}" #. Translators: a very dark color (HSV saturation 100% and value 16%) -#, python-brace-format msgctxt "color variation" msgid "very dark {color}" msgstr "velmi tmavě {color}" #. Translators: a light pale color (HSV saturation 50% and value 100%) -#, python-brace-format msgctxt "color variation" msgid "light pale {color}" msgstr "světle bledě {color}" #. Translators: a pale color (HSV saturation 50% and value 72%) -#, python-brace-format msgctxt "color variation" msgid "pale {color}" msgstr "bledě {color}" #. Translators: a dark pale color (HSV saturation 50% and value 44%) -#, python-brace-format msgctxt "color variation" msgid "dark pale {color}" msgstr "tmavě bledě {color}" #. Translators: a very dark color (HSV saturation 50% and value 16%) -#, python-brace-format msgctxt "color variation" msgid "very dark pale {color}" msgstr "velmi tmavě bledě {color}" #. Translators: a light color almost white - hardly any hue (HSV saturation 10% and value 100%) -#, python-brace-format msgctxt "color variation" msgid "{color} white" msgstr "{color} bílá" #. Translators: a color almost grey - hardly any hue (HSV saturation 10% and value 72%) -#, python-brace-format msgctxt "color variation" msgid "{color} grey" msgstr "{color} šedá" #. Translators: a dark color almost grey - hardly any hue (HSV saturation 10% and value 44%) -#, python-brace-format msgctxt "color variation" msgid "dark {color} grey" msgstr "tmavě {color} šedá" #. Translators: a very dark color almost grey - hardly any hue (HSV saturation 10% and value 16%) -#, python-brace-format msgctxt "color variation" msgid "very dark {color} grey" msgstr "velmi tmavě {color} šedá" @@ -4328,7 +4304,6 @@ msgid "AC power on" msgstr "Napájení zapnuto" #. Translators: This is the estimated remaining runtime of the laptop battery. -#, python-brace-format msgid "{hours:d} hours and {minutes:d} minutes remaining" msgstr "zbývá {hours:d} hodin a {minutes:d} minut" @@ -4449,7 +4424,6 @@ msgstr "výchozí profil aktivní" #. Translators: Message announced when the command to report the current configuration profile #. is active. The placeholder '{profilename}' is replaced with the name of the current active profile. -#, python-brace-format msgid "{profileName} configuration profile active" msgstr "Profil {profileName} aktivní" @@ -4842,20 +4816,17 @@ msgstr "Nelze změnit aktivní profil při otevřeném dialogu NVDA" #. Translators: a message when a configuration profile is manually deactivated. #. {profile} is replaced with the profile's name. -#, python-brace-format msgid "{profile} profile deactivated" msgstr "Profil {profile} deaktivován" #. Translators: a message when a configuration profile is manually activated. #. {profile} is replaced with the profile's name. -#, python-brace-format msgid "{profile} profile activated" msgstr "Profil {profile} aktivován" #. Translators: The description shown in input help for a script that #. activates or deactivates a config profile. #. {profile} is replaced with the profile's name. -#, python-brace-format msgid "Activates or deactivates the {profile} configuration profile" msgstr "Aktivuje nebo deaktivuje uživatelský profil {profile}" @@ -5278,7 +5249,6 @@ msgstr "Somálština" #. Translators: The pattern defining how languages are displayed and sorted in in the general #. setting panel language list. Use "{desc}, {lc}" (most languages) to display first full language #. name and then ISO; use "{lc}, {desc}" to display first ISO language code and then full language name. -#, python-brace-format msgid "{desc}, {lc}" msgstr "{desc}, {lc}" @@ -6467,27 +6437,22 @@ msgid "object mode" msgstr "objektový režim" #. Translators: a touch screen action performed once -#, python-brace-format msgid "single {action}" msgstr "jedno {action}" #. Translators: a touch screen action performed twice -#, python-brace-format msgid "double {action}" msgstr "dvojí {action}" #. Translators: a touch screen action performed 3 times -#, python-brace-format msgid "tripple {action}" msgstr "trojité {action}" #. Translators: a touch screen action performed 4 times -#, python-brace-format msgid "quadruple {action}" msgstr "čtyřnásobné {action}" #. Translators: a touch screen action using multiple fingers -#, python-brace-format msgid "{numFingers} finger {action}" msgstr "{numFingers} prsty {action}" @@ -6554,13 +6519,11 @@ msgstr "%d znaků" #. Translators: Announced when a text has been copied to clipboard. #. {text} is replaced by the copied text. -#, python-brace-format msgid "Copied to clipboard: {text}" msgstr "Zkopírováno: {text}" #. Translators: Displayed in braille when a text has been copied to clipboard. #. {text} is replaced by the copied text. -#, python-brace-format msgid "Copied: {text}" msgstr "Zkop: {text}" @@ -6603,7 +6566,6 @@ msgstr "Žádná aktualizace není k dispozici." #. Translators: A message indicating that an updated version of NVDA has been downloaded #. and is pending to be installed. -#, python-brace-format msgid "NVDA version {version} has been downloaded and is pending installation." msgstr "Verze NVDA {version} je stažena a čeká na instalaci." @@ -6639,7 +6601,6 @@ msgstr "&Prohlédnout doplňky..." #. Translators: The label of a button to install a pending NVDA update. #. {version} will be replaced with the version; e.g. 2011.3. -#, python-brace-format msgid "&Install NVDA {version}" msgstr "na&instalovat NVDA {version}" @@ -6649,7 +6610,6 @@ msgstr "&Znovu stáhnout aktualizaci" #. Translators: A message indicating that an updated version of NVDA is available. #. {version} will be replaced with the version; e.g. 2011.3. -#, python-brace-format msgid "NVDA version {version} is available." msgstr "je dostupná nová verze {version}." @@ -6668,7 +6628,6 @@ msgid "&Close" msgstr "&Zavřít" #. Translators: A message indicating that an updated version of NVDA is ready to be installed. -#, python-brace-format msgid "NVDA version {version} is ready to be installed.\n" msgstr "Verze NVDA {version} je připravena k instalaci.\n" @@ -6696,7 +6655,7 @@ msgstr "Aktualizovat &později" #. Translators: The message when a downloaded update file could not be preserved. msgid "Unable to postpone update." -msgstr "Aktualizaci nelze odložit." +msgstr "Nelze aktualizovat." #. Translators: The title of the dialog displayed while downloading an NVDA update. msgid "Downloading Update" @@ -6761,12 +6720,10 @@ msgstr "NonVisual Desktop Access" msgid "A free and open source screen reader for Microsoft Windows" msgstr "Otevřený a volně šiřitelný odečítač obrazovky pro Microsoft Windows" -#, python-brace-format msgid "Copyright (C) {years} NVDA Contributors" msgstr "Copyright (C) {years} NVDA Tým" #. Translators: "About NVDA" dialog box message -#, python-brace-format msgid "" "{longName} ({name})\n" "Version: {version}\n" @@ -6811,7 +6768,6 @@ msgstr "" "hlavní nabídky NVDA." #. Translators: the message that is shown when the user tries to install an add-on from windows explorer and NVDA is not running. -#, python-brace-format msgid "" "Cannot install NVDA add-on from {path}.\n" "You must be running NVDA to be able to install add-ons." @@ -6824,7 +6780,6 @@ msgid "Secure Desktop" msgstr "Zabezpečená obrazovka" #. Translators: Reports navigator object's dimensions (example output: object edges positioned 20 per cent from left edge of screen, 10 per cent from top edge of screen, width is 40 per cent of screen, height is 50 per cent of screen). -#, python-brace-format msgid "" "Object edges positioned {left:.1f} per cent from left edge of screen, " "{top:.1f} per cent from top edge of screen, width is {width:.1f} per cent of " @@ -6835,12 +6790,10 @@ msgstr "" "nahoru" #. Translators: a message announcing a candidate's character and description. -#, python-brace-format msgid "{symbol} as in {description}" msgstr "{symbol} jako v {description}" #. Translators: a formatted message announcing a candidate's number and candidate text. -#, python-brace-format msgid "{number} {candidate}" msgstr "{number} {candidate}" @@ -6916,12 +6869,11 @@ msgid "Shows options related to selected text or text at the cursor" msgstr "Zobrazí možnosti týkající se vybraného textu nebo textu pod kurzorem" #. Translators: A position in a Kindle book -#, no-python-format, python-brace-format +#, no-python-format msgid "{bookPercentage}%, location {curLocation} of {maxLocation}" msgstr "{bookPercentage}%, umístění {curLocation} z {maxLocation}" #. Translators: a page in a Kindle book -#, python-brace-format msgid "Page {pageNumber}" msgstr "Strana {pageNumber}" @@ -7019,7 +6971,6 @@ msgid "unread" msgstr "nečteno" #. Translators: A message announcing what configuration profile is currently being edited. -#, python-brace-format msgid "Editing profile {profile}" msgstr "Upravován profil {profile}" @@ -7067,17 +7018,14 @@ msgid "Waiting for Outlook..." msgstr "Čekám na Outlook..." #. Translators: a message reporting the date of a all day Outlook calendar entry -#, python-brace-format msgid "{date} (all day)" msgstr "{date} (celý den)" #. Translators: a message reporting the time range (i.e. start time to end time) of an Outlook calendar entry -#, python-brace-format msgid "{startTime} to {endTime}" msgstr "{startTime} do {endTime}" #. Translators: A message reported when on a calendar appointment in Microsoft Outlook -#, python-brace-format msgid "Appointment {subject}, {time}" msgstr "Schůzka {subject}, {time}" @@ -7239,7 +7187,6 @@ msgid "Master Thumbnails" msgstr "Předloha s náhledy" #. Translators: the label for a slide in Microsoft PowerPoint. -#, python-brace-format msgid "Slide {slideNumber}" msgstr "Snímek {slideNumber}" @@ -7248,92 +7195,74 @@ msgid "other item" msgstr "jiná položka" #. Translators: A message when a shape is infront of another shape on a Powerpoint slide -#, python-brace-format msgid "covers left of {otherShape} by {distance:.3g} points" msgstr "zakrývá levou stranu {otherShape} o {distance:.3g} bodů" #. Translators: A message when a shape is behind another shape on a powerpoint slide -#, python-brace-format msgid "behind left of {otherShape} by {distance:.3g} points" msgstr "za levou stranou {otherShape} o {distance:.3g} bodů" #. Translators: A message when a shape is infront of another shape on a Powerpoint slide -#, python-brace-format msgid "covers top of {otherShape} by {distance:.3g} points" msgstr "zakrývá vršek {otherShape} by {distance:.3g} points" #. Translators: A message when a shape is behind another shape on a powerpoint slide -#, python-brace-format msgid "behind top of {otherShape} by {distance:.3g} points" msgstr "za vrškem {otherShape} o {distance:.3g} bodů" #. Translators: A message when a shape is infront of another shape on a Powerpoint slide -#, python-brace-format msgid "covers right of {otherShape} by {distance:.3g} points" msgstr "zakrývá pravou stranu {otherShape} o {distance:.3g} bodů" #. Translators: A message when a shape is behind another shape on a powerpoint slide -#, python-brace-format msgid "behind right of {otherShape} by {distance:.3g} points" msgstr "za pravou stranou {otherShape} o {distance:.3g} bodů" #. Translators: A message when a shape is infront of another shape on a Powerpoint slide -#, python-brace-format msgid "covers bottom of {otherShape} by {distance:.3g} points" msgstr "zakrývá spodek {otherShape} o {distance:.3g} bodů" #. Translators: A message when a shape is behind another shape on a powerpoint slide -#, python-brace-format msgid "behind bottom of {otherShape} by {distance:.3g} points" msgstr "za spodkem {otherShape} o {distance:.3g} bodů" #. Translators: A message when a shape is infront of another shape on a Powerpoint slide -#, python-brace-format msgid "covers {otherShape}" msgstr "zakrývá {otherShape}" #. Translators: A message when a shape is behind another shape on a powerpoint slide -#, python-brace-format msgid "behind {otherShape}" msgstr "za {otherShape}" #. Translators: For a shape within a Powerpoint Slide, this is the distance in points from the shape's left edge to the slide's left edge -#, python-brace-format msgid "{distance:.3g} points from left slide edge" msgstr "{distance:.3g} bodů od levého okraje snímku" #. Translators: For a shape too far off the left edge of a Powerpoint Slide, this is the distance in points from the shape's left edge (off the slide) to the slide's left edge (where the slide starts) -#, python-brace-format msgid "Off left slide edge by {distance:.3g} points" msgstr "Mimo levý okraj snímku o {distance:.3g} bodů" #. Translators: For a shape within a Powerpoint Slide, this is the distance in points from the shape's top edge to the slide's top edge -#, python-brace-format msgid "{distance:.3g} points from top slide edge" msgstr "{distance:.3g} bodů od vrchního okraje snímku" #. Translators: For a shape too far off the top edge of a Powerpoint Slide, this is the distance in points from the shape's top edge (off the slide) to the slide's top edge (where the slide starts) -#, python-brace-format msgid "Off top slide edge by {distance:.3g} points" msgstr "Mimo vrchní okraj snímku o {distance:.3g} bodů" #. Translators: For a shape within a Powerpoint Slide, this is the distance in points from the shape's right edge to the slide's right edge -#, python-brace-format msgid "{distance:.3g} points from right slide edge" msgstr "{distance:.3g} bodů od pravého okraje snímku" #. Translators: For a shape too far off the right edge of a Powerpoint Slide, this is the distance in points from the shape's right edge (off the slide) to the slide's right edge (where the slide starts) -#, python-brace-format msgid "Off right slide edge by {distance:.3g} points" msgstr "Mimo pravý okraj snímku o {distance:.3g} bodů" #. Translators: For a shape within a Powerpoint Slide, this is the distance in points from the shape's bottom edge to the slide's bottom edge -#, python-brace-format msgid "{distance:.3g} points from bottom slide edge" msgstr "{distance:.3g} bodů od spodního okraje snímku" #. Translators: For a shape too far off the bottom edge of a Powerpoint Slide, this is the distance in points from the shape's bottom edge (off the slide) to the slide's bottom edge (where the slide starts) -#, python-brace-format msgid "Off bottom slide edge by {distance:.3g} points" msgstr "Mimo spodní okraj snímku o {distance:.3g} bodů" @@ -7347,12 +7276,10 @@ msgstr "" "tím nemění, jen co můžete číst s NVDA." #. Translators: The title of the current slide (with notes) in a running Slide Show in Microsoft PowerPoint. -#, python-brace-format msgid "Slide show notes - {slideName}" msgstr "Poznámky pro prezentaci - {slideName}" #. Translators: The title of the current slide in a running Slide Show in Microsoft PowerPoint. -#, python-brace-format msgid "Slide show - {slideName}" msgstr "Prezentace - {slideName}" @@ -8009,7 +7936,6 @@ msgid "OK" msgstr "OK" #. Translators: message shown in the Addon Information dialog. -#, python-brace-format msgid "" "{summary} ({name})\n" "Version: {version}\n" @@ -8022,7 +7948,6 @@ msgstr "" "Popis: {description}\n" #. Translators: the url part of the About Add-on information -#, python-brace-format msgid "URL: {url}" msgstr "URL: {url}" @@ -8109,13 +8034,11 @@ msgid "Choose Add-on Package File" msgstr "Vyberte balíček s doplňkem" #. Translators: the label for the NVDA add-on package file type in the Choose add-on dialog. -#, python-brace-format msgid "NVDA Add-on Package (*.{ext})" msgstr "Balíček s doplňkem (*.{ext})" #. Translators: Presented when attempting to remove the selected add-on. #. {addon} is replaced with the add-on name. -#, python-brace-format msgid "" "Are you sure you wish to remove the {addon} add-on from NVDA? This cannot be " "undone." @@ -8161,12 +8084,10 @@ msgid "&Enable add-on" msgstr "&Povolit doplněk" #. Translators: The message displayed when the add-on cannot be disabled. -#, python-brace-format msgid "Could not disable the {description} add-on." msgstr "Nelze zakázat doplněk {description}" #. Translators: The message displayed when the add-on cannot be enabled. -#, python-brace-format msgid "Could not enable the {description} add-on." msgstr "Nelze povolit doplněk {description}" @@ -8187,7 +8108,6 @@ msgstr "Instalace doplňku" #. Translators: A message asking if the user wishes to update an add-on with the same version #. currently installed according to the version number. -#, python-brace-format msgid "" "You are about to install version {newVersion} of {summary}, which appears to " "be already installed. Would you still like to update?" @@ -8197,7 +8117,6 @@ msgstr "" #. Translators: A message asking if the user wishes to update a previously installed #. add-on with this one. -#, python-brace-format msgid "" "A version of this add-on is already installed. Would you like to update " "{summary} version {curVersion} to version {newVersion}?" @@ -8224,7 +8143,6 @@ msgstr "Nelze instalovat doplňky ve Windows Store verzi NVDA" #. Translators: The message displayed when installing an add-on package is prohibited, #. because it requires a later version of NVDA than is currently installed. -#, python-brace-format msgid "" "Installation of {summary} {version} has been blocked. The minimum NVDA " "version required for this add-on is {minimumNVDAVersion}, your current NVDA " @@ -8240,7 +8158,6 @@ msgstr "Doplněk není kompatibilní" #. Translators: A message informing the user that this addon can not be installed #. because it is not compatible. -#, python-brace-format msgid "" "Installation of {summary} {version} has been blocked. An updated version of " "this add-on is required, the minimum add-on API supported by this version of " @@ -8250,7 +8167,6 @@ msgstr "" "doplněk, minimálně podporovaná verze API je {backCompatToAPIVersion}" #. Translators: A message asking the user if they really wish to install an addon. -#, python-brace-format msgid "" "Are you sure you want to install this add-on?\n" "Only install add-ons from trusted sources.\n" @@ -8485,7 +8401,6 @@ msgstr "Uživatelská příručka nenalezena." #. Translators: Describes a gesture in the Input Gestures dialog. #. {main} is replaced with the main part of the gesture; e.g. alt+tab. #. {source} is replaced with the gesture's source; e.g. laptop keyboard. -#, python-brace-format msgid "{main} ({source})" msgstr "{main} ({source})" @@ -8496,7 +8411,6 @@ msgstr "Zadejte vstupní příkaz:" #. Translators: An gesture that will be emulated by some other new gesture. The token {emulateGesture} #. will be replaced by the gesture that can be triggered by a mapped gesture. #. E.G. Emulate key press: NVDA+b -#, python-brace-format msgid "Emulate key press: {emulateGesture}" msgstr "Emulovat stisk kláves: {emulateGesture}" @@ -8505,12 +8419,10 @@ msgid "Enter gesture to emulate:" msgstr "Zadejte vstupní příkaz:" #. Translators: The label for a filtered category in the Input Gestures dialog. -#, python-brace-format msgid "{category} (1 result)" msgstr "{category} (1 výsledek)" #. Translators: The label for a filtered category in the Input Gestures dialog. -#, python-brace-format msgid "{category} ({nbResults} results)" msgstr "{category} ({nbResults} výsledků)" @@ -8630,7 +8542,6 @@ msgstr "" "aktualizována." #. Translators: a message in the installer telling the user NVDA is now located in a different place. -#, python-brace-format msgid "" "The installation path for NVDA has changed. it will now be installed in " "{path}" @@ -9767,7 +9678,6 @@ msgstr "&Port:" #. Translators: The message in a dialog presented when NVDA is unable to load the selected #. braille display. -#, python-brace-format msgid "Could not load the {display} display." msgstr "Nemohu načíst řádek {display}." @@ -9845,13 +9755,11 @@ msgstr "Zobrazení kontextu zaměření" #. Translators: This message is presented when #. NVDA is unable to load a single vision enhancement provider. -#, python-brace-format msgid "Could not load the {providerName} vision enhancement provider" msgstr "Nelze načíst {providerName}" #. Translators: This message is presented when NVDA is unable to #. load multiple vision enhancement providers. -#, python-brace-format msgid "" "Could not load the following vision enhancement providers:\n" "{providerNames}" @@ -9865,14 +9773,12 @@ msgstr "Chyba poskytovatele vizuálního zlepšení" #. Translators: This message is presented when #. NVDA is unable to gracefully terminate a single vision enhancement provider. -#, python-brace-format msgid "" "Could not gracefully terminate the {providerName} vision enhancement provider" msgstr "Nelze správně ukončit {providerName}" #. Translators: This message is presented when #. NVDA is unable to terminate multiple vision enhancement providers. -#, python-brace-format msgid "" "Could not gracefully terminate the following vision enhancement providers:\n" "{providerNames}" @@ -10036,12 +9942,10 @@ msgstr "sloupec %s" #. Translators: Speaks the row and column span added to the current row and column numbers #. (example output: through row 5 column 3). -#, python-brace-format msgid "through row {row} column {column}" msgstr "přes řádek {row} sloupec {column}" #. Translators: Speaks number of columns and rows in a table (example output: with 3 rows and 2 columns). -#, python-brace-format msgid "with {rowCount} rows and {columnCount} columns" msgstr "s {rowCount} řádky a {columnCount} sloupci" @@ -10085,7 +9989,6 @@ msgstr "úsek %s" #. Translators: Indicates the text column number in a document. #. {0} will be replaced with the text column number. #. {1} will be replaced with the number of text columns. -#, python-brace-format msgid "column {0} of {1}" msgstr "sloupec {0} of {1}" @@ -10138,30 +10041,25 @@ msgstr "bez okrajů" #. This occurs when, for example, a gradient pattern is applied to a spreadsheet cell. #. {color1} will be replaced with the first background color. #. {color2} will be replaced with the second background color. -#, python-brace-format msgid "{color1} to {color2}" msgstr "{color1} na {color2}" #. Translators: Reported when both the text and background colors change. #. {color} will be replaced with the text color. #. {backgroundColor} will be replaced with the background color. -#, python-brace-format msgid "{color} on {backgroundColor}" msgstr "{color} na {backgroundColor}" #. Translators: Reported when the text color changes (but not the background color). #. {color} will be replaced with the text color. -#, python-brace-format msgid "{color}" msgstr "{color}" #. Translators: Reported when the background color changes (but not the text color). #. {backgroundColor} will be replaced with the background color. -#, python-brace-format msgid "{backgroundColor} background" msgstr "{backgroundColor} pozadí" -#, python-brace-format msgid "background pattern {pattern}" msgstr "Vzor pozadí {pattern}" @@ -10373,7 +10271,6 @@ msgid "out of table" msgstr "vně tabulky" #. Translators: reports number of columns and rows in a table (example output: table with 3 columns and 5 rows). -#, python-brace-format msgid "table with {columnCount} columns and {rowCount} rows" msgstr "tabulka s {columnCount} sloupci a {rowCount} řádky" @@ -10394,17 +10291,14 @@ msgid "word" msgstr "slovo" #. Translators: the current position's screen coordinates in pixels -#, python-brace-format msgid "Positioned at {x}, {y}" msgstr "Umístěno na {x}, {y}" #. Translators: current position in a document as a percentage of the document length -#, python-brace-format msgid "{curPercent:.0f}%" msgstr "{curPercent:.0f}%" #. Translators: the current position's screen coordinates in pixels -#, python-brace-format msgid "at {x}, {y}" msgstr "na {x}, {y}" @@ -10494,7 +10388,6 @@ msgid "Taskbar" msgstr "Úlohová lišta" #. Translators: a color, broken down into its RGB red, green, blue parts. -#, python-brace-format msgid "RGB red {rgb.red}, green {rgb.green}, blue {rgb.blue}" msgstr "RGB červená {rgb.red}, zelená {rgb.green}, modrá {rgb.blue}" @@ -10514,14 +10407,12 @@ msgstr "" "ohlašování formátování dokumentu." #. Translators: a message reported in the SetColumnHeader script for Microsoft Word. -#, python-brace-format msgid "Set row {rowNumber} column {columnNumber} as start of column headers" msgstr "" "Řádek {rowNumber} sloupec {columnNumber} nastaven jako začátek záhlaví " "sloupců" #. Translators: a message reported in the SetColumnHeader script for Microsoft Word. -#, python-brace-format msgid "" "Already set row {rowNumber} column {columnNumber} as start of column headers" msgstr "" @@ -10529,12 +10420,10 @@ msgstr "" "sloupců" #. Translators: a message reported in the SetColumnHeader script for Microsoft Word. -#, python-brace-format msgid "Removed row {rowNumber} column {columnNumber} from column headers" msgstr "Řádek {rowNumber} sloupec {columnNumber} odstraněn ze záhlaví sloupců" #. Translators: a message reported in the SetColumnHeader script for Microsoft Word. -#, python-brace-format msgid "Cannot find row {rowNumber} column {columnNumber} in column headers" msgstr "" "Nelze najít řádek {rowNumber} sloupec {columnNumber} v záhlaví sloupců" @@ -10548,13 +10437,11 @@ msgstr "" "buňky níže a vpravo v této tabulce. Dvojitým stiskem se toto nastavení zruší." #. Translators: a message reported in the SetRowHeader script for Microsoft Word. -#, python-brace-format msgid "Set row {rowNumber} column {columnNumber} as start of row headers" msgstr "" "Řádek {rowNumber} sloupec {columnNumber} nastaven jako začátek záhlaví řádků" #. Translators: a message reported in the SetRowHeader script for Microsoft Word. -#, python-brace-format msgid "" "Already set row {rowNumber} column {columnNumber} as start of row headers" msgstr "" @@ -10562,12 +10449,10 @@ msgstr "" "řádků" #. Translators: a message reported in the SetRowHeader script for Microsoft Word. -#, python-brace-format msgid "Removed row {rowNumber} column {columnNumber} from row headers" msgstr "Řádek {rowNumber} sloupec {columnNumber} odstraněn ze záhlaví řádků" #. Translators: a message reported in the SetRowHeader script for Microsoft Word. -#, python-brace-format msgid "Cannot find row {rowNumber} column {columnNumber} in row headers" msgstr "Nelze najít řádek {rowNumber} sloupec {columnNumber} v záhlaví řádků" @@ -10606,27 +10491,22 @@ msgid "&Errors" msgstr "&Chyby" #. Translators: The label shown for an insertion change -#, python-brace-format msgid "insertion: {text}" msgstr "vloženo: {text}" #. Translators: The label shown for a deletion change -#, python-brace-format msgid "deletion: {text}" msgstr "odstraněno: {text}" #. Translators: The general label shown for track changes -#, python-brace-format msgid "track change: {text}" msgstr "změna stopy: {text}" #. Translators: The message reported for a comment in Microsoft Word -#, python-brace-format msgid "Comment: {comment} by {author} on {date}" msgstr "Komentář: {comment} od {author} dne {date}" #. Translators: The message reported for a comment in Microsoft Word -#, python-brace-format msgid "{comment} by {author} on {date}" msgstr "{comment} od {author} dne {date}" @@ -11001,7 +10881,6 @@ msgid "item" msgstr "položka" #. Translators: Message to be spoken to report Series Color -#, python-brace-format msgid "Series color: {colorName} " msgstr "Barva řady: {colorName} " @@ -11091,7 +10970,6 @@ msgid "Shape" msgstr "Obdélník" #. Translators: Message reporting the title and type of a chart. -#, python-brace-format msgid "Chart title: {chartTitle}, type: {chartType}" msgstr "Název grafu: {chartTitle}, typ: {chartType}" @@ -11105,7 +10983,6 @@ msgid "There are total %d series in this chart" msgstr "Celkem %d řad v tomto grafu" #. Translators: Specifies the number and name of a series when listing series in a chart. -#, python-brace-format msgid "series {number} {name}" msgstr "řada {number} {name}" @@ -11120,66 +10997,55 @@ msgstr "Prvky grafu" #. Translators: Details about a series in a chart. For example, this might report "foo series 1 of 2" #. Translators: Details about a series in a chart. #. For example, this might report "foo series 1 of 2" -#, python-brace-format msgid "{seriesName} series {seriesIndex} of {seriesCount}" msgstr "{seriesName} řada {seriesIndex} z {seriesCount}" #. Translators: Message to be spoken to report Slice Color in Pie Chart -#, python-brace-format msgid "Slice color: {colorName} " msgstr "Barva výseče: {colorName} " #. Translators: For line charts, indicates no change from the previous data point on the left -#, python-brace-format msgid "no change from point {previousIndex}, " msgstr "žádná změna od bodu {previousIndex}, " #. Translators: For line charts, indicates an increase from the previous data point on the left -#, python-brace-format msgid "Increased by {incrementValue} from point {previousIndex}, " msgstr "Zvýšeno o {incrementValue} od bodu {previousIndex}, " #. Translators: For line charts, indicates a decrease from the previous data point on the left -#, python-brace-format msgid "decreased by {decrementValue} from point {previousIndex}, " msgstr "sníženo o {decrementValue} od bodu {previousIndex}, " #. Translators: Specifies the category of a data point. #. {categoryAxisTitle} will be replaced with the title of the category axis; e.g. "Month". #. {categoryAxisData} will be replaced with the category itself; e.g. "January". -#, python-brace-format msgid "{categoryAxisTitle} {categoryAxisData}: " msgstr "{categoryAxisTitle} {categoryAxisData}: " #. Translators: Specifies the category of a data point. #. {categoryAxisData} will be replaced with the category itself; e.g. "January". -#, python-brace-format msgid "Category {categoryAxisData}: " msgstr "Kategorie {categoryAxisData}: " #. Translators: Specifies the value of a data point. #. {valueAxisTitle} will be replaced with the title of the value axis; e.g. "Amount". #. {valueAxisData} will be replaced with the value itself; e.g. "1000". -#, python-brace-format msgid "{valueAxisTitle} {valueAxisData}" msgstr "{valueAxisTitle} {valueAxisData}" #. Translators: Specifies the value of a data point. #. {valueAxisData} will be replaced with the value itself; e.g. "1000". -#, python-brace-format msgid "value {valueAxisData}" msgstr "hodnota {valueAxisData}" #. Translators: Details about a slice of a pie chart. #. For example, this might report "fraction 25.25 percent slice 1 of 5" -#, python-brace-format msgid "" " fraction {fractionValue:.2f} Percent slice {pointIndex} of {pointCount}" msgstr " zlomek {fractionValue:.2f} výseč procent {pointIndex} z {pointCount}" #. Translators: Details about a segment of a chart. #. For example, this might report "column 1 of 5" -#, python-brace-format msgid " {segmentType} {pointIndex} of {pointCount}" msgstr " {segmentType} {pointIndex} z {pointCount}" @@ -11208,7 +11074,6 @@ msgid "Secondary Series Axis" msgstr "Osa sekundární řady" #. Translators: the title of a chart axis -#, python-brace-format msgid " title: {axisTitle}" msgstr " název: {axisTitle}" @@ -11245,7 +11110,6 @@ msgid " minus " msgstr " mínus " #. Translators: This message gives trendline type and name for selected series -#, python-brace-format msgid "" "{seriesName} trendline type: {trendlineType}, name: {trendlineName}, label: " "{trendlineLabel} " @@ -11254,13 +11118,11 @@ msgstr "" "značka: {trendlineLabel} " #. Translators: This message gives trendline type and name for selected series -#, python-brace-format msgid "{seriesName} trendline type: {trendlineType}, name: {trendlineName} " msgstr "" "{seriesName} typ spojnice trendu: {trendlineType}, název: {trendlineName} " #. Translators: Details about a chart title in Microsoft Office. -#, python-brace-format msgid "Chart title: {chartTitle}" msgstr "Název grafu: {chartTitle}" @@ -11269,7 +11131,6 @@ msgid "Untitled chart" msgstr "Bez názvu" #. Translators: Details about the chart area in a Microsoft Office chart. -#, python-brace-format msgid "" "Chart area, height: {chartAreaHeight}, width: {chartAreaWidth}, top: " "{chartAreaTop}, left: {chartAreaLeft}" @@ -11282,7 +11143,6 @@ msgid "Chart area " msgstr "Oblast grafu " #. Translators: Details about the plot area of a Microsoft Office chart. -#, python-brace-format msgid "" "Plot area, inside height: {plotAreaInsideHeight:.0f}, inside width: " "{plotAreaInsideWidth:.0f}, inside top: {plotAreaInsideTop:.0f}, inside left: " @@ -11297,19 +11157,16 @@ msgid "Plot area " msgstr "Oblast grafu " #. Translators: a message for the legend entry of a chart in MS Office -#, python-brace-format msgid "Legend entry for series {seriesName} {seriesIndex} of {seriesCount}" msgstr "Položka legendy pro řadu {seriesName} {seriesIndex} z {seriesCount}" #. Translators: the legend entry for a chart in Microsoft Office -#, python-brace-format msgid "Legend entry {legendEntryIndex} of {legendEntryCount}" msgstr "Položka legendy {legendEntryIndex} z {legendEntryCount}" #. Translators: Details about a legend key for a series in a Microsoft office chart. #. For example, this might report "Legend key for series Temperature 1 of 2" #. See https://support.office.com/en-us/article/Excel-Glossary-53b6ce43-1a9f-4ac2-a33c-d6f64ea2d1fc?CorrelationId=44f003e6-453a-4b14-a9a6-3fb5287109c7&ui=en-US&rs=en-US&ad=US -#, python-brace-format msgid "Legend key for Series {seriesName} {seriesIndex} of {seriesCount}" msgstr "Klíč legendy pro řadu {seriesName} {seriesIndex} z {seriesCount}" @@ -11462,7 +11319,6 @@ msgid "&Sheets" msgstr "&Listy" #. Translators: Used to express an address range in excel. -#, python-brace-format msgid "{start} through {end}" msgstr "{start} do {end}" @@ -11475,22 +11331,18 @@ msgid "Sets the current cell as start of column header" msgstr "Nastaví aktuální buňku jako začátek záhlaví sloupců" #. Translators: a message reported in the SetColumnHeader script for Excel. -#, python-brace-format msgid "Set {address} as start of column headers" msgstr "{address} nastaveno jako začátek záhlaví sloupců" #. Translators: a message reported in the SetColumnHeader script for Excel. -#, python-brace-format msgid "Already set {address} as start of column headers" msgstr "{address} již nastaveno jako začátek záhlaví sloupců" #. Translators: a message reported in the SetColumnHeader script for Excel. -#, python-brace-format msgid "Removed {address} from column headers" msgstr "{address} odstraněno ze záhlaví sloupců" #. Translators: a message reported in the SetColumnHeader script for Excel. -#, python-brace-format msgid "Cannot find {address} in column headers" msgstr "Nelze najít {address} v záhlaví sloupců" @@ -11507,22 +11359,18 @@ msgid "sets the current cell as start of row header" msgstr "nastaví aktuální buňku jako začátek záhlaví řádků" #. Translators: a message reported in the SetRowHeader script for Excel. -#, python-brace-format msgid "Set {address} as start of row headers" msgstr "{address} nastaveno jako začátek záhlaví řádků" #. Translators: a message reported in the SetRowHeader script for Excel. -#, python-brace-format msgid "Already set {address} as start of row headers" msgstr "{address} již nastaveno jako začátek záhlaví řádků" #. Translators: a message reported in the SetRowHeader script for Excel. -#, python-brace-format msgid "Removed {address} from row headers" msgstr "{address} odstraněno ze záhlaví řádků" #. Translators: a message reported in the SetRowHeader script for Excel. -#, python-brace-format msgid "Cannot find {address} in row headers" msgstr "Nelze najít {address} v záhlaví řádků" @@ -11535,15 +11383,12 @@ msgstr "" "buňky níže a vpravo v této oblasti. Dvojitým stiskem se toto nastavení zruší." #. Translators: a message reported in the get location text script for Excel. {0} is replaced with the name of the excel worksheet, and {1} is replaced with the row and column identifier EG "G4" -#, python-brace-format msgid "Sheet {0}, {1}" msgstr "List {0}, {1}" -#, python-brace-format msgid "Input Message is {title}: {message}" msgstr "Vstupní zpráva je {title}: {message}" -#, python-brace-format msgid "Input Message is {message}" msgstr "Vstupní zpráva je {message}" @@ -11560,7 +11405,6 @@ msgid "Opens the note editing dialog" msgstr "Otevře okno pro úpravu poznámek" #. Translators: Dialog text for the note editing dialog -#, python-brace-format msgid "Editing note for cell {address}" msgstr "Upravit poznámku pro buňku {address}" @@ -11571,7 +11415,6 @@ msgstr "Poznámka" #. Translators: This is presented in Excel to show the current selection, for example 'a1 c3 through a10 c10' #. Beware to keep two spaces between the address and the content. Otherwise some synthesizer #. may mix the address and the content when the cell contains a 3-digit number. -#, python-brace-format msgid "{firstAddress} {firstContent} through {lastAddress} {lastContent}" msgstr "{firstAddress} {firstContent} do {lastAddress} {lastContent}" @@ -11664,37 +11507,30 @@ msgid "medium dashed" msgstr "střední čárkovaný" #. Translators: border styles in Microsoft Excel. -#, python-brace-format msgid "{weight} {style}" msgstr "{weight} {style}" #. Translators: border styles in Microsoft Excel. -#, python-brace-format msgid "{color} {desc}" msgstr "{color} {desc}" #. Translators: border styles in Microsoft Excel. -#, python-brace-format msgid "{desc} surrounding border" msgstr "{desc} okolní okraj" #. Translators: border styles in Microsoft Excel. -#, python-brace-format msgid "{desc} top and bottom edges" msgstr "{desc} vrchní a spodní okraje" #. Translators: border styles in Microsoft Excel. -#, python-brace-format msgid "{desc} left and right edges" msgstr "{desc} levé a pravé okraje" #. Translators: border styles in Microsoft Excel. -#, python-brace-format msgid "{desc} up-right and down-right diagonal lines" msgstr "{desc} šikmé čáry vpravo nahoře a vpravo dole" #. Translators: border styles in Microsoft Excel. -#, python-brace-format msgid "{desc} {position}" msgstr "{desc} {position}" @@ -11798,7 +11634,6 @@ msgstr "Textový rámeček" #. Translators: The label shown for a comment in the NVDA Elements List dialog in Microsoft Word. #. {text}, {author} and {date} will be replaced by the corresponding details about the comment. -#, python-brace-format msgid "comment: {text} by {author} on {date}" msgstr "komentář: {text} od {author} dne {date}" @@ -11806,17 +11641,14 @@ msgstr "komentář: {text} od {author} dne {date}" #. {revisionType} will be replaced with the type of revision; e.g. insertion, deletion or property. #. {description} will be replaced with a description of the formatting changes, if any. #. {text}, {author} and {date} will be replaced by the corresponding details about the revision. -#, python-brace-format msgid "{revisionType} {description}: {text} by {author} on {date}" msgstr "{revisionType} {description}: {text} od {author} dne {date}" #. Translators: a distance from the left edge of the page in Microsoft Word -#, python-brace-format msgid "{distance} from left edge of page" msgstr "{distance} od levého okraje strany" #. Translators: a distance from the left edge of the page in Microsoft Word -#, python-brace-format msgid "{distance} from top edge of page" msgstr "{distance} od vrchního okraje strany" @@ -11836,7 +11668,6 @@ msgid "1.5 lines" msgstr "1.5 řádků" #. Translators: line spacing of exactly x point -#, python-brace-format msgctxt "line spacing value" msgid "exactly {space:.1f} pt" msgstr "přesně {space:.1f} bodů" @@ -11928,12 +11759,10 @@ msgid "Moved above blank paragraph" msgstr "Přesunuto nad prázdný odstavec" #. Translators: the message when the outline level / style is changed in Microsoft word -#, python-brace-format msgid "{styleName} style, outline level {outlineLevel}" msgstr "styl {styleName}, úroveň zobrazení {outlineLevel}" #. Translators: a message when increasing or decreasing font size in Microsoft Word -#, python-brace-format msgid "{size:g} point font" msgstr "písmo {size:g} bodů" @@ -11946,33 +11775,27 @@ msgid "Hide nonprinting characters" msgstr "Skrýt netisknutelné znaky" #. Translators: a measurement in Microsoft Word -#, python-brace-format msgid "{offset:.3g} characters" msgstr "{offset:.3g} znaků" #. Translators: a measurement in Microsoft Word -#, python-brace-format msgid "{offset:.3g} inches" msgstr "{offset:.3g} inčů" #. Translators: a measurement in Microsoft Word -#, python-brace-format msgid "{offset:.3g} centimeters" msgstr "{offset:.3g} centimetrů" #. Translators: a measurement in Microsoft Word -#, python-brace-format msgid "{offset:.3g} millimeters" msgstr "{offset:.3g} milimetrů" #. Translators: a measurement in Microsoft Word -#, python-brace-format msgid "{offset:.3g} points" msgstr "{offset:.3g} bodů" #. Translators: a measurement in Microsoft Word #. See http://support.microsoft.com/kb/76388 for details. -#, python-brace-format msgid "{offset:.3g} picas" msgstr "{offset:.3g} pící" From bdfe9a9c52e5c70a7123cff69420c37f1e3d26d4 Mon Sep 17 00:00:00 2001 From: NVDA translation automation Date: Fri, 14 May 2021 00:00:44 +0000 Subject: [PATCH 2/5] L10n updates for: he From translation svn revision: 61270 Authors: Shmuel Naaman Afik Sofir Stats: 4 6 source/locale/he/LC_MESSAGES/nvda.po 1 file changed, 4 insertions(+), 6 deletions(-) --- source/locale/he/LC_MESSAGES/nvda.po | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/source/locale/he/LC_MESSAGES/nvda.po b/source/locale/he/LC_MESSAGES/nvda.po index b0c3961601a..c0b399ef283 100644 --- a/source/locale/he/LC_MESSAGES/nvda.po +++ b/source/locale/he/LC_MESSAGES/nvda.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: NVDA - R3939\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-22 00:02+1000\n" -"PO-Revision-Date: 2021-01-25 23:53+0200\n" +"POT-Creation-Date: 2021-05-07 00:01+0000\n" +"PO-Revision-Date: 2021-05-13 23:16+0300\n" "Last-Translator: shmuel naaman \n" "Language-Team: Shmuel Naaman , Shmuel Retbi Adi " "Kushnir \n" @@ -7927,7 +7927,7 @@ msgstr "&אודות התוסף..." #. Translators: A button in the addon installation blocked dialog which will dismiss the dialog. #. Translators: An ok button on a message dialog. msgid "OK" -msgstr "אשור" +msgstr "אישור" #. Translators: message shown in the Addon Information dialog. #, python-brace-format @@ -9721,7 +9721,6 @@ msgstr "&צורת הסמן לסקירה:" #. Translators: One of the show states of braille messages #. (the timeout mode shows messages for the specific time). -#, fuzzy msgid "Use timeout" msgstr "משך זמן &ההצגה (שניות)" @@ -9733,9 +9732,8 @@ msgstr "הצג &הודעות ללא הגבלת זמן" #. Translators: The label for a setting in braille settings to combobox enabling user #. to decide if braille messages should be shown and automatically disappear from braille display. -#, fuzzy msgid "Show messages" -msgstr "אין הודעות זמינות" +msgstr "הצג הודעות" #. Translators: The label for a setting in braille settings to change how long a message stays on the braille display (in seconds). msgid "Message &timeout (sec)" From 958f8ccdb987e67e4d55b382ae617ebc6c8e6ad2 Mon Sep 17 00:00:00 2001 From: NVDA translation automation Date: Fri, 14 May 2021 04:44:33 +0000 Subject: [PATCH 3/5] L10n updates for: he From translation svn revision: 61272 Authors: Shmuel Naaman Afik Sofir Stats: 1 1 source/locale/he/LC_MESSAGES/nvda.po 1 file changed, 1 insertion(+), 1 deletion(-) --- source/locale/he/LC_MESSAGES/nvda.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/locale/he/LC_MESSAGES/nvda.po b/source/locale/he/LC_MESSAGES/nvda.po index c0b399ef283..043d97a5e92 100644 --- a/source/locale/he/LC_MESSAGES/nvda.po +++ b/source/locale/he/LC_MESSAGES/nvda.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: NVDA - R3939\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-07 00:01+0000\n" +"POT-Creation-Date: 2021-05-14 00:01+0000\n" "PO-Revision-Date: 2021-05-13 23:16+0300\n" "Last-Translator: shmuel naaman \n" "Language-Team: Shmuel Naaman , Shmuel Retbi Adi " From 5c157baf1bf86565a4273580338778dd2dfee8f0 Mon Sep 17 00:00:00 2001 From: Bill Dengler Date: Mon, 17 May 2021 04:49:10 -0400 Subject: [PATCH 4/5] UIA in Windows Console: rename is21H1Plus (PR #12094) Fix for microsoft/terminal#9239 Summary of the issue: Windows 10 21H1 has been released to insiders with significantly reduced scope (i.e. excluding the UIA changes it was originally set to include), making our internal names misleading. Additionally, there are plans to "undock" conhost from Windows, removing the guarantee that a given Windows version will run a particular version of the console (it's technically already possible to run newer console on older Windows, I do it for testing). Description of how this pull request fixes the issue: Renames: - NVDAObjects.UIA.winConsoleUIA.is21H1Plus -> NVDAObjects.UIA.winConsoleUIA.isImprovedTextRangeAvailable - NVDAObjects.UIA.winConsoleUIA.consoleUIATextInfo -> NVDAObjects.UIA.winConsoleUIA.ConsoleUIATextInfo (Start class name with upper case) - NVDAObjects.UIA.winConsoleUIA.consoleUIATextInfoPre21H1 -> NVDAObjects.UIA.winConsoleUIA.ConsoleUIATextInfoWorkaroundEndInclusive - The implementation works around both end points being inclusive (in text ranges) before microsoft/terminal#4018 - Workarounds for expand, collapse, compareEndPoints, setEndPoint, etc Also moves the text override to the workaround textInfo as #10036 is no longer reproducible in new console. Co-authored-by: Reef Turner --- source/NVDAObjects/UIA/winConsoleUIA.py | 79 ++++++++++++++----------- user_docs/en/changes.t2t | 6 ++ 2 files changed, 51 insertions(+), 34 deletions(-) diff --git a/source/NVDAObjects/UIA/winConsoleUIA.py b/source/NVDAObjects/UIA/winConsoleUIA.py index c0d847b0bd3..d34639327d8 100644 --- a/source/NVDAObjects/UIA/winConsoleUIA.py +++ b/source/NVDAObjects/UIA/winConsoleUIA.py @@ -1,7 +1,7 @@ # A part of NonVisual Desktop Access (NVDA) # This file is covered by the GNU General Public License. # See the file COPYING for more details. -# Copyright (C) 2019-2020 Bill Dengler +# Copyright (C) 2019-2021 Bill Dengler import ctypes import NVDAHelper @@ -16,7 +16,7 @@ from ..window import Window -class consoleUIATextInfo(UIATextInfo): +class ConsoleUIATextInfo(UIATextInfo): def __init__(self, obj, position, _rangeObj=None): collapseToEnd = None # We want to limit textInfos to just the visible part of the console. @@ -33,7 +33,7 @@ def __init__(self, obj, position, _rangeObj=None): log.warning("Couldn't get bounding range for console", exc_info=True) # Fall back to presenting the entire buffer. _rangeObj, collapseToEnd = None, None - super(consoleUIATextInfo, self).__init__(obj, position, _rangeObj) + super(ConsoleUIATextInfo, self).__init__(obj, position, _rangeObj) if collapseToEnd is not None: self.collapse(end=collapseToEnd) @@ -90,26 +90,17 @@ def move(self, unit, direction, endPoint=None): def _move(self, unit, direction, endPoint=None): "Perform a move without respect to bounding." - return super(consoleUIATextInfo, self).move(unit, direction, endPoint) + return super(ConsoleUIATextInfo, self).move(unit, direction, endPoint) def __ne__(self, other): """Support more accurate caret move detection.""" return not self == other - def _get_text(self): - # #10036: return a space if the text range is empty. - # Consoles don't actually store spaces, the character is merely left blank. - res = super(consoleUIATextInfo, self)._get_text() - if not res: - return ' ' - else: - return res - -class consoleUIATextInfoPre21H1(consoleUIATextInfo): - """Fixes expand/collapse on end inclusive UIA text ranges, uses rangeFromPoint - instead of broken GetVisibleRanges for bounding, and implements word - movement support.""" +class ConsoleUIATextInfoWorkaroundEndInclusive(ConsoleUIATextInfo): + """Implementation of various workarounds for pre-microsoft/terminal#4018 + conhost: fixes expand/collapse, uses rangeFromPoint instead of broken + GetVisibleRanges for bounding, and implements word movement support.""" def _getBoundingRange(self, obj, position): # We could use IUIAutomationTextRange::getVisibleRanges, but it seems very broken in consoles # once more than a few screens worth of content has been written to the console. @@ -139,12 +130,12 @@ def _getBoundingRange(self, obj, position): return (_rangeObj, None) def collapse(self, end=False): - """Works around a UIA bug on Windows 10 versions before 21H1. + """Works around a UIA bug on conhost versions before microsoft/terminal#4018. When collapsing, consoles seem to incorrectly push the start of the textRange back one character. Correct this by bringing the start back up to where the end is.""" oldInfo = self.copy() - super(consoleUIATextInfo, self).collapse(end=end) + super(ConsoleUIATextInfo, self).collapse(end=end) if not end: self._rangeObj.MoveEndpointByRange( UIAHandler.TextPatternRangeEndpoint_Start, @@ -153,7 +144,7 @@ def collapse(self, end=False): ) def compareEndPoints(self, other, which): - """Works around a UIA bug on Windows 10 versions before 21H1. + """Works around a UIA bug on conhost versions before microsoft/terminal#4018. Even when a console textRange's start and end have been moved to the same position, the console incorrectly reports the end as being past the start. @@ -168,7 +159,7 @@ def compareEndPoints(self, other, which): def setEndPoint(self, other, which): """Override of L{textInfos.TextInfo.setEndPoint}. - Works around a UIA bug on Windows 10 versions before 21H1 that means we can + Works around a UIA bug on conhost versions before microsoft/terminal#4018 that means we can not trust the "end" endpoint of a collapsed (empty) text range for comparisons. """ @@ -205,11 +196,11 @@ def expand(self, unit): wordEndPoints[1] ) else: - return super(consoleUIATextInfo, self).expand(unit) + return super(ConsoleUIATextInfo, self).expand(unit) def _move(self, unit, direction, endPoint=None): if unit == textInfos.UNIT_WORD and direction != 0: - # On Windows 10 versions before 21H1, UIA doesn't implement word + # On conhost versions before microsoft/terminal#4018, UIA doesn't implement word # movement, so we need to do it manually. # Relative to the current line, calculate our offset # and the current word's offsets. @@ -261,8 +252,7 @@ def _move(self, unit, direction, endPoint=None): endPoint=endPoint ) else: # moving by a unit other than word - res = super(consoleUIATextInfo, self).move(unit, direction, - endPoint) + res = super(ConsoleUIATextInfo, self).move(unit, direction, endPoint) if not endPoint: # #10191: IUIAutomationTextRange::move in consoles does not correctly produce a collapsed range # after moving. @@ -309,7 +299,7 @@ def _getWordOffsetsInThisLine(self, offset, lineInfo): ) def _isCollapsed(self): - """Works around a UIA bug on Windows 10 versions before 21H1 that means we + """Works around a UIA bug on conhost versions before microsoft/terminal#4018 that means we cannot trust the "end" endpoint of a collapsed (empty) text range for comparisons. Instead we check to see if we can get the first character from the @@ -322,6 +312,15 @@ def _get_isCollapsed(self): # Check if it has no text. return self._isCollapsed() + def _get_text(self): + # #10036: return a space if the text range is empty. + # Consoles don't actually store spaces, the character is merely left blank. + res = super()._get_text() + if not res: + return ' ' + else: + return res + class consoleUIAWindow(Window): # This is the parent of the console text area, which sometimes gets focus after the text area. @@ -348,19 +347,31 @@ def _get_windowThreadID(self): threadID = super().windowThreadID return threadID - def _get_is21H1Plus(self): - "Returns whether this is a newer version of Windows Console with an improved UIA implementation." + def _get_isImprovedTextRangeAvailable(self): + """This property determines whether microsoft/terminal#4495 + and by extension microsoft/terminal#4018 are present in this conhost. + In consoles before these PRs, a number of workarounds were needed + in our UIA implementation. However, these do not fix all bugs and are + problematic on newer console releases. This property is therefore used + internally to determine whether to activate workarounds and as a + convenience when debugging. + """ # microsoft/terminal#4495: In newer consoles, # IUIAutomationTextRange::getVisibleRanges returns one visible range. + # Therefore, if exactly one range is returned, it is almost definitely a newer console. return self.UIATextPattern.GetVisibleRanges().length == 1 def _get_TextInfo(self): - """Overriding _get_TextInfo and thus the TextInfo property + """Overriding _get_ConsoleUIATextInfo and thus the ConsoleUIATextInfo property on NVDAObjects.UIA.UIA - consoleUIATextInfo bounds review to the visible text. - ConsoleUIATextInfoPre21H1 fixes expand/collapse and implements word - movement.""" - return consoleUIATextInfo if self.is21H1Plus else consoleUIATextInfoPre21H1 + ConsoleUIATextInfo bounds review to the visible text. + ConsoleUIATextInfoWorkaroundEndInclusive fixes expand/collapse and implements + word movement.""" + return ( + ConsoleUIATextInfo + if self.isImprovedTextRangeAvailable + else ConsoleUIATextInfoWorkaroundEndInclusive + ) def detectPossibleSelectionChange(self): try: @@ -384,4 +395,4 @@ def findExtraOverlayClasses(obj, clsList): class WinTerminalUIA(EnhancedTermTypedCharSupport): def _get_TextInfo(self): - return consoleUIATextInfo + return ConsoleUIATextInfo diff --git a/user_docs/en/changes.t2t b/user_docs/en/changes.t2t index 0ba0f8cf996..b34fee79045 100644 --- a/user_docs/en/changes.t2t +++ b/user_docs/en/changes.t2t @@ -151,6 +151,12 @@ This release also drops support for Adobe Flash. - ``speech.speechMode_beeps`` becomes ``speech.SpeechMode.beeps`` - ``speech.speechMode_talk`` becomes ``speech.SpeechMode.talk`` - ``IAccessibleHandler.IAccessibleObjectIdentifierType`` is now ``IAccessibleHandler.types.IAccessibleObjectIdentifierType``. (#12367) +- The following in ``NVDAObjects.UIA.WinConsoleUIA`` have been changed (#12094) + - ``NVDAObjects.UIA.winConsoleUIA.is21H1Plus`` renamed ``NVDAObjects.UIA.winConsoleUIA.isImprovedTextRangeAvailable``. + - ``NVDAObjects.UIA.winConsoleUIA.consoleUIATextInfo`` renamed to start class name with upper case. + - ``NVDAObjects.UIA.winConsoleUIA.consoleUIATextInfoPre21H1`` renamed ``NVDAObjects.UIA.winConsoleUIA.ConsoleUIATextInfoWorkaroundEndInclusive`` + - The implementation works around both end points being inclusive (in text ranges) before [microsoft/terminal PR 4018 https://github.com/microsoft/terminal/pull/4018] + - Workarounds for ``expand``, ``collapse``, ``compareEndPoints``, ``setEndPoint``, etc = 2020.4 = From e57b20bd5f42ee23a8b8b892b2134a7b18137ca0 Mon Sep 17 00:00:00 2001 From: Bill Dengler Date: Mon, 17 May 2021 14:34:45 -0400 Subject: [PATCH 5/5] Use UIATextInfo in newer consoles. --- include/cldr | 2 +- source/NVDAObjects/UIA/winConsoleUIA.py | 279 ++++++++++-------------- 2 files changed, 118 insertions(+), 163 deletions(-) diff --git a/include/cldr b/include/cldr index 443ca2332af..367b79b4a86 160000 --- a/include/cldr +++ b/include/cldr @@ -1 +1 @@ -Subproject commit 443ca2332af0c0f0836e6e008cdae875381bc5af +Subproject commit 367b79b4a86a9cb12314158897d950268dc77b02 diff --git a/source/NVDAObjects/UIA/winConsoleUIA.py b/source/NVDAObjects/UIA/winConsoleUIA.py index d34639327d8..d0455f4aec4 100644 --- a/source/NVDAObjects/UIA/winConsoleUIA.py +++ b/source/NVDAObjects/UIA/winConsoleUIA.py @@ -17,96 +17,23 @@ class ConsoleUIATextInfo(UIATextInfo): + "This class is deprecated, use UIATextInfo instead." def __init__(self, obj, position, _rangeObj=None): - collapseToEnd = None - # We want to limit textInfos to just the visible part of the console. - # Therefore we specifically handle POSITION_FIRST, POSITION_LAST and POSITION_ALL. - if not _rangeObj and position in ( - textInfos.POSITION_FIRST, - textInfos.POSITION_LAST, - textInfos.POSITION_ALL - ): - try: - _rangeObj, collapseToEnd = self._getBoundingRange(obj, position) - except (COMError, RuntimeError): - # We couldn't bound the console. - log.warning("Couldn't get bounding range for console", exc_info=True) - # Fall back to presenting the entire buffer. - _rangeObj, collapseToEnd = None, None - super(ConsoleUIATextInfo, self).__init__(obj, position, _rangeObj) - if collapseToEnd is not None: - self.collapse(end=collapseToEnd) + log.warning("ConsoleUIATextInfo is deprecated, please use UIATextInfo in newer consoles.") + return super().__init__(obj, position, _rangeObj) - def _getBoundingRange(self, obj, position): - """Returns the UIA text range to which the console should be bounded, - and whether the textInfo should be collapsed after instantiation.""" - # microsoft/terminal#4495: In newer consoles, - # IUIAutomationTextRange::getVisibleRanges returns a reliable contiguous range. - _rangeObj = obj.UIATextPattern.GetVisibleRanges().GetElement(0) - collapseToEnd = None - if position == textInfos.POSITION_FIRST: - collapseToEnd = False - elif position == textInfos.POSITION_LAST: - # The exclusive end hangs off the end of the visible ranges. - # Move back one character to remain within bounds. - _rangeObj.MoveEndpointByUnit( - UIAHandler.TextPatternRangeEndpoint_End, - UIAHandler.NVDAUnitsToUIAUnits['character'], - -1 - ) - collapseToEnd = True - return (_rangeObj, collapseToEnd) - def move(self, unit, direction, endPoint=None): - oldInfo = None - if self.basePosition != textInfos.POSITION_CARET: - # Ensure we haven't gone beyond the visible text. - # UIA adds thousands of blank lines to the end of the console. - boundingInfo = self.obj.makeTextInfo(textInfos.POSITION_ALL) - oldInfo = self.copy() - res = self._move(unit, direction, endPoint) - # Console textRanges have access to the entire console buffer. - # However, we want to limit ourselves to onscreen text. - # Therefore, if the textInfo was originally visible, - # but we are now above or below the visible range, - # Restore the original textRange and pretend the move didn't work. - if oldInfo: - try: - if ( - ( - self.compareEndPoints(boundingInfo, "startToStart") < 0 - or self.compareEndPoints(boundingInfo, "startToEnd") >= 0 - ) - and not ( - oldInfo.compareEndPoints(boundingInfo, "startToStart") < 0 - or oldInfo.compareEndPoints(boundingInfo, "startToEnd") >= 0 - ) - ): - self._rangeObj = oldInfo._rangeObj - return 0 - except (COMError, RuntimeError): - pass - return res - - def _move(self, unit, direction, endPoint=None): - "Perform a move without respect to bounding." - return super(ConsoleUIATextInfo, self).move(unit, direction, endPoint) - - def __ne__(self, other): - """Support more accurate caret move detection.""" - return not self == other - - -class ConsoleUIATextInfoWorkaroundEndInclusive(ConsoleUIATextInfo): +class ConsoleUIATextInfoWorkaroundEndInclusive(UIATextInfo): """Implementation of various workarounds for pre-microsoft/terminal#4018 conhost: fixes expand/collapse, uses rangeFromPoint instead of broken GetVisibleRanges for bounding, and implements word movement support.""" - def _getBoundingRange(self, obj, position): + def __init__(self, obj, position, _rangeObj=None): + # We want to limit textInfos to just the visible part of the console. + # Therefore we specifically handle POSITION_FIRST, POSITION_LAST and POSITION_ALL. # We could use IUIAutomationTextRange::getVisibleRanges, but it seems very broken in consoles # once more than a few screens worth of content has been written to the console. # Therefore we resort to using IUIAutomationTextPattern::rangeFromPoint # for the top left, and bottom right of the console window. - _rangeObj = None if position is textInfos.POSITION_FIRST: _rangeObj = self.__class__(obj, obj.location.topLeft)._rangeObj elif position is textInfos.POSITION_LAST: @@ -127,7 +54,7 @@ def _getBoundingRange(self, obj, position): last = self.__class__(obj, textInfos.POSITION_LAST) first.setEndPoint(last, "endToEnd") _rangeObj = first._rangeObj - return (_rangeObj, None) + super(ConsoleUIATextInfoWorkaroundEndInclusive, self).__init__(obj, position, _rangeObj) def collapse(self, end=False): """Works around a UIA bug on conhost versions before microsoft/terminal#4018. @@ -135,7 +62,7 @@ def collapse(self, end=False): textRange back one character. Correct this by bringing the start back up to where the end is.""" oldInfo = self.copy() - super(ConsoleUIATextInfo, self).collapse(end=end) + super(ConsoleUIATextInfoWorkaroundEndInclusive, self).collapse(end=end) if not end: self._rangeObj.MoveEndpointByRange( UIAHandler.TextPatternRangeEndpoint_Start, @@ -143,65 +70,15 @@ def collapse(self, end=False): UIAHandler.TextPatternRangeEndpoint_Start ) - def compareEndPoints(self, other, which): - """Works around a UIA bug on conhost versions before microsoft/terminal#4018. - Even when a console textRange's start and end have been moved to the - same position, the console incorrectly reports the end as being - past the start. - Compare to the start (not the end) when collapsed.""" - selfEndPoint, otherEndPoint = which.split("To") - if selfEndPoint == "end" and self._isCollapsed(): - selfEndPoint = "start" - if otherEndPoint == "End" and other._isCollapsed(): - otherEndPoint = "Start" - which = f"{selfEndPoint}To{otherEndPoint}" - return super().compareEndPoints(other, which=which) - - def setEndPoint(self, other, which): - """Override of L{textInfos.TextInfo.setEndPoint}. - Works around a UIA bug on conhost versions before microsoft/terminal#4018 that means we can - not trust the "end" endpoint of a collapsed (empty) text range - for comparisons. - """ - selfEndPoint, otherEndPoint = which.split("To") - # In this case, there is no need to check if self is collapsed - # since the point of this method is to change its text range, modifying the "end" endpoint of a collapsed - # text range is fine. - if otherEndPoint == "End" and other._isCollapsed(): - otherEndPoint = "Start" - which = f"{selfEndPoint}To{otherEndPoint}" - return super().setEndPoint(other, which=which) - - def expand(self, unit): - if unit == textInfos.UNIT_WORD: - # UIA doesn't implement word movement, so we need to do it manually. - lineInfo = self.copy() - lineInfo.expand(textInfos.UNIT_LINE) - offset = self._getCurrentOffsetInThisLine(lineInfo) - start, end = self._getWordOffsetsInThisLine(offset, lineInfo) - wordEndPoints = ( - (offset - start) * -1, - end - offset - 1 - ) - if wordEndPoints[0]: - self._rangeObj.MoveEndpointByUnit( - UIAHandler.TextPatternRangeEndpoint_Start, - UIAHandler.NVDAUnitsToUIAUnits[textInfos.UNIT_CHARACTER], - wordEndPoints[0] - ) - if wordEndPoints[1]: - self._rangeObj.MoveEndpointByUnit( - UIAHandler.TextPatternRangeEndpoint_End, - UIAHandler.NVDAUnitsToUIAUnits[textInfos.UNIT_CHARACTER], - wordEndPoints[1] - ) - else: - return super(ConsoleUIATextInfo, self).expand(unit) - - def _move(self, unit, direction, endPoint=None): + def move(self, unit, direction, endPoint=None): + oldInfo = None + if self.basePosition != textInfos.POSITION_CARET: + # Insure we haven't gone beyond the visible text. + # UIA adds thousands of blank lines to the end of the console. + boundingInfo = self.obj.makeTextInfo(textInfos.POSITION_ALL) + oldInfo = self.copy() if unit == textInfos.UNIT_WORD and direction != 0: - # On conhost versions before microsoft/terminal#4018, UIA doesn't implement word - # movement, so we need to do it manually. + # UIA doesn't implement word movement, so we need to do it manually. # Relative to the current line, calculate our offset # and the current word's offsets. lineInfo = self.copy() @@ -252,14 +129,104 @@ def _move(self, unit, direction, endPoint=None): endPoint=endPoint ) else: # moving by a unit other than word - res = super(ConsoleUIATextInfo, self).move(unit, direction, endPoint) + res = super(ConsoleUIATextInfoWorkaroundEndInclusive, self).move(unit, direction, endPoint) if not endPoint: # #10191: IUIAutomationTextRange::move in consoles does not correctly produce a collapsed range # after moving. # Therefore manually collapse. self.collapse() + # Console textRanges have access to the entire console buffer. + # However, we want to limit ourselves to onscreen text. + # Therefore, if the textInfo was originally visible, + # but we are now above or below the visible range, + # Restore the original textRange and pretend the move didn't work. + if oldInfo: + try: + if ( + ( + self.compareEndPoints(boundingInfo, "startToStart") < 0 + or self.compareEndPoints(boundingInfo, "startToEnd") >= 0 + ) + and not ( + oldInfo.compareEndPoints(boundingInfo, "startToStart") < 0 + or oldInfo.compareEndPoints(boundingInfo, "startToEnd") >= 0 + ) + ): + self._rangeObj = oldInfo._rangeObj + return 0 + except (COMError, RuntimeError): + pass return res + def expand(self, unit): + if unit == textInfos.UNIT_WORD: + # UIA doesn't implement word movement, so we need to do it manually. + lineInfo = self.copy() + lineInfo.expand(textInfos.UNIT_LINE) + offset = self._getCurrentOffsetInThisLine(lineInfo) + start, end = self._getWordOffsetsInThisLine(offset, lineInfo) + wordEndPoints = ( + (offset - start) * -1, + end - offset - 1 + ) + if wordEndPoints[0]: + self._rangeObj.MoveEndpointByUnit( + UIAHandler.TextPatternRangeEndpoint_Start, + UIAHandler.NVDAUnitsToUIAUnits[textInfos.UNIT_CHARACTER], + wordEndPoints[0] + ) + if wordEndPoints[1]: + self._rangeObj.MoveEndpointByUnit( + UIAHandler.TextPatternRangeEndpoint_End, + UIAHandler.NVDAUnitsToUIAUnits[textInfos.UNIT_CHARACTER], + wordEndPoints[1] + ) + else: + return super(ConsoleUIATextInfoWorkaroundEndInclusive, self).expand(unit) + + def compareEndPoints(self, other, which): + """Works around a UIA bug on conhost versions before microsoft/terminal#4018. + Even when a console textRange's start and end have been moved to the + same position, the console incorrectly reports the end as being + past the start. + Compare to the start (not the end) when collapsed.""" + selfEndPoint, otherEndPoint = which.split("To") + if selfEndPoint == "end" and self._isCollapsed(): + selfEndPoint = "start" + if otherEndPoint == "End" and other._isCollapsed(): + otherEndPoint = "Start" + which = f"{selfEndPoint}To{otherEndPoint}" + return super().compareEndPoints(other, which=which) + + def setEndPoint(self, other, which): + """Override of L{textInfos.TextInfo.setEndPoint}. + Works around a UIA bug on conhost versions before microsoft/terminal#4018 that means we can + not trust the "end" endpoint of a collapsed (empty) text range + for comparisons. + """ + selfEndPoint, otherEndPoint = which.split("To") + # In this case, there is no need to check if self is collapsed + # since the point of this method is to change its text range, modifying the "end" endpoint of a collapsed + # text range is fine. + if otherEndPoint == "End" and other._isCollapsed(): + otherEndPoint = "Start" + which = f"{selfEndPoint}To{otherEndPoint}" + return super().setEndPoint(other, which=which) + + def _isCollapsed(self): + """Works around a UIA bug on conhost versions before microsoft/terminal#4018 that means we + cannot trust the "end" endpoint of a collapsed (empty) text range + for comparisons. + Instead we check to see if we can get the first character from the + text range. A collapsed range will not have any characters + and will return an empty string.""" + return not bool(self._rangeObj.getText(1)) + + def _get_isCollapsed(self): + # To decide if the textRange is collapsed, + # Check if it has no text. + return self._isCollapsed() + def _getCurrentOffsetInThisLine(self, lineInfo): """ Given a caret textInfo expanded to line, returns the index into the @@ -298,24 +265,14 @@ def _getWordOffsetsInThisLine(self, offset, lineInfo): min(end.value, max(1, lineTextLen - 2)) ) - def _isCollapsed(self): - """Works around a UIA bug on conhost versions before microsoft/terminal#4018 that means we - cannot trust the "end" endpoint of a collapsed (empty) text range - for comparisons. - Instead we check to see if we can get the first character from the - text range. A collapsed range will not have any characters - and will return an empty string.""" - return not bool(self._rangeObj.getText(1)) - - def _get_isCollapsed(self): - # To decide if the textRange is collapsed, - # Check if it has no text. - return self._isCollapsed() + def __ne__(self, other): + """Support more accurate caret move detection.""" + return not self == other def _get_text(self): # #10036: return a space if the text range is empty. # Consoles don't actually store spaces, the character is merely left blank. - res = super()._get_text() + res = super(ConsoleUIATextInfoWorkaroundEndInclusive, self)._get_text() if not res: return ' ' else: @@ -362,13 +319,12 @@ def _get_isImprovedTextRangeAvailable(self): return self.UIATextPattern.GetVisibleRanges().length == 1 def _get_TextInfo(self): - """Overriding _get_ConsoleUIATextInfo and thus the ConsoleUIATextInfo property + """Overriding _get_TextInfo and thus the ConsoleUIATextInfo property on NVDAObjects.UIA.UIA - ConsoleUIATextInfo bounds review to the visible text. - ConsoleUIATextInfoWorkaroundEndInclusive fixes expand/collapse and implements - word movement.""" + In older consoles (before microsoft/terminal#4018), + ConsoleUIATextInfoWorkaroundEndInclusive fixes expand/collapse and implements word movement.""" return ( - ConsoleUIATextInfo + super().TextInfo if self.isImprovedTextRangeAvailable else ConsoleUIATextInfoWorkaroundEndInclusive ) @@ -394,5 +350,4 @@ def findExtraOverlayClasses(obj, clsList): class WinTerminalUIA(EnhancedTermTypedCharSupport): - def _get_TextInfo(self): - return ConsoleUIATextInfo + pass