@jait/gateway 0.1.256 → 0.1.258
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/routes/preview.d.ts.map +1 -1
- package/dist/routes/preview.js +41 -2
- package/dist/routes/preview.js.map +1 -1
- package/dist/security/sandbox-manager.d.ts +8 -0
- package/dist/security/sandbox-manager.d.ts.map +1 -1
- package/dist/security/sandbox-manager.js +131 -2
- package/dist/security/sandbox-manager.js.map +1 -1
- package/dist/services/live-view-manager.d.ts +25 -0
- package/dist/services/live-view-manager.d.ts.map +1 -0
- package/dist/services/live-view-manager.js +178 -0
- package/dist/services/live-view-manager.js.map +1 -0
- package/dist/services/preview.d.ts +21 -2
- package/dist/services/preview.d.ts.map +1 -1
- package/dist/services/preview.js +140 -2
- package/dist/services/preview.js.map +1 -1
- package/dist/surfaces/browser.d.ts +51 -1
- package/dist/surfaces/browser.d.ts.map +1 -1
- package/dist/surfaces/browser.js +238 -20
- package/dist/surfaces/browser.js.map +1 -1
- package/dist/tools/preview-tools.d.ts.map +1 -1
- package/dist/tools/preview-tools.js +6 -3
- package/dist/tools/preview-tools.js.map +1 -1
- package/package.json +1 -1
- package/web-dist/assets/{_basePickBy-B5ojxQyY.js → _basePickBy-B1Q85huU.js} +1 -1
- package/web-dist/assets/{_baseUniq-BVcMC3e3.js → _baseUniq-xbSl0CM3.js} +1 -1
- package/web-dist/assets/{arc-B8rKyks5.js → arc-BPQiaftr.js} +1 -1
- package/web-dist/assets/{architectureDiagram-2XIMDMQ5-D5Rn0_M_.js → architectureDiagram-2XIMDMQ5-DAG0yXkD.js} +1 -1
- package/web-dist/assets/{blockDiagram-WCTKOSBZ-Dn0EedHT.js → blockDiagram-WCTKOSBZ-BHwTxFpO.js} +1 -1
- package/web-dist/assets/{c4Diagram-IC4MRINW-BYTFS9YT.js → c4Diagram-IC4MRINW-DSo8jOax.js} +1 -1
- package/web-dist/assets/channel-D0UG72Sd.js +1 -0
- package/web-dist/assets/{chunk-4BX2VUAB-c51Qw6zZ.js → chunk-4BX2VUAB-BvHzmUEU.js} +1 -1
- package/web-dist/assets/{chunk-55IACEB6-BLJEbYZY.js → chunk-55IACEB6-DRwUUfw9.js} +1 -1
- package/web-dist/assets/{chunk-FMBD7UC4-BTQRsQCz.js → chunk-FMBD7UC4-C-og1AV4.js} +1 -1
- package/web-dist/assets/{chunk-JSJVCQXG-BCQCgV3v.js → chunk-JSJVCQXG-DQ_Nx-12.js} +1 -1
- package/web-dist/assets/{chunk-KX2RTZJC-BdxNziNu.js → chunk-KX2RTZJC-DJt22pKX.js} +1 -1
- package/web-dist/assets/{chunk-NQ4KR5QH-DvtJCn0C.js → chunk-NQ4KR5QH-DwqccJna.js} +1 -1
- package/web-dist/assets/{chunk-QZHKN3VN-Bv5UUhJr.js → chunk-QZHKN3VN-t2Z5FHem.js} +1 -1
- package/web-dist/assets/{chunk-WL4C6EOR-DgCZzsOT.js → chunk-WL4C6EOR-DhnNywRj.js} +1 -1
- package/web-dist/assets/classDiagram-VBA2DB6C-Dnib5gxK.js +1 -0
- package/web-dist/assets/classDiagram-v2-RAHNMMFH-Dnib5gxK.js +1 -0
- package/web-dist/assets/clone-jMsfbHCu.js +1 -0
- package/web-dist/assets/{cose-bilkent-S5V4N54A-CmDdGIef.js → cose-bilkent-S5V4N54A-CLw8R8jY.js} +1 -1
- package/web-dist/assets/{dagre-KLK3FWXG-BzeF6p1D.js → dagre-KLK3FWXG-DG-8BOX_.js} +1 -1
- package/web-dist/assets/{diagram-E7M64L7V-lDeWArgl.js → diagram-E7M64L7V-I6Ok2sG0.js} +1 -1
- package/web-dist/assets/{diagram-IFDJBPK2-BguEZbUg.js → diagram-IFDJBPK2-ertAk1QG.js} +1 -1
- package/web-dist/assets/{diagram-P4PSJMXO-CnTxg2wa.js → diagram-P4PSJMXO-B9Yr9iab.js} +1 -1
- package/web-dist/assets/{erDiagram-INFDFZHY-D2aGee-H.js → erDiagram-INFDFZHY-BMva8gYu.js} +1 -1
- package/web-dist/assets/{flowDiagram-PKNHOUZH-DYPu_lOt.js → flowDiagram-PKNHOUZH-D1dJMWaL.js} +1 -1
- package/web-dist/assets/{ganttDiagram-A5KZAMGK-D-9aApiK.js → ganttDiagram-A5KZAMGK-qRDi6l_-.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-K3NZZRJ6-CGHZTbqZ.js → gitGraphDiagram-K3NZZRJ6-X8idci3H.js} +1 -1
- package/web-dist/assets/{graph-xl1n4wd4.js → graph-6RqPLKMD.js} +1 -1
- package/web-dist/assets/{index-CNdW3yYd.js → index-B0GgFn4l.js} +306 -306
- package/web-dist/assets/{index-qWyAYgAD.css → index-DFW3_r8A.css} +1 -1
- package/web-dist/assets/{infoDiagram-LFFYTUFH-JQ1DhuIN.js → infoDiagram-LFFYTUFH-CMk_Yj9c.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-PHBUUO56-BiQo9puY.js → ishikawaDiagram-PHBUUO56-CwBIr6E2.js} +1 -1
- package/web-dist/assets/{journeyDiagram-4ABVD52K-BWvVCFKb.js → journeyDiagram-4ABVD52K-BgD5iS1h.js} +1 -1
- package/web-dist/assets/{kanban-definition-K7BYSVSG-B1pZvgm7.js → kanban-definition-K7BYSVSG-CzjxHzou.js} +1 -1
- package/web-dist/assets/{layout-C_VnOnT4.js → layout-b5fe_UxD.js} +1 -1
- package/web-dist/assets/{linear-BeBoVpvX.js → linear-ChI_4a9O.js} +1 -1
- package/web-dist/assets/{mindmap-definition-YRQLILUH-B3U5ZJAw.js → mindmap-definition-YRQLILUH-e_vvWWg8.js} +1 -1
- package/web-dist/assets/{pieDiagram-SKSYHLDU-B9JMxGDx.js → pieDiagram-SKSYHLDU-CJtQ5J0D.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-337W2JSQ-DNAEOevf.js → quadrantDiagram-337W2JSQ-Cf_x_2ej.js} +1 -1
- package/web-dist/assets/{requirementDiagram-Z7DCOOCP-Dcgzabvl.js → requirementDiagram-Z7DCOOCP-DCQvoqk_.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-WA2Y5GQK-BDcQVCtL.js → sankeyDiagram-WA2Y5GQK-D2eB9_Im.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-2WXFIKYE-5kY7GmoR.js → sequenceDiagram-2WXFIKYE-Ccyyepsb.js} +1 -1
- package/web-dist/assets/{stateDiagram-RAJIS63D-BwQlMlEC.js → stateDiagram-RAJIS63D-DPMGShy8.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-FVOUBMTO-BmvKM7hT.js +1 -0
- package/web-dist/assets/{timeline-definition-YZTLITO2-BE0IDpJe.js → timeline-definition-YZTLITO2-CHBPr8N4.js} +1 -1
- package/web-dist/assets/{treemap-KZPCXAKY-CHwtWAgO.js → treemap-KZPCXAKY-DnqeIQgk.js} +1 -1
- package/web-dist/assets/{vennDiagram-LZ73GAT5-ByqFK92_.js → vennDiagram-LZ73GAT5-BRIzanhU.js} +1 -1
- package/web-dist/assets/{xychartDiagram-JWTSCODW-BdCa1f3c.js → xychartDiagram-JWTSCODW-qjjqxrk2.js} +1 -1
- package/web-dist/index.html +2 -2
- package/web-dist/noVNC/LICENSE.txt +62 -0
- package/web-dist/noVNC/app/error-handler.js +79 -0
- package/web-dist/noVNC/app/images/alt.svg +92 -0
- package/web-dist/noVNC/app/images/clipboard.svg +106 -0
- package/web-dist/noVNC/app/images/connect.svg +96 -0
- package/web-dist/noVNC/app/images/ctrl.svg +96 -0
- package/web-dist/noVNC/app/images/ctrlaltdel.svg +100 -0
- package/web-dist/noVNC/app/images/disconnect.svg +94 -0
- package/web-dist/noVNC/app/images/drag.svg +76 -0
- package/web-dist/noVNC/app/images/error.svg +81 -0
- package/web-dist/noVNC/app/images/esc.svg +92 -0
- package/web-dist/noVNC/app/images/expander.svg +69 -0
- package/web-dist/noVNC/app/images/fullscreen.svg +93 -0
- package/web-dist/noVNC/app/images/handle.svg +82 -0
- package/web-dist/noVNC/app/images/handle_bg.svg +172 -0
- package/web-dist/noVNC/app/images/icons/Makefile +42 -0
- package/web-dist/noVNC/app/images/icons/novnc-icon-sm.svg +163 -0
- package/web-dist/noVNC/app/images/icons/novnc-icon.svg +163 -0
- package/web-dist/noVNC/app/images/icons/novnc-ios-120.png +0 -0
- package/web-dist/noVNC/app/images/icons/novnc-ios-152.png +0 -0
- package/web-dist/noVNC/app/images/icons/novnc-ios-167.png +0 -0
- package/web-dist/noVNC/app/images/icons/novnc-ios-180.png +0 -0
- package/web-dist/noVNC/app/images/icons/novnc-ios-40.png +0 -0
- package/web-dist/noVNC/app/images/icons/novnc-ios-58.png +0 -0
- package/web-dist/noVNC/app/images/icons/novnc-ios-60.png +0 -0
- package/web-dist/noVNC/app/images/icons/novnc-ios-80.png +0 -0
- package/web-dist/noVNC/app/images/icons/novnc-ios-87.png +0 -0
- package/web-dist/noVNC/app/images/icons/novnc-ios-icon.svg +183 -0
- package/web-dist/noVNC/app/images/icons/novnc.ico +0 -0
- package/web-dist/noVNC/app/images/info.svg +81 -0
- package/web-dist/noVNC/app/images/keyboard.svg +88 -0
- package/web-dist/noVNC/app/images/power.svg +87 -0
- package/web-dist/noVNC/app/images/settings.svg +76 -0
- package/web-dist/noVNC/app/images/tab.svg +86 -0
- package/web-dist/noVNC/app/images/toggleextrakeys.svg +90 -0
- package/web-dist/noVNC/app/images/warning.svg +81 -0
- package/web-dist/noVNC/app/images/windows.svg +65 -0
- package/web-dist/noVNC/app/locale/README +1 -0
- package/web-dist/noVNC/app/locale/cs.json +71 -0
- package/web-dist/noVNC/app/locale/de.json +74 -0
- package/web-dist/noVNC/app/locale/el.json +100 -0
- package/web-dist/noVNC/app/locale/es.json +68 -0
- package/web-dist/noVNC/app/locale/fr.json +82 -0
- package/web-dist/noVNC/app/locale/hu.json +80 -0
- package/web-dist/noVNC/app/locale/it.json +68 -0
- package/web-dist/noVNC/app/locale/ja.json +81 -0
- package/web-dist/noVNC/app/locale/ko.json +70 -0
- package/web-dist/noVNC/app/locale/nl.json +95 -0
- package/web-dist/noVNC/app/locale/pl.json +80 -0
- package/web-dist/noVNC/app/locale/pt_BR.json +72 -0
- package/web-dist/noVNC/app/locale/ru.json +72 -0
- package/web-dist/noVNC/app/locale/sv.json +83 -0
- package/web-dist/noVNC/app/locale/tr.json +69 -0
- package/web-dist/noVNC/app/locale/uk.json +81 -0
- package/web-dist/noVNC/app/locale/zh_CN.json +93 -0
- package/web-dist/noVNC/app/locale/zh_TW.json +69 -0
- package/web-dist/noVNC/app/localization.js +206 -0
- package/web-dist/noVNC/app/sounds/CREDITS +4 -0
- package/web-dist/noVNC/app/sounds/bell.mp3 +0 -0
- package/web-dist/noVNC/app/sounds/bell.oga +0 -0
- package/web-dist/noVNC/app/styles/Orbitron700.ttf +0 -0
- package/web-dist/noVNC/app/styles/Orbitron700.woff +0 -0
- package/web-dist/noVNC/app/styles/base.css +927 -0
- package/web-dist/noVNC/app/styles/constants.css +30 -0
- package/web-dist/noVNC/app/styles/input.css +628 -0
- package/web-dist/noVNC/app/ui.js +1873 -0
- package/web-dist/noVNC/app/wakelock.js +199 -0
- package/web-dist/noVNC/app/webutil.js +250 -0
- package/web-dist/noVNC/core/base64.js +104 -0
- package/web-dist/noVNC/core/clipboard.js +72 -0
- package/web-dist/noVNC/core/crypto/aes.js +178 -0
- package/web-dist/noVNC/core/crypto/bigint.js +34 -0
- package/web-dist/noVNC/core/crypto/crypto.js +90 -0
- package/web-dist/noVNC/core/crypto/des.js +330 -0
- package/web-dist/noVNC/core/crypto/dh.js +55 -0
- package/web-dist/noVNC/core/crypto/md5.js +82 -0
- package/web-dist/noVNC/core/crypto/rsa.js +132 -0
- package/web-dist/noVNC/core/decoders/copyrect.js +27 -0
- package/web-dist/noVNC/core/decoders/h264.js +321 -0
- package/web-dist/noVNC/core/decoders/hextile.js +181 -0
- package/web-dist/noVNC/core/decoders/jpeg.js +161 -0
- package/web-dist/noVNC/core/decoders/raw.js +59 -0
- package/web-dist/noVNC/core/decoders/rre.js +44 -0
- package/web-dist/noVNC/core/decoders/tight.js +393 -0
- package/web-dist/noVNC/core/decoders/tightpng.js +27 -0
- package/web-dist/noVNC/core/decoders/zlib.js +51 -0
- package/web-dist/noVNC/core/decoders/zrle.js +185 -0
- package/web-dist/noVNC/core/deflator.js +84 -0
- package/web-dist/noVNC/core/display.js +578 -0
- package/web-dist/noVNC/core/encodings.js +54 -0
- package/web-dist/noVNC/core/inflator.js +65 -0
- package/web-dist/noVNC/core/input/domkeytable.js +311 -0
- package/web-dist/noVNC/core/input/fixedkeys.js +129 -0
- package/web-dist/noVNC/core/input/gesturehandler.js +567 -0
- package/web-dist/noVNC/core/input/keyboard.js +294 -0
- package/web-dist/noVNC/core/input/keysym.js +616 -0
- package/web-dist/noVNC/core/input/keysymdef.js +688 -0
- package/web-dist/noVNC/core/input/util.js +191 -0
- package/web-dist/noVNC/core/input/vkeys.js +116 -0
- package/web-dist/noVNC/core/input/xtscancodes.js +173 -0
- package/web-dist/noVNC/core/ra2.js +312 -0
- package/web-dist/noVNC/core/rfb.js +3426 -0
- package/web-dist/noVNC/core/util/browser.js +266 -0
- package/web-dist/noVNC/core/util/cursor.js +249 -0
- package/web-dist/noVNC/core/util/element.js +32 -0
- package/web-dist/noVNC/core/util/events.js +138 -0
- package/web-dist/noVNC/core/util/eventtarget.js +35 -0
- package/web-dist/noVNC/core/util/int.js +15 -0
- package/web-dist/noVNC/core/util/logging.js +56 -0
- package/web-dist/noVNC/core/util/strings.js +28 -0
- package/web-dist/noVNC/core/websock.js +369 -0
- package/web-dist/noVNC/defaults.json +1 -0
- package/web-dist/noVNC/mandatory.json +1 -0
- package/web-dist/noVNC/vendor/pako/LICENSE +21 -0
- package/web-dist/noVNC/vendor/pako/README.md +6 -0
- package/web-dist/noVNC/vendor/pako/lib/utils/common.js +45 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/adler32.js +27 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/constants.js +47 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/crc32.js +36 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/deflate.js +1846 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/gzheader.js +35 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/inffast.js +324 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/inflate.js +1527 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/inftrees.js +322 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/messages.js +11 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/trees.js +1195 -0
- package/web-dist/noVNC/vendor/pako/lib/zlib/zstream.js +24 -0
- package/web-dist/noVNC/vnc_lite.html +180 -0
- package/web-dist/assets/channel-DlBBaM6I.js +0 -1
- package/web-dist/assets/classDiagram-VBA2DB6C-DixDm16f.js +0 -1
- package/web-dist/assets/classDiagram-v2-RAHNMMFH-DixDm16f.js +0 -1
- package/web-dist/assets/clone-DEDCKaxV.js +0 -1
- package/web-dist/assets/stateDiagram-v2-FVOUBMTO-Bdpt0e9f.js +0 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Running without HTTPS is not recommended, crashes or other issues are likely.": "Det är ej rekommenderat att köra utan HTTPS, krascher och andra problem är troliga.",
|
|
3
|
+
"Connecting...": "Ansluter...",
|
|
4
|
+
"Disconnecting...": "Kopplar ner...",
|
|
5
|
+
"Reconnecting...": "Återansluter...",
|
|
6
|
+
"Internal error": "Internt fel",
|
|
7
|
+
"Failed to connect to server: ": "Misslyckades att ansluta till servern: ",
|
|
8
|
+
"Connected (encrypted) to ": "Ansluten (krypterat) till ",
|
|
9
|
+
"Connected (unencrypted) to ": "Ansluten (okrypterat) till ",
|
|
10
|
+
"Something went wrong, connection is closed": "Något gick fel, anslutningen avslutades",
|
|
11
|
+
"Failed to connect to server": "Misslyckades att ansluta till servern",
|
|
12
|
+
"Disconnected": "Frånkopplad",
|
|
13
|
+
"New connection has been rejected with reason: ": "Ny anslutning har blivit nekad med följande skäl: ",
|
|
14
|
+
"New connection has been rejected": "Ny anslutning har blivit nekad",
|
|
15
|
+
"Credentials are required": "Användaruppgifter krävs",
|
|
16
|
+
"noVNC encountered an error:": "noVNC stötte på ett problem:",
|
|
17
|
+
"Hide/Show the control bar": "Göm/Visa kontrollbaren",
|
|
18
|
+
"Drag": "Dra",
|
|
19
|
+
"Move/Drag viewport": "Flytta/Dra vyn",
|
|
20
|
+
"Keyboard": "Tangentbord",
|
|
21
|
+
"Show keyboard": "Visa tangentbord",
|
|
22
|
+
"Extra keys": "Extraknappar",
|
|
23
|
+
"Show extra keys": "Visa extraknappar",
|
|
24
|
+
"Ctrl": "Ctrl",
|
|
25
|
+
"Toggle Ctrl": "Växla Ctrl",
|
|
26
|
+
"Alt": "Alt",
|
|
27
|
+
"Toggle Alt": "Växla Alt",
|
|
28
|
+
"Toggle Windows": "Växla Windows",
|
|
29
|
+
"Windows": "Windows",
|
|
30
|
+
"Send Tab": "Skicka Tab",
|
|
31
|
+
"Tab": "Tab",
|
|
32
|
+
"Esc": "Esc",
|
|
33
|
+
"Send Escape": "Skicka Escape",
|
|
34
|
+
"Ctrl+Alt+Del": "Ctrl+Alt+Del",
|
|
35
|
+
"Send Ctrl-Alt-Del": "Skicka Ctrl-Alt-Del",
|
|
36
|
+
"Shutdown/Reboot": "Stäng av/Boota om",
|
|
37
|
+
"Shutdown/Reboot...": "Stäng av/Boota om...",
|
|
38
|
+
"Power": "Ström",
|
|
39
|
+
"Shutdown": "Stäng av",
|
|
40
|
+
"Reboot": "Boota om",
|
|
41
|
+
"Reset": "Återställ",
|
|
42
|
+
"Clipboard": "Urklipp",
|
|
43
|
+
"Edit clipboard content in the textarea below.": "Redigera urklippets innehåll i fältet nedan.",
|
|
44
|
+
"Full screen": "Fullskärm",
|
|
45
|
+
"Settings": "Inställningar",
|
|
46
|
+
"Shared mode": "Delat läge",
|
|
47
|
+
"View only": "Endast visning",
|
|
48
|
+
"Clip to window": "Begränsa till fönster",
|
|
49
|
+
"Scaling mode:": "Skalningsläge:",
|
|
50
|
+
"None": "Ingen",
|
|
51
|
+
"Local scaling": "Lokal skalning",
|
|
52
|
+
"Remote resizing": "Ändra storlek",
|
|
53
|
+
"Advanced": "Avancerat",
|
|
54
|
+
"Quality:": "Kvalitet:",
|
|
55
|
+
"Compression level:": "Kompressionsnivå:",
|
|
56
|
+
"Repeater ID:": "Repeater-ID:",
|
|
57
|
+
"WebSocket": "WebSocket",
|
|
58
|
+
"Encrypt": "Kryptera",
|
|
59
|
+
"Host:": "Värd:",
|
|
60
|
+
"Port:": "Port:",
|
|
61
|
+
"Path:": "Sökväg:",
|
|
62
|
+
"Automatic reconnect": "Automatisk återanslutning",
|
|
63
|
+
"Reconnect delay (ms):": "Fördröjning (ms):",
|
|
64
|
+
"Show dot when no cursor": "Visa prick när ingen muspekare finns",
|
|
65
|
+
"Logging:": "Loggning:",
|
|
66
|
+
"Version:": "Version:",
|
|
67
|
+
"Disconnect": "Koppla från",
|
|
68
|
+
"Connect": "Anslut",
|
|
69
|
+
"Server identity": "Server-identitet",
|
|
70
|
+
"The server has provided the following identifying information:": "Servern har gett följande identifierande information:",
|
|
71
|
+
"Fingerprint:": "Fingeravtryck:",
|
|
72
|
+
"Please verify that the information is correct and press \"Approve\". Otherwise press \"Reject\".": "Kontrollera att informationen är korrekt och tryck sedan \"Godkänn\". Tryck annars \"Neka\".",
|
|
73
|
+
"Approve": "Godkänn",
|
|
74
|
+
"Reject": "Neka",
|
|
75
|
+
"Credentials": "Användaruppgifter",
|
|
76
|
+
"Username:": "Användarnamn:",
|
|
77
|
+
"Password:": "Lösenord:",
|
|
78
|
+
"Send credentials": "Skicka användaruppgifter",
|
|
79
|
+
"Cancel": "Avbryt",
|
|
80
|
+
"Must set host": "Du måste specifiera en värd",
|
|
81
|
+
"HTTPS is required for full functionality": "HTTPS krävs för full funktionalitet",
|
|
82
|
+
"Clear": "Rensa"
|
|
83
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Connecting...": "Bağlanıyor...",
|
|
3
|
+
"Disconnecting...": "Bağlantı kesiliyor...",
|
|
4
|
+
"Reconnecting...": "Yeniden bağlantı kuruluyor...",
|
|
5
|
+
"Internal error": "İç hata",
|
|
6
|
+
"Must set host": "Sunucuyu kur",
|
|
7
|
+
"Connected (encrypted) to ": "Bağlı (şifrelenmiş)",
|
|
8
|
+
"Connected (unencrypted) to ": "Bağlandı (şifrelenmemiş)",
|
|
9
|
+
"Something went wrong, connection is closed": "Bir şeyler ters gitti, bağlantı kesildi",
|
|
10
|
+
"Disconnected": "Bağlantı kesildi",
|
|
11
|
+
"New connection has been rejected with reason: ": "Bağlantı aşağıdaki nedenlerden dolayı reddedildi: ",
|
|
12
|
+
"New connection has been rejected": "Bağlantı reddedildi",
|
|
13
|
+
"Password is required": "Şifre gerekli",
|
|
14
|
+
"noVNC encountered an error:": "Bir hata oluştu:",
|
|
15
|
+
"Hide/Show the control bar": "Denetim masasını Gizle/Göster",
|
|
16
|
+
"Move/Drag Viewport": "Görünümü Taşı/Sürükle",
|
|
17
|
+
"viewport drag": "Görüntü penceresini sürükle",
|
|
18
|
+
"Active Mouse Button": "Aktif Fare Düğmesi",
|
|
19
|
+
"No mousebutton": "Fare düğmesi yok",
|
|
20
|
+
"Left mousebutton": "Farenin sol düğmesi",
|
|
21
|
+
"Middle mousebutton": "Farenin orta düğmesi",
|
|
22
|
+
"Right mousebutton": "Farenin sağ düğmesi",
|
|
23
|
+
"Keyboard": "Klavye",
|
|
24
|
+
"Show Keyboard": "Klavye Düzenini Göster",
|
|
25
|
+
"Extra keys": "Ekstra tuşlar",
|
|
26
|
+
"Show extra keys": "Ekstra tuşları göster",
|
|
27
|
+
"Ctrl": "Ctrl",
|
|
28
|
+
"Toggle Ctrl": "Ctrl Değiştir ",
|
|
29
|
+
"Alt": "Alt",
|
|
30
|
+
"Toggle Alt": "Alt Değiştir",
|
|
31
|
+
"Send Tab": "Sekme Gönder",
|
|
32
|
+
"Tab": "Sekme",
|
|
33
|
+
"Esc": "Esc",
|
|
34
|
+
"Send Escape": "Boşluk Gönder",
|
|
35
|
+
"Ctrl+Alt+Del": "Ctrl + Alt + Del",
|
|
36
|
+
"Send Ctrl-Alt-Del": "Ctrl-Alt-Del Gönder",
|
|
37
|
+
"Shutdown/Reboot": "Kapat/Yeniden Başlat",
|
|
38
|
+
"Shutdown/Reboot...": "Kapat/Yeniden Başlat...",
|
|
39
|
+
"Power": "Güç",
|
|
40
|
+
"Shutdown": "Kapat",
|
|
41
|
+
"Reboot": "Yeniden Başlat",
|
|
42
|
+
"Reset": "Sıfırla",
|
|
43
|
+
"Clipboard": "Pano",
|
|
44
|
+
"Clear": "Temizle",
|
|
45
|
+
"Fullscreen": "Tam Ekran",
|
|
46
|
+
"Settings": "Ayarlar",
|
|
47
|
+
"Shared Mode": "Paylaşım Modu",
|
|
48
|
+
"View Only": "Sadece Görüntüle",
|
|
49
|
+
"Clip to Window": "Pencereye Tıkla",
|
|
50
|
+
"Scaling Mode:": "Ölçekleme Modu:",
|
|
51
|
+
"None": "Bilinmeyen",
|
|
52
|
+
"Local Scaling": "Yerel Ölçeklendirme",
|
|
53
|
+
"Remote Resizing": "Uzaktan Yeniden Boyutlandırma",
|
|
54
|
+
"Advanced": "Gelişmiş",
|
|
55
|
+
"Repeater ID:": "Tekralayıcı ID:",
|
|
56
|
+
"WebSocket": "WebSocket",
|
|
57
|
+
"Encrypt": "Şifrele",
|
|
58
|
+
"Host:": "Ana makine:",
|
|
59
|
+
"Port:": "Port:",
|
|
60
|
+
"Path:": "Yol:",
|
|
61
|
+
"Automatic Reconnect": "Otomatik Yeniden Bağlan",
|
|
62
|
+
"Reconnect Delay (ms):": "Yeniden Bağlanma Süreci (ms):",
|
|
63
|
+
"Logging:": "Giriş yapılıyor:",
|
|
64
|
+
"Disconnect": "Bağlantıyı Kes",
|
|
65
|
+
"Connect": "Bağlan",
|
|
66
|
+
"Password:": "Parola:",
|
|
67
|
+
"Cancel": "Vazgeç",
|
|
68
|
+
"Canvas not supported.": "Tuval desteklenmiyor."
|
|
69
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Running without HTTPS is not recommended, crashes or other issues are likely.": "Робота без HTTPS не рекомендується, ймовірні збої чи інші проблеми.",
|
|
3
|
+
"Connecting...": "З'єднання...",
|
|
4
|
+
"Disconnecting...": "Від'єднання...",
|
|
5
|
+
"Reconnecting...": "Перез'єднання...",
|
|
6
|
+
"Internal error": "Внутрішня помилка",
|
|
7
|
+
"Failed to connect to server: ": "Не вдалося з'єднатися з сервером: ",
|
|
8
|
+
"Connected (encrypted) to ": "З'єднано (з шифруванням) з ",
|
|
9
|
+
"Connected (unencrypted) to ": "З'єднано (без шифрування) з ",
|
|
10
|
+
"Something went wrong, connection is closed": "Щось пішло не так, з'єднання закрито",
|
|
11
|
+
"Failed to connect to server": "Не вдалося з'єднатися з сервером",
|
|
12
|
+
"Disconnected": "Від'єднано",
|
|
13
|
+
"New connection has been rejected with reason: ": "Нове з'єднання відхилено. Причина: ",
|
|
14
|
+
"New connection has been rejected": "Нове з'єднання відхилено",
|
|
15
|
+
"Are you sure you want to disconnect the session?": "Точно від'єднати сеанс?",
|
|
16
|
+
"Credentials are required": "Треба особові дані",
|
|
17
|
+
"noVNC encountered an error:": "Помилка noVNC:",
|
|
18
|
+
"Hide/Show the control bar": "Сховати/показати панель керування",
|
|
19
|
+
"Drag": "Посунути",
|
|
20
|
+
"Move/Drag viewport": "Змістити область огляду",
|
|
21
|
+
"Keyboard": "Клавіатура",
|
|
22
|
+
"Show keyboard": "Показати клавіатуру",
|
|
23
|
+
"Extra keys": "Додаткові клавіші",
|
|
24
|
+
"Show extra keys": "Показати додаткові клавіші",
|
|
25
|
+
"Ctrl": "Ctrl",
|
|
26
|
+
"Toggle Ctrl": "Затиснути Ctrl",
|
|
27
|
+
"Alt": "Alt",
|
|
28
|
+
"Toggle Alt": "Затиснути Alt",
|
|
29
|
+
"Toggle Windows": "Затиснути Windows",
|
|
30
|
+
"Windows": "Windows",
|
|
31
|
+
"Send Tab": "Натиснути Tab",
|
|
32
|
+
"Tab": "Tab",
|
|
33
|
+
"Esc": "Esc",
|
|
34
|
+
"Send Escape": "Натиснути Escape",
|
|
35
|
+
"Ctrl+Alt+Del": "Ctrl+Alt+Del",
|
|
36
|
+
"Send Ctrl-Alt-Del": "Натиснути Ctrl+Alt+Del",
|
|
37
|
+
"Shutdown/Reboot": "Вимкнути/перезавантажити",
|
|
38
|
+
"Shutdown/Reboot...": "Вимкнути/перезавантажити...",
|
|
39
|
+
"Power": "Живлення",
|
|
40
|
+
"Shutdown": "Вимкнути",
|
|
41
|
+
"Reboot": "Перезавантажити",
|
|
42
|
+
"Reset": "Скинути",
|
|
43
|
+
"Clipboard": "Буфер обміну",
|
|
44
|
+
"Edit clipboard content in the textarea below.": "Редагуйте вміст буфера обміну в текстовій зоні внизу.",
|
|
45
|
+
"Full screen": "Повний екран",
|
|
46
|
+
"Settings": "Параметри",
|
|
47
|
+
"Shared mode": "Спільний режим",
|
|
48
|
+
"View only": "Лише перегляд",
|
|
49
|
+
"Clip to window": "До розмірів вікна",
|
|
50
|
+
"Scaling mode:": "Режим масштабування:",
|
|
51
|
+
"None": "Вимкнено",
|
|
52
|
+
"Local scaling": "Локальне масштабування",
|
|
53
|
+
"Remote resizing": "Віддалене масштабування",
|
|
54
|
+
"Advanced": "Додатково",
|
|
55
|
+
"Quality:": "Якість:",
|
|
56
|
+
"Compression level:": "Рівень стиснення:",
|
|
57
|
+
"Repeater ID:": "Ідентифікатор репітера:",
|
|
58
|
+
"WebSocket": "WebSocket",
|
|
59
|
+
"Encrypt": "Шифрування",
|
|
60
|
+
"Host:": "Сервер:",
|
|
61
|
+
"Port:": "Порт:",
|
|
62
|
+
"Path:": "Шлях:",
|
|
63
|
+
"Automatic reconnect": "Автоматичне перез'єднання",
|
|
64
|
+
"Reconnect delay (ms):": "Затримка перез'єднання (мс):",
|
|
65
|
+
"Show dot when no cursor": "Показувати крапку, коли нема курсора",
|
|
66
|
+
"Logging:": "Журнал:",
|
|
67
|
+
"Version:": "Версія:",
|
|
68
|
+
"Disconnect": "Від'єднати",
|
|
69
|
+
"Connect": "З'єднати",
|
|
70
|
+
"Server identity": "Ідентифікація сервера",
|
|
71
|
+
"The server has provided the following identifying information:": "Сервер надає такі ідентифікаційні дані:",
|
|
72
|
+
"Fingerprint:": "Відбиток:",
|
|
73
|
+
"Please verify that the information is correct and press \"Approve\". Otherwise press \"Reject\".": "Перевірте, чи дані коректні, й натисніть «Схвалити». Інакше натисніть «Відхилити».",
|
|
74
|
+
"Approve": "Схвалити",
|
|
75
|
+
"Reject": "Відхилити",
|
|
76
|
+
"Credentials": "Особові дані",
|
|
77
|
+
"Username:": "Користувацьке ім'я:",
|
|
78
|
+
"Password:": "Пароль:",
|
|
79
|
+
"Send credentials": "Надіслати особові дані",
|
|
80
|
+
"Cancel": "Скасувати"
|
|
81
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Running without HTTPS is not recommended, crashes or other issues are likely.": "不建议在没有 HTTPS 的情况下运行,可能会出现崩溃或出现其他问题。",
|
|
3
|
+
"Connecting...": "连接中...",
|
|
4
|
+
"Disconnecting...": "正在断开连接...",
|
|
5
|
+
"Reconnecting...": "重新连接中...",
|
|
6
|
+
"Internal error": "内部错误",
|
|
7
|
+
"Must set host": "必须设置主机",
|
|
8
|
+
"Failed to connect to server: ": "无法连接到服务器:",
|
|
9
|
+
"Connected (encrypted) to ": "已连接(已加密)到",
|
|
10
|
+
"Connected (unencrypted) to ": "已连接(未加密)到",
|
|
11
|
+
"Something went wrong, connection is closed": "出了点问题,连接已关闭",
|
|
12
|
+
"Failed to connect to server": "无法连接到服务器",
|
|
13
|
+
"Disconnected": "已断开连接",
|
|
14
|
+
"New connection has been rejected with reason: ": "新连接被拒绝,原因如下:",
|
|
15
|
+
"New connection has been rejected": "新连接已被拒绝",
|
|
16
|
+
"Credentials are required": "需要凭证",
|
|
17
|
+
"noVNC encountered an error:": "noVNC 遇到一个错误:",
|
|
18
|
+
"Hide/Show the control bar": "显示/隐藏控制栏",
|
|
19
|
+
"Drag": "拖动",
|
|
20
|
+
"Move/Drag viewport": "移动/拖动窗口",
|
|
21
|
+
"Keyboard": "键盘",
|
|
22
|
+
"Show keyboard": "显示键盘",
|
|
23
|
+
"Extra keys": "额外按键",
|
|
24
|
+
"Show extra keys": "显示额外按键",
|
|
25
|
+
"Ctrl": "Ctrl",
|
|
26
|
+
"Toggle Ctrl": "切换 Ctrl",
|
|
27
|
+
"Alt": "Alt",
|
|
28
|
+
"Toggle Alt": "切换 Alt",
|
|
29
|
+
"Toggle Windows": "切换窗口",
|
|
30
|
+
"Windows": "窗口",
|
|
31
|
+
"Send Tab": "发送 Tab 键",
|
|
32
|
+
"Tab": "Tab",
|
|
33
|
+
"Esc": "Esc",
|
|
34
|
+
"Send Escape": "发送 Escape 键",
|
|
35
|
+
"Ctrl+Alt+Del": "Ctrl+Alt+Del",
|
|
36
|
+
"Send Ctrl-Alt-Del": "发送 Ctrl+Alt+Del 键",
|
|
37
|
+
"Shutdown/Reboot": "关机/重启",
|
|
38
|
+
"Shutdown/Reboot...": "关机/重启...",
|
|
39
|
+
"Power": "电源",
|
|
40
|
+
"Shutdown": "关机",
|
|
41
|
+
"Reboot": "重启",
|
|
42
|
+
"Reset": "重置",
|
|
43
|
+
"Clipboard": "剪贴板",
|
|
44
|
+
"Edit clipboard content in the textarea below.": "在下面的文本区域中编辑剪贴板内容。",
|
|
45
|
+
"Full screen": "全屏",
|
|
46
|
+
"Settings": "设置",
|
|
47
|
+
"Shared mode": "分享模式",
|
|
48
|
+
"View only": "仅查看",
|
|
49
|
+
"Clip to window": "限制/裁切窗口大小",
|
|
50
|
+
"Scaling mode:": "缩放模式:",
|
|
51
|
+
"None": "无",
|
|
52
|
+
"Local scaling": "本地缩放",
|
|
53
|
+
"Remote resizing": "远程调整大小",
|
|
54
|
+
"Advanced": "高级",
|
|
55
|
+
"Quality:": "品质:",
|
|
56
|
+
"Compression level:": "压缩级别:",
|
|
57
|
+
"Repeater ID:": "中继站 ID",
|
|
58
|
+
"WebSocket": "WebSocket",
|
|
59
|
+
"Encrypt": "加密",
|
|
60
|
+
"Host:": "主机:",
|
|
61
|
+
"Port:": "端口:",
|
|
62
|
+
"Path:": "路径:",
|
|
63
|
+
"Automatic reconnect": "自动重新连接",
|
|
64
|
+
"Reconnect delay (ms):": "重新连接间隔 (ms):",
|
|
65
|
+
"Show dot when no cursor": "无光标时显示点",
|
|
66
|
+
"Logging:": "日志级别:",
|
|
67
|
+
"Version:": "版本:",
|
|
68
|
+
"Disconnect": "断开连接",
|
|
69
|
+
"Connect": "连接",
|
|
70
|
+
"Server identity": "服务器身份",
|
|
71
|
+
"The server has provided the following identifying information:": "服务器提供了以下识别信息:",
|
|
72
|
+
"Fingerprint:": "指纹:",
|
|
73
|
+
"Please verify that the information is correct and press \"Approve\". Otherwise press \"Reject\".": "请核实信息是否正确,并按 “同意”,否则按 “拒绝”。",
|
|
74
|
+
"Approve": "同意",
|
|
75
|
+
"Reject": "拒绝",
|
|
76
|
+
"Credentials": "凭证",
|
|
77
|
+
"Username:": "用户名:",
|
|
78
|
+
"Password:": "密码:",
|
|
79
|
+
"Send credentials": "发送凭证",
|
|
80
|
+
"Cancel": "取消",
|
|
81
|
+
"Password is required": "请提供密码",
|
|
82
|
+
"Disconnect timeout": "超时断开",
|
|
83
|
+
"viewport drag": "窗口拖动",
|
|
84
|
+
"Active Mouse Button": "启动鼠标按键",
|
|
85
|
+
"No mousebutton": "禁用鼠标按键",
|
|
86
|
+
"Left mousebutton": "鼠标左键",
|
|
87
|
+
"Middle mousebutton": "鼠标中键",
|
|
88
|
+
"Right mousebutton": "鼠标右键",
|
|
89
|
+
"Clear": "清除",
|
|
90
|
+
"Local Downscaling": "降低本地尺寸",
|
|
91
|
+
"Local Cursor": "本地光标",
|
|
92
|
+
"Canvas not supported.": "不支持 Canvas。"
|
|
93
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Connecting...": "連線中...",
|
|
3
|
+
"Disconnecting...": "正在中斷連線...",
|
|
4
|
+
"Reconnecting...": "重新連線中...",
|
|
5
|
+
"Internal error": "內部錯誤",
|
|
6
|
+
"Must set host": "請提供主機資訊",
|
|
7
|
+
"Connected (encrypted) to ": "已加密連線到",
|
|
8
|
+
"Connected (unencrypted) to ": "未加密連線到",
|
|
9
|
+
"Something went wrong, connection is closed": "發生錯誤,連線已關閉",
|
|
10
|
+
"Failed to connect to server": "無法連線到伺服器",
|
|
11
|
+
"Disconnected": "連線已中斷",
|
|
12
|
+
"New connection has been rejected with reason: ": "連線被拒絕,原因:",
|
|
13
|
+
"New connection has been rejected": "連線被拒絕",
|
|
14
|
+
"Password is required": "請提供密碼",
|
|
15
|
+
"noVNC encountered an error:": "noVNC 遇到一個錯誤:",
|
|
16
|
+
"Hide/Show the control bar": "顯示/隱藏控制列",
|
|
17
|
+
"Move/Drag viewport": "拖放顯示範圍",
|
|
18
|
+
"viewport drag": "顯示範圍拖放",
|
|
19
|
+
"Active Mouse Button": "啟用滑鼠按鍵",
|
|
20
|
+
"No mousebutton": "無滑鼠按鍵",
|
|
21
|
+
"Left mousebutton": "滑鼠左鍵",
|
|
22
|
+
"Middle mousebutton": "滑鼠中鍵",
|
|
23
|
+
"Right mousebutton": "滑鼠右鍵",
|
|
24
|
+
"Keyboard": "鍵盤",
|
|
25
|
+
"Show keyboard": "顯示鍵盤",
|
|
26
|
+
"Extra keys": "額外按鍵",
|
|
27
|
+
"Show extra keys": "顯示額外按鍵",
|
|
28
|
+
"Ctrl": "Ctrl",
|
|
29
|
+
"Toggle Ctrl": "切換 Ctrl",
|
|
30
|
+
"Alt": "Alt",
|
|
31
|
+
"Toggle Alt": "切換 Alt",
|
|
32
|
+
"Send Tab": "送出 Tab 鍵",
|
|
33
|
+
"Tab": "Tab",
|
|
34
|
+
"Esc": "Esc",
|
|
35
|
+
"Send Escape": "送出 Escape 鍵",
|
|
36
|
+
"Ctrl+Alt+Del": "Ctrl-Alt-Del",
|
|
37
|
+
"Send Ctrl-Alt-Del": "送出 Ctrl-Alt-Del 快捷鍵",
|
|
38
|
+
"Shutdown/Reboot": "關機/重新啟動",
|
|
39
|
+
"Shutdown/Reboot...": "關機/重新啟動...",
|
|
40
|
+
"Power": "電源",
|
|
41
|
+
"Shutdown": "關機",
|
|
42
|
+
"Reboot": "重新啟動",
|
|
43
|
+
"Reset": "重設",
|
|
44
|
+
"Clipboard": "剪貼簿",
|
|
45
|
+
"Clear": "清除",
|
|
46
|
+
"Fullscreen": "全螢幕",
|
|
47
|
+
"Settings": "設定",
|
|
48
|
+
"Shared mode": "分享模式",
|
|
49
|
+
"View only": "僅檢視",
|
|
50
|
+
"Clip to window": "限制/裁切視窗大小",
|
|
51
|
+
"Scaling mode:": "縮放模式:",
|
|
52
|
+
"None": "無",
|
|
53
|
+
"Local scaling": "本機縮放",
|
|
54
|
+
"Remote resizing": "遠端調整大小",
|
|
55
|
+
"Advanced": "進階",
|
|
56
|
+
"Repeater ID:": "中繼站 ID",
|
|
57
|
+
"WebSocket": "WebSocket",
|
|
58
|
+
"Encrypt": "加密",
|
|
59
|
+
"Host:": "主機:",
|
|
60
|
+
"Port:": "連接埠:",
|
|
61
|
+
"Path:": "路徑:",
|
|
62
|
+
"Automatic reconnect": "自動重新連線",
|
|
63
|
+
"Reconnect delay (ms):": "重新連線間隔 (ms):",
|
|
64
|
+
"Logging:": "日誌級別:",
|
|
65
|
+
"Disconnect": "中斷連線",
|
|
66
|
+
"Connect": "連線",
|
|
67
|
+
"Password:": "密碼:",
|
|
68
|
+
"Cancel": "取消"
|
|
69
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* noVNC: HTML5 VNC client
|
|
3
|
+
* Copyright (C) 2018 The noVNC authors
|
|
4
|
+
* Licensed under MPL 2.0 (see LICENSE.txt)
|
|
5
|
+
*
|
|
6
|
+
* See README.md for usage and integration instructions.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* Localization utilities
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export class Localizer {
|
|
14
|
+
constructor() {
|
|
15
|
+
// Currently configured language
|
|
16
|
+
this.language = 'en';
|
|
17
|
+
|
|
18
|
+
// Current dictionary of translations
|
|
19
|
+
this._dictionary = undefined;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Configure suitable language based on user preferences
|
|
23
|
+
async setup(supportedLanguages, baseURL) {
|
|
24
|
+
this.language = 'en'; // Default: US English
|
|
25
|
+
this._dictionary = undefined;
|
|
26
|
+
|
|
27
|
+
this._setupLanguage(supportedLanguages);
|
|
28
|
+
await this._setupDictionary(baseURL);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
_setupLanguage(supportedLanguages) {
|
|
32
|
+
/*
|
|
33
|
+
* Navigator.languages only available in Chrome (32+) and FireFox (32+)
|
|
34
|
+
* Fall back to navigator.language for other browsers
|
|
35
|
+
*/
|
|
36
|
+
let userLanguages;
|
|
37
|
+
if (typeof window.navigator.languages == 'object') {
|
|
38
|
+
userLanguages = window.navigator.languages;
|
|
39
|
+
} else {
|
|
40
|
+
userLanguages = [navigator.language || navigator.userLanguage];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
for (let i = 0;i < userLanguages.length;i++) {
|
|
44
|
+
const userLang = userLanguages[i]
|
|
45
|
+
.toLowerCase()
|
|
46
|
+
.replace("_", "-")
|
|
47
|
+
.split("-");
|
|
48
|
+
|
|
49
|
+
// First pass: perfect match
|
|
50
|
+
for (let j = 0; j < supportedLanguages.length; j++) {
|
|
51
|
+
const supLang = supportedLanguages[j]
|
|
52
|
+
.toLowerCase()
|
|
53
|
+
.replace("_", "-")
|
|
54
|
+
.split("-");
|
|
55
|
+
|
|
56
|
+
if (userLang[0] !== supLang[0]) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (userLang[1] !== supLang[1]) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
this.language = supportedLanguages[j];
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Second pass: English fallback
|
|
68
|
+
if (userLang[0] === 'en') {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Third pass pass: other fallback
|
|
73
|
+
for (let j = 0;j < supportedLanguages.length;j++) {
|
|
74
|
+
const supLang = supportedLanguages[j]
|
|
75
|
+
.toLowerCase()
|
|
76
|
+
.replace("_", "-")
|
|
77
|
+
.split("-");
|
|
78
|
+
|
|
79
|
+
if (userLang[0] !== supLang[0]) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (supLang[1] !== undefined) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
this.language = supportedLanguages[j];
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async _setupDictionary(baseURL) {
|
|
93
|
+
if (baseURL) {
|
|
94
|
+
if (!baseURL.endsWith("/")) {
|
|
95
|
+
baseURL = baseURL + "/";
|
|
96
|
+
}
|
|
97
|
+
} else {
|
|
98
|
+
baseURL = "";
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (this.language === "en") {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
let response = await fetch(baseURL + this.language + ".json");
|
|
106
|
+
if (!response.ok) {
|
|
107
|
+
throw Error("" + response.status + " " + response.statusText);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
this._dictionary = await response.json();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Retrieve localised text
|
|
114
|
+
get(id) {
|
|
115
|
+
if (typeof this._dictionary !== 'undefined' &&
|
|
116
|
+
this._dictionary[id]) {
|
|
117
|
+
return this._dictionary[id];
|
|
118
|
+
} else {
|
|
119
|
+
return id;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Traverses the DOM and translates relevant fields
|
|
124
|
+
// See https://html.spec.whatwg.org/multipage/dom.html#attr-translate
|
|
125
|
+
translateDOM() {
|
|
126
|
+
const self = this;
|
|
127
|
+
|
|
128
|
+
function process(elem, enabled) {
|
|
129
|
+
function isAnyOf(searchElement, items) {
|
|
130
|
+
return items.indexOf(searchElement) !== -1;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function translateString(str) {
|
|
134
|
+
// We assume surrounding whitespace, and whitespace around line
|
|
135
|
+
// breaks is just for source formatting
|
|
136
|
+
str = str.split("\n").map(s => s.trim()).join(" ").trim();
|
|
137
|
+
return self.get(str);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function translateAttribute(elem, attr) {
|
|
141
|
+
const str = translateString(elem.getAttribute(attr));
|
|
142
|
+
elem.setAttribute(attr, str);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function translateTextNode(node) {
|
|
146
|
+
const str = translateString(node.data);
|
|
147
|
+
node.data = str;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (elem.hasAttribute("translate")) {
|
|
151
|
+
if (isAnyOf(elem.getAttribute("translate"), ["", "yes"])) {
|
|
152
|
+
enabled = true;
|
|
153
|
+
} else if (isAnyOf(elem.getAttribute("translate"), ["no"])) {
|
|
154
|
+
enabled = false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (enabled) {
|
|
159
|
+
if (elem.hasAttribute("abbr") &&
|
|
160
|
+
elem.tagName === "TH") {
|
|
161
|
+
translateAttribute(elem, "abbr");
|
|
162
|
+
}
|
|
163
|
+
if (elem.hasAttribute("alt") &&
|
|
164
|
+
isAnyOf(elem.tagName, ["AREA", "IMG", "INPUT"])) {
|
|
165
|
+
translateAttribute(elem, "alt");
|
|
166
|
+
}
|
|
167
|
+
if (elem.hasAttribute("download") &&
|
|
168
|
+
isAnyOf(elem.tagName, ["A", "AREA"])) {
|
|
169
|
+
translateAttribute(elem, "download");
|
|
170
|
+
}
|
|
171
|
+
if (elem.hasAttribute("label") &&
|
|
172
|
+
isAnyOf(elem.tagName, ["MENUITEM", "MENU", "OPTGROUP",
|
|
173
|
+
"OPTION", "TRACK"])) {
|
|
174
|
+
translateAttribute(elem, "label");
|
|
175
|
+
}
|
|
176
|
+
// FIXME: Should update "lang"
|
|
177
|
+
if (elem.hasAttribute("placeholder") &&
|
|
178
|
+
isAnyOf(elem.tagName, ["INPUT", "TEXTAREA"])) {
|
|
179
|
+
translateAttribute(elem, "placeholder");
|
|
180
|
+
}
|
|
181
|
+
if (elem.hasAttribute("title")) {
|
|
182
|
+
translateAttribute(elem, "title");
|
|
183
|
+
}
|
|
184
|
+
if (elem.hasAttribute("value") &&
|
|
185
|
+
elem.tagName === "INPUT" &&
|
|
186
|
+
isAnyOf(elem.getAttribute("type"), ["reset", "button", "submit"])) {
|
|
187
|
+
translateAttribute(elem, "value");
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
for (let i = 0; i < elem.childNodes.length; i++) {
|
|
192
|
+
const node = elem.childNodes[i];
|
|
193
|
+
if (node.nodeType === node.ELEMENT_NODE) {
|
|
194
|
+
process(node, enabled);
|
|
195
|
+
} else if (node.nodeType === node.TEXT_NODE && enabled) {
|
|
196
|
+
translateTextNode(node);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
process(document.body, true);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export const l10n = new Localizer();
|
|
206
|
+
export default l10n.get.bind(l10n);
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|