diff --git a/.github/workflows/chocolatey-release.yml b/.github/workflows/chocolatey-release.yml index 70bd8730..9f143cdb 100644 --- a/.github/workflows/chocolatey-release.yml +++ b/.github/workflows/chocolatey-release.yml @@ -37,12 +37,49 @@ jobs: (Get-Content $nuspec) -replace 'REPLACE_VERSION', $version | Set-Content $nuspec (Get-Content $install) -replace 'REPLACE_HASH', $hash | Set-Content $install + # Chocolatey moderation rejects links it cannot use, so check them before submitting. + # A 403 or 429 from this runner is not a broken link: Cloudflare in front of our own sites + # and jsDelivr refuse many GitHub runner addresses while the same page loads for people and + # for moderators. Only a missing page, an unreachable host or a raw.githubusercontent.com + # link stops the push. + [xml]$spec = Get-Content $nuspec -Raw + $meta = $spec.package.metadata + $problems = @() + foreach ($field in 'packageSourceUrl','projectUrl','iconUrl','licenseUrl','projectSourceUrl','docsUrl','bugTrackerUrl','releaseNotes') { + $url = [string]$meta.$field + if ($url -notmatch '^https?://') { continue } + if (([uri]$url).Host -eq 'raw.githubusercontent.com') { $problems += "$field uses raw.githubusercontent.com, which Chocolatey does not accept: $url"; continue } + try { $null = Invoke-WebRequest -Uri $url -UseBasicParsing -TimeoutSec 60 } + catch { + $status = 0 + if ($_.Exception.Response) { $status = [int]$_.Exception.Response.StatusCode } + if ($status -eq 403 -or $status -eq 429) { + Write-Host "::warning::$field answered $status to this runner, which is bot protection refusing GitHub's addresses, not a missing page: $url" + continue + } + $problems += "$field did not load: $url ($($_.Exception.Message))" + } + } + if ($problems) { $problems | ForEach-Object { Write-Host "::error::$_" }; throw "The nuspec has links Chocolatey moderation will reject." } + # Pack and push choco pack choco\killerscan.nuspec --out "$env:RUNNER_TEMP" if ($LASTEXITCODE -ne 0) { throw "choco pack failed." } $package = "$env:RUNNER_TEMP\killerscan.$version.nupkg" choco push $package --source https://push.chocolatey.org --api-key $env:CHOCO_API_KEY - if ($LASTEXITCODE -ne 0) { throw "choco push failed." } + if ($LASTEXITCODE -ne 0) { + # Chocolatey answers most rejections with a bare 403, so report what the package page shows. + $page = "https://community.chocolatey.org/packages/killerscan" + try { + $html = (Invoke-WebRequest $page -UseBasicParsing -TimeoutSec 60).Content + foreach ($row in [regex]::Matches($html, '[\s\S]*?([^<]+)[\s\S]*?')) { + $held = $row.Groups[1].Value.Trim() + $badge = [regex]::Match($row.Value, 'class="badge[^"]*">([^<]+)<').Groups[1].Value.Trim() + if ($badge -and $badge -notmatch 'Approved|Exempted') { Write-Host "::error::Version $held is in moderation: $badge. See $page/$held" } + } + } catch { Write-Host "Could not read $page : $($_.Exception.Message)" } + throw "choco push was rejected. An earlier version in moderation with none approved blocks new pushes. Other causes are an API key that does not own the package or a version that already exists." + } "CHOCO_VERSION=$version" >> $env:GITHUB_ENV "CHOCO_PACKAGE=$package" >> $env:GITHUB_ENV @@ -50,6 +87,8 @@ jobs: # validator sometimes fails with "We were unable to find a package" while its own service # is degraded; its instruction is to upload the package again. Watch the result, re-push # once on a failure, and fail this job if validation still fails so it never goes unnoticed. + # The package page is cached and can show Pending for hours after validation passes, so the + # result is read from the package feed instead. - name: Wait for Chocolatey validation shell: pwsh timeout-minutes: 170 @@ -57,22 +96,23 @@ jobs: CHOCO_API_KEY: ${{ secrets.CHOCOLATEY_API_KEY }} run: | $page = "https://community.chocolatey.org/packages/killerscan/$env:CHOCO_VERSION" + $feed = "https://community.chocolatey.org/api/v2/Packages(Id='killerscan',Version='$env:CHOCO_VERSION')" $repushed = $false $pendingSinceRepush = $false $deadline = (Get-Date).AddMinutes(160) while ((Get-Date) -lt $deadline) { Start-Sleep -Seconds 300 try { - $html = (Invoke-WebRequest $page -UseBasicParsing -TimeoutSec 90).Content + $entry = (Invoke-WebRequest $feed -UseBasicParsing -TimeoutSec 90).Content } catch { - Write-Host "Package page unavailable: $($_.Exception.Message). Retrying." + Write-Host "Package feed unavailable: $($_.Exception.Message). Retrying." continue } - $state = [regex]::Match($html, 'Validation Testing (Passed|Failed|Pending)').Groups[1].Value + $state = [regex]::Match($entry, '(\w+)').Groups[1].Value Write-Host "$(Get-Date -Format HH:mm:ss) validation: $(if ($state) { $state } else { 'not shown' })" - if ($state -eq 'Passed') { exit 0 } - if ($state -eq 'Pending' -and $repushed) { $pendingSinceRepush = $true } - if ($state -ne 'Failed') { continue } + if ($state -like 'Pass*') { exit 0 } + if ($repushed -and $state -and $state -notlike 'Fail*') { $pendingSinceRepush = $true } + if ($state -notlike 'Fail*') { continue } if (-not $repushed) { Write-Host "Validation failed. Pushing the same package again as Chocolatey instructs." choco push $env:CHOCO_PACKAGE --source https://push.chocolatey.org --api-key $env:CHOCO_API_KEY @@ -82,4 +122,7 @@ jobs: throw "Chocolatey validation failed twice. See $page" } } - throw "Chocolatey validation did not pass within 160 minutes. See $page" + # Chocolatey's queue often takes longer than this. The package is already pushed, so a + # validation that is still pending is a warning, not a failed release. + Write-Host "::warning::Chocolatey validation was still pending after 160 minutes. The package was pushed. See $page" + exit 0 diff --git a/.github/workflows/winget-release.yml b/.github/workflows/winget-release.yml index e4cdf2d7..19844b1c 100644 --- a/.github/workflows/winget-release.yml +++ b/.github/workflows/winget-release.yml @@ -36,6 +36,11 @@ jobs: submit: runs-on: windows-latest steps: + # The WinGet description comes from the Chocolatey nuspec at the released tag. + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.release.tag_name || github.event.inputs.tag }} + # Prints what WINGET_TOKEN actually is, so a failure downstream is never guesswork again. # An empty x-oauth-scopes means a FINE-GRAINED token, which authenticates fine, reads fine, # and cannot create the branch komac needs. That failure is reported as @@ -157,6 +162,23 @@ jobs: Set-Content $installer $text -NoNewline -Encoding utf8 Select-String -Path $installer -Pattern 'InstallerType|DisplayVersion' + # komac also copies the previous locale manifest, which carried a Description cut off + # mid-word and the old website. Fill both description fields with the nuspec's one-line + # summary. The full feature list sent 1.8.2 and 1.8.3 to manual policy review + # (Policy-Test-2.7); the short text is what passed automatically before. + [xml]$spec = Get-Content (Join-Path $env:GITHUB_WORKSPACE 'choco\killerscan.nuspec') -Raw + $meta = $spec.package.metadata + $summary = $meta.summary.Trim() + if ($summary.Length -gt 256) { Write-Error "The nuspec summary is longer than WinGet's 256-character ShortDescription"; exit 1 } + $locale = Join-Path $dir 'SteveTheKiller.KillerScan.locale.en-US.yaml' + if (-not (Test-Path $locale)) { Write-Error "komac did not write $locale"; exit 1 } + $loc = (Get-Content $locale -Raw) -replace '\r\n', "`n" + $loc = [regex]::Replace($loc, '(?m)^PackageUrl:[^\n]*', { param($m) 'PackageUrl: ' + $meta.projectUrl.Trim() }) + $loc = [regex]::Replace($loc, '(?m)^ShortDescription:[^\n]*', { param($m) "ShortDescription: '" + $summary.Replace("'", "''") + "'" }) + $loc = [regex]::Replace($loc, '(?m)^Description:[^\n]*\n(?:(?:[ \t]+[^\n]*)?\n)*?(?=[A-Za-z])', { param($m) "Description: '" + $summary.Replace("'", "''") + "'`n" }) + Set-Content $locale $loc -NoNewline -Encoding utf8 + Select-String -Path $locale -Pattern '^(PackageUrl|ShortDescription|Description):' + # komac picks a fresh GUID for its branch name every run, so a retry never collides # with a half-finished attempt. $delays = @(60, 150, 300) diff --git a/App.xaml b/App.xaml index a3af6349..19c78f99 100644 --- a/App.xaml +++ b/App.xaml @@ -1,9 +1,10 @@ + xmlns:sys="clr-namespace:System;assembly=mscorlib"> @@ -40,15 +41,17 @@ + (commercial license) for "Killer", Lacquer (OFL) for the app name and primary headings, and + Killer Sans (OFL) for secondary headings and the footer. --> /KillerScan;component/Fonts/#Punktype /KillerScan;component/Fonts/#Lacquer /KillerScan;component/Fonts/#Killer Sans + - - - + - + @@ -1345,12 +1391,13 @@ - + + - @@ -1413,7 +1460,8 @@ - + + string.Equals(a, "/uiscan", StringComparison.OrdinalIgnoreCase) || - string.Equals(a, "--uiscan", StringComparison.OrdinalIgnoreCase)); + string.Equals(a, "--uiscan", StringComparison.OrdinalIgnoreCase) || + string.Equals(a, "uiscan", StringComparison.OrdinalIgnoreCase)); bool startUiScan = uiScanIndex >= 0; string? uiScanTarget = startUiScan ? string.Join(",", e.Args.Skip(uiScanIndex + 1)) @@ -504,59 +498,13 @@ private static void CreateShortcut(string lnkPath, string targetPath) /// Add an install directory to PATH exactly once. The self-installer updates the /// current user; the elevated silent installer updates the machine, so a new terminal can /// invoke the app as simply "KillerScan" from any directory. - private static void AddToPath(string directory, EnvironmentVariableTarget target) - { - string current = Environment.GetEnvironmentVariable("Path", target) ?? ""; - var entries = current.Split([';'], StringSplitOptions.RemoveEmptyEntries).ToList(); - if (!entries.Any(p => SamePath(p, directory))) - { - entries.Add(directory); - Environment.SetEnvironmentVariable("Path", string.Join(";", entries), target); - BroadcastEnvironmentChange(); - } - } + private static void AddToPath(string directory, EnvironmentVariableTarget target) => + Services.CommandLinePath.Register(directory, target == EnvironmentVariableTarget.Machine); /// Remove every spelling of an install directory from PATH without disturbing /// entries belonging to other programs. - private static void RemoveFromPath(string directory, EnvironmentVariableTarget target) - { - try - { - string current = Environment.GetEnvironmentVariable("Path", target) ?? ""; - var entries = current.Split([';'], StringSplitOptions.RemoveEmptyEntries) - .Where(p => !SamePath(p, directory)).ToList(); - string updated = string.Join(";", entries); - if (!string.Equals(current.TrimEnd(';'), updated, StringComparison.Ordinal)) - { - Environment.SetEnvironmentVariable("Path", updated, target); - BroadcastEnvironmentChange(); - } - } - catch { /* uninstall and install-scope migration are best-effort cleanup */ } - } - - private static bool SamePath(string left, string right) - { - try - { - return string.Equals( - Path.GetFullPath(Environment.ExpandEnvironmentVariables(left.Trim().Trim('"'))) - .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar), - Path.GetFullPath(right).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar), - StringComparison.OrdinalIgnoreCase); - } - catch { return false; } - } - - private static void BroadcastEnvironmentChange() - { - try - { - SendMessageTimeout(HwndBroadcast, WmSettingChange, IntPtr.Zero, "Environment", - SmtoAbortIfHung, 2000, out _); - } - catch { /* a newly signed-in session still reads the persisted PATH */ } - } + private static void RemoveFromPath(string directory, EnvironmentVariableTarget target) => + Services.CommandLinePath.Unregister(directory, target == EnvironmentVariableTarget.Machine); // ============================================================ // Uninstall diff --git a/CHANGELOG.md b/CHANGELOG.md index e71346e5..6dc546ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,10 @@ All notable changes to KillerScan are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [1.8.4] - Unreleased ### Added +- Slovenian labels for startup update checks and scrollbar page actions, preserving complete coverage of the upstream English dictionary. - A unified Access list with exact captured HTTP/HTTPS endpoints, protocol/port suggestions, response and authentication evidence, and Open/Copy actions using existing clients. Deep web probes retain nonstandard endpoints; history, exports and PowerShell preserve the optional data. All 20 locales include the new labels. - Device recognition evidence and heuristic confidence, source/timestamp details, explicitly reported model declarations, read-only device/service/history inspection, and structured evidence in JSON/CSV/HTML and PowerShell. Missing replies alone no longer imply IoT or Mobile; a MAC vendor never establishes a model. - Location controls and GUI error guidance in all 20 supported languages, plus a two-process location/profile GUI persistence check. Classic input dialog titles follow the action being performed. @@ -14,6 +15,75 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this - Explicit Windows IPv4 interface selection for scan tabs, profiles, CLI and the terminal toolbar, with pinned TCP/UDP/multicast, source-aware ARP/ICMP/DNS, per-interface classification and cancellation on link changes. Missing selections never fall back to a different adapter. - Per-tab scan options for neighbor cache, explicit ARP, ICMP, TCP discovery, DNS, mDNS, SSDP, port scanning and individual HTTP/TLS/SSH/SNMP/NetBIOS fingerprints. Profiles save the choices; scan, quick and deep paths enforce them in the engine. CLI `/skip` and PowerShell `-Skip` provide the same choices. Existing profiles and API calls keep their defaults. +### Fixed +- The shortcuts card shows shadows at its edges when more content is out of view. + +## [1.8.3] - 2026-10-19 + +### Changed +- Refreshed the bundled MAC vendor database to 58,575 assignments. +- Scan History and Scan Profiles open wide enough to show every date in full. Dragging the sidebar narrower draws their text up to 15% smaller before it is cut off. + +### Fixed +- The theme and language menus open beside their own rail buttons instead of at the corner of the device list. +- A thin black line no longer shows under the title bar. The film grain now covers the whole bar. +- The dot in a selected radio button sits in the middle of its ring, and radio buttons and checkboxes line up with the capitals of their labels in Killer Sans UI and on 98SE. + +## [1.8.2] - 2026-10-19 + +### Added +- Commands run as `killerscan scan` without a command prefix. `killerscan --help` lists them, and existing command forms stay compatible. Installed copies use PATH; portable copies run from their folder or full path. +- KillerScan checks for updates on startup and offers a newer release in a dialog with an Always check on startup box. A Check for updates on startup checkbox on the About card turns the check back on. +- Alt+Shift+G turns Film Grain on or off. It is listed in the shortcuts overlay, and the keyboard map has a new Alt+Shift layer for it. +- The website's top bar has a Microsoft Store button on every page, and the MCP page has a Microsoft Store button for KillerMCP. +- The website's About page lists KillerBench and KillerShot under Also try, with larger app icons. + +### Changed +- Refreshed the bundled MAC vendor database to 58,575 assignments. +- Film grain is softer and shows on every theme, Black included. Its specks come in many shades, and some lean toward a color opposite the theme accent, such as purple on green and orange-brown on blue and red. +- Rail buttons and the collapse arrow sit centered across the rail, and the arrow is larger. +- Dialog headings, the history sidebar heading and the history detail header use Lacquer, the wordmark's app-name face, in place of Killer Sans. 98SE keeps Killer Sans. +- The history detail header is the same size as the Scan History heading. +- Context menus use Killer Sans UI like the rest of the interface instead of Segoe UI. +- The Light theme draws a softer shadow under the toolbars. +- Toolbar buttons with text under the icon are 6 pixels shorter, without the extra space above and below the icon and label. +- The website's top bar Download button uses the same font and height as the other top bar buttons. +- The PATH entry for installed copies now keeps the existing Path value's type and its %variables%, tells open programs about the change, and is removed by the uninstaller. +- The keyboard focus outline is a thin one-pixel dotted ring in the theme accent instead of a thick dotted line, and uses the text color where the accent would be too faint to see. +- Primary, outline and secondary buttons sit raised on a soft shadow that lifts on hover and sets down when pressed. 98SE keeps its flat beveled buttons. + +### Fixed +- CSV exports keep device and scan text from running as spreadsheet formulas. (#10) +- Overlapping scan targets count each address once against the 65,536 address limit, so a /16 with hosts inside it no longer reports as too large. (#11) +- The public subnet helper rejects oversized ranges before expanding them. (#13) +- HTML report columns sort from the keyboard. Each column header takes Tab focus with a visible ring, Enter and Space sort it, and screen readers hear the sort direction. (#12) +- Windows contrast themes now use system colors for text, icons, panels and selections, without decorative grain or shadows. +- The window opens fully on screen on a small or high-scaling display, or when its saved size came from a bigger monitor, instead of running off the edges. +- HTML reports show the KillerScan wordmark in the report's theme and accent, loaded from killerscan.net, instead of always falling back to the text wordmark. 98SE keeps the text wordmark. +- The deep scan status and a few labels that were still in English are translated in every language, and the website's MCP page footer follows the language picker. +- On the Light theme's Yellow and Orange accents, buttons, links, tabs and accent icons keep their color with a thin gray outline around accent text and icons, instead of turning near-black or brown. +- Gray, menu and accent text reads at 4.5:1 contrast or better in every theme and accent, and the footer's version and copyright are slightly dimmed. +- The Dark theme's Red accent stays a true red on buttons, lines, scroll bars and the website's accent swatches, and only small red text uses a lighter red. +- The website's text and accent colors read at 4.5:1 contrast or better in every theme, and a narrow top bar shrinks the Microsoft Store and MCP buttons to their logos and moves links into a More menu instead of wrapping. +- On the website's Light theme with the Yellow or Orange accent, links, headings and labels keep their color with a thin gray outline instead of turning olive or brown. +- The exe's file properties show Steve the Killer as the copyright holder instead of leaving it blank. +- Screen readers no longer read toolbar, menu, tab and title bar icons as unreadable symbols, and every part of each scroll bar now has a name. File-picker rows announce folder and file names. +- Opening the shortcuts or About card moves keyboard focus into it, Tab stays inside the card, and closing it returns focus to where it was. +- Tab no longer stops on hidden links, which screen readers announced as the window. +- Screen readers and accessibility checkers no longer report empty text or the hidden parts of scroll bars as items on screen. +- Each group of option buttons is one Tab stop that lands on the selected option, and the arrow keys move between its options. +- Tab moves past the device, service and history lists in one step instead of visiting every cell, and screen readers read the address and type cells instead of a placeholder and a blank host name, MAC address or vendor as Unknown. +- Turning off Film Grain removes the grain from the device table, Services and Topology views too, instead of leaving it behind them. +- The Scan History sidebar can no longer be dragged or zoomed narrower than its dates, so a saved scan's date and time are never cut off. +- The website top bar no longer leaves extra space under the wordmark and buttons. +- The file picker's close button turns red on hover without filling a red block, like every other dialog's close, and keeps the classic caption button on 98SE. +- Theme and language radio buttons and the Film Grain checkbox line up with their labels again. +- On the website, text on accent-colored buttons, tabs and highlights switches to white or near-black for contrast, so it is never white on yellow. +- Theme names and the Keep Alive view name are translated in every language. +- The website's MCP page, contact cards, carousel and section toggles are translated in every language, the site uses the app's names for Keep Alive and Deep Scan, and text that had lost its accents in several languages is restored. +- On phones, the website's logo and download hash fit the screen instead of making the home page scroll sideways. +- The Network Scanner subtitle in the title bar sits on the baseline of Killer in the wordmark instead of 2px below it. +- The footer copyright sits a few pixels further from the corner grip instead of running into it. ## [1.8.1] - 2026-10-14 ### Added diff --git a/Controls/AccentShadow.cs b/Controls/AccentShadow.cs new file mode 100644 index 00000000..5b126efe --- /dev/null +++ b/Controls/AccentShadow.cs @@ -0,0 +1,213 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Media; +using System.Windows.Media.Effects; + +namespace KillerFamily.Theming +{ + /// + /// Light with the Yellow accent keeps its accent yellow and draws a thin gray outline around every + /// yellow text and glyph so it reads on the light surfaces. A theme turns it on by giving + /// WordmarkAccentShadowOpacity a value above 0; every other theme leaves that at 0 and nothing + /// changes. Text that already draws its own effect, such as a wordmark halo copy, keeps it. + /// Call Initialize once at startup. + /// + internal static class AccentShadow + { + /// The outline color, a medium gray that rims the yellow without going black. + internal static readonly Color RimColor = Color.FromRgb(0x5A, 0x5A, 0x5A); + + /// The outline width in device-independent pixels. + internal const double RimWidth = 1.0; + + private static bool _initialized; + private static readonly IValueConverter Converter = new OutlineConverter(); + private static readonly DependencyProperty TrackedProperty = DependencyProperty.RegisterAttached( + "Tracked", typeof(bool), typeof(AccentShadow), new PropertyMetadata(false)); + private static readonly string[] AccentKeys = + { "PrimaryBrush", "PrimaryHoverBrush", "PrimaryPressedBrush", "AccentLogo", "OutlineBtnBrush", + "HeaderLineBrush", "SelectionAccent", "RadioAccent" }; + + internal static void Initialize() + { + if (_initialized) return; + _initialized = true; + EventManager.RegisterClassHandler(typeof(TextBlock), FrameworkElement.SizeChangedEvent, + new SizeChangedEventHandler(OnTextSizeChanged), true); + } + + private static void OnTextSizeChanged(object sender, SizeChangedEventArgs args) + { + if (sender is not TextBlock text || (bool)text.GetValue(TrackedProperty)) return; + text.SetValue(TrackedProperty, true); + if (text.Effect != null || BindingOperations.IsDataBound(text, UIElement.EffectProperty)) return; + // Bound to the text's own color, so hover and selection colors and theme changes add or + // remove the outline as the color changes. The DPI scale keeps the rim one unit wide on + // every monitor. + text.SetBinding(UIElement.EffectProperty, new Binding(nameof(TextBlock.Foreground)) + { + RelativeSource = RelativeSource.Self, + Converter = Converter, + ConverterParameter = VisualTreeHelper.GetDpi(text).DpiScaleX, + }); + } + + /// True when the theme asks for the outline and the color is one of its accent colors. + internal static bool Applies(Brush? brush) + { + var app = Application.Current; + if (app == null || brush is not SolidColorBrush solid) return false; + if (!(app.TryFindResource("WordmarkAccentShadowOpacity") is double opacity) || opacity <= 0) return false; + foreach (string key in AccentKeys) + if (app.TryFindResource(key) is SolidColorBrush accent && accent.Color == solid.Color) + return true; + return false; + } + + private sealed class OutlineConverter : IValueConverter + { + private readonly Dictionary _byScale = new Dictionary(); + + public object? Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (!Applies(value as Brush)) return null; + double scale = parameter is double d && d > 0 ? d : 1.0; + if (!_byScale.TryGetValue(scale, out var effect)) + { + effect = new Outline(RimColor, RimWidth * scale); + if (effect.CanFreeze) effect.Freeze(); + _byScale[scale] = effect; + } + return effect; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => + Binding.DoNothing; + } + + // Draws a solid rim around every opaque pixel of the element, out to Radius device pixels. + // The pixel shader below was compiled from this HLSL with + // fxc /T ps_2_0 /E main /Fo Outline.ps Outline.fx (Windows 10 SDK): + // + // sampler2D input : register(s0); + // float4 ddxDdy : register(c0); + // float4 rimColor : register(c1); + // float radius : register(c2); + // + // float4 main(float2 uv : TEXCOORD) : COLOR + // { + // float4 c = tex2D(input, uv); + // float2 rx = ddxDdy.xy * radius; + // float2 ry = ddxDdy.zw * radius; + // float2 d1 = (rx + ry) * 0.7071; + // float2 d2 = (rx - ry) * 0.7071; + // float a = tex2D(input, uv + rx).a; + // a = max(a, tex2D(input, uv - rx).a); + // a = max(a, tex2D(input, uv + ry).a); + // a = max(a, tex2D(input, uv - ry).a); + // a = max(a, tex2D(input, uv + d1).a); + // a = max(a, tex2D(input, uv - d1).a); + // a = max(a, tex2D(input, uv + d2).a); + // a = max(a, tex2D(input, uv - d2).a); + // a = max(a, tex2D(input, uv + rx * 0.5).a); + // a = max(a, tex2D(input, uv - rx * 0.5).a); + // a = max(a, tex2D(input, uv + ry * 0.5).a); + // a = max(a, tex2D(input, uv - ry * 0.5).a); + // float4 rim = rimColor * a; + // return c + rim * (1 - c.a); + // } + internal sealed class Outline : ShaderEffect + { + public static readonly DependencyProperty InputProperty = + RegisterPixelShaderSamplerProperty("Input", typeof(Outline), 0); + public static readonly DependencyProperty RimColorProperty = DependencyProperty.Register( + "RimColor", typeof(Color), typeof(Outline), new UIPropertyMetadata(Colors.Black, PixelShaderConstantCallback(1))); + public static readonly DependencyProperty RadiusProperty = DependencyProperty.Register( + "Radius", typeof(double), typeof(Outline), new UIPropertyMetadata(1.0, PixelShaderConstantCallback(2))); + + private static readonly byte[] Bytecode = + { + 0x00, 0x02, 0xFF, 0xFF, 0xFE, 0xFF, 0x3C, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1C, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xFF, + 0x04, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xBD, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, + 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x0A, 0x00, 0xA4, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x06, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x64, 0x78, 0x44, 0x64, 0x79, 0x00, 0xAB, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x69, 0x6E, 0x70, 0x75, 0x74, 0x00, 0xAB, 0xAB, 0x04, 0x00, 0x0C, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x00, 0xAB, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x72, 0x69, 0x6D, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x00, 0x70, 0x73, 0x5F, 0x32, 0x5F, 0x30, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, + 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, + 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x51, 0x00, 0x00, 0x05, 0x03, 0x00, 0x0F, 0xA0, 0x81, 0x04, 0x35, 0x3F, 0x00, 0x00, 0x00, 0x3F, + 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0xB0, 0x1F, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0F, 0xA0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xE4, 0xA0, 0x04, 0x00, 0x00, 0x04, + 0x01, 0x00, 0x03, 0x80, 0x00, 0x00, 0xE4, 0x80, 0x02, 0x00, 0x00, 0xA0, 0x00, 0x00, 0xE4, 0xB0, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x03, 0x80, + 0x00, 0x00, 0xE4, 0x80, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x00, 0xE4, 0xB0, 0x04, 0x00, 0x00, 0x04, 0x03, 0x00, 0x01, 0x80, 0x00, 0x00, 0xAA, 0x80, + 0x02, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xB0, 0x04, 0x00, 0x00, 0x04, 0x03, 0x00, 0x02, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x02, 0x00, 0x00, 0xA0, + 0x00, 0x00, 0x55, 0xB0, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x01, 0x80, 0x00, 0x00, 0xAA, 0x80, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x00, 0xB0, + 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x02, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x02, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x55, 0xB0, 0x05, 0x00, 0x00, 0x03, + 0x05, 0x00, 0x01, 0x80, 0x00, 0x00, 0xAA, 0x80, 0x02, 0x00, 0x00, 0xA0, 0x05, 0x00, 0x00, 0x03, 0x05, 0x00, 0x02, 0x80, 0x00, 0x00, 0xFF, 0x80, + 0x02, 0x00, 0x00, 0xA0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0C, 0x80, 0x00, 0x00, 0x1B, 0x80, 0x02, 0x00, 0x00, 0xA0, 0x05, 0x00, 0x1B, 0x80, + 0x04, 0x00, 0x00, 0x04, 0x06, 0x00, 0x03, 0x80, 0x00, 0x00, 0x1B, 0x80, 0x03, 0x00, 0x00, 0xA0, 0x00, 0x00, 0xE4, 0xB0, 0x04, 0x00, 0x00, 0x04, + 0x07, 0x00, 0x03, 0x80, 0x00, 0x00, 0x1B, 0x80, 0x03, 0x00, 0x00, 0xA1, 0x00, 0x00, 0xE4, 0xB0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0C, 0x80, + 0x00, 0x00, 0x1B, 0x80, 0x02, 0x00, 0x00, 0xA0, 0x05, 0x00, 0x1B, 0x81, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x03, 0x80, 0x00, 0x00, 0x1B, 0x80, + 0x03, 0x00, 0x00, 0xA0, 0x00, 0x00, 0xE4, 0xB0, 0x04, 0x00, 0x00, 0x04, 0x09, 0x00, 0x03, 0x80, 0x00, 0x00, 0x1B, 0x80, 0x03, 0x00, 0x00, 0xA1, + 0x00, 0x00, 0xE4, 0xB0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xE4, 0x80, 0x02, 0x00, 0x00, 0xA0, 0x04, 0x00, 0x00, 0x04, + 0x0A, 0x00, 0x03, 0x80, 0x00, 0x00, 0xE4, 0x80, 0x03, 0x00, 0x55, 0xA0, 0x00, 0x00, 0xE4, 0xB0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x80, + 0x00, 0x00, 0xE4, 0x80, 0x03, 0x00, 0x55, 0xA1, 0x00, 0x00, 0xE4, 0xB0, 0x42, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0F, 0x80, 0x01, 0x00, 0xE4, 0x80, + 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, 0x02, 0x00, 0x0F, 0x80, 0x02, 0x00, 0xE4, 0x80, 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, + 0x03, 0x00, 0x0F, 0x80, 0x03, 0x00, 0xE4, 0x80, 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, 0x04, 0x00, 0x0F, 0x80, 0x04, 0x00, 0xE4, 0x80, + 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, 0x07, 0x00, 0x0F, 0x80, 0x07, 0x00, 0xE4, 0x80, 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, + 0x06, 0x00, 0x0F, 0x80, 0x06, 0x00, 0xE4, 0x80, 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, 0x09, 0x00, 0x0F, 0x80, 0x09, 0x00, 0xE4, 0x80, + 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, 0x08, 0x00, 0x0F, 0x80, 0x08, 0x00, 0xE4, 0x80, 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xE4, 0x80, 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, 0x0A, 0x00, 0x0F, 0x80, 0x0A, 0x00, 0xE4, 0x80, + 0x00, 0x08, 0xE4, 0xA0, 0x0B, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0xFF, 0x80, 0x02, 0x00, 0xFF, 0x80, 0x0B, 0x00, 0x00, 0x03, + 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xFF, 0x80, 0x0B, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x00, 0xFF, 0x80, 0x0B, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x06, 0x00, 0xFF, 0x80, 0x0B, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, 0xFF, 0x80, 0x0B, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, + 0x08, 0x00, 0xFF, 0x80, 0x0B, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80, 0x09, 0x00, 0xFF, 0x80, 0x0B, 0x00, 0x00, 0x03, + 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x0A, 0x00, 0xFF, 0x80, 0x0B, 0x00, 0x00, 0x03, 0x02, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80, + 0x00, 0x00, 0xFF, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x80, 0x05, 0x00, 0xE4, 0x80, 0x03, 0x00, 0x55, 0xA0, 0x00, 0x00, 0xE4, 0xB0, + 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x03, 0x80, 0x05, 0x00, 0xE4, 0x80, 0x03, 0x00, 0x55, 0xA1, 0x00, 0x00, 0xE4, 0xB0, 0x42, 0x00, 0x00, 0x03, + 0x01, 0x00, 0x0F, 0x80, 0x01, 0x00, 0xE4, 0x80, 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xE4, 0x80, + 0x00, 0x08, 0xE4, 0xA0, 0x42, 0x00, 0x00, 0x03, 0x03, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xE4, 0xB0, 0x00, 0x08, 0xE4, 0xA0, 0x0B, 0x00, 0x00, 0x03, + 0x01, 0x00, 0x01, 0x80, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x0B, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80, + 0x01, 0x00, 0xFF, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xE4, 0xA0, 0x02, 0x00, 0x00, 0x03, + 0x01, 0x00, 0x01, 0x80, 0x03, 0x00, 0xFF, 0x81, 0x03, 0x00, 0xAA, 0xA0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xE4, 0x80, + 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0xE4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0F, 0x80, 0x00, 0x00, 0xE4, 0x80, 0xFF, 0xFF, 0x00, 0x00, + }; + + // Declared after Bytecode: static fields initialize in order. + private static readonly PixelShader Shader = LoadShader(); + + public Outline(Color rim, double radius) + { + PixelShader = Shader; + DdxUvDdyUvRegisterIndex = 0; + PaddingLeft = PaddingTop = PaddingRight = PaddingBottom = radius + 1; + SetValue(RimColorProperty, rim); + SetValue(RadiusProperty, radius); + // A value equal to the default raises no change, so push every register once. + UpdateShaderValue(InputProperty); + UpdateShaderValue(RimColorProperty); + UpdateShaderValue(RadiusProperty); + } + + public Color RimColor => (Color)GetValue(RimColorProperty); + public double Radius => (double)GetValue(RadiusProperty); + + private static PixelShader LoadShader() + { + var shader = new PixelShader(); + shader.SetStreamSource(new MemoryStream(Bytecode)); + shader.Freeze(); + return shader; + } + } + } +} diff --git a/Controls/AccessibleControls.cs b/Controls/AccessibleControls.cs index d9412853..e9f0e99a 100644 --- a/Controls/AccessibleControls.cs +++ b/Controls/AccessibleControls.cs @@ -6,12 +6,12 @@ using System.Linq; using System.Windows; using System.Windows.Automation; +using System.Windows.Automation.Peers; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Media; -using System.Windows.Shapes; namespace KillerFamily.Accessibility { @@ -22,6 +22,7 @@ internal static class AccessibleControls private static readonly IMultiValueConverter RunsName = new RunsNameConverter(); private static Style? _focusStyle; private static Style? _compactFocusStyle; + private static DataTemplate? _glyphTemplate; private static readonly DependencyProperty OwnedNameProperty = DependencyProperty.RegisterAttached( "OwnedName", typeof(BindingBase), typeof(AccessibleControls)); private static readonly DependencyProperty TrackedTooltipProperty = DependencyProperty.RegisterAttached( @@ -35,8 +36,57 @@ internal static void Initialize() { if (_initialized) return; _initialized = true; + HighContrastResources.Initialize(); EventManager.RegisterClassHandler(typeof(Control), FrameworkElement.SizeChangedEvent, new SizeChangedEventHandler(OnControlSizeChanged), true); + // WPF still gives Tab focus to a hyperlink whose TextBlock is collapsed: an invisible + // stop that a screen reader announces as the window. Focus moves on past it instead. + EventManager.RegisterClassHandler(typeof(System.Windows.Documents.Hyperlink), + System.Windows.Input.Keyboard.PreviewGotKeyboardFocusEvent, + new System.Windows.Input.KeyboardFocusChangedEventHandler(OnHyperlinkPreviewGotFocus)); + // An element with no size still reports itself on screen, which Accessibility Insights + // fails as a null bounding rectangle: a scroll bar's page button at the end of its + // track, an arrow button a theme hides, an empty status line. FromClip has UI + // Automation report an element with no visible area as off screen. + foreach (var type in new[] { typeof(TextBlock), typeof(RepeatButton) }) + { + try + { + AutomationProperties.IsOffscreenBehaviorProperty.OverrideMetadata(type, + new FrameworkPropertyMetadata(IsOffscreenBehavior.FromClip)); + } + catch (Exception error) when (error is ArgumentException or InvalidOperationException) { } + } + } + + private static void OnHyperlinkPreviewGotFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs args) + { + if (sender is not System.Windows.Documents.Hyperlink link || !ReferenceEquals(args.NewFocus, link)) return; + DependencyObject? host = link.Parent; + while (host is FrameworkContentElement content) host = content.Parent; + if (host is not UIElement element || element.IsVisible) return; + args.Handled = true; + var direction = (System.Windows.Input.Keyboard.Modifiers & System.Windows.Input.ModifierKeys.Shift) != 0 + ? System.Windows.Input.FocusNavigationDirection.Previous + : System.Windows.Input.FocusNavigationDirection.Next; + link.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input, + new Action(() => link.MoveFocus(new System.Windows.Input.TraversalRequest(direction)))); + } + + // Tab into a radio group lands on its selected option, as in Windows, rather than on the + // option that last had focus or the first one. Only for the keyboard: a click focuses the + // option it lands on. + private static void OnRadioGroupPreviewGotFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs args) + { + if (sender is not Panel group || args.NewFocus is not RadioButton target || target.IsChecked == true) return; + if (args.OldFocus is Visual old && group.IsAncestorOf(old)) return; + if (System.Windows.Input.InputManager.Current.MostRecentInputDevice is not System.Windows.Input.KeyboardDevice) return; + var selected = group.Children.OfType() + .FirstOrDefault(option => option.IsChecked == true && option.IsEnabled && option.IsVisible); + if (selected == null) return; + args.Handled = true; + selected.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input, + new Action(() => selected.Focus())); } private static void OnControlSizeChanged(object sender, SizeChangedEventArgs args) @@ -63,10 +113,34 @@ private static void OnControlLoaded(object sender, RoutedEventArgs args) internal static void Prepare(Control control) { + if (control is Window) HighContrastResources.Initialize(); + else HighContrastResources.PrepareCaption(control); // The focus adorner is shown by WPF for keyboard navigation, without changing layout. if (control is not Window && control.Focusable && control.FocusVisualStyle == null) control.SetCurrentValue(Control.FocusVisualStyleProperty, IsCompact(control) ? CompactFocusStyle : FocusStyle); + // A group of radio buttons is one Tab stop, as everywhere else in Windows, and the arrow + // keys move between its options. Menus and flyouts, which are not hosted in the window + // itself, keep their own keyboard handling. + if (control is RadioButton radio && VisualTreeHelper.GetParent(radio) is Panel group && + PresentationSource.FromVisual(radio)?.RootVisual is Window && group.Children.Count > 1 && + group.ReadLocalValue(System.Windows.Input.KeyboardNavigation.TabNavigationProperty) == DependencyProperty.UnsetValue && + group.Children.Cast().All(child => child is RadioButton option && option.GroupName == radio.GroupName)) + { + System.Windows.Input.KeyboardNavigation.SetTabNavigation(group, System.Windows.Input.KeyboardNavigationMode.Once); + System.Windows.Input.KeyboardNavigation.SetDirectionalNavigation(group, System.Windows.Input.KeyboardNavigationMode.Cycle); + group.PreviewGotKeyboardFocus += OnRadioGroupPreviewGotFocus; + } + + // An icon given as string content ("") is drawn by the content presenter's + // own TextBlock, which UI Automation reads out as a private-use character. Drawing it + // through a Glyph keeps the same text on screen and leaves the name to the control. + // A selector rather than a template: when the content later becomes anything else + // (a toolbar swapping in an icon and label panel), the presenter's default applies. + if (control is ContentControl glyphHost && glyphHost.Content is string glyphText && + IsGlyph(glyphText) && glyphHost.ContentTemplate == null && glyphHost.ContentTemplateSelector == null) + glyphHost.SetCurrentValue(ContentControl.ContentTemplateSelectorProperty, GlyphTemplates); + UpdateName(control); } @@ -195,6 +269,29 @@ private static bool IsReadable(string text) return false; } + private static bool IsGlyph(string text) + { + if (string.IsNullOrWhiteSpace(text)) return false; + foreach (char character in text) + if (!char.IsWhiteSpace(character) && + CharUnicodeInfo.GetUnicodeCategory(character) != UnicodeCategory.PrivateUse) + return false; + return true; + } + + private static readonly DataTemplateSelector GlyphTemplates = new GlyphTemplateSelector(); + + private static DataTemplate GlyphTemplate => _glyphTemplate ??= BuildGlyphTemplate(); + + private static DataTemplate BuildGlyphTemplate() + { + var glyph = new FrameworkElementFactory(typeof(Glyph)); + glyph.SetBinding(TextBlock.TextProperty, new Binding()); + var template = new DataTemplate { VisualTree = glyph }; + template.Seal(); + return template; + } + private static Style FocusStyle => _focusStyle ??= BuildFocusStyle(2); /// @@ -203,32 +300,35 @@ private static bool IsReadable(string text) /// private static Style CompactFocusStyle => _compactFocusStyle ??= BuildFocusStyle(-3); - private static bool IsCompact(Control control) => + private static bool IsCompact(FrameworkElement control) => control.ActualWidth > 0 && control.ActualHeight > 0 && (control.ActualWidth < CompactSize || control.ActualHeight < CompactSize); + /// The family focus ring for a focusable element that is not a Control, such as a + /// code-built appointment chip. Controls receive theirs automatically. + internal static Style FocusStyleFor(FrameworkElement element) => + IsCompact(element) ? CompactFocusStyle : FocusStyle; + private const double CompactSize = 21; private static Style BuildFocusStyle(double inset) { - var grid = new FrameworkElementFactory(typeof(Grid)); - foreach (var stroke in new[] { Tuple.Create(SystemColors.WindowTextBrushKey, 3.0), - Tuple.Create(SystemColors.WindowBrushKey, 1.0) }) - { - var outline = new FrameworkElementFactory(typeof(Rectangle)); - outline.SetValue(FrameworkElement.MarginProperty, new Thickness(inset)); - outline.SetValue(Shape.StrokeThicknessProperty, stroke.Item2); - outline.SetValue(Shape.StrokeDashArrayProperty, new DoubleCollection { 2, 2 }); - outline.SetResourceReference(Shape.StrokeProperty, stroke.Item1); - grid.AppendChild(outline); - } - var template = new ControlTemplate(typeof(Control)) { VisualTree = grid }; + var ring = new FrameworkElementFactory(typeof(FocusRing)); + ring.SetValue(FrameworkElement.MarginProperty, new Thickness(inset)); + ring.SetValue(FocusRing.InsetProperty, inset); + var template = new ControlTemplate(typeof(Control)) { VisualTree = ring }; var style = new Style(typeof(Control)); style.Setters.Add(new Setter(Control.TemplateProperty, template)); style.Seal(); return style; } + private sealed class GlyphTemplateSelector : DataTemplateSelector + { + public override DataTemplate? SelectTemplate(object? item, DependencyObject container) => + item is string text && IsGlyph(text) ? GlyphTemplate : null; + } + private sealed class TooltipNameConverter : IValueConverter { public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) => @@ -247,4 +347,147 @@ public object[] ConvertBack(object? value, Type[] targetTypes, object? parameter []; } } + + /// + /// The keyboard focus outline: a thin dotted ring in the theme accent, one pixel on and one + /// off, rounded like the controls. When the accent is too faint against the window surfaces + /// to read as an outline, the ring uses the text color instead, and High Contrast uses the + /// system highlight. WPF builds a new outline each time focus moves, so it follows theme + /// changes. + /// + internal sealed class FocusRing : FrameworkElement + { + internal static readonly DependencyProperty InsetProperty = DependencyProperty.Register( + nameof(Inset), typeof(double), typeof(FocusRing), new PropertyMetadata(0.0)); + + private const double MinimumContrast = 3; + private double _radius; + + public FocusRing() + { + SnapsToDevicePixels = true; + UseLayoutRounding = true; + IsHitTestVisible = false; + Loaded += (_, _) => Apply(); + } + + internal double Inset + { + get => (double)GetValue(InsetProperty); + set => SetValue(InsetProperty, value); + } + + /// The ring's color, chosen when it loads. + internal Brush? Stroke { get; private set; } + + internal double StrokeThickness => 1; + + /// One pixel on, one pixel off. + internal DoubleCollection DashArray { get; } = new DoubleCollection { 1, 1 }; + + private void Apply() + { + Stroke = RingBrush(); + double radius = TryFindResource("ControlCornerRadius") is CornerRadius corner ? corner.TopLeft : 0; + // An outline inside the control sits on a smaller curve, one outside it on a larger one. + _radius = radius <= 0 ? 0 : Math.Max(0, radius - Inset); + InvalidateVisual(); + } + + // The dots are placed on whole device pixels rather than drawn with a dashed pen, whose + // dashes fall between pixels and smear into a faint solid line. A rounded ring leaves out + // its corner pixels. + protected override void OnRender(DrawingContext dc) + { + if (Stroke == null) return; + var dpi = VisualTreeHelper.GetDpi(this); + double px = StrokeThickness / dpi.DpiScaleX, py = StrokeThickness / dpi.DpiScaleY; + int w = (int)Math.Round(ActualWidth / px), h = (int)Math.Round(ActualHeight / py); + if (w < 3 || h < 3) return; + int skip = _radius > 0 ? 1 : 0; + int step = (int)(DashArray[0] + DashArray[1]); + for (int x = skip; x < w - skip; x += step) + { + dc.DrawRectangle(Stroke, null, new Rect(x * px, 0, px, py)); + dc.DrawRectangle(Stroke, null, new Rect(x * px, (h - 1) * py, px, py)); + } + for (int y = 1 + skip + 1; y < h - 1 - skip; y += step) + { + dc.DrawRectangle(Stroke, null, new Rect(0, y * py, px, py)); + dc.DrawRectangle(Stroke, null, new Rect((w - 1) * px, y * py, px, py)); + } + } + + private Brush RingBrush() + { + if (SystemParameters.HighContrast) return SystemColors.HighlightBrush; + Brush? text = TryFindResource("TextBrush") as Brush; + if (TryFindResource("PrimaryBrush") is SolidColorBrush accent) + { + var surfaces = new[] { "BackgroundBrush", "PaneBrush" } + .SelectMany(key => SurfaceColors(TryFindResource(key) as Brush)).ToList(); + if (surfaces.All(surface => Contrast(Over(accent.Color, surface), surface) >= MinimumContrast)) + return accent; + } + return text ?? SystemColors.WindowTextBrush; + } + + private static IEnumerable SurfaceColors(Brush? brush) => brush switch + { + SolidColorBrush solid => new[] { solid.Color }, + GradientBrush gradient => gradient.GradientStops.Select(stop => stop.Color), + _ => Enumerable.Empty(), + }; + + private static Color Over(Color top, Color bottom) + { + double alpha = top.A / 255.0; + byte Mix(byte a, byte b) => (byte)Math.Round(a * alpha + b * (1 - alpha)); + return Color.FromRgb(Mix(top.R, bottom.R), Mix(top.G, bottom.G), Mix(top.B, bottom.B)); + } + + private static double Contrast(Color a, Color b) + { + double la = Luminance(a), lb = Luminance(b); + return (Math.Max(la, lb) + 0.05) / (Math.Min(la, lb) + 0.05); + } + + private static double Luminance(Color color) + { + double Channel(byte value) + { + double c = value / 255.0; + return c <= 0.03928 ? c / 12.92 : Math.Pow((c + 0.055) / 1.055, 2.4); + } + return 0.2126 * Channel(color.R) + 0.7152 * Channel(color.G) + 0.0722 * Channel(color.B); + } + } + + /// + /// An icon drawn from a symbol font. The control it decorates carries the name, so the + /// glyph stays out of the automation tree instead of being read as a private-use character. + /// + public sealed class Glyph : TextBlock + { + protected override void OnInitialized(EventArgs e) + { + base.OnInitialized(e); + // A subclass misses the implicit TextBlock style in scope, so it is referenced here. + // A TextBlock created by a template does not take implicit styles from outside it, and + // an explicit Style wins, so in both cases the glyph is left exactly as a TextBlock is. + if (TemplatedParent == null && ReadLocalValue(StyleProperty) == DependencyProperty.UnsetValue) + SetResourceReference(StyleProperty, typeof(TextBlock)); + } + + protected override AutomationPeer OnCreateAutomationPeer() => new GlyphAutomationPeer(this); + + private sealed class GlyphAutomationPeer : TextBlockAutomationPeer + { + internal GlyphAutomationPeer(TextBlock owner) : base(owner) { } + + protected override bool IsControlElementCore() => false; + + protected override bool IsContentElementCore() => false; + } + } } diff --git a/Controls/CapCenterMargin.cs b/Controls/CapCenterMargin.cs new file mode 100644 index 00000000..5db5a43b --- /dev/null +++ b/Controls/CapCenterMargin.cs @@ -0,0 +1,72 @@ +#nullable enable +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; +using System.Windows.Media; + +namespace KillerFamily.Layout +{ + /// + /// Centers a radio ring or checkbox square on its label's capital letters, for whatever font + /// the label is drawn in. Bind the indicator's Margin to the row's FontFamily and FontSize; + /// ConverterParameter is the margin it would have with no correction ("0,0,8,0"). + /// + /// + /// Centering the indicator in the row puts it on the middle of the text's LINE BOX, and where + /// the capitals sit inside that box is a property of the font. Killer Sans UI sits low (the + /// ring has to come down a pixel at 12px); Microsoft Sans Serif, 98SE's face, sits in the + /// middle. A fixed pixel nudge is right for one face at one size and wrong for the other, + /// which is how this kept drifting from one fix to the next. The offset here comes from a + /// capital H laid out exactly as the label is, through the same font fallback, so it holds for + /// every theme, every language fallback and every app size. Reading the family's own metrics + /// is not enough: for a fallback list such as "Killer Sans UI, Segoe UI" WPF reports the + /// metrics of Segoe UI while the label draws in Killer Sans UI. + /// + public sealed class CapCenterMargin : IMultiValueConverter + { + public static readonly CapCenterMargin Instance = new(); + private static readonly System.Collections.Generic.Dictionary Cache = new(); + + public object Convert(object[] values, Type targetType, object? parameter, CultureInfo culture) + { + Thickness margin = ParseMargin(parameter as string); + if (values.Length < 2 || values[0] is not FontFamily family || values[1] is not double size) + return margin; + + double shift = Offset(family, size); + return new Thickness(margin.Left, margin.Top + shift, margin.Right, margin.Bottom - shift); + } + + /// How far below the line box's middle the middle of the capitals sits, in px. + public static double Offset(FontFamily family, double size) + { + string key = (family.BaseUri?.ToString() ?? "") + "|" + family.Source + "|" + size.ToString("R", CultureInfo.InvariantCulture); + lock (Cache) + if (Cache.TryGetValue(key, out double cached)) return cached; + double shift = 0; + try + { + var typeface = new Typeface(family, FontStyles.Normal, FontWeights.Normal, FontStretches.Normal); + var text = new FormattedText("H", CultureInfo.InvariantCulture, FlowDirection.LeftToRight, + typeface, size, Brushes.Black, 1.0); + Rect ink = text.BuildGeometry(new Point(0, 0)).Bounds; + if (!ink.IsEmpty) shift = (ink.Top + ink.Bottom) / 2 - text.Height / 2; + if (double.IsNaN(shift) || double.IsInfinity(shift)) shift = 0; + } + catch { shift = 0; } // an unreadable font keeps the plain margin rather than failing layout + lock (Cache) Cache[key] = shift; + return shift; + } + + private static Thickness ParseMargin(string? text) + { + if (string.IsNullOrEmpty(text)) return new Thickness(0, 0, 8, 0); + try { return (Thickness)new ThicknessConverter().ConvertFromInvariantString(text!)!; } + catch { return new Thickness(0, 0, 8, 0); } + } + + public object[] ConvertBack(object value, Type[] targetTypes, object? parameter, CultureInfo culture) + => throw new NotSupportedException(); + } +} diff --git a/Controls/ConfirmDialog.xaml b/Controls/ConfirmDialog.xaml index 2849c54b..58dfee24 100644 --- a/Controls/ConfirmDialog.xaml +++ b/Controls/ConfirmDialog.xaml @@ -86,7 +86,7 @@ is what a user reads - which is why they have to be resources. --> @@ -94,6 +94,10 @@ + + + -
+
KillerMCPKillerScanMCP

Inspect the network from your agent.

-

Install KillerMCP

KillerMCP includes all 81 KillerTools utilities plus tools from supported Killer apps in one local connection. The installer detects KillerScan and registers that shared connection with supported agent clients.

Download for Windows
Checking latest releaseWindows x64Digitally signedHosted on GitHub Releases
winget install SteveTheKiller.KillerMCPchoco install killermcp
  1. Download and run KillerMCP Setup.
  2. Let setup connect your agent.
  3. Open a new agent chat and ask. Available tools are discovered automatically.
+

Install KillerMCP

KillerMCP includes all 81 KillerTools utilities plus tools from supported Killer apps in one local connection. The installer detects KillerScan and registers that shared connection with supported agent clients.

Download for WindowsMicrosoft Store
Checking latest releaseWindows x64Digitally signedHosted on GitHub Releases
winget install SteveTheKiller.KillerMCPchoco install killermcp
  1. Download and run KillerMCP Setup.
  2. Let setup connect your agent.
  3. Open a new agent chat and ask. Available tools are discovered automatically.

Try asking:

killer is the shortest form. Your agent can infer KillerScan from a clear network request. Use killerscan when you want to make the app explicit.

killer what local network am I onkillerscan my networkkiller deep probe 192.168.50.25killer ping gateway.local five timeskiller trace the route to 1.1.1.1killer diagnose 192.168.50.25 on ports 22, 80, and 443killer watch 192.168.50.1 and 192.168.50.25run KillerSpeed test

What it can do

KillerMCP exposes all nine headless KillerScan commands.

Identify the local networkReturn the active interface, local IPv4 address, subnet, gateway, and DNS server without scanning hosts.
Scan the networkRun bounded quick discovery or full fingerprinting and port checks.
Deep probe one hostInspect one IPv4 host, including ports 1 through 1024.
Look up MAC vendorsUse KillerScan's bundled offline OUI database without contacting a lookup service.
Ping a targetMeasure latency and packet loss with up to 20 ICMP checks.
Trace a routeReturn the network path to an IPv4 address or hostname.
Diagnose a hostCheck DNS, ping, route selection, and selected TCP ports.
Watch hostsSample availability and latency for up to 16 IPv4 addresses.
Run KillerSpeedMeasure download, upload, latency, and jitter through speed.killerscan.net.

Data safety and permissions

KillerScan commands run on your computer. Local network identification does not probe other devices. A quick or full scan does send packets from your computer to the requested target, so review the target and scan type and scan only networks you are authorized to test.

How it works

KillerMCP is a small program that lets your AI assistant use supported Killer apps installed on your computer. You install and connect it once, and it automatically finds the apps and tools available on your computer. When you ask your assistant to inspect a network, KillerMCP checks the address and scan limits, asks KillerScan to run the command locally, waits for it to finish, and gives the results back to your assistant. The scan is performed by the installed KillerScan app, not by this webpage.

-

Current limits

Targets must be one IPv4 address or a CIDR from /22 through /32. Scans time out after 60 seconds and return no more than 100 discovered devices. Deep probes accept one IPv4 address. Ping sends up to 20 checks, traces return up to 64 hops, diagnostics accept up to 32 ports, and host watches accept up to 16 IPv4 addresses. KillerSpeed can transfer up to 6 GiB of generated test data plus network overhead.

    -
    -
    - +

    Current limits

    Targets must be one IPv4 address or a CIDR from /22 through /32. Scans time out after 60 seconds and return no more than 100 discovered devices. Deep probes accept one IPv4 address. Ping sends up to 20 checks, traces return up to 64 hops, diagnostics accept up to 32 ports, and host watches accept up to 16 IPv4 addresses. KillerSpeed can transfer up to 6 GiB of generated test data plus network overhead.

      Why KillerMCP runs twice

      Claude Desktop starts each local MCP server twice. One copy serves the app's own chats, and the other serves Claude sessions that use this computer remotely. Seeing two KillerMCP.exe processes under Claude in Task Manager is normal. KillerMCP is not installed twice, and nothing needs to be fixed.

      +
      +
      + - - + + diff --git a/scan-landing/screenshots/01.png b/scan-landing/screenshots/01.png index 52798b2b..882c9ce8 100644 Binary files a/scan-landing/screenshots/01.png and b/scan-landing/screenshots/01.png differ diff --git a/scan-landing/screenshots/02.png b/scan-landing/screenshots/02.png index de9fbbb4..f00768e4 100644 Binary files a/scan-landing/screenshots/02.png and b/scan-landing/screenshots/02.png differ diff --git a/scan-landing/screenshots/03.png b/scan-landing/screenshots/03.png index cf6c3262..7d943d6c 100644 Binary files a/scan-landing/screenshots/03.png and b/scan-landing/screenshots/03.png differ diff --git a/scan-landing/screenshots/04.png b/scan-landing/screenshots/04.png index cc436e3d..7dd67885 100644 Binary files a/scan-landing/screenshots/04.png and b/scan-landing/screenshots/04.png differ diff --git a/scan-landing/screenshots/05.png b/scan-landing/screenshots/05.png index 002b33ca..495d3b38 100644 Binary files a/scan-landing/screenshots/05.png and b/scan-landing/screenshots/05.png differ diff --git a/scan-landing/screenshots/06.png b/scan-landing/screenshots/06.png index 9b417282..d733f3bd 100644 Binary files a/scan-landing/screenshots/06.png and b/scan-landing/screenshots/06.png differ diff --git a/scan-landing/screenshots/07.png b/scan-landing/screenshots/07.png index 49460e71..ad536e7b 100644 Binary files a/scan-landing/screenshots/07.png and b/scan-landing/screenshots/07.png differ diff --git a/scan-landing/screenshots/08.png b/scan-landing/screenshots/08.png index 2b354b98..80762fc9 100644 Binary files a/scan-landing/screenshots/08.png and b/scan-landing/screenshots/08.png differ diff --git a/scan-landing/screenshots/09.png b/scan-landing/screenshots/09.png index 7987e0ee..6a225521 100644 Binary files a/scan-landing/screenshots/09.png and b/scan-landing/screenshots/09.png differ diff --git a/scan-landing/shortcuts.generated.js b/scan-landing/shortcuts.generated.js index 11b11211..9dffa77b 100644 --- a/scan-landing/shortcuts.generated.js +++ b/scan-landing/shortcuts.generated.js @@ -1,2 +1,2 @@ // Generated by build/shortcut-catalog.py from Shell/Shortcuts.cs and Strings. -window.KS_SHORTCUTS = [{"gesture":"F6","category":"Views","labels":{"bn":"ডিভাইস","cs-CZ":"Zařízení","de-DE":"Geräte","en-US":"Devices","es":"Dispositivos","fr-FR":"Appareils","hu-HU":"Eszközök","it-IT":"Dispositivi","ja-JP":"デバイス","kk-KZ":"Құрылғылар","nb-NO":"Enheter","pl-PL":"Urządzenia","pt-BR":"Dispositivos","ru-RU":"Устройства","tr-TR":"Cihazlar","uk-UA":"Пристрої","vi-VN":"Thiết bị","zh-CN":"设备","zh-TW":"裝置"}},{"gesture":"F7","category":"Views","labels":{"bn":"সেবাসমূহ","cs-CZ":"Služby","de-DE":"Dienste","en-US":"Services","es":"Servicios","fr-FR":"Services","hu-HU":"Szolgáltatások","it-IT":"Servizi","ja-JP":"サービス","kk-KZ":"Қызметтер","nb-NO":"Tjenester","pl-PL":"Usługi","pt-BR":"Serviços","ru-RU":"Службы","tr-TR":"Hizmetler","uk-UA":"Служби","vi-VN":"Dịch vụ","zh-CN":"服务","zh-TW":"服務"}},{"gesture":"F8","category":"Views","labels":{"bn":"নেটওয়ার্ক টপোলজি দেখান বা লুকান","cs-CZ":"Přepnout topologii sítě","de-DE":"Netzwerktopologie umschalten","en-US":"Toggle network topology","es":"Alternar topología de red","fr-FR":"Afficher ou masquer la topologie du réseau","hu-HU":"Hálózati topológia megjelenítése","it-IT":"Mostra o nascondi la topologia di rete","ja-JP":"ネットワーク トポロジの表示を切り替えます","kk-KZ":"Желі топологиясын көрсету немесе жасыру","nb-NO":"Slå nettverkstopologi av eller på","pl-PL":"Przełącz topologię sieci","pt-BR":"Alternar topologia da rede","ru-RU":"Показать или скрыть топологию сети","tr-TR":"Ağ topolojisini aç veya kapat","uk-UA":"Показати або сховати топологію мережі","vi-VN":"Bật hoặc tắt sơ đồ mạng","zh-CN":"切换网络拓扑","zh-TW":"切換網路拓撲"}},{"gesture":"F9","category":"Views","labels":{"bn":"সংযোগ পর্যবেক্ষণ","cs-CZ":"Sledování připojení","de-DE":"Verbindungsüberwachung","en-US":"Keep Alive","es":"Supervisión de conexión","fr-FR":"Surveillance de connexion","hu-HU":"Kapcsolatfigyelés","it-IT":"Monitoraggio connessione","ja-JP":"接続監視","kk-KZ":"Қосылымды бақылау","nb-NO":"Keep Alive","pl-PL":"Monitorowanie połączenia","pt-BR":"Keep Alive","ru-RU":"Наблюдение за соединением","tr-TR":"Bağlantı izleme","uk-UA":"Keep Alive","vi-VN":"Keep Alive","zh-CN":"连接监控","zh-TW":"連線監控"}},{"gesture":"F10","category":"Views","labels":{"bn":"টার্মিনাল","cs-CZ":"Terminál","de-DE":"Terminal","en-US":"Terminal","es":"Terminal","fr-FR":"Terminal","hu-HU":"Terminál","it-IT":"Terminale","ja-JP":"ターミナル","kk-KZ":"Терминал","nb-NO":"Terminal","pl-PL":"Terminal","pt-BR":"Terminal","ru-RU":"Терминал","tr-TR":"Terminal","uk-UA":"Термінал","vi-VN":"Terminal","zh-CN":"终端","zh-TW":"終端機"}},{"gesture":"Ctrl + T","category":"Views","labels":{"bn":"ডিভাইস দেখান","cs-CZ":"Zobrazit zařízení","de-DE":"Geräte anzeigen","en-US":"Show Devices","es":"Mostrar dispositivos","fr-FR":"Afficher les appareils","hu-HU":"Eszközök megjelenítése","it-IT":"Mostra dispositivi","ja-JP":"デバイスを表示","kk-KZ":"Құрылғыларды көрсету","nb-NO":"Vis Enheter","pl-PL":"Pokaż urządzenia","pt-BR":"Mostrar Dispositivos","ru-RU":"Показать устройства","tr-TR":"Cihazları göster","uk-UA":"Показати пристрої","vi-VN":"Hiện Thiết bị","zh-CN":"显示设备","zh-TW":"顯示裝置"}},{"gesture":"Ctrl + Shift + T","category":"Views","labels":{"bn":"টার্মিনাল দেখান","cs-CZ":"Zobrazit terminál","de-DE":"Terminal anzeigen","en-US":"Show Terminal","es":"Mostrar terminal","fr-FR":"Afficher le terminal","hu-HU":"Terminál megjelenítése","it-IT":"Mostra terminale","ja-JP":"ターミナルを表示","kk-KZ":"Терминалды көрсету","nb-NO":"Vis Terminal","pl-PL":"Pokaż terminal","pt-BR":"Mostrar Terminal","ru-RU":"Показать терминал","tr-TR":"Terminali göster","uk-UA":"Показати термінал","vi-VN":"Hiện Terminal","zh-CN":"显示终端","zh-TW":"顯示終端機"}},{"gesture":"Ctrl + H","category":"Views","labels":{"bn":"স্ক্যান ইতিহাস","cs-CZ":"Historie skenování","de-DE":"Scanverlauf","en-US":"Scan History","es":"Historial de análisis","fr-FR":"Historique des analyses","hu-HU":"Vizsgálati előzmények","it-IT":"Cronologia scansioni","ja-JP":"スキャン履歴","kk-KZ":"Сканерлеу тарихы","nb-NO":"Skanneloggen","pl-PL":"Historia skanowania","pt-BR":"Histórico de verificações","ru-RU":"История сканирования","tr-TR":"Tarama geçmişi","uk-UA":"Історія сканувань","vi-VN":"Lịch sử quét","zh-CN":"扫描历史","zh-TW":"掃描歷史"}},{"gesture":"Ctrl + Alt + R","category":"Views","labels":{"bn":"ইতিহাসের সেটিংস","cs-CZ":"Nastavení historie","de-DE":"Verlaufseinstellungen","en-US":"History settings","es":"Configuración del historial","fr-FR":"Paramètres de l'historique","hu-HU":"Előzmények beállításai","it-IT":"Impostazioni cronologia","ja-JP":"履歴設定","kk-KZ":"Тарих параметрлері","nb-NO":"Historikkinnstillinger","pl-PL":"Ustawienia historii","pt-BR":"Configurações do histórico","ru-RU":"Настройки истории","tr-TR":"Geçmiş ayarları","uk-UA":"Налаштування історії","vi-VN":"Cài đặt lịch sử","zh-CN":"历史设置","zh-TW":"歷史設定"}},{"gesture":"Ctrl + Shift + P","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল","cs-CZ":"Profily skenování","de-DE":"Scanprofile","en-US":"Scan profiles","es":"Perfiles de análisis","fr-FR":"Profils d’analyse","hu-HU":"Vizsgálati profilok","it-IT":"Profili di scansione","ja-JP":"スキャンプロファイル","kk-KZ":"Сканерлеу профильдері","nb-NO":"Skanneprofiler","pl-PL":"Profile skanowania","pt-BR":"Perfis de verificação","ru-RU":"Профили сканирования","tr-TR":"Tarama profilleri","uk-UA":"Профілі сканування","vi-VN":"Hồ sơ quét","zh-CN":"扫描配置","zh-TW":"掃描設定檔"}},{"gesture":"F4","category":"Views","labels":{"bn":"KillerSpeed","cs-CZ":"KillerSpeed","de-DE":"KillerSpeed","en-US":"KillerSpeed","es":"KillerSpeed","fr-FR":"KillerSpeed","hu-HU":"KillerSpeed","it-IT":"KillerSpeed","ja-JP":"KillerSpeed","kk-KZ":"KillerSpeed","nb-NO":"KillerSpeed","pl-PL":"KillerSpeed","pt-BR":"KillerSpeed","ru-RU":"KillerSpeed","tr-TR":"KillerSpeed","uk-UA":"KillerSpeed","vi-VN":"KillerSpeed","zh-CN":"KillerSpeed","zh-TW":"KillerSpeed"}},{"gesture":"F5","category":"Scan","labels":{"bn":"স্ক্যান শুরু বা বন্ধ করুন","cs-CZ":"Spustit nebo zastavit skenování","de-DE":"Scan starten oder stoppen","en-US":"Start or stop a scan","es":"Iniciar o detener un escaneo","fr-FR":"Démarrer ou arrêter une analyse","hu-HU":"Indítsa el vagy állítsa le a keresést","it-IT":"Avvia o interrompi una scansione","ja-JP":"スキャンの開始または停止","kk-KZ":"Сканерлеуді бастау немесе тоқтату","nb-NO":"Start eller stopp en skanning","pl-PL":"Rozpocznij lub zatrzymaj skanowanie","pt-BR":"Iniciar ou parar uma verificação","ru-RU":"Запустить или остановить сканирование","tr-TR":"Taramayı başlat veya durdur","uk-UA":"Почати або зупинити сканування","vi-VN":"Bắt đầu hoặc dừng quét","zh-CN":"开始或停止扫描","zh-TW":"開始或停止掃描"}},{"gesture":"Esc","category":"Scan","labels":{"bn":"স্ক্যান বাতিল করুন, বা এটি বন্ধ করুন","cs-CZ":"Zrušit skenování nebo zavřít toto okno","de-DE":"Scan abbrechen oder dies schließen","en-US":"Cancel the scan, or close this","es":"Cancelar el escaneo o cerrar esto","fr-FR":"Annuler l'analyse, ou fermer ceci","hu-HU":"Szakítsa meg a beolvasást, vagy zárja be","it-IT":"Annulla la scansione, o chiudi questa finestra","ja-JP":"スキャンの取り消し、またはこれを閉じる","kk-KZ":"Сканерлеуді болдырмау немесе осыны жабу","nb-NO":"Avbryt skanningen, eller lukk dette","pl-PL":"Anuluj skanowanie lub zamknij to okno","pt-BR":"Cancelar a verificação ou fechar isto","ru-RU":"Отменить сканирование или закрыть это окно","tr-TR":"Taramayı iptal et veya bunu kapat","uk-UA":"Скасувати сканування або закрити це вікно","vi-VN":"Hủy quét hoặc đóng cửa sổ này","zh-CN":"取消扫描,或关闭此窗口","zh-TW":"取消掃描,或關閉此視窗"}},{"gesture":"Ctrl + R","category":"Scan","labels":{"bn":"নির্বাচিত হোস্ট গভীরভাবে পুনরায় স্ক্যান করুন","cs-CZ":"Hloubkově znovu skenovat vybrané hostitele","de-DE":"Ausgewählte Hosts tief erneut scannen","en-US":"Deep rescan the selected hosts","es":"Reescaneo profundo de los hosts seleccionados","fr-FR":"Réanalyser en profondeur les hôtes sélectionnés","hu-HU":"A kiválasztott gazdagépek mélyreható újrakeresése","it-IT":"Scansione approfondita degli host selezionati","ja-JP":"選択したホストを詳細に再スキャン","kk-KZ":"Таңдалған хосттарды терең қайта сканерлеу","nb-NO":"Dypskann de valgte vertene på nytt","pl-PL":"Dokładne ponowne skanowanie wybranych hostów","pt-BR":"Refazer a verificação profunda dos hosts selecionados","ru-RU":"Глубокое пересканирование выбранных хостов","tr-TR":"Seçili ana bilgisayarları derin yeniden tara","uk-UA":"Глибоко пересканувати вибрані хости","vi-VN":"Quét sâu lại các máy chủ đã chọn","zh-CN":"深度重新扫描所选主机","zh-TW":"深度重新掃描所選主機"}},{"gesture":"Ctrl + F","category":"Scan","labels":{"bn":"সাবনেট বাক্সে যান","cs-CZ":"Přejít do pole podsítě","de-DE":"Zum Subnetz-Feld springen","en-US":"Jump to the subnet box","es":"Ir al cuadro de subred","fr-FR":"Aller au champ de sous-réseau","hu-HU":"Ugrás az alhálózati mezőre","it-IT":"Vai alla casella della sottorete","ja-JP":"サブネット入力欄へ移動","kk-KZ":"Ішкі желі өрісіне өту","nb-NO":"Gå til subnettfeltet","pl-PL":"Przejdź do pola podsieci","pt-BR":"Ir para a caixa de sub-rede","ru-RU":"Перейти к полю подсети","tr-TR":"Alt ağ kutusuna git","uk-UA":"Перейти до поля підмережі","vi-VN":"Chuyển đến ô mạng con","zh-CN":"跳转到子网输入框","zh-TW":"跳至子網路輸入框"}},{"gesture":"Ctrl + Shift + F","category":"Scan","labels":{"bn":"ডিভাইস ফিল্টার করুন...","cs-CZ":"Filtrovat zařízení...","de-DE":"Geräte filtern...","en-US":"Filter devices...","es":"Filtrar dispositivos...","fr-FR":"Filtrer les appareils...","hu-HU":"Eszközök szűrése...","it-IT":"Filtra dispositivi...","ja-JP":"デバイスを絞り込み...","kk-KZ":"Құрылғыларды сүзу...","nb-NO":"Filtrer enheter...","pl-PL":"Filtruj urządzenia...","pt-BR":"Filtrar dispositivos...","ru-RU":"Фильтр устройств...","tr-TR":"Cihazları filtrele...","uk-UA":"Фільтр пристроїв...","vi-VN":"Lọc thiết bị...","zh-CN":"筛选设备...","zh-TW":"篩選裝置..."}},{"gesture":"Ctrl + A","category":"Scan","labels":{"bn":"সব ডিভাইস নির্বাচন করুন","cs-CZ":"Vybrat všechna zařízení","de-DE":"Alle Geräte auswählen","en-US":"Select every device","es":"Seleccionar todos los dispositivos","fr-FR":"Sélectionner tous les appareils","hu-HU":"Válassza ki az összes eszközt","it-IT":"Seleziona tutti i dispositivi","ja-JP":"すべてのデバイスを選択","kk-KZ":"Барлық құрылғыны таңдау","nb-NO":"Merk alle enheter","pl-PL":"Zaznacz wszystkie urządzenia","pt-BR":"Selecionar todos os dispositivos","ru-RU":"Выбрать все устройства","tr-TR":"Tüm cihazları seç","uk-UA":"Вибрати всі пристрої","vi-VN":"Chọn tất cả thiết bị","zh-CN":"选择所有设备","zh-TW":"選取所有裝置"}},{"gesture":"Ctrl + E","category":"Scan","labels":{"bn":"CSV হিসেবে এক্সপোর্ট","cs-CZ":"Exportovat jako CSV","de-DE":"Als CSV exportieren","en-US":"Export as CSV","es":"Exportar como CSV","fr-FR":"Exporter en CSV","hu-HU":"Exportálás CSV-ként","it-IT":"Esporta come CSV","ja-JP":"CSV としてエクスポート","kk-KZ":"CSV ретінде экспорттау","nb-NO":"Eksporter som CSV","pl-PL":"Eksportuj jako CSV","pt-BR":"Exportar como CSV","ru-RU":"Экспорт в CSV","tr-TR":"CSV olarak dışa aktar","uk-UA":"Експортувати як CSV","vi-VN":"Xuất dạng CSV","zh-CN":"导出为 CSV","zh-TW":"匯出為 CSV"}},{"gesture":"Ctrl + Shift + E","category":"Scan","labels":{"bn":"HTML হিসেবে এক্সপোর্ট","cs-CZ":"Exportovat jako HTML","de-DE":"Als HTML exportieren","en-US":"Export as HTML","es":"Exportar como HTML","fr-FR":"Exporter en HTML","hu-HU":"Exportálás HTML-ként","it-IT":"Esporta come HTML","ja-JP":"HTML としてエクスポート","kk-KZ":"HTML ретінде экспорттау","nb-NO":"Eksporter som HTML","pl-PL":"Eksportuj jako HTML","pt-BR":"Exportar como HTML","ru-RU":"Экспорт в HTML","tr-TR":"HTML olarak dışa aktar","uk-UA":"Експортувати як HTML","vi-VN":"Xuất dạng HTML","zh-CN":"导出为 HTML","zh-TW":"匯出為 HTML"}},{"gesture":"Ctrl + Shift + X","category":"Scan","labels":{"bn":"TXT হিসেবে এক্সপোর্ট","cs-CZ":"Exportovat jako TXT","de-DE":"Als TXT exportieren","en-US":"Export as TXT","es":"Exportar como TXT","fr-FR":"Exporter en TXT","hu-HU":"Exportálás TXT-ként","it-IT":"Esporta come TXT","ja-JP":"TXT としてエクスポート","kk-KZ":"TXT ретінде экспорттау","nb-NO":"Eksporter som TXT","pl-PL":"Eksportuj jako TXT","pt-BR":"Exportar como TXT","ru-RU":"Экспорт в TXT","tr-TR":"TXT olarak dışa aktar","uk-UA":"Експортувати як TXT","vi-VN":"Xuất dạng TXT","zh-CN":"导出为 TXT","zh-TW":"匯出為 TXT"}},{"gesture":"Ctrl + Shift + G","category":"Scan","labels":{"bn":"কার্ড PNG হিসেবে এক্সপোর্ট","cs-CZ":"Exportovat karty jako PNG","de-DE":"Karten als PNG exportieren","en-US":"Export cards as PNG","es":"Exportar tarjetas como PNG","fr-FR":"Exporter les cartes en PNG","hu-HU":"Kártyák exportálása PNG-ként","it-IT":"Esporta le schede come PNG","ja-JP":"カードを PNG にエクスポート","kk-KZ":"Карталарды PNG ретінде экспорттау","nb-NO":"Eksporter kort som PNG","pl-PL":"Eksportuj karty jako PNG","pt-BR":"Exportar cartões como PNG","ru-RU":"Экспорт карточек в PNG","tr-TR":"Kartları PNG olarak dışa aktar","uk-UA":"Експортувати картки як PNG","vi-VN":"Xuất thẻ dạng PNG","zh-CN":"将卡片导出为 PNG","zh-TW":"將卡片匯出為 PNG"}},{"gesture":"Ctrl + Shift + J","category":"Scan","labels":{"bn":"JPG-তে এক্সপোর্ট","cs-CZ":"Exportovat do JPG","de-DE":"Als JPG exportieren","en-US":"Export to JPG","es":"Exportar a JPG","fr-FR":"Exporter en JPG","hu-HU":"Exportálás JPG-be","it-IT":"Esporta in JPG","ja-JP":"JPG にエクスポート","kk-KZ":"JPG форматына экспорттау","nb-NO":"Eksporter til JPG","pl-PL":"Eksportuj do JPG","pt-BR":"Exportar para JPG","ru-RU":"Экспорт в JPG","tr-TR":"JPG olarak dışa aktar","uk-UA":"Експортувати як JPG","vi-VN":"Xuất sang JPG","zh-CN":"导出为 JPG","zh-TW":"匯出為 JPG"}},{"gesture":"Ctrl + Alt + H","category":"Scan","labels":{"bn":"HTML-এ এক্সপোর্ট","cs-CZ":"Exportovat do HTML","de-DE":"Als HTML exportieren","en-US":"Export to HTML","es":"Exportar a HTML","fr-FR":"Exporter en HTML","hu-HU":"Exportálás HTML-be","it-IT":"Esporta in HTML","ja-JP":"HTML にエクスポート","kk-KZ":"HTML форматына экспорттау","nb-NO":"Eksporter til HTML","pl-PL":"Eksportuj do HTML","pt-BR":"Exportar para HTML","ru-RU":"Экспорт в HTML","tr-TR":"HTML olarak dışa aktar","uk-UA":"Експортувати як HTML","vi-VN":"Xuất sang HTML","zh-CN":"导出为 HTML","zh-TW":"匯出為 HTML"}},{"gesture":"Enter","category":"Device","labels":{"bn":"নির্বাচিত ডিভাইস ব্রাউজারে খুলুন","cs-CZ":"Otevřít vybrané zařízení v prohlížeči","de-DE":"Ausgewähltes Gerät im Browser öffnen","en-US":"Open the selected device in a browser","es":"Abrir el dispositivo seleccionado en el navegador","fr-FR":"Ouvrir l'appareil sélectionné dans le navigateur","hu-HU":"Nyissa meg a kiválasztott eszközt egy böngészőben","it-IT":"Apri il dispositivo selezionato in un browser","ja-JP":"選択したデバイスをブラウザーで開く","kk-KZ":"Таңдалған құрылғыны браузерде ашу","nb-NO":"Åpne den valgte enheten i en nettleser","pl-PL":"Otwórz wybrane urządzenie w przeglądarce","pt-BR":"Abrir o dispositivo selecionado em um navegador","ru-RU":"Открыть выбранное устройство в браузере","tr-TR":"Seçili cihazı tarayıcıda aç","uk-UA":"Відкрити вибраний пристрій у браузері","vi-VN":"Mở thiết bị đã chọn trong trình duyệt","zh-CN":"在浏览器中打开所选设备","zh-TW":"在瀏覽器中開啟所選裝置"}},{"gesture":"F3","category":"Device","labels":{"bn":"নির্বাচিত ডিভাইস Keep Alive-এ দেখান","cs-CZ":"Zobrazit vybrané zařízení v Keep Alive","de-DE":"Ausgewähltes Gerät in Keep Alive anzeigen","en-US":"Show selected device in Keep Alive","es":"Mostrar el dispositivo seleccionado en Keep Alive","fr-FR":"Afficher l'appareil sélectionné dans Keep Alive","hu-HU":"Kijelölt eszköz megjelenítése a Keep Alive nézetben","it-IT":"Mostra il dispositivo selezionato in Keep Alive","ja-JP":"選択デバイスを Keep Alive に表示","kk-KZ":"Таңдалған құрылғыны Keep Alive ішінде көрсету","nb-NO":"Vis valgt enhet i Keep Alive","pl-PL":"Pokaż wybrane urządzenie w Keep Alive","pt-BR":"Mostrar o dispositivo selecionado em Keep Alive","ru-RU":"Показать выбранное устройство в Keep Alive","tr-TR":"Seçili cihazı Keep Alive'da göster","uk-UA":"Показати вибраний пристрій у Keep Alive","vi-VN":"Hiện thiết bị đã chọn trong Keep Alive","zh-CN":"在 Keep Alive 中显示选中设备","zh-TW":"在 Keep Alive 中顯示選取裝置"}},{"gesture":"Ctrl + P","category":"Device","labels":{"bn":"নির্বাচিত ডিভাইসে পিং করুন","cs-CZ":"Odeslat ping vybranému zařízení","de-DE":"Ausgewähltes Gerät anpingen","en-US":"Ping the selected device","es":"Hacer ping al dispositivo seleccionado","fr-FR":"Envoyer un ping à l'appareil sélectionné","hu-HU":"Pingelje a kiválasztott eszközt","it-IT":"Esegui il ping del dispositivo selezionato","ja-JP":"選択したデバイスに ping を送信","kk-KZ":"Таңдалған құрылғыға Ping жіберу","nb-NO":"Ping den valgte enheten","pl-PL":"Wyślij ping do wybranego urządzenia","pt-BR":"Fazer ping no dispositivo selecionado","ru-RU":"Выполнить ping выбранного устройства","tr-TR":"Seçili cihaza ping gönder","uk-UA":"Пінгувати вибраний пристрій","vi-VN":"Ping thiết bị đã chọn","zh-CN":"Ping 所选设备","zh-TW":"Ping 所選裝置"}},{"gesture":"Ctrl + D","category":"Device","labels":{"bn":"নির্বাচিত ডিভাইসে রিমোট ডেস্কটপ খুলুন","cs-CZ":"Otevřít Vzdálenou plochu k vybranému zařízení","de-DE":"Remotedesktop zum ausgewählten Gerät öffnen","en-US":"Open Remote Desktop to the selected device","es":"Abrir Escritorio remoto en el dispositivo seleccionado","fr-FR":"Ouvrir le Bureau à distance vers l'appareil sélectionné","hu-HU":"Nyissa meg a Távoli asztalt a kiválasztott eszközön","it-IT":"Apri Desktop remoto verso il dispositivo selezionato","ja-JP":"選択したデバイスにリモート デスクトップで接続","kk-KZ":"Таңдалған құрылғыға қашықтағы жұмыс үстелін ашу","nb-NO":"Åpne Eksternt skrivebord til den valgte enheten","pl-PL":"Otwórz Pulpit zdalny do wybranego urządzenia","pt-BR":"Abrir a Área de Trabalho Remota no dispositivo selecionado","ru-RU":"Открыть удаленный рабочий стол к выбранному устройству","tr-TR":"Seçili cihaza Uzak Masaüstü aç","uk-UA":"Відкрити віддалений робочий стіл на вибраному пристрої","vi-VN":"Mở Remote Desktop tới thiết bị đã chọn","zh-CN":"远程桌面连接到所选设备","zh-TW":"遠端桌面連線到所選裝置"}},{"gesture":"Ctrl + S","category":"Device","labels":{"bn":"SSH দিয়ে নির্বাচিত ডিভাইসে সংযোগ করুন","cs-CZ":"Připojit se k vybranému zařízení přes SSH","de-DE":"Über SSH mit dem ausgewählten Gerät verbinden","en-US":"Connect to the selected device over SSH","es":"Conectar al dispositivo seleccionado por SSH","fr-FR":"Se connecter à l'appareil sélectionné en SSH","hu-HU":"Csatlakozzon a kiválasztott eszközhöz SSH-n keresztül","it-IT":"Connettiti al dispositivo selezionato via SSH","ja-JP":"選択したデバイスに SSH で接続","kk-KZ":"Таңдалған құрылғыға SSH арқылы қосылу","nb-NO":"Koble til den valgte enheten via SSH","pl-PL":"Połącz się z wybranym urządzeniem przez SSH","pt-BR":"Conectar ao dispositivo selecionado por SSH","ru-RU":"Подключиться к выбранному устройству по SSH","tr-TR":"Seçili cihaza SSH ile bağlan","uk-UA":"Підключитися до вибраного пристрою через SSH","vi-VN":"Kết nối với thiết bị đã chọn qua SSH","zh-CN":"通过 SSH 连接到所选设备","zh-TW":"透過 SSH 連線到所選裝置"}},{"gesture":"Ctrl + Shift + S","category":"Device","labels":{"bn":"একটি SSH অ্যাকাউন্ট বেছে নিয়ে সংযোগ করুন","cs-CZ":"Vybrat účet SSH a připojit se","de-DE":"SSH-Konto wählen und verbinden","en-US":"Choose an SSH account and connect","es":"Elegir una cuenta SSH y conectar","fr-FR":"Choisir un compte SSH et se connecter","hu-HU":"Válasszon egy SSH-fiókot, és csatlakozzon","it-IT":"Scegli un account SSH e connettiti","ja-JP":"SSH アカウントを選んで接続","kk-KZ":"SSH тіркелгісін таңдап қосылу","nb-NO":"Velg en SSH-konto og koble til","pl-PL":"Wybierz konto SSH i połącz","pt-BR":"Escolher uma conta SSH e conectar","ru-RU":"Выбрать учетную запись SSH и подключиться","tr-TR":"Bir SSH hesabı seç ve bağlan","uk-UA":"Вибрати обліковий запис SSH і підключитися","vi-VN":"Chọn tài khoản SSH và kết nối","zh-CN":"选择 SSH 账户并连接","zh-TW":"選擇 SSH 帳戶並連線"}},{"gesture":"Ctrl + C","category":"Device","labels":{"bn":"নির্বাচিত IP ঠিকানা কপি করুন","cs-CZ":"Kopírovat vybranou IP adresu","de-DE":"Ausgewählte IP-Adresse kopieren","en-US":"Copy the selected IP address","es":"Copiar la dirección IP seleccionada","fr-FR":"Copier l'adresse IP sélectionnée","hu-HU":"Másolja a kiválasztott IP-címet","it-IT":"Copia l'indirizzo IP selezionato","ja-JP":"選択した IP アドレスをコピー","kk-KZ":"Таңдалған IP мекенжайын көшіру","nb-NO":"Kopier den valgte IP-adressen","pl-PL":"Kopiuj wybrany adres IP","pt-BR":"Copiar o endereço IP selecionado","ru-RU":"Копировать выбранный IP-адрес","tr-TR":"Seçili IP adresini kopyala","uk-UA":"Копіювати вибрану IP-адресу","vi-VN":"Sao chép địa chỉ IP đã chọn","zh-CN":"复制所选 IP 地址","zh-TW":"複製所選 IP 位址"}},{"gesture":"Ctrl + Shift + C","category":"Device","labels":{"bn":"নির্বাচিত MAC ঠিকানা কপি করুন","cs-CZ":"Kopírovat vybranou MAC adresu","de-DE":"Ausgewählte MAC-Adresse kopieren","en-US":"Copy the selected MAC address","es":"Copiar la dirección MAC seleccionada","fr-FR":"Copier l'adresse MAC sélectionnée","hu-HU":"Másolja a kiválasztott MAC-címet","it-IT":"Copia l'indirizzo MAC selezionato","ja-JP":"選択した MAC アドレスをコピー","kk-KZ":"Таңдалған MAC мекенжайын көшіру","nb-NO":"Kopier den valgte MAC-adressen","pl-PL":"Kopiuj wybrany adres MAC","pt-BR":"Copiar o endereço MAC selecionado","ru-RU":"Копировать выбранный MAC-адрес","tr-TR":"Seçili MAC adresini kopyala","uk-UA":"Копіювати вибрану MAC-адресу","vi-VN":"Sao chép địa chỉ MAC đã chọn","zh-CN":"复制所选 MAC 地址","zh-TW":"複製所選 MAC 位址"}},{"gesture":"Ctrl + Alt + C","category":"Device","labels":{"bn":"নির্বাচিত হোস্টনাম কপি করুন","cs-CZ":"Kopírovat vybraný název hostitele","de-DE":"Ausgewählten Hostnamen kopieren","en-US":"Copy the selected hostname","es":"Copiar el nombre de host seleccionado","fr-FR":"Copier le nom d'hôte sélectionné","hu-HU":"Másolja ki a kiválasztott gazdagépnevet","it-IT":"Copia il nome host selezionato","ja-JP":"選択したホスト名をコピー","kk-KZ":"Таңдалған хост атауын көшіру","nb-NO":"Kopier det valgte vertsnavnet","pl-PL":"Kopiuj wybraną nazwę hosta","pt-BR":"Copiar o nome do host selecionado","ru-RU":"Копировать выбранное имя хоста","tr-TR":"Seçili ana bilgisayar adını kopyala","uk-UA":"Копіювати вибране ім'я хоста","vi-VN":"Sao chép tên máy chủ đã chọn","zh-CN":"复制所选主机名","zh-TW":"複製所選主機名稱"}},{"gesture":"Shift + F10","category":"Device","labels":{"bn":"প্রসঙ্গ মেনু","cs-CZ":"Kontextová nabídka","de-DE":"Kontextmenü","en-US":"Context menu","es":"Menú contextual","fr-FR":"Menu contextuel","hu-HU":"Helyi menü","it-IT":"Menu contestuale","ja-JP":"コンテキストメニュー","kk-KZ":"Контекстік мәзір","nb-NO":"Kontekstmeny","pl-PL":"Menu kontekstowe","pt-BR":"Menu de contexto","ru-RU":"Контекстное меню","tr-TR":"Bağlam menüsü","uk-UA":"Контекстне меню","vi-VN":"Menu ngữ cảnh","zh-CN":"上下文菜单","zh-TW":"快顯功能表"}},{"gesture":"Menu","category":"Device","labels":{"bn":"প্রসঙ্গ মেনু","cs-CZ":"Kontextová nabídka","de-DE":"Kontextmenü","en-US":"Context menu","es":"Menú contextual","fr-FR":"Menu contextuel","hu-HU":"Helyi menü","it-IT":"Menu contestuale","ja-JP":"コンテキストメニュー","kk-KZ":"Контекстік мәзір","nb-NO":"Kontekstmeny","pl-PL":"Menu kontekstowe","pt-BR":"Menu de contexto","ru-RU":"Контекстное меню","tr-TR":"Bağlam menüsü","uk-UA":"Контекстне меню","vi-VN":"Menu ngữ cảnh","zh-CN":"上下文菜单","zh-TW":"快顯功能表"}},{"gesture":"F2","category":"Device","labels":{"bn":"ডিভাইসের নাম পরিবর্তন করুন","cs-CZ":"Přejmenovat zařízení","de-DE":"Gerät umbenennen","en-US":"Rename device","es":"Cambiar nombre del dispositivo","fr-FR":"Renommer l’appareil","hu-HU":"Eszköz átnevezése","it-IT":"Rinomina dispositivo","ja-JP":"デバイス名を変更","kk-KZ":"Құрылғы атын өзгерту","nb-NO":"Gi enheten nytt navn","pl-PL":"Zmień nazwę urządzenia","pt-BR":"Renomear dispositivo","ru-RU":"Переименовать устройство","tr-TR":"Cihazı yeniden adlandır","uk-UA":"Перейменувати пристрій","vi-VN":"Đổi tên thiết bị","zh-CN":"重命名设备","zh-TW":"重新命名裝置"}},{"gesture":"Ctrl + Alt + N","category":"Device","labels":{"bn":"ম্যানুয়াল নাম মুছুন","cs-CZ":"Vymazat ruční název","de-DE":"Manuellen Namen löschen","en-US":"Clear manual name","es":"Borrar nombre manual","fr-FR":"Effacer le nom manuel","hu-HU":"Kézi név törlése","it-IT":"Cancella nome manuale","ja-JP":"手動名を消去","kk-KZ":"Қолмен берілген атауды тазалау","nb-NO":"Fjern manuelt navn","pl-PL":"Wyczyść nazwę ręczną","pt-BR":"Limpar nome manual","ru-RU":"Удалить заданное имя","tr-TR":"Elle verilen adı temizle","uk-UA":"Скинути ім'я, задане вручну","vi-VN":"Xóa tên thủ công","zh-CN":"清除手动名称","zh-TW":"清除手動名稱"}},{"gesture":"Ctrl + Alt + T","category":"Device","labels":{"bn":"ওভাররাইড সাফ করুন","cs-CZ":"Zrušit ruční nastavení","de-DE":"Überschreibung löschen","en-US":"Clear Override","es":"Borrar anulación","fr-FR":"Effacer le remplacement","hu-HU":"Felülbírálás törlése","it-IT":"Rimuovi override","ja-JP":"上書きをクリア","kk-KZ":"Қайта анықтауды тазалау","nb-NO":"Fjern overstyring","pl-PL":"Usuń nadpisanie","pt-BR":"Limpar substituição","ru-RU":"Сбросить переопределение","tr-TR":"Geçersiz kılmayı temizle","uk-UA":"Скинути заміну","vi-VN":"Xóa ghi đè","zh-CN":"清除覆盖","zh-TW":"清除覆寫"}},{"gesture":"Ctrl + Shift + B","category":"Device","labels":{"bn":"বিশ্বস্ত ডিভাইস","cs-CZ":"Důvěryhodné zařízení","de-DE":"Vertrauenswürdiges Gerät","en-US":"Trusted device","es":"Dispositivo de confianza","fr-FR":"Appareil approuvé","hu-HU":"Megbízható eszköz","it-IT":"Dispositivo attendibile","ja-JP":"信頼済みデバイス","kk-KZ":"Сенімді құрылғы","nb-NO":"Klarert enhet","pl-PL":"Zaufane urządzenie","pt-BR":"Dispositivo confiável","ru-RU":"Доверенное устройство","tr-TR":"Güvenilir cihaz","uk-UA":"Довірений пристрій","vi-VN":"Thiết bị đáng tin cậy","zh-CN":"可信设备","zh-TW":"信任的裝置"}},{"gesture":"Ctrl + Shift + C","category":"Device","labels":{"bn":"সেবাসমূহ: ঠিকানা ও পোর্ট কপি করুন","cs-CZ":"Služby: Kopírovat adresu a port","de-DE":"Dienste: Adresse und Port kopieren","en-US":"Services: Copy endpoint","es":"Servicios: Copiar dirección y puerto","fr-FR":"Services: Copier l'adresse et le port","hu-HU":"Szolgáltatások: Cím és port másolása","it-IT":"Servizi: Copia indirizzo e porta","ja-JP":"サービス: アドレスとポートをコピー","kk-KZ":"Қызметтер: Мекенжай мен портты көшіру","nb-NO":"Tjenester: Kopier adresse og port","pl-PL":"Usługi: Kopiuj adres i port","pt-BR":"Serviços: Copiar endereço e porta","ru-RU":"Службы: Копировать адрес и порт","tr-TR":"Hizmetler: Adresi ve bağlantı noktasını kopyala","uk-UA":"Служби: Копіювати адресу й порт","vi-VN":"Dịch vụ: Sao chép địa chỉ và cổng","zh-CN":"服务: 复制地址和端口","zh-TW":"服務: 複製位址與連接埠"}},{"gesture":"Ctrl + Shift + Y","category":"Device","labels":{"bn":"সেবাসমূহ: সেবার নাম কপি করুন","cs-CZ":"Služby: Kopírovat název služby","de-DE":"Dienste: Dienstnamen kopieren","en-US":"Services: Copy service name","es":"Servicios: Copiar nombre del servicio","fr-FR":"Services: Copier le nom du service","hu-HU":"Szolgáltatások: Szolgáltatásnév másolása","it-IT":"Servizi: Copia nome del servizio","ja-JP":"サービス: サービス名をコピー","kk-KZ":"Қызметтер: Қызмет атауын көшіру","nb-NO":"Tjenester: Kopier tjenestenavn","pl-PL":"Usługi: Kopiuj nazwę usługi","pt-BR":"Serviços: Copiar nome do serviço","ru-RU":"Службы: Копировать имя службы","tr-TR":"Hizmetler: Hizmet adını kopyala","uk-UA":"Служби: Копіювати назву служби","vi-VN":"Dịch vụ: Sao chép tên dịch vụ","zh-CN":"服务: 复制服务名称","zh-TW":"服務: 複製服務名稱"}},{"gesture":"Ctrl + Alt + P","category":"Device","labels":{"bn":"সেবাসমূহ: পোর্ট কপি করুন","cs-CZ":"Služby: Kopírovat port","de-DE":"Dienste: Port kopieren","en-US":"Services: Copy port","es":"Servicios: Copiar puerto","fr-FR":"Services: Copier le port","hu-HU":"Szolgáltatások: Port másolása","it-IT":"Servizi: Copia porta","ja-JP":"サービス: ポートをコピー","kk-KZ":"Қызметтер: Портты көшіру","nb-NO":"Tjenester: Kopier port","pl-PL":"Usługi: Kopiuj port","pt-BR":"Serviços: Copiar porta","ru-RU":"Службы: Копировать порт","tr-TR":"Hizmetler: Bağlantı noktasını kopyala","uk-UA":"Служби: Копіювати порт","vi-VN":"Dịch vụ: Sao chép cổng","zh-CN":"服务: 复制端口","zh-TW":"服務: 複製連接埠"}},{"gesture":"Ctrl + Shift + H","category":"Views","labels":{"bn":"স্ক্যান ইতিহাস: ইতিহাসের দৃশ্য বদলান","cs-CZ":"Historie skenování: Přepnout zobrazení historie","de-DE":"Scanverlauf: Verlaufsansicht wechseln","en-US":"Scan History: Switch history view","es":"Historial de análisis: Cambiar vista del historial","fr-FR":"Historique des analyses: Changer la vue de l’historique","hu-HU":"Vizsgálati előzmények: Előzmények nézetének váltása","it-IT":"Cronologia scansioni: Cambia vista della cronologia","ja-JP":"スキャン履歴: 履歴表示を切り替え","kk-KZ":"Сканерлеу тарихы: Тарих көрінісін ауыстыру","nb-NO":"Skanneloggen: Bytt historikkvisning","pl-PL":"Historia skanowania: Przełącz widok historii","pt-BR":"Histórico de verificações: Alternar a visualização do histórico","ru-RU":"История сканирования: Переключить вид истории","tr-TR":"Tarama geçmişi: Geçmiş görünümünü değiştir","uk-UA":"Історія сканувань: Змінити вигляд історії","vi-VN":"Lịch sử quét: Chuyển chế độ xem lịch sử","zh-CN":"扫描历史: 切换历史记录视图","zh-TW":"掃描歷史: 切換歷史記錄檢視"}},{"gesture":"Ctrl + Shift + Y","category":"Device","labels":{"bn":"স্ক্যান ইতিহাস: সংরক্ষিত ডিভাইসের বিবরণ কপি করুন","cs-CZ":"Historie skenování: Kopírovat uložené údaje zařízení","de-DE":"Scanverlauf: Gespeicherte Gerätedetails kopieren","en-US":"Scan History: Copy saved device details","es":"Historial de análisis: Copiar detalles del dispositivo guardado","fr-FR":"Historique des analyses: Copier les détails du périphérique enregistré","hu-HU":"Vizsgálati előzmények: Mentett eszközadatok másolása","it-IT":"Cronologia scansioni: Copia i dettagli del dispositivo salvato","ja-JP":"スキャン履歴: 保存されたデバイス情報をコピー","kk-KZ":"Сканерлеу тарихы: Сақталған құрылғы мәліметтерін көшіру","nb-NO":"Skanneloggen: Kopier lagrede enhetsdetaljer","pl-PL":"Historia skanowania: Kopiuj zapisane dane urządzenia","pt-BR":"Histórico de verificações: Copiar detalhes do dispositivo salvo","ru-RU":"История сканирования: Копировать сохранённые сведения об устройстве","tr-TR":"Tarama geçmişi: Kayıtlı cihaz ayrıntılarını kopyala","uk-UA":"Історія сканувань: Копіювати збережені відомості про пристрій","vi-VN":"Lịch sử quét: Sao chép chi tiết thiết bị đã lưu","zh-CN":"扫描历史: 复制已保存的设备详情","zh-TW":"掃描歷史: 複製已儲存的裝置詳細資料"}},{"gesture":"Enter","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল: প্রোফাইল চালান","cs-CZ":"Profily skenování: Spustit profil","de-DE":"Scanprofile: Profil ausführen","en-US":"Scan profiles: Run profile","es":"Perfiles de análisis: Ejecutar perfil","fr-FR":"Profils d’analyse: Exécuter le profil","hu-HU":"Vizsgálati profilok: Profil futtatása","it-IT":"Profili di scansione: Esegui profilo","ja-JP":"スキャンプロファイル: プロファイルを実行","kk-KZ":"Сканерлеу профильдері: Профильді іске қосу","nb-NO":"Skanneprofiler: Kjør profil","pl-PL":"Profile skanowania: Uruchom profil","pt-BR":"Perfis de verificação: Executar perfil","ru-RU":"Профили сканирования: Запустить профиль","tr-TR":"Tarama profilleri: Profili çalıştır","uk-UA":"Профілі сканування: Запустити профіль","vi-VN":"Hồ sơ quét: Chạy hồ sơ","zh-CN":"扫描配置: 运行配置","zh-TW":"掃描設定檔: 執行設定檔"}},{"gesture":"Ctrl + L","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল: লক্ষ্য লোড করুন","cs-CZ":"Profily skenování: Načíst cíl","de-DE":"Scanprofile: Ziel laden","en-US":"Scan profiles: Load target","es":"Perfiles de análisis: Cargar destino","fr-FR":"Profils d’analyse: Charger la cible","hu-HU":"Vizsgálati profilok: Cél betöltése","it-IT":"Profili di scansione: Carica destinazione","ja-JP":"スキャンプロファイル: 対象を読み込む","kk-KZ":"Сканерлеу профильдері: Нысанды жүктеу","nb-NO":"Skanneprofiler: Last inn mål","pl-PL":"Profile skanowania: Wczytaj cel","pt-BR":"Perfis de verificação: Carregar destino","ru-RU":"Профили сканирования: Загрузить цель","tr-TR":"Tarama profilleri: Hedefi yükle","uk-UA":"Профілі сканування: Завантажити ціль","vi-VN":"Hồ sơ quét: Tải mục tiêu","zh-CN":"扫描配置: 加载目标","zh-TW":"掃描設定檔: 載入目標"}},{"gesture":"Delete","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল: প্রোফাইল মুছুন","cs-CZ":"Profily skenování: Odstranit profil","de-DE":"Scanprofile: Profil löschen","en-US":"Scan profiles: Delete profile","es":"Perfiles de análisis: Eliminar perfil","fr-FR":"Profils d’analyse: Supprimer le profil","hu-HU":"Vizsgálati profilok: Profil törlése","it-IT":"Profili di scansione: Elimina profilo","ja-JP":"スキャンプロファイル: プロファイルを削除","kk-KZ":"Сканерлеу профильдері: Профильді жою","nb-NO":"Skanneprofiler: Slett profil","pl-PL":"Profile skanowania: Usuń profil","pt-BR":"Perfis de verificação: Excluir perfil","ru-RU":"Профили сканирования: Удалить профиль","tr-TR":"Tarama profilleri: Profili sil","uk-UA":"Профілі сканування: Видалити профіль","vi-VN":"Hồ sơ quét: Xóa hồ sơ","zh-CN":"扫描配置: 删除配置","zh-TW":"掃描設定檔: 刪除設定檔"}},{"gesture":"Ctrl + Alt + D","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল: পরে সব গভীর স্ক্যান করুন","cs-CZ":"Profily skenování: Poté hloubkově skenovat vše","de-DE":"Scanprofile: Danach Tiefenscan für alle","en-US":"Scan profiles: Deep Scan All afterward","es":"Perfiles de análisis: Análisis profundo después","fr-FR":"Profils d’analyse: Analyse approfondie ensuite","hu-HU":"Vizsgálati profilok: Utána teljes mélyvizsgálat","it-IT":"Profili di scansione: Scansione profonda dopo","ja-JP":"スキャンプロファイル: 終了後にすべてを詳細スキャン","kk-KZ":"Сканерлеу профильдері: Содан кейін толық терең сканерлеу","nb-NO":"Skanneprofiler: Dypskann alle etterpå","pl-PL":"Profile skanowania: Potem głęboki skan wszystkiego","pt-BR":"Perfis de verificação: Verificação Profunda de Todos depois","ru-RU":"Профили сканирования: Затем глубокое сканирование всех","tr-TR":"Tarama profilleri: Ardından tümünü derin tara","uk-UA":"Профілі сканування: Потім глибоке сканування всіх","vi-VN":"Hồ sơ quét: Sau đó quét sâu tất cả","zh-CN":"扫描配置: 随后深度扫描全部","zh-TW":"掃描設定檔: 之後深度掃描全部"}},{"gesture":"Ctrl + Alt + S","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল: বর্তমান প্রোফাইল সংরক্ষণ করুন","cs-CZ":"Profily skenování: Uložit aktuální profil","de-DE":"Scanprofile: Aktuelles Profil speichern","en-US":"Scan profiles: Save current profile","es":"Perfiles de análisis: Guardar perfil actual","fr-FR":"Profils d’analyse: Enregistrer le profil actuel","hu-HU":"Vizsgálati profilok: Jelenlegi profil mentése","it-IT":"Profili di scansione: Salva profilo corrente","ja-JP":"スキャンプロファイル: 現在のプロファイルを保存","kk-KZ":"Сканерлеу профильдері: Ағымдағы профильді сақтау","nb-NO":"Skanneprofiler: Lagre gjeldende profil","pl-PL":"Profile skanowania: Zapisz bieżący profil","pt-BR":"Perfis de verificação: Salvar perfil atual","ru-RU":"Профили сканирования: Сохранить текущий профиль","tr-TR":"Tarama profilleri: Geçerli profili kaydet","uk-UA":"Профілі сканування: Зберегти поточний профіль","vi-VN":"Hồ sơ quét: Lưu hồ sơ hiện tại","zh-CN":"扫描配置: 保存当前配置","zh-TW":"掃描設定檔: 儲存目前設定檔"}},{"gesture":"Ctrl + C","category":"Device","labels":{"bn":"সংযোগ পর্যবেক্ষণ: ঠিকানা কপি করুন","cs-CZ":"Sledování připojení: Kopírovat adresu","de-DE":"Verbindungsüberwachung: Adresse kopieren","en-US":"Keep Alive: Copy address","es":"Supervisión de conexión: Copiar dirección","fr-FR":"Surveillance de connexion: Copier l'adresse","hu-HU":"Kapcsolatfigyelés: Cím másolása","it-IT":"Monitoraggio connessione: Copia indirizzo","ja-JP":"接続監視: アドレスをコピー","kk-KZ":"Қосылымды бақылау: Мекенжайды көшіру","nb-NO":"Keep Alive: Kopier adresse","pl-PL":"Monitorowanie połączenia: Kopiuj adres","pt-BR":"Keep Alive: Copiar endereço","ru-RU":"Наблюдение за соединением: Копировать адрес","tr-TR":"Bağlantı izleme: Adresi kopyala","uk-UA":"Keep Alive: Копіювати адресу","vi-VN":"Keep Alive: Sao chép địa chỉ","zh-CN":"连接监控: 复制地址","zh-TW":"連線監控: 複製位址"}},{"gesture":"F3","category":"Device","labels":{"bn":"সংযোগ পর্যবেক্ষণ: আবার পরীক্ষা করুন","cs-CZ":"Sledování připojení: Zkontrolovat znovu","de-DE":"Verbindungsüberwachung: Erneut prüfen","en-US":"Keep Alive: Check again","es":"Supervisión de conexión: Comprobar de nuevo","fr-FR":"Surveillance de connexion: Vérifier à nouveau","hu-HU":"Kapcsolatfigyelés: Újraellenőrzés","it-IT":"Monitoraggio connessione: Controlla di nuovo","ja-JP":"接続監視: 再確認","kk-KZ":"Қосылымды бақылау: Қайта тексеру","nb-NO":"Keep Alive: Sjekk på nytt","pl-PL":"Monitorowanie połączenia: Sprawdź ponownie","pt-BR":"Keep Alive: Verificar novamente","ru-RU":"Наблюдение за соединением: Проверить снова","tr-TR":"Bağlantı izleme: Yeniden denetle","uk-UA":"Keep Alive: Перевірити знову","vi-VN":"Keep Alive: Kiểm tra lại","zh-CN":"连接监控: 重新检查","zh-TW":"連線監控: 重新檢查"}},{"gesture":"Ctrl + R","category":"Device","labels":{"bn":"সংযোগ পর্যবেক্ষণ: পরিসংখ্যান রিসেট করুন","cs-CZ":"Sledování připojení: Vynulovat statistiky","de-DE":"Verbindungsüberwachung: Statistik zurücksetzen","en-US":"Keep Alive: Reset statistics","es":"Supervisión de conexión: Restablecer estadísticas","fr-FR":"Surveillance de connexion: Réinitialiser les statistiques","hu-HU":"Kapcsolatfigyelés: Statisztika nullázása","it-IT":"Monitoraggio connessione: Azzera statistiche","ja-JP":"接続監視: 統計をリセット","kk-KZ":"Қосылымды бақылау: Статистиканы қалпына келтіру","nb-NO":"Keep Alive: Tilbakestill statistikk","pl-PL":"Monitorowanie połączenia: Zeruj statystyki","pt-BR":"Keep Alive: Redefinir estatísticas","ru-RU":"Наблюдение за соединением: Сбросить статистику","tr-TR":"Bağlantı izleme: İstatistikleri sıfırla","uk-UA":"Keep Alive: Скинути статистику","vi-VN":"Keep Alive: Đặt lại thống kê","zh-CN":"连接监控: 重置统计","zh-TW":"連線監控: 重設統計"}},{"gesture":"Delete","category":"Device","labels":{"bn":"সংযোগ পর্যবেক্ষণ: দেখা বন্ধ করুন","cs-CZ":"Sledování připojení: Přestat sledovat","de-DE":"Verbindungsüberwachung: Nicht mehr überwachen","en-US":"Keep Alive: Stop watching this target","es":"Supervisión de conexión: Dejar de supervisar este destino","fr-FR":"Surveillance de connexion: Ne plus surveiller cette cible","hu-HU":"Kapcsolatfigyelés: Cél figyelésének leállítása","it-IT":"Monitoraggio connessione: Smetti di monitorare questa destinazione","ja-JP":"接続監視: この対象の監視を停止","kk-KZ":"Қосылымды бақылау: Бұл нысананы бақылауды тоқтату","nb-NO":"Keep Alive: Slutt å overvåke dette målet","pl-PL":"Monitorowanie połączenia: Przestań monitorować ten cel","pt-BR":"Keep Alive: Parar de monitorar este destino","ru-RU":"Наблюдение за соединением: Прекратить наблюдение за целью","tr-TR":"Bağlantı izleme: Bu hedefi izlemeyi durdur","uk-UA":"Keep Alive: Припинити відстеження цієї цілі","vi-VN":"Keep Alive: Dừng theo dõi mục tiêu này","zh-CN":"连接监控: 停止监视此目标","zh-TW":"連線監控: 停止監看此目標"}},{"gesture":"Ctrl + Shift + C","category":"App","labels":{"bn":"টার্মিনাল: কপি","cs-CZ":"Terminál: Kopírovat","de-DE":"Terminal: Kopieren","en-US":"Terminal: Copy","es":"Terminal: Copiar","fr-FR":"Terminal: Copier","hu-HU":"Terminál: Másolás","it-IT":"Terminale: Copia","ja-JP":"ターミナル: コピー","kk-KZ":"Терминал: Көшіру","nb-NO":"Terminal: Kopier","pl-PL":"Terminal: Kopiuj","pt-BR":"Terminal: Copiar","ru-RU":"Терминал: Копировать","tr-TR":"Terminal: Kopyala","uk-UA":"Термінал: Копіювати","vi-VN":"Terminal: Sao chép","zh-CN":"终端: 复制","zh-TW":"終端機: 複製"}},{"gesture":"Ctrl + Shift + V","category":"App","labels":{"bn":"টার্মিনাল: পেস্ট","cs-CZ":"Terminál: Vložit","de-DE":"Terminal: Einfügen","en-US":"Terminal: Paste","es":"Terminal: Pegar","fr-FR":"Terminal: Coller","hu-HU":"Terminál: Beillesztés","it-IT":"Terminale: Incolla","ja-JP":"ターミナル: 貼り付け","kk-KZ":"Терминал: Қою","nb-NO":"Terminal: Lim inn","pl-PL":"Terminal: Wklej","pt-BR":"Terminal: Colar","ru-RU":"Терминал: Вставить","tr-TR":"Terminal: Yapıştır","uk-UA":"Термінал: Вставити","vi-VN":"Terminal: Dán","zh-CN":"终端: 粘贴","zh-TW":"終端機: 貼上"}},{"gesture":"Ctrl + Shift + A","category":"App","labels":{"bn":"টার্মিনাল: সব নির্বাচন","cs-CZ":"Terminál: Vybrat vše","de-DE":"Terminal: Alles auswählen","en-US":"Terminal: Select all","es":"Terminal: Seleccionar todo","fr-FR":"Terminal: Tout sélectionner","hu-HU":"Terminál: Összes kijelölése","it-IT":"Terminale: Seleziona tutto","ja-JP":"ターミナル: すべて選択","kk-KZ":"Терминал: Барлығын таңдау","nb-NO":"Terminal: Merk alt","pl-PL":"Terminal: Zaznacz wszystko","pt-BR":"Terminal: Selecionar tudo","ru-RU":"Терминал: Выделить все","tr-TR":"Terminal: Tümünü seç","uk-UA":"Термінал: Виділити все","vi-VN":"Terminal: Chọn tất cả","zh-CN":"终端: 全选","zh-TW":"終端機: 全選"}},{"gesture":"Ctrl + Shift + Y","category":"App","labels":{"bn":"টার্মিনাল: সব কপি","cs-CZ":"Terminál: Kopírovat vše","de-DE":"Terminal: Alles kopieren","en-US":"Terminal: Copy All","es":"Terminal: Copiar todo","fr-FR":"Terminal: Tout copier","hu-HU":"Terminál: Összes másolása","it-IT":"Terminale: Copia tutto","ja-JP":"ターミナル: すべてコピー","kk-KZ":"Терминал: Барлығын көшіру","nb-NO":"Terminal: Kopier alt","pl-PL":"Terminal: Kopiuj wszystko","pt-BR":"Terminal: Copiar tudo","ru-RU":"Терминал: Копировать все","tr-TR":"Terminal: Tümünü kopyala","uk-UA":"Термінал: Копіювати все","vi-VN":"Terminal: Sao chép tất cả","zh-CN":"终端: 复制全部","zh-TW":"終端機: 複製全部"}},{"gesture":"Ctrl + Shift + L","category":"App","labels":{"bn":"টার্মিনাল: পরিষ্কার","cs-CZ":"Terminál: Vymazat","de-DE":"Terminal: Leeren","en-US":"Terminal: Clear","es":"Terminal: Limpiar","fr-FR":"Terminal: Effacer","hu-HU":"Terminál: Törlés","it-IT":"Terminale: Pulisci","ja-JP":"ターミナル: クリア","kk-KZ":"Терминал: Тазарту","nb-NO":"Terminal: Tøm","pl-PL":"Terminal: Wyczyść","pt-BR":"Terminal: Limpar","ru-RU":"Терминал: Очистить","tr-TR":"Terminal: Temizle","uk-UA":"Термінал: Очистити","vi-VN":"Terminal: Xóa","zh-CN":"终端: 清屏","zh-TW":"終端機: 清除"}},{"gesture":"Ctrl + G","category":"Topology","labels":{"bn":"টপোলজি বিন্যাস পরিবর্তন করুন","cs-CZ":"Procházet uspořádání topologie","de-DE":"Topologieanordnung wechseln","en-US":"Cycle topology arrangement","es":"Cambiar disposición de topología","fr-FR":"Changer la disposition de la topologie","hu-HU":"Topológiaelrendezés váltása","it-IT":"Cambia disposizione topologia","ja-JP":"トポロジの配置を切り替える","kk-KZ":"Топология орналасуын ауыстыру","nb-NO":"Bla gjennom topologiordninger","pl-PL":"Przełącz układ topologii","pt-BR":"Alternar a organização da topologia","ru-RU":"Переключить расположение топологии","tr-TR":"Topoloji düzenini değiştir","uk-UA":"Перемкнути впорядкування топології","vi-VN":"Chuyển kiểu sắp xếp sơ đồ","zh-CN":"切换拓扑排列方式","zh-TW":"切換拓撲排列方式"}},{"gesture":"Ctrl + 1","category":"Topology","labels":{"bn":"টপোলজি সাজান ভূমিকা","cs-CZ":"Uspořádat topologii podle Role","de-DE":"Topologie anordnen nach Rolle","en-US":"Arrange topology by Role","es":"Organizar topología por Función","fr-FR":"Organiser la topologie par Rôle","hu-HU":"Topológia rendezése Szerep","it-IT":"Disponi topologia per Ruolo","ja-JP":"トポロジの並べ替え 役割","kk-KZ":"Топологияны реттеу Рөл","nb-NO":"Ordne topologien etter Rolle","pl-PL":"Rozmieść topologię według Rola","pt-BR":"Organizar a topologia por Função","ru-RU":"Упорядочить топологию по Роль","tr-TR":"Topolojiyi şuna göre düzenle Rol","uk-UA":"Упорядкувати топологію за Роль","vi-VN":"Sắp xếp sơ đồ theo Vai trò","zh-CN":"拓扑排列方式 角色","zh-TW":"拓撲排列方式 角色"}},{"gesture":"Ctrl + 2","category":"Topology","labels":{"bn":"টপোলজি সাজান ধরন","cs-CZ":"Uspořádat topologii podle Typ","de-DE":"Topologie anordnen nach Typ","en-US":"Arrange topology by Type","es":"Organizar topología por Tipo","fr-FR":"Organiser la topologie par Type","hu-HU":"Topológia rendezése Írja be","it-IT":"Disponi topologia per Tipo","ja-JP":"トポロジの並べ替え 種類","kk-KZ":"Топологияны реттеу Түрі","nb-NO":"Ordne topologien etter Type","pl-PL":"Rozmieść topologię według Typ","pt-BR":"Organizar a topologia por Tipo","ru-RU":"Упорядочить топологию по Тип","tr-TR":"Topolojiyi şuna göre düzenle Tür","uk-UA":"Упорядкувати топологію за Тип","vi-VN":"Sắp xếp sơ đồ theo Loại","zh-CN":"拓扑排列方式 类型","zh-TW":"拓撲排列方式 類型"}},{"gesture":"Ctrl + 3","category":"Topology","labels":{"bn":"টপোলজি সাজান IP ঠিকানা","cs-CZ":"Uspořádat topologii podle IP adresa","de-DE":"Topologie anordnen nach IP-Adresse","en-US":"Arrange topology by IP Address","es":"Organizar topología por Dirección IP","fr-FR":"Organiser la topologie par Adresse IP","hu-HU":"Topológia rendezése IP-cím","it-IT":"Disponi topologia per Indirizzo IP","ja-JP":"トポロジの並べ替え IP アドレス","kk-KZ":"Топологияны реттеу IP мекенжайы","nb-NO":"Ordne topologien etter IP-adresse","pl-PL":"Rozmieść topologię według Adres IP","pt-BR":"Organizar a topologia por Endereço IP","ru-RU":"Упорядочить топологию по IP-адрес","tr-TR":"Topolojiyi şuna göre düzenle IP Adresi","uk-UA":"Упорядкувати топологію за IP-адреса","vi-VN":"Sắp xếp sơ đồ theo Địa chỉ IP","zh-CN":"拓扑排列方式 IP 地址","zh-TW":"拓撲排列方式 IP 位址"}},{"gesture":"Ctrl + 4","category":"Topology","labels":{"bn":"টপোলজি সাজান প্রস্তুতকারক","cs-CZ":"Uspořádat topologii podle Výrobce","de-DE":"Topologie anordnen nach Hersteller","en-US":"Arrange topology by Vendor","es":"Organizar topología por Fabricante","fr-FR":"Organiser la topologie par Fabricant","hu-HU":"Topológia rendezése Eladó","it-IT":"Disponi topologia per Produttore","ja-JP":"トポロジの並べ替え ベンダー","kk-KZ":"Топологияны реттеу Өндіруші","nb-NO":"Ordne topologien etter Produsent","pl-PL":"Rozmieść topologię według Producent","pt-BR":"Organizar a topologia por Fabricante","ru-RU":"Упорядочить топологию по Производитель","tr-TR":"Topolojiyi şuna göre düzenle Üretici","uk-UA":"Упорядкувати топологію за Виробник","vi-VN":"Sắp xếp sơ đồ theo Nhà sản xuất","zh-CN":"拓扑排列方式 厂商","zh-TW":"拓撲排列方式 廠商"}},{"gesture":"Ctrl + Shift + 1","category":"Toolbar","labels":{"bn":"ছোট আইকন","cs-CZ":"Malé ikony","de-DE":"Kleine Symbole","en-US":"Small icons","es":"Iconos pequeños","fr-FR":"Petites icônes","hu-HU":"Kis ikonok","it-IT":"Icone piccole","ja-JP":"小さいアイコン","kk-KZ":"Кішкентай белгішелер","nb-NO":"Små ikoner","pl-PL":"Małe ikony","pt-BR":"Ícones pequenos","ru-RU":"Маленькие иконки","tr-TR":"Küçük simgeler","uk-UA":"Малі значки","vi-VN":"Biểu tượng nhỏ","zh-CN":"小图标","zh-TW":"小圖示"}},{"gesture":"Ctrl + Shift + 2","category":"Toolbar","labels":{"bn":"বড় আইকন","cs-CZ":"Velké ikony","de-DE":"Große Symbole","en-US":"Large icons","es":"Iconos grandes","fr-FR":"Grandes icônes","hu-HU":"Nagy ikonok","it-IT":"Icone grandi","ja-JP":"大きいアイコン","kk-KZ":"Үлкен белгішелер","nb-NO":"Store ikoner","pl-PL":"Duże ikony","pt-BR":"Ícones grandes","ru-RU":"Большие иконки","tr-TR":"Büyük simgeler","uk-UA":"Великі значки","vi-VN":"Biểu tượng lớn","zh-CN":"大图标","zh-TW":"大圖示"}},{"gesture":"Ctrl + Shift + 3","category":"Toolbar","labels":{"bn":"লেখা নেই","cs-CZ":"Bez textu","de-DE":"Kein Text","en-US":"No text","es":"Sin texto","fr-FR":"Sans texte","hu-HU":"Nincs szöveg","it-IT":"Nessun testo","ja-JP":"文字なし","kk-KZ":"Мәтін жоқ","nb-NO":"Ingen tekst","pl-PL":"Brak tekstu","pt-BR":"Sem texto","ru-RU":"Нет текста","tr-TR":"Metin yok","uk-UA":"Без тексту","vi-VN":"Không có văn bản","zh-CN":"无文字","zh-TW":"無文字"}},{"gesture":"Ctrl + Shift + 4","category":"Toolbar","labels":{"bn":"আইকনের পাশে লেখা","cs-CZ":"Text vedle ikon","de-DE":"Text neben Symbol","en-US":"Text beside icons","es":"Texto junto a iconos","fr-FR":"Texte à côté des icônes","hu-HU":"Szöveg az ikonok mellett","it-IT":"Testo accanto alle icone","ja-JP":"アイコンの横にテキスト","kk-KZ":"Мәтін белгішенің қасында","nb-NO":"Tekst ved siden av ikoner","pl-PL":"Tekst obok ikon","pt-BR":"Texto ao lado dos ícones","ru-RU":"Текст рядом с иконками","tr-TR":"Simge yanında metin","uk-UA":"Текст поруч зі значками","vi-VN":"Văn bản cạnh biểu tượng","zh-CN":"图标加文本","zh-TW":"圖示加文字"}},{"gesture":"Ctrl + Shift + 5","category":"Toolbar","labels":{"bn":"আইকনের নিচে লেখা","cs-CZ":"Text pod ikonami","de-DE":"Text unter Symbol","en-US":"Text under icons","es":"Texto bajo los iconos","fr-FR":"Texte sous les icônes","hu-HU":"Szöveg az ikonok alatt","it-IT":"Testo sotto le icone","ja-JP":"アイコンの下にテキスト","kk-KZ":"Мәтін белгішенің астында","nb-NO":"Tekst under ikoner","pl-PL":"Tekst pod ikonami","pt-BR":"Texto abaixo dos ícones","ru-RU":"Текст под иконками","tr-TR":"Simge altında metin","uk-UA":"Текст під значками","vi-VN":"Văn bản dưới biểu tượng","zh-CN":"图标下方文本","zh-TW":"圖示下方文字"}},{"gesture":"Ctrl + Shift + 6","category":"Toolbar","labels":{"bn":"শুধু লেখা","cs-CZ":"Pouze text","de-DE":"Nur Text","en-US":"Text only","es":"Solo texto","fr-FR":"Texte seul","hu-HU":"Csak szöveg","it-IT":"Solo testo","ja-JP":"テキストのみ","kk-KZ":"Тек мәтін","nb-NO":"Bare tekst","pl-PL":"Tylko tekst","pt-BR":"Somente texto","ru-RU":"Только текст","tr-TR":"Yalnızca metin","uk-UA":"Лише текст","vi-VN":"Chỉ văn bản","zh-CN":"仅文本","zh-TW":"僅文字"}},{"gesture":"Ctrl + Shift + +","category":"App","labels":{"bn":"অ্যাপ বড় করুন","cs-CZ":"Zvětšit aplikaci","de-DE":"App vergrößern","en-US":"Make the app bigger","es":"Agrandar la aplicación","fr-FR":"Agrandir l'application","hu-HU":"Tedd nagyobbá az alkalmazást","it-IT":"Ingrandisci l'app","ja-JP":"アプリを大きくする","kk-KZ":"Қолданбаны үлкейту","nb-NO":"Gjør appen større","pl-PL":"Powiększ aplikację","pt-BR":"Aumentar o app","ru-RU":"Увеличить приложение","tr-TR":"Uygulamayı büyüt","uk-UA":"Збільшити застосунок","vi-VN":"Phóng to ứng dụng","zh-CN":"放大应用","zh-TW":"放大應用程式"}},{"gesture":"Ctrl + Shift + -","category":"App","labels":{"bn":"অ্যাপ ছোট করুন","cs-CZ":"Zmenšit aplikaci","de-DE":"App verkleinern","en-US":"Make the app smaller","es":"Reducir la aplicación","fr-FR":"Réduire l'application","hu-HU":"Csökkentse az alkalmazást","it-IT":"Rimpicciolisci l'app","ja-JP":"アプリを小さくする","kk-KZ":"Қолданбаны кішірейту","nb-NO":"Gjør appen mindre","pl-PL":"Pomniejsz aplikację","pt-BR":"Diminuir o app","ru-RU":"Уменьшить приложение","tr-TR":"Uygulamayı küçült","uk-UA":"Зменшити застосунок","vi-VN":"Thu nhỏ ứng dụng","zh-CN":"缩小应用","zh-TW":"縮小應用程式"}},{"gesture":"Ctrl + Shift + 0","category":"App","labels":{"bn":"অ্যাপের আকার রিসেট করুন","cs-CZ":"Obnovit výchozí velikost aplikace","de-DE":"App-Größe zurücksetzen","en-US":"Reset the app size","es":"Restablecer el tamaño de la aplicación","fr-FR":"Réinitialiser la taille de l'application","hu-HU":"Állítsa vissza az alkalmazás méretét","it-IT":"Ripristina la dimensione dell'app","ja-JP":"アプリのサイズをリセット","kk-KZ":"Қолданба өлшемін қалпына келтіру","nb-NO":"Tilbakestill appstørrelsen","pl-PL":"Przywróć domyślny rozmiar","pt-BR":"Redefinir o tamanho do app","ru-RU":"Сбросить размер приложения","tr-TR":"Uygulama boyutunu sıfırla","uk-UA":"Скинути розмір застосунку","vi-VN":"Đặt lại kích thước ứng dụng","zh-CN":"重置应用大小","zh-TW":"重設應用程式大小"}},{"gesture":"F1","category":"App","labels":{"bn":"কীবোর্ড শর্টকাট দেখান বা লুকান","cs-CZ":"Zobrazit nebo skrýt klávesové zkratky","de-DE":"Tastenkürzel ein- oder ausblenden","en-US":"Show or hide keyboard shortcuts","es":"Mostrar u ocultar los atajos de teclado","fr-FR":"Afficher ou masquer les raccourcis clavier","hu-HU":"Billentyűparancsok megjelenítése vagy elrejtése","it-IT":"Mostra o nascondi le scorciatoie da tastiera","ja-JP":"キーボードショートカットを表示または非表示","kk-KZ":"Перне тіркесімдерін көрсету немесе жасыру","nb-NO":"Vis eller skjul hurtigtaster","pl-PL":"Pokaż lub ukryj skróty klawiszowe","pt-BR":"Mostrar ou ocultar os atalhos de teclado","ru-RU":"Показать или скрыть сочетания клавиш","tr-TR":"Klavye kısayollarını göster veya gizle","uk-UA":"Показати або сховати сполучення клавіш","vi-VN":"Hiện hoặc ẩn phím tắt","zh-CN":"显示或隐藏键盘快捷键","zh-TW":"顯示或隱藏鍵盤快捷鍵"}},{"gesture":"F12","category":"App","labels":{"bn":"সম্পর্কে উইন্ডোটি খুলুন","cs-CZ":"Otevřít okno O aplikaci","de-DE":"Das Info-Fenster öffnen","en-US":"Open the About window","es":"Abrir la ventana Acerca de","fr-FR":"Ouvrir la fenêtre À propos","hu-HU":"Nyissa meg a névjegy ablakát","it-IT":"Apri la finestra Informazioni","ja-JP":"バージョン情報ウィンドウを開く","kk-KZ":"Қолданба туралы терезесін ашу","nb-NO":"Åpne Om-vinduet","pl-PL":"Otwórz okno O programie","pt-BR":"Abrir a janela Sobre","ru-RU":"Открыть окно «О программе»","tr-TR":"Hakkında penceresini aç","uk-UA":"Відкрити вікно «Про програму»","vi-VN":"Mở cửa sổ Giới thiệu","zh-CN":"打开关于窗口","zh-TW":"開啟關於視窗"}}]; +window.KS_SHORTCUTS = [{"gesture":"F6","category":"Views","labels":{"bn":"ডিভাইস","cs-CZ":"Zařízení","de-DE":"Geräte","en-US":"Devices","es":"Dispositivos","fr-FR":"Appareils","hu-HU":"Eszközök","it-IT":"Dispositivi","ja-JP":"デバイス","kk-KZ":"Құрылғылар","nb-NO":"Enheter","pl-PL":"Urządzenia","pt-BR":"Dispositivos","ru-RU":"Устройства","tr-TR":"Cihazlar","uk-UA":"Пристрої","vi-VN":"Thiết bị","zh-CN":"设备","zh-TW":"裝置"}},{"gesture":"F7","category":"Views","labels":{"bn":"সেবাসমূহ","cs-CZ":"Služby","de-DE":"Dienste","en-US":"Services","es":"Servicios","fr-FR":"Services","hu-HU":"Szolgáltatások","it-IT":"Servizi","ja-JP":"サービス","kk-KZ":"Қызметтер","nb-NO":"Tjenester","pl-PL":"Usługi","pt-BR":"Serviços","ru-RU":"Службы","tr-TR":"Hizmetler","uk-UA":"Служби","vi-VN":"Dịch vụ","zh-CN":"服务","zh-TW":"服務"}},{"gesture":"F8","category":"Views","labels":{"bn":"নেটওয়ার্ক টপোলজি দেখান বা লুকান","cs-CZ":"Přepnout topologii sítě","de-DE":"Netzwerktopologie umschalten","en-US":"Toggle network topology","es":"Alternar topología de red","fr-FR":"Afficher ou masquer la topologie du réseau","hu-HU":"Hálózati topológia megjelenítése","it-IT":"Mostra o nascondi la topologia di rete","ja-JP":"ネットワーク トポロジの表示を切り替えます","kk-KZ":"Желі топологиясын көрсету немесе жасыру","nb-NO":"Slå nettverkstopologi av eller på","pl-PL":"Przełącz topologię sieci","pt-BR":"Alternar topologia da rede","ru-RU":"Показать или скрыть топологию сети","tr-TR":"Ağ topolojisini aç veya kapat","uk-UA":"Показати або сховати топологію мережі","vi-VN":"Bật hoặc tắt sơ đồ mạng","zh-CN":"切换网络拓扑","zh-TW":"切換網路拓撲"}},{"gesture":"F9","category":"Views","labels":{"bn":"সংযোগ পর্যবেক্ষণ","cs-CZ":"Sledování připojení","de-DE":"Verbindungsüberwachung","en-US":"Keep Alive","es":"Supervisión de conexión","fr-FR":"Surveillance de connexion","hu-HU":"Kapcsolatfigyelés","it-IT":"Monitoraggio connessione","ja-JP":"接続監視","kk-KZ":"Қосылымды бақылау","nb-NO":"Keep Alive","pl-PL":"Monitorowanie połączenia","pt-BR":"Keep Alive","ru-RU":"Наблюдение за соединением","tr-TR":"Bağlantı izleme","uk-UA":"Keep Alive","vi-VN":"Keep Alive","zh-CN":"连接监控","zh-TW":"連線監控"}},{"gesture":"F10","category":"Views","labels":{"bn":"টার্মিনাল","cs-CZ":"Terminál","de-DE":"Terminal","en-US":"Terminal","es":"Terminal","fr-FR":"Terminal","hu-HU":"Terminál","it-IT":"Terminale","ja-JP":"ターミナル","kk-KZ":"Терминал","nb-NO":"Terminal","pl-PL":"Terminal","pt-BR":"Terminal","ru-RU":"Терминал","tr-TR":"Terminal","uk-UA":"Термінал","vi-VN":"Terminal","zh-CN":"终端","zh-TW":"終端機"}},{"gesture":"Ctrl + T","category":"Views","labels":{"bn":"ডিভাইস দেখান","cs-CZ":"Zobrazit zařízení","de-DE":"Geräte anzeigen","en-US":"Show Devices","es":"Mostrar dispositivos","fr-FR":"Afficher les appareils","hu-HU":"Eszközök megjelenítése","it-IT":"Mostra dispositivi","ja-JP":"デバイスを表示","kk-KZ":"Құрылғыларды көрсету","nb-NO":"Vis Enheter","pl-PL":"Pokaż urządzenia","pt-BR":"Mostrar Dispositivos","ru-RU":"Показать устройства","tr-TR":"Cihazları göster","uk-UA":"Показати пристрої","vi-VN":"Hiện Thiết bị","zh-CN":"显示设备","zh-TW":"顯示裝置"}},{"gesture":"Ctrl + Shift + T","category":"Views","labels":{"bn":"টার্মিনাল দেখান","cs-CZ":"Zobrazit terminál","de-DE":"Terminal anzeigen","en-US":"Show Terminal","es":"Mostrar terminal","fr-FR":"Afficher le terminal","hu-HU":"Terminál megjelenítése","it-IT":"Mostra terminale","ja-JP":"ターミナルを表示","kk-KZ":"Терминалды көрсету","nb-NO":"Vis Terminal","pl-PL":"Pokaż terminal","pt-BR":"Mostrar Terminal","ru-RU":"Показать терминал","tr-TR":"Terminali göster","uk-UA":"Показати термінал","vi-VN":"Hiện Terminal","zh-CN":"显示终端","zh-TW":"顯示終端機"}},{"gesture":"Ctrl + H","category":"Views","labels":{"bn":"স্ক্যান ইতিহাস","cs-CZ":"Historie skenování","de-DE":"Scanverlauf","en-US":"Scan History","es":"Historial de análisis","fr-FR":"Historique des analyses","hu-HU":"Vizsgálati előzmények","it-IT":"Cronologia scansioni","ja-JP":"スキャン履歴","kk-KZ":"Сканерлеу тарихы","nb-NO":"Skanneloggen","pl-PL":"Historia skanowania","pt-BR":"Histórico de verificações","ru-RU":"История сканирования","tr-TR":"Tarama geçmişi","uk-UA":"Історія сканувань","vi-VN":"Lịch sử quét","zh-CN":"扫描历史","zh-TW":"掃描歷史"}},{"gesture":"Ctrl + Alt + R","category":"Views","labels":{"bn":"ইতিহাসের সেটিংস","cs-CZ":"Nastavení historie","de-DE":"Verlaufseinstellungen","en-US":"History settings","es":"Configuración del historial","fr-FR":"Paramètres de l'historique","hu-HU":"Előzmények beállításai","it-IT":"Impostazioni cronologia","ja-JP":"履歴設定","kk-KZ":"Тарих параметрлері","nb-NO":"Historikkinnstillinger","pl-PL":"Ustawienia historii","pt-BR":"Configurações do histórico","ru-RU":"Настройки истории","tr-TR":"Geçmiş ayarları","uk-UA":"Налаштування історії","vi-VN":"Cài đặt lịch sử","zh-CN":"历史设置","zh-TW":"歷史設定"}},{"gesture":"Ctrl + Shift + P","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল","cs-CZ":"Profily skenování","de-DE":"Scanprofile","en-US":"Scan profiles","es":"Perfiles de análisis","fr-FR":"Profils d’analyse","hu-HU":"Vizsgálati profilok","it-IT":"Profili di scansione","ja-JP":"スキャンプロファイル","kk-KZ":"Сканерлеу профильдері","nb-NO":"Skanneprofiler","pl-PL":"Profile skanowania","pt-BR":"Perfis de verificação","ru-RU":"Профили сканирования","tr-TR":"Tarama profilleri","uk-UA":"Профілі сканування","vi-VN":"Hồ sơ quét","zh-CN":"扫描配置","zh-TW":"掃描設定檔"}},{"gesture":"F4","category":"Views","labels":{"bn":"KillerSpeed","cs-CZ":"KillerSpeed","de-DE":"KillerSpeed","en-US":"KillerSpeed","es":"KillerSpeed","fr-FR":"KillerSpeed","hu-HU":"KillerSpeed","it-IT":"KillerSpeed","ja-JP":"KillerSpeed","kk-KZ":"KillerSpeed","nb-NO":"KillerSpeed","pl-PL":"KillerSpeed","pt-BR":"KillerSpeed","ru-RU":"KillerSpeed","tr-TR":"KillerSpeed","uk-UA":"KillerSpeed","vi-VN":"KillerSpeed","zh-CN":"KillerSpeed","zh-TW":"KillerSpeed"}},{"gesture":"F5","category":"Scan","labels":{"bn":"স্ক্যান শুরু বা বন্ধ করুন","cs-CZ":"Spustit nebo zastavit skenování","de-DE":"Scan starten oder stoppen","en-US":"Start or stop a scan","es":"Iniciar o detener un escaneo","fr-FR":"Démarrer ou arrêter une analyse","hu-HU":"Indítsa el vagy állítsa le a keresést","it-IT":"Avvia o interrompi una scansione","ja-JP":"スキャンの開始または停止","kk-KZ":"Сканерлеуді бастау немесе тоқтату","nb-NO":"Start eller stopp en skanning","pl-PL":"Rozpocznij lub zatrzymaj skanowanie","pt-BR":"Iniciar ou parar uma verificação","ru-RU":"Запустить или остановить сканирование","tr-TR":"Taramayı başlat veya durdur","uk-UA":"Почати або зупинити сканування","vi-VN":"Bắt đầu hoặc dừng quét","zh-CN":"开始或停止扫描","zh-TW":"開始或停止掃描"}},{"gesture":"Esc","category":"Scan","labels":{"bn":"স্ক্যান বাতিল করুন, বা এটি বন্ধ করুন","cs-CZ":"Zrušit skenování nebo zavřít toto okno","de-DE":"Scan abbrechen oder dies schließen","en-US":"Cancel the scan, or close this","es":"Cancelar el escaneo o cerrar esto","fr-FR":"Annuler l'analyse, ou fermer ceci","hu-HU":"Szakítsa meg a beolvasást, vagy zárja be","it-IT":"Annulla la scansione, o chiudi questa finestra","ja-JP":"スキャンの取り消し、またはこれを閉じる","kk-KZ":"Сканерлеуді болдырмау немесе осыны жабу","nb-NO":"Avbryt skanningen, eller lukk dette","pl-PL":"Anuluj skanowanie lub zamknij to okno","pt-BR":"Cancelar a verificação ou fechar isto","ru-RU":"Отменить сканирование или закрыть это окно","tr-TR":"Taramayı iptal et veya bunu kapat","uk-UA":"Скасувати сканування або закрити це вікно","vi-VN":"Hủy quét hoặc đóng cửa sổ này","zh-CN":"取消扫描,或关闭此窗口","zh-TW":"取消掃描,或關閉此視窗"}},{"gesture":"Ctrl + R","category":"Scan","labels":{"bn":"নির্বাচিত হোস্ট গভীরভাবে পুনরায় স্ক্যান করুন","cs-CZ":"Hloubkově znovu skenovat vybrané hostitele","de-DE":"Ausgewählte Hosts tief erneut scannen","en-US":"Deep rescan the selected hosts","es":"Reescaneo profundo de los hosts seleccionados","fr-FR":"Réanalyser en profondeur les hôtes sélectionnés","hu-HU":"A kiválasztott gazdagépek mélyreható újrakeresése","it-IT":"Scansione approfondita degli host selezionati","ja-JP":"選択したホストを詳細に再スキャン","kk-KZ":"Таңдалған хосттарды терең қайта сканерлеу","nb-NO":"Dypskann de valgte vertene på nytt","pl-PL":"Dokładne ponowne skanowanie wybranych hostów","pt-BR":"Refazer a verificação profunda dos hosts selecionados","ru-RU":"Глубокое пересканирование выбранных хостов","tr-TR":"Seçili ana bilgisayarları derin yeniden tara","uk-UA":"Глибоко пересканувати вибрані хости","vi-VN":"Quét sâu lại các máy chủ đã chọn","zh-CN":"深度重新扫描所选主机","zh-TW":"深度重新掃描所選主機"}},{"gesture":"Ctrl + F","category":"Scan","labels":{"bn":"সাবনেট বাক্সে যান","cs-CZ":"Přejít do pole podsítě","de-DE":"Zum Subnetz-Feld springen","en-US":"Jump to the subnet box","es":"Ir al cuadro de subred","fr-FR":"Aller au champ de sous-réseau","hu-HU":"Ugrás az alhálózati mezőre","it-IT":"Vai alla casella della sottorete","ja-JP":"サブネット入力欄へ移動","kk-KZ":"Ішкі желі өрісіне өту","nb-NO":"Gå til subnettfeltet","pl-PL":"Przejdź do pola podsieci","pt-BR":"Ir para a caixa de sub-rede","ru-RU":"Перейти к полю подсети","tr-TR":"Alt ağ kutusuna git","uk-UA":"Перейти до поля підмережі","vi-VN":"Chuyển đến ô mạng con","zh-CN":"跳转到子网输入框","zh-TW":"跳至子網路輸入框"}},{"gesture":"Ctrl + Shift + F","category":"Scan","labels":{"bn":"ডিভাইস ফিল্টার করুন...","cs-CZ":"Filtrovat zařízení...","de-DE":"Geräte filtern...","en-US":"Filter devices...","es":"Filtrar dispositivos...","fr-FR":"Filtrer les appareils...","hu-HU":"Eszközök szűrése...","it-IT":"Filtra dispositivi...","ja-JP":"デバイスを絞り込み...","kk-KZ":"Құрылғыларды сүзу...","nb-NO":"Filtrer enheter...","pl-PL":"Filtruj urządzenia...","pt-BR":"Filtrar dispositivos...","ru-RU":"Фильтр устройств...","tr-TR":"Cihazları filtrele...","uk-UA":"Фільтр пристроїв...","vi-VN":"Lọc thiết bị...","zh-CN":"筛选设备...","zh-TW":"篩選裝置..."}},{"gesture":"Ctrl + A","category":"Scan","labels":{"bn":"সব ডিভাইস নির্বাচন করুন","cs-CZ":"Vybrat všechna zařízení","de-DE":"Alle Geräte auswählen","en-US":"Select every device","es":"Seleccionar todos los dispositivos","fr-FR":"Sélectionner tous les appareils","hu-HU":"Válassza ki az összes eszközt","it-IT":"Seleziona tutti i dispositivi","ja-JP":"すべてのデバイスを選択","kk-KZ":"Барлық құрылғыны таңдау","nb-NO":"Merk alle enheter","pl-PL":"Zaznacz wszystkie urządzenia","pt-BR":"Selecionar todos os dispositivos","ru-RU":"Выбрать все устройства","tr-TR":"Tüm cihazları seç","uk-UA":"Вибрати всі пристрої","vi-VN":"Chọn tất cả thiết bị","zh-CN":"选择所有设备","zh-TW":"選取所有裝置"}},{"gesture":"Ctrl + E","category":"Scan","labels":{"bn":"CSV হিসেবে এক্সপোর্ট","cs-CZ":"Exportovat jako CSV","de-DE":"Als CSV exportieren","en-US":"Export as CSV","es":"Exportar como CSV","fr-FR":"Exporter en CSV","hu-HU":"Exportálás CSV-ként","it-IT":"Esporta come CSV","ja-JP":"CSV としてエクスポート","kk-KZ":"CSV ретінде экспорттау","nb-NO":"Eksporter som CSV","pl-PL":"Eksportuj jako CSV","pt-BR":"Exportar como CSV","ru-RU":"Экспорт в CSV","tr-TR":"CSV olarak dışa aktar","uk-UA":"Експортувати як CSV","vi-VN":"Xuất dạng CSV","zh-CN":"导出为 CSV","zh-TW":"匯出為 CSV"}},{"gesture":"Ctrl + Shift + E","category":"Scan","labels":{"bn":"HTML হিসেবে এক্সপোর্ট","cs-CZ":"Exportovat jako HTML","de-DE":"Als HTML exportieren","en-US":"Export as HTML","es":"Exportar como HTML","fr-FR":"Exporter en HTML","hu-HU":"Exportálás HTML-ként","it-IT":"Esporta come HTML","ja-JP":"HTML としてエクスポート","kk-KZ":"HTML ретінде экспорттау","nb-NO":"Eksporter som HTML","pl-PL":"Eksportuj jako HTML","pt-BR":"Exportar como HTML","ru-RU":"Экспорт в HTML","tr-TR":"HTML olarak dışa aktar","uk-UA":"Експортувати як HTML","vi-VN":"Xuất dạng HTML","zh-CN":"导出为 HTML","zh-TW":"匯出為 HTML"}},{"gesture":"Ctrl + Shift + X","category":"Scan","labels":{"bn":"TXT হিসেবে এক্সপোর্ট","cs-CZ":"Exportovat jako TXT","de-DE":"Als TXT exportieren","en-US":"Export as TXT","es":"Exportar como TXT","fr-FR":"Exporter en TXT","hu-HU":"Exportálás TXT-ként","it-IT":"Esporta come TXT","ja-JP":"TXT としてエクスポート","kk-KZ":"TXT ретінде экспорттау","nb-NO":"Eksporter som TXT","pl-PL":"Eksportuj jako TXT","pt-BR":"Exportar como TXT","ru-RU":"Экспорт в TXT","tr-TR":"TXT olarak dışa aktar","uk-UA":"Експортувати як TXT","vi-VN":"Xuất dạng TXT","zh-CN":"导出为 TXT","zh-TW":"匯出為 TXT"}},{"gesture":"Ctrl + Shift + G","category":"Scan","labels":{"bn":"কার্ড PNG হিসেবে এক্সপোর্ট","cs-CZ":"Exportovat karty jako PNG","de-DE":"Karten als PNG exportieren","en-US":"Export cards as PNG","es":"Exportar tarjetas como PNG","fr-FR":"Exporter les cartes en PNG","hu-HU":"Kártyák exportálása PNG-ként","it-IT":"Esporta le schede come PNG","ja-JP":"カードを PNG にエクスポート","kk-KZ":"Карталарды PNG ретінде экспорттау","nb-NO":"Eksporter kort som PNG","pl-PL":"Eksportuj karty jako PNG","pt-BR":"Exportar cartões como PNG","ru-RU":"Экспорт карточек в PNG","tr-TR":"Kartları PNG olarak dışa aktar","uk-UA":"Експортувати картки як PNG","vi-VN":"Xuất thẻ dạng PNG","zh-CN":"将卡片导出为 PNG","zh-TW":"將卡片匯出為 PNG"}},{"gesture":"Ctrl + Shift + J","category":"Scan","labels":{"bn":"JPG-তে এক্সপোর্ট","cs-CZ":"Exportovat do JPG","de-DE":"Als JPG exportieren","en-US":"Export to JPG","es":"Exportar a JPG","fr-FR":"Exporter en JPG","hu-HU":"Exportálás JPG-be","it-IT":"Esporta in JPG","ja-JP":"JPG にエクスポート","kk-KZ":"JPG форматына экспорттау","nb-NO":"Eksporter til JPG","pl-PL":"Eksportuj do JPG","pt-BR":"Exportar para JPG","ru-RU":"Экспорт в JPG","tr-TR":"JPG olarak dışa aktar","uk-UA":"Експортувати як JPG","vi-VN":"Xuất sang JPG","zh-CN":"导出为 JPG","zh-TW":"匯出為 JPG"}},{"gesture":"Ctrl + Alt + H","category":"Scan","labels":{"bn":"HTML-এ এক্সপোর্ট","cs-CZ":"Exportovat do HTML","de-DE":"Als HTML exportieren","en-US":"Export to HTML","es":"Exportar a HTML","fr-FR":"Exporter en HTML","hu-HU":"Exportálás HTML-be","it-IT":"Esporta in HTML","ja-JP":"HTML にエクスポート","kk-KZ":"HTML форматына экспорттау","nb-NO":"Eksporter til HTML","pl-PL":"Eksportuj do HTML","pt-BR":"Exportar para HTML","ru-RU":"Экспорт в HTML","tr-TR":"HTML olarak dışa aktar","uk-UA":"Експортувати як HTML","vi-VN":"Xuất sang HTML","zh-CN":"导出为 HTML","zh-TW":"匯出為 HTML"}},{"gesture":"Enter","category":"Device","labels":{"bn":"নির্বাচিত ডিভাইস ব্রাউজারে খুলুন","cs-CZ":"Otevřít vybrané zařízení v prohlížeči","de-DE":"Ausgewähltes Gerät im Browser öffnen","en-US":"Open the selected device in a browser","es":"Abrir el dispositivo seleccionado en el navegador","fr-FR":"Ouvrir l'appareil sélectionné dans le navigateur","hu-HU":"Nyissa meg a kiválasztott eszközt egy böngészőben","it-IT":"Apri il dispositivo selezionato in un browser","ja-JP":"選択したデバイスをブラウザーで開く","kk-KZ":"Таңдалған құрылғыны браузерде ашу","nb-NO":"Åpne den valgte enheten i en nettleser","pl-PL":"Otwórz wybrane urządzenie w przeglądarce","pt-BR":"Abrir o dispositivo selecionado em um navegador","ru-RU":"Открыть выбранное устройство в браузере","tr-TR":"Seçili cihazı tarayıcıda aç","uk-UA":"Відкрити вибраний пристрій у браузері","vi-VN":"Mở thiết bị đã chọn trong trình duyệt","zh-CN":"在浏览器中打开所选设备","zh-TW":"在瀏覽器中開啟所選裝置"}},{"gesture":"F3","category":"Device","labels":{"bn":"নির্বাচিত ডিভাইস Keep Alive-এ দেখান","cs-CZ":"Zobrazit vybrané zařízení v Keep Alive","de-DE":"Ausgewähltes Gerät in Keep Alive anzeigen","en-US":"Show selected device in Keep Alive","es":"Mostrar el dispositivo seleccionado en Keep Alive","fr-FR":"Afficher l'appareil sélectionné dans Keep Alive","hu-HU":"Kijelölt eszköz megjelenítése a Keep Alive nézetben","it-IT":"Mostra il dispositivo selezionato in Keep Alive","ja-JP":"選択デバイスを Keep Alive に表示","kk-KZ":"Таңдалған құрылғыны Keep Alive ішінде көрсету","nb-NO":"Vis valgt enhet i Keep Alive","pl-PL":"Pokaż wybrane urządzenie w Keep Alive","pt-BR":"Mostrar o dispositivo selecionado em Keep Alive","ru-RU":"Показать выбранное устройство в Keep Alive","tr-TR":"Seçili cihazı Keep Alive'da göster","uk-UA":"Показати вибраний пристрій у Keep Alive","vi-VN":"Hiện thiết bị đã chọn trong Keep Alive","zh-CN":"在 Keep Alive 中显示选中设备","zh-TW":"在 Keep Alive 中顯示選取裝置"}},{"gesture":"Ctrl + P","category":"Device","labels":{"bn":"নির্বাচিত ডিভাইসে পিং করুন","cs-CZ":"Odeslat ping vybranému zařízení","de-DE":"Ausgewähltes Gerät anpingen","en-US":"Ping the selected device","es":"Hacer ping al dispositivo seleccionado","fr-FR":"Envoyer un ping à l'appareil sélectionné","hu-HU":"Pingelje a kiválasztott eszközt","it-IT":"Esegui il ping del dispositivo selezionato","ja-JP":"選択したデバイスに ping を送信","kk-KZ":"Таңдалған құрылғыға Ping жіберу","nb-NO":"Ping den valgte enheten","pl-PL":"Wyślij ping do wybranego urządzenia","pt-BR":"Fazer ping no dispositivo selecionado","ru-RU":"Выполнить ping выбранного устройства","tr-TR":"Seçili cihaza ping gönder","uk-UA":"Пінгувати вибраний пристрій","vi-VN":"Ping thiết bị đã chọn","zh-CN":"Ping 所选设备","zh-TW":"Ping 所選裝置"}},{"gesture":"Ctrl + D","category":"Device","labels":{"bn":"নির্বাচিত ডিভাইসে রিমোট ডেস্কটপ খুলুন","cs-CZ":"Otevřít Vzdálenou plochu k vybranému zařízení","de-DE":"Remotedesktop zum ausgewählten Gerät öffnen","en-US":"Open Remote Desktop to the selected device","es":"Abrir Escritorio remoto en el dispositivo seleccionado","fr-FR":"Ouvrir le Bureau à distance vers l'appareil sélectionné","hu-HU":"Nyissa meg a Távoli asztalt a kiválasztott eszközön","it-IT":"Apri Desktop remoto verso il dispositivo selezionato","ja-JP":"選択したデバイスにリモート デスクトップで接続","kk-KZ":"Таңдалған құрылғыға қашықтағы жұмыс үстелін ашу","nb-NO":"Åpne Eksternt skrivebord til den valgte enheten","pl-PL":"Otwórz Pulpit zdalny do wybranego urządzenia","pt-BR":"Abrir a Área de Trabalho Remota no dispositivo selecionado","ru-RU":"Открыть удаленный рабочий стол к выбранному устройству","tr-TR":"Seçili cihaza Uzak Masaüstü aç","uk-UA":"Відкрити віддалений робочий стіл на вибраному пристрої","vi-VN":"Mở Remote Desktop tới thiết bị đã chọn","zh-CN":"远程桌面连接到所选设备","zh-TW":"遠端桌面連線到所選裝置"}},{"gesture":"Ctrl + S","category":"Device","labels":{"bn":"SSH দিয়ে নির্বাচিত ডিভাইসে সংযোগ করুন","cs-CZ":"Připojit se k vybranému zařízení přes SSH","de-DE":"Über SSH mit dem ausgewählten Gerät verbinden","en-US":"Connect to the selected device over SSH","es":"Conectar al dispositivo seleccionado por SSH","fr-FR":"Se connecter à l'appareil sélectionné en SSH","hu-HU":"Csatlakozzon a kiválasztott eszközhöz SSH-n keresztül","it-IT":"Connettiti al dispositivo selezionato via SSH","ja-JP":"選択したデバイスに SSH で接続","kk-KZ":"Таңдалған құрылғыға SSH арқылы қосылу","nb-NO":"Koble til den valgte enheten via SSH","pl-PL":"Połącz się z wybranym urządzeniem przez SSH","pt-BR":"Conectar ao dispositivo selecionado por SSH","ru-RU":"Подключиться к выбранному устройству по SSH","tr-TR":"Seçili cihaza SSH ile bağlan","uk-UA":"Підключитися до вибраного пристрою через SSH","vi-VN":"Kết nối với thiết bị đã chọn qua SSH","zh-CN":"通过 SSH 连接到所选设备","zh-TW":"透過 SSH 連線到所選裝置"}},{"gesture":"Ctrl + Shift + S","category":"Device","labels":{"bn":"একটি SSH অ্যাকাউন্ট বেছে নিয়ে সংযোগ করুন","cs-CZ":"Vybrat účet SSH a připojit se","de-DE":"SSH-Konto wählen und verbinden","en-US":"Choose an SSH account and connect","es":"Elegir una cuenta SSH y conectar","fr-FR":"Choisir un compte SSH et se connecter","hu-HU":"Válasszon egy SSH-fiókot, és csatlakozzon","it-IT":"Scegli un account SSH e connettiti","ja-JP":"SSH アカウントを選んで接続","kk-KZ":"SSH тіркелгісін таңдап қосылу","nb-NO":"Velg en SSH-konto og koble til","pl-PL":"Wybierz konto SSH i połącz","pt-BR":"Escolher uma conta SSH e conectar","ru-RU":"Выбрать учетную запись SSH и подключиться","tr-TR":"Bir SSH hesabı seç ve bağlan","uk-UA":"Вибрати обліковий запис SSH і підключитися","vi-VN":"Chọn tài khoản SSH và kết nối","zh-CN":"选择 SSH 账户并连接","zh-TW":"選擇 SSH 帳戶並連線"}},{"gesture":"Ctrl + C","category":"Device","labels":{"bn":"নির্বাচিত IP ঠিকানা কপি করুন","cs-CZ":"Kopírovat vybranou IP adresu","de-DE":"Ausgewählte IP-Adresse kopieren","en-US":"Copy the selected IP address","es":"Copiar la dirección IP seleccionada","fr-FR":"Copier l'adresse IP sélectionnée","hu-HU":"Másolja a kiválasztott IP-címet","it-IT":"Copia l'indirizzo IP selezionato","ja-JP":"選択した IP アドレスをコピー","kk-KZ":"Таңдалған IP мекенжайын көшіру","nb-NO":"Kopier den valgte IP-adressen","pl-PL":"Kopiuj wybrany adres IP","pt-BR":"Copiar o endereço IP selecionado","ru-RU":"Копировать выбранный IP-адрес","tr-TR":"Seçili IP adresini kopyala","uk-UA":"Копіювати вибрану IP-адресу","vi-VN":"Sao chép địa chỉ IP đã chọn","zh-CN":"复制所选 IP 地址","zh-TW":"複製所選 IP 位址"}},{"gesture":"Ctrl + Shift + C","category":"Device","labels":{"bn":"নির্বাচিত MAC ঠিকানা কপি করুন","cs-CZ":"Kopírovat vybranou MAC adresu","de-DE":"Ausgewählte MAC-Adresse kopieren","en-US":"Copy the selected MAC address","es":"Copiar la dirección MAC seleccionada","fr-FR":"Copier l'adresse MAC sélectionnée","hu-HU":"Másolja a kiválasztott MAC-címet","it-IT":"Copia l'indirizzo MAC selezionato","ja-JP":"選択した MAC アドレスをコピー","kk-KZ":"Таңдалған MAC мекенжайын көшіру","nb-NO":"Kopier den valgte MAC-adressen","pl-PL":"Kopiuj wybrany adres MAC","pt-BR":"Copiar o endereço MAC selecionado","ru-RU":"Копировать выбранный MAC-адрес","tr-TR":"Seçili MAC adresini kopyala","uk-UA":"Копіювати вибрану MAC-адресу","vi-VN":"Sao chép địa chỉ MAC đã chọn","zh-CN":"复制所选 MAC 地址","zh-TW":"複製所選 MAC 位址"}},{"gesture":"Ctrl + Alt + C","category":"Device","labels":{"bn":"নির্বাচিত হোস্টনাম কপি করুন","cs-CZ":"Kopírovat vybraný název hostitele","de-DE":"Ausgewählten Hostnamen kopieren","en-US":"Copy the selected hostname","es":"Copiar el nombre de host seleccionado","fr-FR":"Copier le nom d'hôte sélectionné","hu-HU":"Másolja ki a kiválasztott gazdagépnevet","it-IT":"Copia il nome host selezionato","ja-JP":"選択したホスト名をコピー","kk-KZ":"Таңдалған хост атауын көшіру","nb-NO":"Kopier det valgte vertsnavnet","pl-PL":"Kopiuj wybraną nazwę hosta","pt-BR":"Copiar o nome do host selecionado","ru-RU":"Копировать выбранное имя хоста","tr-TR":"Seçili ana bilgisayar adını kopyala","uk-UA":"Копіювати вибране ім'я хоста","vi-VN":"Sao chép tên máy chủ đã chọn","zh-CN":"复制所选主机名","zh-TW":"複製所選主機名稱"}},{"gesture":"Shift + F10","category":"Device","labels":{"bn":"প্রসঙ্গ মেনু","cs-CZ":"Kontextová nabídka","de-DE":"Kontextmenü","en-US":"Context menu","es":"Menú contextual","fr-FR":"Menu contextuel","hu-HU":"Helyi menü","it-IT":"Menu contestuale","ja-JP":"コンテキストメニュー","kk-KZ":"Контекстік мәзір","nb-NO":"Kontekstmeny","pl-PL":"Menu kontekstowe","pt-BR":"Menu de contexto","ru-RU":"Контекстное меню","tr-TR":"Bağlam menüsü","uk-UA":"Контекстне меню","vi-VN":"Menu ngữ cảnh","zh-CN":"上下文菜单","zh-TW":"快顯功能表"}},{"gesture":"Menu","category":"Device","labels":{"bn":"প্রসঙ্গ মেনু","cs-CZ":"Kontextová nabídka","de-DE":"Kontextmenü","en-US":"Context menu","es":"Menú contextual","fr-FR":"Menu contextuel","hu-HU":"Helyi menü","it-IT":"Menu contestuale","ja-JP":"コンテキストメニュー","kk-KZ":"Контекстік мәзір","nb-NO":"Kontekstmeny","pl-PL":"Menu kontekstowe","pt-BR":"Menu de contexto","ru-RU":"Контекстное меню","tr-TR":"Bağlam menüsü","uk-UA":"Контекстне меню","vi-VN":"Menu ngữ cảnh","zh-CN":"上下文菜单","zh-TW":"快顯功能表"}},{"gesture":"F2","category":"Device","labels":{"bn":"ডিভাইসের নাম পরিবর্তন করুন","cs-CZ":"Přejmenovat zařízení","de-DE":"Gerät umbenennen","en-US":"Rename device","es":"Cambiar nombre del dispositivo","fr-FR":"Renommer l’appareil","hu-HU":"Eszköz átnevezése","it-IT":"Rinomina dispositivo","ja-JP":"デバイス名を変更","kk-KZ":"Құрылғы атын өзгерту","nb-NO":"Gi enheten nytt navn","pl-PL":"Zmień nazwę urządzenia","pt-BR":"Renomear dispositivo","ru-RU":"Переименовать устройство","tr-TR":"Cihazı yeniden adlandır","uk-UA":"Перейменувати пристрій","vi-VN":"Đổi tên thiết bị","zh-CN":"重命名设备","zh-TW":"重新命名裝置"}},{"gesture":"Ctrl + Alt + N","category":"Device","labels":{"bn":"ম্যানুয়াল নাম মুছুন","cs-CZ":"Vymazat ruční název","de-DE":"Manuellen Namen löschen","en-US":"Clear manual name","es":"Borrar nombre manual","fr-FR":"Effacer le nom manuel","hu-HU":"Kézi név törlése","it-IT":"Cancella nome manuale","ja-JP":"手動名を消去","kk-KZ":"Қолмен берілген атауды тазалау","nb-NO":"Fjern manuelt navn","pl-PL":"Wyczyść nazwę ręczną","pt-BR":"Limpar nome manual","ru-RU":"Удалить заданное имя","tr-TR":"Elle verilen adı temizle","uk-UA":"Скинути ім'я, задане вручну","vi-VN":"Xóa tên thủ công","zh-CN":"清除手动名称","zh-TW":"清除手動名稱"}},{"gesture":"Ctrl + Alt + T","category":"Device","labels":{"bn":"ওভাররাইড সাফ করুন","cs-CZ":"Zrušit ruční nastavení","de-DE":"Überschreibung löschen","en-US":"Clear Override","es":"Borrar anulación","fr-FR":"Effacer le remplacement","hu-HU":"Felülbírálás törlése","it-IT":"Rimuovi override","ja-JP":"上書きをクリア","kk-KZ":"Қайта анықтауды тазалау","nb-NO":"Fjern overstyring","pl-PL":"Usuń nadpisanie","pt-BR":"Limpar substituição","ru-RU":"Сбросить переопределение","tr-TR":"Geçersiz kılmayı temizle","uk-UA":"Скинути заміну","vi-VN":"Xóa ghi đè","zh-CN":"清除覆盖","zh-TW":"清除覆寫"}},{"gesture":"Ctrl + Shift + B","category":"Device","labels":{"bn":"বিশ্বস্ত ডিভাইস","cs-CZ":"Důvěryhodné zařízení","de-DE":"Vertrauenswürdiges Gerät","en-US":"Trusted device","es":"Dispositivo de confianza","fr-FR":"Appareil approuvé","hu-HU":"Megbízható eszköz","it-IT":"Dispositivo attendibile","ja-JP":"信頼済みデバイス","kk-KZ":"Сенімді құрылғы","nb-NO":"Klarert enhet","pl-PL":"Zaufane urządzenie","pt-BR":"Dispositivo confiável","ru-RU":"Доверенное устройство","tr-TR":"Güvenilir cihaz","uk-UA":"Довірений пристрій","vi-VN":"Thiết bị đáng tin cậy","zh-CN":"可信设备","zh-TW":"信任的裝置"}},{"gesture":"Ctrl + Shift + C","category":"Device","labels":{"bn":"সেবাসমূহ: ঠিকানা ও পোর্ট কপি করুন","cs-CZ":"Služby: Kopírovat adresu a port","de-DE":"Dienste: Adresse und Port kopieren","en-US":"Services: Copy endpoint","es":"Servicios: Copiar dirección y puerto","fr-FR":"Services: Copier l'adresse et le port","hu-HU":"Szolgáltatások: Cím és port másolása","it-IT":"Servizi: Copia indirizzo e porta","ja-JP":"サービス: アドレスとポートをコピー","kk-KZ":"Қызметтер: Мекенжай мен портты көшіру","nb-NO":"Tjenester: Kopier adresse og port","pl-PL":"Usługi: Kopiuj adres i port","pt-BR":"Serviços: Copiar endereço e porta","ru-RU":"Службы: Копировать адрес и порт","tr-TR":"Hizmetler: Adresi ve bağlantı noktasını kopyala","uk-UA":"Служби: Копіювати адресу й порт","vi-VN":"Dịch vụ: Sao chép địa chỉ và cổng","zh-CN":"服务: 复制地址和端口","zh-TW":"服務: 複製位址與連接埠"}},{"gesture":"Ctrl + Shift + Y","category":"Device","labels":{"bn":"সেবাসমূহ: সেবার নাম কপি করুন","cs-CZ":"Služby: Kopírovat název služby","de-DE":"Dienste: Dienstnamen kopieren","en-US":"Services: Copy service name","es":"Servicios: Copiar nombre del servicio","fr-FR":"Services: Copier le nom du service","hu-HU":"Szolgáltatások: Szolgáltatásnév másolása","it-IT":"Servizi: Copia nome del servizio","ja-JP":"サービス: サービス名をコピー","kk-KZ":"Қызметтер: Қызмет атауын көшіру","nb-NO":"Tjenester: Kopier tjenestenavn","pl-PL":"Usługi: Kopiuj nazwę usługi","pt-BR":"Serviços: Copiar nome do serviço","ru-RU":"Службы: Копировать имя службы","tr-TR":"Hizmetler: Hizmet adını kopyala","uk-UA":"Служби: Копіювати назву служби","vi-VN":"Dịch vụ: Sao chép tên dịch vụ","zh-CN":"服务: 复制服务名称","zh-TW":"服務: 複製服務名稱"}},{"gesture":"Ctrl + Alt + P","category":"Device","labels":{"bn":"সেবাসমূহ: পোর্ট কপি করুন","cs-CZ":"Služby: Kopírovat port","de-DE":"Dienste: Port kopieren","en-US":"Services: Copy port","es":"Servicios: Copiar puerto","fr-FR":"Services: Copier le port","hu-HU":"Szolgáltatások: Port másolása","it-IT":"Servizi: Copia porta","ja-JP":"サービス: ポートをコピー","kk-KZ":"Қызметтер: Портты көшіру","nb-NO":"Tjenester: Kopier port","pl-PL":"Usługi: Kopiuj port","pt-BR":"Serviços: Copiar porta","ru-RU":"Службы: Копировать порт","tr-TR":"Hizmetler: Bağlantı noktasını kopyala","uk-UA":"Служби: Копіювати порт","vi-VN":"Dịch vụ: Sao chép cổng","zh-CN":"服务: 复制端口","zh-TW":"服務: 複製連接埠"}},{"gesture":"Ctrl + Shift + H","category":"Views","labels":{"bn":"স্ক্যান ইতিহাস: ইতিহাসের দৃশ্য বদলান","cs-CZ":"Historie skenování: Přepnout zobrazení historie","de-DE":"Scanverlauf: Verlaufsansicht wechseln","en-US":"Scan History: Switch history view","es":"Historial de análisis: Cambiar vista del historial","fr-FR":"Historique des analyses: Changer la vue de l’historique","hu-HU":"Vizsgálati előzmények: Előzmények nézetének váltása","it-IT":"Cronologia scansioni: Cambia vista della cronologia","ja-JP":"スキャン履歴: 履歴表示を切り替え","kk-KZ":"Сканерлеу тарихы: Тарих көрінісін ауыстыру","nb-NO":"Skanneloggen: Bytt historikkvisning","pl-PL":"Historia skanowania: Przełącz widok historii","pt-BR":"Histórico de verificações: Alternar a visualização do histórico","ru-RU":"История сканирования: Переключить вид истории","tr-TR":"Tarama geçmişi: Geçmiş görünümünü değiştir","uk-UA":"Історія сканувань: Змінити вигляд історії","vi-VN":"Lịch sử quét: Chuyển chế độ xem lịch sử","zh-CN":"扫描历史: 切换历史记录视图","zh-TW":"掃描歷史: 切換歷史記錄檢視"}},{"gesture":"Ctrl + Shift + Y","category":"Device","labels":{"bn":"স্ক্যান ইতিহাস: সংরক্ষিত ডিভাইসের বিবরণ কপি করুন","cs-CZ":"Historie skenování: Kopírovat uložené údaje zařízení","de-DE":"Scanverlauf: Gespeicherte Gerätedetails kopieren","en-US":"Scan History: Copy saved device details","es":"Historial de análisis: Copiar detalles del dispositivo guardado","fr-FR":"Historique des analyses: Copier les détails du périphérique enregistré","hu-HU":"Vizsgálati előzmények: Mentett eszközadatok másolása","it-IT":"Cronologia scansioni: Copia i dettagli del dispositivo salvato","ja-JP":"スキャン履歴: 保存されたデバイス情報をコピー","kk-KZ":"Сканерлеу тарихы: Сақталған құрылғы мәліметтерін көшіру","nb-NO":"Skanneloggen: Kopier lagrede enhetsdetaljer","pl-PL":"Historia skanowania: Kopiuj zapisane dane urządzenia","pt-BR":"Histórico de verificações: Copiar detalhes do dispositivo salvo","ru-RU":"История сканирования: Копировать сохранённые сведения об устройстве","tr-TR":"Tarama geçmişi: Kayıtlı cihaz ayrıntılarını kopyala","uk-UA":"Історія сканувань: Копіювати збережені відомості про пристрій","vi-VN":"Lịch sử quét: Sao chép chi tiết thiết bị đã lưu","zh-CN":"扫描历史: 复制已保存的设备详情","zh-TW":"掃描歷史: 複製已儲存的裝置詳細資料"}},{"gesture":"Enter","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল: প্রোফাইল চালান","cs-CZ":"Profily skenování: Spustit profil","de-DE":"Scanprofile: Profil ausführen","en-US":"Scan profiles: Run profile","es":"Perfiles de análisis: Ejecutar perfil","fr-FR":"Profils d’analyse: Exécuter le profil","hu-HU":"Vizsgálati profilok: Profil futtatása","it-IT":"Profili di scansione: Esegui profilo","ja-JP":"スキャンプロファイル: プロファイルを実行","kk-KZ":"Сканерлеу профильдері: Профильді іске қосу","nb-NO":"Skanneprofiler: Kjør profil","pl-PL":"Profile skanowania: Uruchom profil","pt-BR":"Perfis de verificação: Executar perfil","ru-RU":"Профили сканирования: Запустить профиль","tr-TR":"Tarama profilleri: Profili çalıştır","uk-UA":"Профілі сканування: Запустити профіль","vi-VN":"Hồ sơ quét: Chạy hồ sơ","zh-CN":"扫描配置: 运行配置","zh-TW":"掃描設定檔: 執行設定檔"}},{"gesture":"Ctrl + L","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল: লক্ষ্য লোড করুন","cs-CZ":"Profily skenování: Načíst cíl","de-DE":"Scanprofile: Ziel laden","en-US":"Scan profiles: Load target","es":"Perfiles de análisis: Cargar destino","fr-FR":"Profils d’analyse: Charger la cible","hu-HU":"Vizsgálati profilok: Cél betöltése","it-IT":"Profili di scansione: Carica destinazione","ja-JP":"スキャンプロファイル: 対象を読み込む","kk-KZ":"Сканерлеу профильдері: Нысанды жүктеу","nb-NO":"Skanneprofiler: Last inn mål","pl-PL":"Profile skanowania: Wczytaj cel","pt-BR":"Perfis de verificação: Carregar destino","ru-RU":"Профили сканирования: Загрузить цель","tr-TR":"Tarama profilleri: Hedefi yükle","uk-UA":"Профілі сканування: Завантажити ціль","vi-VN":"Hồ sơ quét: Tải mục tiêu","zh-CN":"扫描配置: 加载目标","zh-TW":"掃描設定檔: 載入目標"}},{"gesture":"Delete","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল: প্রোফাইল মুছুন","cs-CZ":"Profily skenování: Odstranit profil","de-DE":"Scanprofile: Profil löschen","en-US":"Scan profiles: Delete profile","es":"Perfiles de análisis: Eliminar perfil","fr-FR":"Profils d’analyse: Supprimer le profil","hu-HU":"Vizsgálati profilok: Profil törlése","it-IT":"Profili di scansione: Elimina profilo","ja-JP":"スキャンプロファイル: プロファイルを削除","kk-KZ":"Сканерлеу профильдері: Профильді жою","nb-NO":"Skanneprofiler: Slett profil","pl-PL":"Profile skanowania: Usuń profil","pt-BR":"Perfis de verificação: Excluir perfil","ru-RU":"Профили сканирования: Удалить профиль","tr-TR":"Tarama profilleri: Profili sil","uk-UA":"Профілі сканування: Видалити профіль","vi-VN":"Hồ sơ quét: Xóa hồ sơ","zh-CN":"扫描配置: 删除配置","zh-TW":"掃描設定檔: 刪除設定檔"}},{"gesture":"Ctrl + Alt + D","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল: পরে সব গভীর স্ক্যান করুন","cs-CZ":"Profily skenování: Poté hloubkově skenovat vše","de-DE":"Scanprofile: Danach Tiefenscan für alle","en-US":"Scan profiles: Deep Scan All afterward","es":"Perfiles de análisis: Análisis profundo después","fr-FR":"Profils d’analyse: Analyse approfondie ensuite","hu-HU":"Vizsgálati profilok: Utána teljes mélyvizsgálat","it-IT":"Profili di scansione: Scansione profonda dopo","ja-JP":"スキャンプロファイル: 終了後にすべてを詳細スキャン","kk-KZ":"Сканерлеу профильдері: Содан кейін толық терең сканерлеу","nb-NO":"Skanneprofiler: Dypskann alle etterpå","pl-PL":"Profile skanowania: Potem głęboki skan wszystkiego","pt-BR":"Perfis de verificação: Verificação Profunda de Todos depois","ru-RU":"Профили сканирования: Затем глубокое сканирование всех","tr-TR":"Tarama profilleri: Ardından tümünü derin tara","uk-UA":"Профілі сканування: Потім глибоке сканування всіх","vi-VN":"Hồ sơ quét: Sau đó quét sâu tất cả","zh-CN":"扫描配置: 随后深度扫描全部","zh-TW":"掃描設定檔: 之後深度掃描全部"}},{"gesture":"Ctrl + Alt + S","category":"Views","labels":{"bn":"স্ক্যান প্রোফাইল: বর্তমান প্রোফাইল সংরক্ষণ করুন","cs-CZ":"Profily skenování: Uložit aktuální profil","de-DE":"Scanprofile: Aktuelles Profil speichern","en-US":"Scan profiles: Save current profile","es":"Perfiles de análisis: Guardar perfil actual","fr-FR":"Profils d’analyse: Enregistrer le profil actuel","hu-HU":"Vizsgálati profilok: Jelenlegi profil mentése","it-IT":"Profili di scansione: Salva profilo corrente","ja-JP":"スキャンプロファイル: 現在のプロファイルを保存","kk-KZ":"Сканерлеу профильдері: Ағымдағы профильді сақтау","nb-NO":"Skanneprofiler: Lagre gjeldende profil","pl-PL":"Profile skanowania: Zapisz bieżący profil","pt-BR":"Perfis de verificação: Salvar perfil atual","ru-RU":"Профили сканирования: Сохранить текущий профиль","tr-TR":"Tarama profilleri: Geçerli profili kaydet","uk-UA":"Профілі сканування: Зберегти поточний профіль","vi-VN":"Hồ sơ quét: Lưu hồ sơ hiện tại","zh-CN":"扫描配置: 保存当前配置","zh-TW":"掃描設定檔: 儲存目前設定檔"}},{"gesture":"Ctrl + C","category":"Device","labels":{"bn":"সংযোগ পর্যবেক্ষণ: ঠিকানা কপি করুন","cs-CZ":"Sledování připojení: Kopírovat adresu","de-DE":"Verbindungsüberwachung: Adresse kopieren","en-US":"Keep Alive: Copy address","es":"Supervisión de conexión: Copiar dirección","fr-FR":"Surveillance de connexion: Copier l'adresse","hu-HU":"Kapcsolatfigyelés: Cím másolása","it-IT":"Monitoraggio connessione: Copia indirizzo","ja-JP":"接続監視: アドレスをコピー","kk-KZ":"Қосылымды бақылау: Мекенжайды көшіру","nb-NO":"Keep Alive: Kopier adresse","pl-PL":"Monitorowanie połączenia: Kopiuj adres","pt-BR":"Keep Alive: Copiar endereço","ru-RU":"Наблюдение за соединением: Копировать адрес","tr-TR":"Bağlantı izleme: Adresi kopyala","uk-UA":"Keep Alive: Копіювати адресу","vi-VN":"Keep Alive: Sao chép địa chỉ","zh-CN":"连接监控: 复制地址","zh-TW":"連線監控: 複製位址"}},{"gesture":"F3","category":"Device","labels":{"bn":"সংযোগ পর্যবেক্ষণ: আবার পরীক্ষা করুন","cs-CZ":"Sledování připojení: Zkontrolovat znovu","de-DE":"Verbindungsüberwachung: Erneut prüfen","en-US":"Keep Alive: Check again","es":"Supervisión de conexión: Comprobar de nuevo","fr-FR":"Surveillance de connexion: Vérifier à nouveau","hu-HU":"Kapcsolatfigyelés: Újraellenőrzés","it-IT":"Monitoraggio connessione: Controlla di nuovo","ja-JP":"接続監視: 再確認","kk-KZ":"Қосылымды бақылау: Қайта тексеру","nb-NO":"Keep Alive: Sjekk på nytt","pl-PL":"Monitorowanie połączenia: Sprawdź ponownie","pt-BR":"Keep Alive: Verificar novamente","ru-RU":"Наблюдение за соединением: Проверить снова","tr-TR":"Bağlantı izleme: Yeniden denetle","uk-UA":"Keep Alive: Перевірити знову","vi-VN":"Keep Alive: Kiểm tra lại","zh-CN":"连接监控: 重新检查","zh-TW":"連線監控: 重新檢查"}},{"gesture":"Ctrl + R","category":"Device","labels":{"bn":"সংযোগ পর্যবেক্ষণ: পরিসংখ্যান রিসেট করুন","cs-CZ":"Sledování připojení: Vynulovat statistiky","de-DE":"Verbindungsüberwachung: Statistik zurücksetzen","en-US":"Keep Alive: Reset statistics","es":"Supervisión de conexión: Restablecer estadísticas","fr-FR":"Surveillance de connexion: Réinitialiser les statistiques","hu-HU":"Kapcsolatfigyelés: Statisztika nullázása","it-IT":"Monitoraggio connessione: Azzera statistiche","ja-JP":"接続監視: 統計をリセット","kk-KZ":"Қосылымды бақылау: Статистиканы қалпына келтіру","nb-NO":"Keep Alive: Tilbakestill statistikk","pl-PL":"Monitorowanie połączenia: Zeruj statystyki","pt-BR":"Keep Alive: Redefinir estatísticas","ru-RU":"Наблюдение за соединением: Сбросить статистику","tr-TR":"Bağlantı izleme: İstatistikleri sıfırla","uk-UA":"Keep Alive: Скинути статистику","vi-VN":"Keep Alive: Đặt lại thống kê","zh-CN":"连接监控: 重置统计","zh-TW":"連線監控: 重設統計"}},{"gesture":"Delete","category":"Device","labels":{"bn":"সংযোগ পর্যবেক্ষণ: দেখা বন্ধ করুন","cs-CZ":"Sledování připojení: Přestat sledovat","de-DE":"Verbindungsüberwachung: Nicht mehr überwachen","en-US":"Keep Alive: Stop watching this target","es":"Supervisión de conexión: Dejar de supervisar este destino","fr-FR":"Surveillance de connexion: Ne plus surveiller cette cible","hu-HU":"Kapcsolatfigyelés: Cél figyelésének leállítása","it-IT":"Monitoraggio connessione: Smetti di monitorare questa destinazione","ja-JP":"接続監視: この対象の監視を停止","kk-KZ":"Қосылымды бақылау: Бұл нысананы бақылауды тоқтату","nb-NO":"Keep Alive: Slutt å overvåke dette målet","pl-PL":"Monitorowanie połączenia: Przestań monitorować ten cel","pt-BR":"Keep Alive: Parar de monitorar este destino","ru-RU":"Наблюдение за соединением: Прекратить наблюдение за целью","tr-TR":"Bağlantı izleme: Bu hedefi izlemeyi durdur","uk-UA":"Keep Alive: Припинити відстеження цієї цілі","vi-VN":"Keep Alive: Dừng theo dõi mục tiêu này","zh-CN":"连接监控: 停止监视此目标","zh-TW":"連線監控: 停止監看此目標"}},{"gesture":"Ctrl + Shift + C","category":"App","labels":{"bn":"টার্মিনাল: কপি","cs-CZ":"Terminál: Kopírovat","de-DE":"Terminal: Kopieren","en-US":"Terminal: Copy","es":"Terminal: Copiar","fr-FR":"Terminal: Copier","hu-HU":"Terminál: Másolás","it-IT":"Terminale: Copia","ja-JP":"ターミナル: コピー","kk-KZ":"Терминал: Көшіру","nb-NO":"Terminal: Kopier","pl-PL":"Terminal: Kopiuj","pt-BR":"Terminal: Copiar","ru-RU":"Терминал: Копировать","tr-TR":"Terminal: Kopyala","uk-UA":"Термінал: Копіювати","vi-VN":"Terminal: Sao chép","zh-CN":"终端: 复制","zh-TW":"終端機: 複製"}},{"gesture":"Ctrl + Shift + V","category":"App","labels":{"bn":"টার্মিনাল: পেস্ট","cs-CZ":"Terminál: Vložit","de-DE":"Terminal: Einfügen","en-US":"Terminal: Paste","es":"Terminal: Pegar","fr-FR":"Terminal: Coller","hu-HU":"Terminál: Beillesztés","it-IT":"Terminale: Incolla","ja-JP":"ターミナル: 貼り付け","kk-KZ":"Терминал: Қою","nb-NO":"Terminal: Lim inn","pl-PL":"Terminal: Wklej","pt-BR":"Terminal: Colar","ru-RU":"Терминал: Вставить","tr-TR":"Terminal: Yapıştır","uk-UA":"Термінал: Вставити","vi-VN":"Terminal: Dán","zh-CN":"终端: 粘贴","zh-TW":"終端機: 貼上"}},{"gesture":"Ctrl + Shift + A","category":"App","labels":{"bn":"টার্মিনাল: সব নির্বাচন","cs-CZ":"Terminál: Vybrat vše","de-DE":"Terminal: Alles auswählen","en-US":"Terminal: Select all","es":"Terminal: Seleccionar todo","fr-FR":"Terminal: Tout sélectionner","hu-HU":"Terminál: Összes kijelölése","it-IT":"Terminale: Seleziona tutto","ja-JP":"ターミナル: すべて選択","kk-KZ":"Терминал: Барлығын таңдау","nb-NO":"Terminal: Merk alt","pl-PL":"Terminal: Zaznacz wszystko","pt-BR":"Terminal: Selecionar tudo","ru-RU":"Терминал: Выделить все","tr-TR":"Terminal: Tümünü seç","uk-UA":"Термінал: Виділити все","vi-VN":"Terminal: Chọn tất cả","zh-CN":"终端: 全选","zh-TW":"終端機: 全選"}},{"gesture":"Ctrl + Shift + Y","category":"App","labels":{"bn":"টার্মিনাল: সব কপি","cs-CZ":"Terminál: Kopírovat vše","de-DE":"Terminal: Alles kopieren","en-US":"Terminal: Copy All","es":"Terminal: Copiar todo","fr-FR":"Terminal: Tout copier","hu-HU":"Terminál: Összes másolása","it-IT":"Terminale: Copia tutto","ja-JP":"ターミナル: すべてコピー","kk-KZ":"Терминал: Барлығын көшіру","nb-NO":"Terminal: Kopier alt","pl-PL":"Terminal: Kopiuj wszystko","pt-BR":"Terminal: Copiar tudo","ru-RU":"Терминал: Копировать все","tr-TR":"Terminal: Tümünü kopyala","uk-UA":"Термінал: Копіювати все","vi-VN":"Terminal: Sao chép tất cả","zh-CN":"终端: 复制全部","zh-TW":"終端機: 複製全部"}},{"gesture":"Ctrl + Shift + L","category":"App","labels":{"bn":"টার্মিনাল: পরিষ্কার","cs-CZ":"Terminál: Vymazat","de-DE":"Terminal: Leeren","en-US":"Terminal: Clear","es":"Terminal: Limpiar","fr-FR":"Terminal: Effacer","hu-HU":"Terminál: Törlés","it-IT":"Terminale: Pulisci","ja-JP":"ターミナル: クリア","kk-KZ":"Терминал: Тазарту","nb-NO":"Terminal: Tøm","pl-PL":"Terminal: Wyczyść","pt-BR":"Terminal: Limpar","ru-RU":"Терминал: Очистить","tr-TR":"Terminal: Temizle","uk-UA":"Термінал: Очистити","vi-VN":"Terminal: Xóa","zh-CN":"终端: 清屏","zh-TW":"終端機: 清除"}},{"gesture":"Ctrl + G","category":"Topology","labels":{"bn":"টপোলজি বিন্যাস পরিবর্তন করুন","cs-CZ":"Procházet uspořádání topologie","de-DE":"Topologieanordnung wechseln","en-US":"Cycle topology arrangement","es":"Cambiar disposición de topología","fr-FR":"Changer la disposition de la topologie","hu-HU":"Topológiaelrendezés váltása","it-IT":"Cambia disposizione topologia","ja-JP":"トポロジの配置を切り替える","kk-KZ":"Топология орналасуын ауыстыру","nb-NO":"Bla gjennom topologiordninger","pl-PL":"Przełącz układ topologii","pt-BR":"Alternar a organização da topologia","ru-RU":"Переключить расположение топологии","tr-TR":"Topoloji düzenini değiştir","uk-UA":"Перемкнути впорядкування топології","vi-VN":"Chuyển kiểu sắp xếp sơ đồ","zh-CN":"切换拓扑排列方式","zh-TW":"切換拓撲排列方式"}},{"gesture":"Ctrl + 1","category":"Topology","labels":{"bn":"টপোলজি সাজান ভূমিকা","cs-CZ":"Uspořádat topologii podle Role","de-DE":"Topologie anordnen nach Rolle","en-US":"Arrange topology by Role","es":"Organizar topología por Función","fr-FR":"Organiser la topologie par Rôle","hu-HU":"Topológia rendezése Szerep","it-IT":"Disponi topologia per Ruolo","ja-JP":"トポロジの並べ替え 役割","kk-KZ":"Топологияны реттеу Рөл","nb-NO":"Ordne topologien etter Rolle","pl-PL":"Rozmieść topologię według Rola","pt-BR":"Organizar a topologia por Função","ru-RU":"Упорядочить топологию по Роль","tr-TR":"Topolojiyi şuna göre düzenle Rol","uk-UA":"Упорядкувати топологію за Роль","vi-VN":"Sắp xếp sơ đồ theo Vai trò","zh-CN":"拓扑排列方式 角色","zh-TW":"拓撲排列方式 角色"}},{"gesture":"Ctrl + 2","category":"Topology","labels":{"bn":"টপোলজি সাজান ধরন","cs-CZ":"Uspořádat topologii podle Typ","de-DE":"Topologie anordnen nach Typ","en-US":"Arrange topology by Type","es":"Organizar topología por Tipo","fr-FR":"Organiser la topologie par Type","hu-HU":"Topológia rendezése Írja be","it-IT":"Disponi topologia per Tipo","ja-JP":"トポロジの並べ替え 種類","kk-KZ":"Топологияны реттеу Түрі","nb-NO":"Ordne topologien etter Type","pl-PL":"Rozmieść topologię według Typ","pt-BR":"Organizar a topologia por Tipo","ru-RU":"Упорядочить топологию по Тип","tr-TR":"Topolojiyi şuna göre düzenle Tür","uk-UA":"Упорядкувати топологію за Тип","vi-VN":"Sắp xếp sơ đồ theo Loại","zh-CN":"拓扑排列方式 类型","zh-TW":"拓撲排列方式 類型"}},{"gesture":"Ctrl + 3","category":"Topology","labels":{"bn":"টপোলজি সাজান IP ঠিকানা","cs-CZ":"Uspořádat topologii podle IP adresa","de-DE":"Topologie anordnen nach IP-Adresse","en-US":"Arrange topology by IP Address","es":"Organizar topología por Dirección IP","fr-FR":"Organiser la topologie par Adresse IP","hu-HU":"Topológia rendezése IP-cím","it-IT":"Disponi topologia per Indirizzo IP","ja-JP":"トポロジの並べ替え IP アドレス","kk-KZ":"Топологияны реттеу IP мекенжайы","nb-NO":"Ordne topologien etter IP-adresse","pl-PL":"Rozmieść topologię według Adres IP","pt-BR":"Organizar a topologia por Endereço IP","ru-RU":"Упорядочить топологию по IP-адрес","tr-TR":"Topolojiyi şuna göre düzenle IP Adresi","uk-UA":"Упорядкувати топологію за IP-адреса","vi-VN":"Sắp xếp sơ đồ theo Địa chỉ IP","zh-CN":"拓扑排列方式 IP 地址","zh-TW":"拓撲排列方式 IP 位址"}},{"gesture":"Ctrl + 4","category":"Topology","labels":{"bn":"টপোলজি সাজান প্রস্তুতকারক","cs-CZ":"Uspořádat topologii podle Výrobce","de-DE":"Topologie anordnen nach Hersteller","en-US":"Arrange topology by Vendor","es":"Organizar topología por Fabricante","fr-FR":"Organiser la topologie par Fabricant","hu-HU":"Topológia rendezése Eladó","it-IT":"Disponi topologia per Produttore","ja-JP":"トポロジの並べ替え ベンダー","kk-KZ":"Топологияны реттеу Өндіруші","nb-NO":"Ordne topologien etter Produsent","pl-PL":"Rozmieść topologię według Producent","pt-BR":"Organizar a topologia por Fabricante","ru-RU":"Упорядочить топологию по Производитель","tr-TR":"Topolojiyi şuna göre düzenle Üretici","uk-UA":"Упорядкувати топологію за Виробник","vi-VN":"Sắp xếp sơ đồ theo Nhà sản xuất","zh-CN":"拓扑排列方式 厂商","zh-TW":"拓撲排列方式 廠商"}},{"gesture":"Ctrl + Shift + 1","category":"Toolbar","labels":{"bn":"ছোট আইকন","cs-CZ":"Malé ikony","de-DE":"Kleine Symbole","en-US":"Small icons","es":"Iconos pequeños","fr-FR":"Petites icônes","hu-HU":"Kis ikonok","it-IT":"Icone piccole","ja-JP":"小さいアイコン","kk-KZ":"Кішкентай белгішелер","nb-NO":"Små ikoner","pl-PL":"Małe ikony","pt-BR":"Ícones pequenos","ru-RU":"Маленькие иконки","tr-TR":"Küçük simgeler","uk-UA":"Малі значки","vi-VN":"Biểu tượng nhỏ","zh-CN":"小图标","zh-TW":"小圖示"}},{"gesture":"Ctrl + Shift + 2","category":"Toolbar","labels":{"bn":"বড় আইকন","cs-CZ":"Velké ikony","de-DE":"Große Symbole","en-US":"Large icons","es":"Iconos grandes","fr-FR":"Grandes icônes","hu-HU":"Nagy ikonok","it-IT":"Icone grandi","ja-JP":"大きいアイコン","kk-KZ":"Үлкен белгішелер","nb-NO":"Store ikoner","pl-PL":"Duże ikony","pt-BR":"Ícones grandes","ru-RU":"Большие иконки","tr-TR":"Büyük simgeler","uk-UA":"Великі значки","vi-VN":"Biểu tượng lớn","zh-CN":"大图标","zh-TW":"大圖示"}},{"gesture":"Ctrl + Shift + 3","category":"Toolbar","labels":{"bn":"লেখা নেই","cs-CZ":"Bez textu","de-DE":"Kein Text","en-US":"No text","es":"Sin texto","fr-FR":"Sans texte","hu-HU":"Nincs szöveg","it-IT":"Nessun testo","ja-JP":"文字なし","kk-KZ":"Мәтін жоқ","nb-NO":"Ingen tekst","pl-PL":"Brak tekstu","pt-BR":"Sem texto","ru-RU":"Нет текста","tr-TR":"Metin yok","uk-UA":"Без тексту","vi-VN":"Không có văn bản","zh-CN":"无文字","zh-TW":"無文字"}},{"gesture":"Ctrl + Shift + 4","category":"Toolbar","labels":{"bn":"আইকনের পাশে লেখা","cs-CZ":"Text vedle ikon","de-DE":"Text neben Symbol","en-US":"Text beside icons","es":"Texto junto a iconos","fr-FR":"Texte à côté des icônes","hu-HU":"Szöveg az ikonok mellett","it-IT":"Testo accanto alle icone","ja-JP":"アイコンの横にテキスト","kk-KZ":"Мәтін белгішенің қасында","nb-NO":"Tekst ved siden av ikoner","pl-PL":"Tekst obok ikon","pt-BR":"Texto ao lado dos ícones","ru-RU":"Текст рядом с иконками","tr-TR":"Simge yanında metin","uk-UA":"Текст поруч зі значками","vi-VN":"Văn bản cạnh biểu tượng","zh-CN":"图标加文本","zh-TW":"圖示加文字"}},{"gesture":"Ctrl + Shift + 5","category":"Toolbar","labels":{"bn":"আইকনের নিচে লেখা","cs-CZ":"Text pod ikonami","de-DE":"Text unter Symbol","en-US":"Text under icons","es":"Texto bajo los iconos","fr-FR":"Texte sous les icônes","hu-HU":"Szöveg az ikonok alatt","it-IT":"Testo sotto le icone","ja-JP":"アイコンの下にテキスト","kk-KZ":"Мәтін белгішенің астында","nb-NO":"Tekst under ikoner","pl-PL":"Tekst pod ikonami","pt-BR":"Texto abaixo dos ícones","ru-RU":"Текст под иконками","tr-TR":"Simge altında metin","uk-UA":"Текст під значками","vi-VN":"Văn bản dưới biểu tượng","zh-CN":"图标下方文本","zh-TW":"圖示下方文字"}},{"gesture":"Ctrl + Shift + 6","category":"Toolbar","labels":{"bn":"শুধু লেখা","cs-CZ":"Pouze text","de-DE":"Nur Text","en-US":"Text only","es":"Solo texto","fr-FR":"Texte seul","hu-HU":"Csak szöveg","it-IT":"Solo testo","ja-JP":"テキストのみ","kk-KZ":"Тек мәтін","nb-NO":"Bare tekst","pl-PL":"Tylko tekst","pt-BR":"Somente texto","ru-RU":"Только текст","tr-TR":"Yalnızca metin","uk-UA":"Лише текст","vi-VN":"Chỉ văn bản","zh-CN":"仅文本","zh-TW":"僅文字"}},{"gesture":"Ctrl + Shift + +","category":"App","labels":{"bn":"অ্যাপ বড় করুন","cs-CZ":"Zvětšit aplikaci","de-DE":"App vergrößern","en-US":"Make the app bigger","es":"Agrandar la aplicación","fr-FR":"Agrandir l'application","hu-HU":"Tedd nagyobbá az alkalmazást","it-IT":"Ingrandisci l'app","ja-JP":"アプリを大きくする","kk-KZ":"Қолданбаны үлкейту","nb-NO":"Gjør appen større","pl-PL":"Powiększ aplikację","pt-BR":"Aumentar o app","ru-RU":"Увеличить приложение","tr-TR":"Uygulamayı büyüt","uk-UA":"Збільшити застосунок","vi-VN":"Phóng to ứng dụng","zh-CN":"放大应用","zh-TW":"放大應用程式"}},{"gesture":"Ctrl + Shift + -","category":"App","labels":{"bn":"অ্যাপ ছোট করুন","cs-CZ":"Zmenšit aplikaci","de-DE":"App verkleinern","en-US":"Make the app smaller","es":"Reducir la aplicación","fr-FR":"Réduire l'application","hu-HU":"Csökkentse az alkalmazást","it-IT":"Rimpicciolisci l'app","ja-JP":"アプリを小さくする","kk-KZ":"Қолданбаны кішірейту","nb-NO":"Gjør appen mindre","pl-PL":"Pomniejsz aplikację","pt-BR":"Diminuir o app","ru-RU":"Уменьшить приложение","tr-TR":"Uygulamayı küçült","uk-UA":"Зменшити застосунок","vi-VN":"Thu nhỏ ứng dụng","zh-CN":"缩小应用","zh-TW":"縮小應用程式"}},{"gesture":"Ctrl + Shift + 0","category":"App","labels":{"bn":"অ্যাপের আকার রিসেট করুন","cs-CZ":"Obnovit výchozí velikost aplikace","de-DE":"App-Größe zurücksetzen","en-US":"Reset the app size","es":"Restablecer el tamaño de la aplicación","fr-FR":"Réinitialiser la taille de l'application","hu-HU":"Állítsa vissza az alkalmazás méretét","it-IT":"Ripristina la dimensione dell'app","ja-JP":"アプリのサイズをリセット","kk-KZ":"Қолданба өлшемін қалпына келтіру","nb-NO":"Tilbakestill appstørrelsen","pl-PL":"Przywróć domyślny rozmiar","pt-BR":"Redefinir o tamanho do app","ru-RU":"Сбросить размер приложения","tr-TR":"Uygulama boyutunu sıfırla","uk-UA":"Скинути розмір застосунку","vi-VN":"Đặt lại kích thước ứng dụng","zh-CN":"重置应用大小","zh-TW":"重設應用程式大小"}},{"gesture":"Alt + Shift + G","category":"App","labels":{"bn":"ফিল্ম গ্রেইন","cs-CZ":"Filmové zrno","de-DE":"Filmkorn","en-US":"Film Grain","es":"Grano de película","fr-FR":"Grain de film","hu-HU":"Filmszemcse","it-IT":"Grana pellicola","ja-JP":"フィルムグレイン","kk-KZ":"Пленка түйіршігі","nb-NO":"Filmkorn","pl-PL":"Ziarno filmowe","pt-BR":"Granulação de filme","ru-RU":"Зернистость плёнки","tr-TR":"Film greni","uk-UA":"Зернистість плівки","vi-VN":"Hạt phim","zh-CN":"胶片颗粒","zh-TW":"底片顆粒"}},{"gesture":"F1","category":"App","labels":{"bn":"কীবোর্ড শর্টকাট দেখান বা লুকান","cs-CZ":"Zobrazit nebo skrýt klávesové zkratky","de-DE":"Tastenkürzel ein- oder ausblenden","en-US":"Show or hide keyboard shortcuts","es":"Mostrar u ocultar los atajos de teclado","fr-FR":"Afficher ou masquer les raccourcis clavier","hu-HU":"Billentyűparancsok megjelenítése vagy elrejtése","it-IT":"Mostra o nascondi le scorciatoie da tastiera","ja-JP":"キーボードショートカットを表示または非表示","kk-KZ":"Перне тіркесімдерін көрсету немесе жасыру","nb-NO":"Vis eller skjul hurtigtaster","pl-PL":"Pokaż lub ukryj skróty klawiszowe","pt-BR":"Mostrar ou ocultar os atalhos de teclado","ru-RU":"Показать или скрыть сочетания клавиш","tr-TR":"Klavye kısayollarını göster veya gizle","uk-UA":"Показати або сховати сполучення клавіш","vi-VN":"Hiện hoặc ẩn phím tắt","zh-CN":"显示或隐藏键盘快捷键","zh-TW":"顯示或隱藏鍵盤快捷鍵"}},{"gesture":"F12","category":"App","labels":{"bn":"সম্পর্কে উইন্ডোটি খুলুন","cs-CZ":"Otevřít okno O aplikaci","de-DE":"Das Info-Fenster öffnen","en-US":"Open the About window","es":"Abrir la ventana Acerca de","fr-FR":"Ouvrir la fenêtre À propos","hu-HU":"Nyissa meg a névjegy ablakát","it-IT":"Apri la finestra Informazioni","ja-JP":"バージョン情報ウィンドウを開く","kk-KZ":"Қолданба туралы терезесін ашу","nb-NO":"Åpne Om-vinduet","pl-PL":"Otwórz okno O programie","pt-BR":"Abrir a janela Sobre","ru-RU":"Открыть окно «О программе»","tr-TR":"Hakkında penceresini aç","uk-UA":"Відкрити вікно «Про програму»","vi-VN":"Mở cửa sổ Giới thiệu","zh-CN":"打开关于窗口","zh-TW":"開啟關於視窗"}}]; diff --git a/scan-landing/technical.html b/scan-landing/technical.html index 4f4cadc7..4b628eac 100644 --- a/scan-landing/technical.html +++ b/scan-landing/technical.html @@ -11,7 +11,7 @@ - +