Files
rustdesk/src/lang/pt_BR.rs
T
0740063863 Keyboard shortcuts (#14933)
* fix web break introduced in 38f130071 fix(linux): enable mouse side buttons in remote sessions (#14848)

* feat(shortcuts): user-configurable keyboard shortcuts for session actions

  Adds a keyboard shortcut feature (Rust matcher + Dart UI + cross-language
  parity tests) that lets users bind combinations like Ctrl+Alt+Shift+P to
  session actions. Bindings are stored in LocalConfig under
  `keyboard-shortcuts`; the matcher gates dispatch on `enabled` and
  `pass_through` flags so flipping the master switch off is a hard stop.

  Wire-up summary:
  - src/keyboard/shortcuts.rs: matcher, default bindings, parity test against
    flutter/test/fixtures/default_keyboard_shortcuts.json
  - src/keyboard.rs: shortcut intercept in process_event{,_with_session},
    feature-gated to `flutter`; runs before key swapping so users bind to
    physical keys
  - src/flutter_ffi.rs: main_reload_keyboard_shortcuts +
    main_get_default_keyboard_shortcuts; reload_from_config seeded in main_init
  - flutter/lib/common/widgets/keyboard_shortcuts/: shared config page body,
    recording dialog, shortcut display formatter, action group registry
  - flutter/lib/desktop/pages/desktop_keyboard_shortcuts_page.dart and
    flutter/lib/mobile/pages/mobile_keyboard_shortcuts_page.dart: platform
    shells around the shared body
  - flutter/lib/models/shortcut_model.dart: per-session ShortcutModel +
    registerSessionShortcutActions for actions with no toolbar TToggleMenu /
    TRadioMenu (fullscreen, switch display/tab, close tab, voice call, etc.)
  - flutter/lib/common/widgets/toolbar.dart: optional `actionId` field on
    TToggleMenu / TRadioMenu, plus per-helper auto-register pass that wires
    tagged entries' existing onChanged into the ShortcutModel
  - flutter/test/keyboard_shortcuts_test.dart + fixtures: cross-language
    parity (default bindings, supported key vocabulary)

  Design principles applied during review:

  1. Additions are fine; modifications to original logic must be deliberate.
     Tagging an existing TToggleMenu entry with `actionId:` is an addition.
     Rewriting its onChanged to satisfy a new contract is a modification —
     and was reverted for every case where the original click behavior was
     working. Four closures were touched and then reverted (mobile View
     Mode, Privacy mode multi-impl, Relative mouse mode, Reverse mouse
     wheel); their shortcuts are wired via standalone closures in
     shortcut_model.dart instead.

  2. Toolbar auto-register is reserved for entries whose onChanged is
     inherently self-flipping — typically `sessionToggleOption(name)` where
     the named option is flipped in place and the input bool is unused. The
     register pass passes `!menu.value` from registration time, which is
     harmless under self-flipping but wrong for closures that consume the
     input bool directly. Tagging a non-self-flipping entry forces a closure
     rewrite; choose non-toolbar registration in that case.

  3. When shortcuts are disabled, toolbar behavior must be bit-for-bit
     unchanged. The matcher's `enabled`-gate already guarantees no
     dispatch; the auto-register pass is left unconditional (its only effect
     is HashMap operations on a separate ShortcutModel) so mid-session
     enable works without a reconnect. The trade-off is intentional and
     documented at the top of toolbarControls.

  4. Comments stay terse. Rationale lives in one place — the doc comment of
     the helper or registration site, not duplicated at every call site.

  5. Where an existing helper needs a new optional behavior (e.g.
     `_OptionCheckBox` gaining a tooltip slot), the new branch must reduce
     to byte-identical output for existing callers (`trailing == null`
     case → original `Expanded(Text)` layout). Verified.

  6. Action IDs and labels stay consistent. Renamed `reset_cursor` →
     `reset_canvas` so the action ID matches its user-facing label
     ("Reset canvas") and capability flag.

  Out-of-scope but included:
  - AGENTS.md: documents flutter_rust_bridge no-codegen workflow and the
    Web target's hand-written TS client, since both are load-bearing for
    any new FFI work.
  - remote_toolbar.dart: i18n fix for the per-monitor tooltip ("All
    monitors" / "Monitor #N"), unrelated to shortcuts but kept here.

* langs

* fix(keyboard): shortcuts, harden config and callback lifecycle

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(keyboard): shortcuts, color of "Reset to defaults"

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(keyboard): shortcuts, release keys before shortcut callback

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(keyboard): shortcuts, debug web

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(keyboard): iPad, icon

Signed-off-by: fufesou <linlong1266@gmail.com>

* langs: add shortcut keys to az, gl, ur

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* fix(keyboard): shortcuts, keep local modifiers and release keys on the right session

When a chord fired, the shortcut path reused release_remote_keys(), which
replays synthetic releases through process_event(). That cleared the local
MODIFIERS_STATE while the user still held the modifiers, so the next key of
a held chord no longer matched and leaked to the remote, and it sent the
releases to the globally current session instead of the one that typed the
chord.

The shortcut path now releases the remote keys itself: it sends through the
caller's session, and restores the modifiers it released on the remote as
still held locally. The press that fired is remembered until its release,
so its auto repeats and its release are consumed instead of reaching the
remote.

Also state the contract for unavailable actions: a bound chord always
belongs to RustDesk and is a no-op when the session has no handler.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* fix(keyboard): shortcuts, record the physical key

The recording dialog and the Web Flutter matcher named keys by
LogicalKeyboardKey, while the native matcher sees the physical key through
its USB HID usage and the Web JS matcher through KeyboardEvent.code. On
AZERTY, QWERTZ, Dvorak and similar layouts a recorded binding then did not
fire, or fired from another key.

Name keys by their physical position everywhere: physicalKeyName maps the
USB HID usage to the stored name. A new fixture pins every name to its USB
HID usage, checked on the Dart side and against rdev::usb_hid_key_from_code
on the Rust side, and a test covers AZERTY and QWERTZ events.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* fix(keyboard): shortcuts, keep an empty binding list on re-enable

setEnabled seeded the defaults whenever the binding list was empty, so a
user who cleared every binding got all defaults back after disable and
enable. Seed only when the config has never held a bindings list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* fix(keyboard): shortcuts, track every fired key until its release

FIRED_KEY held a single key, so overlapping shortcut keys broke it: with the
chord held, P then C overwrote P, P's release reached the remote, and a P
repeat could fire the screenshot again. A repeat after the modifiers were
released was also treated as a new press and leaked to the remote.

Keep a set of fired keys instead. Once a press fires, every event of that
key belongs to RustDesk until its release: repeats are consumed without
dispatching, whatever the modifiers do, and the release removes the key.
Entries whose release never arrives are dropped when a session view is
entered or a session is closed, not by guessing from the modifiers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* fix(keyboard): shortcuts, keep fired keys per session

FIRED_KEYS was process-global while dispatch is per session. Closing or
entering any session cleared the fired keys of all of them, so a key still
held in another session leaked its release to that remote, and a key fired
in one session made the same key in another session look like a repeat.

Key the fired set by session: try_dispatch resolves the session first and
only looks at that session's keys, and session_close clears only the
closing session. Entering a session view no longer clears anything: it is
a pointer enter, and a fired key may still be physically held across it.
A key whose release is missed otherwise heals itself: its next press is
consumed as a repeat and that release removes it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* fix(shortcuts): preserve input state and refresh action availability

* fix(keyboard): shortcuts, keep a fired key owned across session close

Close tab is itself a shortcut, so the session that consumed the key press
is gone before the key is released. Both matchers dropped the key with the
session: the Flutter dispatcher removed its own entries in clear(), and the
Rust set was keyed by session and cleared in session_close. The release,
and the repeats while the key stayed held, then reached the next session's
remote as ordinary input.

Ownership of a fired key is physical, so it is now one set shared by every
session on each side, and closing a session no longer touches it: clear()
only drops the pending action and modifier replay, and the Rust session
state only tracks released modifiers. A key whose release is missed heals
itself on its next press. Entering view-only with the Flutter input source
still clears the Rust set, since that source stops routing key events to it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* fix(keyboard): shortcuts, drop the Toggle Input Source action

The action switches the key capture backend between key down and key up.
Fired-key ownership lives in whichever matcher saw the press, the Flutter
dispatcher or the Rust set, and there is no handoff between them: after the
switch the repeats and the release of the held key reach the other backend,
which forwards them to the remote and, while the chord is held, matches the
action again and toggles the source back. Remove the shortcut instead of
building a handoff for one action. The toolbar radio menu is unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* perf(keyboard): shortcuts, parse the config once per stored value

The Flutter matcher read the local config three times and parsed its JSON
three times on every key press in legacy mode, on Web and in view-only.
Keep one parsed snapshot keyed by the raw stored string, so a key press
costs one config read and no parsing while the config is unchanged. The
existing readers are thin views of the same snapshot.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* fix(keyboard): shortcuts, run focus-changing actions on key release

Close tab and tab switching move keyboard focus to another session before
the key that fired them is released. On Linux the Flutter input source
routes map-mode sessions through the Rust matcher and legacy-mode sessions
through the Dart matcher, and neither knows the other's fired keys, so
after such an action the repeats and the release of the held key reached
the next session's remote, and the key stayed recorded as fired in the
matcher that saw the press.

Routing Linux legacy mode through the Rust FFI path instead is not a drop-in
change: the raw key handler builds its event with no unicode, so Rust's
legacy mode would fall back to US key names and lose the layout-aware
characters the Dart path sends today, and it would take modifiers from the
X11 key state instead of Flutter's.

Run these three actions when the fired key is released. The matcher that
consumed the press then also sees the repeats and the release, the remote
modifiers are still released on the press, and a session that closes drops
the action it owed. Both matchers keep the same list of actions.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* test(keyboard): shortcuts, pin the key-up action list on both sides

kShortcutActionsRunOnKeyUp and runs_on_release are two hand-kept lists of
the actions that run on key release. Add a shared fixture and check each
side against it, the way the key vocabulary and the default bindings are
already checked, so adding a focus-changing action on one side breaks a
test until the other side follows. The Dart test also checks that every
listed id is a configurable action.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ra4my61t8q1FN5n59wB16D

* fix: prevent lost input after remote session shortcuts

Avoid synthetic Alt presses that activate the Windows system menu
and swallow the next character.

Trigger restart, switch-sides, and chat actions on key release so
focus changes cannot leave subsequent shortcut presses ignored.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(mobile): correct Chat keyboard and input helper behavior

- Keep soft keyboard and helper hidden when Chat opens via shortcut
- Restore soft input on touch and remote focus after Chat closes
- Handle modifier releases while Chat owns focus
- Clear hidden virtual modifiers while preserving held keys and Pin behavior

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(shortcuts): prevent recording non-simultaneous key combinations

Build new captures from currently held keys instead of reusing released
letters. Preserve the last valid chord after release so it can be saved.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(shortcuts): isolate window actions and prevent duplicate Alt presses

- Dispatch shortcut actions only to the originating session window.
- Clear local modifier state on focus loss without resending modifiers
  already released to Windows peers, preventing lost following input.
- Strengthen the regression assertion against extra Alt keydown events

Signed-off-by: fufesou <linlong1266@gmail.com>

* refact(shortcuts): empty default shortcuts for Cmd+Option+Shift+Del on macOS and iOS

Because Del may be ambiguous for new macOS users.
Cmd+Option+Shift+Backspace is "Empty Trash without confirmation" shortcut on macOS.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: use session peer platform for Ctrl+Alt+Del events

Fix Android-to-Linux Ctrl+Alt+Del delivery by using the session's peer
platform instead of the desktop global session, which defaults to Windows

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: hide relative mouse mode shortcuts on Wayland

Separate relative mouse mode availability from screenshot support.
Filter unsupported actions and defaults while preserving saved bindings

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: align shortcut availability with platform support

- Hide unsupported mobile and web shortcut actions
- Enable mobile scaling and Android voice call shortcuts
- Use openMonitorInTheSameTab() for display switching
- Preserve cursor position when switching displays on desktop and web

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: prevent held-key shortcut recording bypass

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: preserve keyboard input after shortcut dialogs

Run native clipboard shortcuts on key release and wait for remote modifier releases before dispatching.

Release remote modifiers when mobile local UI takes focus, and document the tested iPad Bluetooth Mute shortcut limitation.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: preserve remote key state during local shortcuts

Keep unrelated held keys pressed for session actions that retain input. Preserve key release when focus or input handling changes, and avoid synthetic Alt taps during shortcut dispatch.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: suspend saved relative mouse shortcuts on Wayland

Filter the native active binding cache without changing stored configuration, so the binding becomes available again under X11.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: exclude unsupported Wayland shortcuts from Flutter matching

Keep saved bindings intact while filtering the active config used by the Flutter matcher. Cover stored bindings and enable/pass-through flags in the existing shortcut tests.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: retain forwarded key ownership across shortcut repeats

Ignore repeat presses for keys already forwarded to the peer, and release ordinary held keys before Show My Cursor enables view-only. Cover both paths with converter-level regressions.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: release Flutter-held keys before view-only shortcuts

Track ordinary keys forwarded by the Dart matcher paths and await their releases before View Only or Show My Cursor disables input. Keep Mute key ownership and existing empty-cleanup timing unchanged.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: filter active Flutter shortcuts by platform capabilities

Reuse the Settings action filter for saved bindings while preserving storage, default-seeding behavior and configurable Apple Ctrl+Alt+Del bindings.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: filter native shortcut caches for mobile controllers

Suspend saved desktop-only actions on Android and iOS and hide unavailable iOS actions without changing persisted bindings. Keep native cache filtering aligned with Flutter platform capabilities.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: share filtered shortcut bindings with the Web matcher

Pass the active platform config to JavaScript at startup and after settings changes, preserving unsupported saved bindings in local storage.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: release Flutter-held keys before focus-changing shortcuts

Drain ordinary keys owned by the original session before run-on-key-up
actions and native clipboard callbacks. Preserve Mute holds, pending-action
cancellation and Web clipboard key-down activation.

Document the required Web matcher counterpart in the bridge:
rustdesk/rustdesk-web-js@94abe431d6

Validation: 61 native Flutter tests, 32 Chrome/HTML tests, targeted analysis
and Windows debug build.

Signed-off-by: fufesou <linlong1266@gmail.com>

* refact: remove the useless comments

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: prevent Windows menu activation from Alt-only shortcuts

Neutralize the forwarded Alt with a balanced temporary Ctrl press when a consumed local shortcut releases its only modifier in Windows Map mode. Keep physical modifier tracking and normal Alt pass-through unchanged.

Add a regression covering both Alt keys, trigger repeats and the eventual physical release. Verified with 36 native shortcut tests and real Windows menu/input checks.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: prevent Alt menu activation in all keyboard modes

Extend Windows Alt-only shortcut neutralization to Translate and Legacy. Keep the temporary Ctrl packets in Map mode so Legacy modifier synchronization cannot release Alt before Ctrl.

Extend the existing regression across keyboard modes and decode scan, virtual and control-key events. Verify 36 native tests and 34 Windows menu replay cases.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: initialize outgoing chat before shortcut dispatch

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: guard Windows Alt release in Flutter legacy shortcuts

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: coordinate Web shortcut dispatch and Alt modifier cleanup

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: distinguish AltGraph from ordinary Alt shortcuts

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: dispatch macOS Web shortcuts without waiting for keyup

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: support legacy peers in privacy mode shortcut

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: exclude AltGraph from Flutter shortcut matching

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: exclude GTK AltGr input from raw shortcut matching

Signed-off-by: fufesou <linlong1266@gmail.com>

* test: trim redundant keyboard shortcut coverage

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(keyboard): prevent Cmd shortcuts from opening remote Start

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(shortcuts): guard Windows menu keys after Ctrl/Cmd swapping

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(shortcuts): align recording and display routing

Reject non-Apple AltGraph captures to match runtime filtering. Honor individual-display windows for next, previous, and all-display shortcuts.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(shortcuts): reject GTK AltGr chords in recorder

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(android): restore keyboard focus for modifier-first input

Focus the existing FlutterView when a modifier is pressed without native view focus. This restores shortcut-first input after returning to RustDesk while preserving focused inputs and normal key dispatch.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(shortcuts): release held keys before keyboard mode changes

Drain Flutter-forwarded keys before keyboard-mode shortcut actions so releases use the original encoding. This prevents held keys from remaining down after a Web Input source 2 mode change.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(i18n): use sentence case for shortcut labels

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(mobile): preserve touch modifiers in the input helper

Keep touch-selected modifiers visible after hiding the keyboard. Clear physical modifier releases locally in view-only mode so they do not reopen the helper.

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(web): preserve modifiers across Legacy-to-Map shortcuts

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(shortcuts): check support before registering all displays view

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: fufesou <linlong1266@gmail.com>
Co-authored-by: fufesou <linlong1266@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:31:44 +08:00

818 lines
55 KiB
Rust

lazy_static::lazy_static! {
pub static ref T: std::collections::HashMap<&'static str, &'static str> =
[
("Status", "Status"),
("Your Desktop", "Seu Computador"),
("desk_tip", "Seu computador pode ser acessado com este ID e senha."),
("Password", "Senha"),
("Ready", "Pronto"),
("Established", "Estabelecido"),
("connecting_status", "Conectando à rede do RustDesk..."),
("Enable service", "Habilitar Serviço"),
("Start service", "Iniciar Serviço"),
("Service is running", "Serviço está em execução"),
("Service is not running", "Serviço não está em execução"),
("not_ready_status", "Não está pronto. Por favor verifique sua conexão"),
("Control Remote Desktop", "Controle um Computador Remoto"),
("Transfer file", "Transferir arquivos"),
("Connect", "Conectar"),
("Recent sessions", "Sessões recentes"),
("Address book", "Lista de endereços"),
("Confirmation", "Confirmação"),
("TCP tunneling", "Tunelamento TCP"),
("Remove", "Remover"),
("Refresh random password", "Gerar nova senha aleatória"),
("Set your own password", "Definir sua própria senha"),
("Enable keyboard/mouse", "Habilitar teclado/mouse"),
("Enable clipboard", "Habilitar área de transferência"),
("Enable file transfer", "Habilitar transferência de arquivos"),
("Enable TCP tunneling", "Habilitar tunelamento TCP"),
("IP Whitelisting", "Lista de IPs Permitidos"),
("ID/Relay Server", "Servidor ID/Relay"),
("Import server config", "Importar Configuração do Servidor"),
("Export Server Config", "Exportar Configuração do Servidor"),
("Import server configuration successfully", "Configuração do servidor importada com sucesso"),
("Export server configuration successfully", "Configuração do servidor exportada com sucesso"),
("Invalid server configuration", "Configuração do servidor inválida"),
("Clipboard is empty", "A área de transferência está vazia"),
("Stop service", "Parar serviço"),
("Change ID", "Alterar ID"),
("Your new ID", "Seu novo ID"),
("length %min% to %max%", "tamanho %min% para %max%"),
("starts with a letter", "começa com uma letra"),
("allowed characters", "caracteres permitidos"),
("id_change_tip", "Somente os caracteres a-z, A-Z, 0-9, - (dash) e _ (sublinhado) são permitidos. A primeira letra deve ser a-z, A-Z. Comprimento entre 6 e 16."),
("Website", "Website"),
("About", "Sobre"),
("Slogan_tip", "Feito de coração neste mundo caótico!"),
("Privacy Statement", "Declaração de Privacidade"),
("Mute", "Desativar som"),
("Build Date", "Data da Build"),
("Version", "Versão"),
("Home", "Início"),
("Audio Input", "Entrada de Áudio"),
("Enhancements", "Melhorias"),
("Hardware Codec", "Codec de hardware"),
("Adaptive bitrate", "Taxa de bits adaptável"),
("ID Server", "Servidor de ID"),
("Relay Server", "Servidor de Relay"),
("API Server", "Servidor da API"),
("invalid_http", "deve iniciar com http:// ou https://"),
("Invalid IP", "IP inválido"),
("Invalid format", "Formato inválido"),
("server_not_support", "Ainda não suportado pelo servidor"),
("Not available", "Indisponível"),
("Too frequent", "Muito frequente"),
("Cancel", "Cancelar"),
("Skip", "Pular"),
("Close", "Fechar"),
("Retry", "Tentar novamente"),
("OK", "OK"),
("Password Required", "Senha necessária"),
("Please enter your password", "Por favor informe sua senha"),
("Remember password", "Lembrar senha"),
("Wrong Password", "Senha incorreta"),
("Do you want to enter again?", "Você deseja conectar novamente?"),
("Connection Error", "Erro de conexão"),
("Error", "Erro"),
("Reset by the peer", "Reiniciado pelo parceiro"),
("Connecting...", "Conectando..."),
("Connection in progress. Please wait.", "Conexão em progresso. Aguarde por favor."),
("Please try 1 minute later", "Por favor tente após 1 minuto"),
("Login Error", "Erro de login"),
("Successful", "Sucesso"),
("Connected, waiting for image...", "Conectado. Aguardando pela imagem..."),
("Name", "Nome"),
("Type", "Tipo"),
("Modified", "Modificado"),
("Size", "Tamanho"),
("Show Hidden Files", "Mostrar arquivos ocultos"),
("Receive", "Receber"),
("Send", "Enviar"),
("Refresh File", "Atualizar arquivo"),
("Local", "Local"),
("Remote", "Remoto"),
("Remote Computer", "Computador remoto"),
("Local Computer", "Computador local"),
("Confirm Delete", "Confirmar exclusão"),
("Delete", "Apagar"),
("Properties", "Propriedades"),
("Multi Select", "Seleção múltipla"),
("Select All", "Selecionar tudo"),
("Unselect All", "Desmarcar tudo"),
("Empty Directory", "Diretório vazio"),
("Not an empty directory", "Diretório não está vazio"),
("Are you sure you want to delete this file?", "Tem certeza que deseja apagar este arquivo?"),
("Are you sure you want to delete this empty directory?", "Tem certeza que deseja apagar este diretório vazio?"),
("Are you sure you want to delete the file of this directory?", "Tem certeza que deseja apagar este arquivo deste diretório?"),
("Do this for all conflicts", "Fazer isto para todos os conflitos"),
("This is irreversible!", "Isso é irreversível!"),
("Deleting", "Excluindo"),
("files", "arquivos"),
("Waiting", "Aguardando"),
("Finished", "Concluído"),
("Speed", "Velocidade"),
("Custom Image Quality", "Qualidade de imagem personalizada"),
("Privacy mode", "Modo privado"),
("Block user input", "Bloquear entrada do usuário"),
("Unblock user input", "Desbloquear entrada do usuário"),
("Adjust Window", "Ajustar Janela"),
("Original", "Original"),
("Shrink", "Reduzir"),
("Stretch", "Aumentar"),
("Scrollbar", "Barra de rolagem"),
("ScrollAuto", "Rolagem automática"),
("Good image quality", "Melhor qualidade"),
("Balanced", "Balanceada"),
("Optimize reaction time", "Otimizar tempo de resposta"),
("Custom", "Personalizada"),
("Show remote cursor", "Mostrar cursor remoto"),
("Show quality monitor", "Exibir monitor de qualidade"),
("Disable clipboard", "Desabilitar área de transferência"),
("Lock after session end", "Bloquear após o fim da sessão"),
("Insert Ctrl + Alt + Del", "Enviar Ctrl+Alt+Del"),
("Insert Lock", "Bloquear computador"),
("Refresh", "Atualizar"),
("ID does not exist", "ID não existe"),
("Failed to connect to rendezvous server", "Falha ao conectar ao servidor de rendezvous"),
("Please try later", "Por favor tente mais tarde"),
("Remote desktop is offline", "O computador remoto está offline"),
("Key mismatch", "Chaves incompatíveis"),
("Timeout", "Tempo esgotado"),
("Failed to connect to relay server", "Falha ao conectar ao servidor de relay"),
("Failed to connect via rendezvous server", "Falha ao conectar ao servidor de rendezvous"),
("Failed to connect via relay server", "Falha ao conectar através do servidor de relay"),
("Failed to make direct connection to remote desktop", "Falha ao fazer conexão direta ao desktop remoto"),
("Set Password", "Definir Senha"),
("OS Password", "Senha do Sistema"),
("install_tip", "Devido ao UAC, o RustDesk não funciona corretamente como o lado remoto em alguns casos. Para evitar o UAC, por favor clique no botão abaixo para instalar o RustDesk no sistema."),
("Click to upgrade", "Iniciar atualização"),
("Configure", "Configurar"),
("config_acc", "Para controlar seu computador remotamente, você precisa conceder ao RustDesk permissões de \"Acessibilidade\"."),
("config_screen", "Para acessar seu computador remotamente, você precisa conceder ao RustDesk permissões de \"Gravar a Tela\""),
("Installing ...", "Instalando ..."),
("Install", "Instalar"),
("Installation", "Instalação"),
("Installation Path", "Caminho da Instalação"),
("Create start menu shortcuts", "Criar atalhos no Menu Iniciar"),
("Create desktop icon", "Criar ícone na Área de Trabalho"),
("agreement_tip", "Ao iniciar a instalação, você concorda com o acordo de licença."),
("Accept and Install", "Aceitar e Instalar"),
("End-user license agreement", "Acordo de licença do usuário final"),
("Generating ...", "Gerando ..."),
("Your installation is lower version.", "Sua instalação está com uma versão desatualizada."),
("not_close_tcp_tip", "Não feche esta janela enquanto estiver utilizando o túnel"),
("Listening ...", "Escutando ..."),
("Remote Host", "Host Remoto"),
("Remote Port", "Porta Remota"),
("Action", "Ação"),
("Add", "Adicionar"),
("Local Port", "Porta Local"),
("Local Address", "Endereço Local"),
("Change Local Port", "Alterar Porta Local"),
("setup_server_tip", "Para uma conexão mais rápida, por favor configure seu próprio servidor"),
("Too short, at least 6 characters.", "Muito curto, pelo menos 6 caracteres."),
("The confirmation is not identical.", "A confirmação não é idêntica."),
("Permissions", "Permissões"),
("Accept", "Aceitar"),
("Dismiss", "Dispensar"),
("Disconnect", "Desconectar"),
("Enable file copy and paste", "Permitir copiar e colar arquivos"),
("Connected", "Conectado"),
("Direct and encrypted connection", "Conexão direta e criptografada"),
("Relayed and encrypted connection", "Conexão via relay e criptografada"),
("Direct and unencrypted connection", "Conexão direta e não criptografada"),
("Relayed and unencrypted connection", "Conexão via relay e não criptografada"),
("Enter Remote ID", "Informe o ID Remoto"),
("Enter your password", "Informe sua senha"),
("Logging in...", "Fazendo Login..."),
("Enable RDP session sharing", "Habilitar compartilhamento de sessão RDP"),
("Auto Login", "Login Automático (Somente válido se você habilitou \"Bloquear após o fim da sessão\")"),
("Enable direct IP access", "Habilitar Acesso IP Direto"),
("Rename", "Renomear"),
("Space", "Espaço"),
("Create desktop shortcut", "Criar Atalho na Área de Trabalho"),
("Change Path", "Alterar Caminho"),
("Create Folder", "Criar Diretório"),
("Please enter the folder name", "Por favor informe o nome do diretório"),
("Fix it", "Corrigir"),
("Warning", "Aviso"),
("Login screen using Wayland is not supported", "Tela de Login utilizando Wayland não é suportada"),
("Reboot required", "Reinicialização necessária"),
("Unsupported display server", "Servidor gráfico não suportado"),
("x11 expected", "Necessário x11"),
("Port", "Porta"),
("Settings", "Configurações"),
("Username", "Nome de usuário"),
("Invalid port", "Porta inválida"),
("Closed manually by the peer", "Fechada manualmente pelo parceiro"),
("Enable remote configuration modification", "Habilitar modificações de configuração remotas"),
("Run without install", "Executar sem instalar"),
("Connect via relay", "Conectar via relay"),
("Always connect via relay", "Sempre conectar via relay"),
("whitelist_tip", "Somente IPs confiáveis podem me acessar"),
("Login", "Login"),
("Verify", "Verificar"),
("Remember me", "Lembrar de mim"),
("Trust this device", "Confiar neste dispositivo"),
("Verification code", "Código de verificação"),
("verification_tip", "Um novo dispositivo foi detectado e um código de verificação foi enviado para o endereço de e-mail registrado, insira o código de verificação para continuar o login."),
("Logout", "Sair"),
("Tags", "Tags"),
("Search ID", "Pesquisar ID"),
("whitelist_sep", "Separado por vírgula, ponto e vírgula, espaços ou nova linha"),
("Add ID", "Adicionar ID"),
("Add Tag", "Adicionar Tag"),
("Unselect all tags", "Desmarcar todas as tags"),
("Network error", "Erro de rede"),
("Username missed", "Nome de usuário obrigatório"),
("Password missed", "Senha obrigatória"),
("Wrong credentials", "Nome de usuário ou senha incorretos"),
("The verification code is incorrect or has expired", "O código de verificação está incorreto ou expirou"),
("Edit Tag", "Editar Tag"),
("Forget Password", "Esqueci Minha Senha"),
("Favorites", "Favoritos"),
("Add to Favorites", "Adicionar aos Favoritos"),
("Remove from Favorites", "Remover dos Favoritos"),
("Empty", "Vazio"),
("Invalid folder name", "Nome de diretório inválido"),
("Socks5 Proxy", "Proxy Socks5"),
("Socks5/Http(s) Proxy", "Proxy Socks5/Http(s)"),
("Discovered", "Descoberto"),
("install_daemon_tip", "Para inicialização junto ao sistema, você deve instalar o serviço de sistema."),
("Remote ID", "ID Remoto"),
("Paste", "Colar"),
("Paste here?", "Colar aqui?"),
("Are you sure to close the connection?", "Tem certeza que deseja fechar a conexão?"),
("Download new version", "Baixar nova versão"),
("Touch mode", "Modo toque"),
("Mouse mode", "Modo mouse"),
("One-Finger Tap", "Toque com um dedo"),
("Left Mouse", "Botão esquerdo do mouse"),
("One-Long Tap", "Um toque longo"),
("Two-Finger Tap", "Toque com dois dedos"),
("Right Mouse", "Botão direito do mouse"),
("One-Finger Move", "Mover com um dedo"),
("Double Tap & Move", "Toque duplo & mover"),
("Mouse Drag", "Arrastar com o mouse"),
("Three-Finger vertically", "Três dedos verticalmente"),
("Mouse Wheel", "Roda do Mouse"),
("Two-Finger Move", "Mover com dois dedos"),
("Canvas Move", "Mover Tela"),
("Pinch to Zoom", "Pinçar para Zoom"),
("Canvas Zoom", "Zoom na tela"),
("Reset canvas", "Reiniciar tela"),
("No permission of file transfer", "Sem permissão para transferência de arquivo"),
("Note", "Anotações"),
("Connection", "Conexão"),
("Share screen", "Compartilhar Tela"),
("Chat", "Chat"),
("Total", "Total"),
("items", "itens"),
("Selected", "Selecionado"),
("Screen Capture", "Captura de Tela"),
("Input Control", "Controle de Entrada"),
("Audio Capture", "Captura de Áudio"),
("Do you accept?", "Você aceita?"),
("Open System Setting", "Abrir Configurações do Sistema"),
("How to get Android input permission?", "Como habilitar a permissão de entrada do Android?"),
("android_input_permission_tip1", "Para que um dispositivo remoto controle seu dispositivo Android via mouse ou toque, você precisa permitir que o RustDesk use o serviço \"Acessibilidade\"."),
("android_input_permission_tip2", "Por favor vá para a próxima página de configuração do sistema, encontre e entre [Serviços Instalados], HABILITE o serviço [RustDesk Input]."),
("android_new_connection_tip", "Nova requisição de controle recebida, solicita o controle de seu dispositivo atual."),
("android_service_will_start_tip", "Habilitar a Captura de Tela irá automaticamente inicalizar o serviço, permitindo que outros dispositivos solicitem uma conexão deste dispositivo."),
("android_stop_service_tip", "Fechar o serviço irá automaticamente fechar todas as conexões estabelecidas."),
("android_version_audio_tip", "A versão atual do Android não suporta captura de áudio, por favor atualize para o Android 10 ou superior."),
("android_start_service_tip", "Toque em [Iniciar Serviço] ou habilite a permissão [Captura de Tela] para iniciar o serviço de compartilhamento de tela."),
("android_permission_may_not_change_tip", "As permissões para conexões estabelecidas podem não ser alteradas instantaneamente até que seja reconectado."),
("Account", "Conta"),
("Overwrite", "Substituir"),
("This file exists, skip or overwrite this file?", "Este arquivo existe, pular ou substituir este arquivo?"),
("Quit", "Sair"),
("Help", "Ajuda"),
("Failed", "Falhou"),
("Succeeded", "Sucesso"),
("Someone turns on privacy mode, exit", "Alguém habilitou o modo de privacidade, sair"),
("Unsupported", "Não suportado"),
("Peer denied", "Parceiro negou"),
("Peer exit", "Parceiro saiu"),
("Failed to turn off", "Falha ao desligar"),
("Turned off", "Desligado"),
("Language", "Idioma"),
("Keep RustDesk background service", "Manter o serviço do RustDesk executando em segundo plano"),
("Ignore Battery Optimizations", "Ignorar otimizações de bateria"),
("android_open_battery_optimizations_tip", "Abrir otimizações de bateria"),
("Start on boot", "Iniciar na Inicialização"),
("Start the screen sharing service on boot, requires special permissions", "Inicie o serviço de compartilhamento de tela na inicialização, requer permissões especiais"),
("Connection not allowed", "Conexão não permitida"),
("Legacy mode", "Modo legado"),
("Map mode", "Modo mapa"),
("Translate mode", "Modo traduzido"),
("Use permanent password", "Utilizar senha permanente"),
("Use both passwords", "Utilizar ambas as senhas"),
("Set permanent password", "Configurar senha permanente"),
("Enable remote restart", "Habilitar reinicialização remota"),
("Restart remote device", "Reiniciar dispositivo remoto"),
("Are you sure you want to restart", "Você tem certeza que deseja reiniciar?"),
("Restarting remote device", "Reiniciando dispositivo remoto"),
("remote_restarting_tip", "O dispositivo remoto está reiniciando, feche esta caixa de mensagem e reconecte com a senha permanente depois de um tempo"),
("Copied", "Copiado"),
("Exit Fullscreen", "Sair da Tela Cheia"),
("Fullscreen", "Tela Cheia"),
("Mobile Actions", "Ações móveis"),
("Select Monitor", "Selecionar tela"),
("Control Actions", "Ações de controle"),
("Display Settings", "Configurações de exibição"),
("Ratio", "Proporção"),
("Image Quality", "Qualidade de imagem"),
("Scroll Style", "Estilo de rolagem"),
("Show Toolbar", "Mostrar barra de ferramentas"),
("Hide Toolbar", "Ocultar barra de ferramentas"),
("Direct Connection", "Conexão Direta"),
("Relay Connection", "Conexão via Relay"),
("Secure Connection", "Conexão Segura"),
("Insecure Connection", "Conexão Insegura"),
("Scale original", "Escala original"),
("Scale adaptive", "Escala adaptada"),
("General", "Geral"),
("Security", "Segurança"),
("Theme", "Tema"),
("Dark Theme", "Tema Escuro"),
("Light Theme", "Tema Claro"),
("Dark", "Escuro"),
("Light", "Claro"),
("Follow System", "Padrão do sistema"),
("Enable hardware codec", "Habilitar codec de hardware"),
("Unlock Security Settings", "Desbloquear configurações de segurança"),
("Enable audio", "Habilitar áudio"),
("Unlock Network Settings", "Desbloquear configurações de rede"),
("Server", "Servidor"),
("Direct IP Access", "Acesso direto por IP"),
("Proxy", "Proxy"),
("Apply", "Aplicar"),
("Disconnect all devices?", "Desconectar todos os dispositivos?"),
("Clear", "Limpar"),
("Audio Input Device", "Dispositivo de entrada de áudio"),
("Use IP Whitelisting", "Utilizar lista de IPs permitidos"),
("Network", "Rede"),
("Pin Toolbar", "Fixar barra de ferramentas"),
("Unpin Toolbar", "Desafixar barra de ferramentas"),
("Recording", "Gravando"),
("Directory", "Diretório"),
("Automatically record incoming sessions", "Gravar automaticamente sessões de entrada"),
("Automatically record outgoing sessions", "Gravar automaticamente sessões de saída"),
("Change", "Alterar"),
("Start session recording", "Iniciar gravação da sessão"),
("Stop session recording", "Parar gravação da sessão"),
("Enable recording session", "Habilitar gravação da sessão"),
("Enable LAN discovery", "Habilitar descoberta da LAN"),
("Deny LAN discovery", "Negar descoberta da LAN"),
("Write a message", "Escrever uma mensagem"),
("Prompt", "Prompt de comando"),
("Please wait for confirmation of UAC...", "Favor aguardar a confirmação do UAC..."),
("elevated_foreground_window_tip", "A janela atual da área de trabalho remota requer privilégios mais altos para operar, portanto, não é possível usar o mouse e o teclado temporariamente. Você pode solicitar ao usuário remoto para minimizar a janela atual ou clicar no botão de elevação na janela de gerenciamento de conexão. Para evitar esse problema, é recomendável instalar o software no dispositivo remoto."),
("Disconnected", "Desconectado"),
("Other", "Outro"),
("Confirm before closing multiple tabs", "Confirmar antes de fechar múltiplas abas"),
("Keyboard Settings", "Configurações de teclado"),
("Full Access", "Acesso completo"),
("Screen Share", "Compartilhamento de tela"),
("ubuntu-21-04-required", "Wayland requer Ubuntu 21.04 ou versão superior."),
("wayland-requires-higher-linux-version", "Wayland requer uma versão superior da distribuição linux. Por favor, tente o desktop X11 ou mude seu sistema operacional."),
("xdp-portal-unavailable", "A captura de tela do Wayland falhou. O XDG Desktop Portal pode ter travado ou estar indisponível. Tente reiniciá-lo com `systemctl --user restart xdg-desktop-portal`."),
("JumpLink", "JumpLink"),
("Please Select the screen to be shared(Operate on the peer side).", "Por favor, selecione a tela a ser compartilhada (operar no lado do parceiro)."),
("Show RustDesk", "Exibir RustDesk"),
("This PC", "Este Computador"),
("or", "ou"),
("Elevate", "Elevar"),
("Zoom cursor", "Aumentar cursor"),
("Accept sessions via password", "Aceitar sessões via senha"),
("Accept sessions via click", "Aceitar sessões via clique"),
("Accept sessions via both", "Aceitar sessões de ambos os modos"),
("Please wait for the remote side to accept your session request...", "Por favor aguarde enquanto o cliente remoto aceita seu pedido de sessão..."),
("One-time Password", "Senha de uso único"),
("Use one-time password", "Usar senha de uso único"),
("One-time password length", "Comprimento da senha de uso único"),
("Request access to your device", "Solicitar acesso ao seu dispositivo"),
("Hide connection management window", "Ocultar janela de gerenciamento de conexão"),
("hide_cm_tip", "Permitir ocultação somente se aceitar sessões via senha e usar senha permanente"),
("wayland_experiment_tip", "O suporte ao Wayland está em estágio experimental, use o X11 se precisar de acesso autônomo."),
("Right click to select tabs", "Clique com o botão direito para selecionar as guias"),
("Skipped", "Ignorado"),
("Add to address book", "Adicionar ao livro de endereços"),
("Group", "Grupo"),
("Search", "Buscar"),
("Closed manually by web console", "Fechado manualmente pelo console da web"),
("Local keyboard type", "Tipo de teclado local"),
("Select local keyboard type", "Selecione o tipo de teclado local"),
("software_render_tip", "Se você tiver uma placa gráfica Nvidia e a janela remota fechar imediatamente após a conexão, instalar o driver nouveau e optar por usar a renderização de software pode ajudar. É necessário reiniciar o software."),
("Always use software rendering", "Sempre utilizar renderização de software"),
("config_input", "Para controlar a área de trabalho remota com teclado, você precisa conceder a permissão \"Monitoramento de entrada\" do RustDesk."),
("config_microphone", "Para falar remotamente, você precisa conceder a permissão \"Gravar áudio\" do RustDesk."),
("request_elevation_tip", "Você também pode solicitar elevação se houver alguém do lado remoto."),
("Wait", "Espera"),
("Elevation Error", "Erro de Elevação"),
("Ask the remote user for authentication", "Peça autenticação ao usuário remoto"),
("Choose this if the remote account is administrator", "Escolha isto se a conta remota for administrador"),
("Transmit the username and password of administrator", "Transmita o nome de usuário e a senha do administrador"),
("still_click_uac_tip", "Ainda requer que o usuário remoto clique em OK na janela UAC da execução do RustDesk."),
("Request Elevation", "Pedir Elevação"),
("wait_accept_uac_tip", "Aguarde até que o usuário remoto aceite a caixa de diálogo do UAC."),
("Elevate successfully", "Elevado com sucesso"),
("uppercase", "maiúsculo"),
("lowercase", "minúsculo"),
("digit", "dígito"),
("special character", "caractere especial"),
("length>=8", "tamanho>=8"),
("Weak", "Fraco"),
("Medium", "Médio"),
("Strong", "Forte"),
("Switch Sides", "Trocar de lado"),
("Please confirm if you want to share your desktop?", "Por favor, confirme se você deseja compartilhar sua área de trabalho?"),
("Display", "Exibição"),
("Default View Style", "Estilo de Visualização Padrão"),
("Default Scroll Style", "Estilo de Rolagem Padrão"),
("Default Image Quality", "Qualidade de Imagem Padrão"),
("Default Codec", "Codec Padrão"),
("Bitrate", "Bitrate"),
("FPS", "FPS"),
("Auto", "Automático"),
("Other Default Options", "Outras Opções Padrão"),
("Voice call", "Chamada de voz"),
("Text chat", "Chat de texto"),
("Stop voice call", "Parar chamada de voz"),
("relay_hint_tip", "Pode não ser possível conectar diretamente, você pode tentar conectar via relay. \nAlém disso, se você quiser usar o relay em sua primeira tentativa, pode adicionar o sufixo \"/r\" ao ID ou selecionar a opção \"Sempre conectar via relay\" no cartão do parceiro."),
("Reconnect", "Reconectar"),
("Codec", "Codec"),
("Resolution", "Resolução"),
("No transfers in progress", "Nenhuma transferência em andamento"),
("Set one-time password length", "Definir comprimento de senha descartável"),
("RDP Settings", "Configurações RDP"),
("Sort by", "Ordenar por"),
("New Connection", "Nova Conexão"),
("Restore", "Restaurar"),
("Minimize", "Minimizar"),
("Maximize", "Maximizar"),
("Your Device", "Seu Dispositivo"),
("empty_recent_tip", "Ops, não há sessões recentes!\nHora de planejar uma nova."),
("empty_favorite_tip", "Ainda não há parceiros favoritos?\nVamos encontrar alguém para se conectar e adicioná-lo aos seus favoritos!"),
("empty_lan_tip", "Ah não, parece que ainda não descobrimos nenhum parceiro."),
("empty_address_book_tip", "Oh céus, parece que atualmente não há parceiros listados em seu catálogo de endereços."),
("Empty Username", "Nome de Usuário vazio"),
("Empty Password", "Senha Vazia"),
("Me", "Eu"),
("identical_file_tip", "Este arquivo é idêntico ao do parceiro."),
("show_monitors_tip", "Mostrar telas na barra de ferramentas"),
("View Mode", "Modo de visualização"),
("verify_rustdesk_password_tip", "Verifique a senha do RustDesk"),
("No need to elevate", "Não há necessidade de elevar"),
("System Sound", "Som do Sistema"),
("Default", "Padrão"),
("New RDP", "Novo RDP"),
("Fingerprint", "Impressão Digital"),
("Copy Fingerprint", "Copiar Impressão Digital"),
("no fingerprints", "sem Impressões Digitais"),
("Update", "Atualizar"),
("resolution_original_tip", "Resolução original"),
("resolution_fit_local_tip", "Adequar à resolução local"),
("resolution_custom_tip", "Customizar resolução"),
("Collapse toolbar", "Ocultar barra de ferramentas"),
("Accept and Elevate", "Aceitar e elevar"),
("accept_and_elevate_btn_tooltip", "Aceitar a conexão e elevar os privilégios do UAC."),
("clipboard_wait_response_timeout_tip", "Tempo de espera para a resposta da área de transferência expirado."),
("Incoming connection", "Conexão de entrada"),
("Outgoing connection", "Conexão de saída"),
("Exit", "Sair"),
("Open", "Abrir"),
("logout_tip", "Tem certeza que deseja sair?"),
("Service", "Serviço"),
("Start", "Iniciar"),
("Stop", "Parar"),
("exceed_max_devices", "Você atingiu o número máximo de dispositivos gerenciados."),
("Sync with recent sessions", "Sincronizar com sessões recentes"),
("Sort tags", "Classificar tags"),
("Open connection in new tab", "Abrir conexão em uma nova aba"),
("Move tab to new window", "Mover aba para uma nova janela"),
("Can not be empty", "Não pode estar vazio"),
("Already exists", "Já existe"),
("Change Password", "Alterar senha"),
("Refresh Password", "Atualizar senha"),
("ID", "ID"),
("Grid View", "Visualização em grade"),
("List View", "Visualização em lista"),
("Select", "Selecionar"),
("Toggle Tags", "Alternar etiquetas"),
("pull_ab_failed_tip", "Não foi possível atualizar o diretório"),
("push_ab_failed_tip", "Não foi possível sincronizar o diretório com o servidor"),
("synced_peer_readded_tip", "Os dispositivos presentes em sessões recentes serão sincronizados com o diretório."),
("Change Color", "Alterar cor"),
("Primary Color", "Cor principal"),
("HSV Color", "Cor HSV"),
("Installation Successful!", "Instalação bem-sucedida!"),
("Installation failed!", "A instalação falhou!"),
("Reverse mouse wheel", "Inverter rolagem do mouse"),
("{} sessions", "{} sessões"),
("scam_title", "Você pode estar sendo ENGANADO!"),
("scam_text1", "Se você estiver ao telefone com alguém que NÃO conhece e em quem NÃO confia e essa pessoa pedir para você usar o RustDesk e iniciar o serviço, NÃO faça isso !! e desligue imediatamente."),
("scam_text2", "Provavelmente são golpistas tentando roubar seu dinheiro ou informações privadas."),
("Don't show again", "Não mostrar novamente"),
("I Agree", "Eu concordo"),
("Decline", "Recusar"),
("Timeout in minutes", "Tempo limite em minutos"),
("auto_disconnect_option_tip", "Encerrar sessões entrantes automaticamente por inatividade."),
("Connection failed due to inactivity", "Conexão encerrada automaticamente por inatividade."),
("Check for software update on startup", "Verificar atualizações do software ao iniciar"),
("upgrade_rustdesk_server_pro_to_{}_tip", "Atualize o RustDesk Server Pro para a versão {} ou superior."),
("pull_group_failed_tip", "Não foi possível atualizar o grupo."),
("Filter by intersection", "Filtrar por interseção"),
("Remove wallpaper during incoming sessions", "Remover papel de parede durante sessão remota"),
("Test", "Teste"),
("display_is_plugged_out_msg", "A tela está desconectada. Mudando para a principal."),
("No displays", "Nenhum display encontrado"),
("Open in new window", "Abrir em uma nova janela"),
("Show displays as individual windows", "Mostrar as telas como janelas individuais"),
("Use all my displays for the remote session", "Usar todas as telas na sessão remota"),
("selinux_tip", "O SELinux está ativado em seu dispositivo, o que pode impedir que o RustDesk funcione corretamente como dispositivo controlado."),
("Change view", "Alterar visualização"),
("Big tiles", "Ícones grandes"),
("Small tiles", "Ícones pequenos"),
("List", "Lista"),
("Virtual display", "Tela virtual"),
("Plug out all", "Desconectar tudo"),
("True color (4:4:4)", "Cor verdadeira (4:4:4)"),
("Enable blocking user input", "Habilitar bloqueio da entrada do usuário"),
("id_input_tip", "Você pode inserir um ID, um IP direto ou um domínio com uma porta (<domínio>:<porta>).\nPara acessar um dispositivo em outro servidor, adicione o IP do servidor (<id>@<endereço_servidor>?key=<chave_valor>), por exemplo,\n9123456234@192.168.16.1:21117?key=5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM=.\nPara acessar um dispositivo em um servidor público, insira \"<id>@public\", a chave não é necessária para um servidor público."),
("privacy_mode_impl_mag_tip", "Modo 1"),
("privacy_mode_impl_virtual_display_tip", "Modo 2"),
("Enter privacy mode", "Entrar no modo privado"),
("Exit privacy mode", "Sair do modo privado"),
("idd_not_support_under_win10_2004_tip", "O driver de tela indireto não é suportado. É necessário o Windows 10, versão 2004 ou superior."),
("input_source_1_tip", "Fonte de entrada 1"),
("input_source_2_tip", "Fonte de entrada 2"),
("Swap control-command key", "Trocar teclas Control e Comando"),
("swap-left-right-mouse", "Trocar botões esquerdo e direito do mouse"),
("2FA code", "Código 2FA"),
("More", "Mais"),
("enable-2fa-title", "Habilitar autenticação em duas etapas"),
("enable-2fa-desc", "Configure seu autenticador agora. Você pode usar um aplicativo de autenticação como Authy, Microsoft ou Google Authenticator em seu telefone ou computador. Escaneie o código QR com seu aplicativo e insira o código mostrado para habilitar a autenticação em duas etapas."),
("wrong-2fa-code", "Código inválido. Verifique se o código e as configurações de horário estão corretas."),
("enter-2fa-title", "Autenticação em duas etapas"),
("Email verification code must be 6 characters.", "O código de verificação por e-mail deve ter 6 caracteres."),
("2FA code must be 6 digits.", "O código 2FA deve ter 6 dígitos."),
("Multiple Windows sessions found", "Múltiplas sessões de janela encontradas"),
("Please select the session you want to connect to", "Por favor, selecione a sessão que você deseja se conectar"),
("powered_by_me", "Desenvolvido por RustDesk"),
("outgoing_only_desk_tip", "Esta é uma edição personalizada.\nVocê pode se conectar a outros dispositivos, mas eles não podem se conectar ao seu."),
("preset_password_warning", "Atenção: esta edição personalizada vem com uma senha predefinida. Qualquer pessoa que a conhecer poderá controlar totalmente seu dispositivo. Se isso não for o que você deseja, desinstale o software imediatamente."),
("Security Alert", "Alerta de Segurança"),
("My address book", "Minha lista de contatos"),
("Personal", "Pessoal"),
("Owner", "Proprietário"),
("Set shared password", "Definir senha compartilhada"),
("Exist in", "Existe em"),
("Read-only", "Apenas leitura"),
("Read/Write", "Leitura/escrita"),
("Full Control", "Controle total"),
("share_warning_tip", "Os campos mostrados acima são compartilhados e visíveis por outras pessoas."),
("Everyone", "Todos"),
("ab_web_console_tip", "Mais opções no console web"),
("allow-only-conn-window-open-tip", "Permitir conexões somente com o RustDesk aberto"),
("no_need_privacy_mode_no_physical_displays_tip", "Sem telas físicas, o modo privado não é necessário"),
("Follow remote cursor", "Seguir cursor remoto"),
("Follow remote window focus", "Seguir janela remota ativa"),
("default_proxy_tip", "O protocolo e a porta padrão são Socks5 e 1080"),
("no_audio_input_device_tip", "Nenhum dispositivo de entrada de áudio encontrado"),
("Incoming", "Entrada"),
("Outgoing", "Saída"),
("Clear Wayland screen selection", "Limpar seleção de tela do Wayland"),
("clear_Wayland_screen_selection_tip", "Depois de limpar a seleção de tela, você pode selecioná-la novamente para compartilhar."),
("confirm_clear_Wayland_screen_selection_tip", "Tem certeza que deseja limpar a seleção da tela do Wayland?"),
("android_new_voice_call_tip", "Uma nova solicitação de chamada de voz foi recebida. Se você aceitar, o áudio será alternado para comunicação por voz."),
("texture_render_tip", "Use renderização de textura para tornar as imagens mais suaves"),
("Use texture rendering", "Usar renderização de textura"),
("Floating window", "Janela flutuante"),
("floating_window_tip", "Ajuda a manter o serviço RustDesk em segundo plano"),
("Keep screen on", "Manter tela ligada"),
("Never", "Nunca"),
("During controlled", "Durante controle"),
("During service is on", "Enquanto o serviço estiver ativo"),
("Capture screen using DirectX", "Capturar tela usando DirectX"),
("Back", "Voltar"),
("Apps", "Apps"),
("Volume up", "Aumentar volume"),
("Volume down", "Diminuir volume"),
("Power", "Energia"),
("Telegram bot", "Bot Telegram"),
("enable-bot-tip", "Se você ativar este recurso, poderá receber o código 2FA do seu bot. Ele também pode funcionar como uma notificação de conexão."),
("enable-bot-desc", "1. Abra um chat com @BotFather.\n2. Envie o comando \"/newbot\". Você receberá um token após completar esta etapa.\n3. Inicie um chat com o seu bot recém-criado. Envie uma mensagem começando com uma barra invertida (\"/\"), como \"/hello\", para ativá-lo.\n"),
("cancel-2fa-confirm-tip", "Tem certeza de que deseja cancelar a 2FA?"),
("cancel-bot-confirm-tip", "Tem certeza de que deseja cancelar o bot do Telegram?"),
("About RustDesk", "Sobre RustDesk"),
("Send clipboard keystrokes", "Colar área de transferência"),
("network_error_tip", "Por favor, verifique sua conexão de rede e clique em tentar novamente."),
("Unlock with PIN", "Desbloquear com PIN"),
("Requires at least {} characters", "São necessários pelo menos {} caracteres"),
("Wrong PIN", "PIN Errado"),
("Set PIN", "Definir PIN"),
("Enable trusted devices", "Habilitar dispositivos confiáveis"),
("Manage trusted devices", "Gerenciar dispositivos confiáveis"),
("Platform", "Plataforma"),
("Days remaining", "Dias restantes"),
("enable-trusted-devices-tip", "Ignore a verificação de dois fatores em dispositivos confiáveis"),
("Parent directory", "Diretório pai"),
("Resume", "Continuar"),
("Invalid file name", "Nome de arquivo inválido"),
("one-way-file-transfer-tip", "A transferência de arquivos unidirecional está ativada no dispositivo controlado."),
("Authentication Required", "Autenticação necessária"),
("Authenticate", "Autenticar"),
("web_id_input_tip", "Você pode inserir um ID no mesmo servidor; o acesso direto por IP não é suportado no cliente web.\nSe desejar acessar um dispositivo em outro servidor, por favor, adicione o endereço do servidor (<id>@<endereço_servidor>?key=<valor_chave>), por exemplo,\n9123456234@192.168.16.1:21117?key=5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM=.\nSe desejar acessar um dispositivo em um servidor público, por favor, insira \"<id>@public\", a chave não é necessária para servidores públicos."),
("Download", "Baixar"),
("Upload folder", "Carregar pasta"),
("Upload files", "Carregar arquivos"),
("Clipboard is synchronized", "A área de transferência está sincronizada"),
("Update client clipboard", "Atualizar a área de transferência do cliente"),
("Untagged", "Sem etiqueta"),
("new-version-of-{}-tip", "Uma nova versão de {} está disponível"),
("Accessible devices", "Dispositivos acessíveis"),
("upgrade_remote_rustdesk_client_to_{}_tip", "Atualize o cliente RustDesk para a versão {} ou superior no lado remoto."),
("d3d_render_tip", "Em algumas máquinas, a tela do controle remoto pode ficar preta ao usar a renderização D3D."),
("Use D3D rendering", "Usar renderização D3D"),
("Printer", "Impressora"),
("printer-os-requirement-tip", "A função de impressão de saída requer Windows 10 ou superior."),
("printer-requires-installed-{}-client-tip", "{} deve ser instalado neste dispositivo antes que você possa usar a impressão remota."),
("printer-{}-not-installed-tip", "A impressora {} não está instalada."),
("printer-{}-ready-tip", "A impressora {} está instalada e operacional."),
("Install {} Printer", "Instalar impressora {}"),
("Outgoing Print Jobs", "Trabalhos de impressão enviados"),
("Incoming Print Jobs", "Trabalhos de impressão recebidos"),
("Incoming Print Job", "Impressão recebida"),
("use-the-default-printer-tip", "Usar impressora padrão"),
("use-the-selected-printer-tip", "Usar impressora selecionada"),
("auto-print-tip", "Imprimir automaticamente usando a impressora selecionada."),
("print-incoming-job-confirm-tip", "O dispositivo remoto enviou uma impressão. Deseja imprimir?"),
("remote-printing-disallowed-tile-tip", "Impressão remota não permitida"),
("remote-printing-disallowed-text-tip", "As configurações do dispositivo controlado não permitem impressão remota."),
("save-settings-tip", "Salvar configurações"),
("dont-show-again-tip", "Não mostrar novamente"),
("Take screenshot", "Capturar tela"),
("Taking screenshot", "Capturando tela"),
("screenshot-merged-screen-not-supported-tip", "A captura de tela de múltiplas telas não é suportada no momento. Por favor, alterne para uma única tela e tente novamente."),
("screenshot-action-tip", "Por favor, selecione como deseja continuar com a captura de tela."),
("Save as", "Salvar como"),
("Export", "Exportar"),
("Export Logs", "Exportar logs"),
("Import Folder", "Importar pasta"),
("Copy to clipboard", "Copiar para área de transferência"),
("Enable remote printer", "Habilitar impressora remota"),
("Downloading {}", "Baixando {}"),
("{} Update", "Atualização do {}"),
("{}-to-update-tip", "{} será fechado agora para instalar a nova versão."),
("download-new-version-failed-tip", "Falha no download. Você pode tentar novamente ou clicar no botão \"Download\" para baixar da página releases e atualizar manualmente."),
("Auto update", "Atualização automática"),
("update-failed-check-msi-tip", "Falha na verificação do método de instalação. Clique no botão \"Download\" para baixar da página releases e atualizar manualmente."),
("websocket_tip", "Usando WebSocket, apenas conexões via relay são suportadas."),
("Use WebSocket", "Usar WebSocket"),
("Trackpad speed", "Velocidade do trackpad"),
("Default trackpad speed", "Velocidade padrão do trackpad"),
("Numeric one-time password", "Senha numérica de uso único"),
("Enable IPv6 P2P connection", "Habilitar conexão IPv6 P2P"),
("Enable UDP hole punching", "Habilitar UDP hole punching"),
("View camera", "Visualizar câmera"),
("Enable camera", "Habilitar câmera"),
("No cameras", "Nenhuma câmera"),
("view_camera_unsupported_tip", "O dispositivo remoto não suporta visualização da câmera."),
("Terminal", "Terminal"),
("Enable terminal", "Habilitar terminal"),
("New tab", "Nova aba"),
("Keep terminal sessions on disconnect", "Manter sessões de terminal ao desconectar"),
("Terminal (Run as administrator)", "Terminal (Executar como administrador)"),
("terminal-admin-login-tip", "Insira o nome do usuário e senha de administrador do dispositivo controlado."),
("Failed to get user token.", "Falha ao obter token do usuário."),
("Incorrect username or password.", "Usuário ou senha incorretos"),
("The user is not an administrator.", "O usuário não é administrador"),
("Failed to check if the user is an administrator.", "Falha ao verificar se o usuário é administrador"),
("Supported only in the installed version.", "Suportado somente na versão instalada"),
("elevation_username_tip", "Insira o nome do usuário ou domínio\\usuário"),
("Preparing for installation ...", "Preparando para instalação ..."),
("Show my cursor", "Mostrar meu cursor"),
("Scale custom", "Escala personalizada"),
("Custom scale slider", "Controle deslizante de escala personalizada"),
("Decrease", "Diminuir"),
("Increase", "Aumentar"),
("Show virtual mouse", "Mostrar mouse virtual"),
("Virtual mouse size", "Tamanho do mouse virtual"),
("Small", "Pequeno"),
("Large", "Grande"),
("Show virtual joystick", "Mostrar joystick virtual"),
("Edit note", "Editar anotação"),
("Alias", "Apelido"),
("ScrollEdge", "Rolagem nas bordas"),
("Allow insecure TLS fallback", "Permitir fallback TLS inseguro"),
("allow-insecure-tls-fallback-tip", "Por padrão, o RustDesk verifica o certificado do servidor para protocolos que usam TLS.\nCom esta opção habilitada, o RustDesk ignorará a verificação e prosseguirá em caso de falha."),
("Disable UDP", "Desabilitar UDP"),
("disable-udp-tip", "Controla se deve usar somente TCP.\nCom esta opção habilitada, o RustDesk não usará mais UDP 21116, TCP 21116 será usado no lugar."),
("server-oss-not-support-tip", "NOTA: O servidor RustDesk OSS não inclui este recurso."),
("input note here", "Insira uma anotação aqui"),
("note-at-conn-end-tip", "Solicitar anotação ao final da conexão"),
("Show terminal extra keys", "Mostrar teclas extras do terminal"),
("Relative mouse mode", "Modo de mouse relativo"),
("rel-mouse-not-supported-peer-tip", "O modo de mouse relativo não é suportado pelo parceiro conectado."),
("rel-mouse-not-ready-tip", "O modo de mouse relativo ainda não está pronto. Por favor, tente novamente."),
("rel-mouse-lock-failed-tip", "Falha ao bloquear o cursor. O modo de mouse relativo foi desabilitado."),
("rel-mouse-exit-{}-tip", "Pressione {} para sair."),
("rel-mouse-permission-lost-tip", "Permissão do teclado foi revogada. O modo de mouse relativo foi desabilitado."),
("Changelog", "Registro de alterações"),
("keep-awake-during-outgoing-sessions-label", "Manter tela ativa durante sessões de saída"),
("keep-awake-during-incoming-sessions-label", "Manter tela ativa durante sessões de entrada"),
("Continue with {}", "Continuar com {}"),
("Display Name", "Nome de Exibição"),
("password-hidden-tip", "A senha permanente está definida como (oculta)."),
("preset-password-in-use-tip", "A senha predefinida está sendo usada."),
("Enable privacy mode", "Habilitar modo de privacidade"),
("allow-remote-toolbar-docking-any-edge", "Fixar a barra de ferramentas remota em qualquer borda da janela"),
("API Token", "Token de API"),
("Deploy", "Implantar"),
("Custom ID (optional)", "ID personalizado (opcional)"),
("server_requires_deployment_tip", "O servidor exige que este dispositivo seja implantado explicitamente. Implantar agora?"),
("The server does not require explicit deployment.", "O servidor não exige implantação explícita."),
("Unknown response.", "Resposta desconhecida."),
("wayland-keyboard-input-disabled-tip", "Permitir entrada do teclado?"),
("wayland-keyboard-input-consent-tip", "O que você digitar neste computador remoto (incluindo senhas) pode ser lido por outros aplicativos nele."),
("wayland-keyboard-input-applies-to-tip", "Esta escolha se aplica a:"),
("wayland-soft-keyboard-input-label", "Entrada de teclado virtual"),
("wayland-keyboard-input-reset-choice-tip", "Redefinir escolha de entrada do teclado"),
("remember-wayland-keyboard-choice-tip", "Não perguntar novamente para este computador remoto"),
("Why this happens", "Por que isso acontece"),
("Switch display", "Trocar de tela"),
("Show monitor switch button on the main toolbar", "Mostrar botão de troca de tela na barra de ferramentas"),
("Show on the minimized toolbar", "Mostrar na barra de ferramentas minimizada"),
("All monitors", "Todas as telas"),
("#{} monitor", "Tela {}"),
("conn-e2ee-unavailable-tip", "Não foi possível verificar a criptografia de ponta a ponta.\nO dispositivo remoto ainda pode estar sendo configurado. Tente novamente mais tarde.\nSe isso continuar acontecendo, o servidor pode não ser confiável.\nContinuar mesmo assim?"),
("ID whitelisting", "Lista de IDs permitidos"),
("Use ID whitelisting", "Utilizar lista de IDs permitidos"),
("id_whitelist_tip", "Somente IDs confiáveis podem me acessar"),
("id_whitelist_wildcard_tip", "Curingas são suportados: '*' corresponde a qualquer número de caracteres, '?' a exatamente um caractere"),
("Invalid ID", "ID inválido"),
("Your ID is blocked by the peer", "Seu ID foi bloqueado pelo dispositivo remoto"),
("Your ip is blocked by the peer", "Seu IP foi bloqueado pelo dispositivo remoto"),
("id_whitelist_caveat_tip", "O ID é informado pelo cliente que se conecta. A lista reduz a exposição e não substitui a senha ou o 2FA"),
("whitelist_cidr_tip", "A notação CIDR é suportada, por exemplo 192.168.1.0/24"),
("Continue", "Continuar"),
("Browser didn't open? Use the url below to sign in.", "O navegador não foi aberto? Use a URL abaixo para fazer login."),
("Lock canvas", "Bloquear tela"),
("Sync clipboard between sessions", "Sincronizar área de transferência entre sessões"),
("sync-clipboard-between-sessions-tip", "Texto ou imagens copiados em uma sessão remota também são enviados para a área de transferência das suas outras sessões conectadas."),
("terminal-clipboard-write-tip", "Aplicativos do terminal podem copiar para a área de transferência"),
("Allow terminal apps to copy to clipboard", "Permitir cópia do terminal para a área de transferência"),
("Enable", "Habilitar"),
("Reuse one connection for port forwarding", "Reutilizar uma conexão para encaminhamento de portas"),
("port-forward-mux-tip", "Levar todas as conexões de um encaminhamento de portas por uma única conexão com o outro computador, em vez de estabelecer uma nova conexão e fazer login novamente para cada uma."),
("Enable WebRTC P2P connection", "Habilitar conexão WebRTC P2P"),
("Enable TCP hole punching", "Habilitar TCP hole punching"),
("The screen sharing request was declined on the remote device", "A solicitação de compartilhamento de tela foi recusada no dispositivo remoto"),
("The screen sharing request timed out on the remote device", "A solicitação de compartilhamento de tela expirou no dispositivo remoto"),
("RustDesk cannot reach the desktop session on the remote device, check that a desktop session is running and that RustDesk can use it", "O RustDesk não consegue acessar a sessão da área de trabalho no dispositivo remoto, verifique se há uma sessão da área de trabalho em execução e se o RustDesk pode acessá-la."),
("The desktop portal on the remote device is missing a capability needed for screen sharing or remote control, its backend may not be installed", "O portal da área de trabalho no dispositivo remoto não possui um recurso necessário para o compartilhamento de tela ou controle remoto. O backend pode não estar instalado."),
("Screen sharing was approved on the remote device, but the PipeWire connection could not be opened", "O compartilhamento de tela foi autorizado no dispositivo remoto, mas não foi possível abrir a conexão com o PipeWire."),
("The screen sharing request ended without completing on the remote device", "A solicitação de compartilhamento de tela no dispositivo remoto foi encerrada sem ser concluída."),
("RustDesk could not obtain a usable screen from the XDG Desktop Portal, the PipeWire library may be too old", "O RustDesk não conseguiu obter uma tela utilizável do XDG Desktop Portal. A biblioteca do PipeWire pode estar desatualizada."),
("RustDesk could not load a GStreamer component needed for screen capture ({})", "O RustDesk não conseguiu carregar um componente do GStreamer necessário para a captura de tela ({})."),
("Relay fallback delay in seconds", "Atraso antes de recorrer ao retransmissor em segundos"),
("relay-fallback-delay-tip", "Tempo que a conexão de retransmissão aguarda pela conexão direta WebRTC. Aumente para dar mais tempo a conexões lentas; diminua para usar o retransmissor mais cedo. Deixe vazio para usar o padrão de 2,5 segundos."),
("To start a voice call, enable \"Audio capture\" on the \"Share screen\" page.", "Para iniciar uma chamada de voz, ative \"Captura de áudio\" na página \"Compartilhar Tela\"."),
("Keyboard shortcuts", ""),
("Configure shortcuts...", ""),
("Enable keyboard shortcuts in remote session", ""),
("shortcut-page-description", ""),
("shortcut-passthrough-tip", ""),
("Pass-through to remote", ""),
("Reset to defaults", ""),
("shortcut-reset-confirm-tip", ""),
("Monitor", ""),
("Keyboard", ""),
("Toggle fullscreen", ""),
("Switch to next display", ""),
("Switch to previous display", ""),
("Switch to next tab", ""),
("Switch to previous tab", ""),
("Toggle session recording", ""),
("Close tab", ""),
("Toggle toolbar", ""),
("Toggle input source", ""),
("Edit", ""),
("Save", ""),
("Set shortcut", ""),
("shortcut-recording-instruction", ""),
("shortcut-recording-press-keys-tip", ""),
("shortcut-must-include-modifiers", ""),
("shortcut-already-bound-to", ""),
("Replace", ""),
("Valid", ""),
("shortcut-mobile-physical-keyboard-tip", ""),
("shortcut-key-not-supported", ""),
("On", ""),
("Off", ""),
].iter().cloned().collect();
}