mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-19 02:41:10 +03:00
* hbb_common: bump to the port-forward-mux proto Also latches PortForward.multiplex into login_scope_digest, which destructures PortForward's fields exhaustively by design (a new field must be latched or deliberately ignored to compile). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: window accounting and channel frame builders Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: fix RecvWindow counter overflow on long transfers Replace cumulative accounting (granted/received) with remaining credit tracking to prevent u32 overflow after 4 GiB of data on a single channel. Wire behavior is identical, but the fix allows large file transfers without mid-stream channel closure. Add regression test for 8 GiB transfer to verify fix. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: credit-windowed relay halves and channel coordinator Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * server: PortForwardMux channel table and per-channel tasks Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * server: multiplexed port-forward connections stay in the protobuf loop Wire PortForwardMux into Connection: take the multiplexed path at login when the controller sets PortForward.multiplex, route PortForwardChannel frames to it from on_message, sweep the channel table's targets after open/close, and clean it up on connection close. Introduce is_port_forward() (socket-based or multiplexed) and use it at the four sites that classify the connection, so a multiplexed connection stays in the message loop, gets TestDelay keepalives, and reports features.port_forward_mux in PeerInfo. The three sites that break into the raw pipe loop or gate the keepalive still check port_forward_socket specifically, since a multiplexed connection must not take that path. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * cm: update a port-forward row's targets as tunnel channels come and go Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: controller tunnel with a single-writer stream loop Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: publish Muxed before spawning the tunnel loop Publishing after spawn let a loop that dies immediately reset the state first, so the later publish pinned it at Muxed with a dead handle forever. Also adds a test pinning open-before-data ordering across many concurrently opened channels, and drops an unused Clone derive. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: share one multiplexed tunnel across a window's listeners Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: fix round 1 review findings Drop the mux default-false assignment now that definite-assignment proves every path that reads it has set it; the enable-port-forward-mux config commit picks up the missing attribution trailers; the default-on test pins the enable- prefix itself rather than option2bool's weaker fallback. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: end-to-end tests over a loopback tunnel Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: fix bulk test's premature half-close, pin the half-close limitation many_channels_echo_concurrently_and_a_bulk_one_does_not_starve_them dropped its bulk write half as soon as writing finished, which shuts down the write side of the socket and, by design (see the design doc's TCP half-close non-goal; today's run_forward does the same), ends the whole channel. Keep the write half alive until the reader is done so the test measures starvation, not half-close. Add a_local_half_close_ends_the_whole_channel to pin that limitation in code. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: cap send credit and other final review fixes Fix 1 (critical): clamp SendCredit to MAX_SEND_CREDIT (= CHANNEL_WINDOW) in both new() and add(), so a peer with tunnel permission can no longer advertise an unbounded window and force the controlled side's unbounded FrameSink::Direct sink to buffer unlimited target data per channel. Fix 2: rename the "starve" test to many_channels_echo_concurrently and drop its (untrue) starvation claim, since it opens every channel before the bulk transfer starts. Add a_channel_opened_during_a_bulk_transfer_ is_served_promptly, which opens the small channel while the bulk one is demonstrably mid-flight. Fix 3: only look up the tunnel permission for `open` frames in the PortForwardChannel arm of on_message, instead of once per data frame. Fix 4: two rustfmt deviations in connection.rs (matches! wrapping and a tuple literal), fixed by hand without a blanket cargo fmt run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: report a refused channel's reason as an error dialog The controlled side already answers a refused port-forward channel with opened { success: false, message }; on the multiplexed path TunnelHandle:: on_frame only logged that message at debug and closed the channel, so the user saw a closed connection with no explanation, worst on the RDP path where only the RDP client's own error remained. on_frame now returns the message the window should show, deduplicated per distinct reason (capped at MAX_REPORTED_OPEN_ERRORS) so one page load's dozen refused connections surface one dialog per reason instead of a dozen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * Use on_error for refused-channel dialog in tunnel_loop Redirect the refused-channel error through the standard on_error path instead of calling msgbox directly, for consistency with other errors in the port-forward flow. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: apply the whole-branch review Correctness: - listen(): the Legacy arm is merged with the Claimed arm. On its own it ignored outcome.local_eof, so a client that hung up during login still got a target connect, an audit record and a CM row on the controlled side, and ignored outcome.mux, so a peer upgraded while a legacy window stayed open answered as a tunnel while the controller went raw. - Refusal dialogs are deduplicated per quiet spell (10 s) rather than per tunnel lifetime; the lifetime set went silent for the rest of a long-lived window after the first burst. - Android's CM listener handles UpdatePortForward; it fell into `_ => {}`. - relay_socket_to_tunnel reads into one scratch buffer per channel and sends an exact-size copy. A frame owning its 64 KiB read allocation pinned it until sent, once per byte on interactive traffic. Consistency and cleanups: - The controlled side's refusal text is the raw pipe's wording, RDP substitution included. - connection.rs: the PortForwardChannel arm is a one-line hook, the CM label is pushed from the 1 s tick alone, and the unreachable inner.tx fall-through is gone. - The Ready enum is removed; wait_ready() returns Option<Claim>. - SendCredit::add wakes with notify_one alone. - on_ui_command() replaces the two ui_receiver handlers in listen(). - TunnelHandle is no longer re-exported (unused-import warning). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: a legacy window stays legacy until it is reopened Review: the merged `Claimed | Legacy` arm gave a legacy window a hot transition to a tunnel — every accept re-negotiated, and a peer upgraded while the window stayed open was promoted underneath live connections. The product does not need a mode switch inside a window's lifetime, and the transition was extra state-machine surface for nothing: reopening the window picks up an upgraded peer. The two arms are separate again. `Claimed` negotiates once and the peer's answer fixes the window's mode. `Legacy` logs in for every accept as before, asks for no tunnel — `LoginConfigHandler::port_forward_mux` carries the request per login, so the raw pipe never has to talk to a peer that thinks it agreed to multiplex — and ignores what the peer reports. Both arms keep skipping a local socket that hung up during login. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * hbb_common: bump to main with rustdesk/hbb_common#594 merged Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * server: admit only INITIAL_WINDOW on a channel before opened The demultiplexer accepted CHANNEL_WINDOW into a pending channel's unbounded queue, four times the bound the channel task enforces once it polls. The window now starts at INITIAL_WINDOW and is widened right before `opened` advertises the rest. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: a tunnel ends when its window drops the Tunnel The loop held its own handle and state sender, so once the window closed nothing was left to stop it: it kept answering TestDelay and the peer connection, CM row included, lived on until the peer went away. `Tunnel` now owns a watch sender nobody sends on; the loop's receiver errors when the last `Tunnel` drops, and the loop ends. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: one tunnel per mapping, bound to the authenticated target The login latches `PortForward.host`/`port` into the session scope and approval is shown that target, but a window-wide tunnel let any later `open` name another target with only `enable-tunnel` rechecked. A tunnel now belongs to one listener and serves the one target its login authenticated: the controlled side refuses an `open` for any other target, and a window with several targets uses one connection each, approved on its own. With one owner per tunnel the claim needs no waiters: `Establishing`, `Claim::Wait` and `wait_ready` go, and `try_claim` becomes a plain read. The CM label that followed a tunnel's targets goes with them; a row shows its mapping's target, as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: the legacy comment names the mapping, not the window Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: a window violation drops the channel on the spot Both demultiplexers only queued a `Violation` and left the entry until the channel task woke and exited, so a peer that kept sending past the window queued one more entry per frame in the meantime, bounded by nothing. The entry now goes the moment `accept` fails; later frames for that id are unknown-channel noise. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: the login's target travels with the accept, not the handler `listen()` wrote `lc.port_forward` (and, on this branch, `port_forward_mux`) into the window's shared `LoginConfigHandler` before connecting, and `create_login_msg` read them back only when the peer's `Hash` arrived. Two mappings logging in at the same time could therefore swap targets: on master that bridged a local socket to the wrong target, and with a tunnel bound to its login's target it also left the mapping refusing every later accept until it was recreated. The target is now a `PortForward` carried by the interface clone that handles one accept, passed explicitly down to `create_login_msg`; the handler no longer has a field to race on. No lock spans the login. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port_forward_mux: pin permission revocation and whole-tunnel failure in tests Both already hold; the review asked for them to be stated. `enable-tunnel` turned off mid-session refuses the next `open` while the live channel keeps relaying, and a dead tunnel ends every channel on it together, after which the next accept establishes again on the same `Tunnel`. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: the legacy comment names re-adding the mapping only Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: the raw pipe runs the code it always ran The multiplexed login had replaced `connect_and_login`, so a mapping with the setting off, a peer without the feature, or a listener latched `Legacy` still went through the tunnel's state machine, the capped pre-read and the changed local-EOF rule. Feature off now means the old code: `listen()` keeps its accept arm and `connect_and_login` as they were, and the tunnel is a branch taken only when the setting is on, in `establish_tunnel` with its own `connect_and_login_mux`. The one line the raw path does differently is the target riding with the accept's interface clone instead of the shared handler. `get_port_forward_mux_enabled` had one caller and moves in here, so `common.rs` is untouched. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: a UI login answers the challenge its own connection was given `handle_login_from_ui` hashed the typed password against `lc.hash`, the window's shared handler field, and the window's password prompt is broadcast to every listener. With two mappings both waiting on that prompt, the `Hash` that arrived last had overwritten the other's, so one of the two answered the wrong challenge and failed to log in. Master shares the same state and broadcasts the same way. The `Hash` is now a parameter of the login; `Session` keeps it beside the connection it belongs to, and the per-accept clone that `with_port_forward` makes gets a slot of its own. `lc.hash` stays for `handle_peer_info`, which only needs the salt, and that is per peer. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: a mapping without its hash waits for it before answering the prompt The window's password prompt is broadcast to every mapping, and can reach one whose own connection has not received its `Hash` yet. That mapping used to answer anyway, with a digest over an empty challenge: the peer refused it and counted a failed attempt, and the empty-salt result was written into the shared `lc.password`, where the mapping that prompted had just stored the right one and the next `handle_peer_info` would persist whatever was there. The connection's challenge is now `Option<Hash>`, `None` until `handle_hash` runs, and `handle_login_from_ui` sends nothing without it. The mapping that prompted stores the salted password in the shared handler, and the waiting one logs in with that against its own challenge when its `Hash` arrives, without prompting again. Test: A answers its prompt, the same broadcast reaches B before its hash, B sends nothing, B's hash arrives and its login carries B's challenge and B's target with no dialog. It runs the real `handle_hash` for B. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: the tunnel's login is the raw pipe's, asked for by a window flag Master's fix for the shared login slots (#16069) keeps the target and the challenge in the window's `LoginConfigHandler` and serializes the mappings' logins with a turn lock, all inside `port_forward.rs`. This branch had carried a broader shape of the same fix, a `with_port_forward` on `Interface` and the target and `Hash` as parameters through the login functions, which every caller had to follow. That is gone: `Interface`, `Session`, `create_login_msg`, `send_login`, `handle_hash` and `handle_login_from_ui` are as on master. What the tunnel needs on top is one bit in the login, `multiplex`. It is a window flag beside `port_forward` in the handler, set once in `io_loop` before the window's mappings start, so an accept's claim and its login read the same value; the setting takes effect for windows opened after it changes. `connect_and_login_mux` is now master's `connect_and_login` with the tunnel's three differences and the same `hash_arrived` and `login_from_ui` calls. The raw pipe is master's, line for line. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * hbb_common: bump to main with rustdesk/hbb_common#595 merged 840c8ec..f94e3fe is that one merge: the five local settings custom clients could not preset. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: the off switch gets a checkbox in Settings → General `enable-port-forward-mux` was readable only by editing the config file. It is a local setting of the controlling side, so it sits with the other outgoing ones, after "Open connection in new tab", with a tooltip saying what it does. The two new keys are translated in every language. The three that the mobile file manager added, "Export", "Export Logs" and "Import Folder", were empty everywhere but five languages; they are filled in too, and Korean's "xdp-portal-unavailable" with them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * Urdu: fill the backlog of empty and missing translations ur.rs had fallen behind: 104 keys carried an empty value and 35 keys the other languages have were absent altogether. Both are filled in, the missing ones in the order template.rs lists them. Eight entries stay empty on purpose. They are keys that only ur.rs still carries, absent from template.rs and from every other language, so their English source cannot be recovered and nothing reads them: remember_account_tip, os_account_desk_tip, another_user_login_*_tip, xorg_not_found_*_tip and no_desktop_*_tip. Twelve more dead keys keep the values they have; removing either group is a separate decision. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * Urdu: drop the keys template.rs no longer lists The twenty keys removed here are absent from template.rs and from every other language file; ur.rs was the only one still carrying them, eight of them with no value at all. They are leftovers of features that are gone: the plugin menu, the OS-account login prompts, the Xorg and no-desktop errors. ur.rs now holds exactly the template's key set, all of it translated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: closing the tunnel reaches channels parked on their socket A channel whose far end neither reads nor writes has both relays parked on the socket, not on the inbound queue, so `close_all` dropping the queue's sender woke neither: the socket and both tasks lived on until the far end hung up. Both sides now hold a per-tunnel teardown signal that `run_channel` selects on beside its own cancel, and `close_all` sends it after clearing the map. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: a mapping latched to the raw pipe logs in without asking for the tunnel The login copied the window's `port_forward_mux` into `multiplex`, so a mapping that had latched to the raw pipe on an old peer kept asking for the tunnel. Once that peer was upgraded it answered with a tunnel while the controller switched to raw framing, and every later connection on the mapping was dead until it was re-added. The login now carries its own `port_forward_multiplex`, filled with the target under the turn lock: the probe asks, the raw pipe does not. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: a channel opened as its tunnel closes still gets the teardown `open` can straddle `close_all`: the claim passed, the frame receiver was still alive, and the channel subscribed after the signal had gone out. `watch::subscribe` marks earlier sends as seen, and the entry sits in a map that was already cleared, so nothing would ever end it. The signal is now a level: `close_all` raises it with `send_replace`, which stores even with no channel live, and `run_channel` waits for the value rather than for a change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: the connect guard counts a live tunnel as connected `connect_port_forward_if_needed` returned early only for a raw-pipe socket; called again with a tunnel up it would have built a second `PortForwardMux` and dropped every channel of the first. Not reachable today, since the logon response is sent once, but the other checks in this change already read `is_port_forward()`. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * Urdu: the two terminal clipboard keys master added Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: a tunnel's TCP stream refuses packets over twice MAX_FRAME The codec takes a header declaring up to 1 GiB and hands the packet up only once it has all arrived, so the channel window bounded what the peer may send, not what this side buffers. Both sides now cap the codec at 2 * MAX_FRAME as soon as multiplexing is agreed: a data frame with its envelope and MAC fits with room to spare, and a header over the cap ends the tunnel before a byte of payload is read. TCP only; the WebSocket and WebRTC codecs carry caps of their own. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab * port forward: a channel id still live when the counter comes round is skipped The controller handed out `next_id` unchecked. 2^32 opens later it lands on a channel still up: the entry here was replaced, while the peer, which ignores an `open` for a live id, kept routing that id to the old socket, so the new local connection's bytes went into the old target connection. The id is now taken under the map's lock and advanced past any id in use. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
773 lines
87 KiB
Rust
773 lines
87 KiB
Rust
lazy_static::lazy_static! {
|
|
pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|
[
|
|
("Status", "สถานะ"),
|
|
("Your Desktop", "หน้าจอของคุณ"),
|
|
("desk_tip", "คุณสามารถเข้าถึงเดสก์ท็อปของคุณได้ด้วย ID และรหัสผ่านต่อไปนี้"),
|
|
("Password", "รหัสผ่าน"),
|
|
("Ready", "พร้อม"),
|
|
("Established", "เชื่อมต่อแล้ว"),
|
|
("connecting_status", "กำลังเชื่อมต่อไปยังเครือข่าย RustDesk..."),
|
|
("Enable service", "เปิดใช้การงานเซอร์วิส"),
|
|
("Start service", "เริ่มต้นใช้งานเซอร์วิส"),
|
|
("Service is running", "เซอร์วิสกำลังทำงาน"),
|
|
("Service is not running", "เซอร์วิสไม่ทำงาน"),
|
|
("not_ready_status", "ไม่พร้อมใช้งาน กรุณาตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณ"),
|
|
("Control Remote Desktop", "การควบคุมเดสก์ท็อปปลายทาง"),
|
|
("Transfer file", "การถ่ายโอนไฟล์"),
|
|
("Connect", "เชื่อมต่อ"),
|
|
("Recent sessions", "เซสชันล่าสุด"),
|
|
("Address book", "สมุดรายชื่อ"),
|
|
("Confirmation", "การยืนยัน"),
|
|
("TCP tunneling", "อุโมงค์การเชื่อมต่อ TCP"),
|
|
("Remove", "ลบ"),
|
|
("Refresh random password", "รีเฟรชรหัสผ่านใหม่แบบสุ่ม"),
|
|
("Set your own password", "ตั้งรหัสผ่านของคุณเอง"),
|
|
("Enable keyboard/mouse", "เปิดการใช้งาน คีย์บอร์ด/เมาส์"),
|
|
("Enable clipboard", "เปิดการใช้งาน คลิปบอร์ด"),
|
|
("Enable file transfer", "เปิดการใช้งาน การถ่ายโอนไฟล์"),
|
|
("Enable TCP tunneling", "เปิดการใช้งาน อุโมงค์การเชื่อมต่อ TCP"),
|
|
("IP Whitelisting", "IP ไวท์ลิสต์"),
|
|
("ID/Relay Server", "เซิร์ฟเวอร์ ID/Relay"),
|
|
("Import server config", "นำเข้าการตั้งค่าเซิร์ฟเวอร์"),
|
|
("Export Server Config", "ส่งออกการตั้งค่าเซิร์ฟเวอร์"),
|
|
("Import server configuration successfully", "นำเข้าการตั้งค่าเซิร์ฟเวอร์เสร็จสมบูรณ์"),
|
|
("Export server configuration successfully", "ส่งออกการตั้งค่าเซิร์ฟเวอร์เสร็จสมบูรณ์"),
|
|
("Invalid server configuration", "การตั้งค่าของเซิร์ฟเวอร์ไม่ถูกต้อง"),
|
|
("Clipboard is empty", "คลิปบอร์ดว่างเปล่า"),
|
|
("Stop service", "หยุดการใช้งานเซอร์วิส"),
|
|
("Change ID", "เปลี่ยน ID"),
|
|
("Your new ID", "ID ใหม่ของคุณ"),
|
|
("length %min% to %max%", "ความยาวตั้งแต่ %min% ถึง %max%"),
|
|
("starts with a letter", "เริ่มต้นด้วยตัวอักษร"),
|
|
("allowed characters", "ตัวอักขระที่อนุญาต"),
|
|
("id_change_tip", "อนุญาตเฉพาะตัวอักษร a-z A-Z 0-9, - (dash) และ _ (ขีดล่าง) เท่านั้น โดยตัวอักษรขึ้นต้นจะต้องเป็น a-z หรือไม่ก็ A-Z และมีความยาวระหว่าง 6 ถึง 16 ตัวอักษร"),
|
|
("Website", "เว็บไซต์"),
|
|
("About", "เกี่ยวกับ"),
|
|
("Slogan_tip", "ทำด้วยใจ ในโลกที่วุ่นวาย!"),
|
|
("Privacy Statement", "คำแถลงเกี่ยวกับความเป็นส่วนตัว"),
|
|
("Mute", "ปิดเสียง"),
|
|
("Build Date", "วันที่ Build"),
|
|
("Version", "เวอร์ชัน"),
|
|
("Home", "หน้าหลัก"),
|
|
("Audio Input", "ออดิโออินพุท"),
|
|
("Enhancements", "การปรับปรุง"),
|
|
("Hardware Codec", "ฮาร์ดแวร์ Codec"),
|
|
("Adaptive bitrate", "Bitrate ผันแปร"),
|
|
("ID Server", "เซิร์ฟเวอร์ ID"),
|
|
("Relay Server", "เซิร์ฟเวอร์ Relay"),
|
|
("API Server", "เซิร์ฟเวอร์ API"),
|
|
("invalid_http", "ต้องขึ้นต้นด้วย http:// หรือ https:// เท่านั้น"),
|
|
("Invalid IP", "IP ไม่ถูกต้อง"),
|
|
("Invalid format", "รูปแบบไม่ถูกต้อง"),
|
|
("server_not_support", "ยังไม่รองรับโดยเซิร์ฟเวอร์"),
|
|
("Not available", "ไม่พร้อมใช้งาน"),
|
|
("Too frequent", "ดำเนินการถี่เกินไป"),
|
|
("Cancel", "ยกเลิก"),
|
|
("Skip", "ข้าม"),
|
|
("Close", "ปิด"),
|
|
("Retry", "ลองใหม่อีกครั้ง"),
|
|
("OK", "ตกลง"),
|
|
("Password Required", "ต้องใช้รหัสผ่าน"),
|
|
("Please enter your password", "กรุณาใส่รหัสผ่านของคุณ"),
|
|
("Remember password", "จดจำรหัสผ่าน"),
|
|
("Wrong Password", "รหัสผ่านไม่ถูกต้อง"),
|
|
("Do you want to enter again?", "ต้องการใส่ข้อมูลอีกครั้งหรือไม่?"),
|
|
("Connection Error", "การเชื่อมต่อผิดพลาด"),
|
|
("Error", "ข้อผิดพลาด"),
|
|
("Reset by the peer", "รีเซ็ตโดยอีกฝั่ง"),
|
|
("Connecting...", "กำลังเชื่อมต่อ..."),
|
|
("Connection in progress. Please wait.", "กำลังดำเนินการเชื่อมต่อ กรุณารอซักครู่"),
|
|
("Please try 1 minute later", "กรุณาลองใหม่อีกครั้งใน 1 นาที"),
|
|
("Login Error", "การเข้าสู่ระบบผิดพลาด"),
|
|
("Successful", "สำเร็จ"),
|
|
("Connected, waiting for image...", "เชื่อมต่อสำเร็จ กำลังรับข้อมูลภาพ..."),
|
|
("Name", "ชื่อ"),
|
|
("Type", "ประเภท"),
|
|
("Modified", "แก้ไขล่าสุด"),
|
|
("Size", "ขนาด"),
|
|
("Show Hidden Files", "แสดงไฟล์ที่ถูกซ่อน"),
|
|
("Receive", "รับ"),
|
|
("Send", "ส่ง"),
|
|
("Refresh File", "รีเฟรชไฟล์"),
|
|
("Local", "ต้นทาง"),
|
|
("Remote", "ปลายทาง"),
|
|
("Remote Computer", "คอมพิวเตอร์ปลายทาง"),
|
|
("Local Computer", "คอมพิวเตอร์ต้นทาง"),
|
|
("Confirm Delete", "ยืนยันการลบ"),
|
|
("Delete", "ลบ"),
|
|
("Properties", "ข้อมูล"),
|
|
("Multi Select", "เลือกหลายรายการ"),
|
|
("Select All", "เลือกทั้งหมด"),
|
|
("Unselect All", "ยกเลิกการเลือกทั้งหมด"),
|
|
("Empty Directory", "ไดเรกทอรีว่างเปล่า"),
|
|
("Not an empty directory", "ไม่ใช่ไดเรกทอรีว่างเปล่า"),
|
|
("Are you sure you want to delete this file?", "คุณแน่ใจหรือไม่ที่จะลบไฟล์นี้?"),
|
|
("Are you sure you want to delete this empty directory?", "คุณแน่ใจหรือไม่ที่จะลบไดเรอทอรีว่างเปล่านี้?"),
|
|
("Are you sure you want to delete the file of this directory?", "คุณแน่ใจหรือไม่ที่จะลบไฟล์ของไดเรกทอรีนี้?"),
|
|
("Do this for all conflicts", "ดำเนินการแบบเดียวกันสำหรับรายการทั้งหมด"),
|
|
("This is irreversible!", "การดำเนินการนี้ไม่สามารถย้อนกลับได้!"),
|
|
("Deleting", "กำลังลบ"),
|
|
("files", "ไฟล์"),
|
|
("Waiting", "กำลังรอ"),
|
|
("Finished", "เสร็จแล้ว"),
|
|
("Speed", "ความเร็ว"),
|
|
("Custom Image Quality", "คุณภาพของภาพแบบกำหนดเอง"),
|
|
("Privacy mode", "โหมดความเป็นส่วนตัว"),
|
|
("Block user input", "บล็อคอินพุทจากผู้ใช้งาน"),
|
|
("Unblock user input", "ยกเลิกการบล็อคอินพุทจากผู้ใช้งาน"),
|
|
("Adjust Window", "ปรับขนาดหน้าต่าง"),
|
|
("Original", "ต้นฉบับ"),
|
|
("Shrink", "ย่อ"),
|
|
("Stretch", "ยืด"),
|
|
("Scrollbar", "แถบเลื่อน"),
|
|
("ScrollAuto", "เลื่อนอัตโนมัติ"),
|
|
("Good image quality", "ภาพคุณภาพดี"),
|
|
("Balanced", "สมดุล"),
|
|
("Optimize reaction time", "เน้นการตอบสนอง"),
|
|
("Custom", "กำหนดเอง"),
|
|
("Show remote cursor", "แสดงเคอร์เซอร์ปลายทาง"),
|
|
("Show quality monitor", "แสดงคุณภาพหน้าจอ"),
|
|
("Disable clipboard", "ปิดการใช้งานคลิปบอร์ด"),
|
|
("Lock after session end", "ล็อคหลังจากจบเซสชัน"),
|
|
("Insert Ctrl + Alt + Del", "แทรก Ctrl + Alt + Del"),
|
|
("Insert Lock", "แทรกล็อค"),
|
|
("Refresh", "รีเฟรช"),
|
|
("ID does not exist", "ไม่พอข้อมูล ID"),
|
|
("Failed to connect to rendezvous server", "การเชื่อมต่อไปยังเซิร์ฟเวอร์นัดพบล้มเหลว"),
|
|
("Please try later", "กรุณาลองใหม่ในภายหลัง"),
|
|
("Remote desktop is offline", "เดสก์ท็อปปลายทางออฟไลน์"),
|
|
("Key mismatch", "คีย์ไม่ถูกต้อง"),
|
|
("Timeout", "หมดเวลา"),
|
|
("Failed to connect to relay server", "การเชื่อมต่อไปยังเซิร์ฟเวอร์ Relay ล้มเหลว"),
|
|
("Failed to connect via rendezvous server", "การเชื่อมต่อผ่านเซิร์ฟเวอร์นัดพบล้มเหลว"),
|
|
("Failed to connect via relay server", "การเชื่อมต่อผ่านเซิร์ฟเวอร์ Relay ล้มเหลว"),
|
|
("Failed to make direct connection to remote desktop", "การเชื่อมต่อตรงไปยังเดสก์ท็อปปลายทางล้มเหลว"),
|
|
("Set Password", "ตั้งรหัสผ่าน"),
|
|
("OS Password", "รหัสผ่านระบบปฏิบัติการ"),
|
|
("install_tip", "เนื่องด้วยข้อจำกัดของการใช้งาน UAC ทำให้ RustDesk ไม่สามารถทำงานได้ปกติในฝั่งปลายทางในบางครั้ง เพื่อหลีกเลี่ยงข้อจำกัดของ UAC กรุณากดปุ่มด้านล่างเพื่อติดตั้ง RustDesk ไปยังระบบของคุณ"),
|
|
("Click to upgrade", "คลิกเพื่ออัปเกรด"),
|
|
("Configure", "ปรับแต่งค่า"),
|
|
("config_acc", "เพื่อที่จะควบคุมเดสก์ท็อปปลายทางของคุณ คุณจำเป็นจะต้องอนุญาตสิทธิ์ \"การเข้าถึง\" ให้แก่ RustDesk"),
|
|
("config_screen", "เพื่อที่จะควบคุมเดสก์ท็อปปลายทางของคุณ คุณจำเป็นจะต้องอนุญาตสิทธิ์ \"การบันทึกภาพหน้าจอ\" ให้แก่ RustDesk"),
|
|
("Installing ...", "กำลังติดตั้ง ..."),
|
|
("Install", "ติดตั้ง"),
|
|
("Installation", "การติดตั้ง"),
|
|
("Installation Path", "ตำแหน่งที่ติดตั้ง"),
|
|
("Create start menu shortcuts", "สร้างทางลัดไปยัง Start Menu"),
|
|
("Create desktop icon", "สร้างไอคอนบนเดสก์ท็อป"),
|
|
("agreement_tip", "ในการเริ่มต้นการติดตั้ง ถือว่าคุณได้ยอมรับข้อตกลงใบอนุญาตแล้ว"),
|
|
("Accept and Install", "ยอมรับและติดตั้ง"),
|
|
("End-user license agreement", "ข้อตกลงใบอนุญาตผู้ใช้งาน"),
|
|
("Generating ...", "กำลังสร้าง ..."),
|
|
("Your installation is lower version.", "การติดตั้งของคุณเป็นเวอร์ชันที่ต่ำกว่า"),
|
|
("not_close_tcp_tip", "อย่าปิดหน้าต่างนี้ในขณะที่คุณกำลังใช้งานอุโมงค์การเชื่อมต่อ"),
|
|
("Listening ...", "กำลังรอรับข้อมูล ..."),
|
|
("Remote Host", "โฮสต์ปลายทาง"),
|
|
("Remote Port", "พอร์ทปลายทาง"),
|
|
("Action", "การดำเนินการ"),
|
|
("Add", "เพิ่ม"),
|
|
("Local Port", "พอร์ทต้นทาง"),
|
|
("Local Address", "ที่อยู่ต้นทาง"),
|
|
("Change Local Port", "เปลี่ยนพอร์ทต้นทาง"),
|
|
("setup_server_tip", "เพื่อการเชื่อมต่อที่เร็วขึ้น กรุณาเซ็ตอัปเซิร์ฟเวอร์ของคุณเอง"),
|
|
("Too short, at least 6 characters.", "สั้นเกินไป ต้องไม่ต่ำกว่า 6 ตัวอักษร"),
|
|
("The confirmation is not identical.", "การยืนยันข้อมูลไม่ถูกต้อง"),
|
|
("Permissions", "สิทธิ์การใช้งาน"),
|
|
("Accept", "ยอมรับ"),
|
|
("Dismiss", "ปิด"),
|
|
("Disconnect", "ยกเลิกการเชื่อมต่อ"),
|
|
("Enable file copy and paste", "อนุญาตให้มีการคัดลอกและวางไฟล์"),
|
|
("Connected", "เชื่อมต่อแล้ว"),
|
|
("Direct and encrypted connection", "การเชื่อมต่อตรงที่มีการเข้ารหัส"),
|
|
("Relayed and encrypted connection", "การเชื่อมต่อแบบ Relay ที่มีการเข้ารหัส"),
|
|
("Direct and unencrypted connection", "การเชื่อมต่อตรงที่ไม่มีการเข้ารหัส"),
|
|
("Relayed and unencrypted connection", "การเชื่อมต่อแบบ Relay ที่ไม่มีการเข้ารหัส"),
|
|
("Enter Remote ID", "กรอก ID ปลายทาง"),
|
|
("Enter your password", "กรอกรหัสผ่าน"),
|
|
("Logging in...", "กำลังเข้าสู่ระบบ..."),
|
|
("Enable RDP session sharing", "เปิดการใช้งานการแชร์เซสชัน RDP"),
|
|
("Auto Login", "เข้าสู่ระบอัตโนมัติ"),
|
|
("Enable direct IP access", "เปิดการใช้งาน IP ตรง"),
|
|
("Rename", "ปลายทาง"),
|
|
("Space", "พื้นที่ว่าง"),
|
|
("Create desktop shortcut", "สร้างทางลัดบนเดสก์ท็อป"),
|
|
("Change Path", "เปลี่ยนตำแหน่ง"),
|
|
("Create Folder", "สร้างโฟลเดอร์"),
|
|
("Please enter the folder name", "กรุณาใส่ชื่อโฟลเดอร์"),
|
|
("Fix it", "แก้ไข"),
|
|
("Warning", "คำเตือน"),
|
|
("Login screen using Wayland is not supported", "หน้าจอการเข้าสู่ระบบโดยใช้ Wayland ยังไม่ถูกรองรับ"),
|
|
("Reboot required", "จำเป็นต้องเริ่มต้นระบบใหม่"),
|
|
("Unsupported display server", "เซิร์ฟเวอร์การแสดงผลที่ไม่รองรับ"),
|
|
("x11 expected", "ต้องใช้งาน x11"),
|
|
("Port", "พอร์ท"),
|
|
("Settings", "ตั้งค่า"),
|
|
("Username", "ชื่อผู้ใช้งาน"),
|
|
("Invalid port", "พอร์ทไม่ถูกต้อง"),
|
|
("Closed manually by the peer", "ถูกปิดโดยอีกฝั่งของการเชื่อมต่อ"),
|
|
("Enable remote configuration modification", "เปิดการใช้งานการแก้ไขการตั้งค่าปลายทาง"),
|
|
("Run without install", "ใช้งานโดยไม่ต้องติดตั้ง"),
|
|
("Connect via relay", "เชื่อมต่อผ่าน Relay"),
|
|
("Always connect via relay", "เชื่อมต่อผ่าน Relay เสมอ"),
|
|
("whitelist_tip", "อนุญาตเฉพาะการเชื่อมต่อจาก IP ที่ไวท์ลิสต์"),
|
|
("Login", "เข้าสู่ระบบ"),
|
|
("Verify", "ยืนยันความถูกต้อง"),
|
|
("Remember me", "จดจำฉัน"),
|
|
("Trust this device", "เชื่อถืออุปกรณ์นี้"),
|
|
("Verification code", "รหัสยืนยันความถูกต้อง"),
|
|
("verification_tip", "รหัสยืนยันความถูกต้องได้ถูกส่งไปยังอีเมล์ที่ลงทะเบียนแล้ว กรุณากรอกรหัสยืนยันความถูกต้องเพื่อดำเนินการเข้าสู่ระบบต่อ"),
|
|
("Logout", "ออกจากระบบ"),
|
|
("Tags", "แท็ก"),
|
|
("Search ID", "ค้นหา ID"),
|
|
("whitelist_sep", "คั่นโดยเครื่องหมาย comma semicolon เว้นวรรค หรือ ขึ้นบรรทัดใหม่"),
|
|
("Add ID", "เพิ่ม ID"),
|
|
("Add Tag", "เพิ่มแท็ก"),
|
|
("Unselect all tags", "ยกเลิกการเลือกแท็กทั้งหมด"),
|
|
("Network error", "ข้อผิดพลาดของเครือข่าย"),
|
|
("Username missed", "ไม่พบข้อมูลผู้ใช้งาน"),
|
|
("Password missed", "ไม่พบรหัสผ่าน"),
|
|
("Wrong credentials", "ข้อมูลสำหรับเข้าสู่ระบบไม่ถูกต้อง"),
|
|
("The verification code is incorrect or has expired", "รหัสยืนยันไม่ถูกต้องหรือหมดอายุแล้ว"),
|
|
("Edit Tag", "แก้ไขแท็ก"),
|
|
("Forget Password", "ยกเลิกการจดจำรหัสผ่าน"),
|
|
("Favorites", "รายการโปรด"),
|
|
("Add to Favorites", "เพิ่มไปยังรายการโปรด"),
|
|
("Remove from Favorites", "ลบออกจากรายการโปรด"),
|
|
("Empty", "ว่างเปล่า"),
|
|
("Invalid folder name", "ชื่อโฟลเดอร์ไม่ถูกต้อง"),
|
|
("Socks5 Proxy", "พรอกซี Socks5"),
|
|
("Socks5/Http(s) Proxy", "พรอกซี Socks5/Http(s)"),
|
|
("Discovered", "ค้นพบ"),
|
|
("install_daemon_tip", "หากต้องการใช้งานขณะระบบเริ่มต้น คุณจำเป็นจะต้องติดตั้งเซอร์วิส"),
|
|
("Remote ID", "ID ปลายทาง"),
|
|
("Paste", "วาง"),
|
|
("Paste here?", "วางที่นี่หรือไม่?"),
|
|
("Are you sure to close the connection?", "คุณแน่ใจหรือไม่ที่จะปิดการเชื่อมต่อ?"),
|
|
("Download new version", "ดาวน์โหลดเวอร์ชันใหม่"),
|
|
("Touch mode", "โหมดการสัมผัส"),
|
|
("Mouse mode", "โหมดการใช้เมาส์"),
|
|
("One-Finger Tap", "แตะนิ้วเดียว"),
|
|
("Left Mouse", "เมาส์ซ้าย"),
|
|
("One-Long Tap", "แตะยาวหนึ่งครั้ง"),
|
|
("Two-Finger Tap", "แตะสองนิ้ว"),
|
|
("Right Mouse", "เมาส์ขวา"),
|
|
("One-Finger Move", "ลากนิ้วเดียว"),
|
|
("Double Tap & Move", "แตะเบิ้ลและลาก"),
|
|
("Mouse Drag", "ลากเมาส์"),
|
|
("Three-Finger vertically", "สามนิ้วแนวตั้ง"),
|
|
("Mouse Wheel", "ลูกลิ้งเมาส์"),
|
|
("Two-Finger Move", "ลากสองนิ้ว"),
|
|
("Canvas Move", "ลากแคนวาส"),
|
|
("Pinch to Zoom", "ถ่างเพื่อขยาย"),
|
|
("Canvas Zoom", "ขยายแคนวาส"),
|
|
("Reset canvas", "รีเซ็ตแคนวาส"),
|
|
("No permission of file transfer", "ไม่มีสิทธิ์ในการถ่ายโอนไฟล์"),
|
|
("Note", "บันทึกข้อความ"),
|
|
("Connection", "การเชื่อมต่อ"),
|
|
("Share screen", "แชร์หน้าจอ"),
|
|
("Chat", "แชท"),
|
|
("Total", "รวม"),
|
|
("items", "รายการ"),
|
|
("Selected", "ถูกเลือก"),
|
|
("Screen Capture", "บันทึกหน้าจอ"),
|
|
("Input Control", "ควบคุมอินพุท"),
|
|
("Audio Capture", "บันทึกเสียง"),
|
|
("Do you accept?", "ยอมรับหรือไม่?"),
|
|
("Open System Setting", "เปิดการตั้งค่าระบบ"),
|
|
("How to get Android input permission?", "เปิดสิทธิ์การใช้งานอินพุทของแอนดรอยด์ได้อย่างไร?"),
|
|
("android_input_permission_tip1", "ในการที่จะอนุญาตให้เครื่องปลายทางควบคุมอุปกรณ์แอนดรอยด์ของคุณโดยใช้เมาส์หรือการสัมผัส คุณจำเป็นจะต้องอนุญาตสิทธิ์ \"การเข้าถึง\" ให้แก่เซอร์วิสของ RustDesk"),
|
|
("android_input_permission_tip2", "กรุณาไปยังหน้าตั้งค่าถัดไป ค้นหาและเข้าไปยัง [เซอร์วิสที่ถูกติดตั้ง] และเปิดการใช้งานเซอร์วิส [อินพุท RustDesk]"),
|
|
("android_new_connection_tip", "ได้รับคำขอควบคุมใหม่ที่ต้องการควบคุมอุปกรณ์ของคุณ"),
|
|
("android_service_will_start_tip", "การเปิดการใช้งาน \"การบันทึกหน้าจอ\" จะเป็นการเริ่มต้นการทำงานของเซอร์วิสโดยอัตโนมัติ ที่จะอนุญาตให้อุปกรณ์อื่นๆ ส่งคำขอเข้าถึงมายังอุปกรณ์ของคุณได้"),
|
|
("android_stop_service_tip", "การปิดการใช้งานเซอร์วิสจะปิดการเชื่อมต่อทั้งหมดโดยอัตโนมัติ"),
|
|
("android_version_audio_tip", "เวอร์ชันแอนดรอยด์ปัจจุบันของคุณไม่รองรับการบันทึกข้อมูลเสียง กรุณาอัปเกรดเป็นแอนดรอยด์เวอร์ชัน 10 หรือสูงกว่า"),
|
|
("android_start_service_tip", "แตะ [เริ่มต้นใช้งานเซอร์วิส] หรือเปิดสิทธิ์การใช้งาน [บันทึกหน้าจอ] เพื่อเริ่มต้นใช้งานเซอร์วิสสำหรับการแบ่งปันหน้าจอ"),
|
|
("android_permission_may_not_change_tip", "สิทธิ์การใช้งานสำหรับการเชื่อมต่อที่กำลังเปิดใช้งานอยู่อาจจะไม่ได้เปลี่ยนแปลงในทันทีจนกว่าจะเริ่มต้นการเชื่อมต่อใหม่อีกครั้ง"),
|
|
("Account", "บัญชี"),
|
|
("Overwrite", "เขียนทับ"),
|
|
("This file exists, skip or overwrite this file?", "พบไฟล์ที่มีอยู่แล้ว ต้องการเขียนทับหรือไม่?"),
|
|
("Quit", "ออก"),
|
|
("Help", "ช่วยเหลือ"),
|
|
("Failed", "ล้มเหลว"),
|
|
("Succeeded", "สำเร็จ"),
|
|
("Someone turns on privacy mode, exit", "มีใครบางคนเปิดใช้งานโหมดความเป็นส่วนตัว กำลังออก"),
|
|
("Unsupported", "ไม่รองรับ"),
|
|
("Peer denied", "ถูกปฏิเสธโดยอีกฝั่ง"),
|
|
("Peer exit", "อีกฝั่งออก"),
|
|
("Failed to turn off", "การปิดล้มเหลว"),
|
|
("Turned off", "ปิด"),
|
|
("Language", "ภาษา"),
|
|
("Keep RustDesk background service", "คงสถานะการทำงานเบื้องหลังของเซอร์วิส RustDesk"),
|
|
("Ignore Battery Optimizations", "เพิกเฉยการตั้งค่าการใช้งาน Battery Optimization"),
|
|
("android_open_battery_optimizations_tip", "หากคุณต้องการปิดการใช้งานฟีเจอร์นี้ กรุณาไปยังหน้าตั้งค่าในแอปพลิเคชัน RustDesk ค้นหาหัวข้อ [Battery] และยกเลิกการเลือกรายการ [Unrestricted]"),
|
|
("Start on boot", "เริ่มต้นเมื่อเปิดเครื่อง"),
|
|
("Start the screen sharing service on boot, requires special permissions", "เริ่มต้นใช้งานเซอร์วิสสำหรับการแบ่งปันหน้าจอเมื่อเปิดเครื่อง (ต้องมีการให้สิทธิ์การใช้งานพิเศษเพิ่มเติม)"),
|
|
("Connection not allowed", "การเชื่อมต่อไม่อนุญาต"),
|
|
("Legacy mode", "โหมดดั้งเดิม"),
|
|
("Map mode", "โหมดการจับคู่"),
|
|
("Translate mode", "โหมดแปลงค่า"),
|
|
("Use permanent password", "ใช้รหัสผ่านถาวร"),
|
|
("Use both passwords", "ใช้รหัสผ่านทั้งสองแบบ"),
|
|
("Set permanent password", "ตั้งค่ารหัสผ่านถาวร"),
|
|
("Enable remote restart", "เปิดการใช้งานการรีสตาร์ทระบบทางไกล"),
|
|
("Restart remote device", "รีสตาร์ทอุปกรณ์ปลายทาง"),
|
|
("Are you sure you want to restart", "คุณแน่ใจหรือไม่ที่จะรีสตาร์ท"),
|
|
("Restarting remote device", "กำลังรีสตาร์ทระบบปลายทาง"),
|
|
("remote_restarting_tip", "ระบบปลายทางกำลังรีสตาร์ท กรุณาปิดกล่องข้อความนี้และดำเนินการเขื่อมต่อใหม่อีกครั้งด้วยรหัสผ่านถาวรหลังจากผ่านไปซักครู่"),
|
|
("Copied", "คัดลอกแล้ว"),
|
|
("Exit Fullscreen", "ออกจากเต็มหน้าจอ"),
|
|
("Fullscreen", "เต็มหน้าจอ"),
|
|
("Mobile Actions", "การดำเนินการบนมือถือ"),
|
|
("Select Monitor", "เลือกหน้าจอ"),
|
|
("Control Actions", "การดำเนินการควบคุม"),
|
|
("Display Settings", "การตั้งค่าแสดงผล"),
|
|
("Ratio", "อัตราส่วน"),
|
|
("Image Quality", "คุณภาพภาพ"),
|
|
("Scroll Style", "ลักษณะการเลื่อน"),
|
|
("Show Toolbar", "แสดงแถบเครื่องมือ"),
|
|
("Hide Toolbar", "ซ่อนแถบเครื่องมือ"),
|
|
("Direct Connection", "การเชื่อมต่อตรง"),
|
|
("Relay Connection", "การเชื่อมต่อแบบ Relay "),
|
|
("Secure Connection", "การเชื่อมต่อที่ปลอดภัย"),
|
|
("Insecure Connection", "การเชื่อมต่อที่ไม่ปลอดภัย"),
|
|
("Scale original", "ขนาดเดิม"),
|
|
("Scale adaptive", "ขนาดยืดหยุ่น"),
|
|
("General", "ทั่วไป"),
|
|
("Security", "ความปลอดภัย"),
|
|
("Theme", "ธีม"),
|
|
("Dark Theme", "ธีมมืด"),
|
|
("Light Theme", "ธีมสว่าง"),
|
|
("Dark", "มืด"),
|
|
("Light", "สว่าง"),
|
|
("Follow System", "ตามระบบ"),
|
|
("Enable hardware codec", "เปิดการใช้งานฮาร์ดแวร์ codec"),
|
|
("Unlock Security Settings", "ปลดล็อคการตั้งค่าความปลอดภัย"),
|
|
("Enable audio", "เปิดการใช้งานเสียง"),
|
|
("Unlock Network Settings", "ปลดล็อคการตั้งค่าเครือข่าย"),
|
|
("Server", "เซิร์ฟเวอร์"),
|
|
("Direct IP Access", "การเข้าถึง IP ตรง"),
|
|
("Proxy", "พรอกซี"),
|
|
("Apply", "นำไปใช้"),
|
|
("Disconnect all devices?", "ยกเลิกการเชื่อมต่ออุปกรณ์ทั้งหมด?"),
|
|
("Clear", "ล้างข้อมูล"),
|
|
("Audio Input Device", "อุปกรณ์รับอินพุทข้อมูลเสียง"),
|
|
("Use IP Whitelisting", "ใช้งาน IP ไวท์ลิสต์"),
|
|
("Network", "เครือข่าย"),
|
|
("Pin Toolbar", "ปักหมุดแถบเครื่องมือ"),
|
|
("Unpin Toolbar", "ยกเลิกการปักหมุดแถบเครื่องมือ"),
|
|
("Recording", "การบันทึก"),
|
|
("Directory", "ไดเรกทอรี่"),
|
|
("Automatically record incoming sessions", "บันทึกเซสชันขาเข้าโดยอัตโนมัติ"),
|
|
("Automatically record outgoing sessions", "บันทึกเซสชันขาออกโดยอัตโนมัติ"),
|
|
("Change", "เปลี่ยน"),
|
|
("Start session recording", "เริ่มต้นการบันทึกเซสชัน"),
|
|
("Stop session recording", "หยุดการบันทึกเซสซัน"),
|
|
("Enable recording session", "เปิดใช้งานการบันทึกเซสชัน"),
|
|
("Enable LAN discovery", "เปิดการใช้งานการค้นหาในวง LAN"),
|
|
("Deny LAN discovery", "ปฏิเสธการใช้งานการค้นหาในวง LAN"),
|
|
("Write a message", "เขียนข้อความ"),
|
|
("Prompt", "พร้อมต์"),
|
|
("Please wait for confirmation of UAC...", "กรุณารอการยืนยันจาก UAC..."),
|
|
("elevated_foreground_window_tip", "หน้าต่างปัจจุบันของเครื่องปลายทางต้องการสิทธิ์การใช้งานที่สูงขึ้นสำหรับการทำงาน ดังนั้นเมาส์และคีย์บอร์ดจะไม่สามารถใช้งานได้ชั่วคราว คุณสามารถขอผู้ใช้งานปลายทางให้ย่อหน้าต่าง หรือคลิกปุ่มให้สิทธิ์การใช้งานในหน้าต่างการจัดการการเชื่อมต่อ เพื่อหลีกเลี่ยงปัญหานี้เราแนะนำให้ดำเนินการติดตั้งซอฟท์แวร์ในเครื่องปลายทาง"),
|
|
("Disconnected", "ยกเลิกการเชื่อมต่อ"),
|
|
("Other", "อื่นๆ"),
|
|
("Confirm before closing multiple tabs", "ยืนยันการปิดหลายแท็บ"),
|
|
("Keyboard Settings", "การตั้งค่าคีย์บอร์ด"),
|
|
("Full Access", "การเข้าถึงทั้งหมด"),
|
|
("Screen Share", "การแชร์จอ"),
|
|
("ubuntu-21-04-required", "Wayland ต้องการ Ubuntu เวอร์ชัน 21.04 หรือสูงกว่า"),
|
|
("wayland-requires-higher-linux-version", "Wayland ต้องการลินุกซ์เวอร์ชันที่สูงกว่านี้ กรุณาเปลี่ยนไปใช้เดสก์ท็อป X11 หรือเปลี่ยนระบบปฏิบัติการของคุณ"),
|
|
("xdp-portal-unavailable", "การจับภาพหน้าจอ Wayland ล้มเหลว XDG Desktop Portal อาจขัดข้องหรือไม่พร้อมใช้งาน ลองรีสตาร์ทด้วยคำสั่ง `systemctl --user restart xdg-desktop-portal`"),
|
|
("JumpLink", "View"),
|
|
("Please Select the screen to be shared(Operate on the peer side).", "กรุณาเลือกหน้าจอที่ต้องการแชร์ (ใช้งานในอีกฝั่งของการเชื่อมต่อ)"),
|
|
("Show RustDesk", "แสดง RustDesk"),
|
|
("This PC", "พีซีเครื่องนี้"),
|
|
("or", "หรือ"),
|
|
("Elevate", "ยกระดับ"),
|
|
("Zoom cursor", "ขยายเคอร์เซอร์"),
|
|
("Accept sessions via password", "ยอมรับการเชื่อมต่อด้วยรหัสผ่าน"),
|
|
("Accept sessions via click", "ยอมรับการเชื่อมต่อด้วยการคลิก"),
|
|
("Accept sessions via both", "ยอมรับการเชื่อมต่อด้วยทั้งสองวิธิ"),
|
|
("Please wait for the remote side to accept your session request...", "กรุณารอให้อีกฝั่งยอมรับการเชื่อมต่อของคุณ..."),
|
|
("One-time Password", "รหัสผ่านครั้งเดียว"),
|
|
("Use one-time password", "ใช้รหัสผ่านครั้งเดียว"),
|
|
("One-time password length", "ความยาวรหัสผ่านครั้งเดียว"),
|
|
("Request access to your device", "คำขอการเข้าถึงอุปกรณ์ของคุณ"),
|
|
("Hide connection management window", "ซ่อนหน้าต่างการจัดการการเชื่อมต่อ"),
|
|
("hide_cm_tip", "อนุญาตการซ่อนก็ต่อเมื่อยอมรับการเชื่อมต่อด้วยรหัสผ่าน และต้องเป็นรหัสผ่านถาวรเท่านั้น"),
|
|
("wayland_experiment_tip", "การสนับสนุน Wayland ยังอยู่ในขั้นตอนการทดลอง กรุณาใช้ X11 หากคุณต้องการใช้งานการเข้าถึงแบบไม่มีผู้ดูแล"),
|
|
("Right click to select tabs", "คลิกขวาเพื่อเลือกแท็บ"),
|
|
("Skipped", "ข้าม"),
|
|
("Add to address book", "เพิ่มไปยังสมุดรายชื่อ"),
|
|
("Group", "กลุ่ม"),
|
|
("Search", "ค้นหา"),
|
|
("Closed manually by web console", "ถูกปิดโดยเว็บคอนโซล"),
|
|
("Local keyboard type", "ประเภทคีย์บอร์ด"),
|
|
("Select local keyboard type", "เลือกประเภทคีย์บอร์ด"),
|
|
("software_render_tip", "ถ้าคุณใช้กราฟิกการ์ดกับระบบ Linux และหน้าต่างของเครื่องปลายทางปิดในทันทีหลังจากการเชื่อมต่อ การเปลี่ยนไปใช้ไดรเวอร์ Nouveau และเลือกใช้โหมดการเรนเดอร์แบบซอฟท์แวร์อาจช่วยได้ (ต้องรีสตาร์ทโปรแกรม)"),
|
|
("Always use software rendering", "ใช้การเรนเดอร์แบบซอฟท์แวร์เสมอ"),
|
|
("config_input", "เพื่อที่จะควบคุมเครื่องเดสก์ท็อปปลายทางด้วยคีย์บอร์ด คุณจำเป็นจะต้องอนุญาตสิทธิ์ \"การตรวจสอบ Input\" ให้แก่ RustDesk"),
|
|
("config_microphone", "เพื่อที่จะส่งเสียงพูดไปยังปลายทาง คุณจำเป็นจะต้องอนุญาตสิทธิ์ \"การบันทึกเสียง\" ให้แก่ RustDesk"),
|
|
("request_elevation_tip", "คุณสามารถขอยกระดับสิทธิ์การใช้งานได้ หากมีผู้ใช้งานอยู่ในฝั่งเครื่องปลายทาง"),
|
|
("Wait", "รอ"),
|
|
("Elevation Error", "การยกระดับสิทธิ์การใช้งานผิดพลาด"),
|
|
("Ask the remote user for authentication", "ขอความช่วยเหลือผู้ใช้งานปลายทางเพื่อพิสูจน์ตัวตน"),
|
|
("Choose this if the remote account is administrator", "เลือกข้อนี้ถ้าบัญชีผู้ใช้งานปลายทางเป็นผู้ดูแลระบบ"),
|
|
("Transmit the username and password of administrator", "ส่งข้อมูลผู้ใช้งานและรหัสผ่านของผู้ดูแลระบบ"),
|
|
("still_click_uac_tip", "ผู้ใช้งานปลายทางยังจำเป็นที่จะต้องกดปุ่ม ตกลง บนหน้าต่าง UAC ของ RustDesk"),
|
|
("Request Elevation", "ขอยกระดับสิทธิ์การใช้งาน"),
|
|
("wait_accept_uac_tip", "กรุณารอผู้ใช้งานปลายทางกดยินยอมหน้าต่าง UAC"),
|
|
("Elevate successfully", "การยกระดับสิทธิ์การใช้งานสำเร็จ"),
|
|
("uppercase", "พิมพ์ใหญ่"),
|
|
("lowercase", "พิมพ์เล็ก"),
|
|
("digit", "หลัก"),
|
|
("special character", "อักขระพิเศษ"),
|
|
("length>=8", "ความยาวมากกว่า 8"),
|
|
("Weak", "ไม่ปลอดภัย"),
|
|
("Medium", "กลาง"),
|
|
("Strong", "ปลอดภัย"),
|
|
("Switch Sides", "สลับฝั่ง"),
|
|
("Please confirm if you want to share your desktop?", "กรุณายืนยันว่าคุณต้องการแบ่งปันหน้าเดสก์ท็อปของคุณ"),
|
|
("Display", "จอแสดงผล"),
|
|
("Default View Style", "แสดงผลแบบเริ่มต้น"),
|
|
("Default Scroll Style", "การเลื่อนแบบเริ่มต้น"),
|
|
("Default Image Quality", "คุณภาพของภาพแบบเริ่มต้น"),
|
|
("Default Codec", "Codec เริ่มต้น"),
|
|
("Bitrate", "บิตเรต"),
|
|
("FPS", "FPS"),
|
|
("Auto", "อัตโนมัติ"),
|
|
("Other Default Options", "ตัวเลือกเริ่มต้นอื่นๆ"),
|
|
("Voice call", "การโทรด้วยเสียง"),
|
|
("Text chat", "การสนทนาด้วยข้อความ"),
|
|
("Stop voice call", "หยุดการโทรด้วยเสียง"),
|
|
("relay_hint_tip", "การเชื่อมต่อโดยตรงอาจเป็นไปไม่ได้ ดังนั้นคุณสามารถลองเชื่อมต่อผ่าน Relay หรือตั้งค่าให้เชื่อมต่อผ่าน Relay เป็นค่าเริ่มต้น คุณสามารถเพิ่ม \"/r\" ต่อท้ายไปยัง ID หรือเลือกตัวเลือก \"เชื่อมต่อผ่าน Relay เสมอ\" ในการ์ดของการเชื่อมต่อล่าสุด (ถ้ามี)"),
|
|
("Reconnect", "เชื่อมต่ออีกครั้ง"),
|
|
("Codec", "Codec"),
|
|
("Resolution", "ความละเอียด"),
|
|
("No transfers in progress", "ไม่มีการถ่ายโอนในขณะนี้"),
|
|
("Set one-time password length", "ตั้งค่าความยาวรหัสผ่านครั้งเดียว"),
|
|
("RDP Settings", "การตั้งค่า RDP"),
|
|
("Sort by", "เรียงลำดับโดย"),
|
|
("New Connection", "การเชื่อมต่อใหม่"),
|
|
("Restore", "คืนค่า"),
|
|
("Minimize", "ย่อ"),
|
|
("Maximize", "ขยาย"),
|
|
("Your Device", "อุปกรณ์ของคุณ"),
|
|
("empty_recent_tip", "คุณยังไม่มีการเชื่อมต่อล่าสุด ได้เวลาวางแผนเพื่อเริ่มต้นแล้ว"),
|
|
("empty_favorite_tip", "ยังไม่มีการเชื่อมต่อรายการโปรดเหรอ? มาเริ่มต้นหาใครซักคนเพื่อเชื่อมต่อด้วย และเพิ่มเข้าไปยังรายการโปรดของคุณกัน"),
|
|
("empty_lan_tip", "ไม่นะ ดูเหมือนว่าเราจะยังไม่พบใครตรงนี้"),
|
|
("empty_address_book_tip", "ดูเหมือนว่าคุณยังไม่มีใครถูกบันทึกในสมุดรายชื่อของคุณ"),
|
|
("Empty Username", "ชื่อผู้ใช้งานว่างเปล่า"),
|
|
("Empty Password", "รหัสผ่านว่างเปล่า"),
|
|
("Me", "ฉัน"),
|
|
("identical_file_tip", "ไฟล์นี้เหมือนกับไฟล์ของอีกฝั่ง"),
|
|
("show_monitors_tip", "แสดงหน้าจอในแถบเครื่องมือ"),
|
|
("View Mode", "โหมดการดู"),
|
|
("verify_rustdesk_password_tip", "ยืนยันความถูกต้องรหัสผ่านของ RustDesk"),
|
|
("No need to elevate", "ไม่จำเป็นต้องยกระดับสิทธิ์การใช้งาน"),
|
|
("System Sound", "เสียงของระบบ"),
|
|
("Default", "ค่าเริ่มต้น"),
|
|
("New RDP", "RDP ใหม่"),
|
|
("Fingerprint", "ลายนิ้วมือ"),
|
|
("Copy Fingerprint", "คัดลอกลายนิ้วมือ"),
|
|
("no fingerprints", "ไม่มีลายนิ้วมือ"),
|
|
("Update", "อัปเดต"),
|
|
("resolution_original_tip", "ความละเอียดดั้งเดิม"),
|
|
("resolution_fit_local_tip", "ความละเอียดตามต้นทาง"),
|
|
("resolution_custom_tip", "ความละเอียดแบบกำหนดเอง"),
|
|
("Collapse toolbar", "พับแถบเครื่องมือ"),
|
|
("Accept and Elevate", "ยอมรับ และยกระดับสิทธิ์การใช้งาน"),
|
|
("accept_and_elevate_btn_tooltip", "ยอมรับการเชื่อมต่อ และยกระดับสิทธิ์ UAC"),
|
|
("clipboard_wait_response_timeout_tip", "หมดเวลารอการตอบสนองของการคัดลอก"),
|
|
("Incoming connection", "การเชื่อมต่อขาเข้า"),
|
|
("Outgoing connection", "การเชื่อมต่อขาออก"),
|
|
("Exit", "ออก"),
|
|
("Open", "เปิด"),
|
|
("logout_tip", "คุณแน่ใจที่จะออกจากระบบหรือไม่?"),
|
|
("Service", "เซอร์วิส"),
|
|
("Start", "เริ่ม"),
|
|
("Stop", "หยุด"),
|
|
("exceed_max_devices", "จำนวนอุปกรณ์ที่จัดการของคุณเต็มจำนวนแล้ว"),
|
|
("Sync with recent sessions", "Sync กับเซสชันล่าสุด"),
|
|
("Sort tags", "เรียงแท็ก"),
|
|
("Open connection in new tab", "เริ่มการเชื่อมต่อในแท็บใหม่"),
|
|
("Move tab to new window", "ย้ายแท็บไปหน้าต่างใหม่"),
|
|
("Can not be empty", "ไม่สามารถเว้นว่างได้"),
|
|
("Already exists", "มีอยู่แล้ว"),
|
|
("Change Password", "เปลี่ยนรหัสผ่าน"),
|
|
("Refresh Password", "รีเฟรชรหัสผ่าน"),
|
|
("ID", "ID"),
|
|
("Grid View", "มุมมองแบบช่อง"),
|
|
("List View", "มุมมองแบบรายการ"),
|
|
("Select", "เลือก"),
|
|
("Toggle Tags", "สลับแท็ก"),
|
|
("pull_ab_failed_tip", "การรีเฟรชสมุดรายชื่อล้มเหลว"),
|
|
("push_ab_failed_tip", "การ Sync สมุดรายชื่อไปยังเซิร์ฟเวอร์ล้มเหลว"),
|
|
("synced_peer_readded_tip", "อุปกรณ์ที่อยู่ในรายการล่าสุดจะถูก sync กลับไปยังสมุดรายชื่อ"),
|
|
("Change Color", "เปลี่ยนสี"),
|
|
("Primary Color", "สีหลัก"),
|
|
("HSV Color", "สี HSV"),
|
|
("Installation Successful!", "การติดตั้งเสร็จสมบูรณ์"),
|
|
("Installation failed!", "การติดตั้งล้มเหลว"),
|
|
("Reverse mouse wheel", "เลื่อมลูกกลิ้งเมาส์แบบกลับด้าน"),
|
|
("{} sessions", "{} เซสชัน"),
|
|
("scam_title", "คุณอาจกำลังถูกหลอกลวง!"),
|
|
("scam_text1", "ถ้าคุณกำลังคุยโทรศัพท์กับคนที่คุณไม่รู้จักและไม่ไว้ใจ และคนๆนั้นกำลังขอให้คุณเปิดใช้งาน RustDesk อย่าทำตามและรีบวางสายในทันที"),
|
|
("scam_text2", "เขาเหล่านั้นอาจเป็นมิจฉาชีพที่กำลังพยายามจะขโมยเงินและข้อมูลส่วนตัวของคุณ"),
|
|
("Don't show again", "อย่าแสดงอีก"),
|
|
("I Agree", "ยอมรับ"),
|
|
("Decline", "ปฏิเสธ"),
|
|
("Timeout in minutes", "หมดเวลาในอีกซักครู่"),
|
|
("auto_disconnect_option_tip", "ยกเลิกการเชื่อมต่ออัตโนมัติในกรณีที่ผู้ใช้งานไม่มีการเคลื่อนไหว"),
|
|
("Connection failed due to inactivity", "การเชื่อมต่อล้มเหลวเนื่องจากไม่มีการเคลื่อนไหว"),
|
|
("Check for software update on startup", "ตรวจสอบการอัปเดตโปรแกรมเมื่อเริ่มต้นใช้งาน"),
|
|
("upgrade_rustdesk_server_pro_to_{}_tip", "กรุณาอัปเดต RustDesk Server Pro ไปยังเวอร์ชัน {} หรือใหม่กว่า!"),
|
|
("pull_group_failed_tip", "การเรียกใช้งานกลุ่มล้มเหลว"),
|
|
("Filter by intersection", "กรองแบบตัดร่วม"),
|
|
("Remove wallpaper during incoming sessions", "นำวอลล์เปเปอร์ออกระหว่างเซสชันขาเข้า"),
|
|
("Test", "ทดสอบ"),
|
|
("display_is_plugged_out_msg", "จอแสดงผลถูกถอดออก กำลังสลับไปยังจอแสดงผลแรก"),
|
|
("No displays", "ไม่มีจอแสดงผล"),
|
|
("Open in new window", "เปิดในหน้าต่างใหม่"),
|
|
("Show displays as individual windows", "แสดงจอแสดงผลเป็นหน้าต่างแยกแต่ละจอ"),
|
|
("Use all my displays for the remote session", "ใช้จอแสดงผลทั้งหมดของฉันสำหรับเซสชันปลายทาง"),
|
|
("selinux_tip", "SELinux ถูกเปิดใช้งานบนอุปกรณ์ของคุณ ซึ่งอาจทำให้ RustDesk ทำงานเป็นฝ่ายถูกควบคุมได้ไม่สมบูรณ์"),
|
|
("Change view", "เปลี่ยนมุมมอง"),
|
|
("Big tiles", "ไทล์ขนาดใหญ่"),
|
|
("Small tiles", "ไทล์ขนาดเล็ก"),
|
|
("List", "รายการ"),
|
|
("Virtual display", "จอแสดงผลเสมือน"),
|
|
("Plug out all", "ถอดออกทั้งหมด"),
|
|
("True color (4:4:4)", "สีจริง (4:4:4)"),
|
|
("Enable blocking user input", "เปิดใช้งานการบล็อกการป้อนข้อมูลของผู้ใช้"),
|
|
("id_input_tip", "คุณสามารถป้อน ID, IP ตรง หรือโดเมนพร้อมพอร์ต (<domain>:<port>) ได้\nหากต้องการเข้าถึงอุปกรณ์บนเซิร์ฟเวอร์อื่น กรุณาเพิ่มที่อยู่เซิร์ฟเวอร์ต่อท้าย (<id>@<server_address>?key=<key_value>) ตัวอย่างเช่น\n9123456234@192.168.16.1:21117?key=5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM=\nหากต้องการเข้าถึงอุปกรณ์บนเซิร์ฟเวอร์สาธารณะ กรุณาป้อน \"<id>@public\" ซึ่งไม่จำเป็นต้องใช้คีย์สำหรับเซิร์ฟเวอร์สาธารณะ\n\nหากต้องการบังคับให้ใช้การเชื่อมต่อแบบรีเลย์ในการเชื่อมต่อครั้งแรก ให้เพิ่ม \"/r\" ต่อท้าย ID ตัวอย่างเช่น \"9123456234/r\""),
|
|
("privacy_mode_impl_mag_tip", "โหมด 1"),
|
|
("privacy_mode_impl_virtual_display_tip", "โหมด 2"),
|
|
("Enter privacy mode", "เข้าสู่โหมดความเป็นส่วนตัว"),
|
|
("Exit privacy mode", "ออกจากโหมดความเป็นส่วนตัว"),
|
|
("idd_not_support_under_win10_2004_tip", "ไม่รองรับไดรเวอร์จอแสดงผลทางอ้อม ต้องใช้ Windows 10 เวอร์ชัน 2004 หรือใหม่กว่า"),
|
|
("input_source_1_tip", "แหล่งป้อนข้อมูล 1"),
|
|
("input_source_2_tip", "แหล่งป้อนข้อมูล 2"),
|
|
("Swap control-command key", "สลับปุ่ม control-command"),
|
|
("swap-left-right-mouse", "สลับปุ่มเมาส์ซ้าย-ขวา"),
|
|
("2FA code", "รหัส 2FA"),
|
|
("More", "เพิ่มเติม"),
|
|
("enable-2fa-title", "เปิดใช้งานการยืนยันตัวตนแบบสองปัจจัย"),
|
|
("enable-2fa-desc", "กรุณาตั้งค่าตัวยืนยันตัวตนของคุณตอนนี้ คุณสามารถใช้แอปยืนยันตัวตน เช่น Authy, Microsoft หรือ Google Authenticator บนโทรศัพท์หรือเดสก์ท็อปของคุณ\n\nสแกนคิวอาร์โค้ดด้วยแอปของคุณ แล้วป้อนรหัสที่แอปแสดงเพื่อเปิดใช้งานการยืนยันตัวตนแบบสองปัจจัย"),
|
|
("wrong-2fa-code", "ไม่สามารถยืนยันรหัสได้ ตรวจสอบว่ารหัสและการตั้งค่าเวลาท้องถิ่นถูกต้อง"),
|
|
("enter-2fa-title", "การยืนยันตัวตนแบบสองปัจจัย"),
|
|
("Email verification code must be 6 characters.", "รหัสยืนยันทางอีเมลต้องมี 6 ตัวอักษร"),
|
|
("2FA code must be 6 digits.", "รหัส 2FA ต้องมี 6 หลัก"),
|
|
("Multiple Windows sessions found", "พบเซสชัน Windows หลายเซสชัน"),
|
|
("Please select the session you want to connect to", "กรุณาเลือกเซสชันที่คุณต้องการเชื่อมต่อ"),
|
|
("powered_by_me", "ขับเคลื่อนโดย RustDesk"),
|
|
("outgoing_only_desk_tip", "นี่คือรุ่นที่ปรับแต่งเอง\nคุณสามารถเชื่อมต่อไปยังอุปกรณ์อื่นได้ แต่อุปกรณ์อื่นไม่สามารถเชื่อมต่อมายังอุปกรณ์ของคุณได้"),
|
|
("preset_password_warning", "รุ่นที่ปรับแต่งเองนี้มาพร้อมกับรหัสผ่านที่ตั้งไว้ล่วงหน้า ผู้ที่ทราบรหัสผ่านนี้สามารถควบคุมอุปกรณ์ของคุณได้อย่างเต็มที่ หากคุณไม่ได้คาดหวังเช่นนี้ กรุณาถอนการติดตั้งซอฟต์แวร์ทันที"),
|
|
("Security Alert", "การแจ้งเตือนความปลอดภัย"),
|
|
("My address book", "สมุดรายชื่อของฉัน"),
|
|
("Personal", "ส่วนตัว"),
|
|
("Owner", "เจ้าของ"),
|
|
("Set shared password", "ตั้งรหัสผ่านที่แชร์"),
|
|
("Exist in", "มีอยู่ใน"),
|
|
("Read-only", "อ่านอย่างเดียว"),
|
|
("Read/Write", "อ่าน/เขียน"),
|
|
("Full Control", "ควบคุมเต็มรูปแบบ"),
|
|
("share_warning_tip", "ช่องข้อมูลด้านบนถูกแชร์และผู้อื่นมองเห็นได้"),
|
|
("Everyone", "ทุกคน"),
|
|
("ab_web_console_tip", "ดูเพิ่มเติมในเว็บคอนโซล"),
|
|
("allow-only-conn-window-open-tip", "อนุญาตการเชื่อมต่อเฉพาะเมื่อหน้าต่าง RustDesk เปิดอยู่"),
|
|
("no_need_privacy_mode_no_physical_displays_tip", "ไม่มีจอแสดงผลทางกายภาพ จึงไม่จำเป็นต้องใช้โหมดความเป็นส่วนตัว"),
|
|
("Follow remote cursor", "ติดตามเคอร์เซอร์ปลายทาง"),
|
|
("Follow remote window focus", "ติดตามโฟกัสหน้าต่างปลายทาง"),
|
|
("default_proxy_tip", "โปรโตคอลและพอร์ตเริ่มต้นคือ Socks5 และ 1080"),
|
|
("no_audio_input_device_tip", "ไม่พบอุปกรณ์รับเสียงเข้า"),
|
|
("Incoming", "ขาเข้า"),
|
|
("Outgoing", "ขาออก"),
|
|
("Clear Wayland screen selection", "ล้างการเลือกหน้าจอ Wayland"),
|
|
("clear_Wayland_screen_selection_tip", "หลังจากล้างการเลือกหน้าจอแล้ว คุณสามารถเลือกหน้าจอที่จะแชร์ใหม่ได้"),
|
|
("confirm_clear_Wayland_screen_selection_tip", "คุณแน่ใจหรือไม่ว่าต้องการล้างการเลือกหน้าจอ Wayland?"),
|
|
("android_new_voice_call_tip", "ได้รับคำขอโทรด้วยเสียงใหม่ หากคุณยอมรับ เสียงจะสลับไปเป็นการสื่อสารด้วยเสียง"),
|
|
("texture_render_tip", "ใช้การเรนเดอร์แบบเท็กซ์เจอร์เพื่อให้ภาพลื่นไหลขึ้น คุณสามารถลองปิดตัวเลือกนี้หากพบปัญหาในการเรนเดอร์"),
|
|
("Use texture rendering", "ใช้การเรนเดอร์แบบเท็กซ์เจอร์"),
|
|
("Floating window", "หน้าต่างลอย"),
|
|
("floating_window_tip", "ช่วยให้บริการเบื้องหลังของ RustDesk ทำงานต่อเนื่อง"),
|
|
("Keep screen on", "เปิดหน้าจอไว้ตลอด"),
|
|
("Never", "ไม่เลย"),
|
|
("During controlled", "ขณะถูกควบคุม"),
|
|
("During service is on", "ขณะที่บริการเปิดอยู่"),
|
|
("Capture screen using DirectX", "จับภาพหน้าจอโดยใช้ DirectX"),
|
|
("Back", "ย้อนกลับ"),
|
|
("Apps", "แอป"),
|
|
("Volume up", "เพิ่มเสียง"),
|
|
("Volume down", "ลดเสียง"),
|
|
("Power", "เปิด/ปิดเครื่อง"),
|
|
("Telegram bot", "บอท Telegram"),
|
|
("enable-bot-tip", "หากคุณเปิดใช้งานคุณสมบัตินี้ คุณจะสามารถรับรหัส 2FA จากบอทของคุณได้ และยังสามารถทำหน้าที่เป็นการแจ้งเตือนการเชื่อมต่อได้อีกด้วย"),
|
|
("enable-bot-desc", "1. เปิดแชทกับ @BotFather\n2. ส่งคำสั่ง \"/newbot\" คุณจะได้รับโทเค็นหลังจากทำขั้นตอนนี้เสร็จ\n3. เริ่มแชทกับบอทที่คุณเพิ่งสร้าง ส่งข้อความที่ขึ้นต้นด้วยเครื่องหมายทับ (\"/\") เช่น \"/hello\" เพื่อเปิดใช้งาน\n"),
|
|
("cancel-2fa-confirm-tip", "คุณแน่ใจหรือไม่ว่าต้องการยกเลิก 2FA?"),
|
|
("cancel-bot-confirm-tip", "คุณแน่ใจหรือไม่ว่าต้องการยกเลิกบอท Telegram?"),
|
|
("About RustDesk", "เกี่ยวกับ RustDesk"),
|
|
("Send clipboard keystrokes", "ส่งการกดแป้นจากคลิปบอร์ด"),
|
|
("network_error_tip", "กรุณาตรวจสอบการเชื่อมต่อเครือข่ายของคุณ แล้วคลิกลองใหม่"),
|
|
("Unlock with PIN", "ปลดล็อกด้วย PIN"),
|
|
("Requires at least {} characters", "ต้องมีอย่างน้อย {} ตัวอักษร"),
|
|
("Wrong PIN", "PIN ไม่ถูกต้อง"),
|
|
("Set PIN", "ตั้งค่า PIN"),
|
|
("Enable trusted devices", "เปิดใช้งานอุปกรณ์ที่เชื่อถือได้"),
|
|
("Manage trusted devices", "จัดการอุปกรณ์ที่เชื่อถือได้"),
|
|
("Platform", "แพลตฟอร์ม"),
|
|
("Days remaining", "วันที่เหลืออยู่"),
|
|
("enable-trusted-devices-tip", "ข้ามการยืนยัน 2FA บนอุปกรณ์ที่เชื่อถือได้"),
|
|
("Parent directory", "ไดเรกทอรีหลัก"),
|
|
("Resume", "ทำต่อ"),
|
|
("Invalid file name", "ชื่อไฟล์ไม่ถูกต้อง"),
|
|
("one-way-file-transfer-tip", "การถ่ายโอนไฟล์ทางเดียวถูกเปิดใช้งานบนฝ่ายที่ถูกควบคุม"),
|
|
("Authentication Required", "ต้องมีการยืนยันตัวตน"),
|
|
("Authenticate", "ยืนยันตัวตน"),
|
|
("web_id_input_tip", "คุณสามารถป้อน ID ในเซิร์ฟเวอร์เดียวกันได้ ไม่รองรับการเข้าถึงด้วย IP ตรงในเว็บไคลเอนต์\nหากต้องการเข้าถึงอุปกรณ์บนเซิร์ฟเวอร์อื่น กรุณาเพิ่มที่อยู่เซิร์ฟเวอร์ต่อท้าย (<id>@<server_address>?key=<key_value>) ตัวอย่างเช่น\n9123456234@192.168.16.1:21117?key=5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM=\nหากต้องการเข้าถึงอุปกรณ์บนเซิร์ฟเวอร์สาธารณะ กรุณาป้อน \"<id>@public\" ซึ่งไม่จำเป็นต้องใช้คีย์สำหรับเซิร์ฟเวอร์สาธารณะ"),
|
|
("Download", "ดาวน์โหลด"),
|
|
("Upload folder", "อัปโหลดโฟลเดอร์"),
|
|
("Upload files", "อัปโหลดไฟล์"),
|
|
("Clipboard is synchronized", "คลิปบอร์ดถูกซิงค์แล้ว"),
|
|
("Update client clipboard", "อัปเดตคลิปบอร์ดของไคลเอนต์"),
|
|
("Untagged", "ไม่มีแท็ก"),
|
|
("new-version-of-{}-tip", "มี {} เวอร์ชันใหม่พร้อมใช้งาน"),
|
|
("Accessible devices", "อุปกรณ์ที่เข้าถึงได้"),
|
|
("upgrade_remote_rustdesk_client_to_{}_tip", "กรุณาอัปเดต RustDesk ไคลเอนต์ไปยังเวอร์ชัน {} หรือใหม่กว่าที่ฝั่งปลายทาง!"),
|
|
("d3d_render_tip", "เมื่อเปิดใช้งานการเรนเดอร์ D3D หน้าจอควบคุมระยะไกลอาจเป็นสีดำบนเครื่องบางเครื่อง"),
|
|
("Use D3D rendering", "ใช้การเรนเดอร์ D3D"),
|
|
("Printer", "เครื่องพิมพ์"),
|
|
("printer-os-requirement-tip", "ฟังก์ชันการพิมพ์ขาออกต้องใช้ Windows 10 หรือสูงกว่า"),
|
|
("printer-requires-installed-{}-client-tip", "เพื่อให้สามารถใช้การพิมพ์ระยะไกลได้ ต้องติดตั้ง {} บนอุปกรณ์นี้"),
|
|
("printer-{}-not-installed-tip", "ยังไม่ได้ติดตั้งเครื่องพิมพ์ {}"),
|
|
("printer-{}-ready-tip", "เครื่องพิมพ์ {} ติดตั้งแล้วและพร้อมใช้งาน"),
|
|
("Install {} Printer", "ติดตั้งเครื่องพิมพ์ {}"),
|
|
("Outgoing Print Jobs", "งานพิมพ์ขาออก"),
|
|
("Incoming Print Jobs", "งานพิมพ์ขาเข้า"),
|
|
("Incoming Print Job", "งานพิมพ์ขาเข้า"),
|
|
("use-the-default-printer-tip", "ใช้เครื่องพิมพ์เริ่มต้น"),
|
|
("use-the-selected-printer-tip", "ใช้เครื่องพิมพ์ที่เลือก"),
|
|
("auto-print-tip", "พิมพ์โดยอัตโนมัติด้วยเครื่องพิมพ์ที่เลือก"),
|
|
("print-incoming-job-confirm-tip", "คุณได้รับงานพิมพ์จากเครื่องปลายทาง คุณต้องการดำเนินการพิมพ์ที่ฝั่งของคุณหรือไม่?"),
|
|
("remote-printing-disallowed-tile-tip", "ไม่อนุญาตให้พิมพ์ระยะไกล"),
|
|
("remote-printing-disallowed-text-tip", "การตั้งค่าสิทธิ์ของฝ่ายที่ถูกควบคุมปฏิเสธการพิมพ์ระยะไกล"),
|
|
("save-settings-tip", "บันทึกการตั้งค่า"),
|
|
("dont-show-again-tip", "ไม่ต้องแสดงข้อความนี้อีก"),
|
|
("Take screenshot", "จับภาพหน้าจอ"),
|
|
("Taking screenshot", "กำลังจับภาพหน้าจอ"),
|
|
("screenshot-merged-screen-not-supported-tip", "ขณะนี้ยังไม่รองรับการรวมภาพหน้าจอจากหลายจอแสดงผล กรุณาสลับไปใช้จอแสดงผลเดียวแล้วลองใหม่"),
|
|
("screenshot-action-tip", "กรุณาเลือกวิธีดำเนินการต่อกับภาพหน้าจอ"),
|
|
("Save as", "บันทึกเป็น"),
|
|
("Export", "ส่งออก"),
|
|
("Export Logs", "ส่งออกบันทึกการทำงาน"),
|
|
("Import Folder", "นำเข้าโฟลเดอร์"),
|
|
("Copy to clipboard", "คัดลอกไปยังคลิปบอร์ด"),
|
|
("Enable remote printer", "เปิดใช้งานเครื่องพิมพ์ระยะไกล"),
|
|
("Downloading {}", "กำลังดาวน์โหลด {}"),
|
|
("{} Update", "อัปเดต {}"),
|
|
("{}-to-update-tip", "{} จะปิดตอนนี้และติดตั้งเวอร์ชันใหม่"),
|
|
("download-new-version-failed-tip", "ดาวน์โหลดล้มเหลว คุณสามารถลองใหม่ หรือคลิกปุ่ม \"ดาวน์โหลด\" เพื่อดาวน์โหลดจากหน้าเผยแพร่และอัปเกรดด้วยตนเอง"),
|
|
("Auto update", "อัปเดตอัตโนมัติ"),
|
|
("update-failed-check-msi-tip", "การตรวจสอบวิธีการติดตั้งล้มเหลว กรุณาคลิกปุ่ม \"ดาวน์โหลด\" เพื่อดาวน์โหลดจากหน้าเผยแพร่และอัปเกรดด้วยตนเอง"),
|
|
("websocket_tip", "เมื่อใช้ WebSocket จะรองรับเฉพาะการเชื่อมต่อแบบรีเลย์เท่านั้น"),
|
|
("Use WebSocket", "ใช้ WebSocket"),
|
|
("Trackpad speed", "ความเร็วแทร็กแพด"),
|
|
("Default trackpad speed", "ความเร็วแทร็กแพดเริ่มต้น"),
|
|
("Numeric one-time password", "รหัสผ่านครั้งเดียวแบบตัวเลข"),
|
|
("Enable IPv6 P2P connection", "เปิดใช้งานการเชื่อมต่อ P2P แบบ IPv6"),
|
|
("Enable UDP hole punching", "เปิดใช้งาน UDP hole punching"),
|
|
("View camera", "ดูกล้อง"),
|
|
("Enable camera", "เปิดใช้งานกล้อง"),
|
|
("No cameras", "ไม่มีกล้อง"),
|
|
("view_camera_unsupported_tip", "อุปกรณ์ปลายทางไม่รองรับการดูกล้อง"),
|
|
("Terminal", "เทอร์มินัล"),
|
|
("Enable terminal", "เปิดใช้งานเทอร์มินัล"),
|
|
("New tab", "แท็บใหม่"),
|
|
("Keep terminal sessions on disconnect", "คงเซสชันเทอร์มินัลไว้เมื่อตัดการเชื่อมต่อ"),
|
|
("Terminal (Run as administrator)", "เทอร์มินัล (เรียกใช้ในฐานะผู้ดูแลระบบ)"),
|
|
("terminal-admin-login-tip", "กรุณาป้อนชื่อผู้ใช้และรหัสผ่านของผู้ดูแลระบบฝ่ายที่ถูกควบคุม"),
|
|
("Failed to get user token.", "ไม่สามารถรับโทเค็นของผู้ใช้"),
|
|
("Incorrect username or password.", "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง"),
|
|
("The user is not an administrator.", "ผู้ใช้ไม่ใช่ผู้ดูแลระบบ"),
|
|
("Failed to check if the user is an administrator.", "ไม่สามารถตรวจสอบว่าผู้ใช้เป็นผู้ดูแลระบบหรือไม่"),
|
|
("Supported only in the installed version.", "รองรับเฉพาะในเวอร์ชันที่ติดตั้งแล้วเท่านั้น"),
|
|
("elevation_username_tip", "ป้อนชื่อผู้ใช้ หรือ domain\\username"),
|
|
("Preparing for installation ...", "กำลังเตรียมการติดตั้ง ..."),
|
|
("Show my cursor", "แสดงเคอร์เซอร์ของฉัน"),
|
|
("Scale custom", "ปรับขนาดแบบกำหนดเอง"),
|
|
("Custom scale slider", "แถบเลื่อนปรับขนาดแบบกำหนดเอง"),
|
|
("Decrease", "ลด"),
|
|
("Increase", "เพิ่ม"),
|
|
("Show virtual mouse", "แสดงเมาส์เสมือน"),
|
|
("Virtual mouse size", "ขนาดเมาส์เสมือน"),
|
|
("Small", "เล็ก"),
|
|
("Large", "ใหญ่"),
|
|
("Show virtual joystick", "แสดงจอยสติ๊กเสมือน"),
|
|
("Edit note", "แก้ไขบันทึกข้อความ"),
|
|
("Alias", "นามแฝง"),
|
|
("ScrollEdge", "ScrollEdge"),
|
|
("Allow insecure TLS fallback", "อนุญาตการย้อนกลับใช้ TLS ที่ไม่ปลอดภัย"),
|
|
("allow-insecure-tls-fallback-tip", "โดยค่าเริ่มต้น RustDesk จะตรวจสอบใบรับรองของเซิร์ฟเวอร์สำหรับโปรโตคอลที่ใช้ TLS\nเมื่อเปิดใช้งานตัวเลือกนี้ RustDesk จะย้อนกลับไปข้ามขั้นตอนการตรวจสอบและดำเนินการต่อในกรณีที่การตรวจสอบล้มเหลว"),
|
|
("Disable UDP", "ปิดใช้งาน UDP"),
|
|
("disable-udp-tip", "ควบคุมว่าจะใช้ TCP เท่านั้นหรือไม่\nเมื่อเปิดใช้งานตัวเลือกนี้ RustDesk จะไม่ใช้ UDP 21116 อีกต่อไป และจะใช้ TCP 21116 แทน"),
|
|
("server-oss-not-support-tip", "หมายเหตุ: RustDesk server OSS ไม่มีคุณสมบัตินี้"),
|
|
("input note here", "ป้อนบันทึกข้อความที่นี่"),
|
|
("note-at-conn-end-tip", "ขอบันทึกข้อความเมื่อสิ้นสุดการเชื่อมต่อ"),
|
|
("Show terminal extra keys", "แสดงปุ่มเพิ่มเติมของเทอร์มินัล"),
|
|
("Relative mouse mode", "โหมดเมาส์แบบสัมพัทธ์"),
|
|
("rel-mouse-not-supported-peer-tip", "เครื่องปลายทางที่เชื่อมต่อไม่รองรับโหมดเมาส์แบบสัมพัทธ์"),
|
|
("rel-mouse-not-ready-tip", "โหมดเมาส์แบบสัมพัทธ์ยังไม่พร้อม กรุณาลองใหม่"),
|
|
("rel-mouse-lock-failed-tip", "ไม่สามารถล็อกเคอร์เซอร์ได้ โหมดเมาส์แบบสัมพัทธ์ถูกปิดใช้งานแล้ว"),
|
|
("rel-mouse-exit-{}-tip", "กด {} เพื่อออก"),
|
|
("rel-mouse-permission-lost-tip", "สิทธิ์การใช้คีย์บอร์ดถูกเพิกถอน โหมดเมาส์แบบสัมพัทธ์ถูกปิดใช้งานแล้ว"),
|
|
("Changelog", "บันทึกการเปลี่ยนแปลง"),
|
|
("keep-awake-during-outgoing-sessions-label", "เปิดหน้าจอไว้ระหว่างเซสชันขาออก"),
|
|
("keep-awake-during-incoming-sessions-label", "เปิดหน้าจอไว้ระหว่างเซสชันขาเข้า"),
|
|
("Continue with {}", "ทำต่อด้วย {}"),
|
|
("Display Name", "ชื่อที่แสดง"),
|
|
("password-hidden-tip", "ตั้งรหัสผ่านถาวรแล้ว (ซ่อนอยู่)"),
|
|
("preset-password-in-use-tip", "กำลังใช้รหัสผ่านที่ตั้งไว้ล่วงหน้าอยู่"),
|
|
("Enable privacy mode", "เปิดใช้งานโหมดความเป็นส่วนตัว"),
|
|
("allow-remote-toolbar-docking-any-edge", "อนุญาตให้ยึดแถบเครื่องมือปลายทางกับขอบหน้าต่างใดก็ได้"),
|
|
("API Token", "API Token"),
|
|
("Deploy", "ปรับใช้"),
|
|
("Custom ID (optional)", "ID แบบกำหนดเอง (ไม่บังคับ)"),
|
|
("server_requires_deployment_tip", "เซิร์ฟเวอร์กำหนดให้ปรับใช้อุปกรณ์นี้อย่างชัดเจน ปรับใช้ตอนนี้หรือไม่?"),
|
|
("The server does not require explicit deployment.", "เซิร์ฟเวอร์ไม่ต้องการการปรับใช้อย่างชัดเจน"),
|
|
("Unknown response.", "การตอบสนองที่ไม่รู้จัก"),
|
|
("wayland-keyboard-input-disabled-tip", "อนุญาตการป้อนข้อมูลจากคีย์บอร์ดหรือไม่?"),
|
|
("wayland-keyboard-input-consent-tip", "สิ่งที่คุณพิมพ์บนคอมพิวเตอร์ปลายทางนี้ (รวมถึงรหัสผ่าน) อาจถูกอ่านโดยแอปอื่นบนเครื่องนั้น"),
|
|
("wayland-keyboard-input-applies-to-tip", "ตัวเลือกนี้มีผลกับ:"),
|
|
("wayland-soft-keyboard-input-label", "การป้อนข้อมูลด้วยคีย์บอร์ดเสมือน"),
|
|
("wayland-keyboard-input-reset-choice-tip", "รีเซ็ตตัวเลือกการป้อนข้อมูลจากคีย์บอร์ด"),
|
|
("remember-wayland-keyboard-choice-tip", "ไม่ต้องถามอีกสำหรับคอมพิวเตอร์ปลายทางนี้"),
|
|
("Why this happens", "เหตุใดจึงเกิดขึ้น"),
|
|
("Switch display", "สลับจอแสดงผล"),
|
|
("Show monitor switch button on the main toolbar", "แสดงปุ่มสลับจอภาพบนแถบเครื่องมือหลัก"),
|
|
("Show on the minimized toolbar", "แสดงบนแถบเครื่องมือที่ย่อเล็กสุด"),
|
|
("All monitors", "จอภาพทั้งหมด"),
|
|
("#{} monitor", "จอภาพ {}"),
|
|
("conn-e2ee-unavailable-tip", "ไม่สามารถยืนยันการเข้ารหัสแบบต้นทางถึงปลายทางได้\nอุปกรณ์ระยะไกลอาจยังอยู่ระหว่างการตั้งค่า โปรดลองอีกครั้งภายหลัง\nหากปัญหานี้ยังเกิดขึ้นต่อไป เซิร์ฟเวอร์อาจไม่น่าเชื่อถือ\nต้องการดำเนินการต่อหรือไม่?"),
|
|
("ID whitelisting", "ID ไวท์ลิสต์"),
|
|
("Use ID whitelisting", "ใช้งาน ID ไวท์ลิสต์"),
|
|
("id_whitelist_tip", "อนุญาตเฉพาะการเชื่อมต่อจาก ID ที่ไวท์ลิสต์"),
|
|
("id_whitelist_wildcard_tip", "รองรับสัญลักษณ์แทน: '*' แทนอักขระจำนวนเท่าใดก็ได้, '?' แทนอักขระหนึ่งตัวพอดี"),
|
|
("Invalid ID", "ID ไม่ถูกต้อง"),
|
|
("Your ID is blocked by the peer", "ID ของคุณถูกบล็อกโดยฝั่งตรงข้าม"),
|
|
("Your ip is blocked by the peer", "IP ของคุณถูกบล็อกโดยฝั่งตรงข้าม"),
|
|
("id_whitelist_caveat_tip", "ID ถูกรายงานโดยไคลเอนต์ที่เชื่อมต่อ ไวท์ลิสต์ช่วยลดการเปิดเผยและไม่สามารถใช้แทนรหัสผ่านหรือ 2FA ได้"),
|
|
("whitelist_cidr_tip", "รองรับรูปแบบ CIDR เช่น 192.168.1.0/24"),
|
|
("Continue", "ดำเนินการต่อ"),
|
|
("Browser didn't open? Use the url below to sign in.", "เบราว์เซอร์ไม่เปิดใช่ไหม? ใช้ URL ด้านล่างเพื่อเข้าสู่ระบบ"),
|
|
("Lock canvas", "ล็อคแคนวาส"),
|
|
("Sync clipboard between sessions", "ซิงค์คลิปบอร์ดระหว่างเซสชัน"),
|
|
("sync-clipboard-between-sessions-tip", "ข้อความหรือรูปภาพที่คัดลอกในเซสชันระยะไกลหนึ่งจะถูกส่งไปยังคลิปบอร์ดของเซสชันอื่นที่เชื่อมต่ออยู่ด้วย"),
|
|
("terminal-clipboard-write-tip", ""),
|
|
("Allow terminal apps to copy to clipboard", ""),
|
|
("Enable", "เปิดใช้งาน"),
|
|
("Reuse one connection for port forwarding", "ใช้การเชื่อมต่อเดียวร่วมกันสำหรับการส่งต่อพอร์ต"),
|
|
("port-forward-mux-tip", "ส่งการเชื่อมต่อทั้งหมดของการส่งต่อพอร์ตหนึ่งรายการผ่านการเชื่อมต่อเดียวไปยังอีกฝ่าย แทนการเชื่อมต่อและเข้าสู่ระบบใหม่ทุกครั้ง"),
|
|
].iter().cloned().collect();
|
|
}
|