Compare commits

...

30 Commits

Author SHA1 Message Date
c552ff4554 added an explanatory comment 2023-10-23 21:48:35 -07:00
26f9b54199 compute midpoints properly when dealing with split line indices 2023-10-23 21:41:00 -07:00
7f5b7bab69 split linear segments as curves 2023-10-23 21:29:53 -07:00
bf7c91536f render and toggle split points for linear elements as well 2023-10-23 21:15:25 -07:00
4372e992e0 highlight squares appropriately 2023-10-23 18:13:43 -07:00
1e4bfceb13 render split points as squares 2023-10-23 17:58:28 -07:00
539071fcfe ensure split indices are sorted 2023-10-23 17:29:12 -07:00
3700cf2d10 fix some linting/prettier issues 2023-10-23 10:50:52 -07:00
89218ba596 update indices when inserting/removing points 2023-10-22 17:39:51 -07:00
bc5436592e split curve only for rounded curves 2023-10-22 17:07:08 -07:00
750055ddfa draw split curves 2023-10-21 21:45:27 -07:00
93e4cb8d25 restore properly 2023-10-21 17:24:01 -07:00
a2dd3c6ea2 visual indicator that curve is being split 2023-10-21 16:57:56 -07:00
0360e64219 . 2023-10-21 16:41:32 -07:00
c2867c9a93 defined split array 2023-10-21 16:15:41 -07:00
14bca119f7 update rough to include hetrogeneous curves 2023-10-21 16:04:06 -07:00
afea0df141 feat: renderer tweaks (#6698) 2023-10-20 17:45:37 +02:00
d2a508104e fix: Better fill rendering with latest RoughJS (#7031)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-10-20 15:08:24 +02:00
3697618266 feat: support props.locked for setActiveTool (#7153)
Co-authored-by: Aakansha Doshi <aakansha1216@gmail.com>
2023-10-20 13:16:23 +02:00
e7cc2337ea feat: add onChange, onPointerDown, onPointerUp api subs (#7154) 2023-10-20 13:08:22 +02:00
9eb89f9960 build(deps): bump @babel/traverse from 7.18.9 to 7.23.2 in /dev-docs (#7165)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-20 11:31:27 +02:00
ab1bcc7615 chore: Update translations from Crowdin (#6695) 2023-10-20 11:29:28 +02:00
b1cac35269 feat: Closing of "Save to.." Dialog on Save To Disk (#7168)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-10-19 17:51:50 +00:00
83f86e2b86 fix: Fix for Strange Symbol Appearing on Canvas after Deleting Grouped Graphics (Issue #7116) (#7170)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-10-19 12:59:39 +02:00
7e38cab76e build(deps): bump @babel/traverse from 7.21.4 to 7.23.2 (#7171)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-19 12:33:16 +02:00
2cabb1f1f4 fix: attempt to fix flake in wysiwyg tests (#7173) 2023-10-19 12:32:31 +02:00
63650f82d1 feat: Added Copy/Paste from Google Docs (#7136)
Co-authored-by: dwelle <luzar.david@gmail.com>
2023-10-19 12:14:23 +02:00
dde3dac931 feat: remove bound-arrows from frames (#7157) 2023-10-17 18:18:20 +02:00
5b94cffc74 fix: ensure ClipboardItem created in the same tick to fix safari (#7066) 2023-10-16 11:38:57 +02:00
aaf73c8ff3 fix: double image dialog shown on insert (#7152) 2023-10-16 00:19:46 +02:00
110 changed files with 5593 additions and 2258 deletions

View File

@ -1,3 +0,0 @@
## 2020-10-13
- Added ability to embed scene source into exported PNG/SVG files so you can import the scene from them (open via `Load` button or drag & drop). #2219

View File

@ -20,3 +20,13 @@ Frames should be ordered where frame children come first, followed by the frame
```
If not oredered correctly, the editor will still function, but the elements may not be rendered and clipped correctly. Further, the renderer relies on this ordering for performance optimizations.
# Arrows
An arrow can be a child of a frame only if it has no binding (either start or end) to any other element, regardless of whether the bound element is inside the frame or not.
This ensures that when an arrow is bound to an element outside the frame, it's rendered and behaves correctly.
Therefore, when an arrow (that's a child of a frame) gets bound to an element, it's automatically removed from the frame.
Bound-arrow is duplicated alongside a frame only if the arrow start is bound to an element within that frame.

View File

@ -145,6 +145,14 @@
dependencies:
"@babel/highlight" "^7.18.6"
"@babel/code-frame@^7.22.13":
version "7.22.13"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
dependencies:
"@babel/highlight" "^7.22.13"
chalk "^2.4.2"
"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8":
version "7.18.8"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d"
@ -202,6 +210,16 @@
"@jridgewell/gen-mapping" "^0.3.2"
jsesc "^2.5.1"
"@babel/generator@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
dependencies:
"@babel/types" "^7.23.0"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
"@babel/helper-annotate-as-pure@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
@ -265,6 +283,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
"@babel/helper-environment-visitor@^7.22.20":
version "7.22.20"
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
"@babel/helper-explode-assignable-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096"
@ -280,6 +303,14 @@
"@babel/template" "^7.18.6"
"@babel/types" "^7.18.9"
"@babel/helper-function-name@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
dependencies:
"@babel/template" "^7.22.15"
"@babel/types" "^7.23.0"
"@babel/helper-hoist-variables@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
@ -287,6 +318,13 @@
dependencies:
"@babel/types" "^7.18.6"
"@babel/helper-hoist-variables@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
dependencies:
"@babel/types" "^7.22.5"
"@babel/helper-member-expression-to-functions@^7.18.9":
version "7.18.9"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815"
@ -374,11 +412,28 @@
dependencies:
"@babel/types" "^7.18.6"
"@babel/helper-split-export-declaration@^7.22.6":
version "7.22.6"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
dependencies:
"@babel/types" "^7.22.5"
"@babel/helper-string-parser@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
"@babel/helper-validator-identifier@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076"
integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==
"@babel/helper-validator-identifier@^7.22.20":
version "7.22.20"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
"@babel/helper-validator-option@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8"
@ -412,11 +467,25 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/highlight@^7.22.13":
version "7.22.20"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54"
integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==
dependencies:
"@babel/helper-validator-identifier" "^7.22.20"
chalk "^2.4.2"
js-tokens "^4.0.0"
"@babel/parser@^7.12.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.8", "@babel/parser@^7.18.9":
version "7.18.9"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539"
integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==
"@babel/parser@^7.22.15", "@babel/parser@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
@ -1147,19 +1216,28 @@
"@babel/parser" "^7.18.6"
"@babel/types" "^7.18.6"
"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.18.9":
version "7.18.9"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98"
integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==
"@babel/template@^7.22.15":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
dependencies:
"@babel/code-frame" "^7.18.6"
"@babel/generator" "^7.18.9"
"@babel/helper-environment-visitor" "^7.18.9"
"@babel/helper-function-name" "^7.18.9"
"@babel/helper-hoist-variables" "^7.18.6"
"@babel/helper-split-export-declaration" "^7.18.6"
"@babel/parser" "^7.18.9"
"@babel/types" "^7.18.9"
"@babel/code-frame" "^7.22.13"
"@babel/parser" "^7.22.15"
"@babel/types" "^7.22.15"
"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.18.9":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8"
integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==
dependencies:
"@babel/code-frame" "^7.22.13"
"@babel/generator" "^7.23.0"
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-function-name" "^7.23.0"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
"@babel/parser" "^7.23.0"
"@babel/types" "^7.23.0"
debug "^4.1.0"
globals "^11.1.0"
@ -1171,6 +1249,15 @@
"@babel/helper-validator-identifier" "^7.18.6"
to-fast-properties "^2.0.0"
"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
dependencies:
"@babel/helper-string-parser" "^7.22.5"
"@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
"@colors/colors@1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
@ -1670,6 +1757,11 @@
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
"@jridgewell/resolve-uri@^3.1.0":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
@ -1688,6 +1780,19 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
"@jridgewell/sourcemap-codec@^1.4.14":
version "1.4.15"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@jridgewell/trace-mapping@^0.3.17":
version "0.3.20"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f"
integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==
dependencies:
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.14"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed"

View File

@ -80,7 +80,8 @@ export const ExportToExcalidrawPlus: React.FC<{
appState: Partial<AppState>;
files: BinaryFiles;
onError: (error: Error) => void;
}> = ({ elements, appState, files, onError }) => {
onSuccess: () => void;
}> = ({ elements, appState, files, onError, onSuccess }) => {
const { t } = useI18n();
return (
<Card color="primary">
@ -107,6 +108,7 @@ export const ExportToExcalidrawPlus: React.FC<{
try {
trackEvent("export", "eplus", `ui (${getFrame()})`);
await exportToExcalidrawPlus(elements, appState, files);
onSuccess();
} catch (error: any) {
console.error(error);
if (error.name !== "AbortError") {

View File

@ -608,7 +608,7 @@ const ExcalidrawWrapper = () => {
canvas: HTMLCanvasElement,
) => {
if (exportedElements.length === 0) {
return window.alert(t("alerts.cannotExportEmptyCanvas"));
throw new Error(t("alerts.cannotExportEmptyCanvas"));
}
if (canvas) {
try {
@ -624,7 +624,7 @@ const ExcalidrawWrapper = () => {
);
if (errorMessage) {
setErrorMessage(errorMessage);
throw new Error(errorMessage);
}
if (url) {
@ -634,7 +634,7 @@ const ExcalidrawWrapper = () => {
if (error.name !== "AbortError") {
const { width, height } = canvas;
console.error(error, { width, height });
setErrorMessage(error.message);
throw new Error(error.message);
}
}
}
@ -714,6 +714,11 @@ const ExcalidrawWrapper = () => {
},
});
}}
onSuccess={() => {
excalidrawAPI?.updateScene({
appState: { openDialog: null },
});
}}
/>
);
},

View File

@ -49,11 +49,11 @@
"png-chunk-text": "1.0.0",
"png-chunks-encode": "1.0.0",
"png-chunks-extract": "1.0.0",
"points-on-curve": "0.2.0",
"points-on-curve": "1.0.1",
"pwacompat": "2.0.17",
"react": "18.2.0",
"react-dom": "18.2.0",
"roughjs": "4.5.2",
"roughjs": "4.6.5",
"sass": "1.51.0",
"socket.io-client": "2.3.1",
"tunnel-rat": "0.1.2"

View File

@ -46,6 +46,7 @@ const deleteSelectedElements = (
appState: {
...appState,
selectedElementIds: {},
selectedGroupIds: {},
},
};
};

View File

@ -155,7 +155,12 @@ const duplicateElements = (
groupId,
).flatMap((element) =>
isFrameElement(element)
? [...getFrameElements(elements, element.id), element]
? [
...getFrameElements(elements, element.id, {
includeBoundArrows: true,
}),
element,
]
: [element],
);
@ -181,7 +186,9 @@ const duplicateElements = (
continue;
}
if (isElementAFrame) {
const elementsInFrame = getFrameElements(sortedElements, element.id);
const elementsInFrame = getFrameElements(sortedElements, element.id, {
includeBoundArrows: true,
});
elementsWithClones.push(
...markAsProcessed([

View File

@ -191,7 +191,15 @@ export const actionSaveFileToDisk = register({
},
app.files,
);
return { commitToHistory: false, appState: { ...appState, fileHandle } };
return {
commitToHistory: false,
appState: {
...appState,
openDialog: null,
fileHandle,
toast: { message: t("toast.fileSaved") },
},
};
} catch (error: any) {
if (error?.name !== "AbortError") {
console.error(error);

View File

@ -1,26 +1,21 @@
import { parseClipboard } from "./clipboard";
import { createPasteEvent } from "./tests/test-utils";
describe("Test parseClipboard", () => {
it("should parse valid json correctly", async () => {
let text = "123";
let clipboardData = await parseClipboard({
//@ts-ignore
clipboardData: {
getData: () => text,
},
});
let clipboardData = await parseClipboard(
createPasteEvent({ "text/plain": text }),
);
expect(clipboardData.text).toBe(text);
text = "[123]";
clipboardData = await parseClipboard({
//@ts-ignore
clipboardData: {
getData: () => text,
},
});
clipboardData = await parseClipboard(
createPasteEvent({ "text/plain": text }),
);
expect(clipboardData.text).toBe(text);
});

View File

@ -18,11 +18,14 @@ type ElementsClipboard = {
files: BinaryFiles | undefined;
};
export type PastedMixedContent = { type: "text" | "imageUrl"; value: string }[];
export interface ClipboardData {
spreadsheet?: Spreadsheet;
elements?: readonly ExcalidrawElement[];
files?: BinaryFiles;
text?: string;
mixedContent?: PastedMixedContent;
errorMessage?: string;
programmaticAPI?: boolean;
}
@ -142,22 +145,74 @@ const parsePotentialSpreadsheet = (
return null;
};
/** internal, specific to parsing paste events. Do not reuse. */
function parseHTMLTree(el: ChildNode) {
let result: PastedMixedContent = [];
for (const node of el.childNodes) {
if (node.nodeType === 3) {
const text = node.textContent?.trim();
if (text) {
result.push({ type: "text", value: text });
}
} else if (node instanceof HTMLImageElement) {
const url = node.getAttribute("src");
if (url && url.startsWith("http")) {
result.push({ type: "imageUrl", value: url });
}
} else {
result = result.concat(parseHTMLTree(node));
}
}
return result;
}
const maybeParseHTMLPaste = (event: ClipboardEvent) => {
const html = event.clipboardData?.getData("text/html");
if (!html) {
return null;
}
try {
const doc = new DOMParser().parseFromString(html, "text/html");
const content = parseHTMLTree(doc.body);
if (content.length) {
return content;
}
} catch (error: any) {
console.error(`error in parseHTMLFromPaste: ${error.message}`);
}
return null;
};
/**
* Retrieves content from system clipboard (either from ClipboardEvent or
* via async clipboard API if supported)
*/
export const getSystemClipboard = async (
const getSystemClipboard = async (
event: ClipboardEvent | null,
): Promise<string> => {
isPlainPaste = false,
): Promise<
| { type: "text"; value: string }
| { type: "mixedContent"; value: PastedMixedContent }
> => {
try {
const mixedContent = !isPlainPaste && event && maybeParseHTMLPaste(event);
if (mixedContent) {
return { type: "mixedContent", value: mixedContent };
}
const text = event
? event.clipboardData?.getData("text/plain")
: probablySupportsClipboardReadText &&
(await navigator.clipboard.readText());
return (text || "").trim();
return { type: "text", value: (text || "").trim() };
} catch {
return "";
return { type: "text", value: "" };
}
};
@ -168,14 +223,20 @@ export const parseClipboard = async (
event: ClipboardEvent | null,
isPlainPaste = false,
): Promise<ClipboardData> => {
const systemClipboard = await getSystemClipboard(event);
const systemClipboard = await getSystemClipboard(event, isPlainPaste);
if (systemClipboard.type === "mixedContent") {
return {
mixedContent: systemClipboard.value,
};
}
// if system clipboard empty, couldn't be resolved, or contains previously
// copied excalidraw scene as SVG, fall back to previously copied excalidraw
// elements
if (
!systemClipboard ||
(!isPlainPaste && systemClipboard.includes(SVG_EXPORT_TAG))
(!isPlainPaste && systemClipboard.value.includes(SVG_EXPORT_TAG))
) {
return getAppClipboard();
}
@ -183,7 +244,7 @@ export const parseClipboard = async (
// if system clipboard contains spreadsheet, use it even though it's
// technically possible it's staler than in-app clipboard
const spreadsheetResult =
!isPlainPaste && parsePotentialSpreadsheet(systemClipboard);
!isPlainPaste && parsePotentialSpreadsheet(systemClipboard.value);
if (spreadsheetResult) {
return spreadsheetResult;
@ -192,7 +253,7 @@ export const parseClipboard = async (
const appClipboardData = getAppClipboard();
try {
const systemClipboardData = JSON.parse(systemClipboard);
const systemClipboardData = JSON.parse(systemClipboard.value);
const programmaticAPI =
systemClipboardData.type === EXPORT_DATA_TYPES.excalidrawClipboardWithAPI;
if (clipboardContainsElements(systemClipboardData)) {
@ -216,7 +277,7 @@ export const parseClipboard = async (
? JSON.stringify(appClipboardData.elements, null, 2)
: undefined,
}
: { text: systemClipboard };
: { text: systemClipboard.value };
};
export const copyBlobToClipboardAsPng = async (blob: Blob | Promise<Blob>) => {

View File

@ -1,7 +1,7 @@
import React, { useState } from "react";
import { ActionManager } from "../actions/manager";
import { getNonDeletedElements } from "../element";
import { ExcalidrawElement, PointerType } from "../element/types";
import { ExcalidrawElement } from "../element/types";
import { t } from "../i18n";
import { useDevice } from "../components/App";
import {
@ -213,15 +213,11 @@ export const SelectedShapeActions = ({
};
export const ShapesSwitcher = ({
interactiveCanvas,
activeTool,
onImageAction,
appState,
app,
}: {
interactiveCanvas: HTMLCanvasElement | null;
activeTool: UIAppState["activeTool"];
onImageAction: (data: { pointerType: PointerType | null }) => void;
appState: UIAppState;
app: AppClassProperties;
}) => {
@ -263,9 +259,13 @@ export const ShapesSwitcher = ({
if (appState.activeTool.type !== value) {
trackEvent("toolbar", value, "ui");
}
app.setActiveTool({ type: value });
if (value === "image") {
onImageAction({ pointerType });
app.setActiveTool({
type: value,
insertOnCanvasDirectly: pointerType !== "mouse",
});
} else {
app.setActiveTool({ type: value });
}
}}
/>

View File

@ -47,7 +47,7 @@ import {
isEraserActive,
isHandToolActive,
} from "../appState";
import { parseClipboard } from "../clipboard";
import { PastedMixedContent, parseClipboard } from "../clipboard";
import {
APP_NAME,
CURSOR_TYPE,
@ -275,6 +275,7 @@ import {
generateIdFromFile,
getDataURL,
getFileFromEvent,
ImageURLToFile,
isImageFileHandle,
isSupportedImageFile,
loadSceneOrLibraryFromBlob,
@ -373,6 +374,7 @@ import {
resetCursor,
setCursorForShape,
} from "../cursor";
import { Emitter } from "../emitter";
const AppContext = React.createContext<AppClassProperties>(null!);
const AppPropsContext = React.createContext<AppProps>(null!);
@ -504,6 +506,30 @@ class App extends React.Component<AppProps, AppState> {
laserPathManager: LaserPathManager = new LaserPathManager(this);
onChangeEmitter = new Emitter<
[
elements: readonly ExcalidrawElement[],
appState: AppState,
files: BinaryFiles,
]
>();
onPointerDownEmitter = new Emitter<
[
activeTool: AppState["activeTool"],
pointerDownState: PointerDownState,
event: React.PointerEvent<HTMLElement>,
]
>();
onPointerUpEmitter = new Emitter<
[
activeTool: AppState["activeTool"],
pointerDownState: PointerDownState,
event: PointerEvent,
]
>();
constructor(props: AppProps) {
super(props);
const defaultAppState = getDefaultAppState();
@ -567,6 +593,9 @@ class App extends React.Component<AppProps, AppState> {
resetCursor: this.resetCursor,
updateFrameRendering: this.updateFrameRendering,
toggleSidebar: this.toggleSidebar,
onChange: (cb) => this.onChangeEmitter.on(cb),
onPointerDown: (cb) => this.onPointerDownEmitter.on(cb),
onPointerUp: (cb) => this.onPointerUpEmitter.on(cb),
} as const;
if (typeof excalidrawRef === "function") {
excalidrawRef(api);
@ -1188,7 +1217,6 @@ class App extends React.Component<AppProps, AppState> {
>
<LayerUI
canvas={this.canvas}
interactiveCanvas={this.interactiveCanvas}
appState={this.state}
files={this.files}
setAppState={this.setAppState}
@ -1205,7 +1233,6 @@ class App extends React.Component<AppProps, AppState> {
this.state.zenModeEnabled
}
UIOptions={this.props.UIOptions}
onImageAction={this.onImageAction}
onExportImage={this.onExportImage}
renderWelcomeScreen={
!this.state.isLoading &&
@ -1751,6 +1778,7 @@ class App extends React.Component<AppProps, AppState> {
this.scene.destroy();
this.library.destroy();
this.laserPathManager.destroy();
this.onChangeEmitter.destroy();
ShapeCache.destroy();
SnapCache.destroy();
clearTimeout(touchTimeout);
@ -2035,6 +2063,11 @@ class App extends React.Component<AppProps, AppState> {
this.state,
this.files,
);
this.onChangeEmitter.trigger(
this.scene.getElementsIncludingDeleted(),
this.state,
this.files,
);
}
}
@ -2185,21 +2218,6 @@ class App extends React.Component<AppProps, AppState> {
return;
}
// must be called in the same frame (thus before any awaits) as the paste
// event else some browsers (FF...) will clear the clipboardData
// (something something security)
let file = event?.clipboardData?.files[0];
const data = await parseClipboard(event, isPlainPaste);
if (!file && data.text && !isPlainPaste) {
const string = data.text.trim();
if (string.startsWith("<svg") && string.endsWith("</svg>")) {
// ignore SVG validation/normalization which will be done during image
// initialization
file = SVGStringToFile(string);
}
}
const { x: sceneX, y: sceneY } = viewportCoordsToSceneCoords(
{
clientX: this.lastViewportPosition.x,
@ -2208,6 +2226,29 @@ class App extends React.Component<AppProps, AppState> {
this.state,
);
// must be called in the same frame (thus before any awaits) as the paste
// event else some browsers (FF...) will clear the clipboardData
// (something something security)
let file = event?.clipboardData?.files[0];
const data = await parseClipboard(event, isPlainPaste);
if (!file && !isPlainPaste) {
if (data.mixedContent) {
return this.addElementsFromMixedContentPaste(data.mixedContent, {
isPlainPaste,
sceneX,
sceneY,
});
} else if (data.text) {
const string = data.text.trim();
if (string.startsWith("<svg") && string.endsWith("</svg>")) {
// ignore SVG validation/normalization which will be done during image
// initialization
file = SVGStringToFile(string);
}
}
}
// prefer spreadsheet data over image file (MS Office/Libre Office)
if (isSupportedImageFile(file) && !data.spreadsheet) {
const imageElement = this.createImageElement({ sceneX, sceneY });
@ -2261,6 +2302,7 @@ class App extends React.Component<AppProps, AppState> {
});
} else if (data.text) {
const maybeUrl = extractSrc(data.text);
if (
!isPlainPaste &&
embeddableURLValidator(maybeUrl, this.props.validateEmbeddable) &&
@ -2395,6 +2437,85 @@ class App extends React.Component<AppProps, AppState> {
this.setActiveTool({ type: "selection" });
};
// TODO rewrite this to paste both text & images at the same time if
// pasted data contains both
private async addElementsFromMixedContentPaste(
mixedContent: PastedMixedContent,
{
isPlainPaste,
sceneX,
sceneY,
}: { isPlainPaste: boolean; sceneX: number; sceneY: number },
) {
if (
!isPlainPaste &&
mixedContent.some((node) => node.type === "imageUrl")
) {
const imageURLs = mixedContent
.filter((node) => node.type === "imageUrl")
.map((node) => node.value);
const responses = await Promise.all(
imageURLs.map(async (url) => {
try {
return { file: await ImageURLToFile(url) };
} catch (error: any) {
return { errorMessage: error.message as string };
}
}),
);
let y = sceneY;
let firstImageYOffsetDone = false;
const nextSelectedIds: Record<ExcalidrawElement["id"], true> = {};
for (const response of responses) {
if (response.file) {
const imageElement = this.createImageElement({
sceneX,
sceneY: y,
});
const initializedImageElement = await this.insertImageElement(
imageElement,
response.file,
);
if (initializedImageElement) {
// vertically center first image in the batch
if (!firstImageYOffsetDone) {
firstImageYOffsetDone = true;
y -= initializedImageElement.height / 2;
}
// hack to reset the `y` coord because we vertically center during
// insertImageElement
mutateElement(initializedImageElement, { y }, false);
y = imageElement.y + imageElement.height + 25;
nextSelectedIds[imageElement.id] = true;
}
}
}
this.setState({
selectedElementIds: makeNextSelectedElementIds(
nextSelectedIds,
this.state,
),
});
const error = responses.find((response) => !!response.errorMessage);
if (error && error.errorMessage) {
this.setState({ errorMessage: error.errorMessage });
}
} else {
const textNodes = mixedContent.filter((node) => node.type === "text");
if (textNodes.length) {
this.addTextFromPaste(
textNodes.map((node) => node.value).join("\n\n"),
isPlainPaste,
);
}
}
}
private addTextFromPaste(text: string, isPlainPaste = false) {
const { x, y } = viewportCoordsToSceneCoords(
{
@ -2433,18 +2554,12 @@ class App extends React.Component<AppProps, AppState> {
const lineHeight = getDefaultLineHeight(textElementProps.fontFamily);
if (text.length) {
const topLayerFrame = this.getTopLayerFrameAtSceneCoords({
x,
y: currentY,
});
const element = newTextElement({
...textElementProps,
x,
y: currentY,
text,
lineHeight,
frameId: topLayerFrame ? topLayerFrame.id : null,
});
acc.push(element);
currentY += element.height + LINE_GAP;
@ -3134,11 +3249,16 @@ class App extends React.Component<AppProps, AppState> {
});
setActiveTool = (
tool:
| {
type: ToolType;
}
| { type: "custom"; customType: string },
tool: (
| (
| { type: Exclude<ToolType, "image"> }
| {
type: Extract<ToolType, "image">;
insertOnCanvasDirectly?: boolean;
}
)
| { type: "custom"; customType: string }
) & { locked?: boolean },
) => {
const nextActiveTool = updateActiveTool(this.state, tool);
if (nextActiveTool.type === "hand") {
@ -3153,7 +3273,10 @@ class App extends React.Component<AppProps, AppState> {
this.setState({ suggestedBindings: [] });
}
if (nextActiveTool.type === "image") {
this.onImageAction();
this.onImageAction({
insertOnCanvasDirectly:
(tool.type === "image" && tool.insertOnCanvasDirectly) ?? false,
});
}
this.setState((prevState) => {
@ -3451,6 +3574,11 @@ class App extends React.Component<AppProps, AppState> {
return getElementsAtPosition(elements, (element) =>
hitTest(element, this.state, this.frameNameBoundsCache, x, y),
).filter((element) => {
// arrows don't clip even if they're children of frames,
// so always allow hitbox regardless of beinging contained in frame
if (isArrowElement(element)) {
return true;
}
// hitting a frame's element from outside the frame is not considered a hit
const containingFrame = getContainingFrame(element);
return containingFrame &&
@ -3622,9 +3750,32 @@ class App extends React.Component<AppProps, AppState> {
return;
}
let { x: sceneX, y: sceneY } = viewportCoordsToSceneCoords(
event,
this.state,
);
const selectedElements = this.scene.getSelectedElements(this.state);
if (selectedElements.length === 1 && isLinearElement(selectedElements[0])) {
if (!event[KEYS.CTRL_OR_CMD]) {
// If double clicked without any ctrl/cmd modifier on top of a point,
// toggle split mode for that point. Else, treat as regular double click.
const pointUnderCursorIndex =
LinearElementEditor.getPointIndexUnderCursor(
selectedElements[0],
this.state.zoom,
sceneX,
sceneY,
);
if (pointUnderCursorIndex >= 0) {
LinearElementEditor.toggleSegmentSplitAtIndex(
selectedElements[0],
pointUnderCursorIndex,
);
return;
}
}
if (
event[KEYS.CTRL_OR_CMD] &&
(!this.state.editingLinearElement ||
@ -3648,11 +3799,6 @@ class App extends React.Component<AppProps, AppState> {
resetCursor(this.interactiveCanvas);
let { x: sceneX, y: sceneY } = viewportCoordsToSceneCoords(
event,
this.state,
);
const selectedGroupIds = getSelectedGroupIds(this.state);
if (selectedGroupIds.length > 0) {
@ -4397,6 +4543,7 @@ class App extends React.Component<AppProps, AppState> {
setCursor(this.interactiveCanvas, CURSOR_TYPE.AUTO);
}
}
private handleCanvasPointerDown = (
event: React.PointerEvent<HTMLElement>,
) => {
@ -4586,7 +4733,7 @@ class App extends React.Component<AppProps, AppState> {
pointerDownState,
);
} else if (this.state.activeTool.type === "custom") {
setCursor(this.interactiveCanvas, CURSOR_TYPE.AUTO);
setCursorForShape(this.interactiveCanvas, this.state);
} else if (this.state.activeTool.type === "frame") {
this.createFrameElementOnPointerDown(pointerDownState);
} else if (this.state.activeTool.type === "laser") {
@ -4605,6 +4752,11 @@ class App extends React.Component<AppProps, AppState> {
}
this.props?.onPointerDown?.(this.state.activeTool, pointerDownState);
this.onPointerDownEmitter.trigger(
this.state.activeTool,
pointerDownState,
event,
);
const onPointerMove =
this.onPointerMoveFromPointerDownHandler(pointerDownState);
@ -6457,6 +6609,12 @@ class App extends React.Component<AppProps, AppState> {
this.setState({ pendingImageElementId: null });
}
this.onPointerUpEmitter.trigger(
this.state.activeTool,
pointerDownState,
childEvent,
);
if (draggingElement?.type === "freedraw") {
const pointerCoords = viewportCoordsToSceneCoords(
childEvent,
@ -7298,7 +7456,7 @@ class App extends React.Component<AppProps, AppState> {
this.scene.addNewElement(imageElement);
try {
await this.initializeImage({
return await this.initializeImage({
imageFile,
imageElement,
showCursorImagePreview,
@ -7311,6 +7469,7 @@ class App extends React.Component<AppProps, AppState> {
this.setState({
errorMessage: error.message || t("errors.imageInsertError"),
});
return null;
}
};
@ -7353,9 +7512,11 @@ class App extends React.Component<AppProps, AppState> {
}
};
private onImageAction = async (
{ insertOnCanvasDirectly } = { insertOnCanvasDirectly: false },
) => {
private onImageAction = async ({
insertOnCanvasDirectly,
}: {
insertOnCanvasDirectly: boolean;
}) => {
try {
const clientX = this.state.width / 2 + this.state.offsetLeft;
const clientY = this.state.height / 2 + this.state.offsetTop;

View File

@ -23,12 +23,15 @@ export type ExportCB = (
const JSONExportModal = ({
elements,
appState,
setAppState,
files,
actionManager,
exportOpts,
canvas,
onCloseRequest,
}: {
appState: UIAppState;
setAppState: React.Component<any, UIAppState>["setState"];
files: BinaryFiles;
elements: readonly NonDeletedExcalidrawElement[];
actionManager: ActionManager;
@ -72,9 +75,14 @@ const JSONExportModal = ({
title={t("exportDialog.link_button")}
aria-label={t("exportDialog.link_button")}
showAriaLabel={true}
onClick={() => {
onExportToBackend(elements, appState, files, canvas);
trackEvent("export", "link", `ui (${getFrame()})`);
onClick={async () => {
try {
trackEvent("export", "link", `ui (${getFrame()})`);
await onExportToBackend(elements, appState, files, canvas);
onCloseRequest();
} catch (error: any) {
setAppState({ errorMessage: error.message });
}
}}
/>
</Card>
@ -114,6 +122,7 @@ export const JSONExportDialog = ({
<JSONExportModal
elements={elements}
appState={appState}
setAppState={setAppState}
files={files}
actionManager={actionManager}
onCloseRequest={handleClose}

View File

@ -62,7 +62,6 @@ interface LayerUIProps {
appState: UIAppState;
files: BinaryFiles;
canvas: HTMLCanvasElement;
interactiveCanvas: HTMLCanvasElement | null;
setAppState: React.Component<any, AppState>["setState"];
elements: readonly NonDeletedExcalidrawElement[];
onLockToggle: () => void;
@ -73,7 +72,6 @@ interface LayerUIProps {
renderTopRightUI?: ExcalidrawProps["renderTopRightUI"];
renderCustomStats?: ExcalidrawProps["renderCustomStats"];
UIOptions: AppProps["UIOptions"];
onImageAction: (data: { insertOnCanvasDirectly: boolean }) => void;
onExportImage: AppClassProperties["onExportImage"];
renderWelcomeScreen: boolean;
children?: React.ReactNode;
@ -123,7 +121,6 @@ const LayerUI = ({
setAppState,
elements,
canvas,
interactiveCanvas,
onLockToggle,
onHandToolToggle,
onPenModeToggle,
@ -131,7 +128,6 @@ const LayerUI = ({
renderTopRightUI,
renderCustomStats,
UIOptions,
onImageAction,
onExportImage,
renderWelcomeScreen,
children,
@ -280,14 +276,8 @@ const LayerUI = ({
<ShapesSwitcher
appState={appState}
interactiveCanvas={interactiveCanvas}
activeTool={appState.activeTool}
app={app}
onImageAction={({ pointerType }) => {
onImageAction({
insertOnCanvasDirectly: pointerType !== "mouse",
});
}}
/>
</Stack.Row>
</Island>
@ -472,8 +462,6 @@ const LayerUI = ({
onLockToggle={onLockToggle}
onHandToolToggle={onHandToolToggle}
onPenModeToggle={onPenModeToggle}
interactiveCanvas={interactiveCanvas}
onImageAction={onImageAction}
renderTopRightUI={renderTopRightUI}
renderCustomStats={renderCustomStats}
renderSidebars={renderSidebars}
@ -560,18 +548,8 @@ const areEqual = (prevProps: LayerUIProps, nextProps: LayerUIProps) => {
return false;
}
const {
canvas: _pC,
interactiveCanvas: _pIC,
appState: prevAppState,
...prev
} = prevProps;
const {
canvas: _nC,
interactiveCanvas: _nIC,
appState: nextAppState,
...next
} = nextProps;
const { canvas: _pC, appState: prevAppState, ...prev } = prevProps;
const { canvas: _nC, appState: nextAppState, ...next } = nextProps;
return (
isShallowEqual(

View File

@ -36,9 +36,7 @@ type MobileMenuProps = {
onLockToggle: () => void;
onHandToolToggle: () => void;
onPenModeToggle: () => void;
interactiveCanvas: HTMLCanvasElement | null;
onImageAction: (data: { insertOnCanvasDirectly: boolean }) => void;
renderTopRightUI?: (
isMobile: boolean,
appState: UIAppState,
@ -58,8 +56,7 @@ export const MobileMenu = ({
onLockToggle,
onHandToolToggle,
onPenModeToggle,
interactiveCanvas,
onImageAction,
renderTopRightUI,
renderCustomStats,
renderSidebars,
@ -85,14 +82,8 @@ export const MobileMenu = ({
<Stack.Row gap={1}>
<ShapesSwitcher
appState={appState}
interactiveCanvas={interactiveCanvas}
activeTool={appState.activeTool}
app={app}
onImageAction={({ pointerType }) => {
onImageAction({
insertOnCanvasDirectly: pointerType !== "mouse",
});
}}
/>
</Stack.Row>
</Island>

View File

@ -83,12 +83,12 @@ export const ToolButton = React.forwardRef((props: ToolButtonProps, ref) => {
}
};
useEffect(
() => () => {
useEffect(() => {
isMountedRef.current = true;
return () => {
isMountedRef.current = false;
},
[],
);
};
}, []);
const lastPointerTypeRef = useRef<PointerType | null>(null);

View File

@ -296,6 +296,12 @@ export const ROUNDNESS = {
* collaboration */
export const PRECEDING_ELEMENT_KEY = "__precedingElement__";
export const ROUGHNESS = {
architect: 0,
artist: 1,
cartoonist: 2,
} as const;
export const DEFAULT_ELEMENT_PROPS: {
strokeColor: ExcalidrawElement["strokeColor"];
backgroundColor: ExcalidrawElement["backgroundColor"];
@ -308,10 +314,10 @@ export const DEFAULT_ELEMENT_PROPS: {
} = {
strokeColor: COLOR_PALETTE.black,
backgroundColor: COLOR_PALETTE.transparent,
fillStyle: "hachure",
strokeWidth: 1,
fillStyle: "solid",
strokeWidth: 2,
strokeStyle: "solid",
roughness: 1,
roughness: ROUGHNESS.artist,
opacity: 100,
locked: false,
};

View File

@ -99,5 +99,7 @@ export const setCursorForShape = (
interactiveCanvas.style.cursor = `url(${url}), auto`;
} else if (!["image", "custom"].includes(appState.activeTool.type)) {
interactiveCanvas.style.cursor = CURSOR_TYPE.CROSSHAIR;
} else {
interactiveCanvas.style.cursor = CURSOR_TYPE.AUTO;
}
};

View File

@ -14,7 +14,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing s
"type": "arrow",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 300,
@ -28,7 +28,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing s
"seed": Any<Number>,
"strokeColor": "#66a80f",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "ellipse",
"updated": 1,
"version": 3,
@ -49,7 +49,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing s
"type": "arrow",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -63,7 +63,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing s
"seed": Any<Number>,
"strokeColor": "#9c36b5",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "diamond",
"updated": 1,
"version": 2,
@ -85,7 +85,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing s
"focus": -0.008153707962747813,
"gap": 1,
},
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 35,
@ -116,7 +116,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing s
},
"strokeColor": "#1864ab",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 3,
@ -138,7 +138,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing s
"focus": 0.10666666666666667,
"gap": 3.834326468444573,
},
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -169,7 +169,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing s
},
"strokeColor": "#e67700",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 3,
@ -190,7 +190,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing s
"type": "arrow",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 300,
@ -204,7 +204,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing s
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 2,
@ -227,7 +227,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing t
},
],
"containerId": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -245,7 +245,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing t
"seed": Any<Number>,
"strokeColor": "#c2255c",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "HEYYYYY",
"textAlign": "left",
"type": "text",
@ -271,7 +271,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing t
},
],
"containerId": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -289,7 +289,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing t
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "Whats up ?",
"textAlign": "left",
"type": "text",
@ -319,7 +319,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing t
"focus": 0,
"gap": 5,
},
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -350,7 +350,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing t
},
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 3,
@ -368,7 +368,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing t
"baseline": 0,
"boundElements": null,
"containerId": "id43",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -386,7 +386,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to existing t
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "HELLO WORLD!!",
"textAlign": "center",
"type": "text",
@ -416,7 +416,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to shapes whe
"focus": 0,
"gap": 1,
},
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -447,7 +447,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to shapes whe
},
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 3,
@ -465,7 +465,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to shapes whe
"baseline": 0,
"boundElements": null,
"containerId": "id32",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -483,7 +483,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to shapes whe
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "HELLO WORLD!!",
"textAlign": "center",
"type": "text",
@ -507,7 +507,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to shapes whe
"type": "arrow",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -521,7 +521,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to shapes whe
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 2,
@ -542,7 +542,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to shapes whe
"type": "arrow",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -556,7 +556,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to shapes whe
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "ellipse",
"updated": 1,
"version": 2,
@ -583,7 +583,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to text when
"focus": 0,
"gap": 1,
},
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -614,7 +614,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to text when
},
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 3,
@ -632,7 +632,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to text when
"baseline": 0,
"boundElements": null,
"containerId": "id36",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -650,7 +650,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to text when
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "HELLO WORLD!!",
"textAlign": "center",
"type": "text",
@ -676,7 +676,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to text when
},
],
"containerId": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -694,7 +694,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to text when
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "HEYYYYY",
"textAlign": "left",
"type": "text",
@ -720,7 +720,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to text when
},
],
"containerId": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -738,7 +738,7 @@ exports[`Test Transform > Test arrow bindings > should bind arrows to text when
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "WHATS UP ?",
"textAlign": "left",
"type": "text",
@ -757,7 +757,7 @@ exports[`Test Transform > should not allow duplicate ids 1`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 200,
@ -771,7 +771,7 @@ exports[`Test Transform > should not allow duplicate ids 1`] = `
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 1,
@ -789,7 +789,7 @@ exports[`Test Transform > should transform linear elements 1`] = `
"boundElements": null,
"endArrowhead": "arrow",
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -816,7 +816,7 @@ exports[`Test Transform > should transform linear elements 1`] = `
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 1,
@ -834,7 +834,7 @@ exports[`Test Transform > should transform linear elements 2`] = `
"boundElements": null,
"endArrowhead": "triangle",
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -879,7 +879,7 @@ exports[`Test Transform > should transform linear elements 3`] = `
"boundElements": null,
"endArrowhead": null,
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -906,7 +906,7 @@ exports[`Test Transform > should transform linear elements 3`] = `
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "line",
"updated": 1,
"version": 1,
@ -924,7 +924,7 @@ exports[`Test Transform > should transform linear elements 4`] = `
"boundElements": null,
"endArrowhead": null,
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -967,7 +967,7 @@ exports[`Test Transform > should transform regular shapes 1`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -981,7 +981,7 @@ exports[`Test Transform > should transform regular shapes 1`] = `
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 1,
@ -997,7 +997,7 @@ exports[`Test Transform > should transform regular shapes 2`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -1011,7 +1011,7 @@ exports[`Test Transform > should transform regular shapes 2`] = `
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "ellipse",
"updated": 1,
"version": 1,
@ -1027,7 +1027,7 @@ exports[`Test Transform > should transform regular shapes 3`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -1041,7 +1041,7 @@ exports[`Test Transform > should transform regular shapes 3`] = `
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "diamond",
"updated": 1,
"version": 1,
@ -1057,7 +1057,7 @@ exports[`Test Transform > should transform regular shapes 4`] = `
"angle": 0,
"backgroundColor": "#c0eb75",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -1149,7 +1149,7 @@ exports[`Test Transform > should transform text element 1`] = `
"baseline": 0,
"boundElements": null,
"containerId": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1167,7 +1167,7 @@ exports[`Test Transform > should transform text element 1`] = `
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "HELLO WORLD!",
"textAlign": "left",
"type": "text",
@ -1188,7 +1188,7 @@ exports[`Test Transform > should transform text element 2`] = `
"baseline": 0,
"boundElements": null,
"containerId": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1206,7 +1206,7 @@ exports[`Test Transform > should transform text element 2`] = `
"seed": Any<Number>,
"strokeColor": "#5f3dc4",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "STYLED HELLO WORLD!",
"textAlign": "left",
"type": "text",
@ -1232,7 +1232,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
],
"endArrowhead": "arrow",
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -1259,7 +1259,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 1,
@ -1282,7 +1282,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
],
"endArrowhead": "arrow",
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -1309,7 +1309,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 1,
@ -1332,7 +1332,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
],
"endArrowhead": "arrow",
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 130,
@ -1382,7 +1382,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
],
"endArrowhead": "arrow",
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 130,
@ -1427,7 +1427,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
"baseline": 0,
"boundElements": null,
"containerId": "id24",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1445,7 +1445,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "LABELED ARROW",
"textAlign": "center",
"type": "text",
@ -1466,7 +1466,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
"baseline": 0,
"boundElements": null,
"containerId": "id25",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1484,7 +1484,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
"seed": Any<Number>,
"strokeColor": "#099268",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "STYLED LABELED ARROW",
"textAlign": "center",
"type": "text",
@ -1505,7 +1505,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
"baseline": 0,
"boundElements": null,
"containerId": "id26",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1523,7 +1523,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
"seed": Any<Number>,
"strokeColor": "#1098ad",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "ANOTHER STYLED
LABELLED ARROW",
"textAlign": "center",
@ -1545,7 +1545,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
"baseline": 0,
"boundElements": null,
"containerId": "id27",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1563,7 +1563,7 @@ exports[`Test Transform > should transform to labelled arrows when label provide
"seed": Any<Number>,
"strokeColor": "#099268",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "ANOTHER STYLED
LABELLED ARROW",
"textAlign": "center",
@ -1588,7 +1588,7 @@ exports[`Test Transform > should transform to text containers when label provide
"type": "text",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 35,
@ -1602,7 +1602,7 @@ exports[`Test Transform > should transform to text containers when label provide
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 3,
@ -1623,7 +1623,7 @@ exports[`Test Transform > should transform to text containers when label provide
"type": "text",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 85,
@ -1637,7 +1637,7 @@ exports[`Test Transform > should transform to text containers when label provide
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "ellipse",
"updated": 1,
"version": 2,
@ -1658,7 +1658,7 @@ exports[`Test Transform > should transform to text containers when label provide
"type": "text",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 170,
@ -1672,7 +1672,7 @@ exports[`Test Transform > should transform to text containers when label provide
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "diamond",
"updated": 1,
"version": 2,
@ -1693,7 +1693,7 @@ exports[`Test Transform > should transform to text containers when label provide
"type": "text",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 120,
@ -1728,7 +1728,7 @@ exports[`Test Transform > should transform to text containers when label provide
"type": "text",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 85,
@ -1742,7 +1742,7 @@ exports[`Test Transform > should transform to text containers when label provide
"seed": Any<Number>,
"strokeColor": "#c2255c",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 2,
@ -1763,7 +1763,7 @@ exports[`Test Transform > should transform to text containers when label provide
"type": "text",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 120,
@ -1777,7 +1777,7 @@ exports[`Test Transform > should transform to text containers when label provide
"seed": Any<Number>,
"strokeColor": "#f08c00",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "ellipse",
"updated": 1,
"version": 2,
@ -1795,7 +1795,7 @@ exports[`Test Transform > should transform to text containers when label provide
"baseline": 0,
"boundElements": null,
"containerId": "id12",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1813,7 +1813,7 @@ exports[`Test Transform > should transform to text containers when label provide
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "RECTANGLE TEXT CONTAINER",
"textAlign": "center",
"type": "text",
@ -1834,7 +1834,7 @@ exports[`Test Transform > should transform to text containers when label provide
"baseline": 0,
"boundElements": null,
"containerId": "id13",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1852,7 +1852,7 @@ exports[`Test Transform > should transform to text containers when label provide
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "ELLIPSE TEXT
CONTAINER",
"textAlign": "center",
@ -1874,7 +1874,7 @@ exports[`Test Transform > should transform to text containers when label provide
"baseline": 0,
"boundElements": null,
"containerId": "id14",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1893,7 +1893,7 @@ TEXT CONTAINER",
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "DIAMOND
TEXT
CONTAINER",
@ -1916,7 +1916,7 @@ exports[`Test Transform > should transform to text containers when label provide
"baseline": 0,
"boundElements": null,
"containerId": "id15",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1934,7 +1934,7 @@ exports[`Test Transform > should transform to text containers when label provide
"seed": Any<Number>,
"strokeColor": "#099268",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "STYLED DIAMOND
TEXT CONTAINER",
"textAlign": "center",
@ -1956,7 +1956,7 @@ exports[`Test Transform > should transform to text containers when label provide
"baseline": 0,
"boundElements": null,
"containerId": "id16",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -1974,7 +1974,7 @@ exports[`Test Transform > should transform to text containers when label provide
"seed": Any<Number>,
"strokeColor": "#c2255c",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "TOP LEFT ALIGNED
RECTANGLE TEXT
CONTAINER",
@ -1997,7 +1997,7 @@ exports[`Test Transform > should transform to text containers when label provide
"baseline": 0,
"boundElements": null,
"containerId": "id17",
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 20,
"frameId": null,
@ -2015,7 +2015,7 @@ exports[`Test Transform > should transform to text containers when label provide
"seed": Any<Number>,
"strokeColor": "#c2255c",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "STYLED
ELLIPSE TEXT
CONTAINER",

View File

@ -8,7 +8,7 @@ import { t } from "../i18n";
import { calculateScrollCenter } from "../scene";
import { AppState, DataURL, LibraryItem } from "../types";
import { ValueOf } from "../utility-types";
import { bytesToHexString } from "../utils";
import { bytesToHexString, isPromiseLike } from "../utils";
import { FileSystemHandle, nativeFileSystemSupported } from "./filesystem";
import { isValidExcalidrawData, isValidLibrary } from "./json";
import { restore, restoreLibraryItems } from "./restore";
@ -207,10 +207,13 @@ export const loadLibraryFromBlob = async (
};
export const canvasToBlob = async (
canvas: HTMLCanvasElement,
canvas: HTMLCanvasElement | Promise<HTMLCanvasElement>,
): Promise<Blob> => {
return new Promise((resolve, reject) => {
return new Promise(async (resolve, reject) => {
try {
if (isPromiseLike(canvas)) {
canvas = await canvas;
}
canvas.toBlob((blob) => {
if (!blob) {
return reject(
@ -324,6 +327,31 @@ export const SVGStringToFile = (SVGString: string, filename: string = "") => {
}) as File & { type: typeof MIME_TYPES.svg };
};
export const ImageURLToFile = async (
imageUrl: string,
filename: string = "",
): Promise<File | undefined> => {
let response;
try {
response = await fetch(imageUrl);
} catch (error: any) {
throw new Error(t("errors.failedToFetchImage"));
}
if (!response.ok) {
throw new Error(t("errors.failedToFetchImage"));
}
const blob = await response.blob();
if (blob.type && isSupportedImageFile(blob)) {
const name = filename || blob.name || "";
return new File([blob], name, { type: blob.type });
}
throw new Error(t("errors.unsupportedFileType"));
};
export const getFileFromEvent = async (
event: React.DragEvent<HTMLDivElement>,
) => {

View File

@ -66,17 +66,14 @@ export const exportCanvas = async (
}
}
const tempCanvas = await exportToCanvas(elements, appState, files, {
const tempCanvas = exportToCanvas(elements, appState, files, {
exportBackground,
viewBackgroundColor,
exportPadding,
});
tempCanvas.style.display = "none";
document.body.appendChild(tempCanvas);
if (type === "png") {
let blob = await canvasToBlob(tempCanvas);
tempCanvas.remove();
if (appState.exportEmbedScene) {
blob = await (
await import(/* webpackChunkName: "image" */ "./image")
@ -114,11 +111,8 @@ export const exportCanvas = async (
} else {
throw new Error(t("alerts.couldNotCopyToClipboard"));
}
} finally {
tempCanvas.remove();
}
} else {
tempCanvas.remove();
// shouldn't happen
throw new Error("Unsupported export type");
}

View File

@ -43,6 +43,7 @@ import {
measureBaseline,
} from "../element/textElement";
import { normalizeLink } from "./url";
import { isValidFrameChild } from "../frame";
type RestoredAppState = Omit<
AppState,
@ -284,6 +285,9 @@ const restoreElement = (
points,
x,
y,
segmentSplitIndices: element.segmentSplitIndices
? [...element.segmentSplitIndices]
: [],
});
}
@ -396,7 +400,7 @@ const repairBoundElement = (
};
/**
* Remove an element's frameId if its containing frame is non-existent
* resets `frameId` if no longer applicable.
*
* NOTE mutates elements.
*/
@ -404,12 +408,16 @@ const repairFrameMembership = (
element: Mutable<ExcalidrawElement>,
elementsMap: Map<string, Mutable<ExcalidrawElement>>,
) => {
if (element.frameId) {
const containingFrame = elementsMap.get(element.frameId);
if (!element.frameId) {
return;
}
if (!containingFrame) {
element.frameId = null;
}
if (
!isValidFrameChild(element) ||
// target frame not exists
!elementsMap.get(element.frameId)
) {
element.frameId = null;
}
};
@ -453,6 +461,8 @@ export const restoreElements = (
// repair binding. Mutates elements.
const restoredElementsMap = arrayToMap(restoredElements);
for (const element of restoredElements) {
// repair frame membership *after* bindings we do in restoreElement()
// since we rely on bindings to be correct
if (element.frameId) {
repairFrameMembership(element, restoredElementsMap);
}

View File

@ -27,6 +27,7 @@ import { LinearElementEditor } from "./linearElementEditor";
import { arrayToMap, tupleToCoors } from "../utils";
import { KEYS } from "../keys";
import { getBoundTextElement, handleBindTextResize } from "./textElement";
import { isValidFrameChild } from "../frame";
export type SuggestedBinding =
| NonDeleted<ExcalidrawBindableElement>
@ -211,6 +212,15 @@ export const bindLinearElement = (
}),
});
}
if (linearElement.frameId && !isValidFrameChild(linearElement)) {
mutateElement(
linearElement,
{
frameId: null,
},
false,
);
}
};
// Don't bind both ends of a simple segment

View File

@ -741,7 +741,7 @@ export const getElementPointsCoords = (
element: ExcalidrawLinearElement,
points: readonly (readonly [number, number])[],
): [number, number, number, number] => {
// This might be computationally heavey
// This might be computationally heavy
const gen = rough.generator();
const curve =
element.roundness == null

View File

@ -494,7 +494,7 @@ const hitTestFreeDrawElement = (
// for filled freedraw shapes, support
// selecting from inside
if (shape && shape.sets.length) {
return hitTestRoughShape(shape, x, y, threshold);
return hitTestCurveInside(shape, x, y, "round");
}
return false;

View File

@ -28,6 +28,7 @@ const embeddedLinkCache = new Map<string, EmbeddedLink>();
const RE_YOUTUBE =
/^(?:http(?:s)?:\/\/)?(?:www\.)?youtu(?:be\.com|\.be)\/(embed\/|watch\?v=|shorts\/|playlist\?list=|embed\/videoseries\?list=)?([a-zA-Z0-9_-]+)(?:\?t=|&t=|\?start=|&start=)?([a-zA-Z0-9_-]+)?[^\s]*$/;
const RE_VIMEO =
/^(?:http(?:s)?:\/\/)?(?:(?:w){3}.)?(?:player\.)?vimeo\.com\/(?:video\/)?([^?\s]+)(?:\?.*)?$/;
const RE_FIGMA = /^https:\/\/(?:www\.)?figma\.com/;

View File

@ -547,7 +547,10 @@ export class LinearElementEditor {
endPointIndex: number,
) {
let segmentMidPoint = centerPoint(startPoint, endPoint);
if (element.points.length > 2 && element.roundness) {
const splits = element.segmentSplitIndices || [];
const treatAsCurve =
splits.includes(endPointIndex) || splits.includes(endPointIndex - 1);
if (element.points.length > 2 && (element.roundness || treatAsCurve)) {
const controlPoints = getControlPointsForBezierCurve(
element,
element.points[endPointIndex],
@ -1042,13 +1045,15 @@ export class LinearElementEditor {
let offsetX = 0;
let offsetY = 0;
const isDeletingOriginPoint = pointIndices.includes(0);
const indexSet = new Set(pointIndices);
const isDeletingOriginPoint = indexSet.has(0);
// if deleting first point, make the next to be [0,0] and recalculate
// positions of the rest with respect to it
if (isDeletingOriginPoint) {
const firstNonDeletedPoint = element.points.find((point, idx) => {
return !pointIndices.includes(idx);
return !indexSet.has(idx);
});
if (firstNonDeletedPoint) {
offsetX = firstNonDeletedPoint[0];
@ -1057,7 +1062,7 @@ export class LinearElementEditor {
}
const nextPoints = element.points.reduce((acc: Point[], point, idx) => {
if (!pointIndices.includes(idx)) {
if (!indexSet.has(idx)) {
acc.push(
!acc.length ? [0, 0] : [point[0] - offsetX, point[1] - offsetY],
);
@ -1065,7 +1070,22 @@ export class LinearElementEditor {
return acc;
}, []);
LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY);
const splits: number[] = [];
(element.segmentSplitIndices || []).forEach((index) => {
if (!indexSet.has(index)) {
let shift = 0;
for (const pointIndex of pointIndices) {
if (index > pointIndex) {
shift++;
}
}
splits.push(index - shift);
}
});
LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY, {
segmentSplitIndices: splits.sort((a, b) => a - b),
});
}
static addPoints(
@ -1204,9 +1224,13 @@ export class LinearElementEditor {
midpoint,
...element.points.slice(segmentMidpoint.index!),
];
const splits = (element.segmentSplitIndices || []).map((index) =>
index >= segmentMidpoint.index! ? index + 1 : index,
);
mutateElement(element, {
points,
segmentSplitIndices: splits.sort((a, b) => a - b),
});
ret.pointerDownState = {
@ -1226,7 +1250,11 @@ export class LinearElementEditor {
nextPoints: readonly Point[],
offsetX: number,
offsetY: number,
otherUpdates?: { startBinding?: PointBinding; endBinding?: PointBinding },
otherUpdates?: {
startBinding?: PointBinding;
endBinding?: PointBinding;
segmentSplitIndices?: number[];
},
) {
const nextCoords = getElementPointsCoords(element, nextPoints);
const prevCoords = getElementPointsCoords(element, element.points);
@ -1472,6 +1500,27 @@ export class LinearElementEditor {
return coords;
};
static toggleSegmentSplitAtIndex(
element: NonDeleted<ExcalidrawLinearElement>,
index: number,
) {
let found = false;
const splitIndices = (element.segmentSplitIndices || []).filter((idx) => {
if (idx === index) {
found = true;
return false;
}
return true;
});
if (!found) {
splitIndices.push(index);
}
mutateElement(element, {
segmentSplitIndices: splitIndices.sort((a, b) => a - b),
});
}
}
const normalizeSelectedPoints = (

View File

@ -25,7 +25,7 @@ export const mutateElement = <TElement extends Mutable<ExcalidrawElement>>(
// casting to any because can't use `in` operator
// (see https://github.com/microsoft/TypeScript/issues/21732)
const { points, fileId } = updates as any;
const { points, fileId, segmentSplitIndices } = updates as any;
if (typeof points !== "undefined") {
updates = { ...getSizeFromPoints(points), ...updates };
@ -86,6 +86,7 @@ export const mutateElement = <TElement extends Mutable<ExcalidrawElement>>(
if (
typeof updates.height !== "undefined" ||
typeof updates.width !== "undefined" ||
typeof segmentSplitIndices !== "undefined" ||
typeof fileId != "undefined" ||
typeof points !== "undefined"
) {

View File

@ -374,6 +374,7 @@ export const newLinearElement = (
endBinding: null,
startArrowhead: opts.startArrowhead || null,
endArrowhead: opts.endArrowhead || null,
segmentSplitIndices: [],
};
};

View File

@ -18,6 +18,7 @@ import {
import { API } from "../tests/helpers/api";
import { mutateElement } from "./mutateElement";
import { getOriginalContainerHeightFromCache } from "./textWysiwyg";
import { getTextEditor } from "../tests/queries/dom";
// Unmount ReactDOM from root
ReactDOM.unmountComponentAtNode(document.getElementById("root")!);
@ -25,12 +26,6 @@ ReactDOM.unmountComponentAtNode(document.getElementById("root")!);
const tab = " ";
const mouse = new Pointer("mouse");
const getTextEditor = () => {
return document.querySelector(
".excalidraw-textEditorContainer > textarea",
) as HTMLTextAreaElement;
};
const updateTextEditor = (editor: HTMLTextAreaElement, value: string) => {
fireEvent.change(editor, { target: { value } });
editor.dispatchEvent(new Event("input"));
@ -185,7 +180,7 @@ describe("textWysiwyg", () => {
expect(h.state.editingElement?.id).toBe(boundText.id);
});
it("should edit text under cursor when clicked with text tool", () => {
it("should edit text under cursor when clicked with text tool", async () => {
const text = API.createElement({
type: "text",
text: "ola",
@ -200,14 +195,14 @@ describe("textWysiwyg", () => {
mouse.clickAt(text.x + 50, text.y + 50);
const editor = getTextEditor();
const editor = await getTextEditor(false);
expect(editor).not.toBe(null);
expect(h.state.editingElement?.id).toBe(text.id);
expect(h.elements.length).toBe(1);
});
it("should edit text under cursor when double-clicked with selection tool", () => {
it("should edit text under cursor when double-clicked with selection tool", async () => {
const text = API.createElement({
type: "text",
text: "ola",
@ -222,7 +217,7 @@ describe("textWysiwyg", () => {
mouse.doubleClickAt(text.x + 50, text.y + 50);
const editor = getTextEditor();
const editor = await getTextEditor(false);
expect(editor).not.toBe(null);
expect(h.state.editingElement?.id).toBe(text.id);
@ -249,7 +244,7 @@ describe("textWysiwyg", () => {
textElement = UI.createElement("text");
mouse.clickOn(textElement);
textarea = getTextEditor();
textarea = await getTextEditor(true);
});
afterAll(() => {
@ -459,7 +454,7 @@ describe("textWysiwyg", () => {
UI.clickTool("text");
mouse.clickAt(750, 300);
textarea = getTextEditor();
textarea = await getTextEditor(true);
updateTextEditor(
textarea,
"Excalidraw is an opensource virtual collaborative whiteboard for sketching hand-drawn like diagrams!",
@ -511,7 +506,7 @@ describe("textWysiwyg", () => {
{ id: text.id, type: "text" },
]);
mouse.down();
const editor = getTextEditor();
const editor = await getTextEditor(true);
updateTextEditor(editor, "Hello World!");
@ -539,7 +534,7 @@ describe("textWysiwyg", () => {
]);
expect(text.angle).toBe(rectangle.angle);
mouse.down();
const editor = getTextEditor();
const editor = await getTextEditor(true);
updateTextEditor(editor, "Hello World!");
@ -566,7 +561,7 @@ describe("textWysiwyg", () => {
API.setSelectedElements([diamond]);
Keyboard.keyPress(KEYS.ENTER);
const editor = getTextEditor();
const editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
const value = new Array(1000).fill("1").join("\n");
@ -601,7 +596,7 @@ describe("textWysiwyg", () => {
expect(text.type).toBe("text");
expect(text.containerId).toBe(null);
mouse.down();
let editor = getTextEditor();
let editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
editor.blur();
@ -616,7 +611,7 @@ describe("textWysiwyg", () => {
expect(text.containerId).toBe(rectangle.id);
mouse.down();
editor = getTextEditor();
editor = await getTextEditor(true);
updateTextEditor(editor, "Hello World!");
await new Promise((r) => setTimeout(r, 0));
@ -638,7 +633,7 @@ describe("textWysiwyg", () => {
const text = h.elements[1] as ExcalidrawTextElementWithContainer;
expect(text.type).toBe("text");
expect(text.containerId).toBe(rectangle.id);
const editor = getTextEditor();
const editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
@ -673,7 +668,7 @@ describe("textWysiwyg", () => {
{ id: text.id, type: "text" },
]);
mouse.down();
const editor = getTextEditor();
const editor = await getTextEditor(true);
updateTextEditor(editor, "Hello World!");
await new Promise((r) => setTimeout(r, 0));
@ -698,7 +693,7 @@ describe("textWysiwyg", () => {
freedraw.y + freedraw.height / 2,
);
const editor = getTextEditor();
const editor = await getTextEditor(true);
updateTextEditor(editor, "Hello World!");
fireEvent.keyDown(editor, { key: KEYS.ESCAPE });
@ -732,7 +727,7 @@ describe("textWysiwyg", () => {
expect(text.type).toBe("text");
expect(text.containerId).toBe(null);
mouse.down();
const editor = getTextEditor();
const editor = await getTextEditor(true);
updateTextEditor(editor, "Hello World!");
@ -747,7 +742,7 @@ describe("textWysiwyg", () => {
UI.clickTool("text");
mouse.clickAt(20, 30);
const editor = getTextEditor();
const editor = await getTextEditor(true);
updateTextEditor(
editor,
@ -792,7 +787,7 @@ describe("textWysiwyg", () => {
mouse.down();
const text = h.elements[1] as ExcalidrawTextElementWithContainer;
let editor = getTextEditor();
let editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
updateTextEditor(editor, "Hello World!");
@ -805,7 +800,7 @@ describe("textWysiwyg", () => {
rectangle.y + rectangle.height / 2,
);
mouse.down();
editor = getTextEditor();
editor = await getTextEditor(true);
editor.select();
fireEvent.click(screen.getByTitle(/code/i));
@ -838,7 +833,7 @@ describe("textWysiwyg", () => {
Keyboard.keyDown(KEYS.ENTER);
let text = h.elements[1] as ExcalidrawTextElementWithContainer;
let editor = getTextEditor();
let editor = await getTextEditor(true);
updateTextEditor(editor, "Hello World!");
@ -859,7 +854,7 @@ describe("textWysiwyg", () => {
mouse.select(rectangle);
Keyboard.keyPress(KEYS.ENTER);
editor = getTextEditor();
editor = await getTextEditor(true);
updateTextEditor(editor, "Hello");
await new Promise((r) => setTimeout(r, 0));
@ -888,7 +883,7 @@ describe("textWysiwyg", () => {
const text = h.elements[1] as ExcalidrawTextElementWithContainer;
expect(text.containerId).toBe(rectangle.id);
const editor = getTextEditor();
const editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
@ -925,7 +920,7 @@ describe("textWysiwyg", () => {
// Bind first text
const text = h.elements[1] as ExcalidrawTextElementWithContainer;
expect(text.containerId).toBe(rectangle.id);
const editor = getTextEditor();
const editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
updateTextEditor(editor, "Hello World!");
editor.blur();
@ -946,7 +941,7 @@ describe("textWysiwyg", () => {
it("should respect text alignment when resizing", async () => {
Keyboard.keyPress(KEYS.ENTER);
let editor = getTextEditor();
let editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
updateTextEditor(editor, "Hello");
editor.blur();
@ -963,7 +958,7 @@ describe("textWysiwyg", () => {
mouse.select(rectangle);
Keyboard.keyPress(KEYS.ENTER);
editor = getTextEditor();
editor = await getTextEditor(true);
editor.select();
@ -986,7 +981,7 @@ describe("textWysiwyg", () => {
mouse.select(rectangle);
Keyboard.keyPress(KEYS.ENTER);
editor = getTextEditor();
editor = await getTextEditor(true);
editor.select();
@ -1024,7 +1019,7 @@ describe("textWysiwyg", () => {
expect(text.type).toBe("text");
expect(text.containerId).toBe(rectangle.id);
mouse.down();
const editor = getTextEditor();
const editor = await getTextEditor(true);
updateTextEditor(editor, "Hello World!");
@ -1039,7 +1034,7 @@ describe("textWysiwyg", () => {
it("should scale font size correctly when resizing using shift", async () => {
Keyboard.keyPress(KEYS.ENTER);
const editor = getTextEditor();
const editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
updateTextEditor(editor, "Hello");
editor.blur();
@ -1059,7 +1054,7 @@ describe("textWysiwyg", () => {
it("should bind text correctly when container duplicated with alt-drag", async () => {
Keyboard.keyPress(KEYS.ENTER);
const editor = getTextEditor();
const editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
updateTextEditor(editor, "Hello");
editor.blur();
@ -1091,7 +1086,7 @@ describe("textWysiwyg", () => {
it("undo should work", async () => {
Keyboard.keyPress(KEYS.ENTER);
const editor = getTextEditor();
const editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
updateTextEditor(editor, "Hello");
editor.blur();
@ -1128,7 +1123,7 @@ describe("textWysiwyg", () => {
it("should not allow bound text with only whitespaces", async () => {
Keyboard.keyPress(KEYS.ENTER);
const editor = getTextEditor();
const editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
updateTextEditor(editor, " ");
@ -1183,7 +1178,7 @@ describe("textWysiwyg", () => {
it("should reset the container height cache when resizing", async () => {
Keyboard.keyPress(KEYS.ENTER);
expect(getOriginalContainerHeightFromCache(rectangle.id)).toBe(75);
let editor = getTextEditor();
let editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
updateTextEditor(editor, "Hello");
editor.blur();
@ -1195,7 +1190,7 @@ describe("textWysiwyg", () => {
mouse.select(rectangle);
Keyboard.keyPress(KEYS.ENTER);
editor = getTextEditor();
editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
editor.blur();
@ -1211,7 +1206,7 @@ describe("textWysiwyg", () => {
Keyboard.keyPress(KEYS.ENTER);
expect(getOriginalContainerHeightFromCache(rectangle.id)).toBe(75);
const editor = getTextEditor();
const editor = await getTextEditor(true);
updateTextEditor(editor, "Hello World!");
editor.blur();
@ -1236,7 +1231,7 @@ describe("textWysiwyg", () => {
Keyboard.keyPress(KEYS.ENTER);
expect(getOriginalContainerHeightFromCache(rectangle.id)).toBe(75);
const editor = getTextEditor();
const editor = await getTextEditor(true);
updateTextEditor(editor, "Hello World!");
editor.blur();
expect(
@ -1268,12 +1263,12 @@ describe("textWysiwyg", () => {
beforeEach(async () => {
Keyboard.keyPress(KEYS.ENTER);
editor = getTextEditor();
editor = await getTextEditor(true);
updateTextEditor(editor, "Hello");
editor.blur();
mouse.select(rectangle);
Keyboard.keyPress(KEYS.ENTER);
editor = getTextEditor();
editor = await getTextEditor(true);
editor.select();
});
@ -1384,7 +1379,7 @@ describe("textWysiwyg", () => {
it("should wrap text in a container when wrap text in container triggered from context menu", async () => {
UI.clickTool("text");
mouse.clickAt(20, 30);
const editor = getTextEditor();
const editor = await getTextEditor(true);
updateTextEditor(
editor,
@ -1430,7 +1425,7 @@ describe("textWysiwyg", () => {
type: "text",
},
],
fillStyle: "hachure",
fillStyle: "solid",
groupIds: [],
height: 35,
isDeleted: false,
@ -1443,7 +1438,7 @@ describe("textWysiwyg", () => {
},
strokeColor: "#1e1e1e",
strokeStyle: "solid",
strokeWidth: 1,
strokeWidth: 2,
type: "rectangle",
updated: 1,
version: 1,
@ -1472,7 +1467,7 @@ describe("textWysiwyg", () => {
// Bind first text
let text = h.elements[1] as ExcalidrawTextElementWithContainer;
expect(text.containerId).toBe(rectangle.id);
let editor = getTextEditor();
let editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
updateTextEditor(editor, "Hello!");
expect(
@ -1497,7 +1492,7 @@ describe("textWysiwyg", () => {
rectangle.x + rectangle.width / 2,
rectangle.y + rectangle.height / 2,
);
editor = getTextEditor();
editor = await getTextEditor(true);
await new Promise((r) => setTimeout(r, 0));
updateTextEditor(editor, "Excalidraw");
editor.blur();

View File

@ -195,6 +195,7 @@ export type ExcalidrawLinearElement = _ExcalidrawElementBase &
Readonly<{
type: "line" | "arrow";
points: readonly Point[];
segmentSplitIndices: readonly number[] | null;
lastCommittedPoint: Point | null;
startBinding: PointBinding | null;
endBinding: PointBinding | null;

47
src/emitter.ts Normal file
View File

@ -0,0 +1,47 @@
type Subscriber<T extends any[]> = (...payload: T) => void;
export class Emitter<T extends any[] = []> {
public subscribers: Subscriber<T>[] = [];
public value: T | undefined;
private updateOnChangeOnly: boolean;
constructor(opts?: { initialState?: T; updateOnChangeOnly?: boolean }) {
this.updateOnChangeOnly = opts?.updateOnChangeOnly ?? false;
this.value = opts?.initialState;
}
/**
* Attaches subscriber
*
* @returns unsubscribe function
*/
on(...handlers: Subscriber<T>[] | Subscriber<T>[][]) {
const _handlers = handlers
.flat()
.filter((item) => typeof item === "function");
this.subscribers.push(..._handlers);
return () => this.off(_handlers);
}
off(...handlers: Subscriber<T>[] | Subscriber<T>[][]) {
const _handlers = handlers.flat();
this.subscribers = this.subscribers.filter(
(handler) => !_handlers.includes(handler),
);
}
trigger(...payload: T): any[] {
if (this.updateOnChangeOnly && this.value === payload) {
return [];
}
this.value = payload;
return this.subscribers.map((handler) => handler(...payload));
}
destroy() {
this.subscribers = [];
this.value = undefined;
}
}

View File

@ -323,7 +323,24 @@ export const groupByFrames = (elements: readonly ExcalidrawElement[]) => {
export const getFrameElements = (
allElements: ExcalidrawElementsIncludingDeleted,
frameId: string,
) => allElements.filter((element) => element.frameId === frameId);
opts?: { includeBoundArrows?: boolean },
) => {
return allElements.filter((element) => {
if (element.frameId === frameId) {
return true;
}
if (opts?.includeBoundArrows && element.type === "arrow") {
const bindingId = element.startBinding?.elementId;
if (bindingId) {
const boundElement = Scene.getScene(element)?.getElement(bindingId);
if (boundElement?.frameId === frameId) {
return true;
}
}
}
return false;
});
};
export const getElementsInResizingFrame = (
allElements: ExcalidrawElementsIncludingDeleted,
@ -451,6 +468,14 @@ export const getContainingFrame = (
return null;
};
export const isValidFrameChild = (element: ExcalidrawElement) => {
return (
element.type !== "frame" &&
// arrows that are bound to elements cannot be frame children
(element.type !== "arrow" || (!element.startBinding && !element.endBinding))
);
};
// --------------------------- Frame Operations -------------------------------
/**
@ -489,6 +514,9 @@ export const addElementsToFrame = (
elementsToAdd,
)) {
if (!currTargetFrameChildrenMap.has(element.id)) {
if (!isValidFrameChild(element)) {
continue;
}
finalElementsToAdd.push(element);
}

View File

@ -50,7 +50,7 @@
"veryLarge": "كبير جدا",
"solid": "كامل",
"hachure": "خطوط",
"zigzag": "",
"zigzag": "متعرج",
"crossHatch": "خطوط متقطعة",
"thin": "نحيف",
"bold": "داكن",
@ -106,11 +106,15 @@
"increaseFontSize": "تكبير حجم الخط",
"unbindText": "فك ربط النص",
"bindText": "ربط النص بالحاوية",
"createContainerFromText": "",
"createContainerFromText": "نص مغلف في حاوية",
"link": {
"edit": "تعديل الرابط",
"editEmbed": "تحرير الرابط وإدراجه",
"create": "إنشاء رابط",
"label": "رابط"
"createEmbed": "إنشاء رابط و إدراجه",
"label": "رابط",
"labelEmbed": "رابط و إدراج",
"empty": "لم يتم تعيين رابط"
},
"lineEditor": {
"edit": "تحرير السطر",
@ -124,9 +128,9 @@
},
"statusPublished": "نُشر",
"sidebarLock": "إبقاء الشريط الجانبي مفتوح",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"eyeDropper": ""
"selectAllElementsInFrame": "تحديد جميع العناصر في الإطار",
"removeAllElementsFromFrame": "إزالة جميع العناصر من الإطار",
"eyeDropper": "اختيار اللون من القماش"
},
"library": {
"noItems": "لا توجد عناصر أضيفت بعد...",
@ -160,13 +164,16 @@
"darkMode": "الوضع المظلم",
"lightMode": "الوضع المضيء",
"zenMode": "وضع التأمل",
"objectsSnapMode": "التقط إلى العناصر",
"exitZenMode": "إلغاء الوضع الليلى",
"cancel": "إلغاء",
"clear": "مسح",
"remove": "إزالة",
"embed": "تبديل الإدراج",
"publishLibrary": "انشر",
"submit": "أرسل",
"confirm": "تأكيد"
"confirm": "تأكيد",
"embeddableInteractionButton": "اضغط للتفاعل"
},
"alerts": {
"clearReset": "هذا سيُزيل كامل اللوحة. هل أنت متأكد؟",
@ -189,23 +196,28 @@
"resetLibrary": "هذا سوف يمسح مكتبتك. هل أنت متأكد؟",
"removeItemsFromsLibrary": "حذف {{count}} عنصر (عناصر) من المكتبة؟",
"invalidEncryptionKey": "مفتاح التشفير يجب أن يكون من 22 حرفاً. التعاون المباشر معطل.",
"collabOfflineWarning": ""
"collabOfflineWarning": "لا يوجد اتصال بالانترنت.\nلن يتم حفظ التغييرات التي قمت بها!"
},
"errors": {
"unsupportedFileType": "نوع الملف غير مدعوم.",
"imageInsertError": "تعذر إدراج الصورة. حاول مرة أخرى لاحقاً...",
"fileTooBig": "الملف كبير جداً. الحد الأقصى المسموح به للحجم هو {{maxSize}}.",
"svgImageInsertError": "تعذر إدراج صورة SVG. يبدو أن ترميز SVG غير صحيح.",
"failedToFetchImage": "",
"invalidSVGString": "SVG غير صالح.",
"cannotResolveCollabServer": "تعذر الاتصال بخادم التعاون. الرجاء إعادة تحميل الصفحة والمحاولة مرة أخرى.",
"importLibraryError": "تعذر تحميل المكتبة",
"collabSaveFailed": "تعذر الحفظ في قاعدة البيانات. إذا استمرت المشاكل، يفضل أن تحفظ ملفك محليا كي لا تفقد عملك.",
"collabSaveFailed_sizeExceeded": "تعذر الحفظ في قاعدة البيانات، يبدو أن القماش كبير للغاية، يفضّل حفظ الملف محليا كي لا تفقد عملك.",
"brave_measure_text_error": {
"line1": "",
"line2": "",
"line3": "",
"line4": ""
"line1": "يبدو أنك تستخدم متصفح Brave مع إعداد <bold>حظر صارم لتتبع البصمة</bold>.",
"line2": "قد يؤدي هذا إلى كسر <bold>عناصر النص</bold> في الرسومات الخاصة بك.",
"line3": "من المستحسن إلغاء تفعيل هذا الإعداد. يمكنك اتباع <link>هذه الخطوات</link> لفعل ذلك.",
"line4": "إذا لم يصلح تعطيل هذا الإعداد طريقة عرض النصوص، الرجاء كتابة <issueLink>بلاغ</issueLink> على حسابنا في GitHub، أو راسلنا على <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "لا يمكن إضافة العناصر القابلة للتضمين في المكتبة.",
"image": "سوف يتم دعم إضافة صور إلى المكتبة قريباً!"
}
},
"toolBar": {
@ -223,9 +235,11 @@
"penMode": "وضع القلم - امنع اللمس",
"link": "إضافة/تحديث الرابط للشكل المحدد",
"eraser": "ممحاة",
"frame": "",
"hand": "",
"extraTools": ""
"frame": "أداة الإطار",
"embeddable": "تضمين ويب",
"laser": "مؤشر ليزر",
"hand": "يد (أداة الإزاحة)",
"extraTools": "المزيد من أﻷدوات"
},
"headings": {
"canvasActions": "إجراءات اللوحة",
@ -237,6 +251,7 @@
"linearElement": "انقر لبدء نقاط متعددة، اسحب لخط واحد",
"freeDraw": "انقر واسحب، افرج عند الانتهاء",
"text": "نصيحة: يمكنك أيضًا إضافة نص بالنقر المزدوج في أي مكان بأداة الاختيار",
"embeddable": "اضغط مع السحب لإنشاء موقع ويب مضمّن",
"text_selected": "انقر نقراً مزدوجاً أو اضغط ادخال لتعديل النص",
"text_editing": "اضغط على Esc أو (Ctrl أو Cmd) + Enter لإنهاء التعديل",
"linearElementMulti": "انقر فوق النقطة الأخيرة أو اضغط على Esc أو Enter للإنهاء",
@ -245,14 +260,15 @@
"resizeImage": "يمكنك تغيير الحجم بحرية بالضغط بأستمرار على SHIFT،\nاضغط بأستمرار على ALT أيضا لتغيير الحجم من المركز",
"rotate": "يمكنك تقييد الزوايا من خلال الضغط على SHIFT أثناء الدوران",
"lineEditor_info": "اضغط على مفتاح (Ctrl أو Cmd) و انقر بشكل مزدوج، أو اضغط على مفتاحي (Ctrl أو Cmd) و (Enter) لتعديل النقاط",
"lineEditor_pointSelected": "",
"lineEditor_nothingSelected": "",
"placeImage": "",
"lineEditor_pointSelected": "اضغط على حذف لإزالة النقطة (النِّقَاط)، Ctrl/Cmd+D للتكرار، أو اسحب للانتقال",
"lineEditor_nothingSelected": "اختر نقطة لتعديلها (اضغط على SHIFT لتحديد عدة نِقَاط),\nأو اضغط على ALT و انقر بالفأرة لإضافة نِقَاط جديدة",
"placeImage": "انقر لوضع الصورة، أو انقر واسحب لتعيين حجمها يدوياً",
"publishLibrary": "نشر مكتبتك",
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"bindTextToElement": "اضغط على إدخال لإضافة نص",
"deepBoxSelect": "اضغط على Ctrl\\Cmd للاختيار العميق، ولمنع السحب",
"eraserRevert": "اضغط على Alt لاستعادة العناصر المعلَّمة للحذف",
"firefox_clipboard_write": "يمكن على الأرجح تمكين هذه الميزة عن طريق تعيين علم \"dom.events.asyncClipboard.clipboardItem\" إلى \"true\". لتغيير أعلام المتصفح في Firefox، قم بزيارة صفحة \"about:config\".",
"disableSnapping": "اضغط على Ctrl أو Cmd لتعطيل الالتقاط"
},
"canvasError": {
"cannotShowPreview": "تعذر عرض المعاينة",
@ -260,11 +276,11 @@
"canvasTooBigTip": "نصيحة: حاول تحريك العناصر البعيدة بشكل أقرب قليلاً."
},
"errorSplash": {
"headingMain": "",
"headingMain": "حدث خطأ. حاول <button>تحديث الصفحة</button>.",
"clearCanvasMessage": "إذا لم تعمل إعادة التحميل، حاول مرة أخرى ",
"clearCanvasCaveat": " هذا سيؤدي إلى فقدان العمل ",
"trackedToSentry": "",
"openIssueMessage": "",
"trackedToSentry": "تم تتبع الخطأ في المعرف {{eventId}} على نظامنا.",
"openIssueMessage": "حرصنا على عدم إضافة معلومات المشهد في بلاغ الخطأ. في حال كون مشهدك لا يحمل أي معلومات خاصة نرجو المتابعة على <button>نظام تتبع الأخطاء</button>. نرجو إضافة المعلومات أدناه بنسخها ولصقها في محتوى البلاغ على GitHub.",
"sceneContent": "محتوى المشهد:"
},
"roomDialog": {
@ -294,16 +310,16 @@
"helpDialog": {
"blog": "اقرأ مدونتنا",
"click": "انقر",
"deepSelect": "",
"deepBoxSelect": "",
"deepSelect": "تحديد عميق",
"deepBoxSelect": "تحديد عميق داخل المربع، ومنع السحب",
"curvedArrow": "سهم مائل",
"curvedLine": "خط مائل",
"documentation": "دليل الاستخدام",
"doubleClick": "انقر مرتين",
"drag": "اسحب",
"editor": "المحرر",
"editLineArrowPoints": "",
"editText": "",
"editLineArrowPoints": "تحرير سطر/نقاط سهم",
"editText": "تعديل النص / إضافة تسمية",
"github": "عثرت على مشكلة؟ إرسال",
"howto": "اتبع التعليمات",
"or": "أو",
@ -316,9 +332,9 @@
"view": "عرض",
"zoomToFit": "تكبير للملائمة",
"zoomToSelection": "تكبير للعنصر المحدد",
"toggleElementLock": "",
"movePageUpDown": "",
"movePageLeftRight": ""
"toggleElementLock": "إغلاق/فتح المحدد",
"movePageUpDown": "نقل الصفحة أعلى/أسفل",
"movePageLeftRight": "نقل الصفحة يسار/يمين"
},
"clearCanvasDialog": {
"title": "مسح اللوحة"
@ -336,20 +352,20 @@
"authorName": "اسمك أو اسم المستخدم",
"libraryName": "اسم مكتبتك",
"libraryDesc": "وصف مكتبتك لمساعدة الناس على فهم استخدامها",
"githubHandle": "",
"twitterHandle": "",
"website": ""
"githubHandle": "معالج GitHub (اختياري)، حتى تتمكن من تحرير المكتبة عند إرسالها للمراجعة",
"twitterHandle": "اسم مستخدم تويتر (اختياري)، حتى نعرف من الذي سيتم الإشارة إليه عند الترويج عبر تويتر",
"website": "رابط إلى موقعك الشخصي أو في مكان آخر (اختياري)"
},
"errors": {
"required": "مطلوب",
"website": "أدخل عنوان URL صالح"
},
"noteDescription": "",
"noteGuidelines": "",
"noteLicense": "",
"noteDescription": "تقديم مكتبتك لتضمينها في مستودع المكتبة العامة <link></link> لأشخاص آخرين لاستخدامها في رسومهم.",
"noteGuidelines": "تحتاج المكتبة إلى الموافقة أولا. يرجى قراءة <link>المعايير</link> قبل تقديمها. سوف تحتاج إلى حساب GitHub للتواصل وإجراء التغييرات عند الطلب، ولكن ليس مطلوبا بشكل صارم.",
"noteLicense": "تقديمك يعني موافقتك على نشر المكتبة المقدمة تحت <link>MIT ترخيص</link>، ما يعني أن لأي أحد الحق في استخدامها دون قيود.",
"noteItems": "يجب أن يكون لكل عنصر مكتبة اسمه الخاص حتى يكون قابلاً للتصفية. سيتم تضمين عناصر المكتبة التالية:",
"atleastOneLibItem": "يرجى تحديد عنصر مكتبة واحد على الأقل للبدء",
"republishWarning": ""
"republishWarning": "ملاحظة: بعض العناصر المحددة معينة على أنه نشرها أو تقديمها من قبل. يجب عليك فقط إعادة إرسال العناصر عند تحديث مكتبة موجودة أو إرسالها."
},
"publishSuccessDialog": {
"title": "تم إرسال المكتبة",
@ -360,27 +376,27 @@
"removeItemsFromLib": "إزالة العناصر المحددة من المكتبة"
},
"imageExportDialog": {
"header": "",
"header": "تصدير الصورة",
"label": {
"withBackground": "",
"onlySelected": "",
"darkMode": "",
"embedScene": "",
"scale": "",
"padding": ""
"withBackground": "الخلفية",
"onlySelected": "المحدد فقط",
"darkMode": "الوضع الداكن",
"embedScene": "تضمين المشهد",
"scale": "الحجم",
"padding": "الهوامش"
},
"tooltip": {
"embedScene": ""
"embedScene": "سيتم حفظ بيانات المشهد في ملف PNG/SVG المصدّر بحيث يمكن استعادة المشهد منه.\nسيزيد حجم الملف المصدر."
},
"title": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "تصدير بصيغة PNG",
"exportToSvg": "تصدير بصيغة SVG",
"copyPngToClipboard": "نسخ الـ PNG إلى الحافظة"
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": "نسخ إلى الحافظة"
}
},
"encrypted": {
@ -411,43 +427,76 @@
"fileSavedToFilename": "حفظ باسم {filename}",
"canvas": "لوحة الرسم",
"selection": "العنصر المحدد",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "استخدم {{shortcut}} للصق كعنصر واحد،\nأو لصق في محرر نص موجود",
"unableToEmbed": "تضمين هذا الرابط غير مسموح حاليًا. افتح بلاغاً على GitHub لطلب عنوان Url القائمة البيضاء",
"unrecognizedLinkFormat": "الرابط الذي ضمنته لا يتطابق مع التنسيق المتوقع. الرجاء محاولة لصق النص 'المضمن' المُزوَد من موقع المصدر"
},
"colors": {
"transparent": "شفاف",
"black": "",
"white": "",
"red": "",
"pink": "",
"grape": "",
"violet": "",
"gray": "",
"blue": "",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"bronze": ""
"black": "أسود",
"white": "أبيض",
"red": "أحمر",
"pink": "وردي",
"grape": "عنبي",
"violet": "بنفسجي",
"gray": "رمادي",
"blue": "أزرق",
"cyan": "سماوي",
"teal": "أزرق مخضر",
"green": "أخضر",
"yellow": "أصفر",
"orange": "برتقالي",
"bronze": "برونزي"
},
"welcomeScreen": {
"app": {
"center_heading": "",
"center_heading_plus": "",
"menuHint": ""
"center_heading": "جميع بياناتك محفوظة محليا في المتصفح الخاص بك.",
"center_heading_plus": "هل تريد الذهاب إلى Excalidraw+ بدلاً من ذلك؟",
"menuHint": "التصدير والتفضيلات واللغات ..."
},
"defaults": {
"menuHint": "",
"center_heading": "",
"toolbarHint": "",
"helpHint": ""
"menuHint": "التصدير والتفضيلات وغيرها...",
"center_heading": "الرسم البياني التصويري. بشكل مبسط.",
"toolbarHint": "اختر أداة و ابدأ الرسم!",
"helpHint": "الاختصارات و المساعدة"
}
},
"colorPicker": {
"mostUsedCustomColors": "",
"colors": "",
"shades": "",
"hexCode": "",
"noShades": ""
"mostUsedCustomColors": "الألوان المخصصة الأكثر استخداما",
"colors": "الألوان",
"shades": "الدرجات",
"hexCode": "رمز Hex",
"noShades": "لا تتوفر درجات لهذا اللون"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "تصدير كصورة",
"button": "تصدير كصورة",
"description": "تصدير بيانات المشهد إلى ملف يمكنك الاستيراد منه لاحقاً."
},
"saveToDisk": {
"title": "حفظ الملف للجهاز",
"button": "حفظ الملف للجهاز",
"description": "تصدير بيانات المشهد إلى ملف يمكنك الاستيراد منه لاحقاً."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "تصدير إلى Excalidraw+",
"description": "حفظ المشهد إلى مساحة العمل +Excalidraw الخاصة بك."
}
},
"modal": {
"loadFromFile": {
"title": "تحميل من ملف",
"button": "تحميل من ملف",
"description": "سيتم التحميل من الملف <bold>استبدال المحتوى الموجود</bold>.<br></br>يمكنك النسخ الاحتياطي لرسمك أولاً باستخدام أحد الخيارات أدناه."
},
"shareableLink": {
"title": "تحميل من رابط",
"button": "استبدال محتواي",
"description": "سيتسبب تحميل رسمة خارجية <bold>باستبدال محتواك الموجود حالياً</bold>.<br></br>بإمكانك إجراء النسخ الاحتياطي لرسمتك الحالية باستخدام أحد الخيارات أدناه."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "",
"editEmbed": "",
"create": "",
"label": ""
"createEmbed": "",
"label": "",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
@ -160,13 +164,16 @@
"darkMode": "",
"lightMode": "",
"zenMode": "",
"objectsSnapMode": "",
"exitZenMode": "",
"cancel": "",
"clear": "",
"remove": "",
"embed": "",
"publishLibrary": "",
"submit": "",
"confirm": ""
"confirm": "",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "",
@ -196,6 +203,7 @@
"imageInsertError": "",
"fileTooBig": "",
"svgImageInsertError": "",
"failedToFetchImage": "",
"invalidSVGString": "",
"cannotResolveCollabServer": "",
"importLibraryError": "",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "",
"eraser": "",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "",
"freeDraw": "",
"text": "",
"embeddable": "",
"text_selected": "",
"text_editing": "",
"linearElementMulti": "",
@ -252,7 +267,8 @@
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "",
@ -411,7 +427,9 @@
"fileSavedToFilename": "",
"canvas": "",
"selection": "",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -1,7 +1,7 @@
{
"labels": {
"paste": "Постави",
"pasteAsPlaintext": "",
"pasteAsPlaintext": "Постави като обикновен текст",
"pasteCharts": "Постави графики",
"selectAll": "Маркирай всичко",
"multiSelect": "Добави елемент към селекция",
@ -50,7 +50,7 @@
"veryLarge": "Много голям",
"solid": "Солиден",
"hachure": "Хералдика",
"zigzag": "",
"zigzag": "Зигзаг",
"crossHatch": "Двойно-пресечено",
"thin": "Тънък",
"bold": "Ясно очертан",
@ -63,7 +63,7 @@
"cartoonist": "Карикатурист",
"fileTitle": "Име на файл",
"colorPicker": "Избор на цвят",
"canvasColors": "",
"canvasColors": "Използван на платно",
"canvasBackground": "Фон на платно",
"drawingCanvas": "Платно за рисуване",
"layers": "Слоеве",
@ -99,37 +99,41 @@
"share": "Сподели",
"showStroke": "",
"showBackground": "",
"toggleTheme": "",
"personalLib": "",
"excalidrawLib": "",
"decreaseFontSize": "",
"increaseFontSize": "",
"toggleTheme": "Включи тема",
"personalLib": "Лична Библиотека",
"excalidrawLib": "Excalidraw Библиотека",
"decreaseFontSize": "Намали размера на шрифта",
"increaseFontSize": "Увеличи размера на шрифта",
"unbindText": "",
"bindText": "",
"createContainerFromText": "",
"link": {
"edit": "",
"edit": "Редактирай линк",
"editEmbed": "",
"create": "",
"label": ""
"createEmbed": "",
"label": "Линк",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
"exit": ""
},
"elementLock": {
"lock": "",
"unlock": "",
"lockAll": "",
"unlockAll": ""
"lock": "Заключи",
"unlock": "Отключи",
"lockAll": "Заключи всички",
"unlockAll": "Отключи всички"
},
"statusPublished": "",
"statusPublished": "Публикувани",
"sidebarLock": "",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"eyeDropper": ""
"eyeDropper": "Избери цвят от платното"
},
"library": {
"noItems": "",
"noItems": "Няма добавени неща все още...",
"hint_emptyLibrary": "",
"hint_emptyPrivateLibrary": ""
},
@ -137,11 +141,11 @@
"clearReset": "Нулиране на платно",
"exportJSON": "",
"exportImage": "",
"export": "",
"export": "Запази на...",
"copyToClipboard": "Копиране в клипборда",
"save": "",
"save": "Запази към текущ файл",
"saveAs": "Запиши като",
"load": "",
"load": "Отвори",
"getShareableLink": "Получаване на връзка за споделяне",
"close": "Затвори",
"selectLanguage": "Избор на език",
@ -160,13 +164,16 @@
"darkMode": "Тъмен режим",
"lightMode": "Светъл режим",
"zenMode": "Режим Zen",
"objectsSnapMode": "",
"exitZenMode": "Спиране на Zen режим",
"cancel": "Отмени",
"clear": "Изчисти",
"remove": "Премахване",
"embed": "",
"publishLibrary": "Публикувай",
"submit": "Изпрати",
"confirm": "Потвърждаване"
"confirm": "Потвърждаване",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Това ще изчисти цялото платно. Сигурни ли сте?",
@ -175,37 +182,42 @@
"couldNotLoadInvalidFile": "Невалиден файл не може да се зареди",
"importBackendFailed": "Импортирането от бекенд не беше успешно.",
"cannotExportEmptyCanvas": "Не може да се експортира празно платно.",
"couldNotCopyToClipboard": "",
"couldNotCopyToClipboard": "Не можем да копираме в клипбоарда.",
"decryptFailed": "Данните не можаха да се дешифрират.",
"uploadedSecurly": "Качването е защитено с криптиране от край до край, което означава, че сървърът Excalidraw и трети страни не могат да четат съдържанието.",
"loadSceneOverridePrompt": "Зареждането на външна рисунка ще презапише настоящото ви съдържание. Желаете ли да продължите?",
"collabStopOverridePrompt": "Прекратяването на сесията ще презапише предишната, локално запазена, рисунка. Сигурни ли сте?\n\n(Ако искате да продължите с локалната рисунка, просто затворете таба на браузъра.)",
"errorAddingToLibrary": "",
"errorRemovingFromLibrary": "",
"errorAddingToLibrary": "Не можем да заредим от библиотеката",
"errorRemovingFromLibrary": "Не можем да премахнем елемент от библиотеката",
"confirmAddLibrary": "Ще се добавят {{numShapes}} фигура(и) във вашата библиотека. Сигурни ли сте?",
"imageDoesNotContainScene": "",
"cannotRestoreFromImage": "Не може да бъде възстановена сцена от този файл",
"invalidSceneUrl": "",
"resetLibrary": "",
"removeItemsFromsLibrary": "",
"removeItemsFromsLibrary": "Изтрий {{count}} елемент(а) от библиотеката?",
"invalidEncryptionKey": "",
"collabOfflineWarning": ""
},
"errors": {
"unsupportedFileType": "Този файлов формат не се поддържа.",
"imageInsertError": "",
"fileTooBig": "",
"fileTooBig": "Файлът е твърде голям. Максималния допустим размер е {{maxSize}}.",
"svgImageInsertError": "",
"invalidSVGString": "",
"failedToFetchImage": "",
"invalidSVGString": "Невалиден SVG.",
"cannotResolveCollabServer": "",
"importLibraryError": "",
"importLibraryError": "Не можем да заредим библиотеката",
"collabSaveFailed": "",
"collabSaveFailed_sizeExceeded": "",
"brave_measure_text_error": {
"line1": "",
"line2": "",
"line3": "",
"line3": "Силно препоръчваме да изключите тази настройка. Можете да следвате <link>тези стъпки</link> за това как да го направите.",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -222,10 +234,12 @@
"lock": "Поддържайте избрания инструмент активен след рисуване",
"penMode": "",
"link": "",
"eraser": "",
"eraser": "Гума",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
"extraTools": "Още инструменти"
},
"headings": {
"canvasActions": "Действия по платното",
@ -237,6 +251,7 @@
"linearElement": "Кликнете, за да стартирате няколко точки, плъзнете за една линия",
"freeDraw": "Натиснете и влачете, пуснете като сте готови",
"text": "Подсказка: Можете също да добавите текст като натиснете някъде два път с инструмента за селекция",
"embeddable": "",
"text_selected": "",
"text_editing": "",
"linearElementMulti": "Кликнете върху последната точка или натиснете Escape или Enter, за да завършите",
@ -252,7 +267,8 @@
"bindTextToElement": "Натиснете Enter, за да добавите",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Невъзможност за показване на preview",
@ -288,7 +304,7 @@
"link_details": "",
"link_button": "",
"excalidrawplus_description": "",
"excalidrawplus_button": "",
"excalidrawplus_button": "Експорт",
"excalidrawplus_exportError": ""
},
"helpDialog": {
@ -299,7 +315,7 @@
"curvedArrow": "Извита стрелка",
"curvedLine": "Извита линия",
"documentation": "Документация",
"doubleClick": "",
"doubleClick": "двойно-щракване",
"drag": "плъзнете",
"editor": "Редактор",
"editLineArrowPoints": "",
@ -308,41 +324,41 @@
"howto": "Следвайте нашите ръководства",
"or": "или",
"preventBinding": "Спри прилепяне на стрелките",
"tools": "",
"tools": "Инструменти",
"shortcuts": "Клавиши за бърз достъп",
"textFinish": "",
"textNewLine": "",
"textFinish": "Завърши редактиране (текстов редактор)",
"textNewLine": "Добави нова линия (текстов редактор)",
"title": "Помощ",
"view": "Преглед",
"zoomToFit": "Приближи докато се виждат всички елементи",
"zoomToSelection": "Приближи селекцията",
"toggleElementLock": "",
"movePageUpDown": "",
"movePageLeftRight": ""
"toggleElementLock": "Заключи/Отключи селекция",
"movePageUpDown": "Премести страница нагоре/надолу",
"movePageLeftRight": "Премести страница наляво/надясно"
},
"clearCanvasDialog": {
"title": ""
"title": "Изчисти платното"
},
"publishDialog": {
"title": "",
"itemName": "",
"authorName": "",
"githubUsername": "",
"twitterUsername": "",
"libraryName": "",
"libraryDesc": "",
"website": "",
"title": "Публикувай библиотека",
"itemName": "Име",
"authorName": "Авторско име",
"githubUsername": "GitHub потребителско име",
"twitterUsername": "Twitter потребителско име",
"libraryName": "Име на библиотеката",
"libraryDesc": "Описание на библиотеката",
"website": "Уебсайт",
"placeholder": {
"authorName": "",
"libraryName": "",
"libraryDesc": "",
"authorName": "Името или потребителското Ви име",
"libraryName": "Име на библиотеката Ви",
"libraryDesc": "Описание на библиотеката ви, за да помогнете на хората да разберат приложенията ѝ",
"githubHandle": "",
"twitterHandle": "",
"website": ""
},
"errors": {
"required": "",
"website": ""
"required": "Задължително",
"website": "Въведете валиден URL адрес"
},
"noteDescription": "",
"noteGuidelines": "",
@ -356,15 +372,15 @@
"content": ""
},
"confirmDialog": {
"resetLibrary": "",
"resetLibrary": "Нулирай библиотека",
"removeItemsFromLib": ""
},
"imageExportDialog": {
"header": "",
"label": {
"withBackground": "",
"onlySelected": "",
"darkMode": "",
"withBackground": "Фон",
"onlySelected": "Само избраното",
"darkMode": "Тъмен режим",
"embedScene": "",
"scale": "",
"padding": ""
@ -373,14 +389,14 @@
"embedScene": ""
},
"title": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "Изнасяне в PNG",
"exportToSvg": "Изнасяне в SVG",
"copyPngToClipboard": "Копирай PNG в клипборда"
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": "Копиране в клипборда"
}
},
"encrypted": {
@ -403,51 +419,84 @@
"width": "Широчина"
},
"toast": {
"addedToLibrary": "",
"addedToLibrary": "Добавена към библиотеката",
"copyStyles": "Копирани стилове.",
"copyToClipboard": "Копирано в клипборда.",
"copyToClipboardAsPng": "",
"fileSaved": "",
"fileSavedToFilename": "",
"canvas": "",
"selection": "",
"pasteAsSingleElement": ""
"copyToClipboardAsPng": "Копира {{exportSelection}} в клипборда като PNG\n({{exportColorScheme}})",
"fileSaved": "Файлът е запазен.",
"fileSavedToFilename": "Запазен към {filename}",
"canvas": "платно",
"selection": "селекция",
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
"black": "",
"white": "",
"red": "",
"pink": "",
"grape": "",
"violet": "",
"gray": "",
"blue": "",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"bronze": ""
"transparent": "Прозрачен",
"black": "Черен",
"white": "Бял",
"red": "Червен",
"pink": "Розов",
"grape": "Грозде",
"violet": "Виолетово",
"gray": "Сив",
"blue": "Син",
"cyan": "Синьозелено",
"teal": "Тъмно синьо-зелено",
"green": "Зелено",
"yellow": "Жълто",
"orange": "Оранжево",
"bronze": "Бронзово"
},
"welcomeScreen": {
"app": {
"center_heading": "",
"center_heading": "Всичките Ви данни са запазени локално в браузъра Ви.",
"center_heading_plus": "",
"menuHint": ""
"menuHint": "Експорт, предпочитания, езици, ..."
},
"defaults": {
"menuHint": "",
"center_heading": "",
"toolbarHint": "",
"helpHint": ""
"menuHint": "Експорт, предпочитания, и още...",
"center_heading": "Диаграми. Направени. Просто.",
"toolbarHint": "Изберете инструмент & Започнете да рисувате!",
"helpHint": "Преки пътища & помощ"
}
},
"colorPicker": {
"mostUsedCustomColors": "",
"colors": "",
"shades": "",
"hexCode": "",
"mostUsedCustomColors": "Най-често използвани цветове",
"colors": "Цветове",
"shades": "Нюанси",
"hexCode": "Шестнадесетичен код",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Изнеси като изображение",
"button": "Изнеси като изображение",
"description": ""
},
"saveToDisk": {
"title": "Запази към диск",
"button": "Запази към диск",
"description": ""
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Експортирай към Excalidraw+",
"description": "Запази сцената към Excalidraw+ работното място."
}
},
"modal": {
"loadFromFile": {
"title": "Зареди от файл",
"button": "Зареди от файл",
"description": ""
},
"shareableLink": {
"title": "Зареди от линк",
"button": "Замени моето съдържание",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "লিঙ্ক সংশোধন",
"editEmbed": "",
"create": "লিঙ্ক তৈরী",
"label": "লিঙ্ক নামকরণ"
"createEmbed": "",
"label": "লিঙ্ক নামকরণ",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
@ -160,13 +164,16 @@
"darkMode": "ডার্ক মোড",
"lightMode": "লাইট মোড",
"zenMode": "জেন মোড",
"objectsSnapMode": "",
"exitZenMode": "জেন মোড বন্ধ করুন",
"cancel": "বাতিল",
"clear": "সাফ",
"remove": "বিয়োগ",
"embed": "",
"publishLibrary": "সংগ্রহ প্রকাশ করুন",
"submit": "জমা করুন",
"confirm": "নিশ্চিত করুন"
"confirm": "নিশ্চিত করুন",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "এটি পুরো ক্যানভাস সাফ করবে। আপনি কি নিশ্চিত?",
@ -196,6 +203,7 @@
"imageInsertError": "ছবি সন্নিবেশ করা যায়নি। পরে আবার চেষ্টা করুন...",
"fileTooBig": "ফাইলটি খুব বড়। সর্বাধিক অনুমোদিত আকার হল {{maxSize}}৷",
"svgImageInsertError": "এসভীজী ছবি সন্নিবেশ করা যায়নি। এসভীজী মার্কআপটি অবৈধ মনে হচ্ছে৷",
"failedToFetchImage": "",
"invalidSVGString": "এসভীজী মার্কআপটি অবৈধ মনে হচ্ছে৷",
"cannotResolveCollabServer": "কোল্যাব সার্ভারের সাথে সংযোগ করা যায়নি। পৃষ্ঠাটি পুনরায় লোড করে আবার চেষ্টা করুন।",
"importLibraryError": "সংগ্রহ লোড করা যায়নি",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "একটি নির্বাচিত আকৃতির জন্য লিঙ্ক যোগ বা আপডেট করুন",
"eraser": "ঝাড়ন",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "একাধিক বিন্দু শুরু করতে ক্লিক করুন, একক লাইনের জন্য টেনে আনুন",
"freeDraw": "ক্লিক করুন এবং টেনে আনুন, আপনার কাজ শেষ হলে ছেড়ে দিন",
"text": "বিশেষ্য: আপনি নির্বাচন টুলের সাথে যে কোনো জায়গায় ডাবল-ক্লিক করে পাঠ্য যোগ করতে পারেন",
"embeddable": "",
"text_selected": "লেখা সম্পাদনা করতে ডাবল-ক্লিক করুন বা এন্টার টিপুন",
"text_editing": "লেখা সম্পাদনা শেষ করতে এসকেপ বা কন্ট্রোল/কম্যান্ড যোগে এন্টার টিপুন",
"linearElementMulti": "শেষ বিন্দুতে ক্লিক করুন অথবা শেষ করতে এসকেপ বা এন্টার টিপুন",
@ -252,7 +267,8 @@
"bindTextToElement": "লেখা যোগ করতে এন্টার টিপুন",
"deepBoxSelect": "",
"eraserRevert": "মুছে ফেলার জন্য চিহ্নিত উপাদানগুলিকে ফিরিয়ে আনতে অল্ট ধরে রাখুন",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "প্রিভিউ দেখাতে অপারগ",
@ -411,7 +427,9 @@
"fileSavedToFilename": "",
"canvas": "",
"selection": "বাছাই",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "Edita l'enllaç",
"editEmbed": "",
"create": "Crea un enllaç",
"label": "Enllaç"
"createEmbed": "",
"label": "Enllaç",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Editar línia",
@ -160,13 +164,16 @@
"darkMode": "Mode fosc",
"lightMode": "Mode clar",
"zenMode": "Mode zen",
"objectsSnapMode": "",
"exitZenMode": "Surt de mode zen",
"cancel": "Cancel·la",
"clear": "Neteja",
"remove": "Suprimeix",
"embed": "",
"publishLibrary": "Publica",
"submit": "Envia",
"confirm": "Confirma"
"confirm": "Confirma",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "S'esborrarà tot el llenç. N'esteu segur?",
@ -196,6 +203,7 @@
"imageInsertError": "No s'ha pogut insertar la imatge, torneu-ho a provar més tard...",
"fileTooBig": "El fitxer és massa gros. La mida màxima permesa és {{maxSize}}.",
"svgImageInsertError": "No ha estat possible inserir la imatge SVG. Les marques SVG semblen invàlides.",
"failedToFetchImage": "",
"invalidSVGString": "SVG no vàlid.",
"cannotResolveCollabServer": "No ha estat possible connectar amb el servidor collab. Si us plau recarregueu la pàgina i torneu a provar.",
"importLibraryError": "No s'ha pogut carregar la biblioteca",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Afegeix / actualitza l'enllaç per a la forma seleccionada",
"eraser": "Esborrador",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "Mà (eina de desplaçament)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Feu clic per a dibuixar múltiples punts; arrossegueu per a una sola línia",
"freeDraw": "Feu clic i arrossegueu, deixeu anar per a finalitzar",
"text": "Consell: també podeu afegir text fent doble clic en qualsevol lloc amb l'eina de selecció",
"embeddable": "",
"text_selected": "Feu doble clic o premeu Retorn per a editar el text",
"text_editing": "Premeu Escapada o Ctrl+Retorn (o Ordre+Retorn) per a finalitzar l'edició",
"linearElementMulti": "Feu clic a l'ultim punt, o pitgeu Esc o Retorn per a finalitzar",
@ -252,7 +267,8 @@
"bindTextToElement": "Premeu enter per a afegir-hi text",
"deepBoxSelect": "Manteniu CtrlOrCmd per a selecció profunda, i per a evitar l'arrossegament",
"eraserRevert": "Mantingueu premuda Alt per a revertir els elements seleccionats per a esborrar",
"firefox_clipboard_write": "És probable que aquesta funció es pugui activar posant la marca \"dom.events.asyncClipboard.clipboardItem\" a \"true\". Per canviar les marques del navegador al Firefox, visiteu la pàgina \"about:config\"."
"firefox_clipboard_write": "És probable que aquesta funció es pugui activar posant la marca \"dom.events.asyncClipboard.clipboardItem\" a \"true\". Per canviar les marques del navegador al Firefox, visiteu la pàgina \"about:config\".",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "No es pot mostrar la previsualització",
@ -411,7 +427,9 @@
"fileSavedToFilename": "S'ha desat a {filename}",
"canvas": "el llenç",
"selection": "la selecció",
"pasteAsSingleElement": "Fer servir {{shortcut}} per enganxar com un sol element,\no enganxeu-lo en un editor de text existent"
"pasteAsSingleElement": "Fer servir {{shortcut}} per enganxar com un sol element,\no enganxeu-lo en un editor de text existent",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Transparent",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Zabalit text do kontejneru",
"link": {
"edit": "Upravit odkaz",
"editEmbed": "",
"create": "Vytvořit odkaz",
"label": "Odkaz"
"createEmbed": "",
"label": "Odkaz",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Upravit čáru",
@ -160,13 +164,16 @@
"darkMode": "Tmavý režim",
"lightMode": "Světlý režim",
"zenMode": "Zen mód",
"objectsSnapMode": "",
"exitZenMode": "Opustit zen mód",
"cancel": "Zrušit",
"clear": "Vyčistit",
"remove": "Odstranit",
"embed": "",
"publishLibrary": "Zveřejnit",
"submit": "Odeslat",
"confirm": "Potvrdit"
"confirm": "Potvrdit",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Toto vymaže celé plátno. Jste si jisti?",
@ -196,6 +203,7 @@
"imageInsertError": "Nelze vložit obrázek. Zkuste to později...",
"fileTooBig": "Soubor je příliš velký. Maximální povolená velikost je {{maxSize}}.",
"svgImageInsertError": "Nelze vložit SVG obrázek. Značení SVG je neplatné.",
"failedToFetchImage": "",
"invalidSVGString": "Neplatný SVG.",
"cannotResolveCollabServer": "Nelze se připojit ke sdílenému serveru. Prosím obnovte stránku a zkuste to znovu.",
"importLibraryError": "Nelze načíst knihovnu",
@ -206,6 +214,10 @@
"line2": "To by mohlo vést k narušení <bold>Textových elementů</bold> ve vašich výkresech.",
"line3": "Důrazně doporučujeme zakázat toto nastavení. Můžete sledovat <link>tyto kroky</link> jak to udělat.",
"line4": "Pokud vypnutí tohoto nastavení neopravuje zobrazení textových prvků, prosím, otevřete <issueLink>problém</issueLink> na našem GitHubu, nebo nám napište na <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Přidat/aktualizovat odkaz pro vybraný tvar",
"eraser": "Guma",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "Ruka (nástroj pro posouvání)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Kliknutím pro více bodů, táhnutím pro jednu čáru",
"freeDraw": "Klikněte a táhněte, pro ukončení pusťte",
"text": "Tip: Text můžete také přidat dvojitým kliknutím kdekoli pomocí nástroje pro výběr",
"embeddable": "",
"text_selected": "Dvojklikem nebo stisknutím klávesy ENTER upravíte text",
"text_editing": "Stiskněte Escape nebo Ctrl/Cmd+ENTER pro dokončení úprav",
"linearElementMulti": "Klikněte na poslední bod nebo stiskněte Escape anebo Enter pro dokončení",
@ -252,7 +267,8 @@
"bindTextToElement": "Stiskněte Enter pro přidání textu",
"deepBoxSelect": "Podržte Ctrl/Cmd pro hluboký výběr a pro zabránění táhnutí",
"eraserRevert": "Podržením klávesy Alt vrátíte prvky označené pro smazání",
"firefox_clipboard_write": "Tato funkce může být povolena nastavením vlajky \"dom.events.asyncClipboard.clipboardItem\" na \"true\". Chcete-li změnit vlajky prohlížeče ve Firefoxu, navštivte stránku \"about:config\"."
"firefox_clipboard_write": "Tato funkce může být povolena nastavením vlajky \"dom.events.asyncClipboard.clipboardItem\" na \"true\". Chcete-li změnit vlajky prohlížeče ve Firefoxu, navštivte stránku \"about:config\".",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Náhled nelze zobrazit",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Uloženo do {filename}",
"canvas": "plátno",
"selection": "výběr",
"pasteAsSingleElement": "Pomocí {{shortcut}} vložte jako jeden prvek,\nnebo vložte do existujícího textového editoru"
"pasteAsSingleElement": "Pomocí {{shortcut}} vložte jako jeden prvek,\nnebo vložte do existujícího textového editoru",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Průhledná",
@ -449,5 +467,36 @@
"shades": "Stíny",
"hexCode": "Hex kód",
"noShades": "Pro tuto barvu nejsou k dispozici žádné odstíny"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -1,7 +1,7 @@
{
"labels": {
"paste": "Indsæt",
"pasteAsPlaintext": "",
"pasteAsPlaintext": "Indsæt som klartekst",
"pasteCharts": "Indsæt diagrammer",
"selectAll": "Marker alle",
"multiSelect": "Tilføj element til markering",
@ -50,7 +50,7 @@
"veryLarge": "Meget stor",
"solid": "Solid",
"hachure": "Skravering",
"zigzag": "",
"zigzag": "Zigzag",
"crossHatch": "Krydsskravering",
"thin": "Tynd",
"bold": "Fed",
@ -69,8 +69,8 @@
"layers": "Lag",
"actions": "Handlinger",
"language": "Sprog",
"liveCollaboration": "",
"duplicateSelection": "",
"liveCollaboration": "Live samarbejde...",
"duplicateSelection": "Duplikér",
"untitled": "Unavngivet",
"name": "Navn",
"yourName": "Dit navn",
@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "",
"editEmbed": "",
"create": "",
"label": ""
"createEmbed": "",
"label": "",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
@ -160,13 +164,16 @@
"darkMode": "Mørk tilstand",
"lightMode": "Lys baggrund",
"zenMode": "Zentilstand",
"objectsSnapMode": "",
"exitZenMode": "Stop zentilstand",
"cancel": "Annuller",
"clear": "Ryd",
"remove": "Fjern",
"embed": "",
"publishLibrary": "Publicér",
"submit": "Gem",
"confirm": "Bekræft"
"confirm": "Bekræft",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Dette vil rydde hele lærredet. Er du sikker?",
@ -196,6 +203,7 @@
"imageInsertError": "",
"fileTooBig": "",
"svgImageInsertError": "",
"failedToFetchImage": "",
"invalidSVGString": "",
"cannotResolveCollabServer": "",
"importLibraryError": "",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "",
"eraser": "",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "",
"freeDraw": "Klik og træk, slip når du er færdig",
"text": "",
"embeddable": "",
"text_selected": "",
"text_editing": "",
"linearElementMulti": "",
@ -252,7 +267,8 @@
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Gemt som {filename}",
"canvas": "canvas",
"selection": "markering",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Text in Container einbetten",
"link": {
"edit": "Link bearbeiten",
"editEmbed": "Link bearbeiten & einbetten",
"create": "Link erstellen",
"label": "Link"
"createEmbed": "Link erstellen & einbetten",
"label": "Link",
"labelEmbed": "Verlinken & einbetten",
"empty": "Kein Link festgelegt"
},
"lineEditor": {
"edit": "Linie bearbeiten",
@ -160,13 +164,16 @@
"darkMode": "Dunkles Design",
"lightMode": "Helles Design",
"zenMode": "Zen-Modus",
"objectsSnapMode": "Einrasten an Objekten",
"exitZenMode": "Zen-Modus verlassen",
"cancel": "Abbrechen",
"clear": "Löschen",
"remove": "Entfernen",
"embed": "Einbettung umschalten",
"publishLibrary": "Veröffentlichen",
"submit": "Absenden",
"confirm": "Bestätigen"
"confirm": "Bestätigen",
"embeddableInteractionButton": "Klicken, um zu interagieren"
},
"alerts": {
"clearReset": "Dies wird die ganze Zeichenfläche löschen. Bist du dir sicher?",
@ -196,6 +203,7 @@
"imageInsertError": "Das Bild konnte nicht eingefügt werden. Versuche es später erneut...",
"fileTooBig": "Die Datei ist zu groß. Die maximal zulässige Größe ist {{maxSize}}.",
"svgImageInsertError": "SVG-Bild konnte nicht eingefügt werden. Das SVG-Markup sieht ungültig aus.",
"failedToFetchImage": "Bild konnte nicht abgerufen werden.",
"invalidSVGString": "Ungültige SVG.",
"cannotResolveCollabServer": "Konnte keine Verbindung zum Collab-Server herstellen. Bitte lade die Seite neu und versuche es erneut.",
"importLibraryError": "Bibliothek konnte nicht geladen werden",
@ -206,6 +214,10 @@
"line2": "Dies könnte dazu führen, dass die <bold>Textelemente</bold> in Ihren Zeichnungen zerstört werden.",
"line3": "Wir empfehlen dringend, diese Einstellung zu deaktivieren. Dazu kannst Du <link>diesen Schritten</link> folgen.",
"line4": "Wenn die Deaktivierung dieser Einstellung die fehlerhafte Anzeige von Textelementen nicht behebt, öffne bitte ein <issueLink>Ticket</issueLink> auf unserem GitHub oder schreibe uns auf <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "Einbettbare Elemente können der Bibliothek nicht hinzugefügt werden.",
"image": "Unterstützung für das Hinzufügen von Bildern in die Bibliothek kommt bald!"
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Link für ausgewählte Form hinzufügen / aktualisieren",
"eraser": "Radierer",
"frame": "Rahmenwerkzeug",
"embeddable": "Web-Einbettung",
"laser": "Laserpointer",
"hand": "Hand (Schwenkwerkzeug)",
"extraTools": "Weitere Werkzeuge"
},
@ -237,6 +251,7 @@
"linearElement": "Klicken für Linie mit mehreren Punkten, Ziehen für einzelne Linie",
"freeDraw": "Klicke und ziehe. Lass los, wenn du fertig bist",
"text": "Tipp: Du kannst auch Text hinzufügen, indem du mit dem Auswahlwerkzeug auf eine beliebige Stelle doppelklickst",
"embeddable": "Klicken und ziehen, um eine Webseiten-Einbettung zu erstellen",
"text_selected": "Doppelklicken oder Eingabetaste drücken, um Text zu bearbeiten",
"text_editing": "Drücke Escape oder CtrlOrCmd+Eingabetaste, um die Bearbeitung abzuschließen",
"linearElementMulti": "Zum Beenden auf den letzten Punkt klicken oder Escape oder Eingabe drücken",
@ -252,7 +267,8 @@
"bindTextToElement": "Zum Hinzufügen Eingabetaste drücken",
"deepBoxSelect": "Halte CtrlOrCmd gedrückt, um innerhalb der Gruppe auszuwählen, und um Ziehen zu vermeiden",
"eraserRevert": "Halte Alt gedrückt, um die zum Löschen markierten Elemente zurückzusetzen",
"firefox_clipboard_write": "Diese Funktion kann wahrscheinlich aktiviert werden, indem die Einstellung \"dom.events.asyncClipboard.clipboardItem\" auf \"true\" gesetzt wird. Um die Browsereinstellungen in Firefox zu ändern, besuche die Seite \"about:config\"."
"firefox_clipboard_write": "Diese Funktion kann wahrscheinlich aktiviert werden, indem die Einstellung \"dom.events.asyncClipboard.clipboardItem\" auf \"true\" gesetzt wird. Um die Browsereinstellungen in Firefox zu ändern, besuche die Seite \"about:config\".",
"disableSnapping": "Halte CtrlOrCmd gedrückt, um das Einrasten zu deaktivieren"
},
"canvasError": {
"cannotShowPreview": "Vorschau kann nicht angezeigt werden",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Als {filename} gespeichert",
"canvas": "Zeichenfläche",
"selection": "Auswahl",
"pasteAsSingleElement": "Verwende {{shortcut}} , um als einzelnes Element\neinzufügen oder in einen existierenden Texteditor einzufügen"
"pasteAsSingleElement": "Verwende {{shortcut}} , um als einzelnes Element\neinzufügen oder in einen existierenden Texteditor einzufügen",
"unableToEmbed": "Einbetten dieser URL ist derzeit nicht zulässig. Erstelle einen Issue auf GitHub, um die URL freigeben zu lassen",
"unrecognizedLinkFormat": "Der Link, den Du eingebettet hast, stimmt nicht mit dem erwarteten Format überein. Bitte versuche den 'embed' String einzufügen, der von der Quellseite zur Verfügung gestellt wird"
},
"colors": {
"transparent": "Transparent",
@ -449,5 +467,36 @@
"shades": "Schattierungen",
"hexCode": "Hex-Code",
"noShades": "Keine Schattierungen für diese Farbe verfügbar"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Als Bild exportieren",
"button": "Als Bild exportieren",
"description": "Exportiere die Zeichnungsdaten als ein Bild, von dem Du später importieren kannst."
},
"saveToDisk": {
"title": "Auf Festplatte speichern",
"button": "Auf Festplatte speichern",
"description": "Exportiere die Zeichnungsdaten in eine Datei, von der Du später importieren kannst."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Export nach Excalidraw+",
"description": "Speichere die Szene in deinem Excalidraw+-Arbeitsbereich."
}
},
"modal": {
"loadFromFile": {
"title": "Aus Datei laden",
"button": "Aus Datei laden",
"description": "Das Laden aus einer Datei wird <bold>Deinen vorhandenen Inhalt ersetzen</bold>.<br></br>Du kannst Deine Zeichnung zuerst mit einer der folgenden Optionen sichern."
},
"shareableLink": {
"title": "Aus Link laden",
"button": "Meinen Inhalt ersetzen",
"description": "Das Laden einer externen Zeichnung wird <bold>Deinen vorhandenen Inhalt ersetzen</bold>.<br></br>Du kannst Deine Zeichnung zuerst mit einer der folgenden Optionen sichern."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "Επεξεργασία συνδέσμου",
"editEmbed": "",
"create": "Δημιουργία συνδέσμου",
"label": "Σύνδεσμος"
"createEmbed": "",
"label": "Σύνδεσμος",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Επεξεργασία γραμμής",
@ -160,13 +164,16 @@
"darkMode": "Σκοτεινή λειτουργία",
"lightMode": "Φωτεινή λειτουργία",
"zenMode": "Λειτουργία Zεν",
"objectsSnapMode": "",
"exitZenMode": "Έξοδος από την λειτουργία Zen",
"cancel": "Ακύρωση",
"clear": "Καθαρισμός",
"remove": "Κατάργηση",
"embed": "",
"publishLibrary": "Δημοσίευση",
"submit": "Υποβολή",
"confirm": "Επιβεβαίωση"
"confirm": "Επιβεβαίωση",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Αυτό θα σβήσει ολόκληρο τον καμβά. Είσαι σίγουρος;",
@ -196,6 +203,7 @@
"imageInsertError": "Αδυναμία εισαγωγής εικόνας. Προσπαθήστε ξανά αργότερα...",
"fileTooBig": "Το αρχείο είναι πολύ μεγάλο. Το μέγιστο επιτρεπόμενο μέγεθος είναι {{maxSize}}.",
"svgImageInsertError": "Αδυναμία εισαγωγής εικόνας SVG. Η σήμανση της SVG δεν φαίνεται έγκυρη.",
"failedToFetchImage": "",
"invalidSVGString": "Μη έγκυρο SVG.",
"cannotResolveCollabServer": "Αδυναμία σύνδεσης με τον διακομιστή συνεργασίας. Παρακαλώ ανανεώστε τη σελίδα και προσπαθήστε ξανά.",
"importLibraryError": "Αδυναμία φόρτωσης βιβλιοθήκης",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Προσθήκη/ Ενημέρωση συνδέσμου για ένα επιλεγμένο σχήμα",
"eraser": "Γόμα",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Κάνε κλικ για να ξεκινήσεις πολλαπλά σημεία, σύρε για μια γραμμή",
"freeDraw": "Κάντε κλικ και σύρτε, απελευθερώσατε όταν έχετε τελειώσει",
"text": "Tip: μπορείτε επίσης να προσθέστε κείμενο με διπλό-κλικ οπουδήποτε με το εργαλείο επιλογών",
"embeddable": "",
"text_selected": "Κάντε διπλό κλικ ή πατήστε ENTER για να επεξεργαστείτε το κείμενο",
"text_editing": "Πατήστε Escape ή CtrlOrCmd+ENTER για να ολοκληρώσετε την επεξεργασία",
"linearElementMulti": "Κάνε κλικ στο τελευταίο σημείο ή πάτησε Escape ή Enter για να τελειώσεις",
@ -252,7 +267,8 @@
"bindTextToElement": "Πατήστε Enter για προσθήκη κειμένου",
"deepBoxSelect": "Κρατήστε πατημένο το CtrlOrCmd για να επιλέξετε βαθιά, και να αποτρέψετε τη μεταφορά",
"eraserRevert": "Κρατήστε πατημένο το Alt για να επαναφέρετε τα στοιχεία που σημειώθηκαν για διαγραφή",
"firefox_clipboard_write": "Αυτή η επιλογή μπορεί πιθανώς να ενεργοποιηθεί αλλάζοντας την ρύθμιση \"dom.events.asyncClipboard.clipboardItem\" σε \"true\". Για να αλλάξετε τις ρυθμίσεις του προγράμματος περιήγησης στο Firefox, επισκεφθείτε τη σελίδα \"about:config\"."
"firefox_clipboard_write": "Αυτή η επιλογή μπορεί πιθανώς να ενεργοποιηθεί αλλάζοντας την ρύθμιση \"dom.events.asyncClipboard.clipboardItem\" σε \"true\". Για να αλλάξετε τις ρυθμίσεις του προγράμματος περιήγησης στο Firefox, επισκεφθείτε τη σελίδα \"about:config\".",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Αδυναμία εμφάνισης προεπισκόπησης",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Αποθηκεύτηκε στο {filename}",
"canvas": "καμβάς",
"selection": "επιλογή",
"pasteAsSingleElement": "Χρησιμοποίησε το {{shortcut}} για να επικολλήσεις ως ένα μόνο στοιχείο,\nή να επικολλήσεις σε έναν υπάρχοντα επεξεργαστή κειμένου"
"pasteAsSingleElement": "Χρησιμοποίησε το {{shortcut}} για να επικολλήσεις ως ένα μόνο στοιχείο,\nή να επικολλήσεις σε έναν υπάρχοντα επεξεργαστή κειμένου",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Διαφανές",
@ -449,5 +467,36 @@
"shades": "Αποχρώσεις",
"hexCode": "Κωδικός Hex",
"noShades": "Δεν υπάρχουν διαθέσιμες αποχρώσεις για αυτό το χρώμα"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -203,6 +203,7 @@
"imageInsertError": "Couldn't insert image. Try again later...",
"fileTooBig": "File is too big. Maximum allowed size is {{maxSize}}.",
"svgImageInsertError": "Couldn't insert SVG image. The SVG markup looks invalid.",
"failedToFetchImage": "Failed to fetch image.",
"invalidSVGString": "Invalid SVG.",
"cannotResolveCollabServer": "Couldn't connect to the collab server. Please reload the page and try again.",
"importLibraryError": "Couldn't load library",

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Envolver el texto en un contenedor",
"link": {
"edit": "Editar enlace",
"editEmbed": "Editar enlace e incrustar",
"create": "Crear enlace",
"label": "Enlace"
"createEmbed": "Crear enlace e incrustar",
"label": "Enlace",
"labelEmbed": "Enlazar e incrustar",
"empty": "No se ha establecido un enlace"
},
"lineEditor": {
"edit": "Editar línea",
@ -124,9 +128,9 @@
},
"statusPublished": "Publicado",
"sidebarLock": "Mantener barra lateral abierta",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"eyeDropper": ""
"selectAllElementsInFrame": "Seleccionar todos los elementos en el marco",
"removeAllElementsFromFrame": "Eliminar todos los elementos del marco",
"eyeDropper": "Seleccionar un color del lienzo"
},
"library": {
"noItems": "No hay elementos añadidos todavía...",
@ -160,13 +164,16 @@
"darkMode": "Modo oscuro",
"lightMode": "Modo claro",
"zenMode": "Modo Zen",
"objectsSnapMode": "Ajustar a los objetos",
"exitZenMode": "Salir del modo Zen",
"cancel": "Cancelar",
"clear": "Borrar",
"remove": "Eliminar",
"embed": "",
"publishLibrary": "Publicar",
"submit": "Enviar",
"confirm": "Confirmar"
"confirm": "Confirmar",
"embeddableInteractionButton": "Pulsa para interactuar"
},
"alerts": {
"clearReset": "Esto limpiará todo el lienzo. Estás seguro?",
@ -196,16 +203,21 @@
"imageInsertError": "No se pudo insertar la imagen. Inténtelo de nuevo más tarde...",
"fileTooBig": "Archivo demasiado grande. El tamaño máximo permitido es {{maxSize}}.",
"svgImageInsertError": "No se pudo insertar la imagen SVG. El código SVG parece inválido.",
"failedToFetchImage": "",
"invalidSVGString": "SVG no válido.",
"cannotResolveCollabServer": "No se pudo conectar al servidor colaborador. Por favor, vuelva a cargar la página y vuelva a intentarlo.",
"importLibraryError": "No se pudo cargar la librería",
"collabSaveFailed": "No se pudo guardar en la base de datos del backend. Si los problemas persisten, debería guardar su archivo localmente para asegurarse de que no pierde su trabajo.",
"collabSaveFailed_sizeExceeded": "No se pudo guardar en la base de datos del backend, el lienzo parece ser demasiado grande. Debería guardar el archivo localmente para asegurarse de que no pierde su trabajo.",
"brave_measure_text_error": {
"line1": "",
"line2": "",
"line3": "",
"line1": "Parece que estás usando el navegador Brave con el ajuste <bold>Forzar el bloqueo de huellas digitales</bold> habilitado.",
"line2": "Esto podría resultar en errores en los <bold>Elementos de Texto</bold> en tus dibujos.",
"line3": "Recomendamos fuertemente deshabilitar esta configuración. Puedes seguir <link>estos pasos</link> sobre cómo hacerlo.",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,8 +236,10 @@
"link": "Añadir/Actualizar enlace para una forma seleccionada",
"eraser": "Borrar",
"frame": "",
"embeddable": "Incrustar Web",
"laser": "Puntero láser",
"hand": "Mano (herramienta de panoramización)",
"extraTools": ""
"extraTools": "Más herramientas"
},
"headings": {
"canvasActions": "Acciones del lienzo",
@ -237,6 +251,7 @@
"linearElement": "Haz clic para dibujar múltiples puntos, arrastrar para solo una línea",
"freeDraw": "Haz clic y arrastra, suelta al terminar",
"text": "Consejo: también puedes añadir texto haciendo doble clic en cualquier lugar con la herramienta de selección",
"embeddable": "Haga clic y arrastre para crear un sitio web incrustado",
"text_selected": "Doble clic o pulse ENTER para editar el texto",
"text_editing": "Pulse Escape o Ctrl/Cmd + ENTER para terminar de editar",
"linearElementMulti": "Haz clic en el último punto o presiona Escape o Enter para finalizar",
@ -252,7 +267,8 @@
"bindTextToElement": "Presione Entrar para agregar",
"deepBoxSelect": "Mantén CtrlOrCmd para seleccionar en profundidad, y para evitar arrastrar",
"eraserRevert": "Mantenga pulsado Alt para revertir los elementos marcados para su eliminación",
"firefox_clipboard_write": "Esta característica puede ser habilitada estableciendo la bandera \"dom.events.asyncClipboard.clipboardItem\" a \"true\". Para cambiar las banderas del navegador en Firefox, visite la página \"about:config\"."
"firefox_clipboard_write": "Esta característica puede ser habilitada estableciendo la bandera \"dom.events.asyncClipboard.clipboardItem\" a \"true\". Para cambiar las banderas del navegador en Firefox, visite la página \"about:config\".",
"disableSnapping": "Mantén pulsado CtrlOrCmd para desactivar el ajuste"
},
"canvasError": {
"cannotShowPreview": "No se puede mostrar la vista previa",
@ -360,27 +376,27 @@
"removeItemsFromLib": "Eliminar elementos seleccionados de la biblioteca"
},
"imageExportDialog": {
"header": "",
"header": "Exportar imagen",
"label": {
"withBackground": "",
"onlySelected": "",
"darkMode": "",
"embedScene": "",
"scale": "",
"padding": ""
"withBackground": "Fondo",
"onlySelected": "Sólo seleccionados",
"darkMode": "Modo oscuro",
"embedScene": "Incrustar escena",
"scale": "Escalar",
"padding": "Espaciado"
},
"tooltip": {
"embedScene": ""
},
"title": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "Exportar a PNG",
"exportToSvg": "Exportar a SVG",
"copyPngToClipboard": "Copiar PNG al portapapeles"
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": "Copiar al portapapeles"
}
},
"encrypted": {
@ -411,24 +427,26 @@
"fileSavedToFilename": "Guardado en {filename}",
"canvas": "lienzo",
"selection": "selección",
"pasteAsSingleElement": "Usa {{shortcut}} para pegar como un solo elemento,\no pegar en un editor de texto existente"
"pasteAsSingleElement": "Usa {{shortcut}} para pegar como un solo elemento,\no pegar en un editor de texto existente",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Transparente",
"black": "",
"white": "",
"red": "",
"pink": "",
"grape": "",
"violet": "",
"gray": "",
"blue": "",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"bronze": ""
"black": "Negro",
"white": "Blanco",
"red": "Rojo",
"pink": "Rosa",
"grape": "Uva",
"violet": "Violeta",
"gray": "Gris",
"blue": "Azul",
"cyan": "Cian",
"teal": "Turquesa",
"green": "Verde",
"yellow": "Amarillo",
"orange": "Naranja",
"bronze": "Bronce"
},
"welcomeScreen": {
"app": {
@ -444,10 +462,41 @@
}
},
"colorPicker": {
"mostUsedCustomColors": "",
"colors": "",
"mostUsedCustomColors": "Colores personalizados más utilizados",
"colors": "Colores",
"shades": "",
"hexCode": "",
"hexCode": "Código Hexadecimal",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Exportar como imagen",
"button": "Exportar como imagen",
"description": ""
},
"saveToDisk": {
"title": "Guardar en el disco",
"button": "Guardar en el disco",
"description": "Exporta los datos de la escena a un archivo desde el cual podrás importar más tarde."
},
"excalidrawPlus": {
"title": "",
"button": "Exportar a Excalidraw+",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "Cargar desde un archivo",
"button": "Cargar desde un archivo",
"description": ""
},
"shareableLink": {
"title": "Cargar desde un enlace",
"button": "Reemplazar mi contenido",
"description": "Cargar un dibujo externo <bold>reemplazará tu contenido existente</bold>.<br></br>Puedes primero hacer una copia de seguridad de tu dibujo usando una de las opciones de abajo."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Bilatu testua edukiontzi batean",
"link": {
"edit": "Editatu esteka",
"editEmbed": "Editatu esteka eta kapsulatu",
"create": "Sortu esteka",
"label": "Esteka"
"createEmbed": "Sortu esteka eta kapsulatu",
"label": "Esteka",
"labelEmbed": "Esteka eta kapsula",
"empty": "Ez da estekarik ezarri"
},
"lineEditor": {
"edit": "Editatu lerroa",
@ -160,13 +164,16 @@
"darkMode": "Modu iluna",
"lightMode": "Modu argia",
"zenMode": "Zen modua",
"objectsSnapMode": "Atxiki objektuei",
"exitZenMode": "Irten Zen modutik",
"cancel": "Utzi",
"clear": "Garbitu",
"remove": "Kendu",
"embed": "Aldatu kapsulatzea",
"publishLibrary": "Argitaratu",
"submit": "Bidali",
"confirm": "Bai"
"confirm": "Bai",
"embeddableInteractionButton": "Egin klik elkar eragiteko"
},
"alerts": {
"clearReset": "Honek oihal osoa garbituko du. Ziur zaude?",
@ -196,6 +203,7 @@
"imageInsertError": "Ezin izan da irudia txertatu. Saiatu berriro geroago...",
"fileTooBig": "Fitxategia handiegia da. Onartutako gehienezko tamaina {{maxSize}} da.",
"svgImageInsertError": "Ezin izan da SVG irudia txertatu. SVG markak baliogabea dirudi.",
"failedToFetchImage": "",
"invalidSVGString": "SVG baliogabea.",
"cannotResolveCollabServer": "Ezin izan da elkarlaneko zerbitzarira konektatu. Mesedez, berriro kargatu orria eta saiatu berriro.",
"importLibraryError": "Ezin izan da liburutegia kargatu",
@ -206,6 +214,10 @@
"line2": "Honek zure marrazkietako <bold>Testu-elementuak</bold> hautsi ditzake.",
"line3": "Ezarpen hau desgaitzea gomendatzen dugu. <link>urrats hauek</link> jarrai ditzakezu hori nola egin jakiteko.",
"line4": "Ezarpen hau desgaituz gero, testu-elementuen bistaratzea konpontzen ez bada, ireki <issueLink>arazo</issueLink> gure GitHub-en edo idatzi iezaguzu <discordLink>Discord</discordLink> helbidera"
},
"libraryElementTypeError": {
"embeddable": "Kapsulatutako elementuak ezin dira liburutegira gehitu.",
"image": "Laster egongo da irudiak liburutegian gehitzeko laguntza!"
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Gehitu / Eguneratu esteka hautatutako forma baterako",
"eraser": "Borragoma",
"frame": "Marko tresna",
"embeddable": "Web kapsulatzea",
"laser": "Laser punteroa",
"hand": "Eskua (panoratze tresna)",
"extraTools": "Tresna gehiago"
},
@ -237,6 +251,7 @@
"linearElement": "Egin klik hainbat puntu hasteko, arrastatu lerro bakarrerako",
"freeDraw": "Egin klik eta arrastatu, askatu amaitutakoan",
"text": "Aholkua: testua gehitu dezakezu edozein lekutan klik bikoitza eginez hautapen tresnarekin",
"embeddable": "Egin klik eta arrastatu webgunea kapsulatzeko",
"text_selected": "Egin klik bikoitza edo sakatu SARTU testua editatzeko",
"text_editing": "Sakatu Esc edo Ctrl+SARTU editatzen amaitzeko",
"linearElementMulti": "Egin klik azken puntuan edo sakatu Esc edo Sartu amaitzeko",
@ -252,7 +267,8 @@
"bindTextToElement": "Sakatu Sartu testua gehitzeko",
"deepBoxSelect": "Eutsi Ctrl edo Cmd sakatuta aukeraketa sakona egiteko eta arrastatzea saihesteko",
"eraserRevert": "Eduki Alt sakatuta ezabatzeko markatutako elementuak leheneratzeko",
"firefox_clipboard_write": "Ezaugarri hau \"dom.events.asyncClipboard.clipboardItem\" marka \"true\" gisa ezarrita gaitu daiteke. Firefox-en arakatzailearen banderak aldatzeko, bisitatu \"about:config\" orrialdera."
"firefox_clipboard_write": "Ezaugarri hau \"dom.events.asyncClipboard.clipboardItem\" marka \"true\" gisa ezarrita gaitu daiteke. Firefox-en arakatzailearen banderak aldatzeko, bisitatu \"about:config\" orrialdera.",
"disableSnapping": "Eduki sakatuta Ctrl edo Cmd tekla atxikipena desgaitzeko"
},
"canvasError": {
"cannotShowPreview": "Ezin da oihala aurreikusi",
@ -411,7 +427,9 @@
"fileSavedToFilename": "{filename}-n gorde da",
"canvas": "oihala",
"selection": "hautapena",
"pasteAsSingleElement": "Erabili {{shortcut}} elementu bakar gisa itsasteko,\nedo itsatsi lehendik dagoen testu-editore batean"
"pasteAsSingleElement": "Erabili {{shortcut}} elementu bakar gisa itsasteko,\nedo itsatsi lehendik dagoen testu-editore batean",
"unableToEmbed": "Url hau txertatzea ez da une honetan onartzen. Sortu issue bat GitHub-en Urla zerrenda zurian sartzea eskatzeko",
"unrecognizedLinkFormat": "Kapsulatu duzun esteka ez dator bat espero den formatuarekin. Mesedez, saiatu iturburu-guneak emandako 'kapsulatu' katea itsasten"
},
"colors": {
"transparent": "Gardena",
@ -449,5 +467,36 @@
"shades": "Ñabardurak",
"hexCode": "Hez kodea",
"noShades": "Kolore honetarako ez dago ñabardurarik eskuragarri"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Esportatu irudi gisa",
"button": "Esportatu irudi gisa",
"description": "Esportatu eszenaren datuak geroago inportatu ahal izango duzun irudi gisa."
},
"saveToDisk": {
"title": "Gorde diskoan",
"button": "Gorde diskoan",
"description": "Esportatu eszenaren datuak geroago inportatu ahal izango duzun fitxategi batan."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Esportatu Excalidraw+ra",
"description": "Gorde eszena zure Excalidraw+ laneko areara."
}
},
"modal": {
"loadFromFile": {
"title": "Fitxategitik kargatu",
"button": "Fitxategitik kargatu",
"description": "Fitxategi batetik kargatzeak <bold>lehendik duzun edukia ordezkatuko du</bold>.<br></br>Lehenengo marrazkiaren babeskopia egin dezakezu beheko aukeretako bat erabiliz."
},
"shareableLink": {
"title": "Estekatik kargatu",
"button": "Ordeztu nire edukia",
"description": "Kanpoko irudi bat kargatzeak <bold>lehendik duzun edukia ordezkatuko du</bold>.<br></br>. Zure marrazkiaren babeskopia egin dezakezu lehenik beheko aukeretako bat erabiliz."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "متن را در یک جایگاه بپیچید",
"link": {
"edit": "ویرایش لینک",
"editEmbed": "",
"create": "ایجاد پیوند",
"label": "لینک"
"createEmbed": "",
"label": "لینک",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "ویرایش لینک",
@ -126,7 +130,7 @@
"sidebarLock": "باز نگه داشتن سایدبار",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"eyeDropper": ""
"eyeDropper": "انتخاب رنگ از کرباس"
},
"library": {
"noItems": "آیتمی به اینجا اضافه نشده...",
@ -160,13 +164,16 @@
"darkMode": "حالت تیره",
"lightMode": "حالت روشن",
"zenMode": "حالت ذن",
"objectsSnapMode": "",
"exitZenMode": "خروج از حالت تمرکز",
"cancel": "لغو",
"clear": "پاک کردن",
"remove": "پاک کردن",
"embed": "",
"publishLibrary": "انتشار",
"submit": "ارسال",
"confirm": "تایید"
"confirm": "تایید",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "این کار کل صفحه را پاک میکند. آیا مطمئنید؟",
@ -196,6 +203,7 @@
"imageInsertError": "عکس ارسال نشد. بعداً دوباره تلاش کنید...",
"fileTooBig": "فایل خیلی بزرگ است حداکثر اندازه مجاز {{maxSize}}.",
"svgImageInsertError": "تصویر SVG وارد نشد. نشانه گذاری SVG نامعتبر به نظر می رسد.",
"failedToFetchImage": "",
"invalidSVGString": "SVG نادرست.",
"cannotResolveCollabServer": "به سرور collab متصل نشد. لطفا صفحه را مجددا بارگذاری کنید و دوباره تلاش کنید.",
"importLibraryError": "داده‌ها بارگذاری نشدند",
@ -206,6 +214,10 @@
"line2": "این می تواند منجر به شکستن <bold>عناصر متن</bold> در نقاشی های شما شود.",
"line3": "اکیداً توصیه می کنیم این تنظیم را غیرفعال کنید. برای نحوه انجام این کار می‌توانید <link>این مراحل</link> را دنبال کنید.",
"line4": "اگر غیرفعال کردن این تنظیم نمایش عناصر متنی را برطرف نکرد، لطفاً یک <issueLink>مشکل</issueLink> را در GitHub ما باز کنید یا برای ما در <discordLink>Discord</discordLink> بنویسید."
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,8 +236,10 @@
"link": "افزودن/به‌روزرسانی پیوند برای شکل انتخابی",
"eraser": "پاک کن",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "دست (ابزار پانینگ)",
"extraTools": ""
"extraTools": "ابزارهای بیشتر"
},
"headings": {
"canvasActions": "عملیات روی بوم",
@ -237,6 +251,7 @@
"linearElement": "برای چند نقطه کلیک و برای یک خط بکشید",
"freeDraw": "کلیک کنید و بکشید و وقتی کار تمام شد رها کنید",
"text": "نکته: با برنامه انتخاب شده شما میتوانید با دوبار کلیک کردن هرکجا میخواید متن اظاف کنید",
"embeddable": "",
"text_selected": "دوبار کلیک کنید یا Enter را فشار دهید تا نقاط را ویرایش کنید",
"text_editing": "Escape یا CtrlOrCmd+ENTER را فشار دهید تا ویرایش تمام شود",
"linearElementMulti": "روی آخرین نقطه کلیک کنید یا کلید ESC را بزنید یا کلید Enter را بزنید برای اتمام کار",
@ -252,7 +267,8 @@
"bindTextToElement": "برای افزودن اینتر را بزنید",
"deepBoxSelect": "CtrlOrCmd را برای انتخاب عمیق و جلوگیری از کشیدن نگه دارید",
"eraserRevert": "Alt را نگه دارید تا عناصر علامت گذاری شده برای حذف برگردند",
"firefox_clipboard_write": "احتمالاً می‌توان این ویژگی را با تنظیم پرچم «dom.events.asyncClipboard.clipboardItem» روی «true» فعال کرد. برای تغییر پرچم های مرورگر در فایرفاکس، از صفحه \"about:config\" دیدن کنید."
"firefox_clipboard_write": "احتمالاً می‌توان این ویژگی را با تنظیم پرچم «dom.events.asyncClipboard.clipboardItem» روی «true» فعال کرد. برای تغییر پرچم های مرورگر در فایرفاکس، از صفحه \"about:config\" دیدن کنید.",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "پیش نمایش نشان داده نمی شود",
@ -362,7 +378,7 @@
"imageExportDialog": {
"header": "",
"label": {
"withBackground": "",
"withBackground": "پس زمینه",
"onlySelected": "",
"darkMode": "",
"embedScene": "",
@ -411,24 +427,26 @@
"fileSavedToFilename": "ذخیره در {filename}",
"canvas": "بوم",
"selection": "انتخاب",
"pasteAsSingleElement": "از {{shortcut}} برای چسباندن به عنوان یک عنصر استفاده کنید،\nیا در یک ویرایشگر متن موجود جایگذاری کنید"
"pasteAsSingleElement": "از {{shortcut}} برای چسباندن به عنوان یک عنصر استفاده کنید،\nیا در یک ویرایشگر متن موجود جایگذاری کنید",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "شفاف",
"black": "",
"white": "",
"red": "",
"pink": "",
"grape": "",
"violet": "",
"gray": "",
"blue": "",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"bronze": ""
"black": "سیاه",
"white": "سفید",
"red": "قرمز",
"pink": "صورتی",
"grape": "یاقوتی",
"violet": "بنفش",
"gray": "خاکستری",
"blue": "آبی",
"cyan": "فیروزه‌ای",
"teal": "سبزآبی",
"green": "سبز",
"yellow": "زرد",
"orange": "نارنجی",
"bronze": "برنزی"
},
"welcomeScreen": {
"app": {
@ -445,9 +463,40 @@
},
"colorPicker": {
"mostUsedCustomColors": "",
"colors": "",
"shades": "",
"hexCode": "",
"colors": "رنگ‌ها",
"shades": "جلوه‌ها",
"hexCode": "کدِ هگز",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "ذخیره در دیسک",
"button": "ذخیره در دیسک",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "بارگذاری از فایل",
"button": "بارگذاری از فایل",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "Muokkaa linkkiä",
"editEmbed": "",
"create": "Luo linkki",
"label": "Linkki"
"createEmbed": "",
"label": "Linkki",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Muokkaa riviä",
@ -160,13 +164,16 @@
"darkMode": "Tumma tila",
"lightMode": "Vaalea tila",
"zenMode": "Zen-tila",
"objectsSnapMode": "",
"exitZenMode": "Poistu zen-tilasta",
"cancel": "Peruuta",
"clear": "Pyyhi",
"remove": "Poista",
"embed": "",
"publishLibrary": "Julkaise",
"submit": "Lähetä",
"confirm": "Vahvista"
"confirm": "Vahvista",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Tämä tyhjentää koko piirtoalueen. Jatketaanko?",
@ -196,6 +203,7 @@
"imageInsertError": "Kuvan lisääminen epäonnistui. Yritä myöhemmin uudelleen...",
"fileTooBig": "Tiedosto on liian suuri. Suurin sallittu koko on {{maxSize}}.",
"svgImageInsertError": "SVG- kuvaa ei voitu lisätä. Tiedoston SVG-sisältö näyttää virheelliseltä.",
"failedToFetchImage": "",
"invalidSVGString": "Virheellinen SVG.",
"cannotResolveCollabServer": "Yhteyden muodostaminen collab-palvelimeen epäonnistui. Virkistä sivu ja yritä uudelleen.",
"importLibraryError": "Kokoelman lataaminen epäonnistui",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Lisää/päivitä linkki valitulle muodolle",
"eraser": "Poistotyökalu",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "Käsi (panning-työkalu)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Klikkaa piirtääksesi useampi piste, raahaa piirtääksesi yksittäinen viiva",
"freeDraw": "Paina ja raahaa, päästä irti kun olet valmis",
"text": "Vinkki: voit myös lisätä tekstiä kaksoisnapsauttamalla mihin tahansa valintatyökalulla",
"embeddable": "",
"text_selected": "Kaksoisnapsauta tai paina ENTER muokataksesi tekstiä",
"text_editing": "Paina Escape tai CtrlOrCmd+ENTER lopettaaksesi muokkaamisen",
"linearElementMulti": "Lopeta klikkaamalla viimeistä pistettä, painamalla Escape- tai Enter-näppäintä",
@ -252,7 +267,8 @@
"bindTextToElement": "Lisää tekstiä painamalla enter",
"deepBoxSelect": "Käytä syvävalintaa ja estä raahaus painamalla CtrlOrCmd",
"eraserRevert": "Pidä Alt alaspainettuna, kumotaksesi merkittyjen elementtien poistamisen",
"firefox_clipboard_write": "Tämä ominaisuus voidaan todennäköisesti ottaa käyttöön asettamalla \"dom.events.asyncClipboard.clipboardItem\" kohta \"true\":ksi. Vaihtaaksesi selaimen kohdan Firefoxissa, käy \"about:config\" sivulla."
"firefox_clipboard_write": "Tämä ominaisuus voidaan todennäköisesti ottaa käyttöön asettamalla \"dom.events.asyncClipboard.clipboardItem\" kohta \"true\":ksi. Vaihtaaksesi selaimen kohdan Firefoxissa, käy \"about:config\" sivulla.",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Esikatselua ei voitu näyttää",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Tallennettiin kohteeseen {filename}",
"canvas": "piirtoalue",
"selection": "valinta",
"pasteAsSingleElement": "Käytä {{shortcut}} liittääksesi yhtenä elementtinä,\ntai liittääksesi olemassa olevaan tekstieditoriin"
"pasteAsSingleElement": "Käytä {{shortcut}} liittääksesi yhtenä elementtinä,\ntai liittääksesi olemassa olevaan tekstieditoriin",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Läpinäkyvä",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -50,7 +50,7 @@
"veryLarge": "Très grande",
"solid": "Solide",
"hachure": "Hachures",
"zigzag": "",
"zigzag": "Zigzag",
"crossHatch": "Hachures croisées",
"thin": "Fine",
"bold": "Épaisse",
@ -109,8 +109,12 @@
"createContainerFromText": "Encadrer le texte dans un conteneur",
"link": {
"edit": "Modifier le lien",
"editEmbed": "Éditer le lien & intégrer",
"create": "Ajouter un lien",
"label": "Lien"
"createEmbed": "Créer un lien & intégrer",
"label": "Lien",
"labelEmbed": "",
"empty": "Aucun lien défini"
},
"lineEditor": {
"edit": "Modifier la ligne",
@ -124,8 +128,8 @@
},
"statusPublished": "Publié",
"sidebarLock": "Maintenir la barre latérale ouverte",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"selectAllElementsInFrame": "Sélectionner tous les éléments du cadre",
"removeAllElementsFromFrame": "Supprimer tous les éléments du cadre",
"eyeDropper": ""
},
"library": {
@ -160,13 +164,16 @@
"darkMode": "Mode sombre",
"lightMode": "Mode clair",
"zenMode": "Mode zen",
"objectsSnapMode": "Aimanter aux objets",
"exitZenMode": "Quitter le mode zen",
"cancel": "Annuler",
"clear": "Effacer",
"remove": "Supprimer",
"embed": "Activer/Désactiver l'intégration",
"publishLibrary": "Publier",
"submit": "Envoyer",
"confirm": "Confirmer"
"confirm": "Confirmer",
"embeddableInteractionButton": "Cliquez pour interagir"
},
"alerts": {
"clearReset": "L'intégralité du canevas va être effacée. Êtes-vous sûr ?",
@ -196,16 +203,21 @@
"imageInsertError": "Impossible d'insérer l'image. Réessayez plus tard...",
"fileTooBig": "Le fichier est trop volumineux. La taille maximale autorisée est de {{maxSize}}.",
"svgImageInsertError": "Impossible d'insérer l'image SVG. Le balisage SVG semble invalide.",
"failedToFetchImage": "",
"invalidSVGString": "SVG invalide.",
"cannotResolveCollabServer": "Impossible de se connecter au serveur collaboratif. Veuillez recharger la page et réessayer.",
"importLibraryError": "Impossible de charger la bibliothèque",
"collabSaveFailed": "Impossible d'enregistrer dans la base de données en arrière-plan. Si des problèmes persistent, vous devriez enregistrer votre fichier localement pour vous assurer de ne pas perdre votre travail.",
"collabSaveFailed_sizeExceeded": "Impossible d'enregistrer dans la base de données en arrière-plan, le tableau semble trop grand. Vous devriez enregistrer le fichier localement pour vous assurer de ne pas perdre votre travail.",
"brave_measure_text_error": {
"line1": "",
"line2": "",
"line3": "",
"line4": ""
"line1": "On dirait que vous utilisez le navigateur Brave avec l'option <bold>Bloquer agressivement le fichage</bold> activée.",
"line2": "Cela pourrait entraîner des problèmes avec les <bold>Éléments Textuels</bold> dans vos dessins.",
"line3": "Nous recommandons fortement de désactiver cette option. Vous pouvez suivre <link>ces instructions</link> pour savoir comment faire.",
"line4": "Si désactiver cette option de résout pas le problème d'affichage des éléments textuels, veuillez ouvrir un <issueLink>ticket</issueLink> sur notre GitHub, ou écrivez-nous sur notre <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "Les éléments intégrés ne peuvent pas être ajoutés à la librairie.",
"image": "Le support pour l'ajout d'images à la librairie arrive bientôt !"
}
},
"toolBar": {
@ -223,9 +235,11 @@
"penMode": "Mode stylo - évite le toucher",
"link": "Ajouter/mettre à jour le lien pour une forme sélectionnée",
"eraser": "Gomme",
"frame": "",
"frame": "Outil de cadre",
"embeddable": "Intégration Web",
"laser": "",
"hand": "Mains (outil de déplacement de la vue)",
"extraTools": ""
"extraTools": "Plus d'outils"
},
"headings": {
"canvasActions": "Actions du canevas",
@ -237,6 +251,7 @@
"linearElement": "Cliquez pour démarrer plusieurs points, faites glisser pour une seule ligne",
"freeDraw": "Cliquez et faites glissez, relâchez quand vous avez terminé",
"text": "Astuce : vous pouvez aussi ajouter du texte en double-cliquant n'importe où avec l'outil de sélection",
"embeddable": "Cliquez et glissez pour créer une intégration de site web",
"text_selected": "Double-cliquez ou appuyez sur ENTRÉE pour modifier le texte",
"text_editing": "Appuyez sur ÉCHAP ou Ctrl/Cmd+ENTRÉE pour terminer l'édition",
"linearElementMulti": "Cliquez sur le dernier point ou appuyez sur Échap ou Entrée pour terminer",
@ -252,7 +267,8 @@
"bindTextToElement": "Appuyer sur Entrée pour ajouter du texte",
"deepBoxSelect": "Maintenir Ctrl ou Cmd pour sélectionner dans les groupes et empêcher le déplacement",
"eraserRevert": "Maintenez Alt enfoncé pour annuler les éléments marqués pour suppression",
"firefox_clipboard_write": "Cette fonctionnalité devrait pouvoir être activée en définissant l'option \"dom.events.asyncClipboard.clipboard.clipboardItem\" à \"true\". Pour modifier les paramètres du navigateur dans Firefox, visitez la page \"about:config\"."
"firefox_clipboard_write": "Cette fonctionnalité devrait pouvoir être activée en définissant l'option \"dom.events.asyncClipboard.clipboard.clipboardItem\" à \"true\". Pour modifier les paramètres du navigateur dans Firefox, visitez la page \"about:config\".",
"disableSnapping": "Maintenez CtrlOuCmd pour désactiver l'aimantation"
},
"canvasError": {
"cannotShowPreview": "Impossible dafficher laperçu",
@ -360,27 +376,27 @@
"removeItemsFromLib": "Enlever les éléments sélectionnés de la bibliothèque"
},
"imageExportDialog": {
"header": "",
"header": "Exporter l'image",
"label": {
"withBackground": "",
"onlySelected": "",
"darkMode": "",
"embedScene": "",
"scale": "",
"withBackground": "Fond",
"onlySelected": "Uniquement la sélection",
"darkMode": "Mode sombre",
"embedScene": "Intégrer la scène",
"scale": "Échelle",
"padding": ""
},
"tooltip": {
"embedScene": ""
"embedScene": "Les données de la scène seront sauvegardées dans le fichier PNG/SVG exporté afin que la scène puisse être restaurée depuis celui-ci.\nCela augmentera la taille du fichier exporté."
},
"title": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "Exporter en PNG",
"exportToSvg": "Exporter en SVG",
"copyPngToClipboard": "Copier le PNG dans le presse-papier"
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": "Copier dans le presse-papier"
}
},
"encrypted": {
@ -411,24 +427,26 @@
"fileSavedToFilename": "Enregistré sous {filename}",
"canvas": "canevas",
"selection": "sélection",
"pasteAsSingleElement": "Utiliser {{shortcut}} pour coller comme un seul élément,\nou coller dans un éditeur de texte existant"
"pasteAsSingleElement": "Utiliser {{shortcut}} pour coller comme un seul élément,\nou coller dans un éditeur de texte existant",
"unableToEmbed": "Intégrer cet URL n'est actuellement pas autorisé. Ouvrez un ticket sur GitHub pour demander son ajout à la liste blanche",
"unrecognizedLinkFormat": "Le lien que vous avez intégré ne correspond pas au format attendu. Veuillez essayer de coller la chaîne d'intégration fournie par le site source"
},
"colors": {
"transparent": "Transparent",
"black": "",
"white": "",
"red": "",
"pink": "",
"grape": "",
"violet": "",
"gray": "",
"blue": "",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"bronze": ""
"black": "Noir",
"white": "Blanc",
"red": "Rouge",
"pink": "Rose",
"grape": "Mauve",
"violet": "Violet",
"gray": "Gris",
"blue": "Bleu",
"cyan": "Cyan",
"teal": "Turquoise",
"green": "Vert",
"yellow": "Jaune",
"orange": "Orange",
"bronze": "Bronze"
},
"welcomeScreen": {
"app": {
@ -444,10 +462,41 @@
}
},
"colorPicker": {
"mostUsedCustomColors": "",
"colors": "",
"shades": "",
"hexCode": "",
"noShades": ""
"mostUsedCustomColors": "Couleurs personnalisées les plus fréquemment utilisées",
"colors": "Couleurs",
"shades": "Nuances",
"hexCode": "Code hex",
"noShades": "Aucune nuance disponible pour cette couleur"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Exporter en image",
"button": "Exporter en image",
"description": "Exporter les données de la scène comme une image que vous pourrez importer ultérieurement."
},
"saveToDisk": {
"title": "Sauvegarder sur le disque",
"button": "Sauvegarder sur le disque",
"description": "Exporter les données de la scène comme un fichier que vous pourrez importer ultérieurement."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Exporter vers Excalidraw+",
"description": "Enregistrer la scène dans votre espace de travail Excalidraw+."
}
},
"modal": {
"loadFromFile": {
"title": "Charger depuis un fichier",
"button": "Charger depuis un fichier",
"description": "Charger depuis un fichier va <bold>remplacer votre contenu existant</bold>.<br></br>Vous pouvez d'abord sauvegarder votre dessin en utilisant l'une des options ci-dessous."
},
"shareableLink": {
"title": "Charger depuis un lien",
"button": "Remplacer mon contenu",
"description": "Charger un dessin externe va <bold>remplacer votre contenu existant</bold>.<br></br>Vous pouvez d'abord sauvegarder votre dessin en utilisant l'une des options ci-dessous."
}
}
}
}

View File

@ -50,7 +50,7 @@
"veryLarge": "Moi grande",
"solid": "Sólido",
"hachure": "Folleto",
"zigzag": "",
"zigzag": "Zigzag",
"crossHatch": "Raiado transversal",
"thin": "Estreito",
"bold": "Groso",
@ -109,8 +109,12 @@
"createContainerFromText": "Envolver o texto nun contedor",
"link": {
"edit": "Editar ligazón",
"editEmbed": "",
"create": "Crear ligazón",
"label": "Ligazón"
"createEmbed": "",
"label": "Ligazón",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Editar liña",
@ -160,13 +164,16 @@
"darkMode": "Modo escuro",
"lightMode": "Modo claro",
"zenMode": "Modo zen",
"objectsSnapMode": "",
"exitZenMode": "Saír do modo zen",
"cancel": "Cancelar",
"clear": "Limpar",
"remove": "Eliminar",
"embed": "",
"publishLibrary": "Publicar",
"submit": "Enviar",
"confirm": "Confirmar"
"confirm": "Confirmar",
"embeddableInteractionButton": "Faga clic para interactuar"
},
"alerts": {
"clearReset": "Isto limpará todo o lenzo. Estás seguro?",
@ -196,6 +203,7 @@
"imageInsertError": "Non se puido inserir a imaxe. Probe de novo máis tarde...",
"fileTooBig": "O ficheiro é demasiado grande. O tamaño máximo permitido é {{maxSize}}.",
"svgImageInsertError": "Non se puido inserir como imaxe SVG. O marcado SVG semella inválido.",
"failedToFetchImage": "",
"invalidSVGString": "SVG inválido.",
"cannotResolveCollabServer": "Non se puido conectar ao servidor de colaboración. Por favor recargue a páxina e probe de novo.",
"importLibraryError": "Non se puido cargar a biblioteca",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,8 +236,10 @@
"link": "Engadir/ Actualizar ligazón para a forma seleccionada",
"eraser": "Goma de borrar",
"frame": "",
"embeddable": "Inserir na web",
"laser": "Punteiro láser",
"hand": "Man (ferramenta de desprazamento)",
"extraTools": ""
"extraTools": "Máis ferramentas"
},
"headings": {
"canvasActions": "Accións do lenzo",
@ -237,6 +251,7 @@
"linearElement": "Faga clic para iniciar varios puntos, arrastre para unha sola liña",
"freeDraw": "Fai clic e arrastra, solta cando acabes",
"text": "Consello: tamén podes engadir texto facendo dobre-clic en calquera lugar coa ferramenta de selección",
"embeddable": "Faga clic e arrastre para crear un sitio web embebido",
"text_selected": "Dobre-clic ou prema ENTER para editar o texto",
"text_editing": "Prema Escape ou CtrlOrCmd+ENTER para finalizar a edición",
"linearElementMulti": "Faga clic no último punto ou prema Escape ou Enter para rematar",
@ -252,7 +267,8 @@
"bindTextToElement": "Prema a tecla enter para engadir texto",
"deepBoxSelect": "Manteña pulsado CtrlOrCmd para seleccionar en profundidade e evitar o arrastre",
"eraserRevert": "Manteña pulsado Alt para reverter os elementos marcados para a súa eliminación",
"firefox_clipboard_write": "Esta función pódese activar establecendo a opción \"dom.events.asyncClipboard.clipboardItem\" a \"true\". Para cambiar as opcións do navegador en Firefox, visita a páxina \"about:config\"."
"firefox_clipboard_write": "Esta función pódese activar establecendo a opción \"dom.events.asyncClipboard.clipboardItem\" a \"true\". Para cambiar as opcións do navegador en Firefox, visita a páxina \"about:config\".",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Non se pode mostrar a vista previa",
@ -360,11 +376,11 @@
"removeItemsFromLib": "Eliminar os elementos seleccionados da biblioteca"
},
"imageExportDialog": {
"header": "",
"header": "Exportar imaxe",
"label": {
"withBackground": "",
"withBackground": "Fondo",
"onlySelected": "",
"darkMode": "",
"darkMode": "Modo escuro",
"embedScene": "",
"scale": "",
"padding": ""
@ -373,14 +389,14 @@
"embedScene": ""
},
"title": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "Exportar a PNG",
"exportToSvg": "Exportar a SVG",
"copyPngToClipboard": "Copiar PNG ao portapapeis"
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": "Copiar ao portapapeis"
}
},
"encrypted": {
@ -411,24 +427,26 @@
"fileSavedToFilename": "Gardado en {filename}",
"canvas": "lenzo",
"selection": "selección",
"pasteAsSingleElement": "Usa {{shortcut}} para pegar como un único elemento\nou pega nun editor de texto existente"
"pasteAsSingleElement": "Usa {{shortcut}} para pegar como un único elemento\nou pega nun editor de texto existente",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Transparente",
"black": "",
"white": "",
"red": "",
"pink": "",
"grape": "",
"violet": "",
"gray": "",
"blue": "",
"black": "Negro",
"white": "Branco",
"red": "Vermello",
"pink": "Rosa",
"grape": "Uva",
"violet": "Violeta",
"gray": "Gris",
"blue": "Azul",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"bronze": ""
"green": "Verde",
"yellow": "Marelo",
"orange": "Laranxa",
"bronze": "Bronce"
},
"welcomeScreen": {
"app": {
@ -445,9 +463,40 @@
},
"colorPicker": {
"mostUsedCustomColors": "",
"colors": "",
"colors": "Cores",
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Exportar como imaxe",
"button": "Exportar como imaxe",
"description": ""
},
"saveToDisk": {
"title": "Gardar no disco",
"button": "Gardar no disco",
"description": ""
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Exportar a Excalidraw+",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "Cargar dende arquivo",
"button": "Cargar dende arquivo",
"description": ""
},
"shareableLink": {
"title": "Cargar dende un enlace",
"button": "Substituír o meu contido",
"description": ""
}
}
}
}

View File

@ -50,7 +50,7 @@
"veryLarge": "גדול מאוד",
"solid": "מוצק",
"hachure": "קווים מקבילים קצרים להצגת כיוון וחדות שיפוע במפה",
"zigzag": "",
"zigzag": "זיגזג",
"crossHatch": "קווים מוצלבים שתי וערב",
"thin": "דק",
"bold": "מודגש",
@ -109,8 +109,12 @@
"createContainerFromText": "ארוז טקסט במיכל",
"link": {
"edit": "עריכת קישור",
"editEmbed": "ערוך קישור ושבץ",
"create": "יצירת קישור",
"label": "קישור"
"createEmbed": "צור קישור ושבץ",
"label": "קישור",
"labelEmbed": "קשר ושבץ",
"empty": "לא נקבע קישור"
},
"lineEditor": {
"edit": "ערוך קו",
@ -124,8 +128,8 @@
},
"statusPublished": "פורסם",
"sidebarLock": "שמור את סרגל הצד פתוח",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"selectAllElementsInFrame": "בחר את כל האלמנטים במסגרת",
"removeAllElementsFromFrame": "הסר את כל האלמנטים שבמסגרת",
"eyeDropper": ""
},
"library": {
@ -160,13 +164,16 @@
"darkMode": "מצב כהה",
"lightMode": "מצב בהיר",
"zenMode": "מצב זן",
"objectsSnapMode": "",
"exitZenMode": "צא ממצב זן",
"cancel": "ביטול",
"clear": "ניקוי",
"remove": "הסר",
"embed": "",
"publishLibrary": "פרסום",
"submit": "שליחה",
"confirm": "אשר"
"confirm": "אשר",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "פעולה זו תנקה את כל הקנבס. אתה בטוח?",
@ -196,6 +203,7 @@
"imageInsertError": "לא ניתן היה להוסיף את התמונה. אנא נסה שוב מאוחר יותר...",
"fileTooBig": "הקובץ גדול מדי. הגודל המירבי המותר הינו {{maxSize}}.",
"svgImageInsertError": "לא ניתן היה להוסיף את תמונת ה-SVG. הסימונים בתוך קובץ ה-SVG עשויים להיות שגויים.",
"failedToFetchImage": "",
"invalidSVGString": "SVG שגוי.",
"cannotResolveCollabServer": "לא הצלחתי להתחבר לשרת השיתוף. אנא רענן את הדף ונסה שוב.",
"importLibraryError": "לא ניתן היה לטעון את הספריה",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "הוספה/עדכון קישור של הצורה שנבחרה",
"eraser": "מחק",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "יד (כלי הזזה)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "לחץ להתחלת מספר נקודות, גרור לקו יחיד",
"freeDraw": "לחץ וגרור, שחרר כשסיימת",
"text": "טיפ: אפשר להוסיף טקסט על ידי לחיצה כפולה בכל מקום עם כלי הבחירה",
"embeddable": "",
"text_selected": "לחץ לחיצה כפולה או הקש על אנטר לעריכת הטקסט",
"text_editing": "כדי לסיים את העריכה לחץ על מקש Escape או על Ctrl (Cmd במחשבי אפל) ומקש Enter",
"linearElementMulti": "הקלק על הנקודה האחרונה או הקש Escape או Enter לסיום",
@ -252,7 +267,8 @@
"bindTextToElement": "הקש Enter כדי להוספת טקסט",
"deepBoxSelect": "החזק Ctrl / Cmd לבחירה עמוקה ולמניעת גרירה",
"eraserRevert": "החזק Alt להחזרת רכיבים מסומנים למחיקה",
"firefox_clipboard_write": "יכולות זה ניתנת להפעלה על ידי שינוי הדגל של \"dom.events.asyncClipboard.clipboardItem\" למצב \"true\". כדי לשנות את הדגל בדפדפן Firefox, בקר בעמוד ״about:config״."
"firefox_clipboard_write": "יכולות זה ניתנת להפעלה על ידי שינוי הדגל של \"dom.events.asyncClipboard.clipboardItem\" למצב \"true\". כדי לשנות את הדגל בדפדפן Firefox, בקר בעמוד ״about:config״.",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "לא ניתן להראות תצוגה מקדימה",
@ -411,7 +427,9 @@
"fileSavedToFilename": "נשמר לקובץ {filename}",
"canvas": "קנבאס",
"selection": "בחירה",
"pasteAsSingleElement": "השתמש ב- {{shortcut}} כדי להדביק כפריט יחיד,\nאו הדבק לתוך עורך טקסט קיים"
"pasteAsSingleElement": "השתמש ב- {{shortcut}} כדי להדביק כפריט יחיד,\nאו הדבק לתוך עורך טקסט קיים",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "שקוף",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "मूलपाठ कंटेनर में मोड के दिखाए",
"link": {
"edit": "",
"editEmbed": "",
"create": "",
"label": ""
"createEmbed": "",
"label": "",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "रेखा संपादित करे",
@ -160,13 +164,16 @@
"darkMode": "डार्क मोड",
"lightMode": "लाइट मोड",
"zenMode": "ज़ेन मोड",
"objectsSnapMode": "वस्तुओं से पकड़े",
"exitZenMode": "जेन मोड से बाहर निकलें",
"cancel": "",
"clear": "साफ़ करे",
"remove": "हटाएं",
"embed": "",
"publishLibrary": "प्रकाशित करें",
"submit": "प्रस्तुत करे",
"confirm": "पुष्टि करें"
"confirm": "पुष्टि करें",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "इससे पूरा कैनवास साफ हो जाएगा। क्या आपको यकीन है?",
@ -196,6 +203,7 @@
"imageInsertError": "छवि सम्मिलित नहीं की जा सकी. पुनः प्रयत्न करे...",
"fileTooBig": "फ़ाइल ज़रूरत से ज़्यादा बड़ी हैं. अधिकतम अनुमित परिमाण {{maxSize}} हैं",
"svgImageInsertError": "एसवीजी छवि सम्मिलित नहीं कर सके, एसवीजी रचना अनुचित हैं",
"failedToFetchImage": "",
"invalidSVGString": "अनुचित SVG",
"cannotResolveCollabServer": "कॉलेब सर्वर से कनेक्शन नहीं हो पा रहा. कृपया पृष्ठ को पुनः लाने का प्रयास करे.",
"importLibraryError": "संग्रह प्रतिष्ठापित नहीं किया जा सका",
@ -206,6 +214,10 @@
"line2": "यह आपके चित्रों के <bold>पाठ तत्वों</bold>को खंडित कर सकता हैं",
"line3": "हमें आपसे ठोस आग्रह है की आप सेट्टिंग में इस विकल्प का चयन ना करे.<link> इस अनुक्रम </link> का पालन करके इसका पता लगा सकते हैं",
"line4": "यदि इस सेटिंग्स को अक्षम करने पर भी पृष्ठ ठीक नहीं दिखता हो तो, हमारे GitHub पर एक <issueLink>मुद्दा प्रस्तुत</issueLink> करे, या हमें <discordLink>डिस्कोर्ड</discordLink> पर लिखित सम्पर्क करें"
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "",
"eraser": "रबड़",
"frame": "",
"embeddable": "",
"laser": "लेसर टॉर्च",
"hand": "हाथ ( खिसकाने का औज़ार)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "कई बिंदुओं को शुरू करने के लिए क्लिक करें, सिंगल लाइन के लिए खींचें",
"freeDraw": "क्लिक करें और खींचें। समाप्त करने के लिए, छोड़ो",
"text": "आप चयन टूल से कहीं भी डबल-क्लिक करके टेक्स्ट जोड़ सकते हैं",
"embeddable": "",
"text_selected": "",
"text_editing": "",
"linearElementMulti": "अंतिम बिंदु पर क्लिक करें या समाप्त होने के लिए एस्केप या एंटर दबाएं",
@ -252,7 +267,8 @@
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "मिटाने के लिए चुने हुए चीजों को ना चुनने के लिए Alt साथ में दबाए",
"firefox_clipboard_write": "\"dom.events.asyncClipboard.clipboardItem\" फ़्लैग को \"true\" पर सेट करके इस सुविधा को संभवतः सक्षम किया जा सकता है। Firefox में ब्राउज़र फ़्लैग बदलने के लिए, \"about:config\" पृष्ठ पर जाएँ।"
"firefox_clipboard_write": "\"dom.events.asyncClipboard.clipboardItem\" फ़्लैग को \"true\" पर सेट करके इस सुविधा को संभवतः सक्षम किया जा सकता है। Firefox में ब्राउज़र फ़्लैग बदलने के लिए, \"about:config\" पृष्ठ पर जाएँ।",
"disableSnapping": "स्नैपिंग को निष्क्रिय करने के लिए CtrlOrCmd दबाए रखें"
},
"canvasError": {
"cannotShowPreview": "पूर्वावलोकन नहीं दिखा सकते हैं",
@ -411,7 +427,9 @@
"fileSavedToFilename": "",
"canvas": "",
"selection": "",
"pasteAsSingleElement": "एक अवयव के रूप में चिपकाने के लिए {{shortcut}} का उपयोग करें,\nया किसी मौजूदा पाठ संपादक में चिपकायें"
"pasteAsSingleElement": "एक अवयव के रूप में चिपकाने के लिए {{shortcut}} का उपयोग करें,\nया किसी मौजूदा पाठ संपादक में चिपकायें",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
@ -449,5 +467,36 @@
"shades": "छाया",
"hexCode": "हेक्स कोड",
"noShades": "इस रंग की कोई छाया उपलब्ध नहीं हैं"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "छवि स्वरूप में निर्यात करे",
"button": "छवि स्वरूप निर्यात करे",
"description": "दृष्य डेटा छवि स्वरूप में निर्यात करे, उस स्वरूप से आप उसे पुनः आयात कर सकते हो"
},
"saveToDisk": {
"title": "डिस्क में सम्हाले",
"button": "डिस्क में सम्हाले",
"description": "दृष्य डेटा बाहरी फ़ाइल में निर्यात करे, जहाँसे आप उसे पुनः आयात कर सकते हो"
},
"excalidrawPlus": {
"title": "एक्षकालीड्रॉ+",
"button": "एक्षकालीड्रॉ+ में निर्यात करे",
"description": "दृष्य को आपके एक्षकालीड्रॉ+ के कर्यस्थल में सम्हाले"
}
},
"modal": {
"loadFromFile": {
"title": "फ़ाइल से लोड करें:",
"button": "फ़ाइल से लोड करें:",
"description": "फ़ाइल से लोड करने पर <bold>यह आपके कार्य की जगह लेलेगा </bold><br></br>आपकी ड्रॉइंग निम्न दर्शित विकल्पो में से एक चुनके और उपयोग करके सम्हाल सकते हैं"
},
"shareableLink": {
"title": "लिंक से लोड करें:",
"button": "इस जगह प्रतिस्थापित करे",
"description": "बाहर का चित्र लोड करने पर <bold>यह आपके कार्य की जगह लेलेगा </bold><br></br>आप आपकी ड्रॉइंग पहले निम्न दर्शित विकल्पो में से एक चुनके और उपयोग करके सम्हाल सकते हों."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "Hivatkozás szerkesztése",
"editEmbed": "",
"create": "Hivatkozás létrehozása",
"label": "Hivatkozás"
"createEmbed": "",
"label": "Hivatkozás",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
@ -160,13 +164,16 @@
"darkMode": "Sötét mód",
"lightMode": "Világos mód",
"zenMode": "Letisztult mód",
"objectsSnapMode": "",
"exitZenMode": "Kilépés a letisztult módból",
"cancel": "Mégsem",
"clear": "Kiűrítés",
"remove": "Eltávolítás",
"embed": "",
"publishLibrary": "Közzététel",
"submit": "Elküldés",
"confirm": "Megerősítés"
"confirm": "Megerősítés",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Ez a művelet törli a vászont. Biztos benne?",
@ -196,6 +203,7 @@
"imageInsertError": "Nem sikerült beszúrni a képet. Próbáld újra később...",
"fileTooBig": "A fájl túl nagy. A megengedett maximális méret {{maxSize}}.",
"svgImageInsertError": "Nem sikerült beszúrni az SVG-képet. Az SVG szintaktika érvénytelennek tűnik.",
"failedToFetchImage": "",
"invalidSVGString": "Érvénytelen SVG.",
"cannotResolveCollabServer": "",
"importLibraryError": "",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Hivatkozás hozzáadása/frissítése a kiválasztott alakzathoz",
"eraser": "",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Kattintással görbe, az eger húzásával pedig egyenes nyilat rajzolhatsz",
"freeDraw": "Kattints és húzd, majd engedd el, amikor végeztél",
"text": "Tipp: A kijelölés eszközzel a dupla kattintás új szöveget hoz létre",
"embeddable": "",
"text_selected": "Kattints duplán, vagy nyomj entert a szöveg szerkesztéséhez",
"text_editing": "Nyomjd meg az Escape vagy a Ctrl/Cmd+ENTER billentyűkombinációt a szerkesztés befejezéséhez",
"linearElementMulti": "Kattints a következő ív pozíciójára, vagy fejezd be a nyilat az Escape vagy Enter megnyomásával",
@ -252,7 +267,8 @@
"bindTextToElement": "Nyomd meg az Entert szöveg hozzáadáshoz",
"deepBoxSelect": "Tartsd lenyomva a Ctrl/Cmd billentyűt a mély kijelöléshez és a húzás megakadályozásához",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Előnézet nem jeleníthető meg",
@ -360,7 +376,7 @@
"removeItemsFromLib": "A kiválasztott elemek eltávolítása a könyvtárból"
},
"imageExportDialog": {
"header": "",
"header": "Kép exportálása",
"label": {
"withBackground": "",
"onlySelected": "",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Mentve mint {filename}",
"canvas": "rajzvászon",
"selection": "kijelölés",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Átlátszó",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Bungkus teks dalam kontainer",
"link": {
"edit": "Edit tautan",
"editEmbed": "",
"create": "Buat tautan",
"label": "Tautan"
"createEmbed": "",
"label": "Tautan",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Edit tautan",
@ -124,9 +128,9 @@
},
"statusPublished": "Telah terbit",
"sidebarLock": "Biarkan sidebar tetap terbuka",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"eyeDropper": ""
"selectAllElementsInFrame": "Pilih semua elemen di bingkai",
"removeAllElementsFromFrame": "Hapus semua elemen dari bingkai",
"eyeDropper": "Ambil warna dari kanvas"
},
"library": {
"noItems": "Belum ada item yang ditambahkan...",
@ -160,13 +164,16 @@
"darkMode": "Mode gelap",
"lightMode": "Mode terang",
"zenMode": "Mode zen",
"objectsSnapMode": "",
"exitZenMode": "Keluar dari mode zen",
"cancel": "Batal",
"clear": "Hapus",
"remove": "Hapus",
"embed": "",
"publishLibrary": "Terbitkan",
"submit": "Kirimkan",
"confirm": "Konfirmasi"
"confirm": "Konfirmasi",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Ini akan menghapus semua yang ada dikanvas. Apakah kamu yakin ?",
@ -196,6 +203,7 @@
"imageInsertError": "Tidak dapat menyisipkan gambar. Coba lagi nanti...",
"fileTooBig": "File terlalu besar. Ukuran maksimum yang dibolehkan {{maxSize}}.",
"svgImageInsertError": "Tidak dapat menyisipkan gambar SVG. Markup SVG sepertinya tidak valid.",
"failedToFetchImage": "",
"invalidSVGString": "SVG tidak valid.",
"cannotResolveCollabServer": "Tidak dapat terhubung ke server kolab. Muat ulang laman dan coba lagi.",
"importLibraryError": "Tidak dapat memuat pustaka",
@ -206,6 +214,10 @@
"line2": "Ini dapat membuat <bold>Elemen Teks</bold> dalam gambar mu.",
"line3": "Kami sangat menyarankan mematikan pengaturan ini. Anda dapat mengikuti <link>langkah-langkah ini</link> untuk melakukannya.",
"line4": "Jika mematikan pengaturan ini tidak membenarkan tampilan elemen teks, mohon buka\n<issueLink>isu</issueLink> di GitHub kami, atau chat kami di <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -223,9 +235,11 @@
"penMode": "Mode pena - mencegah sentuhan",
"link": "Tambah/Perbarui tautan untuk bentuk yang dipilih",
"eraser": "Penghapus",
"frame": "",
"frame": "Alat bingkai",
"embeddable": "",
"laser": "",
"hand": "Tangan (alat panning)",
"extraTools": ""
"extraTools": "Alat-alat lain"
},
"headings": {
"canvasActions": "Opsi Kanvas",
@ -237,6 +251,7 @@
"linearElement": "Klik untuk memulai banyak poin, seret untuk satu baris",
"freeDraw": "Klik dan seret, lepaskan jika Anda selesai",
"text": "Tip: Anda juga dapat menambahkan teks dengan klik ganda di mana saja dengan alat pemilihan",
"embeddable": "",
"text_selected": "Klik ganda atau tekan ENTER untuk edit teks",
"text_editing": "Tekan Escape atau CtrlAtauCmd+ENTER untuk selesai mengedit",
"linearElementMulti": "Klik pada titik akhir atau tekan Escape atau Enter untuk menyelesaikan",
@ -252,7 +267,8 @@
"bindTextToElement": "Tekan enter untuk tambahkan teks",
"deepBoxSelect": "Tekan Ctrl atau Cmd untuk memilih yang di dalam, dan mencegah penggeseran",
"eraserRevert": "Tahan Alt untuk mengembalikan elemen yang ditandai untuk dihapus",
"firefox_clipboard_write": "Fitur ini dapat diaktifkan melalui pengaturan flag \"dom.events.asyncClipboard.clipboardItem\" ke \"true\". Untuk mengganti flag di Firefox, pergi ke laman \"about:config\"."
"firefox_clipboard_write": "Fitur ini dapat diaktifkan melalui pengaturan flag \"dom.events.asyncClipboard.clipboardItem\" ke \"true\". Untuk mengganti flag di Firefox, pergi ke laman \"about:config\".",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Tidak dapat menampilkan pratinjau",
@ -360,27 +376,27 @@
"removeItemsFromLib": "Hapus item yang dipilih dari pustaka"
},
"imageExportDialog": {
"header": "",
"header": "Ekspor gambar",
"label": {
"withBackground": "",
"onlySelected": "",
"darkMode": "",
"embedScene": "",
"scale": "",
"padding": ""
"withBackground": "Latar",
"onlySelected": "Hanya yang dipilih",
"darkMode": "Mode gelap",
"embedScene": "Sematkan pemandangan",
"scale": "Skala",
"padding": "Lapisan"
},
"tooltip": {
"embedScene": ""
"embedScene": "Data pemandangan akan disimpan dalam file PNG/SVG yang diekspor sehingga pemandangan itu dapat dipulihkan darinya.\nAkan membesarkan ukuran file yang diekspor."
},
"title": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "Ekspor ke PNG",
"exportToSvg": "Ekspor ke SVG",
"copyPngToClipboard": "Salin PNG ke papan klip"
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": "Salin ke papan klip"
}
},
"encrypted": {
@ -411,7 +427,9 @@
"fileSavedToFilename": "Disimpan ke {filename}",
"canvas": "kanvas",
"selection": "pilihan",
"pasteAsSingleElement": "Gunakan {{shortcut}} untuk menempelkan sebagai satu elemen,\natau tempelkan ke teks editor yang ada"
"pasteAsSingleElement": "Gunakan {{shortcut}} untuk menempelkan sebagai satu elemen,\natau tempelkan ke teks editor yang ada",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Transparan",
@ -449,5 +467,36 @@
"shades": "Nuansa",
"hexCode": "Kode hexa",
"noShades": "Tidak ada nuansa untuk warna ini"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Ekspor sebagai gambar",
"button": "Ekspor sebagai gambar",
"description": "Ekspor data pemandangan sebagai gambar yang dapat anda impor nanti."
},
"saveToDisk": {
"title": "Simpan ke disk",
"button": "Simpan ke disk",
"description": "Ekspor data pemandangan ke file yang dapat Anda dapat impor nanti."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Ekspor ke Excalidraw+",
"description": "Simpan pemandangan ke ruang kerja Excalidraw+ Anda."
}
},
"modal": {
"loadFromFile": {
"title": "Muat dari file",
"button": "Muat dari file",
"description": "Memuat dari file yang akan <bold>menggantikan konten Anda sekarang</bold>.<br></br>Anda dapat mencadangkan gambar anda dulu menggunakan opsi-opsi ini."
},
"shareableLink": {
"title": "Muat dari link",
"button": "Ganti konten saya",
"description": "Memuat dari file yang akan <bold>menggantikan konten Anda sekarang</bold>.<br></br>Anda dapat mencadangkan gambar anda dulu menggunakan opsi-opsi ini."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Avvolgi il testo in un container",
"link": {
"edit": "Modifica link",
"editEmbed": "Modifica collegamento e incorpora",
"create": "Crea link",
"label": "Link"
"createEmbed": "Crea collegamento e incorpora",
"label": "Link",
"labelEmbed": "Collega & incorpora",
"empty": "Nessun collegamento impostato"
},
"lineEditor": {
"edit": "Modifica linea",
@ -124,9 +128,9 @@
},
"statusPublished": "Pubblicato",
"sidebarLock": "Mantieni aperta la barra laterale",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"eyeDropper": ""
"selectAllElementsInFrame": "Seleziona tutti gli elementi nel riquadro",
"removeAllElementsFromFrame": "Rimuovi tutti gli elementi dal riquadro",
"eyeDropper": "Scegli il colore della tela"
},
"library": {
"noItems": "Nessun elemento ancora aggiunto...",
@ -160,13 +164,16 @@
"darkMode": "Tema scuro",
"lightMode": "Tema chiaro",
"zenMode": "Modalità Zen",
"objectsSnapMode": "Aggancia agli oggetti",
"exitZenMode": "Uscire dalla modalità zen",
"cancel": "Annulla",
"clear": "Cancella",
"remove": "Rimuovi",
"embed": "Attiva/disattiva incorporamento",
"publishLibrary": "Pubblica",
"submit": "Invia",
"confirm": "Conferma"
"confirm": "Conferma",
"embeddableInteractionButton": "Clicca per interagire"
},
"alerts": {
"clearReset": "Questa azione cancellerà l'intera tela. Sei sicuro?",
@ -196,6 +203,7 @@
"imageInsertError": "Non è stato possibile inserire l'immagine. Riprova più tardi...",
"fileTooBig": "Il file è troppo grande. La dimensione massima consentita è {{maxSize}}.",
"svgImageInsertError": "Impossibile inserire l'immagine SVG. Il markup SVG non sembra corretto.",
"failedToFetchImage": "",
"invalidSVGString": "SVG non valido.",
"cannotResolveCollabServer": "Impossibile connettersi al server di collab. Ricarica la pagina e riprova.",
"importLibraryError": "Impossibile caricare la libreria",
@ -206,6 +214,10 @@
"line2": "Ciò potrebbe causare la rottura degli <bold>Elementi di testo</bold> nei tuoi disegni.",
"line3": "Consigliamo vivamente di disabilitare questa impostazione. Puoi seguire <link>questi passaggi</link> su come farlo.",
"line4": "Se la disattivazione di questa impostazione non risolve la visualizzazione degli elementi di testo, apri un <issueLink>problema</issueLink> sul nostro GitHub o scrivici su <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "Gli elementi incorporabili non possono essere aggiunti alla libreria.",
"image": "Il supporto per l'aggiunta d'immagini alla libreria verrà aggiunto a breve!"
}
},
"toolBar": {
@ -223,7 +235,9 @@
"penMode": "Modalità penna - previene il tocco",
"link": "Aggiungi/ aggiorna il link per una forma selezionata",
"eraser": "Gomma",
"frame": "",
"frame": "Strumento riquadro",
"embeddable": "Incorporamento Web",
"laser": "Puntatore laser",
"hand": "Mano (strumento di panoramica)",
"extraTools": "Altri strumenti"
},
@ -237,6 +251,7 @@
"linearElement": "Clicca per iniziare una linea in più punti, trascina per singola linea",
"freeDraw": "Clicca e trascina, rilascia quando avrai finito",
"text": "Suggerimento: puoi anche aggiungere del testo facendo doppio clic ovunque con lo strumento di selezione",
"embeddable": "Fare click e trascina per creare un incorporamento web",
"text_selected": "Fai doppio click o premi INVIO per modificare il testo",
"text_editing": "Premi ESC o CtrlOCmd+INVIO per completare le modifiche",
"linearElementMulti": "Clicca sull'ultimo punto o premi Esc o Invio per finire",
@ -252,7 +267,8 @@
"bindTextToElement": "Premi invio per aggiungere il testo",
"deepBoxSelect": "Tieni premuto CtrlOCmd per selezionare in profondità e per impedire il trascinamento",
"eraserRevert": "Tieni premuto Alt per ripristinare gli elementi contrassegnati per l'eliminazione",
"firefox_clipboard_write": "Questa funzione può essere abilitata impostando il flag \"dom.events.asyncClipboard.clipboardItem\" su \"true\". Per modificare i flag del browser in Firefox, visitare la pagina \"about:config\"."
"firefox_clipboard_write": "Questa funzione può essere abilitata impostando il flag \"dom.events.asyncClipboard.clipboardItem\" su \"true\". Per modificare i flag del browser in Firefox, visitare la pagina \"about:config\".",
"disableSnapping": "Tieni premuto Ctrl o Cmd per disabilitare lo snap"
},
"canvasError": {
"cannotShowPreview": "Impossibile visualizzare l'anteprima",
@ -367,7 +383,7 @@
"darkMode": "Tema scuro",
"embedScene": "Includi scena",
"scale": "Scala",
"padding": ""
"padding": "Rientro"
},
"tooltip": {
"embedScene": "I dati della scena saranno salvati nel file PNG/SVG esportato in modo che la scena possa essere ripristinata da esso.\nQuesto aumenterà la dimensione del file esportato."
@ -411,7 +427,9 @@
"fileSavedToFilename": "Salvato in {filename}",
"canvas": "tela",
"selection": "selezione",
"pasteAsSingleElement": "Usa {{shortcut}} per incollare come un singolo elemento,\no incollare in un editor di testo esistente"
"pasteAsSingleElement": "Usa {{shortcut}} per incollare come un singolo elemento,\no incollare in un editor di testo esistente",
"unableToEmbed": "Incorporare questo url non è permesso. Crea una issue su GitHub per richiedere che l'url sia autorizzato",
"unrecognizedLinkFormat": "Il link che hai incorporato non corrisponde al formato previsto. Prova a incollare la stringa 'embed' fornita dal sito di origine"
},
"colors": {
"transparent": "Trasparente",
@ -449,5 +467,36 @@
"shades": "Sfumature",
"hexCode": "Codice esadecimale",
"noShades": "Nessuna sfumatura disponibile per questo colore"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Esporta come immagine",
"button": "Esporta come immagine",
"description": "Esporta i dati della scena come immagine, che potrai importare in seguito."
},
"saveToDisk": {
"title": "Salva su disco",
"button": "Salva su disco",
"description": "Esporta i dati della scena su file, che potrai importare in seguito."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Esporta su Excalidraw+",
"description": "Salva la scena sul tuo spazio di lavoro Excalidraw+."
}
},
"modal": {
"loadFromFile": {
"title": "Carica da file",
"button": "Carica da file",
"description": "Il caricamento da file sostituirà <bold>il contenuto esistente</bold>.<br></br>Puoi salvare il tuo disegno prima usando una delle opzioni qui sotto."
},
"shareableLink": {
"title": "Carica da link",
"button": "Sostituisci il mio contenuto",
"description": "Il caricamento da file sostituirà <bold>il contenuto esistente</bold>.<br></br>Puoi salvare il tuo disegno prima usando una delle opzioni qui sotto."
}
}
}
}

View File

@ -50,7 +50,7 @@
"veryLarge": "特大",
"solid": "ベタ塗り",
"hachure": "斜線",
"zigzag": "",
"zigzag": "ジグザグ",
"crossHatch": "網掛け",
"thin": "細",
"bold": "太字",
@ -106,11 +106,15 @@
"increaseFontSize": "フォントサイズを拡大",
"unbindText": "テキストのバインド解除",
"bindText": "テキストをコンテナにバインド",
"createContainerFromText": "",
"createContainerFromText": "コンテナ内でテキストを折り返す",
"link": {
"edit": "リンクを編集",
"editEmbed": "リンクの編集と埋め込み",
"create": "リンクを作成",
"label": "リンク"
"createEmbed": "リンクの作成と埋め込み",
"label": "リンク",
"labelEmbed": "リンクと埋め込み",
"empty": "リンクが設定されていません"
},
"lineEditor": {
"edit": "行を編集",
@ -124,9 +128,9 @@
},
"statusPublished": "公開済み",
"sidebarLock": "サイドバーを開いたままにする",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"eyeDropper": ""
"selectAllElementsInFrame": "フレーム内のすべての要素を選択",
"removeAllElementsFromFrame": "フレーム内のすべての要素を削除",
"eyeDropper": "キャンバスから色を選択"
},
"library": {
"noItems": "まだアイテムが追加されていません…",
@ -160,13 +164,16 @@
"darkMode": "ダークモード",
"lightMode": "ライトモード",
"zenMode": "Zenモード",
"objectsSnapMode": "",
"exitZenMode": "集中モードをやめる",
"cancel": "キャンセル",
"clear": "消去",
"remove": "削除",
"embed": "埋め込みの切り替え",
"publishLibrary": "公開",
"submit": "送信",
"confirm": "確認"
"confirm": "確認",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "この操作によってキャンバス全体が消えます。よろしいですか?",
@ -196,16 +203,21 @@
"imageInsertError": "画像を挿入できませんでした。後でもう一度お試しください...",
"fileTooBig": "ファイルが大きすぎます。許可される最大サイズは {{maxSize}} です。",
"svgImageInsertError": "SVGイメージを挿入できませんでした。SVGマークアップは無効に見えます。",
"failedToFetchImage": "",
"invalidSVGString": "無効なSVGです。",
"cannotResolveCollabServer": "コラボレーションサーバに接続できませんでした。ページを再読み込みして、もう一度お試しください。",
"importLibraryError": "ライブラリを読み込めませんでした。",
"collabSaveFailed": "バックエンドデータベースに保存できませんでした。問題が解決しない場合は、作業を失わないようにローカルにファイルを保存してください。",
"collabSaveFailed_sizeExceeded": "キャンバスが大きすぎるため、バックエンドデータベースに保存できませんでした。問題が解決しない場合は、作業を失わないようにローカルにファイルを保存してください。",
"brave_measure_text_error": {
"line1": "",
"line2": "",
"line3": "",
"line4": ""
"line1": "<bold>Aggressly Block Fingerprinting</bold> の設定が有効なBraveブラウザを使用しているようです。",
"line2": "これにより、図面の <bold>テキスト要素</bold> が壊れる可能性があります。",
"line3": "この設定を無効にすることを強く推奨します。 <link>設定手順</link> をこちらから確認できます。",
"line4": "この設定を無効にすると、テキスト要素の表示が修正されません。 GitHub で <issueLink>Issue</issueLink> を開くか、 <discordLink>Discord</discordLink> にご記入ください"
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -223,9 +235,11 @@
"penMode": "ペンモード - タッチ防止",
"link": "選択した図形のリンクを追加/更新",
"eraser": "消しゴム",
"frame": "",
"frame": "フレームツール",
"embeddable": "Web埋め込み",
"laser": "",
"hand": "手 (パンニングツール)",
"extraTools": ""
"extraTools": "その他のツール"
},
"headings": {
"canvasActions": "キャンバス操作",
@ -237,6 +251,7 @@
"linearElement": "クリックすると複数の頂点からなる曲線を開始、ドラッグすると直線",
"freeDraw": "クリックしてドラッグします。離すと終了します",
"text": "ヒント: 選択ツールを使用して任意の場所をダブルクリックしてテキストを追加することもできます",
"embeddable": "",
"text_selected": "テキストを編集するには、ダブルクリックまたはEnterキーを押します",
"text_editing": "Esc キーまたは CtrlOrCmd+ENTER キーを押して編集を終了します",
"linearElementMulti": "最後のポイントをクリックするか、エスケープまたはEnterを押して終了します",
@ -252,7 +267,8 @@
"bindTextToElement": "Enterを押してテキストを追加",
"deepBoxSelect": "CtrlOrCmd を押し続けることでドラッグを抑止し、深い選択を行います",
"eraserRevert": "Alt を押し続けることで削除マークされた要素を元に戻す",
"firefox_clipboard_write": "この機能は、\"dom.events.asyncClipboard.clipboardItem\" フラグを \"true\" に設定することで有効になる可能性があります。Firefox でブラウザーの設定を変更するには、\"about:config\" ページを参照してください。"
"firefox_clipboard_write": "この機能は、\"dom.events.asyncClipboard.clipboardItem\" フラグを \"true\" に設定することで有効になる可能性があります。Firefox でブラウザーの設定を変更するには、\"about:config\" ページを参照してください。",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "プレビューを表示できません",
@ -360,27 +376,27 @@
"removeItemsFromLib": "選択したアイテムをライブラリから削除"
},
"imageExportDialog": {
"header": "",
"header": "画像をエクスポート",
"label": {
"withBackground": "",
"withBackground": "背景",
"onlySelected": "",
"darkMode": "",
"darkMode": "ダークモード",
"embedScene": "",
"scale": "",
"padding": ""
"scale": "スケール",
"padding": "余白"
},
"tooltip": {
"embedScene": ""
},
"title": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG にエクスポート",
"exportToSvg": "SVG にエクスポート",
"copyPngToClipboard": "クリップボードにPNGをコピー"
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": "クリップボードにコピー"
}
},
"encrypted": {
@ -411,24 +427,26 @@
"fileSavedToFilename": "{filename} に保存しました",
"canvas": "キャンバス",
"selection": "選択",
"pasteAsSingleElement": "{{shortcut}} を使用して単一の要素として貼り付けるか、\n既存のテキストエディタに貼り付け"
"pasteAsSingleElement": "{{shortcut}} を使用して単一の要素として貼り付けるか、\n既存のテキストエディタに貼り付け",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "透明",
"black": "",
"white": "",
"red": "",
"pink": "",
"grape": "",
"violet": "",
"gray": "",
"blue": "",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"bronze": ""
"black": "",
"white": "",
"red": "",
"pink": "ピンク",
"grape": "グレープ",
"violet": "バイオレット",
"gray": "灰色",
"blue": "",
"cyan": "シアン",
"teal": "ティール",
"green": "",
"yellow": "",
"orange": "オレンジ",
"bronze": "ブロンズ"
},
"welcomeScreen": {
"app": {
@ -444,10 +462,41 @@
}
},
"colorPicker": {
"mostUsedCustomColors": "",
"colors": "",
"shades": "",
"hexCode": "",
"mostUsedCustomColors": "最も使用されているカスタム色",
"colors": "",
"shades": "",
"hexCode": "Hexコード",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "画像としてエクスポート",
"button": "画像としてエクスポート",
"description": ""
},
"saveToDisk": {
"title": "ディスクに保存",
"button": "ディスクに保存",
"description": ""
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Excalidraw+にエクスポート",
"description": "Excalidraw+ ワークスペースにシーンを保存します。"
}
},
"modal": {
"loadFromFile": {
"title": "ファイルからロード",
"button": "ファイルからロード",
"description": ""
},
"shareableLink": {
"title": "リンクからロード",
"button": "",
"description": ""
}
}
}
}

View File

@ -1,14 +1,14 @@
{
"labels": {
"paste": "",
"pasteAsPlaintext": "",
"pasteCharts": "",
"paste": "Qoyıw",
"pasteAsPlaintext": "Ápiwayı tekst retinde qoyıw",
"pasteCharts": "Diagrammalardı qoyıw",
"selectAll": "Barlıǵın tańlaw",
"multiSelect": "",
"moveCanvas": "",
"cut": "",
"cut": "Qıyıw",
"copy": "Kóshirip alıw",
"copyAsPng": "",
"copyAsPng": "Almasıw buferine PNG retinde kóshirip alıw",
"copyAsSvg": "",
"copyText": "",
"bringForward": "",
@ -18,8 +18,8 @@
"delete": "Óshiriw",
"copyStyles": "",
"pasteStyles": "",
"stroke": "",
"background": "",
"stroke": "Jiyek",
"background": "Fon",
"fill": "",
"strokeWidth": "",
"strokeStyle": "",
@ -29,31 +29,31 @@
"sloppiness": "",
"opacity": "",
"textAlign": "",
"edges": "",
"edges": "Qırlar",
"sharp": "",
"round": "",
"arrowheads": "",
"arrowhead_none": "",
"arrowhead_arrow": "",
"arrowhead_arrow": "Jebe",
"arrowhead_bar": "",
"arrowhead_dot": "",
"arrowhead_dot": "Noqat",
"arrowhead_triangle": "",
"fontSize": "Shrift ólshemi",
"fontFamily": "",
"addWatermark": "",
"handDrawn": "",
"normal": "",
"code": "",
"code": "Kod",
"small": "",
"medium": "",
"large": "",
"veryLarge": "",
"large": "Úlken",
"veryLarge": "Júdá úlken",
"solid": "",
"hachure": "",
"zigzag": "",
"zigzag": "Zigzag",
"crossHatch": "",
"thin": "",
"bold": "",
"thin": "Jińishke",
"bold": "Qalıń",
"left": "",
"center": "",
"right": "",
@ -71,19 +71,19 @@
"language": "Til",
"liveCollaboration": "",
"duplicateSelection": "Nusqa",
"untitled": "",
"untitled": "Atamasız",
"name": "Ataması",
"yourName": "Atıńız",
"madeWithExcalidraw": "",
"madeWithExcalidraw": "Excalidraw járdeminde islengen",
"group": "",
"ungroup": "",
"collaborators": "",
"collaborators": "Qatnasıwshılar",
"showGrid": "",
"addToLibrary": "Kitapxanaǵa qosıw",
"removeFromLibrary": "Kitapxanadan alıp taslaw",
"libraryLoadingMessage": "Kitapxana júklenbekte…",
"libraries": "Kitapxanalardı kóriw",
"loadingScene": "",
"loadingScene": "Saxna júklenbekte…",
"align": "",
"alignTop": "",
"alignBottom": "",
@ -99,22 +99,26 @@
"share": "Bólisiw",
"showStroke": "",
"showBackground": "",
"toggleTheme": "",
"personalLib": "",
"excalidrawLib": "",
"decreaseFontSize": "",
"increaseFontSize": "",
"toggleTheme": "Temanı ózgertiw",
"personalLib": "Jeke kitapxana",
"excalidrawLib": "Excalidraw kitapxanası",
"decreaseFontSize": "Shrift ólshemin kishireytiw",
"increaseFontSize": "Shrift ólshemin úlkeytiw",
"unbindText": "",
"bindText": "",
"createContainerFromText": "",
"link": {
"edit": "Siltemeni ózgertiw",
"editEmbed": "",
"create": "Siltemeni jaratıw",
"label": "Silteme"
"createEmbed": "",
"label": "Silteme",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
"exit": ""
"edit": "Qatardı ózgertiw",
"exit": "Qatardı ózgertiw redaktorınan shıǵıw"
},
"elementLock": {
"lock": "Qulıplaw",
@ -136,11 +140,11 @@
"buttons": {
"clearReset": "",
"exportJSON": "",
"exportImage": "",
"export": "",
"exportImage": "Súwretti eksportlaw...",
"export": "Retinde saqlaw...",
"copyToClipboard": "Almasıw buferine kóshirip alındı",
"save": "",
"saveAs": "",
"save": "Ámeldegi faylǵa saqlaw",
"saveAs": "Retinde saqlaw",
"load": "Ashıw",
"getShareableLink": "",
"close": "Jabıw",
@ -160,13 +164,16 @@
"darkMode": "Qarańǵı tema",
"lightMode": "Jaqtı tema",
"zenMode": "",
"objectsSnapMode": "",
"exitZenMode": "",
"cancel": "Biykarlaw",
"clear": "Tazalaw",
"remove": "Óshiriw",
"embed": "",
"publishLibrary": "",
"submit": "Jiberiw",
"confirm": "Tastıyıqlaw"
"confirm": "Tastıyıqlaw",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "",
@ -196,6 +203,7 @@
"imageInsertError": "",
"fileTooBig": "",
"svgImageInsertError": "",
"failedToFetchImage": "",
"invalidSVGString": "Jaramsız SVG.",
"cannotResolveCollabServer": "",
"importLibraryError": "Kitapxananı júklew ámelge aspadı",
@ -206,12 +214,16 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
"selection": "",
"image": "Súwret qoyıw",
"rectangle": "",
"rectangle": "Tórt múyeshlik",
"diamond": "",
"ellipse": "",
"arrow": "",
@ -224,19 +236,22 @@
"link": "",
"eraser": "Óshirgish",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
"headings": {
"canvasActions": "",
"selectedShapeActions": "",
"shapes": ""
"shapes": "Figuralar"
},
"hints": {
"canvasPanning": "",
"linearElement": "",
"freeDraw": "",
"text": "",
"embeddable": "",
"text_selected": "",
"text_editing": "",
"linearElementMulti": "",
@ -249,10 +264,11 @@
"lineEditor_nothingSelected": "",
"placeImage": "",
"publishLibrary": "",
"bindTextToElement": "",
"bindTextToElement": "Tekst qosıw ushın Enter túymesin basıń",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "",
@ -281,18 +297,18 @@
"title": "Qátelik"
},
"exportDialog": {
"disk_title": "",
"disk_title": "Diskke saqlaw",
"disk_details": "",
"disk_button": "",
"disk_button": "Faylǵa saqlaw",
"link_title": "",
"link_details": "",
"link_button": "",
"link_button": "Siltemege eksportlaw",
"excalidrawplus_description": "",
"excalidrawplus_button": "Eksportlaw",
"excalidrawplus_exportError": ""
},
"helpDialog": {
"blog": "",
"blog": "Biziń blogtı oqıń",
"click": "basıw",
"deepSelect": "",
"deepBoxSelect": "",
@ -301,7 +317,7 @@
"documentation": "Hújjetshilik",
"doubleClick": "",
"drag": "",
"editor": "",
"editor": "Redaktor",
"editLineArrowPoints": "",
"editText": "",
"github": "",
@ -333,7 +349,7 @@
"libraryDesc": "",
"website": "Veb-sayt",
"placeholder": {
"authorName": "",
"authorName": "Atıńız yamasa paydalanıwshı atı",
"libraryName": "",
"libraryDesc": "",
"githubHandle": "",
@ -356,15 +372,15 @@
"content": ""
},
"confirmDialog": {
"resetLibrary": "",
"resetLibrary": "Kitapxananı qayta ornatıw",
"removeItemsFromLib": ""
},
"imageExportDialog": {
"header": "",
"header": "Súwretti eksportlaw",
"label": {
"withBackground": "",
"withBackground": "Fon",
"onlySelected": "",
"darkMode": "",
"darkMode": "Qarańǵı tema",
"embedScene": "",
"scale": "",
"padding": ""
@ -378,9 +394,9 @@
"copyPngToClipboard": ""
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": "Almasıw buferine kóshirip alıw"
}
},
"encrypted": {
@ -389,8 +405,8 @@
},
"stats": {
"angle": "",
"element": "",
"elements": "",
"element": "Element",
"elements": "Elementler",
"height": "",
"scene": "Saxna",
"selected": "Tańlandı",
@ -403,31 +419,33 @@
"width": ""
},
"toast": {
"addedToLibrary": "",
"addedToLibrary": "Kitapxanaǵa qosıldı",
"copyStyles": "",
"copyToClipboard": "",
"copyToClipboard": "Almasıw buferine kóshirip alındı.",
"copyToClipboardAsPng": "",
"fileSaved": "Fayl saqlandı.",
"fileSavedToFilename": "{filename} saqlandı",
"canvas": "",
"selection": "",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
"black": "",
"white": "",
"red": "",
"pink": "",
"black": "Qara",
"white": "Aq",
"red": "Qızıl",
"pink": "Qıılt",
"grape": "",
"violet": "",
"violet": "Qıılt kók",
"gray": "",
"blue": "",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"blue": "Kók",
"cyan": "Kók aspan",
"teal": "Piruza",
"green": "Jasıl",
"yellow": "Sarı",
"orange": "Qıılt sarı",
"bronze": ""
},
"welcomeScreen": {
@ -445,9 +463,40 @@
},
"colorPicker": {
"mostUsedCustomColors": "",
"colors": "",
"colors": "Reńler",
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Súwret retinde eksportlaw",
"button": "Súwret retinde eksportlaw",
"description": ""
},
"saveToDisk": {
"title": "Diskke saqlaw",
"button": "Diskke saqlaw",
"description": ""
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "Fayldan júklew",
"button": "Fayldan júklew",
"description": ""
},
"shareableLink": {
"title": "Siltemeden júklew",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "Ẓreg aseɣwen",
"editEmbed": "",
"create": "Snulfu-d aseɣwen",
"label": "Aseɣwen"
"createEmbed": "",
"label": "Aseɣwen",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Ẓreg izirig",
@ -160,13 +164,16 @@
"darkMode": "Askar imsulles",
"lightMode": "Askar afaw",
"zenMode": "Askar Zen",
"objectsSnapMode": "",
"exitZenMode": "Ffeɣ seg uskar Zen",
"cancel": "Sefsex",
"clear": "Sfeḍ",
"remove": "Kkes",
"embed": "",
"publishLibrary": "Ẓreg",
"submit": "Azen",
"confirm": "Sentem"
"confirm": "Sentem",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Ayagi ad isfeḍ akk taɣzut n usuneɣ. Tetḥeqqeḍ?",
@ -196,6 +203,7 @@
"imageInsertError": "D awezɣi tugra n tugna. Eɛreḍ tikkelt-nniḍen ardeqqal...",
"fileTooBig": "Afaylu meqqer aṭas. Tiddi tafellayt yurgen d {{maxSize}}.",
"svgImageInsertError": "D awezɣi tugra n tugna SVG. Acraḍ SVG yettban-d d armeɣtu.",
"failedToFetchImage": "",
"invalidSVGString": "SVG armeɣtu.",
"cannotResolveCollabServer": "Ulamek tuqqna s aqeddac n umyalel. Ma ulac uɣilif ales asali n usebter sakin eɛreḍ tikkelt-nniḍen.",
"importLibraryError": "Ur d-ssalay ara tamkarḍit",
@ -206,6 +214,10 @@
"line2": "Ayagi yezmer ad d-iglu s truẓi n<bold>Iferdisen n uḍris</bold>deg wunuɣen-inek.",
"line3": "Ad k-nsemter ad tsexsiḍ aɣewwar-agi. Tzemreḍ ad tḍefreḍ<link>isurifen-agi</link> ɣef wamek ara txedmeḍ.",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Rnu/leqqem aseɣwen i talɣa yettwafernen",
"eraser": "Sfeḍ",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "Afus (afecku n usmutti n tmuɣli)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Ssit akken ad tebduḍ aṭas n tenqiḍin, zuɣer i yiwen n yizirig",
"freeDraw": "Ssit yerna zuɣer, serreḥ ticki tfukeḍ",
"text": "Tixidest: tzemreḍ daɣen ad ternuḍ aḍris s usiti snat n tikkal anida tebɣiḍ s ufecku n tefrayt",
"embeddable": "",
"text_selected": "Ssit snat n tikkal neɣ ssed taqeffalt Kcem akken ad tẓergeḍ aḍris",
"text_editing": "Ssit Escape neɣ CtrlOrCmd+ENTER akken ad tfakkeḍ asiẓreg",
"linearElementMulti": "Ssit ɣef tenqiḍt taneggarut neɣ ssed taqeffalt Escape neɣ taqeffalt Kcem akken ad tfakkeḍ",
@ -252,7 +267,8 @@
"bindTextToElement": "Ssed ɣef kcem akken ad ternuḍ aḍris",
"deepBoxSelect": "Ṭṭef CtrlOrCmd akken ad tferneḍ s telqey, yerna ad trewleḍ i uzuɣer",
"eraserRevert": "Ssed Alt akken ad tsefsxeḍ iferdisen yettwacerḍen i tukksa",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Ulamek abeqqeḍ n teskant",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Yettwasekles di {filename}",
"canvas": "taɣzut n usuneɣ",
"selection": "tafrayt",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Afrawan",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "",
"editEmbed": "",
"create": "",
"label": ""
"createEmbed": "",
"label": "",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
@ -160,13 +164,16 @@
"darkMode": "",
"lightMode": "",
"zenMode": "",
"objectsSnapMode": "",
"exitZenMode": "",
"cancel": "",
"clear": "",
"remove": "",
"embed": "",
"publishLibrary": "",
"submit": "",
"confirm": ""
"confirm": "",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "",
@ -196,6 +203,7 @@
"imageInsertError": "Суретті жүктеу мүмкін болмады. Кейінірек қайталап көріңіз...",
"fileTooBig": "Файл өте үлкен. Максималды рұқсат етілген көлем {{maxSize}}.",
"svgImageInsertError": "",
"failedToFetchImage": "",
"invalidSVGString": "",
"cannotResolveCollabServer": "",
"importLibraryError": "",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "",
"eraser": "",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "",
"freeDraw": "",
"text": "",
"embeddable": "",
"text_selected": "",
"text_editing": "",
"linearElementMulti": "",
@ -252,7 +267,8 @@
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "",
@ -411,7 +427,9 @@
"fileSavedToFilename": "{filename} сақталды",
"canvas": "",
"selection": "таңдау",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "រុំអត្ថបទក្នុងប្រអប់មួយ",
"link": {
"edit": "កែតំណភ្ជាប់",
"editEmbed": "",
"create": "បង្កើតតំណភ្ជាប់",
"label": "តំណ"
"createEmbed": "",
"label": "តំណ",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "កែសម្រួលបន្ទាត់",
@ -160,13 +164,16 @@
"darkMode": "ម៉ូដងងឹត",
"lightMode": "ម៉ូដភ្លឺ",
"zenMode": "ម៉ូត Zen",
"objectsSnapMode": "",
"exitZenMode": "ចេញពី zen ម៉ូត",
"cancel": "បោះបង់",
"clear": "សម្អាត",
"remove": "ដកចេញ",
"embed": "",
"publishLibrary": "បោះពុម្ពផ្សាយ",
"submit": "ដាក់​ស្នើ",
"confirm": "បញ្ជាក់"
"confirm": "បញ្ជាក់",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "វានឹងសម្អាតបាវទាំងមូល។ តើ​អ្នក​ប្រាកដ​ឬ​អត់?",
@ -196,6 +203,7 @@
"imageInsertError": "មិនអាចបញ្ចូលរូបភាពបានទេ។ សូម​ព្យាយាម​ម្តង​ទៀត​នៅ​ពេល​ក្រោយ……",
"fileTooBig": "ឯកសារធំពេក។ ទំហំអតិបរមាដែលអនុញ្ញាតគឺ {{maxSize}}។",
"svgImageInsertError": "មិនអាចបញ្ចូលរូបភាព SVG បានទេ។ ស្លាក SVG ហាក់ដូចជាមិនត្រឹមត្រូវ។",
"failedToFetchImage": "",
"invalidSVGString": "SVG មិន​ត្រឹមត្រូវ។",
"cannotResolveCollabServer": "មិនអាចភ្ជាប់ទៅម៉ាស៊ីនមេសហការផ្ទាល់បានទេ។ សូមផ្ទុកទំព័រឡើងវិញ ហើយព្យាយាមម្តងទៀត។",
"importLibraryError": "មិនអាចផ្ទុកបណ្ណាល័យបានទេ។",
@ -206,6 +214,10 @@
"line2": "វាអាចបណ្តាលឱ្យមានការបំបែក <bold>ធាតុអត្ថបទ</bold> នៅក្នុងគំនូររបស់អ្នក។",
"line3": "យើងណែនាំយ៉ាងមុតមាំឱ្យបិទការកំណត់នេះ។ អ្នកអាចអនុវត្តតាម <link>ជំហានទាំងនេះ</link> ដើម្បីបិទការកំណត់នេះ។",
"line4": "ប្រសិនបើការបិទការកំណត់នេះមិនបានជួសជុលការបង្ហាញធាតុអត្ថបទទេ សូមដាក់ <issueLink>issue</issueLink> នៅលើ GitHub ឬរាយការណ៍នៅលើ <discordLink>Discord</discordLink> របស់យើង"
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "បន្ថែម/ធ្វើបច្ចុប្បន្នភាពតំណភ្ជាប់សម្រាប់រូបរាងដែលបានជ្រើសរើស",
"eraser": "ជ័រលុប",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "ដៃ (panning tool)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "ចុចដើម្បីបង្កើតចំណុចច្រើន អូសដើម្បីបង្កើតបន្ទាត់មួយ",
"freeDraw": "ចុច​ហើយ​អូស លែង​ពេល​រួចរាល់",
"text": "គន្លឹះ៖ អ្នកក៏អាចបន្ថែមអត្ថបទដោយចុចពីរដងនៅកន្លែងណាមួយដោយប្រើឧបករណ៍ជ្រើសរើស",
"embeddable": "",
"text_selected": "ចុចពីរដង ឬចុច ENTER ដើម្បីកែសម្រួលអត្ថបទ",
"text_editing": "ចុច Escape ឬ CtrlOrCmd +ENTER ដើម្បីបញ្ចប់ការកែសម្រួល",
"linearElementMulti": "ចុចលើចំណុចចុងក្រោយ ឬចុច Esc/Enter ដើម្បីបញ្ចប់",
@ -252,7 +267,8 @@
"bindTextToElement": "ចុច Enter ដើម្បីបន្ថែមអត្ថបទ",
"deepBoxSelect": "សង្កត់ CtrlOrCmd ដើម្បីជ្រើសរើសយ៉ាងជ្រៅ និងជៀសវាងការអូស",
"eraserRevert": "សង្កត់ Alt ដើម្បីដកការជ្រើសរើសធាតុដែលត្រូវបានសម្គាល់សម្រាប់ការលុប",
"firefox_clipboard_write": "បើកមុខងារនេះដោយកំណត់ទង់ \"dom.events.asyncClipboard.clipboardItem\" ទៅ \"true\" \nដើម្បីផ្លាស់ប្តូរទង់កម្មវិធីរុករកនៅក្នុង Firefox សូមចូលទៅកាន់ទំព័រ \"about:config\"។"
"firefox_clipboard_write": "បើកមុខងារនេះដោយកំណត់ទង់ \"dom.events.asyncClipboard.clipboardItem\" ទៅ \"true\" \nដើម្បីផ្លាស់ប្តូរទង់កម្មវិធីរុករកនៅក្នុង Firefox សូមចូលទៅកាន់ទំព័រ \"about:config\"។",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "មិនអាចបង្ហាញការមើលជាមុនបាន",
@ -411,7 +427,9 @@
"fileSavedToFilename": "បានរក្សាទុកនៅក្នុង {filename}",
"canvas": "តំបន់គំនូរ",
"selection": "ការជ្រើសរើស",
"pasteAsSingleElement": "ប្រើ {{shortcut}} ដើម្បីបិទភ្ជាប់ជាធាតុតែមួយ,\nឬបិទភ្ជាប់ទៅក្នុងកម្មវិធីនិពន្ធអត្ថបទដែលមានស្រាប់"
"pasteAsSingleElement": "ប្រើ {{shortcut}} ដើម្បីបិទភ្ជាប់ជាធាតុតែមួយ,\nឬបិទភ្ជាប់ទៅក្នុងកម្មវិធីនិពន្ធអត្ថបទដែលមានស្រាប់",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "ថ្លាមើលធ្លុះ",
@ -449,5 +467,36 @@
"shades": "ស្រមោល",
"hexCode": "លេខកូដ hex",
"noShades": "មិនមានស្រមោលសម្រាប់ពណ៌នេះទេ"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "텍스트를 컨테이너에 담기",
"link": {
"edit": "링크 수정하기",
"editEmbed": "링크 & 임베드 수정하기",
"create": "링크 만들기",
"label": "링크"
"createEmbed": "링크 & 임베드 만들기",
"label": "링크",
"labelEmbed": "링크 & 임베드",
"empty": "링크를 지정하지 않았습니다"
},
"lineEditor": {
"edit": "선 수정하기",
@ -160,13 +164,16 @@
"darkMode": "다크 모드",
"lightMode": "밝은 모드",
"zenMode": "젠 모드",
"objectsSnapMode": "다른 요소들에 정렬시키기",
"exitZenMode": "젠 모드 종료하기",
"cancel": "취소",
"clear": "지우기",
"remove": "삭제",
"embed": "임베딩 토글",
"publishLibrary": "게시하기",
"submit": "제출",
"confirm": "확인"
"confirm": "확인",
"embeddableInteractionButton": "클릭하여 상호작용"
},
"alerts": {
"clearReset": "모든 작업 내용이 초기화됩니다. 계속하시겠습니까?",
@ -196,6 +203,7 @@
"imageInsertError": "이미지를 삽입할 수 없습니다. 나중에 다시 시도 하십시오",
"fileTooBig": "파일이 너무 큽니다. 최대 크기는 {{maxSize}} 입니다.",
"svgImageInsertError": "SVG 이미지를 삽입하지 못했습니다. SVG 문법이 유효하지 않은 것 같습니다.",
"failedToFetchImage": "이미지를 가져오는데 실패했습니다.",
"invalidSVGString": "유효하지 않은 SVG입니다.",
"cannotResolveCollabServer": "협업 서버에 접속하는데 실패했습니다. 페이지를 새로고침하고 다시 시도해보세요.",
"importLibraryError": "라이브러리를 불러오지 못했습니다.",
@ -206,6 +214,10 @@
"line2": "이 기능으로 인해 화이트보드의 <bold>텍스트 요소들</bold>이 손상될 수 있습니다.",
"line3": "저희는 해당 기능을 비활성화하는 것을 강력히 권장 드립니다. 비활성화 방법에 대해서는 <link>이 게시글</link>을 참고해주세요.",
"line4": "만약 이 설정을 껐음에도 텍스트 요소들이 올바르게 표시되지 않는다면, 저희 Github에 <issueLink>이슈</issueLink>를 올려주시거나 <discordLink>Discord</discordLink>로 알려주세요."
},
"libraryElementTypeError": {
"embeddable": "임베드 요소들은 라이브러리에 추가할 수 없습니다.",
"image": "라이브러리에 이미지 삽입 기능은 곧 지원될 예정입니다!"
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "선택한 도형에 대해서 링크를 추가/업데이트",
"eraser": "지우개",
"frame": "프레임 도구",
"embeddable": "웹 임베드",
"laser": "레이저 포인터",
"hand": "손 (패닝 도구)",
"extraTools": "다른 도구"
},
@ -237,6 +251,7 @@
"linearElement": "여러 점을 연결하려면 클릭하고, 직선을 그리려면 바로 드래그하세요.",
"freeDraw": "클릭 후 드래그하세요. 완료되면 놓으세요.",
"text": "팁: 선택 툴로 아무 곳이나 더블 클릭해 텍스트를 추가할 수도 있습니다.",
"embeddable": "클릭 및 드래그하여 웹사이트 임베드 만들기",
"text_selected": "더블 클릭 또는 ENTER를 눌러서 텍스트 수정",
"text_editing": "ESC나 CtrlOrCmd+ENTER를 눌러서 수정을 종료하기",
"linearElementMulti": "마지막 지점을 클릭하거나 Esc 또는 Enter 키를 눌러 완료하세요.",
@ -252,7 +267,8 @@
"bindTextToElement": "Enter 키를 눌러서 텍스트 추가하기",
"deepBoxSelect": "CtrlOrCmd 키를 눌러서 깊게 선택하고, 드래그하지 않도록 하기",
"eraserRevert": "Alt를 눌러서 삭제하도록 지정된 요소를 되돌리기",
"firefox_clipboard_write": "이 기능은 설정에서 \"dom.events.asyncClipboard.clipboardItem\" 플래그를 \"true\"로 설정하여 활성화할 수 있습니다. Firefox에서 브라우저 플래그를 수정하려면, \"about:config\" 페이지에 접속하세요."
"firefox_clipboard_write": "이 기능은 설정에서 \"dom.events.asyncClipboard.clipboardItem\" 플래그를 \"true\"로 설정하여 활성화할 수 있습니다. Firefox에서 브라우저 플래그를 수정하려면, \"about:config\" 페이지에 접속하세요.",
"disableSnapping": "CtrlOrCmd 키를 눌러서 다른 요소와의 정렬 무시하기"
},
"canvasError": {
"cannotShowPreview": "미리보기를 볼 수 없습니다",
@ -411,7 +427,9 @@
"fileSavedToFilename": "{filename} 로 저장되었습니다",
"canvas": "캔버스",
"selection": "선택한 요소",
"pasteAsSingleElement": "단일 요소로 붙여넣거나, 기존 텍스트 에디터에 붙여넣으려면 {{shortcut}} 을 사용하세요."
"pasteAsSingleElement": "단일 요소로 붙여넣거나, 기존 텍스트 에디터에 붙여넣으려면 {{shortcut}} 을 사용하세요.",
"unableToEmbed": "이 URL의 임베딩이 허용되지 않았습니다. GitHub에 이슈를 남겨서 이 URL이 화이트리스트에 등재될 수 있도록 요청하세요",
"unrecognizedLinkFormat": "임베딩하려는 링크의 형식이 잘못된 것 같습니다. 원본 사이트에서 제공하는 \"임베딩\" 텍스트를 그대로 붙여 넣어 주세요"
},
"colors": {
"transparent": "투명",
@ -444,10 +462,41 @@
}
},
"colorPicker": {
"mostUsedCustomColors": "많이 쓰이는 사용 색상들",
"mostUsedCustomColors": "가장 많이 사용 색상들",
"colors": "색상",
"shades": "색조",
"hexCode": "Hex 코드",
"noShades": "사용할 수 있는 색조가 없음"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "이미지로 내보내기",
"button": "이미지로 내보내기",
"description": "나중에 다시 불러올 수 있도록 화면 데이터를 이미지로 내보냅니다."
},
"saveToDisk": {
"title": "디스크에 저장",
"button": "디스크에 저장",
"description": "나중에 다시 불러올 수 있도록 화면 데이터를 내보냅니다."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Excalidraw+로 내보내기",
"description": "화면을 당신의 Excalidraw+ 작업 공간으로 저장합니다."
}
},
"modal": {
"loadFromFile": {
"title": "파일에서 불러오기",
"button": "파일에서 불러오기",
"description": "파일을 불러오면 <bold>현재 작성된 데이터를 덮어쓰게 됩니다</bold>.<br></br>다음 옵션 중 하나를 선택하여 작업물을 백업해 둘 수 있습니다."
},
"shareableLink": {
"title": "주소에서 불러오기",
"button": "컨텐츠를 덮어쓰기",
"description": "외부 작업물을 불러오면 <bold>현재 작성된 데이터를 덮어쓰게 됩니다</bold>.<br></br>다음 옵션 중 하나를 선택하여 작업물을 백업해 둘 수 있습니다."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "دەق لە چوارچێوەیەکدا بپێچە",
"link": {
"edit": "دەستکاریکردنی بەستەر",
"editEmbed": "",
"create": "دروستکردنی بەستەر",
"label": "بەستەر"
"createEmbed": "",
"label": "بەستەر",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "دەستکاری کردنی دێڕ",
@ -160,13 +164,16 @@
"darkMode": "دۆخی تاریک",
"lightMode": "دۆخی ڕووناک",
"zenMode": "دۆخی زێن",
"objectsSnapMode": "",
"exitZenMode": "بەجێهێشتنی دۆخی زێن",
"cancel": "هەڵوەشاندنەوە",
"clear": "خاوێنکردنەوە",
"remove": "لابردن",
"embed": "",
"publishLibrary": "بڵاوکردنەوە",
"submit": "پێشکەشکردن",
"confirm": "دوپاتکردنەوە"
"confirm": "دوپاتکردنەوە",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "ئەمە هەموو تابلۆکە خاوێن دەکاتەوە، دڵنیایت؟",
@ -196,6 +203,7 @@
"imageInsertError": "نەیتوانی وێنە داخڵ بکات. دواتر هەوڵ بدە",
"fileTooBig": "فایلەکە زۆر گەورەیە. زۆرترین قەبارەی ڕێگەپێدراو {{maxSize}}}.",
"svgImageInsertError": "نەیتوانی وێنەی SVG داخڵ بکات. نیشانەی ئێس ڤی جی نادروست دیارە.",
"failedToFetchImage": "",
"invalidSVGString": "ئێس ڤی جی نادروستە.",
"cannotResolveCollabServer": "ناتوانێت پەیوەندی بکات بە سێرڤەری کۆلاب. تکایە لاپەڕەکە دووبارە باربکەوە و دووبارە هەوڵ بدەوە.",
"importLibraryError": "نەیتوانی کتێبخانە بار بکات",
@ -206,6 +214,10 @@
"line2": "ئەمە ئەکرێ ببێتە هۆی تێکدانی <bold>دانە دەقییەکان</bold> لە وێنەکێشانەکانتدا.",
"line3": "ئێمە بە توندی پێشنیاری لەکارخستنی ئەم ڕێکخستنە دەکەین. بۆ لە کارخستنی دەتوانیت بەم <link>هەنگاوانە</link>دا بڕۆیت.",
"line4": "ئەگەر لەکارخستنی ئەم ڕێکخستنە نەبوە هۆی چاککردنەوەی پێشاندانی دانە دەقییەکان، تکایە <issueLink>کێشە</issueLink>یەک بکەرەوە لەسەر گیتهەبەکەمان، یان بۆمان بنوسە لەسەر <discordLink>دیسکۆرد</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "زیادکردن/ نوێکردنەوەی لینک بۆ شێوەی دیاریکراو",
"eraser": "سڕەر",
"frame": "ئامرازی چوارچێوە",
"embeddable": "",
"laser": "",
"hand": "دەست (ئامرازی پانکردن)",
"extraTools": "ئامرازی زیاتر"
},
@ -237,6 +251,7 @@
"linearElement": "کرتە بکە بۆ دەستپێکردنی چەند خاڵێک، ڕایبکێشە بۆ یەک هێڵ",
"freeDraw": "کرتە بکە و ڕایبکێشە، کاتێک تەواو بوویت دەست هەڵگرە",
"text": "زانیاری: هەروەها دەتوانیت دەق زیادبکەیت بە دوو کرتەکردن لە هەر شوێنێک لەگەڵ ئامڕازی دەستنیشانکردن",
"embeddable": "",
"text_selected": "دووجار کلیک بکە یان ENTER بکە بۆ دەستکاریکردنی دەق",
"text_editing": "بۆ تەواوکردنی دەستکاریکردنەکە Escape یان Ctrl/Cmd+ENTER بکە",
"linearElementMulti": "کلیک لەسەر کۆتا خاڵ بکە یان Escape یان Enter بکە بۆ تەواوکردن",
@ -252,7 +267,8 @@
"bindTextToElement": "بۆ زیادکردنی دەق enter بکە",
"deepBoxSelect": "CtrlOrCmd ڕابگرە بۆ هەڵبژاردنی قووڵ، و بۆ ڕێگریکردن لە ڕاکێشان",
"eraserRevert": "بۆ گەڕاندنەوەی ئەو توخمانەی کە بۆ سڕینەوە نیشانە کراون، Alt ڕابگرە",
"firefox_clipboard_write": "ئەم تایبەتمەندییە بە ئەگەرێکی زۆرەوە دەتوانرێت چالاک بکرێت بە ڕێکخستنی ئاڵای \"dom.events.asyncClipboard.clipboardItem\" بۆ \"true\". بۆ گۆڕینی ئاڵاکانی وێبگەڕ لە فایەرفۆکسدا، سەردانی لاپەڕەی \"about:config\" بکە."
"firefox_clipboard_write": "ئەم تایبەتمەندییە بە ئەگەرێکی زۆرەوە دەتوانرێت چالاک بکرێت بە ڕێکخستنی ئاڵای \"dom.events.asyncClipboard.clipboardItem\" بۆ \"true\". بۆ گۆڕینی ئاڵاکانی وێبگەڕ لە فایەرفۆکسدا، سەردانی لاپەڕەی \"about:config\" بکە.",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "ناتوانرێ پێشبینین پیشان بدرێت",
@ -411,7 +427,9 @@
"fileSavedToFilename": "هەڵگیراوە بۆ {filename}",
"canvas": "تابلۆ",
"selection": "دەستنیشانکراوەکان",
"pasteAsSingleElement": "بۆ دانانەوە وەکو یەک توخم یان دانانەوە بۆ نێو دەسکاریکەرێکی دەق کە بوونی هەیە {{shortcut}} بەکاربهێنە"
"pasteAsSingleElement": "بۆ دانانەوە وەکو یەک توخم یان دانانەوە بۆ نێو دەسکاریکەرێکی دەق کە بوونی هەیە {{shortcut}} بەکاربهێنە",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "ڕوون",
@ -449,5 +467,36 @@
"shades": "سێبەرەکان",
"hexCode": "کۆدی هێکس",
"noShades": "هیچ سێبەرێک بۆ ئەم ڕەنگە بەردەست نییە"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "Redeguoti nuorodą",
"editEmbed": "",
"create": "Sukurti nuorodą",
"label": "Nuoroda"
"createEmbed": "",
"label": "Nuoroda",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
@ -160,13 +164,16 @@
"darkMode": "Tamsus režimas",
"lightMode": "Šviesus režimas",
"zenMode": "„Zen“ režimas",
"objectsSnapMode": "",
"exitZenMode": "Išeiti iš „Zen“ režimo",
"cancel": "Atšaukti",
"clear": "Išvalyti",
"remove": "Pašalinti",
"embed": "",
"publishLibrary": "Paskelbti",
"submit": "Pateikti",
"confirm": "Patvirtinti"
"confirm": "Patvirtinti",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "",
@ -196,6 +203,7 @@
"imageInsertError": "Nepyko įkelti paveiksliuko. Pabandyk vėliau...",
"fileTooBig": "Per didelis failas. Didžiausias leidžiamas dydis yra {{maxSize}}.",
"svgImageInsertError": "Nepavyko įtraukti SVG paveiksliuko. Panašu, jog SVG yra nevalidus.",
"failedToFetchImage": "",
"invalidSVGString": "Nevalidus SVG.",
"cannotResolveCollabServer": "Nepavyko prisijungti prie serverio bendradarbiavimui. Perkrauk puslapį ir pabandyk prisijungti dar kartą.",
"importLibraryError": "Nepavyko įkelti bibliotekos",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Pridėti / Atnaujinti pasirinktos figūros nuorodą",
"eraser": "Trintukas",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Paspaudimai sukurs papildomus taškus, nepertraukiamas tempimas sukurs liniją",
"freeDraw": "Spausk ir tempk, paleisk kai norėsi pabaigti",
"text": "Užuomina: tekstą taip pat galima pridėti bet kur su dvigubu pelės paspaudimu, kol parinkas žymėjimo įrankis",
"embeddable": "",
"text_selected": "",
"text_editing": "",
"linearElementMulti": "",
@ -252,7 +267,8 @@
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Išsaugota į {filename}",
"canvas": "drobė",
"selection": "",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Permatoma",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Ietilpināt tekstu figurā",
"link": {
"edit": "Rediģēt saiti",
"editEmbed": "",
"create": "Izveidot saiti",
"label": "Saite"
"createEmbed": "",
"label": "Saite",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Rediģēt līniju",
@ -160,13 +164,16 @@
"darkMode": "Tumšais režīms",
"lightMode": "Gaišais režīms",
"zenMode": "Zen režīms",
"objectsSnapMode": "",
"exitZenMode": "Pamest Zen režīmu",
"cancel": "Atcelt",
"clear": "Notīrīt",
"remove": "Noņemt",
"embed": "",
"publishLibrary": "Publicēt",
"submit": "Iesniegt",
"confirm": "Apstiprināt"
"confirm": "Apstiprināt",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Šī funkcija notīrīs visu tāfeli. Vai turpināt?",
@ -196,6 +203,7 @@
"imageInsertError": "Nevarēja ievietot attēlu. Mēģiniet vēlāk...",
"fileTooBig": "Datne ir par lielu. Lielākais atļautais izmērs ir {{maxSize}}.",
"svgImageInsertError": "Nevarēja ievietot SVG attēlu. Šķiet, ka SVG marķējums nav derīgs.",
"failedToFetchImage": "",
"invalidSVGString": "Nederīgs SVG.",
"cannotResolveCollabServer": "Nevarēja savienoties ar sadarbošanās serveri. Lūdzu, pārlādējiet lapu un mēģiniet vēlreiz.",
"importLibraryError": "Nevarēja ielādēt bibliotēku",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Pievienot/rediģēt atlasītās figūras saiti",
"eraser": "Dzēšgumija",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "Roka (panoramēšanas rīks)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Klikšķiniet, lai sāktu zīmēt vairākus punktus; velciet, lai zīmētu līniju",
"freeDraw": "Spiediet un velciet; atlaidiet, kad pabeidzat",
"text": "Ieteikums: lai pievienotu tekstu, varat arī jebkur dubultklikšķināt ar atlases rīku",
"embeddable": "",
"text_selected": "Dubultklikšķiniet vai spiediet ievades taustiņu, lai rediģētu tekstu",
"text_editing": "Spiediet iziešanas taustiņu vai CtrlOrCmd+ENTER, lai beigtu rediģēt",
"linearElementMulti": "Klikšķiniet uz pēdējā punkta vai spiediet izejas vai ievades taustiņu, lai pabeigtu",
@ -252,7 +267,8 @@
"bindTextToElement": "Spiediet ievades taustiņu, lai pievienotu tekstu",
"deepBoxSelect": "Turient nospiestu Ctrl vai Cmd, lai atlasītu dziļumā un lai nepieļautu objektu pavilkšanu",
"eraserRevert": "Turiet Alt, lai noņemtu elementus no dzēsšanas atlases",
"firefox_clipboard_write": "Šis iestatījums var tikt ieslēgts ar \"dom.events.asyncClipboard.clipboardItem\" marķieri pārslēgtu uz \"true\". Lai mainītu pārlūka marķierus Firefox, apmeklē \"about:config\" lapu."
"firefox_clipboard_write": "Šis iestatījums var tikt ieslēgts ar \"dom.events.asyncClipboard.clipboardItem\" marķieri pārslēgtu uz \"true\". Lai mainītu pārlūka marķierus Firefox, apmeklē \"about:config\" lapu.",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Nevar rādīt priekšskatījumu",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Saglabāts kā {filename}",
"canvas": "tāfeli",
"selection": "atlasi",
"pasteAsSingleElement": "Izmantojiet {{shortcut}}, lai ielīmētu kā jaunu elementu, vai ielīmētu esošā teksta lauciņā"
"pasteAsSingleElement": "Izmantojiet {{shortcut}}, lai ielīmētu kā jaunu elementu, vai ielīmētu esošā teksta lauciņā",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Caurspīdīgs",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "मजकूर कंटेनर मधे मोडून दाखवा",
"link": {
"edit": "दुवा संपादन",
"editEmbed": "",
"create": "दुवा तयार करा",
"label": "दुवा"
"createEmbed": "",
"label": "दुवा",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "रेघ संपादन",
@ -160,13 +164,16 @@
"darkMode": "अंधार स्थिथि",
"lightMode": "उजेड स्थिति",
"zenMode": "ध्यानग्र स्थिति",
"objectsSnapMode": "वस्तूंपासून पकड़ा",
"exitZenMode": "ध्यानग्र स्थितितून बाहेर",
"cancel": "रद्द",
"clear": "स्वछ",
"remove": "हटवा",
"embed": "",
"publishLibrary": "प्रकाशित करा",
"submit": "जमा करा",
"confirm": "पुष्टि करा"
"confirm": "पुष्टि करा",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "पटल स्वच्छ होणार, तुम्हाला खात्री आहे का?",
@ -196,6 +203,7 @@
"imageInsertError": "प्रतिमा आत घालता येत नाही. नंतर पुन्हा प्रयत्न करा...",
"fileTooBig": "फाइल फार मोठी आहे. आकाराची कमाल परवानगी {{maxSize}} आहे.",
"svgImageInsertError": "एस-वी-जी प्रतिमा आत घालवू शकलो नाही. एस-वी-जी-मार्क-अप यंत्र अयोग्य आहे.",
"failedToFetchImage": "",
"invalidSVGString": "अयोग्य एस-वी-जी.",
"cannotResolveCollabServer": "कॉलेब-सर्वर हे पोहोचत नाही आहे. पान परत लोड करायचा प्रयत्न करावे.",
"importLibraryError": "संग्रह प्रतिस्थापित नाही करता आला",
@ -206,6 +214,10 @@
"line2": "हे तुमच्या चित्रांच्या <bold>पाठ तत्वांनां </bold> खंडित करू शकतात.",
"line3": "तुम्हाला आमच्या कड़ून खूप आग्रह आहे की हे सेटिंग्स मधले चयन नका करु. <link>हे अनुक्रम </link> हे कसे करावे हे दाखवु शकते.",
"line4": "ही सेटिंग अक्षम करूनही पृष्ठ योग्यरित्या प्रदर्शित होत नसल्यास, आमच्या GitHub वर <issueLink>समस्या</issueLink> सबमिट करा, किव्हा <discordLink>डिस्कॉर्ड</discordLink> वर आम्हाला लिहा"
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "निवडलेल्या आकारासाठी दुवा जोडा/बदल करा",
"eraser": "खोड रबर",
"frame": "",
"embeddable": "",
"laser": "लेसर टॉर्च",
"hand": "हात ( सरकवण्या चे उपकरण)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "अनेक बिंदु साठी क्लिक करा, रेघे साठी ड्रैग करा",
"freeDraw": "क्लिक आणि ड्रैग करा, झालं तेव्हा सोडा",
"text": "टीप: तुम्हीं निवड यंत्रानी कोठेही दुहेरी क्लिक करून टेक्स्ट जोडू शकता",
"embeddable": "",
"text_selected": "लेखन संपादन साठी दुहेरी क्लिक करा किव्हा एंटर दाबा",
"text_editing": "संपादन संपवायचं असल्यास एस्केप दाबा किव्हा कंट्रोल या कम्मांड बरोबार एंटर दाबा",
"linearElementMulti": "शेवटच्या बिंदु वर क्लिक करा किव्हा एस्केप या एंटर दाबा",
@ -252,7 +267,8 @@
"bindTextToElement": "मजकूर जोडण्यासाठी एंटर की दाबा",
"deepBoxSelect": "खोल निवड ह्या साठी कंट्रोल किव्हा कमांड दाबून ठेवा, आणि बाहेर खेचणे वाचवण्या साठी पण",
"eraserRevert": "खोडण्या साठी घेतलेल्या वस्तु ना घेण्या साठी Alt दाबून ठेवावे",
"firefox_clipboard_write": "हे वैशिष्ट्य \"dom.events.asyncClipboard.clipboardItem\" फ्लॅग \"सत्य\" वर सेट करून शक्यतो सक्षम केले जाऊ शकते. Firefox मध्ये ब्राउझर फ्लॅग बदलण्यासाठी, \"about:config\" पृष्ठावर जा."
"firefox_clipboard_write": "हे वैशिष्ट्य \"dom.events.asyncClipboard.clipboardItem\" फ्लॅग \"सत्य\" वर सेट करून शक्यतो सक्षम केले जाऊ शकते. Firefox मध्ये ब्राउझर फ्लॅग बदलण्यासाठी, \"about:config\" पृष्ठावर जा.",
"disableSnapping": "स्नैपिंग अक्षम करण्या साठी CtrlOrCmd दाबून ठेवा"
},
"canvasError": {
"cannotShowPreview": "पूर्वावलोकन दाखवू शकत नाही",
@ -411,7 +427,9 @@
"fileSavedToFilename": "{filename} मधे जतन झाली",
"canvas": "पटल",
"selection": "निवड",
"pasteAsSingleElement": "एक घटक म्हणून चिपकावण्या साठी {{shortcut}} वापरा,\nकिंवा विद्यमान मजकूर संपादकात चिपकवा"
"pasteAsSingleElement": "एक घटक म्हणून चिपकावण्या साठी {{shortcut}} वापरा,\nकिंवा विद्यमान मजकूर संपादकात चिपकवा",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "पारदर्शक",
@ -449,5 +467,36 @@
"shades": "रंगछटा",
"hexCode": "हेक्स कोड",
"noShades": "ह्या रंगाच्या छटा उपलब्ध नाहित"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "छवि स्वरूपे निर्यात करा",
"button": "छवि स्वरूपे निर्यात करा",
"description": "सीन डेटा बाहेर एक फ़ाइल मधे जतन करा, त्या फ़ाइल मधुन तो डेटा नंतर परत आणु शकता."
},
"saveToDisk": {
"title": "डिस्क मधे जतन करा",
"button": "डिस्क मधे जतन करा",
"description": "सीन डेटा बाहेर एक फ़ाइल मधे जतन करा, त्या फ़ाइल मधुन तो डेटा नंतर परत आणु शकता."
},
"excalidrawPlus": {
"title": "एक्षकालीड्रॉ +",
"button": "एक्षकाली ड्रॉ+ मधे निर्यात करा",
"description": "दृष्य तुमच्या एक्षकालीड्रॉ+ चा कार्यस्थल मधे जतन करा."
}
},
"modal": {
"loadFromFile": {
"title": "फ़ाइल मधुन लोड करा",
"button": "फ़ाइल मधुन लोड करा",
"description": "फ़ाइल मधुन लोड केल्या वर ते <bold>तुमचा सध्याचा कामा ठिकाणि एईल </bold><br></br> तुम्हीं तुमचं चित्र एकाधं खाली दिलेलं विकल्प निवडुन पहले सुरक्षीत करु शकता."
},
"shareableLink": {
"title": "लिंक पासून लोड करा",
"button": "माझ सध्याचे कार्य बदला",
"description": "बाहरी चित्र लोड केल्या वर ते <bold>तुमचा सध्याचा कामा ठिकाणि एईल </bold><br></br> तुम्हीं तुमचं चित्र एकाधं खाली दिलेलं विकल्प निवडुन पहले सुरक्षीत करु शकता."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "",
"editEmbed": "",
"create": "",
"label": ""
"createEmbed": "",
"label": "",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
@ -160,13 +164,16 @@
"darkMode": "",
"lightMode": "",
"zenMode": "",
"objectsSnapMode": "",
"exitZenMode": "ဇင်မြင်ကွင်းမှထွက်",
"cancel": "",
"clear": "",
"remove": "",
"embed": "",
"publishLibrary": "",
"submit": "",
"confirm": ""
"confirm": "",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "ကားချပ်တစ်ခုလုံးရှင်းလင်းပါတော့မည်။ အတည်ပြုပါ။",
@ -196,6 +203,7 @@
"imageInsertError": "",
"fileTooBig": "",
"svgImageInsertError": "",
"failedToFetchImage": "",
"invalidSVGString": "",
"cannotResolveCollabServer": "",
"importLibraryError": "",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "",
"eraser": "",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "အမှတ်များချမှတ်ရေးဆွဲရန်ကလစ်နှိပ်ပါ၊ မျဉ်းတစ်ကြောင်းတည်းအတွက် တရွတ်ဆွဲပါ။",
"freeDraw": "ကလစ်နှိပ်၍ တရွတ်ဆွဲပါ၊ ပြီးလျှင်လွှတ်ပါ။",
"text": "မှတ်ချက်။ ။မည်သည့်ကိရိယာရွေးထားသည်ဖြစ်စေ ကလစ်နှစ်ချက်နှိပ်၍စာသားထည့်နိုင်သည်",
"embeddable": "",
"text_selected": "",
"text_editing": "",
"linearElementMulti": "နောက်ဆုံးအမှတ်ပေါ်တွင်ကလစ်နှိပ်ခြင်း၊ Escape (သို့) Enter နှိပ်ခြင်းတို့ဖြင့်အဆုံးသတ်နိုင်",
@ -252,7 +267,8 @@
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "နမူနာမပြသနိုင်ပါ",
@ -411,7 +427,9 @@
"fileSavedToFilename": "",
"canvas": "",
"selection": "",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "La tekst flyte i en beholder",
"link": {
"edit": "Rediger lenke",
"editEmbed": "Rediger lenke og bygg inn",
"create": "Opprett lenke",
"label": "Lenke"
"createEmbed": "Opprett lenke og bygg inn",
"label": "Lenke",
"labelEmbed": "Lenk & bygg inn",
"empty": "Ingen lenke er valgt"
},
"lineEditor": {
"edit": "Rediger linje",
@ -160,13 +164,16 @@
"darkMode": "Mørk modus",
"lightMode": "Lys modus",
"zenMode": "Zen-modus",
"objectsSnapMode": "",
"exitZenMode": "Avslutt zen-modus",
"cancel": "Avbryt",
"clear": "Tøm",
"remove": "Fjern",
"embed": "Slå av/på innebygging",
"publishLibrary": "Publiser",
"submit": "Send inn",
"confirm": "Bekreft"
"confirm": "Bekreft",
"embeddableInteractionButton": "Klikk for å samhandle"
},
"alerts": {
"clearReset": "Dette vil tømme lerretet. Er du sikker?",
@ -196,6 +203,7 @@
"imageInsertError": "Kunne ikke sette inn bildet. Prøv igjen senere...",
"fileTooBig": "Filen er for stor. Maksimal tillatt størrelse er {{maxSize}}.",
"svgImageInsertError": "Kunne ikke sette inn SVG-bilde. SVG-koden ser ugyldig ut.",
"failedToFetchImage": "",
"invalidSVGString": "Ugyldig SVG.",
"cannotResolveCollabServer": "Kunne ikke koble til samarbeidsserveren. Vennligst oppdater siden og prøv på nytt.",
"importLibraryError": "Kunne ikke laste bibliotek",
@ -206,6 +214,10 @@
"line2": "Dette kan resultere i å bryte <bold>tekst-elementene</bold> i tegningene.",
"line3": "Vi anbefaler på det sterkeste å deaktivere denne innstillingen. Du kan følge <link>disse trinnene</link> om hvordan du gjør det.",
"line4": "Hvis deaktivering av denne innstillingen ikke fikser visningen av tekstelementer, vennligst åpne en <issueLink>sak</issueLink> på vår GitHub, eller skriv oss på <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "Innebygde elementer kan ikke legges til i biblioteket.",
"image": "Støtte for å legge til bilder i biblioteket kommer snart!"
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Legg til / oppdater link for en valgt figur",
"eraser": "Viskelær",
"frame": "Rammeverktøy",
"embeddable": "Nettinnbygging",
"laser": "",
"hand": "Hånd (panoreringsverktøy)",
"extraTools": "Flere verktøy"
},
@ -237,6 +251,7 @@
"linearElement": "Klikk for å starte linje med flere punkter, eller dra for en enkel linje",
"freeDraw": "Klikk og dra, slipp når du er ferdig",
"text": "Tips: du kan også legge til tekst ved å dobbeltklikke hvor som helst med utvalgsverktøyet",
"embeddable": "Klikk og dra for å opprette en nettside innebygd",
"text_selected": "Dobbeltklikk eller trykk ENTER for å redigere tekst",
"text_editing": "Trykk Escape eller Ctrl/Cmd+Enter for å fullføre redigering",
"linearElementMulti": "Klikk på siste punkt eller trykk Escape eller Enter for å fullføre",
@ -252,7 +267,8 @@
"bindTextToElement": "Trykk Enter for å legge til tekst",
"deepBoxSelect": "Hold CTRL/CMD for å markere dypt og forhindre flytting",
"eraserRevert": "Hold Alt for å reversere elementene merket for sletting",
"firefox_clipboard_write": "Denne funksjonen kan sannsynligvis aktiveres ved å sette \"dom.events.asyncClipboard.clipboardItem\" flagget til \"true\". For å endre nettleserens flagg i Firefox, besøk \"about:config\"-siden."
"firefox_clipboard_write": "Denne funksjonen kan sannsynligvis aktiveres ved å sette \"dom.events.asyncClipboard.clipboardItem\" flagget til \"true\". For å endre nettleserens flagg i Firefox, besøk \"about:config\"-siden.",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Kan ikke vise forhåndsvisning",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Lagret til {filename}",
"canvas": "lerret",
"selection": "utvalg",
"pasteAsSingleElement": "Bruk {{shortcut}} for å lime inn som ett enkelt element,\neller lim inn i en eksisterende tekstbehandler"
"pasteAsSingleElement": "Bruk {{shortcut}} for å lime inn som ett enkelt element,\neller lim inn i en eksisterende tekstbehandler",
"unableToEmbed": "Innbygging av denne nettadressen er ikke tillatt. Oppret en sak på GitHub for å be om url-hvitelisting",
"unrecognizedLinkFormat": "Linken du bygget inn samsvarer ikke med det forventede formatet. Prøv å lime inn \"bygg inn\"-strengen fra kildesiden"
},
"colors": {
"transparent": "Gjennomsiktig",
@ -449,5 +467,36 @@
"shades": "Toner",
"hexCode": "Heksadesimal kode",
"noShades": "Ingen toner tilgjengelig for denne fargen"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Eksporter som bilde",
"button": "Eksporter som bilde",
"description": "Eksporter scene-dataene til en fil som du kan importere fra senere."
},
"saveToDisk": {
"title": "Lagre til disk",
"button": "Lagre til disk",
"description": "Eksporter scene-dataene til en fil som du kan importere fra senere."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Eksporter til Excalidraw+",
"description": "Lagre scenen til ditt Excalidraw+-arbeidsområde."
}
},
"modal": {
"loadFromFile": {
"title": "Last inn fra fil",
"button": "Last inn fra fil",
"description": "Å laste fra en fil vil <bold>erstatte ditt eksisterende innhold</bold>.<br></br>Du kan sikkerhetskopiere tegningen din først ved å bruke en av valgene under."
},
"shareableLink": {
"title": "Last inn fra lenke",
"button": "Erstatt innholdet mitt",
"description": "Lasting av ekstern tegning vil <bold>erstatte ditt eksisterende innhold</bold>.<br></br>Du kan sikkerhetskopiere tegningen din først ved å bruke en av valgene nedenfor."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "Wijzig link",
"editEmbed": "Link bewerken & insluiten",
"create": "Maak link",
"label": "Link"
"createEmbed": "Link maken en insluiten",
"label": "Link",
"labelEmbed": "Link toevoegen & insluiten",
"empty": "Er is geen link ingesteld"
},
"lineEditor": {
"edit": "Bewerk regel",
@ -160,13 +164,16 @@
"darkMode": "Donkere modus",
"lightMode": "Lichte modus",
"zenMode": "Zen modus",
"objectsSnapMode": "",
"exitZenMode": "Verlaat zen modus",
"cancel": "Annuleren",
"clear": "Wissen",
"remove": "Verwijderen",
"embed": "Insluiten in-/uitschakelen",
"publishLibrary": "Publiceren",
"submit": "Versturen",
"confirm": "Bevestigen"
"confirm": "Bevestigen",
"embeddableInteractionButton": "Klik voor interactie"
},
"alerts": {
"clearReset": "Dit zal het hele canvas verwijderen. Weet je het zeker?",
@ -196,6 +203,7 @@
"imageInsertError": "Afbeelding invoegen mislukt. Probeer het later opnieuw...",
"fileTooBig": "Bestand is te groot. Maximale grootte is {{maxSize}}.",
"svgImageInsertError": "Kon geen SVG-afbeelding invoegen. De SVG-opmaak ziet er niet geldig uit.",
"failedToFetchImage": "",
"invalidSVGString": "Ongeldige SVG.",
"cannotResolveCollabServer": "Kan geen verbinding maken met de collab server. Herlaad de pagina en probeer het opnieuw.",
"importLibraryError": "Kon bibliotheek niet laden",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "Ingesloten elementen kunnen niet worden toegevoegd aan de bibliotheek.",
"image": "Ondersteuning voor het toevoegen van afbeeldingen aan de bibliotheek komt binnenkort!"
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Link toevoegen / bijwerken voor een geselecteerde vorm",
"eraser": "Gum",
"frame": "",
"embeddable": "Web insluiten",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Klik om meerdere punten te starten, sleep voor één lijn",
"freeDraw": "Klik en sleep, laat los als je klaar bent",
"text": "Tip: je kunt tekst toevoegen door ergens dubbel te klikken met de selectietool",
"embeddable": "Klink-sleep om een website-insluiting te maken",
"text_selected": "Dubbelklik of druk op ENTER om tekst te bewerken",
"text_editing": "Druk op Escape of CtrlOrCmd+ENTER om het bewerken te voltooien",
"linearElementMulti": "Klik op het laatste punt of druk op Escape of Enter om te stoppen",
@ -252,7 +267,8 @@
"bindTextToElement": "Druk op enter om tekst toe te voegen",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Kan voorbeeld niet tonen",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Opgeslagen als {filename}",
"canvas": "canvas",
"selection": "selectie",
"pasteAsSingleElement": "Gebruik {{shortcut}} om te plakken als een enkel element,\nof plak in een bestaande teksteditor"
"pasteAsSingleElement": "Gebruik {{shortcut}} om te plakken als een enkel element,\nof plak in een bestaande teksteditor",
"unableToEmbed": "Het insluiten van deze url is momenteel niet toegestaan. Zet een probleem op GitHub om de URL op de whitelist te zetten",
"unrecognizedLinkFormat": "De link die u hebt ingesloten komt niet overeen met het verwachte formaat. Probeer de 'embed' string van de bronsite te plakken"
},
"colors": {
"transparent": "Transparant",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "Rediger lenke",
"editEmbed": "",
"create": "Lag lenke",
"label": "Lenke"
"createEmbed": "",
"label": "Lenke",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
@ -160,13 +164,16 @@
"darkMode": "Mørk modus",
"lightMode": "Lys modus",
"zenMode": "Zen-modus",
"objectsSnapMode": "",
"exitZenMode": "Avslutt zen-modus",
"cancel": "Avbryt",
"clear": "Tøm",
"remove": "Fjern",
"embed": "",
"publishLibrary": "Publiser",
"submit": "Send inn",
"confirm": "Stadfest"
"confirm": "Stadfest",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Dette vil tømme lerretet. Er du sikker?",
@ -196,6 +203,7 @@
"imageInsertError": "Kunne ikkje sette inn biletet. Prøv igjen seinare...",
"fileTooBig": "Fila er for stor. Maksimal tillate storleik er {{maxSize}}.",
"svgImageInsertError": "Kunne ikkje sette inn SVG-biletet. SVG-koden ser ugyldig ut.",
"failedToFetchImage": "",
"invalidSVGString": "Ugyldig SVG.",
"cannotResolveCollabServer": "Kunne ikkje kople til samarbeidsserveren. Ver vennleg å oppdatere inn sida og prøv på nytt.",
"importLibraryError": "",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Legg til/ oppdater lenke til valt figur",
"eraser": "Viskelêr",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Klikk for å starte linje med fleire punkt, eller drag for ei enkel linje",
"freeDraw": "Klikk og drag, slepp når du er ferdig",
"text": "Tips: du kan òg leggje til tekst ved å dobbeltklikke kor som helst med utvalgsverktyet",
"embeddable": "",
"text_selected": "Dobbelklikk eller trykk ENTER for å redigere teksta",
"text_editing": "Trykk Escape eller CtrlOrCmd+ENTER for å fullføre redigeringa",
"linearElementMulti": "Klikk på siste punkt eller trykk Escape eller Enter for å fullføre",
@ -252,7 +267,8 @@
"bindTextToElement": "Trykk på enter for å legge til tekst",
"deepBoxSelect": "Hald inne Ctrl / Cmd for å velje djupt, og forhindre flytting",
"eraserRevert": "Hald inne Alt for å reversere markering av element for sletting",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Kan ikkje vise førehandsvising",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Lagra som {filename}",
"canvas": "lerret",
"selection": "val",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Gjennomsiktig",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "Modificar lo ligam",
"editEmbed": "",
"create": "Crear un ligam",
"label": "Ligam"
"createEmbed": "",
"label": "Ligam",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Modificar la linha",
@ -160,13 +164,16 @@
"darkMode": "Mòde escur",
"lightMode": "Mòde clar",
"zenMode": "Mòde escur",
"objectsSnapMode": "",
"exitZenMode": "Sortir del mòde zen",
"cancel": "Anullar",
"clear": "Escafar",
"remove": "Tirar",
"embed": "",
"publishLibrary": "Publicar",
"submit": "Enviar",
"confirm": "Confirmar"
"confirm": "Confirmar",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Aquò suprimirà lo canabàs complèt. O volètz vertadièrament?",
@ -196,6 +203,7 @@
"imageInsertError": "Insercion dimatge impossibla. Tornatz ensajar mai tard...",
"fileTooBig": "Fichièr tròp pesuc. La talha maximala autorizada es {{maxSize}}.",
"svgImageInsertError": "Insercion dimatge SVG impossibla. Las balisas SVG semblan invalidas.",
"failedToFetchImage": "",
"invalidSVGString": "SVG invalid.",
"cannotResolveCollabServer": "Connexion impossibla al servidor collab. Mercés de recargar la pagina e tornar ensajar.",
"importLibraryError": "Impossible de cargar la bibliotèca",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Apondre/Actualizar lo ligam per una fòrma seleccionada",
"eraser": "Goma",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "Man (aisina de desplaçament de la vista)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Clicatz per començar mantun punt, lisatz per una sola linha",
"freeDraw": "Clicatz e lisatz, relargatz un còp acabat",
"text": "Astúcia: podètz tanben apondre de tèxt en doble clicant ont que siá amb laisina de seleccion",
"embeddable": "",
"text_selected": "Clicatz dos còps o quichatz ENTRADA per modificar lo tèxt",
"text_editing": "Quichatz ESCAPAR o CtrlOrCmd+ENTRADA per acabar la modificacion",
"linearElementMulti": "Clicatz sul darrièr punt o quichatz Ecap o Entrada per acabar",
@ -252,7 +267,8 @@
"bindTextToElement": "Quichatz Entrada per apondre de tèxte",
"deepBoxSelect": "Gardar CtrlOCmd per una seleccion gropada e empachar lo desplaçament",
"eraserRevert": "Tenètz quichat Alt per anullar los elements marcats per supression",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Afichatge impossible de lapercebut",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Enregistrat jos {filename}",
"canvas": "canabàs",
"selection": "seleccion",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Transparéncia",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "ਪਾਠ ਨੂੰ ਕੰਟੇਨਰ ਵਿੱਚ ਇਕੱਠਾ ਕਰੋ",
"link": {
"edit": "ਕੜੀ ਸੋਧੋ",
"editEmbed": "",
"create": "ਕੜੀ ਬਣਾਓ",
"label": "ਕੜੀ"
"createEmbed": "",
"label": "ਕੜੀ",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "ਪੰਕਤੀ ਸੋਧੋ",
@ -160,13 +164,16 @@
"darkMode": "ਡਾਰਕ ਮੋਡ",
"lightMode": "ਲਾਇਟ ਮੋਡ",
"zenMode": "ਜ਼ੈੱਨ ਮੋਡ",
"objectsSnapMode": "",
"exitZenMode": "ਜ਼ੈੱਨ ਮੋਡ 'ਚੋਂ ਬਾਹਰ ਨਿਕਲੋ",
"cancel": "ਰੱਦ ਕਰੋ",
"clear": "ਸਾਫ਼ ਕਰੋ",
"remove": "ਹਟਾਓ",
"embed": "",
"publishLibrary": "ਪ੍ਰਕਾਸ਼ਤ ਕਰੋ",
"submit": "ਜਮ੍ਹਾ ਕਰਵਾਓ",
"confirm": "ਪੁਸ਼ਟੀ ਕਰੋ"
"confirm": "ਪੁਸ਼ਟੀ ਕਰੋ",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "ਇਹ ਸਾਰਾ ਕੈਨਵਸ ਸਾਫ ਕਰ ਦੇਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਇੰਝ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?",
@ -196,6 +203,7 @@
"imageInsertError": "ਚਿੱਤਰ ਸ਼ਾਮਲ ਨਹੀਂ ਜਾ ਸਕਿਆ, ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ...",
"fileTooBig": "ਫਾਈਲ ਬਹੁਤ ਜ਼ਿਆਦਾ ਵੱਡੀ ਹੈ। ਵੱਧ-ਤੋਂ-ਵੱਧ ਪ੍ਰਵਾਨਤ ਅਕਾਰ {{maxSize}} ਹੈ।",
"svgImageInsertError": "SVG ਤਸਵੀਰ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰ ਸਕੇ। SVG ਮਾਰਕ-ਅੱਪ ਨਜਾਇਜ਼ ਲੱਗ ਰਿਹਾ ਹੈ।",
"failedToFetchImage": "",
"invalidSVGString": "SVG ਨਜਾਇਜ਼ ਹੈ।",
"cannotResolveCollabServer": "",
"importLibraryError": "ਲਾਇਬ੍ਰੇਰੀ ਲੋਡ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "",
"eraser": "ਰਬੜ",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਬਿੰਦੂਆਂ ਲਈ ਕਲਿੱਕ ਕਰਕੇ ਸ਼ੁਰੂਆਤ ਕਰੋ, ਇਕਹਿਰੀ ਲਕੀਰ ਲਈ ਘਸੀਟੋ",
"freeDraw": "ਕਲਿੱਕ ਕਰਕੇ ਘਸੀਟੋ, ਪੂਰਾ ਹੋਣ 'ਤੇ ਛੱਡ ਦਿਉ",
"text": "ਨੁਸਖਾ: ਤੁਸੀਂ ਚੋਣਕਾਰ ਸੰਦ ਰਾਹੀਂ ਕਿਤੇ ਵੀ ਡਬਲ-ਕਲਿੱਕ ਕਰਕੇ ਵੀ ਪਾਠ ਜੋੜ ਸਕਦੇ ਹੋ",
"embeddable": "",
"text_selected": "ਪਾਠ ਨੂੰ ਸੋਧਣ ਲਈ ਡਬਲ-ਕਲਿੱਕ ਕਰੋ ਜਾਂ ਐਂਟਰ ਦਬਾਓ",
"text_editing": "ਸੋਧ ਮੁਕੰਮਲ ਕਰਨ ਲਈ ਐਸਕੇਪ (Esc) ਜਾਂ Ctrl-ਜਾਂ-Cmd+ਐਂਟਰ (enter) ਦਬਾਓ",
"linearElementMulti": "ਮੁਕੰਮਲ ਕਰਨ ਲਈ ਆਖਰੀ ਬਿੰਦੂ 'ਤੇ ਕਲਿੱਕ ਕਰੋ ਜਾਂ ਇਸਕੇਪ ਜਾਂ ਐਂਟਰ ਦਬਾਓ",
@ -252,7 +267,8 @@
"bindTextToElement": "ਪਾਠ ਜੋੜਨ ਲਈ ਐੰਟਰ ਦਬਾਓ",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "ਝਲਕ ਨਹੀਂ ਦਿਖਾ ਸਕਦੇ",
@ -411,7 +427,9 @@
"fileSavedToFilename": "{filename} ਵਿੱਚ ਸਾਂਭੀ",
"canvas": "ਕੈਨਵਸ",
"selection": "ਚੋਣ",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "ਪਾਰਦਰਸ਼ੀ",
@ -449,5 +467,36 @@
"shades": "ਸ਼ੇਡਾਂ",
"hexCode": "ਹੈਕਸ ਕੋਡ",
"noShades": "ਇਸ ਰੰਗ ਦੀ ਕੋਈ ਸ਼ੇਡ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -1,56 +1,56 @@
{
"ar-SA": 79,
"az-AZ": 20,
"bg-BG": 54,
"bn-BD": 59,
"ca-ES": 87,
"cs-CZ": 98,
"da-DK": 33,
"ar-SA": 99,
"az-AZ": 18,
"bg-BG": 75,
"bn-BD": 55,
"ca-ES": 81,
"cs-CZ": 91,
"da-DK": 31,
"de-DE": 100,
"el-GR": 92,
"el-GR": 85,
"en": 100,
"es-ES": 88,
"eu-ES": 100,
"fa-IR": 88,
"fi-FI": 87,
"fr-FR": 88,
"gl-ES": 88,
"he-IL": 86,
"hi-IN": 77,
"hu-HU": 76,
"id-ID": 94,
"it-IT": 98,
"ja-JP": 88,
"kaa": 18,
"kab-KAB": 87,
"kk-KZ": 21,
"km-KH": 94,
"es-ES": 96,
"eu-ES": 99,
"fa-IR": 87,
"fi-FI": 81,
"fr-FR": 98,
"gl-ES": 90,
"he-IL": 81,
"hi-IN": 75,
"hu-HU": 70,
"id-ID": 96,
"it-IT": 99,
"ja-JP": 95,
"kaa": 34,
"kab-KAB": 80,
"kk-KZ": 20,
"km-KH": 87,
"ko-KR": 100,
"ku-TR": 100,
"lt-LT": 55,
"lv-LV": 88,
"mr-IN": 95,
"my-MM": 40,
"nb-NO": 100,
"nl-NL": 83,
"nn-NO": 76,
"oc-FR": 86,
"pa-IN": 89,
"pl-PL": 98,
"pt-BR": 98,
"pt-PT": 94,
"ku-TR": 92,
"lt-LT": 51,
"lv-LV": 82,
"mr-IN": 92,
"my-MM": 37,
"nb-NO": 99,
"nl-NL": 79,
"nn-NO": 71,
"oc-FR": 79,
"pa-IN": 82,
"pl-PL": 100,
"pt-BR": 96,
"pt-PT": 88,
"ro-RO": 98,
"ru-RU": 98,
"si-LK": 9,
"sk-SK": 98,
"ru-RU": 94,
"si-LK": 8,
"sk-SK": 99,
"sl-SI": 100,
"sv-SE": 100,
"ta-IN": 84,
"th-TH": 38,
"tr-TR": 86,
"uk-UA": 96,
"vi-VN": 56,
"zh-CN": 100,
"zh-HK": 25,
"ta-IN": 85,
"th-TH": 46,
"tr-TR": 91,
"uk-UA": 99,
"vi-VN": 51,
"zh-CN": 99,
"zh-HK": 24,
"zh-TW": 100
}

View File

@ -104,13 +104,17 @@
"excalidrawLib": "Biblioteka Excalidraw",
"decreaseFontSize": "Zmniejsz rozmiar czcionki",
"increaseFontSize": "Zwiększ rozmiar czcionki",
"unbindText": "Rozłącz tekst",
"unbindText": "Odłącz tekst od kontenera",
"bindText": "Połącz tekst z kontenerem",
"createContainerFromText": "Zawijaj tekst w kontenerze",
"link": {
"edit": "Edytuj łącze",
"editEmbed": "Edytuj i osadź link",
"create": "Utwórz łącze",
"label": "Łącze"
"createEmbed": "Stwórz i osadź link",
"label": "Łącze",
"labelEmbed": "Podlinkuj i osadź",
"empty": "Brakujący link"
},
"lineEditor": {
"edit": "Edytuj linię",
@ -124,8 +128,8 @@
},
"statusPublished": "Opublikowano",
"sidebarLock": "Panel boczny zawsze otwarty",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"selectAllElementsInFrame": "Zaznacz wszystkie elementy w ramce",
"removeAllElementsFromFrame": "Usuń wszystkie elementy z ramki",
"eyeDropper": "Wybierz kolor z płótna"
},
"library": {
@ -160,13 +164,16 @@
"darkMode": "Ciemny motyw",
"lightMode": "Jasny motyw",
"zenMode": "Tryb Zen",
"objectsSnapMode": "Przyciąganie do obiektów",
"exitZenMode": "Wyjdź z trybu Zen",
"cancel": "Anuluj",
"clear": "Wyczyść",
"remove": "Usuń",
"embed": "Przełącz osadzenie",
"publishLibrary": "Opublikuj",
"submit": "Prześlij",
"confirm": "Zatwierdź"
"confirm": "Zatwierdź",
"embeddableInteractionButton": "Kliknij, aby wejść w interakcję"
},
"alerts": {
"clearReset": "To spowoduje usunięcie wszystkiego z dokumentu. Czy chcesz kontynuować?",
@ -196,6 +203,7 @@
"imageInsertError": "Nie udało się wstawić obrazu. Spróbuj ponownie później...",
"fileTooBig": "Plik jest zbyt duży. Maksymalny dozwolony rozmiar to {{maxSize}}.",
"svgImageInsertError": "Nie udało się wstawić obrazu SVG. Znacznik SVG wygląda na nieprawidłowy.",
"failedToFetchImage": "Nie udało się załadować obrazu.",
"invalidSVGString": "Nieprawidłowy SVG.",
"cannotResolveCollabServer": "Nie można połączyć się z serwerem współpracy w czasie rzeczywistym. Proszę odświeżyć stronę i spróbować ponownie.",
"importLibraryError": "Wystąpił błąd w trakcie ładowania biblioteki",
@ -206,6 +214,10 @@
"line2": "Może to doprowadzić do złamania <bold>elementów tekstu</bold> na rysunkach.",
"line3": "Zdecydowanie zalecamy wyłączenie tego ustawienia. Możesz wykonać <link>te kroki</link>, aby to zrobić.",
"line4": "Jeśli wyłączenie tego ustawienia nie naprawia wyświetlania elementów tekstowych, zgłoś <issueLink>problem</issueLink> na naszym GitHubie lub napisz do nas na <discordLink>Discordzie</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "Elementy osadzone nie mogą zostać dodane do biblioteki.",
"image": "Dodawania obrazów do biblioteki nadejdzie wkrótce!"
}
},
"toolBar": {
@ -223,9 +235,11 @@
"penMode": "Tryb pióra — zapobiegaj dotknięciom",
"link": "Dodaj/aktualizuj link dla wybranego kształtu",
"eraser": "Gumka",
"frame": "",
"frame": "Ramka",
"embeddable": "Osadzenie z internetu",
"laser": "Wskaźnik laserowy",
"hand": "Ręka (narzędzie do przesuwania)",
"extraTools": ""
"extraTools": "Więcej narzędzi"
},
"headings": {
"canvasActions": "Narzędzia",
@ -237,6 +251,7 @@
"linearElement": "Naciśnij, aby zrobić punkt, przeciągnij, aby narysować linię",
"freeDraw": "Naciśnij i przeciągnij by rysować, puść kiedy skończysz",
"text": "Wskazówka: możesz również dodać tekst klikając dwukrotnie gdziekolwiek za pomocą narzędzia zaznaczania",
"embeddable": "Kliknij i przeciągnij, aby stworzyć osadzenie strony",
"text_selected": "Kliknij dwukrotnie lub naciśnij ENTER, aby edytować tekst",
"text_editing": "Naciśnij Escape lub Ctrl (Cmd w macOS) + ENTER, aby zakończyć edycję",
"linearElementMulti": "Aby zakończyć krzywą, ponownie kliknij w ostatni punkt, bądź naciśnij Esc albo Enter",
@ -252,7 +267,8 @@
"bindTextToElement": "Wciśnij enter, aby dodać tekst",
"deepBoxSelect": "Przytrzymaj CtrlOrCmd, aby wybrać w obrębie grupy i uniknąć przeciągania",
"eraserRevert": "Przytrzymaj Alt, aby przywrócić elementy oznaczone do usunięcia",
"firefox_clipboard_write": "Ta funkcja może być włączona poprzez ustawienie flagi \"dom.events.asyncClipboard.clipboardItem\" na \"true\". Aby zmienić flagi przeglądarki w Firefox, odwiedź stronę \"about:config\"."
"firefox_clipboard_write": "Ta funkcja może być włączona poprzez ustawienie flagi \"dom.events.asyncClipboard.clipboardItem\" na \"true\". Aby zmienić flagi przeglądarki w Firefox, odwiedź stronę \"about:config\".",
"disableSnapping": "Przytrzymaj Ctrl lub Cmd, aby wyłączyć przyciąganie"
},
"canvasError": {
"cannotShowPreview": "Nie można wyświetlić podglądu",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Zapisano jako {filename}",
"canvas": "płótno",
"selection": "zaznaczenie",
"pasteAsSingleElement": "Użyj {{shortcut}}, aby wkleić jako pojedynczy element,\nlub wklej do istniejącego edytora tekstu"
"pasteAsSingleElement": "Użyj {{shortcut}}, aby wkleić jako pojedynczy element,\nlub wklej do istniejącego edytora tekstu",
"unableToEmbed": "Osadzenie tego linku jest obecnie niedozwolone. Zgłoś propozycję na portalu GitHub, aby dodać go do listy dozwolonych wyjątków",
"unrecognizedLinkFormat": "Osadzony link ma niewłaściwy format. Spróbuj wkleić całą zawartość pola \"embed\" z oryginalnej strony."
},
"colors": {
"transparent": "Przezroczysty",
@ -449,5 +467,36 @@
"shades": "Odcienie",
"hexCode": "Kod HEX",
"noShades": "Brak dostępnych odcieni dla tego koloru"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Eksportuj jako obraz",
"button": "Eksportuj jako obraz",
"description": "Eksportuj zawartość sceny jako obraz z możliwością importowania."
},
"saveToDisk": {
"title": "Zapisz na dysku",
"button": "Zapisz na dysku",
"description": "Eksportuj zawartość sceny jako plik z możliwością importowania."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Eksportuj do Excalidraw+",
"description": "Zapisz scenę do swojego obszaru roboczego Excalidraw+."
}
},
"modal": {
"loadFromFile": {
"title": "Wczytaj z pliku",
"button": "Wczytaj z pliku",
"description": "Wczytanie z pliku <bold>nadpisze istniejącą zawartość</bold>.<br></br>Możesz najpierw utworzyć kopię zapasową swojego rysunku, używając jednej z poniższych opcji."
},
"shareableLink": {
"title": "Wczytaj z linku",
"button": "Nadpisz moją zawartość",
"description": "Wczytanie zewnętrznego pliku <bold>nadpisze istniejącą zawartość</bold>.<br></br>Możesz najpierw utworzyć kopię zapasową swojego rysunku, używając jednej z poniższych opcji."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Envolver texto em um contêiner",
"link": {
"edit": "Editar link",
"editEmbed": "",
"create": "Criar link",
"label": "Link"
"createEmbed": "",
"label": "Link",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Editar linha",
@ -124,9 +128,9 @@
},
"statusPublished": "Publicado",
"sidebarLock": "Manter barra lateral aberta",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"eyeDropper": ""
"selectAllElementsInFrame": "Selecionar todos os elementos no quadro",
"removeAllElementsFromFrame": "Remover todos os elementos do quadro",
"eyeDropper": "Escolher cor da tela"
},
"library": {
"noItems": "Nenhum item adicionado ainda...",
@ -160,13 +164,16 @@
"darkMode": "Modo escuro",
"lightMode": "Modo claro",
"zenMode": "Modo Zen",
"objectsSnapMode": "",
"exitZenMode": "Sair do modo zen",
"cancel": "Cancelar",
"clear": "Limpar",
"remove": "Remover",
"embed": "",
"publishLibrary": "Publicar",
"submit": "Enviar",
"confirm": "Confirmar"
"confirm": "Confirmar",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Isto irá limpar toda a tela. Você tem certeza?",
@ -196,6 +203,7 @@
"imageInsertError": "Não foi possível inserir imagem. Tente novamente mais tarde...",
"fileTooBig": "O arquivo é muito grande. O tamanho máximo permitido é {{maxSize}}.",
"svgImageInsertError": "Não foi possível inserir a imagem SVG. A marcação SVG parece inválida.",
"failedToFetchImage": "",
"invalidSVGString": "SVG Inválido.",
"cannotResolveCollabServer": "Não foi possível conectar-se ao servidor colaborativo. Por favor, recarregue a página e tente novamente.",
"importLibraryError": "Não foi possível carregar a biblioteca",
@ -206,6 +214,10 @@
"line2": "Isso pode acabar quebrando <bold>Elementos de Texto</bold> em seus desenhos.",
"line3": "Recomendamos fortemente desativar essa configuração. Você pode acessar o <link>passo a passo</link> sobre como fazer isso.",
"line4": "Se desativar essa configuração não corrigir a exibição de elementos de texto, por favor abra uma <issueLink>issue</issueLink> em nosso GitHub, ou mande uma mensagem em nosso <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -223,9 +235,11 @@
"penMode": "Modo caneta — impede o toque",
"link": "Adicionar/Atualizar link para uma forma selecionada",
"eraser": "Borracha",
"frame": "",
"frame": "Ferramenta de quadro",
"embeddable": "",
"laser": "",
"hand": "Mão (ferramenta de rolagem)",
"extraTools": ""
"extraTools": "Mais ferramentas"
},
"headings": {
"canvasActions": "Ações da tela",
@ -237,6 +251,7 @@
"linearElement": "Clique para iniciar vários pontos, arraste para uma única linha",
"freeDraw": "Toque e arraste, solte quando terminar",
"text": "Dica: você também pode adicionar texto clicando duas vezes em qualquer lugar com a ferramenta de seleção",
"embeddable": "",
"text_selected": "Clique duplo ou tecle ENTER para editar o texto",
"text_editing": "Pressione Esc ou Ctrl/Cmd+ENTER para encerrar a edição",
"linearElementMulti": "Clique no último ponto ou pressione Escape ou Enter para terminar",
@ -252,7 +267,8 @@
"bindTextToElement": "Pressione Enter para adicionar o texto",
"deepBoxSelect": "Segure Ctrl/Cmd para seleção profunda e para evitar arrastar",
"eraserRevert": "Segure a tecla Alt para inverter os elementos marcados para exclusão",
"firefox_clipboard_write": "Esse recurso pode ser ativado configurando a opção \"dom.events.asyncClipboard.clipboardItem\" como \"true\". Para alterar os sinalizadores do navegador no Firefox, visite a página \"about:config\"."
"firefox_clipboard_write": "Esse recurso pode ser ativado configurando a opção \"dom.events.asyncClipboard.clipboardItem\" como \"true\". Para alterar os sinalizadores do navegador no Firefox, visite a página \"about:config\".",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Não é possível mostrar pré-visualização",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Salvo em {filename}",
"canvas": "tela",
"selection": "seleção",
"pasteAsSingleElement": "Use {{shortcut}} para colar como um único elemento,\nou cole em um editor de texto já existente"
"pasteAsSingleElement": "Use {{shortcut}} para colar como um único elemento,\nou cole em um editor de texto já existente",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Transparente",
@ -449,5 +467,36 @@
"shades": "Tons",
"hexCode": "Código hexadecimal",
"noShades": "Sem tons disponíveis para essa cor"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Exportar como imagem",
"button": "Exportar como imagem",
"description": "Exportar os dados da cena para um arquivo que você poderá importar mais tarde."
},
"saveToDisk": {
"title": "Salvar no computador",
"button": "Salvar no computador",
"description": "Exportar os dados da cena para um arquivo que você poderá importar mais tarde."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Exportar para Excalidraw+",
"description": "Salvar a cena na sua área de trabalho Excalidraw+."
}
},
"modal": {
"loadFromFile": {
"title": "Carregar de arquivo",
"button": "Carregar de arquivo",
"description": "Carregar de um arquivo irá <bold> substituir o conteúdo existente</bold>.<br></br>Você pode salvar seu desenho primeiro usando uma das opções abaixo."
},
"shareableLink": {
"title": "Carregar de um link",
"button": "Substituir meu conteúdo",
"description": "Carregar um desenho externo irá <bold> substituir seu conteúdo existente</bold>.<br></br>Você pode salvar seu desenho antes utilizando uma das opções abaixo."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Envolver texto num recipiente",
"link": {
"edit": "Editar ligação",
"editEmbed": "",
"create": "Criar ligação",
"label": "Ligação"
"createEmbed": "",
"label": "Ligação",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Editar linha",
@ -160,13 +164,16 @@
"darkMode": "Modo escuro",
"lightMode": "Modo claro",
"zenMode": "Modo zen",
"objectsSnapMode": "",
"exitZenMode": "Sair do modo zen",
"cancel": "Cancelar",
"clear": "Limpar",
"remove": "Remover",
"embed": "",
"publishLibrary": "Publicar",
"submit": "Enviar",
"confirm": "Confirmar"
"confirm": "Confirmar",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Isto irá limpar toda a área de desenho. Tem a certeza?",
@ -196,6 +203,7 @@
"imageInsertError": "Não foi possível inserir a imagem, tente novamente mais tarde...",
"fileTooBig": "O ficheiro é muito grande. O tamanho máximo permitido é {{maxSize}}.",
"svgImageInsertError": "Não foi possível inserir a imagem SVG. A marcação SVG parece inválida.",
"failedToFetchImage": "",
"invalidSVGString": "SVG inválido.",
"cannotResolveCollabServer": "Não foi possível fazer a ligação ao servidor colaborativo. Por favor, volte a carregar a página e tente novamente.",
"importLibraryError": "Não foi possível carregar a biblioteca",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Acrescentar/ Adicionar ligação para uma forma seleccionada",
"eraser": "Borracha",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "Mão (ferramenta de movimento da tela)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Clique para iniciar vários pontos, arraste para uma única linha",
"freeDraw": "Clique e arraste, large quando terminar",
"text": "Dica: também pode adicionar texto clicando duas vezes em qualquer lugar com a ferramenta de seleção",
"embeddable": "",
"text_selected": "Clique duas vezes ou pressione a tecla Enter para editar o texto",
"text_editing": "Pressione a tecla Escape ou CtrlOrCmd+ENTER para terminar a edição",
"linearElementMulti": "Clique no último ponto ou pressione Escape ou Enter para terminar",
@ -252,7 +267,8 @@
"bindTextToElement": "Carregue Enter para acrescentar texto",
"deepBoxSelect": "Mantenha a tecla CtrlOrCmd carregada para selecção profunda, impedindo o arrastamento",
"eraserRevert": "Carregue também em Alt para reverter os elementos marcados para serem apagados",
"firefox_clipboard_write": "Esta função pode provavelmente ser ativada definindo a opção \"dom.events.asyncClipboard.clipboardItem\" como \"true\". Para alterar os sinalizadores do navegador no Firefox, visite a página \"about:config\"."
"firefox_clipboard_write": "Esta função pode provavelmente ser ativada definindo a opção \"dom.events.asyncClipboard.clipboardItem\" como \"true\". Para alterar os sinalizadores do navegador no Firefox, visite a página \"about:config\".",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Não é possível mostrar uma pré-visualização",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Guardado como {filename}",
"canvas": "área de desenho",
"selection": "seleção",
"pasteAsSingleElement": "Usar {{shortcut}} para colar como um único elemento,\nou colar num editor de texto existente"
"pasteAsSingleElement": "Usar {{shortcut}} para colar como um único elemento,\nou colar num editor de texto existente",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Transparente",
@ -449,5 +467,36 @@
"shades": "Tons",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "Guardar no disco",
"button": "Guardar no disco",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "Carregar a partir de ficheiro",
"button": "Carregar a partir de ficheiro",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Încadrare text într-un container",
"link": {
"edit": "Editare URL",
"editEmbed": "Editare URL și încorporare",
"create": "Creare URL",
"label": "URL"
"createEmbed": "Creare URL și încorporare",
"label": "URL",
"labelEmbed": "URL și încorporare",
"empty": "Nu este setat niciun URL"
},
"lineEditor": {
"edit": "Editare linie",
@ -160,13 +164,16 @@
"darkMode": "Mod întunecat",
"lightMode": "Mod luminos",
"zenMode": "Mod zen",
"objectsSnapMode": "Ancorare la obiecte",
"exitZenMode": "Ieșire din modul zen",
"cancel": "Anulare",
"clear": "Ștergere",
"remove": "Eliminare",
"embed": "Comutare încorporare",
"publishLibrary": "Publicare",
"submit": "Trimitere",
"confirm": "Confirmare"
"confirm": "Confirmare",
"embeddableInteractionButton": "Clic pentru interacționare"
},
"alerts": {
"clearReset": "Această opțiune va șterge întreaga pânză. Confirmi?",
@ -196,6 +203,7 @@
"imageInsertError": "Imaginea nu a putut fi introdusă. Reîncearcă mai târziu...",
"fileTooBig": "Fișierul este prea mare. Dimensiunea maximă permisă este de {{maxSize}}.",
"svgImageInsertError": "Imaginea SVG nu a putut fi introdus. Marcajul SVG pare invalid.",
"failedToFetchImage": "",
"invalidSVGString": "SVG invalid.",
"cannotResolveCollabServer": "Nu a putut fi realizată conexiunea la serverul de colaborare. Reîncarcă pagina și încearcă din nou.",
"importLibraryError": "Biblioteca nu a putut fi încărcată",
@ -206,6 +214,10 @@
"line2": "Acest lucru poate duce la întreruperea <bold>elementelor text</bold> din desene.",
"line3": "Îți recomandăm ferm să dezactivezi această setare. Poți urma <link>acești pași</link> pentru a face acest lucru.",
"line4": "Dacă dezactivarea acestei setări nu duce la remedierea afișării elementelor text, deschide un tichet de <issueLink>problemă</issueLink> pe pagina noastră de GitHub sau scrie-ne pe <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "Elementele încorporabile nu pot fi adăugate la bibliotecă.",
"image": "În curând vor putea fi adăugate imagini în bibliotecă!"
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Adăugare/actualizare URL pentru forma selectată",
"eraser": "Radieră",
"frame": "",
"embeddable": "Încorporare web",
"laser": "Indicator laser",
"hand": "Mână (instrument de panoramare)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Dă clic pentru a crea mai multe puncte, glisează pentru a forma o singură linie",
"freeDraw": "Dă clic pe pânză și glisează cursorul, apoi eliberează-l când ai terminat",
"text": "Sfat: poți adăuga text și dând dublu clic oriunde cu instrumentul de selecție",
"embeddable": "Dă clic și trage pentru a crea un cod de încorporare de pagină web",
"text_selected": "Dă dublu clic sau apasă tasta Enter pentru a edita textul",
"text_editing": "Apasă tasta Escape sau Ctrl sau Cmd + Enter pentru a finaliza editarea",
"linearElementMulti": "Dă clic pe ultimul punct sau apasă tasta Escape sau tasta Enter pentru a termina",
@ -252,7 +267,8 @@
"bindTextToElement": "Apasă tasta Enter pentru a adăuga text",
"deepBoxSelect": "Ține apăsată tasta Ctrl sau Cmd pentru a efectua selectarea de adâncime și pentru a preveni glisarea",
"eraserRevert": "Ține apăsată tasta Alt pentru a anula elementele marcate pentru ștergere",
"firefox_clipboard_write": "Această caracteristică poate fi probabil activată prin setarea preferinței „dom.events.asyncClipboard.clipboardItem” ca „true”. Pentru a schimba preferințele navigatorului în Firefox, accesează pagina „about:config”."
"firefox_clipboard_write": "Această caracteristică poate fi probabil activată prin setarea preferinței „dom.events.asyncClipboard.clipboardItem” ca „true”. Pentru a schimba preferințele navigatorului în Firefox, accesează pagina „about:config”.",
"disableSnapping": "Ține apăsat CtrlOrCmd pentru a dezactiva ancorarea"
},
"canvasError": {
"cannotShowPreview": "Nu se poate afișa previzualizarea",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Salvat în {filename}",
"canvas": "pânza",
"selection": "selecția",
"pasteAsSingleElement": "Folosește {{shortcut}} pentru a insera ca un singur element\nsau insera într-un editor de text existent"
"pasteAsSingleElement": "Folosește {{shortcut}} pentru a insera ca un singur element\nsau insera într-un editor de text existent",
"unableToEmbed": "Încorporarea acestui URL nu este permisă momentan. Deschideți un tichet cu probleme pe GitHub pentru a solicita adăugarea acestui URL în lista albă",
"unrecognizedLinkFormat": "URL-ul pe care l-ai încorporat nu coincide cu formatul așteptat. Încearcă să lipești șirul „de încorporat” furnizat de pagina sursă"
},
"colors": {
"transparent": "Transparent",
@ -449,5 +467,36 @@
"shades": "Nuanțe",
"hexCode": "Cod hexa",
"noShades": "Nu este disponibilă nicio nuanță pentru această culoare"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Exportare ca imagine",
"button": "Exportare ca imagine",
"description": "Exportă datele scenei ca fișier din care poți importa mai târziu."
},
"saveToDisk": {
"title": "Salvare pe disc",
"button": "Salvare pe disc",
"description": "Exportă datele scenei pe un fișier din care poți importa mai târziu."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Exportare în Excalidraw+",
"description": "Salvează scena în spațiul de lucru Excalidraw+."
}
},
"modal": {
"loadFromFile": {
"title": "Încărcare din fișier",
"button": "Încărcare din fișier",
"description": "Încărcarea dintr-un fișier va <bold>înlocui conținutul existent</bold>.<br></br>Poți face mai întâi o copie de rezervă a desenului folosind una dintre opțiunile de mai jos."
},
"shareableLink": {
"title": "Încărcare din lnk",
"button": "Înlocuiește conținutul meu",
"description": "Încărcarea unui desen extern va <bold>înlocui conținutul existent</bold>.<br></br>Poți face mai întâi o copie de rezervă a desenului folosind una dintre opțiunile de mai jos."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Поместить текст в контейнер",
"link": {
"edit": "Редактировать ссылку",
"editEmbed": "",
"create": "Создать ссылку",
"label": "Ссылка"
"createEmbed": "",
"label": "Ссылка",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Редактирование строки",
@ -160,13 +164,16 @@
"darkMode": "Темная тема",
"lightMode": "Светлая тема",
"zenMode": "Режим Дзен",
"objectsSnapMode": "Привязка к объектам",
"exitZenMode": "Выключить режим концентрации внимания",
"cancel": "Отменить",
"clear": "Очистить",
"remove": "Удалить",
"embed": "",
"publishLibrary": "Опубликовать",
"submit": "Отправить",
"confirm": "Подтвердить"
"confirm": "Подтвердить",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Это очистит весь холст. Вы уверены?",
@ -196,6 +203,7 @@
"imageInsertError": "Не удалось вставить изображение. Попробуйте позже...",
"fileTooBig": "Очень большой файл. Максимально разрешенный размер {{maxSize}}.",
"svgImageInsertError": "Не удалось вставить изображение SVG. Разметка SVG выглядит недействительной.",
"failedToFetchImage": "Не удалось получить изображение.",
"invalidSVGString": "Некорректный SVG.",
"cannotResolveCollabServer": "Не удалось подключиться к серверу совместного редактирования. Перезагрузите страницу и повторите попытку.",
"importLibraryError": "Не удалось загрузить библиотеку",
@ -206,6 +214,10 @@
"line2": "Это может привести к поломке <bold>Текстовых объектов</bold> на рисунке.",
"line3": "Мы настоятельно рекомендуем отключить эту настройку. Для этого нужно выполнить <link>эти шаги</link>.",
"line4": "Если отключение этой настройки не исправит отображение текстовых объектов, создайте <issueLink>issue</issueLink> на нашем GitHub или напишите нам в <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Добавить/обновить ссылку для выбранной фигуры",
"eraser": "Ластик",
"frame": "",
"embeddable": "",
"laser": "Лазерная указка",
"hand": "Рука (перемещение холста)",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Нажмите, чтобы начать несколько точек, перетащите для одной линии",
"freeDraw": "Нажмите и перетаскивайте, отпустите по завершении",
"text": "Совет: при выбранном инструменте выделения дважды щёлкните в любом месте, чтобы добавить текст",
"embeddable": "",
"text_selected": "Дважды щелкните мышью или нажмите ENTER, чтобы редактировать текст",
"text_editing": "Нажмите Escape либо Ctrl или Cmd + ENTER для завершения редактирования",
"linearElementMulti": "Кликните на последней точке или нажмите Escape или Enter чтобы закончить",
@ -252,7 +267,8 @@
"bindTextToElement": "Нажмите Enter для добавления текста",
"deepBoxSelect": "Удерживайте Ctrl или Cmd для глубокого выделения, чтобы предотвратить перетаскивание",
"eraserRevert": "Удерживайте Alt, чтобы вернуть элементы, отмеченные для удаления",
"firefox_clipboard_write": "Эта функция может быть включена при изменении значения флага \"dom.events.asyncClipboard.clipboardItem\" на \"true\". Чтобы изменить флаги браузера в Firefox, посетите страницу \"about:config\"."
"firefox_clipboard_write": "Эта функция может быть включена при изменении значения флага \"dom.events.asyncClipboard.clipboardItem\" на \"true\". Чтобы изменить флаги браузера в Firefox, посетите страницу \"about:config\".",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Не удается отобразить предпросмотр",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Сохранено в {filename}",
"canvas": "холст",
"selection": "выделение",
"pasteAsSingleElement": "Используйте {{shortcut}}, чтобы вставить один объект,\nили вставьте в существующий текстовый редактор"
"pasteAsSingleElement": "Используйте {{shortcut}}, чтобы вставить один объект,\nили вставьте в существующий текстовый редактор",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Прозрачный",
@ -449,5 +467,36 @@
"shades": "Оттенки",
"hexCode": "Шестнадцатеричный код",
"noShades": "Нет доступных оттенков для этого цвета"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Экспортировать как изображение",
"button": "Экспортировать как изображение",
"description": ""
},
"saveToDisk": {
"title": "Сохранить на диск",
"button": "Сохранить на диск",
"description": ""
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Экспорт в Excalidraw+",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "Загрузить из файла",
"button": "Загрузить из файла",
"description": ""
},
"shareableLink": {
"title": "Загрузить по ссылке",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "",
"editEmbed": "",
"create": "",
"label": ""
"createEmbed": "",
"label": "",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
@ -160,13 +164,16 @@
"darkMode": "",
"lightMode": "",
"zenMode": "",
"objectsSnapMode": "",
"exitZenMode": "",
"cancel": "",
"clear": "",
"remove": "",
"embed": "",
"publishLibrary": "",
"submit": "",
"confirm": ""
"confirm": "",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "",
@ -196,6 +203,7 @@
"imageInsertError": "",
"fileTooBig": "",
"svgImageInsertError": "",
"failedToFetchImage": "",
"invalidSVGString": "",
"cannotResolveCollabServer": "",
"importLibraryError": "",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "",
"eraser": "",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "",
"freeDraw": "",
"text": "",
"embeddable": "",
"text_selected": "",
"text_editing": "",
"linearElementMulti": "",
@ -252,7 +267,8 @@
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "",
@ -411,7 +427,9 @@
"fileSavedToFilename": "",
"canvas": "",
"selection": "",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Zabaliť text do kontajneru",
"link": {
"edit": "Upraviť odkaz",
"editEmbed": "Editovať a zapustiť odkaz",
"create": "Vytvoriť odkaz",
"label": "Odkaz"
"createEmbed": "Vytvoriť a zapustiť odkaz",
"label": "Odkaz",
"labelEmbed": "Zapustiť odkaz",
"empty": "Nie je nastavený žiaden odkaz"
},
"lineEditor": {
"edit": "Upraviť čiaru",
@ -124,8 +128,8 @@
},
"statusPublished": "Zverejnené",
"sidebarLock": "Nechať bočný panel otvorený",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"selectAllElementsInFrame": "Vybrať všetky prvky v ráme",
"removeAllElementsFromFrame": "Odstrániť všetky prvky z rámu",
"eyeDropper": "Vybrať farbu z plátna"
},
"library": {
@ -160,13 +164,16 @@
"darkMode": "Tmavý režim",
"lightMode": "Svetlý režim",
"zenMode": "Režim zen",
"objectsSnapMode": "Prichytiť k objektom",
"exitZenMode": "Zrušiť režim zen",
"cancel": "Zrušiť",
"clear": "Vymazať",
"remove": "Odstrániť",
"embed": "Prepnúť zapustenie",
"publishLibrary": "Uverejniť",
"submit": "Potvrdiť",
"confirm": "Potvrdiť"
"confirm": "Potvrdiť",
"embeddableInteractionButton": "Kliknite pre interakciu"
},
"alerts": {
"clearReset": "Týmto sa vyčistí celé plátno. Ste si istí?",
@ -196,6 +203,7 @@
"imageInsertError": "Nepodarilo sa vložiť obrázok. Skúste to znova neskôr...",
"fileTooBig": "Súbor je príliš veľký. Maximálna povolená veľkosť je {{maxSize}}.",
"svgImageInsertError": "Nepodarilo sa vložiť SVG obrázok. SVG formát je pravdepodobne nevalidný.",
"failedToFetchImage": "",
"invalidSVGString": "Nevalidné SVG.",
"cannotResolveCollabServer": "Nepodarilo sa pripojiť ku kolaboračnému serveru. Prosím obnovte stránku a skúste to znovu.",
"importLibraryError": "Nepodarilo sa načítať knižnicu",
@ -206,6 +214,10 @@
"line2": "To môže spôsobiť nesprávne zobrazenie <bold>textových prvkov</bold> vo vašej kresbe.",
"line3": "Dôrazne odporúčame vypnutie toho nastavenia. Môžete tak spraviť vykonaním <link>týchto krokov</link>.",
"line4": "Ak vypnutie toho nastavenia nevyrieši problém so zobrazením textových prvkov, prosím ohláste <issueLink>problém</issueLink> na našom GitHub-e alebo nám napíšte na náš <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "Zapustené prvky nie je možné pridať do knižnice.",
"image": "Podpora pre pridávanie obrázkov do knižnice bude dostupná už čoskoro!"
}
},
"toolBar": {
@ -223,9 +235,11 @@
"penMode": "Režim pera zabrániť dotyku",
"link": "Pridať/ Upraviť odkaz pre vybraný tvar",
"eraser": "Guma",
"frame": "",
"frame": "Nástroj rám",
"embeddable": "Web Embed",
"laser": "",
"hand": "Ruka (nástroj pre pohyb plátna)",
"extraTools": ""
"extraTools": "Ďalšie nástroje"
},
"headings": {
"canvasActions": "Akcie plátna",
@ -237,6 +251,7 @@
"linearElement": "Kliknite na vloženie viacerých bodov, potiahnite na vytvorenie jednej priamky",
"freeDraw": "Kliknite a ťahajte, pustite na ukončenie",
"text": "Tip: text môžete pridať aj dvojklikom kdekoľvek, ak je zvolený nástroj výber",
"embeddable": "Kliknite a ťahajte pre zapustenie webovej stránky",
"text_selected": "Použite dvojklik alebo stlačte Enter na editáciu textu",
"text_editing": "Stlačte Escape alebo CtrlOrCmd+ENTER na ukončenie editovania",
"linearElementMulti": "Kliknite na počiatočný bod alebo stlačte Escape alebo Enter na ukončenie",
@ -252,7 +267,8 @@
"bindTextToElement": "Stlačte enter na pridanie textu",
"deepBoxSelect": "Podržte CtrlOrCmd na výber v skupine alebo zamedzeniu poťiahnutia",
"eraserRevert": "Podržte Alt pre prehodenie položiek určených na vymazanie",
"firefox_clipboard_write": "Táto sa funkcionalita sa dá zapnúť nastavením \"dom.events.asyncClipboard.clipboardItem\" na \"true\". Pre zmenu nastavení vo Firefox-e otvorte stránku \"about:config\"."
"firefox_clipboard_write": "Táto sa funkcionalita sa dá zapnúť nastavením \"dom.events.asyncClipboard.clipboardItem\" na \"true\". Pre zmenu nastavení vo Firefox-e otvorte stránku \"about:config\".",
"disableSnapping": "Podržte CtrlOrCmd pre vypnutie prichytávania"
},
"canvasError": {
"cannotShowPreview": "Nie je možné zobraziť náhľad plátna",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Uložený ako {filename}",
"canvas": "plátna",
"selection": "výberu",
"pasteAsSingleElement": "Použitím {{shortcut}} vložte ako samostatný prvok alebo vložte do existujúceho editovaného textu"
"pasteAsSingleElement": "Použitím {{shortcut}} vložte ako samostatný prvok alebo vložte do existujúceho editovaného textu",
"unableToEmbed": "Zapustenie tejto URL nie je povolené. Vytvorte issue na GitHub-e a požiadajte povolenie tejto URL",
"unrecognizedLinkFormat": "Odkaz, ktorý sa snažíte zapustiť nie je v očakávanom formáte. Prosím skúste vložiť 'odkaz na zdieľanie' poskytnutý zdrojovou webovou stránkou"
},
"colors": {
"transparent": "Priehľadná",
@ -449,5 +467,36 @@
"shades": "Odtiene",
"hexCode": "Hex kód",
"noShades": "Pre túto farbu nie sú dostupné žiadne odtiene"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Exportovať ako obrázok",
"button": "Exportovať ako obrázok",
"description": "Exportovať údaje scény ako obrázok, z ktorého môžu byť neskôr importované."
},
"saveToDisk": {
"title": "Uložiť na disk",
"button": "Uložiť na disk",
"description": "Exportovať údaje scény do súboru, z ktorého môžu byť neskôr importované."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Exportovať ako Excalidraw+",
"description": "Uložiť scénu do vášho Excalidraw+ pracovného priestoru."
}
},
"modal": {
"loadFromFile": {
"title": "Načítať zo súboru",
"button": "Načítať zo súboru",
"description": "Načítanie zo súboru <bold>nahradí váš existujúci obsah</bold>.<br></br>Vašu kresbu môžete zálohovať jednou z nižšie uvedených možností."
},
"shareableLink": {
"title": "Načítať z odkazu",
"button": "Nahradiť môj obsah",
"description": "Načítanie externej kresby <bold>nahradí váš existujúci obsah</bold>.<br></br>Vašu kresbu môžete zálohovať jednou z nižšie uvedených možností."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Zavij besedilo v vsebnik",
"link": {
"edit": "Uredi povezavo",
"editEmbed": "Uredi povezavo in vdelaj",
"create": "Ustvari povezavo",
"label": "Povezava"
"createEmbed": "Ustvari povezavo in vdelaj",
"label": "Povezava",
"labelEmbed": "Povezava in vdelovanje",
"empty": "Povezava ni nastavljena"
},
"lineEditor": {
"edit": "Uredi črto",
@ -160,13 +164,16 @@
"darkMode": "Temni način",
"lightMode": "Svetli način",
"zenMode": "Način Zen",
"objectsSnapMode": "Pripenjanje na predmete",
"exitZenMode": "Zapri način Zen",
"cancel": "Prekliči",
"clear": "Počisti",
"remove": "Odstrani",
"embed": "Preklopi vdelavo",
"publishLibrary": "Objavi",
"submit": "Pošlji",
"confirm": "Potrdi"
"confirm": "Potrdi",
"embeddableInteractionButton": "Kliknite za interakcijo"
},
"alerts": {
"clearReset": "To bo počistilo celotno platno. Ali ste prepričani?",
@ -196,6 +203,7 @@
"imageInsertError": "Vstavljanje slike ni bilo uspešno. Poskusite ponovno kasneje...",
"fileTooBig": "Datoteka je prevelika. Največja dovoljena velikost je {{maxSize}}.",
"svgImageInsertError": "Vstavljanje slike SVG ni uspelo. Oznake SVG so videti neveljavne.",
"failedToFetchImage": "Pridobivanje slike ni uspelo.",
"invalidSVGString": "Neveljaven SVG.",
"cannotResolveCollabServer": "Povezave s strežnikom za sodelovanje ni bilo mogoče vzpostaviti. Ponovno naložite stran in poskusite znova.",
"importLibraryError": "Nalaganje knjižnice ni uspelo",
@ -206,6 +214,10 @@
"line2": "To bi lahko povzročilo motnje v obnašanju <bold>besedilnih elementov</bold> v vaših risbah.",
"line3": "Močno priporočamo, da onemogočite to nastavitev. Sledite <link>tem korakom</link>, kako to storiti.",
"line4": "Če onemogočanje te nastavitve ne popravi prikaza besedilnih elementov, odprite <issueLink>vprašanje</issueLink> na našem GitHubu ali nam pišite na <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "Vdelani elementi ne morejo biti dodani v knjižnico.",
"image": "Podpora za dodajanje slik v knjižnico prihaja kmalu!"
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Dodaj/posodobi povezavo za izbrano obliko",
"eraser": "Radirka",
"frame": "Okvir",
"embeddable": "Spletna vdelava",
"laser": "Laserski kazalec",
"hand": "Roka (orodje za premikanje)",
"extraTools": "Več orodij"
},
@ -237,6 +251,7 @@
"linearElement": "Kliknite za začetek več točk, povlecite za posamezno črto",
"freeDraw": "Kliknite in povlecite, spustite, ko končate",
"text": "Namig: besedilo lahko dodate tudi z dvoklikom kjer koli z orodjem za izbiro",
"embeddable": "Kliknite in povlecite, da ustvarite spletno vdelavo",
"text_selected": "Dvokliknite ali pritisnite tipko Enter, da uredite besedilo",
"text_editing": "Pritisnite tipko Escape ali CtrlOrCmd+Enter za zaključek urejanja",
"linearElementMulti": "Kliknite zadnjo točko ali pritisnite Escape ali Enter, da končate",
@ -252,7 +267,8 @@
"bindTextToElement": "Pritisnite tipko Enter za dodajanje besedila",
"deepBoxSelect": "Držite tipko CtrlOrCmd za globoko izbiro in preprečitev vlečenja",
"eraserRevert": "Pridržite tipko Alt, da razveljavite elemente, označene za brisanje",
"firefox_clipboard_write": "To funkcijo lahko verjetno omogočite z nastavitvijo zastavice \"dom.events.asyncClipboard.clipboardItem\" na \"true\". Če želite spremeniti zastavice brskalnika v Firefoxu, obiščite stran \"about:config\"."
"firefox_clipboard_write": "To funkcijo lahko verjetno omogočite z nastavitvijo zastavice \"dom.events.asyncClipboard.clipboardItem\" na \"true\". Če želite spremeniti zastavice brskalnika v Firefoxu, obiščite stran \"about:config\".",
"disableSnapping": "Držite CtrlOrCmd, da onemogočite pripenjanje"
},
"canvasError": {
"cannotShowPreview": "Predogleda ni bilo mogoče prikazati",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Shranjeno v {filename}",
"canvas": "platno",
"selection": "izbor",
"pasteAsSingleElement": "Uporabite {{shortcut}}, da prilepite kot en element,\n ali prilepite v obstoječ urejevalnik besedil"
"pasteAsSingleElement": "Uporabite {{shortcut}}, da prilepite kot en element,\n ali prilepite v obstoječ urejevalnik besedil",
"unableToEmbed": "Vdelava tega URL-ja trenutno ni dovoljena. Ustvarite vprašanje na GitHub-u in prosite za vmestitev URL-ja na seznam dovoljenih",
"unrecognizedLinkFormat": "Povezava, ki ste jo vdelali, se ne ujema s pričakovano obliko. Poskusite prilepiti niz za vdelavo, ki ste ga prejeli na izvorni strani"
},
"colors": {
"transparent": "Prosojno",
@ -449,5 +467,36 @@
"shades": "Odtenki",
"hexCode": "Hex koda",
"noShades": "Odtenki za to barvo niso na voljo"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Izvozi kot sliko",
"button": "Izvozi kot sliko",
"description": "Izvozite podatke scene kot sliko, iz katere jo lahko pozneje uvozite."
},
"saveToDisk": {
"title": "Shrani na disk",
"button": "Shrani na disk",
"description": "Izvozite podatke scene v datoteko, iz katere jo lahko pozneje uvozite."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Izvozi v Excalidraw+",
"description": "Shrani sceno v svoj delovni prostor Excalidraw+."
}
},
"modal": {
"loadFromFile": {
"title": "Naloži iz datoteke",
"button": "Naloži iz datoteke",
"description": "Nalaganje iz datoteke bo <bold>prepisalo vašo obstoječo vsebino</bold>.<br></br>Svojo risbo lahko najprej varnostno kopirate z eno od spodnjih možnosti."
},
"shareableLink": {
"title": "Naloži iz povezave",
"button": "Zamenjaj mojo vsebino",
"description": "Nalaganje zunanje risbe bo <bold>prepisalo vašo obstoječo vsebino</bold>.<br></br>Svojo risbo lahko najprej varnostno kopirate z eno od spodnjih možnosti."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Radbryt text i en avgränsad yta",
"link": {
"edit": "Redigera länk",
"editEmbed": "Redigera länk & bädda in",
"create": "Skapa länk",
"label": "Länk"
"createEmbed": "Skapa länk & bädda in",
"label": "Länk",
"labelEmbed": "Länka & bädda in",
"empty": "Ingen länk är angiven"
},
"lineEditor": {
"edit": "Redigera linje",
@ -160,13 +164,16 @@
"darkMode": "Mörkt läge",
"lightMode": "Ljust läge",
"zenMode": "Zen-läge",
"objectsSnapMode": "Fäst mot objekt",
"exitZenMode": "Gå ur zen-läge",
"cancel": "Avbryt",
"clear": "Rensa",
"remove": "Ta bort",
"embed": "Växla inbäddning",
"publishLibrary": "Publicera",
"submit": "Skicka",
"confirm": "Bekräfta"
"confirm": "Bekräfta",
"embeddableInteractionButton": "Klicka för att interagera"
},
"alerts": {
"clearReset": "Detta rensar hela canvasen. Är du säker?",
@ -196,6 +203,7 @@
"imageInsertError": "Kunde inte infoga bild. Försök igen senare...",
"fileTooBig": "Filen är för stor. Maximal tillåten storlek är {{maxSize}}.",
"svgImageInsertError": "Kunde inte infoga SVG-bild. SVG-koden ser ogiltig ut.",
"failedToFetchImage": "Kunde inte hämta bilden.",
"invalidSVGString": "Ogiltig SVG.",
"cannotResolveCollabServer": "Det gick inte att ansluta till samarbets-servern. Ladda om sidan och försök igen.",
"importLibraryError": "Kunde inte ladda bibliotek",
@ -206,6 +214,10 @@
"line2": "Detta kan resultera i trasiga <bold>Textelement</bold> i dina ritningar.",
"line3": "Vi rekommenderar starkt att du inaktiverar den här inställningen. Du kan följa <link>dessa steg</link> för att inaktivera den.",
"line4": "Om inaktivering av denna inställning inte åtgärdar visningen av textelement, öppna ett <issueLink>ärende</issueLink> på vår GitHub, eller skriv till oss på <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "Inbäddbara element kan inte läggas till i biblioteket.",
"image": "Stöd för att lägga till bilder till biblioteket kommer snart!"
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Lägg till / Uppdatera länk för en vald form",
"eraser": "Radergummi",
"frame": "Rutverktyg",
"embeddable": "Bädda in (web)",
"laser": "Laserpekare",
"hand": "Hand (panoreringsverktyg)",
"extraTools": "Fler verktyg"
},
@ -237,6 +251,7 @@
"linearElement": "Klicka för att starta flera punkter, dra för en linje",
"freeDraw": "Klicka och dra, släpp när du är klar",
"text": "Tips: du kan också lägga till text genom att dubbelklicka var som helst med markeringsverktyget",
"embeddable": "Klicka-dra för att skapa en webbplats-inbäddning",
"text_selected": "Dubbelklicka eller tryck ENTER för att redigera text",
"text_editing": "Tryck Escape eller CtrlOrCmd + ENTER för att slutföra redigeringen",
"linearElementMulti": "Klicka på sista punkten eller tryck Escape eller Enter för att avsluta",
@ -252,7 +267,8 @@
"bindTextToElement": "Tryck på Enter för att lägga till text",
"deepBoxSelect": "Håll Ctrl eller Cmd för att djupvälja, och för att förhindra att dra",
"eraserRevert": "Håll Alt för att återställa de element som är markerade för borttagning",
"firefox_clipboard_write": "Denna funktion kan sannolikt aktiveras genom att ställa in \"dom.events.asyncClipboard.clipboardItem\" flaggan till \"true\". För att ändra webbläsarens flaggor i Firefox, besök \"about:config\" sidan."
"firefox_clipboard_write": "Denna funktion kan sannolikt aktiveras genom att ställa in \"dom.events.asyncClipboard.clipboardItem\" flaggan till \"true\". För att ändra webbläsarens flaggor i Firefox, besök \"about:config\" sidan.",
"disableSnapping": "Håll Ctrl eller Cmd för att inaktivera fästning"
},
"canvasError": {
"cannotShowPreview": "Kan inte visa förhandsgranskning",
@ -411,7 +427,9 @@
"fileSavedToFilename": "Sparad till {filename}",
"canvas": "canvas",
"selection": "markering",
"pasteAsSingleElement": "Använd {{shortcut}} för att klistra in som ett enda element,\neller klistra in i en befintlig textredigerare"
"pasteAsSingleElement": "Använd {{shortcut}} för att klistra in som ett enda element,\neller klistra in i en befintlig textredigerare",
"unableToEmbed": "Att bädda in denna webbadress är för närvarande inte tillåtet. Skapa en problemrapport på GitHub för att begära att webbadressen vitlistas.",
"unrecognizedLinkFormat": "Länken du bäddade in matchar inte det förväntade formatet. Försök klistra in 'embed'-strängen som tillhandahålls av källwebbplatsen"
},
"colors": {
"transparent": "Genomskinlig",
@ -449,5 +467,36 @@
"shades": "Nyanser",
"hexCode": "Hex-kod",
"noShades": "Inga nyanser tillgängliga för denna färg"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Exportera som bild",
"button": "Exportera som bild",
"description": "Exportera scendata som en bild från vilken du kan importera senare."
},
"saveToDisk": {
"title": "Spara till disk",
"button": "Spara till disk",
"description": "Exportera scendata till en fil från vilken du kan importera senare."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Exportera till Excalidraw+",
"description": "Spara skissen till din Excalidraw+ arbetsyta."
}
},
"modal": {
"loadFromFile": {
"title": "Läs in från fil",
"button": "Läs in från fil",
"description": "Laddar från en fil kommer <bold>ersätta ditt befintliga innehåll</bold>.<br></br>Du kan säkerhetskopiera din ritning först med hjälp av ett av alternativen nedan."
},
"shareableLink": {
"title": "Läs in från länk",
"button": "Ersätt mitt innehåll",
"description": "Inläsning av en extern ritning kommer <bold>ersätta ditt befintliga innehåll</bold>.<br></br>Du kan säkerhetskopiera din ritning först genom att använda ett av alternativen nedan."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "உரையைக் கொள்கலனுள் சுருட்டு",
"link": {
"edit": "தொடுப்பைத் திருத்து",
"editEmbed": "",
"create": "தொடுப்பைப் படை",
"label": "தொடுப்பு"
"createEmbed": "",
"label": "தொடுப்பு",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "தொடுப்பைத் திருத்து",
@ -160,13 +164,16 @@
"darkMode": "கருமை பயன்முறை",
"lightMode": "வெளிர்ந்த பயன்முறை",
"zenMode": "ஜென் பயன்முறை",
"objectsSnapMode": "",
"exitZenMode": "ஜென் பயன்முறையை விலகு",
"cancel": "ரத்துசெய்",
"clear": "துடை",
"remove": "நீக்கு",
"embed": "",
"publishLibrary": "பிரசுரி",
"submit": "சமர்ப்பி",
"confirm": "உறுதிசெய்"
"confirm": "உறுதிசெய்",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "இது முழு கித்தானையும் துடைக்கும். நீங்கள் உறுதியா?",
@ -196,6 +203,7 @@
"imageInsertError": "படத்தைப் புகுத்தவியலா. பிறகு மீண்டும் முயலவும்...",
"fileTooBig": "கோப்பு மிகப்பெரிது. அனுமதிக்கப்பட்ட அதிகபட்ச அளவு {{maxSize}}.",
"svgImageInsertError": "எஸ்விஜி படத்தைப் புகுத்தவியலா. எஸ்விஜியின் மார்க்அப் செல்லாததாக தெரிகிறது.",
"failedToFetchImage": "",
"invalidSVGString": "செல்லாத SVG.",
"cannotResolveCollabServer": "கூட்டுப்பணிச் சேவையகத்துடன் இணைக்க முடியவில்லை. பக்கத்தை மீளேற்றி மீண்டும் முயலவும்.",
"importLibraryError": "நூலகத்தை ஏற்ற முடியவில்லை",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -220,12 +232,14 @@
"text": "உரை",
"library": "நூலகம்",
"lock": "தேர்ந்த கருவியை வரைந்த பின்பும் வைத்திரு",
"penMode": "",
"penMode": "பேனா - தடுப்பு தொடுதல்",
"link": "தேர்தெடுத்த வடிவத்திற்குத் தொடுப்பைச் சேர்/ புதுப்பி",
"eraser": "அழிப்பி",
"frame": "",
"hand": "",
"extraTools": ""
"frame": "சட்டகம் கருவி",
"embeddable": "",
"laser": "",
"hand": "கை (பார்வை நகர்கும் கருவி)",
"extraTools": "மற்ற கருவிகள்"
},
"headings": {
"canvasActions": "கித்தான் செயல்கள்",
@ -237,6 +251,7 @@
"linearElement": "பல புள்ளிகளைத் துவக்க சொடுக்கு, ஒற்றை வரிக்கு பிடித்திழு",
"freeDraw": "சொடுக்கி பிடித்திழு, முடித்ததும் விடுவி",
"text": "துணுக்குதவி: தெரிவு கருவி கொண்டு எங்காவது இரு-சொடுக்கி உரையைச் சேர்க்கலாம்",
"embeddable": "",
"text_selected": "உரையைத் திருத்த இரு-சொடுக்கு அ ENTERஐ அழுத்து",
"text_editing": "திருத்துவதை முடிக்க Escape அ CtrlOrCmd+ENTERஐ அழுத்து",
"linearElementMulti": "கடைசி புள்ளியில் சொடுக்கு அ முடிக்க Escape அ Enter அழுத்து",
@ -252,7 +267,8 @@
"bindTextToElement": "உரையைச் சேர்க்க enterஐ அழுத்து",
"deepBoxSelect": "ஆழ்ந்துத் தேரவும் பிடித்திழுத்தலைத் தவிர்க்கவும் CtrlOrCmdஐ அழுத்திப்பிடி",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "முன்னோட்டம் காட்ட இயலவில்லை",
@ -317,8 +333,8 @@
"zoomToFit": "அனைத்துறுப்புகளும் பொருந்தும்படி விரிவாக்கு",
"zoomToSelection": "தெரிவுக்கு விரிவாக்கு",
"toggleElementLock": "தேர்ந்தெடுப்பைப் பூட்டு/பூட்டவிழ்",
"movePageUpDown": "",
"movePageLeftRight": ""
"movePageUpDown": "மேலே/கீழே நகர்த்தவும்",
"movePageLeftRight": "இடது/வலது பக்கம் நகர்த்தவும்"
},
"clearCanvasDialog": {
"title": "கித்தானைத் துடை"
@ -360,26 +376,26 @@
"removeItemsFromLib": "நூலகத்திலிருந்து தேர்ந்தெடுத்த உருப்படிகளை நீக்கு"
},
"imageExportDialog": {
"header": "",
"header": "படத்தை ஏற்றுமதிதல",
"label": {
"withBackground": "",
"onlySelected": "",
"darkMode": "",
"embedScene": "",
"scale": "",
"withBackground": "பின்னணி",
"onlySelected": "தேர்ந்ததை மட்டும்",
"darkMode": "இருள் பயன்முறை",
"embedScene": "காட்சியை உட்பொதி",
"scale": "அளவுகோல்",
"padding": ""
},
"tooltip": {
"embedScene": ""
},
"title": {
"exportToPng": "",
"exportToSvg": "",
"exportToPng": "PNGக்கு ஏற்றுமதிசெய்",
"exportToSvg": "SVGக்கு ஏற்றுமதிசெய்",
"copyPngToClipboard": ""
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": ""
}
},
@ -411,24 +427,26 @@
"fileSavedToFilename": "{filename}-க்கு சேமிக்கப்பட்டது",
"canvas": "கித்தான்",
"selection": "தெரிவு",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "ஒளிபுகுத்தன்மை",
"black": "",
"white": "",
"red": "",
"pink": "",
"grape": "",
"violet": "",
"gray": "",
"blue": "",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"bronze": ""
"black": "கருப்பு",
"white": "வெள்ளை",
"red": "சிவப்பு",
"pink": "இளஞ்சிவப்பு",
"grape": "திராட்சை",
"violet": "ஊதா",
"gray": "சாம்பல்",
"blue": "நீலம்",
"cyan": "மயில்நிறம்",
"teal": "டீல்",
"green": "பச்சை",
"yellow": "மஞ்சள்",
"orange": "ஆரஞ்சு",
"bronze": "வெண்கலம்"
},
"welcomeScreen": {
"app": {
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -22,22 +22,22 @@
"background": "พื้นหลัง",
"fill": "เติมสี",
"strokeWidth": "น้ำหนักเส้นขอบ",
"strokeStyle": "",
"strokeStyle_solid": "",
"strokeStyle_dashed": "",
"strokeStyle_dotted": "",
"strokeStyle": "รูปแบบเส้น",
"strokeStyle_solid": "เส้นทึบ",
"strokeStyle_dashed": "เส้นประ",
"strokeStyle_dotted": "จุด",
"sloppiness": "ความเลอะเทอะ",
"opacity": "ความทึบแสง",
"textAlign": "จัดข้อความ",
"edges": "ขอบ",
"sharp": "",
"round": "",
"arrowheads": "",
"arrowhead_none": "",
"arrowhead_arrow": "",
"arrowhead_bar": "",
"arrowhead_dot": "",
"arrowhead_triangle": "",
"arrowheads": "หัวลูกศร",
"arrowhead_none": "ไม่มี",
"arrowhead_arrow": "ลูกศร",
"arrowhead_bar": "แถบ",
"arrowhead_dot": "จุด",
"arrowhead_triangle": "สามเหลี่ยม",
"fontSize": "ขนาดตัวอักษร",
"fontFamily": "แบบตัวอักษร",
"addWatermark": "เพิ่มลายน้ำ \"สร้างด้วย Excalidraw\"",
@ -59,7 +59,7 @@
"right": "ขวา",
"extraBold": "หนาพิเศษ",
"architect": "",
"artist": "",
"artist": "ศิลปิน",
"cartoonist": "",
"fileTitle": "ชื่อไฟล์",
"colorPicker": "เลือกสีที่กำหนดเอง",
@ -104,13 +104,17 @@
"excalidrawLib": "คลังของ Excalidraw",
"decreaseFontSize": "ลดขนาดตัวอักษร",
"increaseFontSize": "เพิ่มขนาดตัวอักษร",
"unbindText": "",
"unbindText": "ยกเลิกการผูกติด",
"bindText": "",
"createContainerFromText": "",
"link": {
"edit": "แก้ไขลิงก์",
"editEmbed": "แก้ไขลิงค์และการฝัง",
"create": "สร้างลิงค์",
"label": "ลิงค์"
"createEmbed": "สร้างลิงค์และการฝัง",
"label": "ลิงค์",
"labelEmbed": "ลิงค์และการฝัง",
"empty": "ไม่ได้ใส่ลิงค์"
},
"lineEditor": {
"edit": "แก้ไขเส้น",
@ -129,18 +133,18 @@
"eyeDropper": ""
},
"library": {
"noItems": "",
"noItems": "ยังไม่มีรายการที่เพิ่มเข้าไปได้",
"hint_emptyLibrary": "",
"hint_emptyPrivateLibrary": ""
},
"buttons": {
"clearReset": "",
"clearReset": "รีเซ็ทผืนผ้าใบ",
"exportJSON": "ส่งออกไปยังไฟล์",
"exportImage": "ส่งออกเป็นรูปภาพ",
"export": "บันทึกไปยัง",
"copyToClipboard": "คัดลอกไปยังคลิปบอร์ด",
"save": "",
"saveAs": "",
"save": "บันทึกเป็นไฟล์ปัจจุบัน",
"saveAs": "บันทึกเป็น",
"load": "เปิด",
"getShareableLink": "สร้างลิงค์ที่แชร์ได้",
"close": "ปิด",
@ -160,21 +164,24 @@
"darkMode": "โหมดกลางคืน",
"lightMode": "โหมดกลางวัน",
"zenMode": "โหมด Zen",
"objectsSnapMode": "",
"exitZenMode": "ออกจากโหมด Zen",
"cancel": "ยกเลิก",
"clear": "เคลียร์",
"remove": "ลบ",
"embed": "สลับการฝัง",
"publishLibrary": "เผยแพร่",
"submit": "ตกลง",
"confirm": "ยืนยัน"
"confirm": "ยืนยัน",
"embeddableInteractionButton": "คลิกเพื่อปฏิสัมพันธ์"
},
"alerts": {
"clearReset": "",
"couldNotCreateShareableLink": "",
"couldNotCreateShareableLink": "ไม่สามารถสร้างลิงค์ได้",
"couldNotCreateShareableLinkTooBig": "",
"couldNotLoadInvalidFile": "ไม่สามารถโหลดไฟล์ที่ผิดพลาดได้",
"importBackendFailed": "",
"cannotExportEmptyCanvas": "",
"importBackendFailed": "เกิดข้อผิดพลาดจากการนำเข้าจากระบบหลังบ้าน",
"cannotExportEmptyCanvas": "ไม่สามารถนำออกจากผืนผ้าใบที่ว่างเปล่าได้",
"couldNotCopyToClipboard": "ไม่สามารถคัดลอกไปยังคลิปบอร์ดได้",
"decryptFailed": "ไม่สามารถถอดรหัสข้อมูลได้",
"uploadedSecurly": "การอัพโหลดได้ถูกเข้ารหัสแบบ end-to-end หมายความว่าเซิร์ฟเวอร์ของ Excalidraw และบุคคลอื่นไม่สามารถอ่านข้อมูลได้",
@ -196,6 +203,7 @@
"imageInsertError": "ไม่สามารถเพิ่มรูปภาพได้ ลองอีกครั้งในภายหลัง",
"fileTooBig": "",
"svgImageInsertError": "",
"failedToFetchImage": "",
"invalidSVGString": "ไฟล์ SVG ผิดพลาด",
"cannotResolveCollabServer": "ไม่สามารถเชื่อต่อกับ collab เซิร์ฟเวอร์ได้ โปรดลองโหลดหน้านี้ใหม่และลองอีกครั้ง",
"importLibraryError": "",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "การเพิ่มองค์ประกอบที่ฝังยังไม่สามารถเพิ่มเข้าไปในไลบลารีได้",
"image": "การสนับสนุนสำหรับเพิ่มรูปภาพลงในไลบลารีจะมาในเร็ว ๆ นี้"
}
},
"toolBar": {
@ -213,8 +225,8 @@
"image": "",
"rectangle": "สี่เหลี่ยมผืนผ้า",
"diamond": "",
"ellipse": "",
"arrow": "",
"ellipse": "วงรี",
"arrow": "ลูกศร",
"line": "",
"freedraw": "",
"text": "ข้อความ",
@ -224,8 +236,10 @@
"link": "",
"eraser": "ยางลบ",
"frame": "",
"embeddable": "ฝังเว็บ",
"laser": "",
"hand": "",
"extraTools": ""
"extraTools": "เครื่องมืออื่นๆ"
},
"headings": {
"canvasActions": "",
@ -237,6 +251,7 @@
"linearElement": "",
"freeDraw": "",
"text": "",
"embeddable": "คลิกและลากเพื่อสร้างการฝังสำหรับเว็บไซต์",
"text_selected": "คลิกสองครั้งหรือกด ENTER เพื่อแก้ไขข้อความ",
"text_editing": "กดปุ่ม Esc หรือกด Ctrl, Cmd + Enter เพื่อเสร็จการแก้ไข",
"linearElementMulti": "คลิกที่จุดสุดท้ายหรือกด Escape หรือ Enter เพื่อเสร็จสิ้น",
@ -252,7 +267,8 @@
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "",
@ -303,7 +319,7 @@
"drag": "ลาก",
"editor": "",
"editLineArrowPoints": "",
"editText": "",
"editText": "แก้ไขข้อความ / เพิ่มข้อความ",
"github": "",
"howto": "",
"or": "",
@ -364,7 +380,7 @@
"label": {
"withBackground": "",
"onlySelected": "",
"darkMode": "",
"darkMode": "โหมดกลางคืน",
"embedScene": "",
"scale": "",
"padding": ""
@ -373,14 +389,14 @@
"embedScene": ""
},
"title": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "ส่งออกไปเป็น SVG",
"exportToSvg": "ส่งออกไปเป็น SVG",
"copyPngToClipboard": "คัดลอก PNG ไปยังคลิปบอร์ด"
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": "คัดลอกไปยังคลิปบอร์ด"
}
},
"encrypted": {
@ -411,7 +427,9 @@
"fileSavedToFilename": "",
"canvas": "",
"selection": "",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
@ -424,11 +442,11 @@
"gray": "",
"blue": "",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"bronze": ""
"teal": "ฟ้าน้ำทะเล",
"green": "เขียว",
"yellow": "เหลือง",
"orange": "ส้ม",
"bronze": "ทองแดง"
},
"welcomeScreen": {
"app": {
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -50,7 +50,7 @@
"veryLarge": "Çok geniş",
"solid": "Dolu",
"hachure": "Taralı",
"zigzag": "",
"zigzag": "Zikzak",
"crossHatch": "Çapraz-taralı",
"thin": "İnce",
"bold": "Kalın",
@ -106,11 +106,15 @@
"increaseFontSize": "Yazı Tipi Boyutunu Büyült",
"unbindText": "Metni çöz",
"bindText": "Metni taşıyıcıya bağla",
"createContainerFromText": "",
"createContainerFromText": "Metni bileşen içinde sar",
"link": {
"edit": "Bağlantıyı düzenle",
"editEmbed": "Bağlantıyı düzenle & yerleştir",
"create": "Bağlantı oluştur",
"label": "Bağlantı"
"createEmbed": "Bağlantı oluştur & yerleştir",
"label": "Bağlantı",
"labelEmbed": "Bağlantı & yerleştirme",
"empty": "Herhangi bir bağlantı oluşturulmadı"
},
"lineEditor": {
"edit": "Çizgiyi düzenle",
@ -124,9 +128,9 @@
},
"statusPublished": "Yayınlandı",
"sidebarLock": "Kenar çubuğu açık kalsın",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"eyeDropper": ""
"selectAllElementsInFrame": "Çerçevedeki tüm bileşenleri seç",
"removeAllElementsFromFrame": "Çerçevedeki tüm bileşenleri sil",
"eyeDropper": "Tuvalden renk seç"
},
"library": {
"noItems": "Öğe eklenmedi...",
@ -160,13 +164,16 @@
"darkMode": "Koyu tema",
"lightMode": "Açık tema",
"zenMode": "Zen modu",
"objectsSnapMode": "Nesnelere hizala",
"exitZenMode": "Zen modundan çık",
"cancel": "İptal",
"clear": "Temizle",
"remove": "Kaldır",
"embed": "",
"publishLibrary": "Yayınla",
"submit": "Gönder",
"confirm": "Onayla"
"confirm": "Onayla",
"embeddableInteractionButton": "Etkileşime girmek için tıkla"
},
"alerts": {
"clearReset": "Tuvalin tamamı temizlenecek. Emin misiniz?",
@ -189,13 +196,14 @@
"resetLibrary": "Bu işlem kütüphanenizi sıfırlayacak. Emin misiniz?",
"removeItemsFromsLibrary": "{{count}} öğe(ler) kitaplıktan kaldırılsın mı?",
"invalidEncryptionKey": "Şifreleme anahtarı 22 karakter olmalı. Canlı işbirliği devre dışı bırakıldı.",
"collabOfflineWarning": ""
"collabOfflineWarning": "İnternet bağlantısı bulunamadı. Değişiklikleriniz kaydedilmeyecek!"
},
"errors": {
"unsupportedFileType": "Desteklenmeyen dosya türü.",
"imageInsertError": "Görsel eklenemedi. Daha sonra tekrar deneyin...",
"fileTooBig": "Dosya çok büyük. İzin verilen maksimum boyut {{maxSize}}.",
"svgImageInsertError": "SVG resmi eklenemedi. SVG işaretlemesi geçersiz görünüyor.",
"failedToFetchImage": "",
"invalidSVGString": "Geçersiz SVG.",
"cannotResolveCollabServer": "İş birliği sunucusuna bağlanılamıyor. Lütfen sayfayı yenileyip tekrar deneyin.",
"importLibraryError": "Kütüphane yüklenemedi",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": "Resimleri kütüphaneye ekleme desteği yakında geliyor!"
}
},
"toolBar": {
@ -223,9 +235,11 @@
"penMode": "Kalem modu - dokunmayı engelle",
"link": "Seçilen şekil için bağlantı Ekle/Güncelle",
"eraser": "Silgi",
"frame": "",
"frame": "Çerçeve aracı",
"embeddable": "Web Yerleştirme",
"laser": "Lazer işaretçisi",
"hand": "",
"extraTools": ""
"extraTools": "Daha fazla araç"
},
"headings": {
"canvasActions": "Tuval eylemleri",
@ -237,6 +251,7 @@
"linearElement": "Birden fazla nokta için tıklayın, tek çizgi için sürükleyin",
"freeDraw": "Tıkla ve sürükle, bitirdiğinde serbest bırak",
"text": "İpucu: seçme aracıyla herhangi bir yere çift tıklayarak da yazı ekleyebilirsin",
"embeddable": "Web sitesi yerleştirmek için sürükle bırak",
"text_selected": "Metni düzenlemek için çift tıklayın veya ENTER'a basın",
"text_editing": "Düzenlemeyi bitirmek için ESC veya Ctrl/Cmd+ENTER tuşlarına basın",
"linearElementMulti": "Bitirmek için son noktaya tıklayın ya da Escape veya Enter tuşuna basın",
@ -252,7 +267,8 @@
"bindTextToElement": "Enter tuşuna basarak metin ekleyin",
"deepBoxSelect": "Ctrl/Cmd tuşuna basılı tutarak derin seçim yapın ya da sürüklemeyi engelleyin",
"eraserRevert": "Alt tuşuna basılı tutarak silinme için işaretlenmiş ögeleri tersine çevirin",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Önizleme gösterilemiyor",
@ -360,27 +376,27 @@
"removeItemsFromLib": "Seçilen ögeleri kütüphaneden kaldır"
},
"imageExportDialog": {
"header": "",
"header": "Resmi dışa aktar",
"label": {
"withBackground": "",
"onlySelected": "",
"darkMode": "",
"embedScene": "",
"scale": "",
"padding": ""
"withBackground": "Arka plan",
"onlySelected": "Sadece seçilen",
"darkMode": "Karanlık mod",
"embedScene": "Sahne yerleştir",
"scale": "Ölçeklendir",
"padding": "Dış boşluk"
},
"tooltip": {
"embedScene": ""
"embedScene": "Sahne verisi, sahnenin geri yüklenebilmesi için dışarı aktarılan PNG/SVG dosyasına kaydedilecektir. Bu, dışa aktarılan dosya boyutunu arttıracaktır."
},
"title": {
"exportToPng": "",
"exportToSvg": "",
"exportToPng": "PNG olarak dışa aktar",
"exportToSvg": "SVG olarak dışa aktar",
"copyPngToClipboard": ""
},
"button": {
"exportToPng": "",
"exportToSvg": "",
"copyPngToClipboard": ""
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": "Panoya kopyala"
}
},
"encrypted": {
@ -411,29 +427,31 @@
"fileSavedToFilename": "{filename} kaydedildi",
"canvas": "tuval",
"selection": "seçim",
"pasteAsSingleElement": "Tekil obje olarak yapıştırmak için veya var olan bir metin editörüne yapıştırmak için {{shortcut}} kullanın"
"pasteAsSingleElement": "Tekil obje olarak yapıştırmak için veya var olan bir metin editörüne yapıştırmak için {{shortcut}} kullanın",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "Şeffaf",
"black": "",
"white": "",
"red": "",
"pink": "",
"grape": "",
"violet": "",
"gray": "",
"blue": "",
"cyan": "",
"teal": "",
"green": "",
"yellow": "",
"orange": "",
"black": "Siyah",
"white": "Beyaz",
"red": "Kırmızı",
"pink": "Pembe",
"grape": "Koyu Mor",
"violet": "Menekşe rengi",
"gray": "Gri",
"blue": "Mavi",
"cyan": "Camgöbeği",
"teal": "Deniz mavisi",
"green": "Yeşil",
"yellow": "Sarı",
"orange": "Turuncu",
"bronze": ""
},
"welcomeScreen": {
"app": {
"center_heading": "",
"center_heading_plus": "",
"center_heading_plus": "Ecalidraw+'a mı gitmek istediniz?",
"menuHint": "Dışa aktar, seçenekler, diller, ..."
},
"defaults": {
@ -444,10 +462,41 @@
}
},
"colorPicker": {
"mostUsedCustomColors": "",
"colors": "",
"mostUsedCustomColors": "En çok kullanılan özel renkler",
"colors": "Renkler",
"shades": "",
"hexCode": "",
"hexCode": "Hex kodu",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "Diske Kaydet",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "Огорнути текст у контейнер",
"link": {
"edit": "Редагування посилання",
"editEmbed": "Редагування посилання і вкладення",
"create": "Створити посилання",
"label": "Посилання"
"createEmbed": "Створити посилання і вкладення",
"label": "Посилання",
"labelEmbed": "Посилання і вкладення",
"empty": "Посилання відсутнє"
},
"lineEditor": {
"edit": "Редагувати лінію",
@ -124,9 +128,9 @@
},
"statusPublished": "Опубліковано",
"sidebarLock": "Не закривати бокове меню",
"selectAllElementsInFrame": "",
"removeAllElementsFromFrame": "",
"eyeDropper": ""
"selectAllElementsInFrame": "Обрати всі елементи у фреймі",
"removeAllElementsFromFrame": "Видалити всі елементи з фрейму",
"eyeDropper": "Вибрати колір з полотна"
},
"library": {
"noItems": "Тут поки пусто...",
@ -160,13 +164,16 @@
"darkMode": "Темна тема",
"lightMode": "Світла тема",
"zenMode": "Режим Дзен",
"objectsSnapMode": "",
"exitZenMode": "Вийти з дзен-режиму",
"cancel": "Скасувати",
"clear": "Очистити",
"remove": "Видалити",
"embed": "Перемкнути вкладення",
"publishLibrary": "Опублікувати",
"submit": "Надіслати",
"confirm": "Підтвердити"
"confirm": "Підтвердити",
"embeddableInteractionButton": "Натисніть для взаємодії"
},
"alerts": {
"clearReset": "Це очистить все полотно. Впевнені?",
@ -196,6 +203,7 @@
"imageInsertError": "Не вдалося вставити зображення. Повторіть спробу пізніше...",
"fileTooBig": "Занадто великий розмір файлу, максимальний розмір файлу {{maxSize}}.",
"svgImageInsertError": "Не вдалося вставити SVG-зображення. Помилка розмітки SVG.",
"failedToFetchImage": "",
"invalidSVGString": "Недійсний SVG.",
"cannotResolveCollabServer": "Не вдалося приєднатися до сервера. Перезавантажте сторінку та повторіть спробу.",
"importLibraryError": "Не вдалося завантажити бібліотеку",
@ -206,6 +214,10 @@
"line2": "Це може нашкодити <bold>текстовим елементам</bold> у ваших малюнках.",
"line3": "Ми наполегливо рекомендуємо вимкнути це налаштування. Виконайте наступні <link>кроки</link>, щоб виправити це.",
"line4": "Якщо вимкнення цього параметра не вирішує показ текстових елементів, тоді створіть, будь ласка, <issueLink>запит на розв'язання проблеми</issueLink> на нашому GitHub або напишіть нам у <discordLink>Discord</discordLink>"
},
"libraryElementTypeError": {
"embeddable": "Вбудовані елементи не можна додати в бібліотеку.",
"image": "Підтримка додавання зображень в бібліотеку найближчим часом!"
}
},
"toolBar": {
@ -223,9 +235,11 @@
"penMode": "Режим пера - запобігання дотику",
"link": "Додати/Оновити посилання для вибраної форми",
"eraser": "Очищувач",
"frame": "",
"frame": "Інструмент фрейму",
"embeddable": "Веб вкладення",
"laser": "",
"hand": "Рука (інструмент для панорамування)",
"extraTools": ""
"extraTools": "Інші інструменти"
},
"headings": {
"canvasActions": "Дії з полотном",
@ -237,6 +251,7 @@
"linearElement": "Натисніть щоб додати кілька точок. Перетягніть щоб намалювати одну лінію",
"freeDraw": "Натисніть і потягніть, відпустіть коли завершите",
"text": "Порада: можна також додати текст, двічі клацнувши по будь-якому місці інструментом вибору",
"embeddable": "Клікніть та перетягніть для створення вбудованого вебсайту",
"text_selected": "Подвійний клік або натисніть клавішу ENTER, щоб редагувати текст",
"text_editing": "Натисніть клавішу Escape або Ctrl/Cmd+ENTER, щоб завершити редагування",
"linearElementMulti": "Натисніть на останню точку, клацніть Esc або Enter щоб завершити",
@ -252,7 +267,8 @@
"bindTextToElement": "Натисніть Enter, щоб додати текст",
"deepBoxSelect": "Втримуйте Ctrl/Cmd для глибокого виділення та щоб попередити перетягування",
"eraserRevert": "Втримуйте клавішу Alt, щоб повернути елементи позначені для видалення",
"firefox_clipboard_write": "Цю функцію можна ввімкнути, встановивши значення \"true\" для налаштування \"dom.events.asyncClipboard.clipboardItem\". Перейдіть на сторінку «about:config», щоб змінити налаштування браузера у Firefox."
"firefox_clipboard_write": "Цю функцію можна ввімкнути, встановивши значення \"true\" для налаштування \"dom.events.asyncClipboard.clipboardItem\". Перейдіть на сторінку «about:config», щоб змінити налаштування браузера у Firefox.",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Не вдається показати попередній перегляд",
@ -362,25 +378,25 @@
"imageExportDialog": {
"header": "Експортувати зображення",
"label": {
"withBackground": "",
"withBackground": "Тло",
"onlySelected": "Тільки вибране",
"darkMode": "Темний режим",
"embedScene": "Вбудована сцена",
"scale": "",
"padding": ""
"scale": "Масштабування",
"padding": "Відступ"
},
"tooltip": {
"embedScene": ""
"embedScene": "Дані сцени будуть збережені в експортований файл PNG/SVG. Ця сцена може бути відновлена з нього, однак це збільшить розмір експортованого файлу."
},
"title": {
"exportToPng": "Експортувати в PNG",
"exportToSvg": "Експортувати у SVG",
"copyPngToClipboard": ""
"copyPngToClipboard": "Скопіювати PNG в буфер обміну"
},
"button": {
"exportToPng": "PNG",
"exportToSvg": "SVG",
"copyPngToClipboard": ""
"copyPngToClipboard": "Копіювати в буфер обміну"
}
},
"encrypted": {
@ -411,7 +427,9 @@
"fileSavedToFilename": "Збережено в {filename}",
"canvas": "полотно",
"selection": "виділення",
"pasteAsSingleElement": "Використайте {{shortcut}} для вставки самостійного зразка або використайте в текстовому редакторі"
"pasteAsSingleElement": "Використайте {{shortcut}} для вставки самостійного зразка або використайте в текстовому редакторі",
"unableToEmbed": "Вбудування цієї url на даний час не допускається. Підніміть питання на GitHub, щоб попросити внести URL-адресу до білого списку",
"unrecognizedLinkFormat": "Посилання, яке ви вставили, не відповідає очікуваному формату. Будь ласка, спробуйте вставити рядок \"embed\", наданий сайтом-джерелом"
},
"colors": {
"transparent": "Прозорий",
@ -419,12 +437,12 @@
"white": "Білий",
"red": "Червоний",
"pink": "Рожевий",
"grape": "",
"grape": "Виноградний",
"violet": "Фіолетовий",
"gray": "Сірий",
"blue": "Синій",
"cyan": "Ціан",
"teal": "",
"teal": "Бірюзовий",
"green": "Зелений",
"yellow": "Жовтий",
"orange": "Помаранчевий",
@ -446,8 +464,39 @@
"colorPicker": {
"mostUsedCustomColors": "Найбільш використовувані користувацькі кольори",
"colors": "Кольори",
"shades": "",
"shades": "Тіні",
"hexCode": "Hex-код",
"noShades": ""
"noShades": "Немає доступних відтінків цього кольору"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "Експортувати як зображення",
"button": "Експортувати як зображення",
"description": "Експорт даних сцени у вигляді зображення, з якого можна імпортувати пізніше."
},
"saveToDisk": {
"title": "Зберегти на диск",
"button": "Зберегти на диск",
"description": "Експорт даних сцени в файл, з якого можна імпортувати пізніше."
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "Експортувати до Excalidraw+",
"description": "Зберегти сцену до робочого простору Excalidraw+."
}
},
"modal": {
"loadFromFile": {
"title": "Завантажити з файлу",
"button": "Завантажити з файлу",
"description": "Завантаження з файлу <bold>замінить наявний вміст</bold>.<br></br>Ви можете спочатку створити резервну копію малюнка, скориставшись одним із наведених нижче способів."
},
"shareableLink": {
"title": "Завантажити з посилання",
"button": "Замінити мій контент",
"description": "Завантаження зовнішнього малюнка <bold>замінить ваш наявний вміст</bold>.<br></br>Ви можете спочатку створити резервну копію малюнка, скориставшись одним із наведених нижче способів."
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "Sửa liên kết",
"editEmbed": "",
"create": "Tạo liên kết",
"label": "Liên kết"
"createEmbed": "",
"label": "Liên kết",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "Điều chỉnh nét",
@ -160,13 +164,16 @@
"darkMode": "Chế độ tối",
"lightMode": "Chế độ sáng",
"zenMode": "Chế độ zen",
"objectsSnapMode": "",
"exitZenMode": "Thoát chể độ zen",
"cancel": "Hủy",
"clear": "Làm sạch",
"remove": "Xóa",
"embed": "",
"publishLibrary": "Đăng tải",
"submit": "Gửi",
"confirm": "Xác nhận"
"confirm": "Xác nhận",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "Điều này sẽ dọn hết canvas. Bạn có chắc không?",
@ -196,6 +203,7 @@
"imageInsertError": "Không thể thêm ảnh. Hãy thử lại sau...",
"fileTooBig": "Tệp tin quá lớn. Dung lượng tối đa cho phép là {{maxSize}}.",
"svgImageInsertError": "Không thể thêm ảnh SVG. Mã SVG có vẻ sai.",
"failedToFetchImage": "",
"invalidSVGString": "SVG không hợp lệ.",
"cannotResolveCollabServer": "Không thể kết nối với máy chủ hợp tác. Hãy tải lại trang và thử lại.",
"importLibraryError": "Không thể tải thư viện",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "Thêm/ Chỉnh sửa liên kết cho hình được chọn",
"eraser": "Xóa",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "Tay kéo",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "Ấn để bắt đầu nhiểm điểm vẽ, kéo để vẽ một đường thẳng",
"freeDraw": "Ấn bà kéo, thả khi bạn xong",
"text": "Mẹo: bạn có thể thêm văn bản tại bất cứ đâu bằng cách ấn hai lần bằng tool lựa chọn",
"embeddable": "",
"text_selected": "Ấn 2 lần hoặc nhấn ENTER để chỉnh văn bản",
"text_editing": "Nhấn Escape hoặc Ctrl/Cmd+ENTER để hoàn thành chỉnh sửa",
"linearElementMulti": "Nhấn vào điểm cuối hoặc nhấn Escape hoặc Enter để kết thúc",
@ -252,7 +267,8 @@
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": "Tính năng này có thể được bật bằng cách đặt cờ \"dom.events.asyncClipboard.clipboardItem\" thành \"true\". Để thay đổi cờ trình duyệt trong Firefox, hãy truy cập trang \"about:config\"."
"firefox_clipboard_write": "Tính năng này có thể được bật bằng cách đặt cờ \"dom.events.asyncClipboard.clipboardItem\" thành \"true\". Để thay đổi cờ trình duyệt trong Firefox, hãy truy cập trang \"about:config\".",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "Không thể xem trước",
@ -411,7 +427,9 @@
"fileSavedToFilename": "",
"canvas": "canvas",
"selection": "",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "将文本包围在容器中",
"link": {
"edit": "编辑链接",
"editEmbed": "编辑链接与嵌入",
"create": "新建链接",
"label": "链接"
"createEmbed": "创建链接与嵌入",
"label": "链接",
"labelEmbed": "链接与嵌入",
"empty": "未设定链接"
},
"lineEditor": {
"edit": "编辑线条",
@ -125,7 +129,7 @@
"statusPublished": "已发布",
"sidebarLock": "侧边栏常驻",
"selectAllElementsInFrame": "选择画框中的所有元素",
"removeAllElementsFromFrame": "删除画框中的所有元素",
"removeAllElementsFromFrame": "分离出画框中的所有元素",
"eyeDropper": "从画布上取色"
},
"library": {
@ -160,13 +164,16 @@
"darkMode": "深色模式",
"lightMode": "浅色模式",
"zenMode": "禅模式",
"objectsSnapMode": "吸附至对象",
"exitZenMode": "退出禅模式",
"cancel": "取消",
"clear": "清除",
"remove": "删除",
"embed": "切换嵌入",
"publishLibrary": "发布",
"submit": "提交",
"confirm": "确定"
"confirm": "确定",
"embeddableInteractionButton": "点击以开始交互"
},
"alerts": {
"clearReset": "这将会清除整个画布。您是否要继续?",
@ -196,6 +203,7 @@
"imageInsertError": "无法插入图像。请稍后再试……",
"fileTooBig": "文件过大。最大允许的大小为 {{maxSize}}。",
"svgImageInsertError": "无法插入 SVG 图像。该 SVG 标记似乎是无效的。",
"failedToFetchImage": "",
"invalidSVGString": "无效的 SVG。",
"cannotResolveCollabServer": "无法连接到实时协作服务器。请重新加载页面并重试。",
"importLibraryError": "无法加载素材库",
@ -206,6 +214,10 @@
"line2": "这可能会破坏绘图中的 <bold>文本元素</bold>。",
"line3": "我们强烈建议禁用此设置。您可以按照<link>这些步骤</link>来设置。",
"line4": "如果禁用此设置无法修复文本元素的显示,请在 GitHub 上提交一个 <issueLink>issue</issueLink> ,或者在 <discordLink>Discord</discordLink> 上反馈"
},
"libraryElementTypeError": {
"embeddable": "嵌入元素不能添加到素材库。",
"image": "我们不久将支持添加图片到素材库"
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "为选中的形状添加/更新链接",
"eraser": "橡皮",
"frame": "画框工具",
"embeddable": "嵌入网页",
"laser": "激光笔",
"hand": "抓手(平移工具)",
"extraTools": "更多工具"
},
@ -237,6 +251,7 @@
"linearElement": "点击创建多个点 拖动创建直线",
"freeDraw": "点击并拖动,完成时松开",
"text": "提示:您也可以使用选择工具双击任意位置来添加文字",
"embeddable": "点击并拖动以创建嵌入网页",
"text_selected": "双击或按回车键以编辑文本",
"text_editing": "按下 Escape 或 CtrlOrCmd+ENTER 完成编辑",
"linearElementMulti": "点击最后一个点或按下 Esc/Enter 来完成",
@ -245,14 +260,15 @@
"resizeImage": "按住SHIFT可以自由缩放\n按住ALT可以从中间缩放",
"rotate": "旋转时可以按住 Shift 来约束角度",
"lineEditor_info": "按住 CtrlOrCmd 并双击或按 CtrlOrCmd + Enter 来编辑点",
"lineEditor_pointSelected": "按下 Delete 移除点CtrlCmd+D 以复制,拖动以移动",
"lineEditor_pointSelected": "按下 Delete 移除点CtrlOrCmd+D 以复制,拖动以移动",
"lineEditor_nothingSelected": "选择要编辑的点 (按住 SHIFT 选择多个)\n或按住 Alt 并点击以添加新点",
"placeImage": "点击放置图像,或者点击并拖动以手动设置图像大小",
"publishLibrary": "发布您自己的素材库",
"bindTextToElement": "按下 Enter 以添加文本",
"deepBoxSelect": "按住 CtrlOrCmd 以深度选择,并避免拖拽",
"eraserRevert": "按住 Alt 以反选被标记删除的元素",
"firefox_clipboard_write": "将高级配置首选项“dom.events.asyncClipboard.clipboardItem”设置为“true”可以启用此功能。要更改 Firefox 的高级配置首选项请前往“about:config”页面。"
"firefox_clipboard_write": "将高级配置首选项“dom.events.asyncClipboard.clipboardItem”设置为“true”可以启用此功能。要更改 Firefox 的高级配置首选项请前往“about:config”页面。",
"disableSnapping": "按住 CtrlOrCmd 以禁用吸附"
},
"canvasError": {
"cannotShowPreview": "无法显示预览",
@ -411,7 +427,9 @@
"fileSavedToFilename": "保存到 {filename}",
"canvas": "画布",
"selection": "所选项",
"pasteAsSingleElement": "使用 {{shortcut}} 粘贴为单个元素,\n或粘贴到现有的文本编辑器里"
"pasteAsSingleElement": "使用 {{shortcut}} 粘贴为单个元素,\n或粘贴到现有的文本编辑器里",
"unableToEmbed": "目前不允许嵌入此网址。请在 GitHub 上提 issue 请求将此网址加入白名单",
"unrecognizedLinkFormat": "您嵌入的链接不符合格式要求。请尝试粘贴源网站提供的“嵌入 (embed)”字符串"
},
"colors": {
"transparent": "透明",
@ -449,5 +467,36 @@
"shades": "色调明暗",
"hexCode": "十六进制值",
"noShades": "此颜色没有可用的明暗变化"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "导出为图片",
"button": "导出为图片",
"description": "将画布数据导出为图片,以便以后导入。"
},
"saveToDisk": {
"title": "保存到本地",
"button": "保存到本地",
"description": "将画布数据导出为文件,以便以后导入。"
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "导出到 Excalidraw+",
"description": "将画布保存到您的 Excalidraw+ 工作区。"
}
},
"modal": {
"loadFromFile": {
"title": "从文件加载",
"button": "从文件加载",
"description": "从文件加载将<bold>替换您现有的内容</bold>。<br></br>您可以先使用下列方式备份您的绘图。"
},
"shareableLink": {
"title": "从链接加载",
"button": "替换我的内容",
"description": "加载外部绘图将<bold>替换您现有的内容</bold>。<br></br>您可以先使用下列方式备份您的绘图。"
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "",
"link": {
"edit": "",
"editEmbed": "",
"create": "",
"label": ""
"createEmbed": "",
"label": "",
"labelEmbed": "",
"empty": ""
},
"lineEditor": {
"edit": "",
@ -160,13 +164,16 @@
"darkMode": "",
"lightMode": "",
"zenMode": "",
"objectsSnapMode": "",
"exitZenMode": "",
"cancel": "",
"clear": "",
"remove": "",
"embed": "",
"publishLibrary": "",
"submit": "",
"confirm": ""
"confirm": "",
"embeddableInteractionButton": ""
},
"alerts": {
"clearReset": "【‼️ 警告 ‼️ 無法復原的動作】你確定要清空呢塊畫布嗎?",
@ -196,6 +203,7 @@
"imageInsertError": "",
"fileTooBig": "",
"svgImageInsertError": "",
"failedToFetchImage": "",
"invalidSVGString": "",
"cannotResolveCollabServer": "",
"importLibraryError": "",
@ -206,6 +214,10 @@
"line2": "",
"line3": "",
"line4": ""
},
"libraryElementTypeError": {
"embeddable": "",
"image": ""
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "",
"eraser": "",
"frame": "",
"embeddable": "",
"laser": "",
"hand": "",
"extraTools": ""
},
@ -237,6 +251,7 @@
"linearElement": "",
"freeDraw": "",
"text": "",
"embeddable": "",
"text_selected": "",
"text_editing": "",
"linearElementMulti": "",
@ -252,7 +267,8 @@
"bindTextToElement": "",
"deepBoxSelect": "",
"eraserRevert": "",
"firefox_clipboard_write": ""
"firefox_clipboard_write": "",
"disableSnapping": ""
},
"canvasError": {
"cannotShowPreview": "無法顯示預覽",
@ -411,7 +427,9 @@
"fileSavedToFilename": "",
"canvas": "畫布",
"selection": "",
"pasteAsSingleElement": ""
"pasteAsSingleElement": "",
"unableToEmbed": "",
"unrecognizedLinkFormat": ""
},
"colors": {
"transparent": "",
@ -449,5 +467,36 @@
"shades": "",
"hexCode": "",
"noShades": ""
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "",
"button": "",
"description": ""
},
"saveToDisk": {
"title": "",
"button": "",
"description": ""
},
"excalidrawPlus": {
"title": "",
"button": "",
"description": ""
}
},
"modal": {
"loadFromFile": {
"title": "",
"button": "",
"description": ""
},
"shareableLink": {
"title": "",
"button": "",
"description": ""
}
}
}
}

View File

@ -109,8 +109,12 @@
"createContainerFromText": "將文字包於容器中",
"link": {
"edit": "編輯連結",
"editEmbed": "編輯連結&嵌入",
"create": "建立連結",
"label": "連結"
"createEmbed": "建立連結&嵌入",
"label": "連結",
"labelEmbed": "連結&嵌入",
"empty": "未設定連結"
},
"lineEditor": {
"edit": "編輯線條",
@ -160,13 +164,16 @@
"darkMode": "深色模式",
"lightMode": "淺色模式",
"zenMode": "專注模式",
"objectsSnapMode": "吸附至物件",
"exitZenMode": "離開專注模式",
"cancel": "取消",
"clear": "清除",
"remove": "刪除",
"embed": "切換嵌入",
"publishLibrary": "發布",
"submit": "送出",
"confirm": "確認"
"confirm": "確認",
"embeddableInteractionButton": "點擊以互動"
},
"alerts": {
"clearReset": "這將會清除整個 canvas。你確定嗎",
@ -196,6 +203,7 @@
"imageInsertError": "無法插入圖片。請稍後再試…",
"fileTooBig": "檔案過大。可接受的最大尺寸為 {{maxSize}} 。",
"svgImageInsertError": "無法插入 SVG 圖片。此 SVG 檔案有問題。",
"failedToFetchImage": "無法獲取圖片。",
"invalidSVGString": "無效的 SVG。",
"cannotResolveCollabServer": "無法連結至 collab 伺服器。請重新整理後再試一次。",
"importLibraryError": "無法載入資料庫",
@ -206,6 +214,10 @@
"line2": "這可能造成您畫布中 <bold>文字元素</bold> 的異常。",
"line3": "我們強烈建議您關閉此設定。您可以依照 <link>這些步驟</link> 來進行。",
"line4": "若關閉此設定並未修復文字元素的顯示問題,請回報於我們 GitHub 上的 <issueLink>issue</issueLink>,或在 <discordLink>Discord</discordLink> 上告訴我們。"
},
"libraryElementTypeError": {
"embeddable": "可嵌入元素無法加入資料庫",
"image": "即將支援加入圖片至資料庫!"
}
},
"toolBar": {
@ -224,6 +236,8 @@
"link": "為所選的形狀增加\b/更新連結",
"eraser": "橡皮擦",
"frame": "框架工具",
"embeddable": "嵌入網站",
"laser": "雷射筆",
"hand": "手形(平移工具)",
"extraTools": "更多工具"
},
@ -237,6 +251,7 @@
"linearElement": "點擊以繪製多點曲線;或拖曳以繪製直線",
"freeDraw": "點擊並拖曳來繪圖,放開即結束",
"text": "提示:亦可使用選取工具在任何地方雙擊來加入文字",
"embeddable": "點擊並拖移以建立嵌入網站",
"text_selected": "雙擊滑鼠或按 Enter 以編輯文字",
"text_editing": "按跳脫鍵或 Ctrl 或 Cmd + Enter 以結束編輯",
"linearElementMulti": "按下 Escape 或 Enter 以結束繪製",
@ -252,7 +267,8 @@
"bindTextToElement": "按下 Enter 以加入文字。",
"deepBoxSelect": "按住 Ctrl 或 Cmd 以深度選取並避免拖曳",
"eraserRevert": "按住 Alt 以反選取已標記待刪除的元素",
"firefox_clipboard_write": "此功能有機會透過將 \"dom.events.asyncClipboard.clipboardItem\" 設定為 \"true\" 來開啟。\n若要變更 Firefox 瀏覽器的此設定值,請至 \"about:config\" 頁面。"
"firefox_clipboard_write": "此功能有機會透過將 \"dom.events.asyncClipboard.clipboardItem\" 設定為 \"true\" 來開啟。\n若要變更 Firefox 瀏覽器的此設定值,請至 \"about:config\" 頁面。",
"disableSnapping": "按住 Ctrl 或 Cmd 以禁用吸附"
},
"canvasError": {
"cannotShowPreview": "無法顯示預覽",
@ -411,7 +427,9 @@
"fileSavedToFilename": "儲存為 {filename}",
"canvas": "畫布",
"selection": "已選項目",
"pasteAsSingleElement": "使用 {{shortcut}} 以做為單一物件貼上,\n或貼上至現有的文字編輯器"
"pasteAsSingleElement": "使用 {{shortcut}} 以做為單一物件貼上,\n或貼上至現有的文字編輯器",
"unableToEmbed": "目前不允許嵌入此網址。您可至 GitHub 提出 issue 以要求將此網址加入合格名單。",
"unrecognizedLinkFormat": "您嵌入的連結格式不符。請嘗試貼入原網站所提供的「嵌入」字串。"
},
"colors": {
"transparent": "透明",
@ -449,5 +467,36 @@
"shades": "漸變色",
"hexCode": "Hex 碼",
"noShades": "沒有此顏色的漸變色"
},
"overwriteConfirm": {
"action": {
"exportToImage": {
"title": "匯出為圖片",
"button": "匯出為圖片",
"description": "將場景匯出為可供匯入的圖片檔案"
},
"saveToDisk": {
"title": "儲存至硬碟",
"button": "儲存至硬碟",
"description": "將場景匯出為可供匯入的檔案"
},
"excalidrawPlus": {
"title": "Excalidraw+",
"button": "匯出至 Excalidraw+",
"description": "將此場景儲存至您的 Excalidraw+ 工作區"
}
},
"modal": {
"loadFromFile": {
"title": "從檔案載入",
"button": "從檔案載入",
"description": "從檔案載入將<bold>取代您目前的內容</bold>。<br></br>可先使用下方的選項備份您的繪圖。"
},
"shareableLink": {
"title": "從連結載入",
"button": "取代我的內容",
"description": "載入外部繪圖將<bold>取代您目前的內容</bold>。<br></br>可先使用下方的選項備份您的繪圖。"
}
}
}
}

View File

@ -69,6 +69,7 @@ import {
} from "../element/Hyperlink";
import { renderSnaps } from "./renderSnaps";
import {
isArrowElement,
isEmbeddableElement,
isFrameElement,
isLinearElement,
@ -165,6 +166,21 @@ const fillCircle = (
}
};
const fillSquare = (
context: CanvasRenderingContext2D,
cx: number,
cy: number,
side: number,
stroke = true,
) => {
context.beginPath();
context.rect(cx - side / 2, cy - side / 2, side, side);
context.fill();
if (stroke) {
context.stroke();
}
};
const strokeGrid = (
context: CanvasRenderingContext2D,
gridSize: number,
@ -223,6 +239,7 @@ const renderSingleLinearPoint = (
point: Point,
radius: number,
isSelected: boolean,
renderAsSquare: boolean,
isPhantomPoint = false,
) => {
context.strokeStyle = "#5e5ad8";
@ -234,13 +251,29 @@ const renderSingleLinearPoint = (
context.fillStyle = "rgba(177, 151, 252, 0.7)";
}
fillCircle(
context,
point[0],
point[1],
radius / appState.zoom.value,
!isPhantomPoint,
);
const effectiveRadius = radius / appState.zoom.value;
if (renderAsSquare) {
fillSquare(
context,
point[0],
point[1],
effectiveRadius * 2,
!isPhantomPoint,
);
} else {
fillCircle(context, point[0], point[1], effectiveRadius, !isPhantomPoint);
}
};
const isLinearPointAtIndexSquared = (
element: NonDeleted<ExcalidrawLinearElement>,
index: number,
) => {
const splitting = element.segmentSplitIndices
? element.segmentSplitIndices.includes(index)
: false;
return element.roundness ? splitting : !splitting;
};
const renderLinearPointHandles = (
@ -264,7 +297,14 @@ const renderLinearPointHandles = (
const isSelected =
!!appState.editingLinearElement?.selectedPointsIndices?.includes(idx);
renderSingleLinearPoint(context, appState, point, radius, isSelected);
renderSingleLinearPoint(
context,
appState,
point,
radius,
isSelected,
isLinearPointAtIndexSquared(element, idx),
);
});
//Rendering segment mid points
@ -292,6 +332,7 @@ const renderLinearPointHandles = (
segmentMidPoint,
radius,
false,
false,
);
highlightPoint(segmentMidPoint, context, appState);
} else {
@ -302,6 +343,7 @@ const renderLinearPointHandles = (
segmentMidPoint,
radius,
false,
false,
);
}
} else if (appState.editingLinearElement || points.length === 2) {
@ -311,6 +353,7 @@ const renderLinearPointHandles = (
segmentMidPoint,
POINT_HANDLE_SIZE / 2,
false,
false,
true,
);
}
@ -323,16 +366,16 @@ const highlightPoint = (
point: Point,
context: CanvasRenderingContext2D,
appState: InteractiveCanvasAppState,
renderAsSquare = false,
) => {
context.fillStyle = "rgba(105, 101, 219, 0.4)";
const radius = LinearElementEditor.POINT_HANDLE_SIZE / appState.zoom.value;
fillCircle(
context,
point[0],
point[1],
LinearElementEditor.POINT_HANDLE_SIZE / appState.zoom.value,
false,
);
if (renderAsSquare) {
fillSquare(context, point[0], point[1], radius * 2, false);
} else {
fillCircle(context, point[0], point[1], radius, false);
}
};
const renderLinearElementPointHighlight = (
context: CanvasRenderingContext2D,
@ -354,10 +397,15 @@ const renderLinearElementPointHighlight = (
element,
hoverPointIndex,
);
context.save();
context.translate(appState.scrollX, appState.scrollY);
highlightPoint(point, context, appState);
highlightPoint(
point,
context,
appState,
isLinearPointAtIndexSquared(element, hoverPointIndex),
);
context.restore();
};
@ -984,7 +1032,10 @@ const _renderStaticScene = ({
// TODO do we need to check isElementInFrame here?
if (frame && isElementInFrame(element, elements, appState)) {
frameClip(frame, context, renderConfig, appState);
// do not clip arrows
if (!isArrowElement(element)) {
frameClip(frame, context, renderConfig, appState);
}
}
renderElement(element, rc, context, renderConfig, appState);
context.restore();

View File

@ -12,11 +12,23 @@ import type {
import { isPathALoop, getCornerRadius } from "../math";
import { generateFreeDrawShape } from "../renderer/renderElement";
import { isTransparent, assertNever } from "../utils";
import { simplify } from "points-on-curve";
import { ROUGHNESS } from "../constants";
import { Point } from "../types";
const getDashArrayDashed = (strokeWidth: number) => [8, 8 + strokeWidth];
const getDashArrayDotted = (strokeWidth: number) => [1.5, 6 + strokeWidth];
function adjustRoughness(size: number, roughness: number): number {
if (size >= 50) {
return roughness;
}
const factor = 2 + (50 - size) / 10;
return roughness / factor;
}
export const generateRoughOptions = (
element: ExcalidrawElement,
continuousPath = false,
@ -43,9 +55,13 @@ export const generateRoughOptions = (
// calculate them (and we don't want the fills to be modified)
fillWeight: element.strokeWidth / 2,
hachureGap: element.strokeWidth * 4,
roughness: element.roughness,
roughness: adjustRoughness(
Math.min(element.width, element.height),
element.roughness,
),
stroke: element.strokeColor,
preserveVertices: continuousPath,
preserveVertices:
continuousPath || element.roughness < ROUGHNESS.cartoonist,
};
switch (element.type) {
@ -213,18 +229,44 @@ export const _generateElementShape = (
// points array can be empty in the beginning, so it is important to add
// initial position to it
const points = element.points.length ? element.points : [[0, 0]];
const points = element.points.length
? element.points
: ([[0, 0]] as Point[]);
// curve is always the first element
// this simplifies finding the curve for an element
const splits = element.segmentSplitIndices || [];
if (!element.roundness) {
if (options.fill) {
shape = [generator.polygon(points as [number, number][], options)];
if (splits.length === 0) {
if (options.fill) {
shape = [generator.polygon(points as [number, number][], options)];
} else {
shape = [
generator.linearPath(points as [number, number][], options),
];
}
} else {
shape = [generator.linearPath(points as [number, number][], options)];
const splitInverse: number[] = [];
const splitSet = new Set(splits);
for (let i = 0; i < points.length; i++) {
if (!splitSet.has(i)) {
splitInverse.push(i);
}
}
shape = [
generator.curve(
computeMultipleCurvesFromSplits(points, splitInverse),
options,
),
];
}
} else {
shape = [generator.curve(points as [number, number][], options)];
shape = [
generator.curve(
computeMultipleCurvesFromSplits(points, splits),
options,
),
];
}
// add lines only in arrow
@ -334,7 +376,8 @@ export const _generateElementShape = (
if (isPathALoop(element.points)) {
// generate rough polygon to fill freedraw shape
shape = generator.polygon(element.points as [number, number][], {
const simplifiedPoints = simplify(element.points, 0.75);
shape = generator.curve(simplifiedPoints as [number, number][], {
...generateRoughOptions(element),
stroke: "none",
});
@ -360,3 +403,22 @@ export const _generateElementShape = (
}
}
};
const computeMultipleCurvesFromSplits = (
points: readonly Point[],
splits: readonly number[],
): [number, number][][] => {
const pointList: Point[][] = [];
let currentIndex = 0;
for (const index of splits) {
const slice = points.slice(currentIndex, index + 1);
if (slice.length) {
pointList.push([...slice]);
}
currentIndex = index;
}
if (currentIndex < points.length - 1) {
pointList.push(points.slice(currentIndex));
}
return pointList as [number, number][][];
};

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e
"boundElements": null,
"endArrowhead": "arrow",
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -38,7 +38,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 3,
@ -56,7 +56,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -72,7 +72,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e
"seed": 1278240551,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "diamond",
"updated": 1,
"version": 2,
@ -90,7 +90,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -106,7 +106,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e
"seed": 1278240551,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "ellipse",
"updated": 1,
"version": 2,
@ -124,7 +124,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e
"boundElements": null,
"endArrowhead": null,
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -153,7 +153,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "line",
"updated": 1,
"version": 3,
@ -171,7 +171,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -187,7 +187,7 @@ exports[`Test dragCreate > add element to the scene when pointer dragging long e
"seed": 1278240551,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 2,

View File

@ -5,7 +5,7 @@ exports[`duplicate element on move when ALT is clicked > rectangle 1`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -21,7 +21,7 @@ exports[`duplicate element on move when ALT is clicked > rectangle 1`] = `
"seed": 1014066025,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 4,
@ -37,7 +37,7 @@ exports[`duplicate element on move when ALT is clicked > rectangle 2`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -53,7 +53,7 @@ exports[`duplicate element on move when ALT is clicked > rectangle 2`] = `
"seed": 1278240551,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 4,
@ -69,7 +69,7 @@ exports[`move element > rectangle 1`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -85,7 +85,7 @@ exports[`move element > rectangle 1`] = `
"seed": 1278240551,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 3,
@ -106,7 +106,7 @@ exports[`move element > rectangles with binding arrow 1`] = `
"type": "arrow",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -122,7 +122,7 @@ exports[`move element > rectangles with binding arrow 1`] = `
"seed": 1278240551,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 3,
@ -143,7 +143,7 @@ exports[`move element > rectangles with binding arrow 2`] = `
"type": "arrow",
},
],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 300,
@ -159,7 +159,7 @@ exports[`move element > rectangles with binding arrow 2`] = `
"seed": 2019559783,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 6,
@ -181,7 +181,7 @@ exports[`move element > rectangles with binding arrow 3`] = `
"focus": -0.46666666666666673,
"gap": 10,
},
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 81.48231043525051,
@ -214,7 +214,7 @@ exports[`move element > rectangles with binding arrow 3`] = `
},
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "line",
"updated": 1,
"version": 11,

View File

@ -7,7 +7,7 @@ exports[`multi point mode in linear elements > arrow 1`] = `
"boundElements": null,
"endArrowhead": "arrow",
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 110,
@ -43,7 +43,7 @@ exports[`multi point mode in linear elements > arrow 1`] = `
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 7,
@ -61,7 +61,7 @@ exports[`multi point mode in linear elements > line 1`] = `
"boundElements": null,
"endArrowhead": null,
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 110,
@ -97,7 +97,7 @@ exports[`multi point mode in linear elements > line 1`] = `
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "line",
"updated": 1,
"version": 7,

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@ exports[`select single element on the scene > arrow 1`] = `
"boundElements": null,
"endArrowhead": "arrow",
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -36,7 +36,7 @@ exports[`select single element on the scene > arrow 1`] = `
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 3,
@ -54,7 +54,7 @@ exports[`select single element on the scene > arrow escape 1`] = `
"boundElements": null,
"endArrowhead": null,
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -83,7 +83,7 @@ exports[`select single element on the scene > arrow escape 1`] = `
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "line",
"updated": 1,
"version": 3,
@ -99,7 +99,7 @@ exports[`select single element on the scene > diamond 1`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -115,7 +115,7 @@ exports[`select single element on the scene > diamond 1`] = `
"seed": 1278240551,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "diamond",
"updated": 1,
"version": 2,
@ -131,7 +131,7 @@ exports[`select single element on the scene > ellipse 1`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -147,7 +147,7 @@ exports[`select single element on the scene > ellipse 1`] = `
"seed": 1278240551,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "ellipse",
"updated": 1,
"version": 2,
@ -163,7 +163,7 @@ exports[`select single element on the scene > rectangle 1`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 50,
@ -179,7 +179,7 @@ exports[`select single element on the scene > rectangle 1`] = `
"seed": 1278240551,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "rectangle",
"updated": 1,
"version": 2,

View File

@ -35,22 +35,14 @@ vi.mock("../keys.ts", async (importOriginal) => {
};
});
const setClipboardText = (text: string) => {
Object.assign(navigator, {
clipboard: {
readText: () => text,
},
const sendPasteEvent = (text: string) => {
const clipboardEvent = createPasteEvent({
"text/plain": text,
});
};
const sendPasteEvent = (text?: string) => {
const clipboardEvent = createPasteEvent(
text || (() => window.navigator.clipboard.readText()),
);
document.dispatchEvent(clipboardEvent);
};
const pasteWithCtrlCmdShiftV = (text?: string) => {
const pasteWithCtrlCmdShiftV = (text: string) => {
Keyboard.withModifierKeys({ ctrl: true, shift: true }, () => {
//triggering keydown with an empty clipboard
Keyboard.keyPress(KEYS.V);
@ -59,7 +51,7 @@ const pasteWithCtrlCmdShiftV = (text?: string) => {
});
};
const pasteWithCtrlCmdV = (text?: string) => {
const pasteWithCtrlCmdV = (text: string) => {
Keyboard.withModifierKeys({ ctrl: true }, () => {
//triggering keydown with an empty clipboard
Keyboard.keyPress(KEYS.V);
@ -86,7 +78,6 @@ beforeEach(async () => {
initialData={{ appState: { zoom: { value: 1 as NormalizedZoomValue } } }}
/>,
);
setClipboardText("");
Object.assign(document, {
elementFromPoint: () => GlobalTestState.canvas,
});
@ -120,8 +111,7 @@ describe("general paste behavior", () => {
describe("paste text as single lines", () => {
it("should create an element for each line when copying with Ctrl/Cmd+V", async () => {
const text = "sajgfakfn\naaksfnknas\nakefnkasf";
setClipboardText(text);
pasteWithCtrlCmdV();
pasteWithCtrlCmdV(text);
await waitFor(() => {
expect(h.elements.length).toEqual(text.split("\n").length);
});
@ -129,8 +119,7 @@ describe("paste text as single lines", () => {
it("should ignore empty lines when creating an element for each line", async () => {
const text = "\n\nsajgfakfn\n\n\naaksfnknas\n\nakefnkasf\n\n\n";
setClipboardText(text);
pasteWithCtrlCmdV();
pasteWithCtrlCmdV(text);
await waitFor(() => {
expect(h.elements.length).toEqual(3);
});
@ -138,8 +127,7 @@ describe("paste text as single lines", () => {
it("should not create any element if clipboard has only new lines", async () => {
const text = "\n\n\n\n\n";
setClipboardText(text);
pasteWithCtrlCmdV();
pasteWithCtrlCmdV(text);
await waitFor(async () => {
await sleep(50); // elements lenght will always be zero if we don't wait, since paste is async
expect(h.elements.length).toEqual(0);
@ -155,8 +143,7 @@ describe("paste text as single lines", () => {
) +
10 / h.app.state.zoom.value;
mouse.moveTo(100, 100);
setClipboardText(text);
pasteWithCtrlCmdV();
pasteWithCtrlCmdV(text);
await waitFor(async () => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const [fx, firstElY] = getElementBounds(h.elements[0]);
@ -177,8 +164,7 @@ describe("paste text as single lines", () => {
) +
10 / h.app.state.zoom.value;
mouse.moveTo(100, 100);
setClipboardText(text);
pasteWithCtrlCmdV();
pasteWithCtrlCmdV(text);
await waitFor(async () => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const [fx, firstElY] = getElementBounds(h.elements[0]);
@ -192,16 +178,14 @@ describe("paste text as single lines", () => {
describe("paste text as a single element", () => {
it("should create single text element when copying text with Ctrl/Cmd+Shift+V", async () => {
const text = "sajgfakfn\naaksfnknas\nakefnkasf";
setClipboardText(text);
pasteWithCtrlCmdShiftV();
pasteWithCtrlCmdShiftV(text);
await waitFor(() => {
expect(h.elements.length).toEqual(1);
});
});
it("should not create any element when only new lines in clipboard", async () => {
const text = "\n\n\n\n";
setClipboardText(text);
pasteWithCtrlCmdShiftV();
pasteWithCtrlCmdShiftV(text);
await waitFor(async () => {
await sleep(50);
expect(h.elements.length).toEqual(0);
@ -243,8 +227,7 @@ describe("Paste bound text container", () => {
type: "excalidraw/clipboard",
elements: [container, textElement],
});
setClipboardText(data);
pasteWithCtrlCmdShiftV();
pasteWithCtrlCmdShiftV(data);
await waitFor(async () => {
await sleep(1);
@ -266,8 +249,7 @@ describe("Paste bound text container", () => {
textElement,
],
});
setClipboardText(data);
pasteWithCtrlCmdShiftV();
pasteWithCtrlCmdShiftV(data);
await waitFor(async () => {
await sleep(1);

View File

@ -7,7 +7,7 @@ exports[`restoreElements > should restore arrow element correctly 1`] = `
"boundElements": [],
"endArrowhead": null,
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -36,7 +36,7 @@ exports[`restoreElements > should restore arrow element correctly 1`] = `
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "arrow",
"updated": 1,
"version": 1,
@ -160,7 +160,7 @@ exports[`restoreElements > should restore freedraw element correctly 1`] = `
"angle": 0,
"backgroundColor": "transparent",
"boundElements": [],
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 0,
@ -180,7 +180,7 @@ exports[`restoreElements > should restore freedraw element correctly 1`] = `
"simulatePressure": true,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "freedraw",
"updated": 1,
"version": 1,
@ -198,7 +198,7 @@ exports[`restoreElements > should restore line and draw elements correctly 1`] =
"boundElements": [],
"endArrowhead": null,
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -227,7 +227,7 @@ exports[`restoreElements > should restore line and draw elements correctly 1`] =
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "line",
"updated": 1,
"version": 1,
@ -245,7 +245,7 @@ exports[`restoreElements > should restore line and draw elements correctly 2`] =
"boundElements": [],
"endArrowhead": null,
"endBinding": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"frameId": null,
"groupIds": [],
"height": 100,
@ -274,7 +274,7 @@ exports[`restoreElements > should restore line and draw elements correctly 2`] =
"startBinding": null,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"type": "line",
"updated": 1,
"version": 1,
@ -292,7 +292,7 @@ exports[`restoreElements > should restore text element correctly passing value f
"baseline": 0,
"boundElements": [],
"containerId": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 14,
"frameId": null,
@ -312,7 +312,7 @@ exports[`restoreElements > should restore text element correctly passing value f
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "text",
"textAlign": "center",
"type": "text",
@ -333,7 +333,7 @@ exports[`restoreElements > should restore text element correctly with unknown fo
"baseline": 0,
"boundElements": [],
"containerId": null,
"fillStyle": "hachure",
"fillStyle": "solid",
"fontFamily": 1,
"fontSize": 10,
"frameId": null,
@ -353,7 +353,7 @@ exports[`restoreElements > should restore text element correctly with unknown fo
"seed": Any<Number>,
"strokeColor": "#1e1e1e",
"strokeStyle": "solid",
"strokeWidth": 1,
"strokeWidth": 2,
"text": "",
"textAlign": "left",
"type": "text",

View File

@ -727,7 +727,7 @@ describe("freedraw", () => {
describe("image", () => {
const createImage = async () => {
const sendPasteEvent = (file?: File) => {
const clipboardEvent = createPasteEvent("", file ? [file] : []);
const clipboardEvent = createPasteEvent({}, file ? [file] : []);
document.dispatchEvent(clipboardEvent);
};

Some files were not shown because too many files have changed in this diff Show More