Compare commits
68 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| add75b8c93 | |||
| 0749d2c1f3 | |||
| 8787f3dc60 | |||
| 5fabc57277 | |||
| e7cbb859f0 | |||
| aa860251c7 | |||
| 380aaa30e6 | |||
| 2e61fec7a6 | |||
| 3c295559c7 | |||
| 55d3287abf | |||
| e3e967421e | |||
| 77aae63006 | |||
| ee64a7e264 | |||
| 097362662d | |||
| 038e9c13dd | |||
| bc8ba08ad0 | |||
| f861a9fdd0 | |||
| 62303b8a22 | |||
| 9cc741ab3a | |||
| 2d279cbb02 | |||
| 57ea4fdf9a | |||
| 44402f42bf | |||
| bdead4d164 | |||
| bfc0656475 | |||
| a33a3334f7 | |||
| 969d3c694a | |||
| 5cd921549a | |||
| 437afcbea4 | |||
| 6dee02e320 | |||
| 74a2f16501 | |||
| fd4460be37 | |||
| e82d0493cf | |||
| 083cb4c656 | |||
| d067365c1d | |||
| 273cac6b60 | |||
| b9337b8a36 | |||
| 0e0025921b | |||
| efc01ddab1 | |||
| 7bce22b114 | |||
| aab4965bbb | |||
| 486a9a3da8 | |||
| 2425c06082 | |||
| 79ea844901 | |||
| 6690215cd1 | |||
| 7f5e783fe8 | |||
| 9325109836 | |||
| 69b6fbb3f4 | |||
| 6b6002baae | |||
| 54dcb73701 | |||
| b595d3fcba | |||
| d0867d1c3b | |||
| 0d19e9210c | |||
| 4249de41d4 | |||
| 15f02ba191 | |||
| a2e1199907 | |||
| c08e9c4172 | |||
| abfc58eb24 | |||
| 035c7affff | |||
| c819b653bf | |||
| 60cea7a0c2 | |||
| d63b6a3469 | |||
| 0912fe1c93 | |||
| 360310de31 | |||
| 716c78e930 | |||
| ba48974351 | |||
| 6c3e4417e1 | |||
| bc0b6e1888 | |||
| 99a22e8445 |
@@ -5,9 +5,11 @@
|
|||||||
.env.test.local
|
.env.test.local
|
||||||
.envrc
|
.envrc
|
||||||
.eslintcache
|
.eslintcache
|
||||||
|
.history
|
||||||
.idea
|
.idea
|
||||||
.vercel
|
.vercel
|
||||||
.vscode
|
.vscode
|
||||||
|
.yarn
|
||||||
*.log
|
*.log
|
||||||
*.tgz
|
*.tgz
|
||||||
build
|
build
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ ARG NODE_ENV=production
|
|||||||
COPY . .
|
COPY . .
|
||||||
RUN yarn build:app:docker
|
RUN yarn build:app:docker
|
||||||
|
|
||||||
FROM nginx:1.17-alpine
|
FROM nginx:1.21-alpine
|
||||||
|
|
||||||
COPY --from=build /opt/node_app/build /usr/share/nginx/html
|
COPY --from=build /opt/node_app/build /usr/share/nginx/html
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ These instructions will get you a copy of the project up and running on your loc
|
|||||||
#### Requirements
|
#### Requirements
|
||||||
|
|
||||||
- [Node.js](https://nodejs.org/en/)
|
- [Node.js](https://nodejs.org/en/)
|
||||||
- [Yarn](https://yarnpkg.com/getting-started/install)
|
- [Yarn](https://yarnpkg.com/getting-started/install) (v1 or v2.4.2+)
|
||||||
- [Git](https://git-scm.com/downloads)
|
- [Git](https://git-scm.com/downloads)
|
||||||
|
|
||||||
#### Clone the repo
|
#### Clone the repo
|
||||||
|
|||||||
@@ -2,5 +2,8 @@
|
|||||||
"firestore": {
|
"firestore": {
|
||||||
"rules": "firestore.rules",
|
"rules": "firestore.rules",
|
||||||
"indexes": "firestore.indexes.json"
|
"indexes": "firestore.indexes.json"
|
||||||
|
},
|
||||||
|
"storage": {
|
||||||
|
"rules": "storage.rules"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
rules_version = '2';
|
||||||
|
service firebase.storage {
|
||||||
|
match /b/{bucket}/o {
|
||||||
|
match /{migrations} {
|
||||||
|
match /{scenes}/{scene} {
|
||||||
|
allow get, write: if true;
|
||||||
|
// redundant, but let's be explicit'
|
||||||
|
allow list: if false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -27,7 +27,7 @@
|
|||||||
"@types/react": "17.0.3",
|
"@types/react": "17.0.3",
|
||||||
"@types/react-dom": "17.0.3",
|
"@types/react-dom": "17.0.3",
|
||||||
"@types/socket.io-client": "1.4.36",
|
"@types/socket.io-client": "1.4.36",
|
||||||
"browser-fs-access": "0.16.4",
|
"browser-fs-access": "0.18.0",
|
||||||
"clsx": "1.1.1",
|
"clsx": "1.1.1",
|
||||||
"firebase": "8.3.3",
|
"firebase": "8.3.3",
|
||||||
"i18next-browser-languagedetector": "6.1.0",
|
"i18next-browser-languagedetector": "6.1.0",
|
||||||
|
|||||||
Binary file not shown.
@@ -117,6 +117,7 @@
|
|||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.visually-hidden {
|
.visually-hidden {
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ const crowdinMap = {
|
|||||||
"zh-CN": "en-zhcn",
|
"zh-CN": "en-zhcn",
|
||||||
"zh-TW": "en-zhtw",
|
"zh-TW": "en-zhtw",
|
||||||
"lv-LV": "en-lv",
|
"lv-LV": "en-lv",
|
||||||
|
"cs-CZ": "en-cs",
|
||||||
|
"kk-KZ": "en-kk",
|
||||||
};
|
};
|
||||||
|
|
||||||
const flags = {
|
const flags = {
|
||||||
@@ -76,6 +78,8 @@ const flags = {
|
|||||||
"zh-CN": "🇨🇳",
|
"zh-CN": "🇨🇳",
|
||||||
"zh-TW": "🇹🇼",
|
"zh-TW": "🇹🇼",
|
||||||
"lv-LV": "🇱🇻",
|
"lv-LV": "🇱🇻",
|
||||||
|
"cs-CZ": "🇨🇿",
|
||||||
|
"kk-KZ": "🇰🇿",
|
||||||
};
|
};
|
||||||
|
|
||||||
const languages = {
|
const languages = {
|
||||||
@@ -114,6 +118,8 @@ const languages = {
|
|||||||
"zh-CN": "简体中文",
|
"zh-CN": "简体中文",
|
||||||
"zh-TW": "繁體中文",
|
"zh-TW": "繁體中文",
|
||||||
"lv-LV": "Latviešu",
|
"lv-LV": "Latviešu",
|
||||||
|
"cs-CZ": "Česky",
|
||||||
|
"kk-KZ": "Қазақ тілі",
|
||||||
};
|
};
|
||||||
|
|
||||||
const percentages = fs.readFileSync(
|
const percentages = fs.readFileSync(
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
const fs = require("fs");
|
||||||
|
const util = require("util");
|
||||||
|
const exec = util.promisify(require("child_process").exec);
|
||||||
|
const updateReadme = require("./updateReadme");
|
||||||
|
const updateChangelog = require("./updateChangelog");
|
||||||
|
|
||||||
|
const excalidrawDir = `${__dirname}/../src/packages/excalidraw`;
|
||||||
|
const excalidrawPackage = `${excalidrawDir}/package.json`;
|
||||||
|
|
||||||
|
const updatePackageVersion = (nextVersion) => {
|
||||||
|
const pkg = require(excalidrawPackage);
|
||||||
|
pkg.version = nextVersion;
|
||||||
|
const content = `${JSON.stringify(pkg, null, 2)}\n`;
|
||||||
|
fs.writeFileSync(excalidrawPackage, content, "utf-8");
|
||||||
|
};
|
||||||
|
|
||||||
|
const release = async (nextVersion) => {
|
||||||
|
try {
|
||||||
|
updateReadme();
|
||||||
|
await updateChangelog(nextVersion);
|
||||||
|
updatePackageVersion(nextVersion);
|
||||||
|
await exec(`git add -u`);
|
||||||
|
await exec(
|
||||||
|
`git commit -m "docs: release excalidraw@excalidraw@${nextVersion} 🎉"`,
|
||||||
|
);
|
||||||
|
/* eslint-disable no-console */
|
||||||
|
console.log("Done!");
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const nextVersion = process.argv.slice(2)[0];
|
||||||
|
if (!nextVersion) {
|
||||||
|
console.error("Pass the next version to release!");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
release(nextVersion);
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
const fs = require("fs");
|
||||||
|
const util = require("util");
|
||||||
|
const exec = util.promisify(require("child_process").exec);
|
||||||
|
|
||||||
|
const excalidrawDir = `${__dirname}/../src/packages/excalidraw`;
|
||||||
|
const excalidrawPackage = `${excalidrawDir}/package.json`;
|
||||||
|
const pkg = require(excalidrawPackage);
|
||||||
|
const lastVersion = pkg.version;
|
||||||
|
const existingChangeLog = fs.readFileSync(
|
||||||
|
`${excalidrawDir}/CHANGELOG.md`,
|
||||||
|
"utf8",
|
||||||
|
);
|
||||||
|
|
||||||
|
const supportedTypes = ["feat", "fix", "style", "refactor", "perf", "build"];
|
||||||
|
const headerForType = {
|
||||||
|
feat: "Features",
|
||||||
|
fix: "Fixes",
|
||||||
|
style: "Styles",
|
||||||
|
refactor: " Refactor",
|
||||||
|
perf: "Performance",
|
||||||
|
build: "Build",
|
||||||
|
};
|
||||||
|
|
||||||
|
const getCommitHashForLastVersion = async () => {
|
||||||
|
try {
|
||||||
|
const commitMessage = `"release @excalidraw/excalidraw@${lastVersion}"`;
|
||||||
|
const { stdout } = await exec(
|
||||||
|
`git log --format=format:"%H" --grep=${commitMessage}`,
|
||||||
|
);
|
||||||
|
return stdout;
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const getLibraryCommitsSinceLastRelease = async () => {
|
||||||
|
const commitHash = await getCommitHashForLastVersion();
|
||||||
|
const { stdout } = await exec(
|
||||||
|
`git log --pretty=format:%s ${commitHash}...master`,
|
||||||
|
);
|
||||||
|
const commitsSinceLastRelease = stdout.split("\n");
|
||||||
|
const commitList = {};
|
||||||
|
supportedTypes.forEach((type) => {
|
||||||
|
commitList[type] = [];
|
||||||
|
});
|
||||||
|
|
||||||
|
commitsSinceLastRelease.forEach((commit) => {
|
||||||
|
const indexOfColon = commit.indexOf(":");
|
||||||
|
const type = commit.slice(0, indexOfColon);
|
||||||
|
if (!supportedTypes.includes(type)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const messageWithoutType = commit.slice(indexOfColon + 1).trim();
|
||||||
|
const messageWithCapitalizeFirst =
|
||||||
|
messageWithoutType.charAt(0).toUpperCase() + messageWithoutType.slice(1);
|
||||||
|
const prNumber = commit.match(/\(#([0-9]*)\)/)[1];
|
||||||
|
|
||||||
|
// return if the changelog already contains the pr number which would happen for package updates
|
||||||
|
if (existingChangeLog.includes(prNumber)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const prMarkdown = `[#${prNumber}](https://github.com/excalidraw/excalidraw/pull/${prNumber})`;
|
||||||
|
const messageWithPRLink = messageWithCapitalizeFirst.replace(
|
||||||
|
/\(#[0-9]*\)/,
|
||||||
|
prMarkdown,
|
||||||
|
);
|
||||||
|
commitList[type].push(messageWithPRLink);
|
||||||
|
});
|
||||||
|
return commitList;
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateChangelog = async (nextVersion) => {
|
||||||
|
const commitList = await getLibraryCommitsSinceLastRelease();
|
||||||
|
let changelogForLibrary =
|
||||||
|
"## Excalidraw Library\n\n**_This section lists the updates made to the excalidraw library and will not affect the integration._**\n\n";
|
||||||
|
supportedTypes.forEach((type) => {
|
||||||
|
if (commitList[type].length) {
|
||||||
|
changelogForLibrary += `### ${headerForType[type]}\n\n`;
|
||||||
|
const commits = commitList[type];
|
||||||
|
commits.forEach((commit) => {
|
||||||
|
changelogForLibrary += `- ${commit}\n\n`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
changelogForLibrary += "---\n";
|
||||||
|
const lastVersionIndex = existingChangeLog.indexOf(`## ${lastVersion}`);
|
||||||
|
let updatedContent =
|
||||||
|
existingChangeLog.slice(0, lastVersionIndex) +
|
||||||
|
changelogForLibrary +
|
||||||
|
existingChangeLog.slice(lastVersionIndex);
|
||||||
|
const currentDate = new Date().toISOString().slice(0, 10);
|
||||||
|
const newVersion = `## ${nextVersion} (${currentDate})`;
|
||||||
|
updatedContent = updatedContent.replace(`## Unreleased`, newVersion);
|
||||||
|
fs.writeFileSync(`${excalidrawDir}/CHANGELOG.md`, updatedContent, "utf8");
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = updateChangelog;
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const updateReadme = () => {
|
||||||
|
const excalidrawDir = `${__dirname}/../src/packages/excalidraw`;
|
||||||
|
let data = fs.readFileSync(`${excalidrawDir}/README_NEXT.md`, "utf8");
|
||||||
|
|
||||||
|
// remove note for unstable release
|
||||||
|
data = data.replace(
|
||||||
|
/<!-- unstable-readme-start-->[\s\S]*?<!-- unstable-readme-end-->/,
|
||||||
|
"",
|
||||||
|
);
|
||||||
|
|
||||||
|
// replace "excalidraw-next" with "excalidraw"
|
||||||
|
data = data.replace(/excalidraw-next/g, "excalidraw");
|
||||||
|
data = data.trim();
|
||||||
|
|
||||||
|
const demoIndex = data.indexOf("### Demo");
|
||||||
|
const excalidrawNextNote =
|
||||||
|
"#### Note\n\n**If you don't want to wait for the next stable release and try out the unreleased changes you can use [@excalidraw/excalidraw-next](https://www.npmjs.com/package/@excalidraw/excalidraw-next).**\n\n";
|
||||||
|
// Add excalidraw next note to try out for unreleased changes
|
||||||
|
data = data.slice(0, demoIndex) + excalidrawNextNote + data.slice(demoIndex);
|
||||||
|
|
||||||
|
// update readme
|
||||||
|
fs.writeFileSync(`${excalidrawDir}/README.md`, data, "utf8");
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = updateReadme;
|
||||||
@@ -22,8 +22,8 @@ export const actionChangeViewBackgroundColor = register({
|
|||||||
name: "changeViewBackgroundColor",
|
name: "changeViewBackgroundColor",
|
||||||
perform: (_, appState, value) => {
|
perform: (_, appState, value) => {
|
||||||
return {
|
return {
|
||||||
appState: { ...appState, viewBackgroundColor: value },
|
appState: { ...appState, ...value },
|
||||||
commitToHistory: true,
|
commitToHistory: !!value.viewBackgroundColor,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
PanelComponent: ({ appState, updateData }) => {
|
PanelComponent: ({ appState, updateData }) => {
|
||||||
@@ -33,7 +33,11 @@ export const actionChangeViewBackgroundColor = register({
|
|||||||
label={t("labels.canvasBackground")}
|
label={t("labels.canvasBackground")}
|
||||||
type="canvasBackground"
|
type="canvasBackground"
|
||||||
color={appState.viewBackgroundColor}
|
color={appState.viewBackgroundColor}
|
||||||
onChange={(color) => updateData(color)}
|
onChange={(color) => updateData({ viewBackgroundColor: color })}
|
||||||
|
isActive={appState.openPopup === "canvasColorPicker"}
|
||||||
|
setActive={(active) =>
|
||||||
|
updateData({ openPopup: active ? "canvasColorPicker" : null })
|
||||||
|
}
|
||||||
data-testid="canvas-background-picker"
|
data-testid="canvas-background-picker"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { trackEvent } from "../analytics";
|
import { trackEvent } from "../analytics";
|
||||||
import { load, questionCircle, save, saveAs } from "../components/icons";
|
import { load, questionCircle, saveAs } from "../components/icons";
|
||||||
import { ProjectName } from "../components/ProjectName";
|
import { ProjectName } from "../components/ProjectName";
|
||||||
import { ToolButton } from "../components/ToolButton";
|
import { ToolButton } from "../components/ToolButton";
|
||||||
import "../components/ToolIcon.scss";
|
import "../components/ToolIcon.scss";
|
||||||
@@ -13,6 +13,11 @@ import { KEYS } from "../keys";
|
|||||||
import { register } from "./register";
|
import { register } from "./register";
|
||||||
import { supported as fsSupported } from "browser-fs-access";
|
import { supported as fsSupported } from "browser-fs-access";
|
||||||
import { CheckboxItem } from "../components/CheckboxItem";
|
import { CheckboxItem } from "../components/CheckboxItem";
|
||||||
|
import { getExportSize } from "../scene/export";
|
||||||
|
import { DEFAULT_EXPORT_PADDING, EXPORT_SCALES } from "../constants";
|
||||||
|
import { getSelectedElements, isSomeElementSelected } from "../scene";
|
||||||
|
import { getNonDeletedElements } from "../element";
|
||||||
|
import { ActiveFile } from "../components/ActiveFile";
|
||||||
|
|
||||||
export const actionChangeProjectName = register({
|
export const actionChangeProjectName = register({
|
||||||
name: "changeProjectName",
|
name: "changeProjectName",
|
||||||
@@ -32,6 +37,54 @@ export const actionChangeProjectName = register({
|
|||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const actionChangeExportScale = register({
|
||||||
|
name: "changeExportScale",
|
||||||
|
perform: (_elements, appState, value) => {
|
||||||
|
return {
|
||||||
|
appState: { ...appState, exportScale: value },
|
||||||
|
commitToHistory: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
PanelComponent: ({ elements: allElements, appState, updateData }) => {
|
||||||
|
const elements = getNonDeletedElements(allElements);
|
||||||
|
const exportSelected = isSomeElementSelected(elements, appState);
|
||||||
|
const exportedElements = exportSelected
|
||||||
|
? getSelectedElements(elements, appState)
|
||||||
|
: elements;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{EXPORT_SCALES.map((s) => {
|
||||||
|
const [width, height] = getExportSize(
|
||||||
|
exportedElements,
|
||||||
|
DEFAULT_EXPORT_PADDING,
|
||||||
|
s,
|
||||||
|
);
|
||||||
|
|
||||||
|
const scaleButtonTitle = `${t(
|
||||||
|
"buttons.scale",
|
||||||
|
)} ${s}x (${width}x${height})`;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ToolButton
|
||||||
|
key={s}
|
||||||
|
size="s"
|
||||||
|
type="radio"
|
||||||
|
icon={`${s}x`}
|
||||||
|
name="export-canvas-scale"
|
||||||
|
title={scaleButtonTitle}
|
||||||
|
aria-label={scaleButtonTitle}
|
||||||
|
id="export-canvas-scale"
|
||||||
|
checked={s === appState.exportScale}
|
||||||
|
onChange={() => updateData(s)}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
export const actionChangeExportBackground = register({
|
export const actionChangeExportBackground = register({
|
||||||
name: "changeExportBackground",
|
name: "changeExportBackground",
|
||||||
perform: (_elements, appState, value) => {
|
perform: (_elements, appState, value) => {
|
||||||
@@ -71,8 +124,8 @@ export const actionChangeExportEmbedScene = register({
|
|||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const actionSaveScene = register({
|
export const actionSaveToActiveFile = register({
|
||||||
name: "saveScene",
|
name: "saveToActiveFile",
|
||||||
perform: async (elements, appState, value) => {
|
perform: async (elements, appState, value) => {
|
||||||
const fileHandleExists = !!appState.fileHandle;
|
const fileHandleExists = !!appState.fileHandle;
|
||||||
try {
|
try {
|
||||||
@@ -101,20 +154,16 @@ export const actionSaveScene = register({
|
|||||||
},
|
},
|
||||||
keyTest: (event) =>
|
keyTest: (event) =>
|
||||||
event.key === KEYS.S && event[KEYS.CTRL_OR_CMD] && !event.shiftKey,
|
event.key === KEYS.S && event[KEYS.CTRL_OR_CMD] && !event.shiftKey,
|
||||||
PanelComponent: ({ updateData }) => (
|
PanelComponent: ({ updateData, appState }) => (
|
||||||
<ToolButton
|
<ActiveFile
|
||||||
type="icon"
|
onSave={() => updateData(null)}
|
||||||
icon={save}
|
fileName={appState.fileHandle?.name}
|
||||||
title={t("buttons.save")}
|
|
||||||
aria-label={t("buttons.save")}
|
|
||||||
onClick={() => updateData(null)}
|
|
||||||
data-testid="save-button"
|
|
||||||
/>
|
/>
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const actionSaveAsScene = register({
|
export const actionSaveFileToDisk = register({
|
||||||
name: "saveAsScene",
|
name: "saveFileToDisk",
|
||||||
perform: async (elements, appState, value) => {
|
perform: async (elements, appState, value) => {
|
||||||
try {
|
try {
|
||||||
const { fileHandle } = await saveAsJSON(elements, {
|
const { fileHandle } = await saveAsJSON(elements, {
|
||||||
@@ -152,7 +201,7 @@ export const actionLoadScene = register({
|
|||||||
const {
|
const {
|
||||||
elements: loadedElements,
|
elements: loadedElements,
|
||||||
appState: loadedAppState,
|
appState: loadedAppState,
|
||||||
} = await loadFromJSON(appState);
|
} = await loadFromJSON(appState, elements);
|
||||||
return {
|
return {
|
||||||
elements: loadedElements,
|
elements: loadedElements,
|
||||||
appState: loadedAppState,
|
appState: loadedAppState,
|
||||||
|
|||||||
@@ -13,6 +13,13 @@ import {
|
|||||||
FillCrossHatchIcon,
|
FillCrossHatchIcon,
|
||||||
FillHachureIcon,
|
FillHachureIcon,
|
||||||
FillSolidIcon,
|
FillSolidIcon,
|
||||||
|
FontFamilyCodeIcon,
|
||||||
|
FontFamilyHandDrawnIcon,
|
||||||
|
FontFamilyNormalIcon,
|
||||||
|
FontSizeExtraLargeIcon,
|
||||||
|
FontSizeLargeIcon,
|
||||||
|
FontSizeMediumIcon,
|
||||||
|
FontSizeSmallIcon,
|
||||||
SloppinessArchitectIcon,
|
SloppinessArchitectIcon,
|
||||||
SloppinessArtistIcon,
|
SloppinessArtistIcon,
|
||||||
SloppinessCartoonistIcon,
|
SloppinessCartoonistIcon,
|
||||||
@@ -20,18 +27,15 @@ import {
|
|||||||
StrokeStyleDottedIcon,
|
StrokeStyleDottedIcon,
|
||||||
StrokeStyleSolidIcon,
|
StrokeStyleSolidIcon,
|
||||||
StrokeWidthIcon,
|
StrokeWidthIcon,
|
||||||
FontSizeSmallIcon,
|
|
||||||
FontSizeMediumIcon,
|
|
||||||
FontSizeLargeIcon,
|
|
||||||
FontSizeExtraLargeIcon,
|
|
||||||
FontFamilyHandDrawnIcon,
|
|
||||||
FontFamilyNormalIcon,
|
|
||||||
FontFamilyCodeIcon,
|
|
||||||
TextAlignLeftIcon,
|
|
||||||
TextAlignCenterIcon,
|
TextAlignCenterIcon,
|
||||||
|
TextAlignLeftIcon,
|
||||||
TextAlignRightIcon,
|
TextAlignRightIcon,
|
||||||
} from "../components/icons";
|
} from "../components/icons";
|
||||||
import { DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE } from "../constants";
|
import {
|
||||||
|
DEFAULT_FONT_FAMILY,
|
||||||
|
DEFAULT_FONT_SIZE,
|
||||||
|
FONT_FAMILY,
|
||||||
|
} from "../constants";
|
||||||
import {
|
import {
|
||||||
getNonDeletedElements,
|
getNonDeletedElements,
|
||||||
isTextElement,
|
isTextElement,
|
||||||
@@ -44,7 +48,7 @@ import {
|
|||||||
ExcalidrawElement,
|
ExcalidrawElement,
|
||||||
ExcalidrawLinearElement,
|
ExcalidrawLinearElement,
|
||||||
ExcalidrawTextElement,
|
ExcalidrawTextElement,
|
||||||
FontFamily,
|
FontFamilyValues,
|
||||||
TextAlign,
|
TextAlign,
|
||||||
} from "../element/types";
|
} from "../element/types";
|
||||||
import { getLanguage, t } from "../i18n";
|
import { getLanguage, t } from "../i18n";
|
||||||
@@ -99,13 +103,18 @@ export const actionChangeStrokeColor = register({
|
|||||||
name: "changeStrokeColor",
|
name: "changeStrokeColor",
|
||||||
perform: (elements, appState, value) => {
|
perform: (elements, appState, value) => {
|
||||||
return {
|
return {
|
||||||
elements: changeProperty(elements, appState, (el) =>
|
...(value.currentItemStrokeColor && {
|
||||||
newElementWith(el, {
|
elements: changeProperty(elements, appState, (el) =>
|
||||||
strokeColor: value,
|
newElementWith(el, {
|
||||||
}),
|
strokeColor: value.currentItemStrokeColor,
|
||||||
),
|
}),
|
||||||
appState: { ...appState, currentItemStrokeColor: value },
|
),
|
||||||
commitToHistory: true,
|
}),
|
||||||
|
appState: {
|
||||||
|
...appState,
|
||||||
|
...value,
|
||||||
|
},
|
||||||
|
commitToHistory: !!value.currentItemStrokeColor,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
PanelComponent: ({ elements, appState, updateData }) => (
|
PanelComponent: ({ elements, appState, updateData }) => (
|
||||||
@@ -120,7 +129,11 @@ export const actionChangeStrokeColor = register({
|
|||||||
(element) => element.strokeColor,
|
(element) => element.strokeColor,
|
||||||
appState.currentItemStrokeColor,
|
appState.currentItemStrokeColor,
|
||||||
)}
|
)}
|
||||||
onChange={updateData}
|
onChange={(color) => updateData({ currentItemStrokeColor: color })}
|
||||||
|
isActive={appState.openPopup === "strokeColorPicker"}
|
||||||
|
setActive={(active) =>
|
||||||
|
updateData({ openPopup: active ? "strokeColorPicker" : null })
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
@@ -130,13 +143,18 @@ export const actionChangeBackgroundColor = register({
|
|||||||
name: "changeBackgroundColor",
|
name: "changeBackgroundColor",
|
||||||
perform: (elements, appState, value) => {
|
perform: (elements, appState, value) => {
|
||||||
return {
|
return {
|
||||||
elements: changeProperty(elements, appState, (el) =>
|
...(value.currentItemBackgroundColor && {
|
||||||
newElementWith(el, {
|
elements: changeProperty(elements, appState, (el) =>
|
||||||
backgroundColor: value,
|
newElementWith(el, {
|
||||||
}),
|
backgroundColor: value.currentItemBackgroundColor,
|
||||||
),
|
}),
|
||||||
appState: { ...appState, currentItemBackgroundColor: value },
|
),
|
||||||
commitToHistory: true,
|
}),
|
||||||
|
appState: {
|
||||||
|
...appState,
|
||||||
|
...value,
|
||||||
|
},
|
||||||
|
commitToHistory: !!value.currentItemBackgroundColor,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
PanelComponent: ({ elements, appState, updateData }) => (
|
PanelComponent: ({ elements, appState, updateData }) => (
|
||||||
@@ -151,7 +169,11 @@ export const actionChangeBackgroundColor = register({
|
|||||||
(element) => element.backgroundColor,
|
(element) => element.backgroundColor,
|
||||||
appState.currentItemBackgroundColor,
|
appState.currentItemBackgroundColor,
|
||||||
)}
|
)}
|
||||||
onChange={updateData}
|
onChange={(color) => updateData({ currentItemBackgroundColor: color })}
|
||||||
|
isActive={appState.openPopup === "backgroundColorPicker"}
|
||||||
|
setActive={(active) =>
|
||||||
|
updateData({ openPopup: active ? "backgroundColorPicker" : null })
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
@@ -481,19 +503,23 @@ export const actionChangeFontFamily = register({
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
PanelComponent: ({ elements, appState, updateData }) => {
|
PanelComponent: ({ elements, appState, updateData }) => {
|
||||||
const options: { value: FontFamily; text: string; icon: JSX.Element }[] = [
|
const options: {
|
||||||
|
value: FontFamilyValues;
|
||||||
|
text: string;
|
||||||
|
icon: JSX.Element;
|
||||||
|
}[] = [
|
||||||
{
|
{
|
||||||
value: 1,
|
value: FONT_FAMILY.Virgil,
|
||||||
text: t("labels.handDrawn"),
|
text: t("labels.handDrawn"),
|
||||||
icon: <FontFamilyHandDrawnIcon theme={appState.theme} />,
|
icon: <FontFamilyHandDrawnIcon theme={appState.theme} />,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 2,
|
value: FONT_FAMILY.Helvetica,
|
||||||
text: t("labels.normal"),
|
text: t("labels.normal"),
|
||||||
icon: <FontFamilyNormalIcon theme={appState.theme} />,
|
icon: <FontFamilyNormalIcon theme={appState.theme} />,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 3,
|
value: FONT_FAMILY.Cascadia,
|
||||||
text: t("labels.code"),
|
text: t("labels.code"),
|
||||||
icon: <FontFamilyCodeIcon theme={appState.theme} />,
|
icon: <FontFamilyCodeIcon theme={appState.theme} />,
|
||||||
},
|
},
|
||||||
@@ -502,7 +528,7 @@ export const actionChangeFontFamily = register({
|
|||||||
return (
|
return (
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{t("labels.fontFamily")}</legend>
|
<legend>{t("labels.fontFamily")}</legend>
|
||||||
<ButtonIconSelect<FontFamily | false>
|
<ButtonIconSelect<FontFamilyValues | false>
|
||||||
group="font-family"
|
group="font-family"
|
||||||
options={options}
|
options={options}
|
||||||
value={getFormValue(
|
value={getFormValue(
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ export const actionToggleViewMode = register({
|
|||||||
appState: {
|
appState: {
|
||||||
...appState,
|
...appState,
|
||||||
viewModeEnabled: !this.checked!(appState),
|
viewModeEnabled: !this.checked!(appState),
|
||||||
selectedElementIds: {},
|
|
||||||
},
|
},
|
||||||
commitToHistory: false,
|
commitToHistory: false,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ export { actionFinalize } from "./actionFinalize";
|
|||||||
export {
|
export {
|
||||||
actionChangeProjectName,
|
actionChangeProjectName,
|
||||||
actionChangeExportBackground,
|
actionChangeExportBackground,
|
||||||
actionSaveScene,
|
actionSaveToActiveFile,
|
||||||
actionSaveAsScene,
|
actionSaveFileToDisk,
|
||||||
actionLoadScene,
|
actionLoadScene,
|
||||||
} from "./actionExport";
|
} from "./actionExport";
|
||||||
|
|
||||||
|
|||||||
@@ -66,8 +66,9 @@ export type ActionName =
|
|||||||
| "changeProjectName"
|
| "changeProjectName"
|
||||||
| "changeExportBackground"
|
| "changeExportBackground"
|
||||||
| "changeExportEmbedScene"
|
| "changeExportEmbedScene"
|
||||||
| "saveScene"
|
| "changeExportScale"
|
||||||
| "saveAsScene"
|
| "saveToActiveFile"
|
||||||
|
| "saveFileToDisk"
|
||||||
| "loadScene"
|
| "loadScene"
|
||||||
| "duplicateSelection"
|
| "duplicateSelection"
|
||||||
| "deleteSelectedElements"
|
| "deleteSelectedElements"
|
||||||
|
|||||||
@@ -3,11 +3,16 @@ import {
|
|||||||
DEFAULT_FONT_FAMILY,
|
DEFAULT_FONT_FAMILY,
|
||||||
DEFAULT_FONT_SIZE,
|
DEFAULT_FONT_SIZE,
|
||||||
DEFAULT_TEXT_ALIGN,
|
DEFAULT_TEXT_ALIGN,
|
||||||
|
EXPORT_SCALES,
|
||||||
} from "./constants";
|
} from "./constants";
|
||||||
import { t } from "./i18n";
|
import { t } from "./i18n";
|
||||||
import { AppState, NormalizedZoomValue } from "./types";
|
import { AppState, NormalizedZoomValue } from "./types";
|
||||||
import { getDateTime } from "./utils";
|
import { getDateTime } from "./utils";
|
||||||
|
|
||||||
|
const defaultExportScale = EXPORT_SCALES.includes(devicePixelRatio)
|
||||||
|
? devicePixelRatio
|
||||||
|
: 1;
|
||||||
|
|
||||||
export const getDefaultAppState = (): Omit<
|
export const getDefaultAppState = (): Omit<
|
||||||
AppState,
|
AppState,
|
||||||
"offsetTop" | "offsetLeft" | "width" | "height"
|
"offsetTop" | "offsetLeft" | "width" | "height"
|
||||||
@@ -39,6 +44,7 @@ export const getDefaultAppState = (): Omit<
|
|||||||
elementType: "selection",
|
elementType: "selection",
|
||||||
errorMessage: null,
|
errorMessage: null,
|
||||||
exportBackground: true,
|
exportBackground: true,
|
||||||
|
exportScale: defaultExportScale,
|
||||||
exportEmbedScene: false,
|
exportEmbedScene: false,
|
||||||
exportWithDarkMode: false,
|
exportWithDarkMode: false,
|
||||||
fileHandle: null,
|
fileHandle: null,
|
||||||
@@ -52,6 +58,7 @@ export const getDefaultAppState = (): Omit<
|
|||||||
multiElement: null,
|
multiElement: null,
|
||||||
name: `${t("labels.untitled")}-${getDateTime()}`,
|
name: `${t("labels.untitled")}-${getDateTime()}`,
|
||||||
openMenu: null,
|
openMenu: null,
|
||||||
|
openPopup: null,
|
||||||
pasteDialog: { shown: false, data: null },
|
pasteDialog: { shown: false, data: null },
|
||||||
previousSelectedElementIds: {},
|
previousSelectedElementIds: {},
|
||||||
resizingElement: null,
|
resizingElement: null,
|
||||||
@@ -116,6 +123,7 @@ const APP_STATE_STORAGE_CONF = (<
|
|||||||
errorMessage: { browser: false, export: false },
|
errorMessage: { browser: false, export: false },
|
||||||
exportBackground: { browser: true, export: false },
|
exportBackground: { browser: true, export: false },
|
||||||
exportEmbedScene: { browser: true, export: false },
|
exportEmbedScene: { browser: true, export: false },
|
||||||
|
exportScale: { browser: true, export: false },
|
||||||
exportWithDarkMode: { browser: true, export: false },
|
exportWithDarkMode: { browser: true, export: false },
|
||||||
fileHandle: { browser: false, export: false },
|
fileHandle: { browser: false, export: false },
|
||||||
gridSize: { browser: true, export: true },
|
gridSize: { browser: true, export: true },
|
||||||
@@ -131,6 +139,7 @@ const APP_STATE_STORAGE_CONF = (<
|
|||||||
offsetLeft: { browser: false, export: false },
|
offsetLeft: { browser: false, export: false },
|
||||||
offsetTop: { browser: false, export: false },
|
offsetTop: { browser: false, export: false },
|
||||||
openMenu: { browser: true, export: false },
|
openMenu: { browser: true, export: false },
|
||||||
|
openPopup: { browser: false, export: false },
|
||||||
pasteDialog: { browser: false, export: false },
|
pasteDialog: { browser: false, export: false },
|
||||||
previousSelectedElementIds: { browser: true, export: false },
|
previousSelectedElementIds: { browser: true, export: false },
|
||||||
resizingElement: { browser: false, export: false },
|
resizingElement: { browser: false, export: false },
|
||||||
|
|||||||
@@ -151,23 +151,14 @@ export const SelectedShapeActions = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const LIBRARY_ICON = (
|
|
||||||
// fa-th-large
|
|
||||||
<svg viewBox="0 0 512 512">
|
|
||||||
<path d="M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z" />
|
|
||||||
</svg>
|
|
||||||
);
|
|
||||||
|
|
||||||
export const ShapesSwitcher = ({
|
export const ShapesSwitcher = ({
|
||||||
canvas,
|
canvas,
|
||||||
elementType,
|
elementType,
|
||||||
setAppState,
|
setAppState,
|
||||||
isLibraryOpen,
|
|
||||||
}: {
|
}: {
|
||||||
canvas: HTMLCanvasElement | null;
|
canvas: HTMLCanvasElement | null;
|
||||||
elementType: ExcalidrawElement["type"];
|
elementType: ExcalidrawElement["type"];
|
||||||
setAppState: React.Component<any, AppState>["setState"];
|
setAppState: React.Component<any, AppState>["setState"];
|
||||||
isLibraryOpen: boolean;
|
|
||||||
}) => (
|
}) => (
|
||||||
<>
|
<>
|
||||||
{SHAPES.map(({ value, icon, key }, index) => {
|
{SHAPES.map(({ value, icon, key }, index) => {
|
||||||
@@ -201,19 +192,6 @@ export const ShapesSwitcher = ({
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
<ToolButton
|
|
||||||
className="Shape ToolIcon_type_button__library"
|
|
||||||
type="button"
|
|
||||||
icon={LIBRARY_ICON}
|
|
||||||
name="editor-library"
|
|
||||||
keyBindingLabel="9"
|
|
||||||
aria-keyshortcuts="9"
|
|
||||||
title={`${capitalizeString(t("toolBar.library"))} — 9`}
|
|
||||||
aria-label={capitalizeString(t("toolBar.library"))}
|
|
||||||
onClick={() => {
|
|
||||||
setAppState({ isLibraryOpen: !isLibraryOpen });
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
.excalidraw {
|
||||||
|
.ActiveFile {
|
||||||
|
.ActiveFile__fileName {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
span {
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 9.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg {
|
||||||
|
width: 1.15em;
|
||||||
|
margin-inline-end: 0.3em;
|
||||||
|
transform: scaleY(0.9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import React from "react";
|
||||||
|
import Stack from "../components/Stack";
|
||||||
|
import { ToolButton } from "../components/ToolButton";
|
||||||
|
import { save, file } from "../components/icons";
|
||||||
|
import { t } from "../i18n";
|
||||||
|
|
||||||
|
import "./ActiveFile.scss";
|
||||||
|
|
||||||
|
type ActiveFileProps = {
|
||||||
|
fileName?: string;
|
||||||
|
onSave: () => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const ActiveFile = ({ fileName, onSave }: ActiveFileProps) => (
|
||||||
|
<Stack.Row className="ActiveFile" gap={1} align="center">
|
||||||
|
<span className="ActiveFile__fileName">
|
||||||
|
{file}
|
||||||
|
<span>{fileName}</span>
|
||||||
|
</span>
|
||||||
|
<ToolButton
|
||||||
|
type="icon"
|
||||||
|
icon={save}
|
||||||
|
title={t("buttons.save")}
|
||||||
|
aria-label={t("buttons.save")}
|
||||||
|
onClick={onSave}
|
||||||
|
data-testid="save-button"
|
||||||
|
/>
|
||||||
|
</Stack.Row>
|
||||||
|
);
|
||||||
+107
-132
@@ -111,7 +111,6 @@ import {
|
|||||||
import { LinearElementEditor } from "../element/linearElementEditor";
|
import { LinearElementEditor } from "../element/linearElementEditor";
|
||||||
import { mutateElement } from "../element/mutateElement";
|
import { mutateElement } from "../element/mutateElement";
|
||||||
import { deepCopyElement, newFreeDrawElement } from "../element/newElement";
|
import { deepCopyElement, newFreeDrawElement } from "../element/newElement";
|
||||||
import { MaybeTransformHandleType } from "../element/transformHandles";
|
|
||||||
import {
|
import {
|
||||||
isBindingElement,
|
isBindingElement,
|
||||||
isBindingElementType,
|
isBindingElementType,
|
||||||
@@ -157,6 +156,7 @@ import {
|
|||||||
getElementsWithinSelection,
|
getElementsWithinSelection,
|
||||||
getNormalizedZoom,
|
getNormalizedZoom,
|
||||||
getSelectedElements,
|
getSelectedElements,
|
||||||
|
hasBackground,
|
||||||
isOverScrollBars,
|
isOverScrollBars,
|
||||||
isSomeElementSelected,
|
isSomeElementSelected,
|
||||||
} from "../scene";
|
} from "../scene";
|
||||||
@@ -167,9 +167,11 @@ import { findShapeByKey } from "../shapes";
|
|||||||
import {
|
import {
|
||||||
AppProps,
|
AppProps,
|
||||||
AppState,
|
AppState,
|
||||||
|
ExcalidrawImperativeAPI,
|
||||||
Gesture,
|
Gesture,
|
||||||
GestureEvent,
|
GestureEvent,
|
||||||
LibraryItems,
|
LibraryItems,
|
||||||
|
PointerDownState,
|
||||||
SceneData,
|
SceneData,
|
||||||
} from "../types";
|
} from "../types";
|
||||||
import {
|
import {
|
||||||
@@ -180,7 +182,6 @@ import {
|
|||||||
isToolIcon,
|
isToolIcon,
|
||||||
isWritableElement,
|
isWritableElement,
|
||||||
resetCursor,
|
resetCursor,
|
||||||
ResolvablePromise,
|
|
||||||
resolvablePromise,
|
resolvablePromise,
|
||||||
sceneCoordsToViewportCoords,
|
sceneCoordsToViewportCoords,
|
||||||
setCursor,
|
setCursor,
|
||||||
@@ -197,9 +198,10 @@ import { actionToggleViewMode } from "../actions/actionToggleViewMode";
|
|||||||
|
|
||||||
const IsMobileContext = React.createContext(false);
|
const IsMobileContext = React.createContext(false);
|
||||||
export const useIsMobile = () => useContext(IsMobileContext);
|
export const useIsMobile = () => useContext(IsMobileContext);
|
||||||
const ExcalidrawContainerContext = React.createContext<HTMLDivElement | null>(
|
const ExcalidrawContainerContext = React.createContext<{
|
||||||
null,
|
container: HTMLDivElement | null;
|
||||||
);
|
id: string | null;
|
||||||
|
}>({ container: null, id: null });
|
||||||
export const useExcalidrawContainer = () =>
|
export const useExcalidrawContainer = () =>
|
||||||
useContext(ExcalidrawContainerContext);
|
useContext(ExcalidrawContainerContext);
|
||||||
|
|
||||||
@@ -222,83 +224,6 @@ const gesture: Gesture = {
|
|||||||
initialScale: null,
|
initialScale: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type PointerDownState = Readonly<{
|
|
||||||
// The first position at which pointerDown happened
|
|
||||||
origin: Readonly<{ x: number; y: number }>;
|
|
||||||
// Same as "origin" but snapped to the grid, if grid is on
|
|
||||||
originInGrid: Readonly<{ x: number; y: number }>;
|
|
||||||
// Scrollbar checks
|
|
||||||
scrollbars: ReturnType<typeof isOverScrollBars>;
|
|
||||||
// The previous pointer position
|
|
||||||
lastCoords: { x: number; y: number };
|
|
||||||
// map of original elements data
|
|
||||||
originalElements: Map<string, NonDeleted<ExcalidrawElement>>;
|
|
||||||
resize: {
|
|
||||||
// Handle when resizing, might change during the pointer interaction
|
|
||||||
handleType: MaybeTransformHandleType;
|
|
||||||
// This is determined on the initial pointer down event
|
|
||||||
isResizing: boolean;
|
|
||||||
// This is determined on the initial pointer down event
|
|
||||||
offset: { x: number; y: number };
|
|
||||||
// This is determined on the initial pointer down event
|
|
||||||
arrowDirection: "origin" | "end";
|
|
||||||
// This is a center point of selected elements determined on the initial pointer down event (for rotation only)
|
|
||||||
center: { x: number; y: number };
|
|
||||||
};
|
|
||||||
hit: {
|
|
||||||
// The element the pointer is "hitting", is determined on the initial
|
|
||||||
// pointer down event
|
|
||||||
element: NonDeleted<ExcalidrawElement> | null;
|
|
||||||
// The elements the pointer is "hitting", is determined on the initial
|
|
||||||
// pointer down event
|
|
||||||
allHitElements: NonDeleted<ExcalidrawElement>[];
|
|
||||||
// This is determined on the initial pointer down event
|
|
||||||
wasAddedToSelection: boolean;
|
|
||||||
// Whether selected element(s) were duplicated, might change during the
|
|
||||||
// pointer interaction
|
|
||||||
hasBeenDuplicated: boolean;
|
|
||||||
hasHitCommonBoundingBoxOfSelectedElements: boolean;
|
|
||||||
};
|
|
||||||
withCmdOrCtrl: boolean;
|
|
||||||
drag: {
|
|
||||||
// Might change during the pointer interation
|
|
||||||
hasOccurred: boolean;
|
|
||||||
// Might change during the pointer interation
|
|
||||||
offset: { x: number; y: number } | null;
|
|
||||||
};
|
|
||||||
// We need to have these in the state so that we can unsubscribe them
|
|
||||||
eventListeners: {
|
|
||||||
// It's defined on the initial pointer down event
|
|
||||||
onMove: null | ((event: PointerEvent) => void);
|
|
||||||
// It's defined on the initial pointer down event
|
|
||||||
onUp: null | ((event: PointerEvent) => void);
|
|
||||||
// It's defined on the initial pointer down event
|
|
||||||
onKeyDown: null | ((event: KeyboardEvent) => void);
|
|
||||||
// It's defined on the initial pointer down event
|
|
||||||
onKeyUp: null | ((event: KeyboardEvent) => void);
|
|
||||||
};
|
|
||||||
}>;
|
|
||||||
|
|
||||||
export type ExcalidrawImperativeAPI = {
|
|
||||||
updateScene: InstanceType<typeof App>["updateScene"];
|
|
||||||
resetScene: InstanceType<typeof App>["resetScene"];
|
|
||||||
getSceneElementsIncludingDeleted: InstanceType<
|
|
||||||
typeof App
|
|
||||||
>["getSceneElementsIncludingDeleted"];
|
|
||||||
history: {
|
|
||||||
clear: InstanceType<typeof App>["resetHistory"];
|
|
||||||
};
|
|
||||||
scrollToContent: InstanceType<typeof App>["scrollToContent"];
|
|
||||||
getSceneElements: InstanceType<typeof App>["getSceneElements"];
|
|
||||||
getAppState: () => InstanceType<typeof App>["state"];
|
|
||||||
refresh: InstanceType<typeof App>["refresh"];
|
|
||||||
importLibrary: InstanceType<typeof App>["importLibraryFromUrl"];
|
|
||||||
setToastMessage: InstanceType<typeof App>["setToastMessage"];
|
|
||||||
readyPromise: ResolvablePromise<ExcalidrawImperativeAPI>;
|
|
||||||
ready: true;
|
|
||||||
id: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
class App extends React.Component<AppProps, AppState> {
|
class App extends React.Component<AppProps, AppState> {
|
||||||
canvas: HTMLCanvasElement | null = null;
|
canvas: HTMLCanvasElement | null = null;
|
||||||
rc: RoughCanvas | null = null;
|
rc: RoughCanvas | null = null;
|
||||||
@@ -321,6 +246,10 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
public libraryItemsFromStorage: LibraryItems | undefined;
|
public libraryItemsFromStorage: LibraryItems | undefined;
|
||||||
private id: string;
|
private id: string;
|
||||||
private history: History;
|
private history: History;
|
||||||
|
private excalidrawContainerValue: {
|
||||||
|
container: HTMLDivElement | null;
|
||||||
|
id: string;
|
||||||
|
};
|
||||||
|
|
||||||
constructor(props: AppProps) {
|
constructor(props: AppProps) {
|
||||||
super(props);
|
super(props);
|
||||||
@@ -377,6 +306,12 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
}
|
}
|
||||||
readyPromise.resolve(api);
|
readyPromise.resolve(api);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.excalidrawContainerValue = {
|
||||||
|
container: this.excalidrawContainerRef.current,
|
||||||
|
id: this.id,
|
||||||
|
};
|
||||||
|
|
||||||
this.scene = new Scene();
|
this.scene = new Scene();
|
||||||
this.library = new Library(this);
|
this.library = new Library(this);
|
||||||
this.history = new History();
|
this.history = new History();
|
||||||
@@ -404,11 +339,11 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
if (viewModeEnabled) {
|
if (viewModeEnabled) {
|
||||||
return (
|
return (
|
||||||
<canvas
|
<canvas
|
||||||
id="canvas"
|
className="excalidraw__canvas"
|
||||||
style={{
|
style={{
|
||||||
width: canvasDOMWidth,
|
width: canvasDOMWidth,
|
||||||
height: canvasDOMHeight,
|
height: canvasDOMHeight,
|
||||||
cursor: "grabbing",
|
cursor: CURSOR_TYPE.GRAB,
|
||||||
}}
|
}}
|
||||||
width={canvasWidth}
|
width={canvasWidth}
|
||||||
height={canvasHeight}
|
height={canvasHeight}
|
||||||
@@ -426,7 +361,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<canvas
|
<canvas
|
||||||
id="canvas"
|
className="excalidraw__canvas"
|
||||||
style={{
|
style={{
|
||||||
width: canvasDOMWidth,
|
width: canvasDOMWidth,
|
||||||
height: canvasDOMHeight,
|
height: canvasDOMHeight,
|
||||||
@@ -452,7 +387,6 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
|
|
||||||
const {
|
const {
|
||||||
onCollabButtonClick,
|
onCollabButtonClick,
|
||||||
onExportToBackend,
|
|
||||||
renderTopRightUI,
|
renderTopRightUI,
|
||||||
renderFooter,
|
renderFooter,
|
||||||
renderCustomStats,
|
renderCustomStats,
|
||||||
@@ -472,7 +406,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
<ExcalidrawContainerContext.Provider
|
<ExcalidrawContainerContext.Provider
|
||||||
value={this.excalidrawContainerRef.current}
|
value={this.excalidrawContainerValue}
|
||||||
>
|
>
|
||||||
<IsMobileContext.Provider value={this.isMobile}>
|
<IsMobileContext.Provider value={this.isMobile}>
|
||||||
<LayerUI
|
<LayerUI
|
||||||
@@ -493,7 +427,6 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
toggleZenMode={this.toggleZenMode}
|
toggleZenMode={this.toggleZenMode}
|
||||||
langCode={getLanguage().code}
|
langCode={getLanguage().code}
|
||||||
isCollaborating={this.props.isCollaborating || false}
|
isCollaborating={this.props.isCollaborating || false}
|
||||||
onExportToBackend={onExportToBackend}
|
|
||||||
renderTopRightUI={renderTopRightUI}
|
renderTopRightUI={renderTopRightUI}
|
||||||
renderCustomFooter={renderFooter}
|
renderCustomFooter={renderFooter}
|
||||||
viewModeEnabled={viewModeEnabled}
|
viewModeEnabled={viewModeEnabled}
|
||||||
@@ -536,7 +469,9 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public focusContainer = () => {
|
public focusContainer = () => {
|
||||||
this.excalidrawContainerRef.current?.focus();
|
if (this.props.autoFocus) {
|
||||||
|
this.excalidrawContainerRef.current?.focus();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public getSceneElementsIncludingDeleted = () => {
|
public getSceneElementsIncludingDeleted = () => {
|
||||||
@@ -720,7 +655,11 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
const fileHandle = launchParams.files[0];
|
const fileHandle = launchParams.files[0];
|
||||||
const blob: Blob = await fileHandle.getFile();
|
const blob: Blob = await fileHandle.getFile();
|
||||||
blob.handle = fileHandle;
|
blob.handle = fileHandle;
|
||||||
loadFromBlob(blob, this.state)
|
loadFromBlob(
|
||||||
|
blob,
|
||||||
|
this.state,
|
||||||
|
this.scene.getElementsIncludingDeleted(),
|
||||||
|
)
|
||||||
.then(({ elements, appState }) =>
|
.then(({ elements, appState }) =>
|
||||||
this.syncActionResult({
|
this.syncActionResult({
|
||||||
elements,
|
elements,
|
||||||
@@ -758,7 +697,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const scene = restore(initialData, null);
|
const scene = restore(initialData, null, null);
|
||||||
scene.appState = {
|
scene.appState = {
|
||||||
...scene.appState,
|
...scene.appState,
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
@@ -802,6 +741,8 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public async componentDidMount() {
|
public async componentDidMount() {
|
||||||
|
this.excalidrawContainerValue.container = this.excalidrawContainerRef.current;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
process.env.NODE_ENV === ENV.TEST ||
|
process.env.NODE_ENV === ENV.TEST ||
|
||||||
process.env.NODE_ENV === ENV.DEVELOPMENT
|
process.env.NODE_ENV === ENV.DEVELOPMENT
|
||||||
@@ -986,14 +927,12 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (prevProps.viewModeEnabled !== this.props.viewModeEnabled) {
|
if (prevProps.viewModeEnabled !== this.props.viewModeEnabled) {
|
||||||
this.setState(
|
this.setState({ viewModeEnabled: !!this.props.viewModeEnabled });
|
||||||
{ viewModeEnabled: !!this.props.viewModeEnabled },
|
|
||||||
this.addEventListeners,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prevState.viewModeEnabled !== this.state.viewModeEnabled) {
|
if (prevState.viewModeEnabled !== this.state.viewModeEnabled) {
|
||||||
this.addEventListeners();
|
this.addEventListeners();
|
||||||
|
this.deselectElements();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prevProps.zenModeEnabled !== this.props.zenModeEnabled) {
|
if (prevProps.zenModeEnabled !== this.props.zenModeEnabled) {
|
||||||
@@ -1204,16 +1143,11 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
// event.touches.length === 1 will also prevent inserting text when user's zooming
|
// event.touches.length === 1 will also prevent inserting text when user's zooming
|
||||||
if (didTapTwice && event.touches.length === 1) {
|
if (didTapTwice && event.touches.length === 1) {
|
||||||
const [touch] = event.touches;
|
const [touch] = event.touches;
|
||||||
this.handleCanvasDoubleClick(
|
// @ts-ignore
|
||||||
{
|
this.handleCanvasDoubleClick({
|
||||||
clientX: touch.clientX,
|
clientX: touch.clientX,
|
||||||
clientY: touch.clientY,
|
clientY: touch.clientY,
|
||||||
ctrlKey: false,
|
});
|
||||||
metaKey: false,
|
|
||||||
altKey: false,
|
|
||||||
},
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
didTapTwice = false;
|
didTapTwice = false;
|
||||||
clearTimeout(tappedTwiceTimer);
|
clearTimeout(tappedTwiceTimer);
|
||||||
}
|
}
|
||||||
@@ -1272,7 +1206,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
});
|
});
|
||||||
} else if (data.elements) {
|
} else if (data.elements) {
|
||||||
this.addElementsFromPasteOrLibrary({
|
this.addElementsFromPasteOrLibrary({
|
||||||
elements: restoreElements(data.elements),
|
elements: data.elements,
|
||||||
position: "cursor",
|
position: "cursor",
|
||||||
});
|
});
|
||||||
} else if (data.text) {
|
} else if (data.text) {
|
||||||
@@ -1287,7 +1221,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
elements: readonly ExcalidrawElement[];
|
elements: readonly ExcalidrawElement[];
|
||||||
position: { clientX: number; clientY: number } | "cursor" | "center";
|
position: { clientX: number; clientY: number } | "cursor" | "center";
|
||||||
}) => {
|
}) => {
|
||||||
const elements = restoreElements(opts.elements);
|
const elements = restoreElements(opts.elements, null);
|
||||||
const [minX, minY, maxX, maxY] = getCommonBounds(elements);
|
const [minX, minY, maxX, maxY] = getCommonBounds(elements);
|
||||||
|
|
||||||
const elementsCenterX = distance(minX, maxX) / 2;
|
const elementsCenterX = distance(minX, maxX) / 2;
|
||||||
@@ -1353,6 +1287,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
this.scene.getElements(),
|
this.scene.getElements(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
this.selectShapeTool("selection");
|
||||||
};
|
};
|
||||||
|
|
||||||
private addTextFromPaste(text: any) {
|
private addTextFromPaste(text: any) {
|
||||||
@@ -1650,12 +1585,38 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
isHoldingSpace = true;
|
isHoldingSpace = true;
|
||||||
setCursor(this.canvas, CURSOR_TYPE.GRABBING);
|
setCursor(this.canvas, CURSOR_TYPE.GRABBING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (event.key === KEYS.G || event.key === KEYS.S) {
|
||||||
|
const selectedElements = getSelectedElements(
|
||||||
|
this.scene.getElements(),
|
||||||
|
this.state,
|
||||||
|
);
|
||||||
|
if (
|
||||||
|
this.state.elementType === "selection" &&
|
||||||
|
!selectedElements.length
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
event.key === KEYS.G &&
|
||||||
|
(hasBackground(this.state.elementType) ||
|
||||||
|
selectedElements.some((element) => hasBackground(element.type)))
|
||||||
|
) {
|
||||||
|
this.setState({ openPopup: "backgroundColorPicker" });
|
||||||
|
}
|
||||||
|
if (event.key === KEYS.S) {
|
||||||
|
this.setState({ openPopup: "strokeColorPicker" });
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
private onKeyUp = withBatchedUpdates((event: KeyboardEvent) => {
|
private onKeyUp = withBatchedUpdates((event: KeyboardEvent) => {
|
||||||
if (event.key === KEYS.SPACE) {
|
if (event.key === KEYS.SPACE) {
|
||||||
if (this.state.elementType === "selection") {
|
if (this.state.viewModeEnabled) {
|
||||||
|
setCursor(this.canvas, CURSOR_TYPE.GRAB);
|
||||||
|
} else if (this.state.elementType === "selection") {
|
||||||
resetCursor(this.canvas);
|
resetCursor(this.canvas);
|
||||||
} else {
|
} else {
|
||||||
setCursorForShape(this.canvas, this.state.elementType);
|
setCursorForShape(this.canvas, this.state.elementType);
|
||||||
@@ -1803,7 +1764,8 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
[element.id]: true,
|
[element.id]: true,
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
} else {
|
}
|
||||||
|
if (isDeleted) {
|
||||||
fixBindingsAfterDeletion(this.scene.getElements(), [element]);
|
fixBindingsAfterDeletion(this.scene.getElements(), [element]);
|
||||||
}
|
}
|
||||||
if (!isDeleted || isExistingElement) {
|
if (!isDeleted || isExistingElement) {
|
||||||
@@ -1824,15 +1786,19 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
excalidrawContainer: this.excalidrawContainerRef.current,
|
excalidrawContainer: this.excalidrawContainerRef.current,
|
||||||
});
|
});
|
||||||
// deselect all other elements when inserting text
|
// deselect all other elements when inserting text
|
||||||
|
this.deselectElements();
|
||||||
|
|
||||||
|
// do an initial update to re-initialize element position since we were
|
||||||
|
// modifying element's x/y for sake of editor (case: syncing to remote)
|
||||||
|
updateElement(element.text);
|
||||||
|
}
|
||||||
|
|
||||||
|
private deselectElements() {
|
||||||
this.setState({
|
this.setState({
|
||||||
selectedElementIds: {},
|
selectedElementIds: {},
|
||||||
selectedGroupIds: {},
|
selectedGroupIds: {},
|
||||||
editingGroupId: null,
|
editingGroupId: null,
|
||||||
});
|
});
|
||||||
|
|
||||||
// do an initial update to re-initialize element position since we were
|
|
||||||
// modifying element's x/y for sake of editor (case: syncing to remote)
|
|
||||||
updateElement(element.text);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private getTextElementAtPosition(
|
private getTextElementAtPosition(
|
||||||
@@ -1850,9 +1816,21 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
private getElementAtPosition(
|
private getElementAtPosition(
|
||||||
x: number,
|
x: number,
|
||||||
y: number,
|
y: number,
|
||||||
|
opts?: {
|
||||||
|
/** if true, returns the first selected element (with highest z-index)
|
||||||
|
of all hit elements */
|
||||||
|
preferSelected?: boolean;
|
||||||
|
},
|
||||||
): NonDeleted<ExcalidrawElement> | null {
|
): NonDeleted<ExcalidrawElement> | null {
|
||||||
const allHitElements = this.getElementsAtPosition(x, y);
|
const allHitElements = this.getElementsAtPosition(x, y);
|
||||||
if (allHitElements.length > 1) {
|
if (allHitElements.length > 1) {
|
||||||
|
if (opts?.preferSelected) {
|
||||||
|
for (let index = allHitElements.length - 1; index > -1; index--) {
|
||||||
|
if (this.state.selectedElementIds[allHitElements[index].id]) {
|
||||||
|
return allHitElements[index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
const elementWithHighestZIndex =
|
const elementWithHighestZIndex =
|
||||||
allHitElements[allHitElements.length - 1];
|
allHitElements[allHitElements.length - 1];
|
||||||
// If we're hitting element with highest z-index only on its bounding box
|
// If we're hitting element with highest z-index only on its bounding box
|
||||||
@@ -1885,7 +1863,6 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
sceneX,
|
sceneX,
|
||||||
sceneY,
|
sceneY,
|
||||||
insertAtParentCenter = true,
|
insertAtParentCenter = true,
|
||||||
createTextIfNotExists = true,
|
|
||||||
}: {
|
}: {
|
||||||
/** X position to insert text at */
|
/** X position to insert text at */
|
||||||
sceneX: number;
|
sceneX: number;
|
||||||
@@ -1893,14 +1870,9 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
sceneY: number;
|
sceneY: number;
|
||||||
/** whether to attempt to insert at element center if applicable */
|
/** whether to attempt to insert at element center if applicable */
|
||||||
insertAtParentCenter?: boolean;
|
insertAtParentCenter?: boolean;
|
||||||
createTextIfNotExists?: boolean;
|
|
||||||
}) => {
|
}) => {
|
||||||
const existingTextElement = this.getTextElementAtPosition(sceneX, sceneY);
|
const existingTextElement = this.getTextElementAtPosition(sceneX, sceneY);
|
||||||
|
|
||||||
// if (!existingTextElement && !createTextIfNotExists) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
const parentCenterPosition =
|
const parentCenterPosition =
|
||||||
insertAtParentCenter &&
|
insertAtParentCenter &&
|
||||||
this.getTextWysiwygSnappedToCenterPosition(
|
this.getTextWysiwygSnappedToCenterPosition(
|
||||||
@@ -1972,11 +1944,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
private handleCanvasDoubleClick = (
|
private handleCanvasDoubleClick = (
|
||||||
event: Pick<
|
event: React.MouseEvent<HTMLCanvasElement>,
|
||||||
React.PointerEvent<HTMLCanvasElement>,
|
|
||||||
"clientX" | "clientY" | "ctrlKey" | "metaKey" | "altKey"
|
|
||||||
>,
|
|
||||||
createTextIfNotExists = true,
|
|
||||||
) => {
|
) => {
|
||||||
// case: double-clicking with arrow/line tool selected would both create
|
// case: double-clicking with arrow/line tool selected would both create
|
||||||
// text and enter multiElement mode
|
// text and enter multiElement mode
|
||||||
@@ -2047,7 +2015,6 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
sceneX,
|
sceneX,
|
||||||
sceneY,
|
sceneY,
|
||||||
insertAtParentCenter: !event.altKey,
|
insertAtParentCenter: !event.altKey,
|
||||||
createTextIfNotExists,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -2274,6 +2241,8 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
this.canvas,
|
this.canvas,
|
||||||
isTextElement(hitElement) ? CURSOR_TYPE.TEXT : CURSOR_TYPE.CROSSHAIR,
|
isTextElement(hitElement) ? CURSOR_TYPE.TEXT : CURSOR_TYPE.CROSSHAIR,
|
||||||
);
|
);
|
||||||
|
} else if (this.state.viewModeEnabled) {
|
||||||
|
setCursor(this.canvas, CURSOR_TYPE.GRAB);
|
||||||
} else if (isOverScrollBar) {
|
} else if (isOverScrollBar) {
|
||||||
setCursor(this.canvas, CURSOR_TYPE.AUTO);
|
setCursor(this.canvas, CURSOR_TYPE.AUTO);
|
||||||
} else if (
|
} else if (
|
||||||
@@ -2299,8 +2268,6 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
private handleCanvasPointerDown = (
|
private handleCanvasPointerDown = (
|
||||||
event: React.PointerEvent<HTMLCanvasElement>,
|
event: React.PointerEvent<HTMLCanvasElement>,
|
||||||
) => {
|
) => {
|
||||||
event.persist();
|
|
||||||
|
|
||||||
// remove any active selection when we start to interact with canvas
|
// remove any active selection when we start to interact with canvas
|
||||||
// (mainly, we care about removing selection outside the component which
|
// (mainly, we care about removing selection outside the component which
|
||||||
// would prevent our copy handling otherwise)
|
// would prevent our copy handling otherwise)
|
||||||
@@ -2513,7 +2480,11 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
lastPointerUp = null;
|
lastPointerUp = null;
|
||||||
isPanning = false;
|
isPanning = false;
|
||||||
if (!isHoldingSpace) {
|
if (!isHoldingSpace) {
|
||||||
setCursorForShape(this.canvas, this.state.elementType);
|
if (this.state.viewModeEnabled) {
|
||||||
|
setCursor(this.canvas, CURSOR_TYPE.GRAB);
|
||||||
|
} else {
|
||||||
|
setCursorForShape(this.canvas, this.state.elementType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.setState({
|
this.setState({
|
||||||
cursorButton: "up",
|
cursorButton: "up",
|
||||||
@@ -3206,7 +3177,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
const selectedElements = getSelectedElements(
|
const selectedElements = getSelectedElements(
|
||||||
this.scene.getElements(),
|
this.scene.getElements(),
|
||||||
this.state,
|
this.state,
|
||||||
).filter((element) => element.id !== this.state.editingElement?.id);
|
);
|
||||||
// prevent dragging even if we're no longer holding cmd/ctrl otherwise
|
// prevent dragging even if we're no longer holding cmd/ctrl otherwise
|
||||||
// it would have weird results (stuff jumping all over the screen)
|
// it would have weird results (stuff jumping all over the screen)
|
||||||
if (selectedElements.length > 0 && !pointerDownState.withCmdOrCtrl) {
|
if (selectedElements.length > 0 && !pointerDownState.withCmdOrCtrl) {
|
||||||
@@ -3856,7 +3827,11 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
try {
|
try {
|
||||||
const file = event.dataTransfer.files[0];
|
const file = event.dataTransfer.files[0];
|
||||||
if (file?.type === "image/png" || file?.type === "image/svg+xml") {
|
if (file?.type === "image/png" || file?.type === "image/svg+xml") {
|
||||||
const { elements, appState } = await loadFromBlob(file, this.state);
|
const { elements, appState } = await loadFromBlob(
|
||||||
|
file,
|
||||||
|
this.state,
|
||||||
|
this.scene.getElementsIncludingDeleted(),
|
||||||
|
);
|
||||||
this.syncActionResult({
|
this.syncActionResult({
|
||||||
elements,
|
elements,
|
||||||
appState: {
|
appState: {
|
||||||
@@ -3916,7 +3891,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
loadFileToCanvas = (file: Blob) => {
|
loadFileToCanvas = (file: Blob) => {
|
||||||
loadFromBlob(file, this.state)
|
loadFromBlob(file, this.state, this.scene.getElementsIncludingDeleted())
|
||||||
.then(({ elements, appState }) =>
|
.then(({ elements, appState }) =>
|
||||||
this.syncActionResult({
|
this.syncActionResult({
|
||||||
elements,
|
elements,
|
||||||
@@ -3938,7 +3913,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
const { x, y } = viewportCoordsToSceneCoords(event, this.state);
|
const { x, y } = viewportCoordsToSceneCoords(event, this.state);
|
||||||
const element = this.getElementAtPosition(x, y);
|
const element = this.getElementAtPosition(x, y, { preferSelected: true });
|
||||||
|
|
||||||
const type = element ? "element" : "canvas";
|
const type = element ? "element" : "canvas";
|
||||||
|
|
||||||
|
|||||||
@@ -16,10 +16,5 @@ export const BackgroundPickerAndDarkModeToggle = ({
|
|||||||
<div style={{ display: "flex" }}>
|
<div style={{ display: "flex" }}>
|
||||||
{actionManager.renderAction("changeViewBackgroundColor")}
|
{actionManager.renderAction("changeViewBackgroundColor")}
|
||||||
{showThemeBtn && actionManager.renderAction("toggleTheme")}
|
{showThemeBtn && actionManager.renderAction("toggleTheme")}
|
||||||
{appState.fileHandle && (
|
|
||||||
<div style={{ marginInlineStart: "0.25rem" }}>
|
|
||||||
{actionManager.renderAction("saveScene")}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import React from "react";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import { checkIcon } from "./icons";
|
import { checkIcon } from "./icons";
|
||||||
|
|
||||||
|
|||||||
@@ -238,13 +238,16 @@ export const ColorPicker = ({
|
|||||||
color,
|
color,
|
||||||
onChange,
|
onChange,
|
||||||
label,
|
label,
|
||||||
|
isActive,
|
||||||
|
setActive,
|
||||||
}: {
|
}: {
|
||||||
type: "canvasBackground" | "elementBackground" | "elementStroke";
|
type: "canvasBackground" | "elementBackground" | "elementStroke";
|
||||||
color: string | null;
|
color: string | null;
|
||||||
onChange: (color: string) => void;
|
onChange: (color: string) => void;
|
||||||
label: string;
|
label: string;
|
||||||
|
isActive: boolean;
|
||||||
|
setActive: (active: boolean) => void;
|
||||||
}) => {
|
}) => {
|
||||||
const [isActive, setActive] = React.useState(false);
|
|
||||||
const pickerButton = React.useRef<HTMLButtonElement>(null);
|
const pickerButton = React.useRef<HTMLButtonElement>(null);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import clsx from "clsx";
|
|||||||
import React, { useEffect, useState } from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
import { useCallbackRefState } from "../hooks/useCallbackRefState";
|
import { useCallbackRefState } from "../hooks/useCallbackRefState";
|
||||||
import { t } from "../i18n";
|
import { t } from "../i18n";
|
||||||
import { useIsMobile } from "../components/App";
|
import { useExcalidrawContainer, useIsMobile } from "../components/App";
|
||||||
import { KEYS } from "../keys";
|
import { KEYS } from "../keys";
|
||||||
import "./Dialog.scss";
|
import "./Dialog.scss";
|
||||||
import { back, close } from "./icons";
|
import { back, close } from "./icons";
|
||||||
@@ -21,6 +21,7 @@ export const Dialog = (props: {
|
|||||||
}) => {
|
}) => {
|
||||||
const [islandNode, setIslandNode] = useCallbackRefState<HTMLDivElement>();
|
const [islandNode, setIslandNode] = useCallbackRefState<HTMLDivElement>();
|
||||||
const [lastActiveElement] = useState(document.activeElement);
|
const [lastActiveElement] = useState(document.activeElement);
|
||||||
|
const { id } = useExcalidrawContainer();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!islandNode) {
|
if (!islandNode) {
|
||||||
@@ -82,7 +83,7 @@ export const Dialog = (props: {
|
|||||||
theme={props.theme}
|
theme={props.theme}
|
||||||
>
|
>
|
||||||
<Island ref={setIslandNode}>
|
<Island ref={setIslandNode}>
|
||||||
<h2 id="dialog-title" className="Dialog__title">
|
<h2 id={`${id}-dialog-title`} className="Dialog__title">
|
||||||
<span className="Dialog__titleContent">{props.title}</span>
|
<span className="Dialog__titleContent">{props.title}</span>
|
||||||
<button
|
<button
|
||||||
className="Modal__close"
|
className="Modal__close"
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export const ErrorDialog = ({
|
|||||||
onClose?: () => void;
|
onClose?: () => void;
|
||||||
}) => {
|
}) => {
|
||||||
const [modalIsShown, setModalIsShown] = useState(!!message);
|
const [modalIsShown, setModalIsShown] = useState(!!message);
|
||||||
const excalidrawContainer = useExcalidrawContainer();
|
const { container: excalidrawContainer } = useExcalidrawContainer();
|
||||||
|
|
||||||
const handleClose = React.useCallback(() => {
|
const handleClose = React.useCallback(() => {
|
||||||
setModalIsShown(false);
|
setModalIsShown(false);
|
||||||
|
|||||||
@@ -97,7 +97,8 @@
|
|||||||
|
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
background-color: var(--button-color);
|
background-color: var(--button-color);
|
||||||
box-shadow: 0 3px 5px -1px rgb(0 0 0 / 28%), 0 6px 10px 0 rgb(0 0 0 / 14%);
|
box-shadow: 0 3px 5px -1px rgba(0, 0, 0, 0.28),
|
||||||
|
0 6px 10px 0 rgba(0, 0, 0, 0.14);
|
||||||
|
|
||||||
font-family: Cascadia;
|
font-family: Cascadia;
|
||||||
font-size: 1.8em;
|
font-size: 1.8em;
|
||||||
|
|||||||
@@ -157,6 +157,13 @@ export const HelpDialog = ({ onClose }: { onClose?: () => void }) => {
|
|||||||
shortcuts={["Shift+P", "7"]}
|
shortcuts={["Shift+P", "7"]}
|
||||||
/>
|
/>
|
||||||
<Shortcut label={t("toolBar.text")} shortcuts={["T", "8"]} />
|
<Shortcut label={t("toolBar.text")} shortcuts={["T", "8"]} />
|
||||||
|
<Shortcut
|
||||||
|
label={t("helpDialog.editSelectedShape")}
|
||||||
|
shortcuts={[
|
||||||
|
getShortcutKey("Enter"),
|
||||||
|
t("helpDialog.doubleClick"),
|
||||||
|
]}
|
||||||
|
/>
|
||||||
<Shortcut
|
<Shortcut
|
||||||
label={t("helpDialog.textNewLine")}
|
label={t("helpDialog.textNewLine")}
|
||||||
shortcuts={[
|
shortcuts={[
|
||||||
@@ -365,6 +372,14 @@ export const HelpDialog = ({ onClose }: { onClose?: () => void }) => {
|
|||||||
label={t("labels.flipVertical")}
|
label={t("labels.flipVertical")}
|
||||||
shortcuts={[getShortcutKey("Shift+V")]}
|
shortcuts={[getShortcutKey("Shift+V")]}
|
||||||
/>
|
/>
|
||||||
|
<Shortcut
|
||||||
|
label={t("labels.showStroke")}
|
||||||
|
shortcuts={[getShortcutKey("S")]}
|
||||||
|
/>
|
||||||
|
<Shortcut
|
||||||
|
label={t("labels.showBackground")}
|
||||||
|
shortcuts={[getShortcutKey("G")]}
|
||||||
|
/>
|
||||||
</ShortcutIsland>
|
</ShortcutIsland>
|
||||||
</Column>
|
</Column>
|
||||||
</Columns>
|
</Columns>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { getSelectedElements } from "../scene";
|
|||||||
|
|
||||||
import "./HintViewer.scss";
|
import "./HintViewer.scss";
|
||||||
import { AppState } from "../types";
|
import { AppState } from "../types";
|
||||||
import { isLinearElement } from "../element/typeChecks";
|
import { isLinearElement, isTextElement } from "../element/typeChecks";
|
||||||
import { getShortcutKey } from "../utils";
|
import { getShortcutKey } from "../utils";
|
||||||
|
|
||||||
interface Hint {
|
interface Hint {
|
||||||
@@ -57,6 +57,14 @@ const getHints = ({ appState, elements }: Hint) => {
|
|||||||
return t("hints.lineEditor_info");
|
return t("hints.lineEditor_info");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (selectedElements.length === 1 && isTextElement(selectedElements[0])) {
|
||||||
|
return t("hints.text_selected");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (appState.editingElement && isTextElement(appState.editingElement)) {
|
||||||
|
return t("hints.text_editing");
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -8,20 +8,17 @@ import { CanvasError } from "../errors";
|
|||||||
import { t } from "../i18n";
|
import { t } from "../i18n";
|
||||||
import { useIsMobile } from "./App";
|
import { useIsMobile } from "./App";
|
||||||
import { getSelectedElements, isSomeElementSelected } from "../scene";
|
import { getSelectedElements, isSomeElementSelected } from "../scene";
|
||||||
import { exportToCanvas, getExportSize } from "../scene/export";
|
import { exportToCanvas } from "../scene/export";
|
||||||
import { AppState } from "../types";
|
import { AppState } from "../types";
|
||||||
import { Dialog } from "./Dialog";
|
import { Dialog } from "./Dialog";
|
||||||
import { clipboard, exportImage } from "./icons";
|
import { clipboard, exportImage } from "./icons";
|
||||||
import Stack from "./Stack";
|
import Stack from "./Stack";
|
||||||
import { ToolButton } from "./ToolButton";
|
import { ToolButton } from "./ToolButton";
|
||||||
|
|
||||||
import "./ExportDialog.scss";
|
import "./ExportDialog.scss";
|
||||||
import { supported as fsSupported } from "browser-fs-access";
|
import { supported as fsSupported } from "browser-fs-access";
|
||||||
import OpenColor from "open-color";
|
import OpenColor from "open-color";
|
||||||
import { CheckboxItem } from "./CheckboxItem";
|
import { CheckboxItem } from "./CheckboxItem";
|
||||||
|
import { DEFAULT_EXPORT_PADDING } from "../constants";
|
||||||
const scales = [1, 2, 3];
|
|
||||||
const defaultScale = scales.includes(devicePixelRatio) ? devicePixelRatio : 1;
|
|
||||||
|
|
||||||
const supportsContextFilters =
|
const supportsContextFilters =
|
||||||
"filter" in document.createElement("canvas").getContext("2d")!;
|
"filter" in document.createElement("canvas").getContext("2d")!;
|
||||||
@@ -82,7 +79,7 @@ const ExportButton: React.FC<{
|
|||||||
const ImageExportModal = ({
|
const ImageExportModal = ({
|
||||||
elements,
|
elements,
|
||||||
appState,
|
appState,
|
||||||
exportPadding = 10,
|
exportPadding = DEFAULT_EXPORT_PADDING,
|
||||||
actionManager,
|
actionManager,
|
||||||
onExportToPng,
|
onExportToPng,
|
||||||
onExportToSvg,
|
onExportToSvg,
|
||||||
@@ -98,7 +95,6 @@ const ImageExportModal = ({
|
|||||||
onCloseRequest: () => void;
|
onCloseRequest: () => void;
|
||||||
}) => {
|
}) => {
|
||||||
const someElementIsSelected = isSomeElementSelected(elements, appState);
|
const someElementIsSelected = isSomeElementSelected(elements, appState);
|
||||||
const [scale, setScale] = useState(defaultScale);
|
|
||||||
const [exportSelected, setExportSelected] = useState(someElementIsSelected);
|
const [exportSelected, setExportSelected] = useState(someElementIsSelected);
|
||||||
const previewRef = useRef<HTMLDivElement>(null);
|
const previewRef = useRef<HTMLDivElement>(null);
|
||||||
const { exportBackground, viewBackgroundColor } = appState;
|
const { exportBackground, viewBackgroundColor } = appState;
|
||||||
@@ -121,7 +117,6 @@ const ImageExportModal = ({
|
|||||||
exportBackground,
|
exportBackground,
|
||||||
viewBackgroundColor,
|
viewBackgroundColor,
|
||||||
exportPadding,
|
exportPadding,
|
||||||
scale,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// if converting to blob fails, there's some problem that will
|
// if converting to blob fails, there's some problem that will
|
||||||
@@ -144,7 +139,6 @@ const ImageExportModal = ({
|
|||||||
exportBackground,
|
exportBackground,
|
||||||
exportPadding,
|
exportPadding,
|
||||||
viewBackgroundColor,
|
viewBackgroundColor,
|
||||||
scale,
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -175,33 +169,8 @@ const ImageExportModal = ({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style={{ display: "flex", alignItems: "center", marginTop: ".6em" }}>
|
<div style={{ display: "flex", alignItems: "center", marginTop: ".6em" }}>
|
||||||
<Stack.Row gap={2} justifyContent={"center"}>
|
<Stack.Row gap={2}>
|
||||||
{scales.map((_scale) => {
|
{actionManager.renderAction("changeExportScale")}
|
||||||
const [width, height] = getExportSize(
|
|
||||||
exportedElements,
|
|
||||||
exportPadding,
|
|
||||||
_scale,
|
|
||||||
);
|
|
||||||
|
|
||||||
const scaleButtonTitle = `${t(
|
|
||||||
"buttons.scale",
|
|
||||||
)} ${_scale}x (${width}x${height})`;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ToolButton
|
|
||||||
key={_scale}
|
|
||||||
size="s"
|
|
||||||
type="radio"
|
|
||||||
icon={`${_scale}x`}
|
|
||||||
name="export-canvas-scale"
|
|
||||||
title={scaleButtonTitle}
|
|
||||||
aria-label={scaleButtonTitle}
|
|
||||||
id="export-canvas-scale"
|
|
||||||
checked={_scale === scale}
|
|
||||||
onChange={() => setScale(_scale)}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</Stack.Row>
|
</Stack.Row>
|
||||||
<p style={{ marginLeft: "1em", userSelect: "none" }}>Scale</p>
|
<p style={{ marginLeft: "1em", userSelect: "none" }}>Scale</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -220,7 +189,7 @@ const ImageExportModal = ({
|
|||||||
color="indigo"
|
color="indigo"
|
||||||
title={t("buttons.exportToPng")}
|
title={t("buttons.exportToPng")}
|
||||||
aria-label={t("buttons.exportToPng")}
|
aria-label={t("buttons.exportToPng")}
|
||||||
onClick={() => onExportToPng(exportedElements, scale)}
|
onClick={() => onExportToPng(exportedElements)}
|
||||||
>
|
>
|
||||||
PNG
|
PNG
|
||||||
</ExportButton>
|
</ExportButton>
|
||||||
@@ -228,14 +197,14 @@ const ImageExportModal = ({
|
|||||||
color="red"
|
color="red"
|
||||||
title={t("buttons.exportToSvg")}
|
title={t("buttons.exportToSvg")}
|
||||||
aria-label={t("buttons.exportToSvg")}
|
aria-label={t("buttons.exportToSvg")}
|
||||||
onClick={() => onExportToSvg(exportedElements, scale)}
|
onClick={() => onExportToSvg(exportedElements)}
|
||||||
>
|
>
|
||||||
SVG
|
SVG
|
||||||
</ExportButton>
|
</ExportButton>
|
||||||
{probablySupportsClipboardBlob && (
|
{probablySupportsClipboardBlob && (
|
||||||
<ExportButton
|
<ExportButton
|
||||||
title={t("buttons.copyPngToClipboard")}
|
title={t("buttons.copyPngToClipboard")}
|
||||||
onClick={() => onExportToClipboard(exportedElements, scale)}
|
onClick={() => onExportToClipboard(exportedElements)}
|
||||||
color="gray"
|
color="gray"
|
||||||
shade={7}
|
shade={7}
|
||||||
>
|
>
|
||||||
@@ -250,7 +219,7 @@ const ImageExportModal = ({
|
|||||||
export const ImageExportDialog = ({
|
export const ImageExportDialog = ({
|
||||||
elements,
|
elements,
|
||||||
appState,
|
appState,
|
||||||
exportPadding = 10,
|
exportPadding = DEFAULT_EXPORT_PADDING,
|
||||||
actionManager,
|
actionManager,
|
||||||
onExportToPng,
|
onExportToPng,
|
||||||
onExportToSvg,
|
onExportToSvg,
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ import { ActionsManagerInterface } from "../actions/types";
|
|||||||
import { NonDeletedExcalidrawElement } from "../element/types";
|
import { NonDeletedExcalidrawElement } from "../element/types";
|
||||||
import { t } from "../i18n";
|
import { t } from "../i18n";
|
||||||
import { useIsMobile } from "./App";
|
import { useIsMobile } from "./App";
|
||||||
import { AppState } from "../types";
|
import { AppState, ExportOpts } from "../types";
|
||||||
import { Dialog } from "./Dialog";
|
import { Dialog } from "./Dialog";
|
||||||
import { exportFile, exportToFileIcon, link } from "./icons";
|
import { exportFile, exportToFileIcon, link } from "./icons";
|
||||||
import { ToolButton } from "./ToolButton";
|
import { ToolButton } from "./ToolButton";
|
||||||
import { actionSaveAsScene } from "../actions/actionExport";
|
import { actionSaveFileToDisk } from "../actions/actionExport";
|
||||||
import { Card } from "./Card";
|
import { Card } from "./Card";
|
||||||
|
|
||||||
import "./ExportDialog.scss";
|
import "./ExportDialog.scss";
|
||||||
@@ -22,35 +22,40 @@ const JSONExportModal = ({
|
|||||||
elements,
|
elements,
|
||||||
appState,
|
appState,
|
||||||
actionManager,
|
actionManager,
|
||||||
onExportToBackend,
|
exportOpts,
|
||||||
|
canvas,
|
||||||
}: {
|
}: {
|
||||||
appState: AppState;
|
appState: AppState;
|
||||||
elements: readonly NonDeletedExcalidrawElement[];
|
elements: readonly NonDeletedExcalidrawElement[];
|
||||||
actionManager: ActionsManagerInterface;
|
actionManager: ActionsManagerInterface;
|
||||||
onExportToBackend?: ExportCB;
|
|
||||||
onCloseRequest: () => void;
|
onCloseRequest: () => void;
|
||||||
|
exportOpts: ExportOpts;
|
||||||
|
canvas: HTMLCanvasElement | null;
|
||||||
}) => {
|
}) => {
|
||||||
|
const { onExportToBackend } = exportOpts;
|
||||||
return (
|
return (
|
||||||
<div className="ExportDialog ExportDialog--json">
|
<div className="ExportDialog ExportDialog--json">
|
||||||
<div className="ExportDialog-cards">
|
<div className="ExportDialog-cards">
|
||||||
<Card color="lime">
|
{exportOpts.saveFileToDisk && (
|
||||||
<div className="Card-icon">{exportToFileIcon}</div>
|
<Card color="lime">
|
||||||
<h2>{t("exportDialog.disk_title")}</h2>
|
<div className="Card-icon">{exportToFileIcon}</div>
|
||||||
<div className="Card-details">
|
<h2>{t("exportDialog.disk_title")}</h2>
|
||||||
{t("exportDialog.disk_details")}
|
<div className="Card-details">
|
||||||
{!fsSupported && actionManager.renderAction("changeProjectName")}
|
{t("exportDialog.disk_details")}
|
||||||
</div>
|
{!fsSupported && actionManager.renderAction("changeProjectName")}
|
||||||
<ToolButton
|
</div>
|
||||||
className="Card-button"
|
<ToolButton
|
||||||
type="button"
|
className="Card-button"
|
||||||
title={t("exportDialog.disk_button")}
|
type="button"
|
||||||
aria-label={t("exportDialog.disk_button")}
|
title={t("exportDialog.disk_button")}
|
||||||
showAriaLabel={true}
|
aria-label={t("exportDialog.disk_button")}
|
||||||
onClick={() => {
|
showAriaLabel={true}
|
||||||
actionManager.executeAction(actionSaveAsScene);
|
onClick={() => {
|
||||||
}}
|
actionManager.executeAction(actionSaveFileToDisk);
|
||||||
/>
|
}}
|
||||||
</Card>
|
/>
|
||||||
|
</Card>
|
||||||
|
)}
|
||||||
{onExportToBackend && (
|
{onExportToBackend && (
|
||||||
<Card color="pink">
|
<Card color="pink">
|
||||||
<div className="Card-icon">{link}</div>
|
<div className="Card-icon">{link}</div>
|
||||||
@@ -62,10 +67,12 @@ const JSONExportModal = ({
|
|||||||
title={t("exportDialog.link_button")}
|
title={t("exportDialog.link_button")}
|
||||||
aria-label={t("exportDialog.link_button")}
|
aria-label={t("exportDialog.link_button")}
|
||||||
showAriaLabel={true}
|
showAriaLabel={true}
|
||||||
onClick={() => onExportToBackend(elements)}
|
onClick={() => onExportToBackend(elements, appState, canvas)}
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
)}
|
)}
|
||||||
|
{exportOpts.renderCustomUI &&
|
||||||
|
exportOpts.renderCustomUI(elements, appState, canvas)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -75,12 +82,14 @@ export const JSONExportDialog = ({
|
|||||||
elements,
|
elements,
|
||||||
appState,
|
appState,
|
||||||
actionManager,
|
actionManager,
|
||||||
onExportToBackend,
|
exportOpts,
|
||||||
|
canvas,
|
||||||
}: {
|
}: {
|
||||||
appState: AppState;
|
appState: AppState;
|
||||||
elements: readonly NonDeletedExcalidrawElement[];
|
elements: readonly NonDeletedExcalidrawElement[];
|
||||||
actionManager: ActionsManagerInterface;
|
actionManager: ActionsManagerInterface;
|
||||||
onExportToBackend?: ExportCB;
|
exportOpts: ExportOpts;
|
||||||
|
canvas: HTMLCanvasElement | null;
|
||||||
}) => {
|
}) => {
|
||||||
const [modalIsShown, setModalIsShown] = useState(false);
|
const [modalIsShown, setModalIsShown] = useState(false);
|
||||||
|
|
||||||
@@ -107,8 +116,9 @@ export const JSONExportDialog = ({
|
|||||||
elements={elements}
|
elements={elements}
|
||||||
appState={appState}
|
appState={appState}
|
||||||
actionManager={actionManager}
|
actionManager={actionManager}
|
||||||
onExportToBackend={onExportToBackend}
|
|
||||||
onCloseRequest={handleClose}
|
onCloseRequest={handleClose}
|
||||||
|
exportOpts={exportOpts}
|
||||||
|
canvas={canvas}
|
||||||
/>
|
/>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -116,7 +116,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.layer-ui__wrapper__footer-left,
|
.layer-ui__wrapper__footer-left,
|
||||||
.layer-ui__wrapper__footer-right {
|
.layer-ui__wrapper__footer-right,
|
||||||
|
.disable-zen-mode--visible {
|
||||||
pointer-events: all;
|
pointer-events: all;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+26
-26
@@ -36,7 +36,7 @@ import { Island } from "./Island";
|
|||||||
import "./LayerUI.scss";
|
import "./LayerUI.scss";
|
||||||
import { LibraryUnit } from "./LibraryUnit";
|
import { LibraryUnit } from "./LibraryUnit";
|
||||||
import { LoadingMessage } from "./LoadingMessage";
|
import { LoadingMessage } from "./LoadingMessage";
|
||||||
import { LockIcon } from "./LockIcon";
|
import { LockButton } from "./LockButton";
|
||||||
import { MobileMenu } from "./MobileMenu";
|
import { MobileMenu } from "./MobileMenu";
|
||||||
import { PasteChartDialog } from "./PasteChartDialog";
|
import { PasteChartDialog } from "./PasteChartDialog";
|
||||||
import { Section } from "./Section";
|
import { Section } from "./Section";
|
||||||
@@ -47,6 +47,7 @@ import { Tooltip } from "./Tooltip";
|
|||||||
import { UserList } from "./UserList";
|
import { UserList } from "./UserList";
|
||||||
import Library from "../data/library";
|
import Library from "../data/library";
|
||||||
import { JSONExportDialog } from "./JSONExportDialog";
|
import { JSONExportDialog } from "./JSONExportDialog";
|
||||||
|
import { LibraryButton } from "./LibraryButton";
|
||||||
|
|
||||||
interface LayerUIProps {
|
interface LayerUIProps {
|
||||||
actionManager: ActionManager;
|
actionManager: ActionManager;
|
||||||
@@ -63,11 +64,6 @@ interface LayerUIProps {
|
|||||||
toggleZenMode: () => void;
|
toggleZenMode: () => void;
|
||||||
langCode: Language["code"];
|
langCode: Language["code"];
|
||||||
isCollaborating: boolean;
|
isCollaborating: boolean;
|
||||||
onExportToBackend?: (
|
|
||||||
exportedElements: readonly NonDeletedExcalidrawElement[],
|
|
||||||
appState: AppState,
|
|
||||||
canvas: HTMLCanvasElement | null,
|
|
||||||
) => void;
|
|
||||||
renderTopRightUI?: (isMobile: boolean, appState: AppState) => JSX.Element;
|
renderTopRightUI?: (isMobile: boolean, appState: AppState) => JSX.Element;
|
||||||
renderCustomFooter?: (isMobile: boolean, appState: AppState) => JSX.Element;
|
renderCustomFooter?: (isMobile: boolean, appState: AppState) => JSX.Element;
|
||||||
viewModeEnabled: boolean;
|
viewModeEnabled: boolean;
|
||||||
@@ -112,6 +108,7 @@ const LibraryMenuItems = ({
|
|||||||
onAddToLibrary,
|
onAddToLibrary,
|
||||||
onInsertShape,
|
onInsertShape,
|
||||||
pendingElements,
|
pendingElements,
|
||||||
|
theme,
|
||||||
setAppState,
|
setAppState,
|
||||||
setLibraryItems,
|
setLibraryItems,
|
||||||
libraryReturnUrl,
|
libraryReturnUrl,
|
||||||
@@ -124,6 +121,7 @@ const LibraryMenuItems = ({
|
|||||||
onRemoveFromLibrary: (index: number) => void;
|
onRemoveFromLibrary: (index: number) => void;
|
||||||
onInsertShape: (elements: LibraryItem) => void;
|
onInsertShape: (elements: LibraryItem) => void;
|
||||||
onAddToLibrary: (elements: LibraryItem) => void;
|
onAddToLibrary: (elements: LibraryItem) => void;
|
||||||
|
theme: AppState["theme"];
|
||||||
setAppState: React.Component<any, AppState>["setState"];
|
setAppState: React.Component<any, AppState>["setState"];
|
||||||
setLibraryItems: (library: LibraryItems) => void;
|
setLibraryItems: (library: LibraryItems) => void;
|
||||||
libraryReturnUrl: ExcalidrawProps["libraryReturnUrl"];
|
libraryReturnUrl: ExcalidrawProps["libraryReturnUrl"];
|
||||||
@@ -197,7 +195,7 @@ const LibraryMenuItems = ({
|
|||||||
<a
|
<a
|
||||||
href={`https://libraries.excalidraw.com?target=${
|
href={`https://libraries.excalidraw.com?target=${
|
||||||
window.name || "_blank"
|
window.name || "_blank"
|
||||||
}&referrer=${referrer}&useHash=true&token=${id}`}
|
}&referrer=${referrer}&useHash=true&token=${id}&theme=${theme}`}
|
||||||
target="_excalidraw_libraries"
|
target="_excalidraw_libraries"
|
||||||
>
|
>
|
||||||
{t("labels.libraries")}
|
{t("labels.libraries")}
|
||||||
@@ -251,6 +249,7 @@ const LibraryMenu = ({
|
|||||||
onInsertShape,
|
onInsertShape,
|
||||||
pendingElements,
|
pendingElements,
|
||||||
onAddToLibrary,
|
onAddToLibrary,
|
||||||
|
theme,
|
||||||
setAppState,
|
setAppState,
|
||||||
libraryReturnUrl,
|
libraryReturnUrl,
|
||||||
focusContainer,
|
focusContainer,
|
||||||
@@ -261,6 +260,7 @@ const LibraryMenu = ({
|
|||||||
onClickOutside: (event: MouseEvent) => void;
|
onClickOutside: (event: MouseEvent) => void;
|
||||||
onInsertShape: (elements: LibraryItem) => void;
|
onInsertShape: (elements: LibraryItem) => void;
|
||||||
onAddToLibrary: () => void;
|
onAddToLibrary: () => void;
|
||||||
|
theme: AppState["theme"];
|
||||||
setAppState: React.Component<any, AppState>["setState"];
|
setAppState: React.Component<any, AppState>["setState"];
|
||||||
libraryReturnUrl: ExcalidrawProps["libraryReturnUrl"];
|
libraryReturnUrl: ExcalidrawProps["libraryReturnUrl"];
|
||||||
focusContainer: () => void;
|
focusContainer: () => void;
|
||||||
@@ -350,6 +350,7 @@ const LibraryMenu = ({
|
|||||||
libraryReturnUrl={libraryReturnUrl}
|
libraryReturnUrl={libraryReturnUrl}
|
||||||
focusContainer={focusContainer}
|
focusContainer={focusContainer}
|
||||||
library={library}
|
library={library}
|
||||||
|
theme={theme}
|
||||||
id={id}
|
id={id}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@@ -371,7 +372,6 @@ const LayerUI = ({
|
|||||||
showThemeBtn,
|
showThemeBtn,
|
||||||
toggleZenMode,
|
toggleZenMode,
|
||||||
isCollaborating,
|
isCollaborating,
|
||||||
onExportToBackend,
|
|
||||||
renderTopRightUI,
|
renderTopRightUI,
|
||||||
renderCustomFooter,
|
renderCustomFooter,
|
||||||
viewModeEnabled,
|
viewModeEnabled,
|
||||||
@@ -393,32 +393,24 @@ const LayerUI = ({
|
|||||||
elements={elements}
|
elements={elements}
|
||||||
appState={appState}
|
appState={appState}
|
||||||
actionManager={actionManager}
|
actionManager={actionManager}
|
||||||
onExportToBackend={
|
exportOpts={UIOptions.canvasActions.export}
|
||||||
onExportToBackend
|
canvas={canvas}
|
||||||
? (elements) => {
|
|
||||||
onExportToBackend &&
|
|
||||||
onExportToBackend(elements, appState, canvas);
|
|
||||||
}
|
|
||||||
: undefined
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderImageExportDialog = () => {
|
const renderImageExportDialog = () => {
|
||||||
if (!UIOptions.canvasActions.export) {
|
if (!UIOptions.canvasActions.saveAsImage) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const createExporter = (type: ExportType): ExportCB => async (
|
const createExporter = (type: ExportType): ExportCB => async (
|
||||||
exportedElements,
|
exportedElements,
|
||||||
scale,
|
|
||||||
) => {
|
) => {
|
||||||
await exportCanvas(type, exportedElements, appState, {
|
await exportCanvas(type, exportedElements, appState, {
|
||||||
exportBackground: appState.exportBackground,
|
exportBackground: appState.exportBackground,
|
||||||
name: appState.name,
|
name: appState.name,
|
||||||
viewBackgroundColor: appState.viewBackgroundColor,
|
viewBackgroundColor: appState.viewBackgroundColor,
|
||||||
scale,
|
|
||||||
})
|
})
|
||||||
.catch(muteFSAbortError)
|
.catch(muteFSAbortError)
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
@@ -496,6 +488,9 @@ const LayerUI = ({
|
|||||||
setAppState={setAppState}
|
setAppState={setAppState}
|
||||||
showThemeBtn={showThemeBtn}
|
showThemeBtn={showThemeBtn}
|
||||||
/>
|
/>
|
||||||
|
{appState.fileHandle && (
|
||||||
|
<>{actionManager.renderAction("saveToActiveFile")}</>
|
||||||
|
)}
|
||||||
</Stack.Col>
|
</Stack.Col>
|
||||||
</Island>
|
</Island>
|
||||||
</Section>
|
</Section>
|
||||||
@@ -514,7 +509,8 @@ const LayerUI = ({
|
|||||||
style={{
|
style={{
|
||||||
// we want to make sure this doesn't overflow so substracting 200
|
// we want to make sure this doesn't overflow so substracting 200
|
||||||
// which is approximately height of zoom footer and top left menu items with some buffer
|
// which is approximately height of zoom footer and top left menu items with some buffer
|
||||||
maxHeight: `${appState.height - 200}px`,
|
// if active file name is displayed, subtracting 248 to account for its height
|
||||||
|
maxHeight: `${appState.height - (appState.fileHandle ? 248 : 200)}px`,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<SelectedShapeActions
|
<SelectedShapeActions
|
||||||
@@ -551,6 +547,7 @@ const LayerUI = ({
|
|||||||
libraryReturnUrl={libraryReturnUrl}
|
libraryReturnUrl={libraryReturnUrl}
|
||||||
focusContainer={focusContainer}
|
focusContainer={focusContainer}
|
||||||
library={library}
|
library={library}
|
||||||
|
theme={appState.theme}
|
||||||
id={id}
|
id={id}
|
||||||
/>
|
/>
|
||||||
) : null;
|
) : null;
|
||||||
@@ -578,6 +575,12 @@ const LayerUI = ({
|
|||||||
{(heading) => (
|
{(heading) => (
|
||||||
<Stack.Col gap={4} align="start">
|
<Stack.Col gap={4} align="start">
|
||||||
<Stack.Row gap={1}>
|
<Stack.Row gap={1}>
|
||||||
|
<LockButton
|
||||||
|
zenModeEnabled={zenModeEnabled}
|
||||||
|
checked={appState.elementLocked}
|
||||||
|
onChange={onLockToggle}
|
||||||
|
title={t("toolBar.lock")}
|
||||||
|
/>
|
||||||
<Island
|
<Island
|
||||||
padding={1}
|
padding={1}
|
||||||
className={clsx({ "zen-mode": zenModeEnabled })}
|
className={clsx({ "zen-mode": zenModeEnabled })}
|
||||||
@@ -589,15 +592,12 @@ const LayerUI = ({
|
|||||||
canvas={canvas}
|
canvas={canvas}
|
||||||
elementType={appState.elementType}
|
elementType={appState.elementType}
|
||||||
setAppState={setAppState}
|
setAppState={setAppState}
|
||||||
isLibraryOpen={appState.isLibraryOpen}
|
|
||||||
/>
|
/>
|
||||||
</Stack.Row>
|
</Stack.Row>
|
||||||
</Island>
|
</Island>
|
||||||
<LockIcon
|
<LibraryButton
|
||||||
zenModeEnabled={zenModeEnabled}
|
appState={appState}
|
||||||
checked={appState.elementLocked}
|
setAppState={setAppState}
|
||||||
onChange={onLockToggle}
|
|
||||||
title={t("toolBar.lock")}
|
|
||||||
/>
|
/>
|
||||||
</Stack.Row>
|
</Stack.Row>
|
||||||
{libraryMenu}
|
{libraryMenu}
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import React from "react";
|
||||||
|
import clsx from "clsx";
|
||||||
|
import { t } from "../i18n";
|
||||||
|
import { AppState } from "../types";
|
||||||
|
import { capitalizeString } from "../utils";
|
||||||
|
|
||||||
|
const LIBRARY_ICON = (
|
||||||
|
<svg viewBox="0 0 576 512">
|
||||||
|
<path
|
||||||
|
fill="currentColor"
|
||||||
|
d="M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z"
|
||||||
|
></path>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
export const LibraryButton: React.FC<{
|
||||||
|
appState: AppState;
|
||||||
|
setAppState: React.Component<any, AppState>["setState"];
|
||||||
|
}> = ({ appState, setAppState }) => {
|
||||||
|
return (
|
||||||
|
<label
|
||||||
|
className={clsx(
|
||||||
|
"ToolIcon ToolIcon_type_floating ToolIcon__library zen-mode-visibility",
|
||||||
|
`ToolIcon_size_m`,
|
||||||
|
{
|
||||||
|
"zen-mode-visibility--hidden": appState.zenModeEnabled,
|
||||||
|
},
|
||||||
|
)}
|
||||||
|
title={`${capitalizeString(t("toolBar.library"))} — 9`}
|
||||||
|
style={{ marginInlineStart: "var(--space-factor)" }}
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
className="ToolIcon_type_checkbox"
|
||||||
|
type="checkbox"
|
||||||
|
name="editor-library"
|
||||||
|
onChange={(event) => {
|
||||||
|
setAppState({ isLibraryOpen: event.target.checked });
|
||||||
|
}}
|
||||||
|
checked={appState.isLibraryOpen}
|
||||||
|
aria-label={capitalizeString(t("toolBar.library"))}
|
||||||
|
aria-keyshortcuts="9"
|
||||||
|
/>
|
||||||
|
<div className="ToolIcon__icon">{LIBRARY_ICON}</div>
|
||||||
|
</label>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -36,21 +36,27 @@ export const LibraryUnit = ({
|
|||||||
if (!elementsToRender) {
|
if (!elementsToRender) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const svg = exportToSvg(elementsToRender, {
|
let svg: SVGSVGElement;
|
||||||
exportBackground: false,
|
|
||||||
viewBackgroundColor: oc.white,
|
|
||||||
});
|
|
||||||
for (const child of ref.current!.children) {
|
|
||||||
if (child.tagName !== "svg") {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ref.current!.removeChild(child);
|
|
||||||
}
|
|
||||||
ref.current!.appendChild(svg);
|
|
||||||
|
|
||||||
const current = ref.current!;
|
const current = ref.current!;
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
svg = await exportToSvg(elementsToRender, {
|
||||||
|
exportBackground: false,
|
||||||
|
viewBackgroundColor: oc.white,
|
||||||
|
});
|
||||||
|
for (const child of ref.current!.children) {
|
||||||
|
if (child.tagName !== "svg") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
current!.removeChild(child);
|
||||||
|
}
|
||||||
|
current!.appendChild(svg);
|
||||||
|
})();
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
current.removeChild(svg);
|
if (svg) {
|
||||||
|
current.removeChild(svg);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}, [elements, pendingElements]);
|
}, [elements, pendingElements]);
|
||||||
|
|
||||||
|
|||||||
@@ -8,10 +8,8 @@ type LockIconSize = "s" | "m";
|
|||||||
type LockIconProps = {
|
type LockIconProps = {
|
||||||
title?: string;
|
title?: string;
|
||||||
name?: string;
|
name?: string;
|
||||||
id?: string;
|
|
||||||
checked: boolean;
|
checked: boolean;
|
||||||
onChange?(): void;
|
onChange?(): void;
|
||||||
size?: LockIconSize;
|
|
||||||
zenModeEnabled?: boolean;
|
zenModeEnabled?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -41,12 +39,12 @@ const ICONS = {
|
|||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
export const LockIcon = (props: LockIconProps) => {
|
export const LockButton = (props: LockIconProps) => {
|
||||||
return (
|
return (
|
||||||
<label
|
<label
|
||||||
className={clsx(
|
className={clsx(
|
||||||
"ToolIcon ToolIcon__lock ToolIcon_type_floating zen-mode-visibility",
|
"ToolIcon ToolIcon__lock ToolIcon_type_floating zen-mode-visibility",
|
||||||
`ToolIcon_size_${props.size || DEFAULT_SIZE}`,
|
`ToolIcon_size_${DEFAULT_SIZE}`,
|
||||||
{
|
{
|
||||||
"zen-mode-visibility--hidden": props.zenModeEnabled,
|
"zen-mode-visibility--hidden": props.zenModeEnabled,
|
||||||
},
|
},
|
||||||
@@ -57,7 +55,6 @@ export const LockIcon = (props: LockIconProps) => {
|
|||||||
className="ToolIcon_type_checkbox"
|
className="ToolIcon_type_checkbox"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name={props.name}
|
name={props.name}
|
||||||
id={props.id}
|
|
||||||
onChange={props.onChange}
|
onChange={props.onChange}
|
||||||
checked={props.checked}
|
checked={props.checked}
|
||||||
aria-label={props.title}
|
aria-label={props.title}
|
||||||
@@ -13,9 +13,10 @@ import { SelectedShapeActions, ShapesSwitcher } from "./Actions";
|
|||||||
import { Section } from "./Section";
|
import { Section } from "./Section";
|
||||||
import CollabButton from "./CollabButton";
|
import CollabButton from "./CollabButton";
|
||||||
import { SCROLLBAR_WIDTH, SCROLLBAR_MARGIN } from "../scene/scrollbars";
|
import { SCROLLBAR_WIDTH, SCROLLBAR_MARGIN } from "../scene/scrollbars";
|
||||||
import { LockIcon } from "./LockIcon";
|
import { LockButton } from "./LockButton";
|
||||||
import { UserList } from "./UserList";
|
import { UserList } from "./UserList";
|
||||||
import { BackgroundPickerAndDarkModeToggle } from "./BackgroundPickerAndDarkModeToggle";
|
import { BackgroundPickerAndDarkModeToggle } from "./BackgroundPickerAndDarkModeToggle";
|
||||||
|
import { LibraryButton } from "./LibraryButton";
|
||||||
|
|
||||||
type MobileMenuProps = {
|
type MobileMenuProps = {
|
||||||
appState: AppState;
|
appState: AppState;
|
||||||
@@ -64,15 +65,15 @@ export const MobileMenu = ({
|
|||||||
canvas={canvas}
|
canvas={canvas}
|
||||||
elementType={appState.elementType}
|
elementType={appState.elementType}
|
||||||
setAppState={setAppState}
|
setAppState={setAppState}
|
||||||
isLibraryOpen={appState.isLibraryOpen}
|
|
||||||
/>
|
/>
|
||||||
</Stack.Row>
|
</Stack.Row>
|
||||||
</Island>
|
</Island>
|
||||||
<LockIcon
|
<LockButton
|
||||||
checked={appState.elementLocked}
|
checked={appState.elementLocked}
|
||||||
onChange={onLockToggle}
|
onChange={onLockToggle}
|
||||||
title={t("toolBar.lock")}
|
title={t("toolBar.lock")}
|
||||||
/>
|
/>
|
||||||
|
<LibraryButton appState={appState} setAppState={setAppState} />
|
||||||
</Stack.Row>
|
</Stack.Row>
|
||||||
{libraryMenu}
|
{libraryMenu}
|
||||||
</Stack.Col>
|
</Stack.Col>
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ const useBodyRoot = (theme: AppState["theme"]) => {
|
|||||||
const isMobileRef = useRef(isMobile);
|
const isMobileRef = useRef(isMobile);
|
||||||
isMobileRef.current = isMobile;
|
isMobileRef.current = isMobile;
|
||||||
|
|
||||||
const excalidrawContainer = useExcalidrawContainer();
|
const { container: excalidrawContainer } = useExcalidrawContainer();
|
||||||
|
|
||||||
useLayoutEffect(() => {
|
useLayoutEffect(() => {
|
||||||
if (div) {
|
if (div) {
|
||||||
|
|||||||
@@ -34,19 +34,21 @@ const ChartPreviewBtn = (props: {
|
|||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
setChartElements(elements);
|
setChartElements(elements);
|
||||||
|
let svg: SVGSVGElement;
|
||||||
const svg = exportToSvg(elements, {
|
|
||||||
exportBackground: false,
|
|
||||||
viewBackgroundColor: oc.white,
|
|
||||||
});
|
|
||||||
|
|
||||||
const previewNode = previewRef.current!;
|
const previewNode = previewRef.current!;
|
||||||
|
|
||||||
previewNode.appendChild(svg);
|
(async () => {
|
||||||
|
svg = await exportToSvg(elements, {
|
||||||
|
exportBackground: false,
|
||||||
|
viewBackgroundColor: oc.white,
|
||||||
|
});
|
||||||
|
|
||||||
if (props.selected) {
|
previewNode.appendChild(svg);
|
||||||
(previewNode.parentNode as HTMLDivElement).focus();
|
|
||||||
}
|
if (props.selected) {
|
||||||
|
(previewNode.parentNode as HTMLDivElement).focus();
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
previewNode.removeChild(svg);
|
previewNode.removeChild(svg);
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import "./TextInput.scss";
|
import "./TextInput.scss";
|
||||||
|
|
||||||
import React, { Component } from "react";
|
import React, { useState } from "react";
|
||||||
import { focusNearestParent } from "../utils";
|
import { focusNearestParent } from "../utils";
|
||||||
|
|
||||||
import "./ProjectName.scss";
|
import "./ProjectName.scss";
|
||||||
|
import { useExcalidrawContainer } from "./App";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
value: string;
|
value: string;
|
||||||
@@ -12,22 +13,19 @@ type Props = {
|
|||||||
isNameEditable: boolean;
|
isNameEditable: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
type State = {
|
export const ProjectName = (props: Props) => {
|
||||||
fileName: string;
|
const { id } = useExcalidrawContainer();
|
||||||
};
|
const [fileName, setFileName] = useState<string>(props.value);
|
||||||
export class ProjectName extends Component<Props, State> {
|
|
||||||
state = {
|
const handleBlur = (event: any) => {
|
||||||
fileName: this.props.value,
|
|
||||||
};
|
|
||||||
private handleBlur = (event: any) => {
|
|
||||||
focusNearestParent(event.target);
|
focusNearestParent(event.target);
|
||||||
const value = event.target.value;
|
const value = event.target.value;
|
||||||
if (value !== this.props.value) {
|
if (value !== props.value) {
|
||||||
this.props.onChange(value);
|
props.onChange(value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {
|
const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {
|
||||||
if (event.key === "Enter") {
|
if (event.key === "Enter") {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
if (event.nativeEvent.isComposing || event.keyCode === 229) {
|
if (event.nativeEvent.isComposing || event.keyCode === 229) {
|
||||||
@@ -37,29 +35,25 @@ export class ProjectName extends Component<Props, State> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public render() {
|
return (
|
||||||
return (
|
<div className="ProjectName">
|
||||||
<div className="ProjectName">
|
<label className="ProjectName-label" htmlFor="filename">
|
||||||
<label className="ProjectName-label" htmlFor="filename">
|
{`${props.label}${props.isNameEditable ? "" : ":"}`}
|
||||||
{`${this.props.label}${this.props.isNameEditable ? "" : ":"}`}
|
</label>
|
||||||
</label>
|
{props.isNameEditable ? (
|
||||||
{this.props.isNameEditable ? (
|
<input
|
||||||
<input
|
className="TextInput"
|
||||||
className="TextInput"
|
onBlur={handleBlur}
|
||||||
onBlur={this.handleBlur}
|
onKeyDown={handleKeyDown}
|
||||||
onKeyDown={this.handleKeyDown}
|
id={`${id}-filename`}
|
||||||
id="filename"
|
value={fileName}
|
||||||
value={this.state.fileName}
|
onChange={(event) => setFileName(event.target.value)}
|
||||||
onChange={(event) =>
|
/>
|
||||||
this.setState({ fileName: event.target.value })
|
) : (
|
||||||
}
|
<span className="TextInput TextInput--readonly" id={`${id}-filename`}>
|
||||||
/>
|
{props.value}
|
||||||
) : (
|
</span>
|
||||||
<span className="TextInput TextInput--readonly" id="filename">
|
)}
|
||||||
{this.props.value}
|
</div>
|
||||||
</span>
|
);
|
||||||
)}
|
};
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { t } from "../i18n";
|
import { t } from "../i18n";
|
||||||
|
import { useExcalidrawContainer } from "./App";
|
||||||
|
|
||||||
interface SectionProps extends React.HTMLProps<HTMLElement> {
|
interface SectionProps extends React.HTMLProps<HTMLElement> {
|
||||||
heading: string;
|
heading: string;
|
||||||
@@ -7,13 +8,14 @@ interface SectionProps extends React.HTMLProps<HTMLElement> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const Section = ({ heading, children, ...props }: SectionProps) => {
|
export const Section = ({ heading, children, ...props }: SectionProps) => {
|
||||||
|
const { id } = useExcalidrawContainer();
|
||||||
const header = (
|
const header = (
|
||||||
<h2 className="visually-hidden" id={`${heading}-title`}>
|
<h2 className="visually-hidden" id={`${id}-${heading}-title`}>
|
||||||
{t(`headings.${heading}`)}
|
{t(`headings.${heading}`)}
|
||||||
</h2>
|
</h2>
|
||||||
);
|
);
|
||||||
return (
|
return (
|
||||||
<section {...props} aria-labelledby={`${heading}-title`}>
|
<section {...props} aria-labelledby={`${id}-${heading}-title`}>
|
||||||
{typeof children === "function" ? (
|
{typeof children === "function" ? (
|
||||||
children(header)
|
children(header)
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import "./ToolIcon.scss";
|
|||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
|
import { useExcalidrawContainer } from "./App";
|
||||||
|
|
||||||
type ToolIconSize = "s" | "m";
|
type ToolIconSize = "s" | "m";
|
||||||
|
|
||||||
@@ -43,6 +44,7 @@ type ToolButtonProps =
|
|||||||
const DEFAULT_SIZE: ToolIconSize = "m";
|
const DEFAULT_SIZE: ToolIconSize = "m";
|
||||||
|
|
||||||
export const ToolButton = React.forwardRef((props: ToolButtonProps, ref) => {
|
export const ToolButton = React.forwardRef((props: ToolButtonProps, ref) => {
|
||||||
|
const { id: excalId } = useExcalidrawContainer();
|
||||||
const innerRef = React.useRef(null);
|
const innerRef = React.useRef(null);
|
||||||
React.useImperativeHandle(ref, () => innerRef.current);
|
React.useImperativeHandle(ref, () => innerRef.current);
|
||||||
const sizeCn = `ToolIcon_size_${props.size || DEFAULT_SIZE}`;
|
const sizeCn = `ToolIcon_size_${props.size || DEFAULT_SIZE}`;
|
||||||
@@ -98,7 +100,7 @@ export const ToolButton = React.forwardRef((props: ToolButtonProps, ref) => {
|
|||||||
aria-label={props["aria-label"]}
|
aria-label={props["aria-label"]}
|
||||||
aria-keyshortcuts={props["aria-keyshortcuts"]}
|
aria-keyshortcuts={props["aria-keyshortcuts"]}
|
||||||
data-testid={props["data-testid"]}
|
data-testid={props["data-testid"]}
|
||||||
id={props.id}
|
id={`${excalId}-${props.id}`}
|
||||||
onChange={props.onChange}
|
onChange={props.onChange}
|
||||||
checked={props.checked}
|
checked={props.checked}
|
||||||
ref={innerRef}
|
ref={innerRef}
|
||||||
|
|||||||
@@ -8,10 +8,18 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
font-family: Cascadia;
|
font-family: Cascadia;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
background-color: var(--button-gray-1);
|
|
||||||
-webkit-tap-highlight-color: transparent;
|
-webkit-tap-highlight-color: transparent;
|
||||||
border-radius: var(--space-factor);
|
border-radius: var(--space-factor);
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
|
||||||
|
background-color: var(--button-gray-1);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--button-gray-2);
|
||||||
|
}
|
||||||
|
&:active {
|
||||||
|
background-color: var(--button-gray-3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.ToolIcon--plain {
|
.ToolIcon--plain {
|
||||||
@@ -66,14 +74,6 @@
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
font-size: inherit;
|
font-size: inherit;
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: var(--button-gray-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active {
|
|
||||||
background-color: var(--button-gray-2);
|
|
||||||
}
|
|
||||||
|
|
||||||
&:focus {
|
&:focus {
|
||||||
box-shadow: 0 0 0 2px var(--focus-highlight-color);
|
box-shadow: 0 0 0 2px var(--focus-highlight-color);
|
||||||
}
|
}
|
||||||
@@ -86,6 +86,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--button-gray-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
background-color: var(--button-gray-3);
|
||||||
|
}
|
||||||
|
|
||||||
&--show {
|
&--show {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
@@ -103,6 +111,9 @@
|
|||||||
|
|
||||||
&:not(.ToolIcon_toggle_opaque):checked + .ToolIcon__icon {
|
&:not(.ToolIcon_toggle_opaque):checked + .ToolIcon__icon {
|
||||||
background-color: var(--button-gray-2);
|
background-color: var(--button-gray-2);
|
||||||
|
&:active {
|
||||||
|
background-color: var(--button-gray-3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&:focus + .ToolIcon__icon {
|
&:focus + .ToolIcon__icon {
|
||||||
@@ -130,12 +141,21 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.ToolIcon__icon {
|
.ToolIcon__icon {
|
||||||
|
background-color: var(--button-gray-1);
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--button-gray-2);
|
||||||
|
}
|
||||||
|
&:active {
|
||||||
|
background-color: var(--button-gray-3);
|
||||||
|
}
|
||||||
|
|
||||||
width: 2rem;
|
width: 2rem;
|
||||||
height: 2em;
|
height: 2em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.ToolIcon.ToolIcon__lock {
|
.ToolIcon.ToolIcon__lock {
|
||||||
|
margin-inline-end: var(--space-factor);
|
||||||
&.ToolIcon_type_floating {
|
&.ToolIcon_type_floating {
|
||||||
margin-left: 0.1rem;
|
margin-left: 0.1rem;
|
||||||
}
|
}
|
||||||
@@ -166,10 +186,9 @@
|
|||||||
// move the lock button out of the way on small viewports
|
// move the lock button out of the way on small viewports
|
||||||
// it begins to collide with the GitHub icon before we switch to mobile mode
|
// it begins to collide with the GitHub icon before we switch to mobile mode
|
||||||
@media (max-width: 760px) {
|
@media (max-width: 760px) {
|
||||||
.ToolIcon.ToolIcon__lock {
|
.ToolIcon.ToolIcon_type_floating {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 60px;
|
|
||||||
right: -8px;
|
right: -8px;
|
||||||
|
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
@@ -194,6 +213,14 @@
|
|||||||
position: static;
|
position: static;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.ToolIcon.ToolIcon__library {
|
||||||
|
top: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ToolIcon.ToolIcon__lock {
|
||||||
|
margin-inline-end: 0;
|
||||||
|
top: 60px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.unlocked-icon {
|
.unlocked-icon {
|
||||||
|
|||||||
@@ -24,7 +24,10 @@ type Opts = {
|
|||||||
mirror?: true;
|
mirror?: true;
|
||||||
} & React.SVGProps<SVGSVGElement>;
|
} & React.SVGProps<SVGSVGElement>;
|
||||||
|
|
||||||
const createIcon = (d: string | React.ReactNode, opts: number | Opts = 512) => {
|
export const createIcon = (
|
||||||
|
d: string | React.ReactNode,
|
||||||
|
opts: number | Opts = 512,
|
||||||
|
) => {
|
||||||
const { width = 512, height = width, mirror, style } =
|
const { width = 512, height = width, mirror, style } =
|
||||||
typeof opts === "number" ? ({ width: opts } as Opts) : opts;
|
typeof opts === "number" ? ({ width: opts } as Opts) : opts;
|
||||||
return (
|
return (
|
||||||
@@ -474,6 +477,11 @@ export const shield = createIcon(
|
|||||||
{ width: 24 },
|
{ width: 24 },
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const file = createIcon(
|
||||||
|
"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z",
|
||||||
|
{ width: 384, height: 512 },
|
||||||
|
);
|
||||||
|
|
||||||
export const GroupIcon = React.memo(({ theme }: { theme: "light" | "dark" }) =>
|
export const GroupIcon = React.memo(({ theme }: { theme: "light" | "dark" }) =>
|
||||||
createIcon(
|
createIcon(
|
||||||
<>
|
<>
|
||||||
|
|||||||
+13
-9
@@ -1,6 +1,6 @@
|
|||||||
import { FontFamily } from "./element/types";
|
|
||||||
import cssVariables from "./css/variables.module.scss";
|
import cssVariables from "./css/variables.module.scss";
|
||||||
import { AppProps } from "./types";
|
import { AppProps } from "./types";
|
||||||
|
import { FontFamilyValues } from "./element/types";
|
||||||
|
|
||||||
export const APP_NAME = "Excalidraw";
|
export const APP_NAME = "Excalidraw";
|
||||||
|
|
||||||
@@ -14,6 +14,7 @@ export const CURSOR_TYPE = {
|
|||||||
TEXT: "text",
|
TEXT: "text",
|
||||||
CROSSHAIR: "crosshair",
|
CROSSHAIR: "crosshair",
|
||||||
GRABBING: "grabbing",
|
GRABBING: "grabbing",
|
||||||
|
GRAB: "grab",
|
||||||
POINTER: "pointer",
|
POINTER: "pointer",
|
||||||
MOVE: "move",
|
MOVE: "move",
|
||||||
AUTO: "",
|
AUTO: "",
|
||||||
@@ -63,15 +64,15 @@ export const CLASSES = {
|
|||||||
|
|
||||||
// 1-based in case we ever do `if(element.fontFamily)`
|
// 1-based in case we ever do `if(element.fontFamily)`
|
||||||
export const FONT_FAMILY = {
|
export const FONT_FAMILY = {
|
||||||
1: "Virgil",
|
Virgil: 1,
|
||||||
2: "Helvetica",
|
Helvetica: 2,
|
||||||
3: "Cascadia",
|
Cascadia: 3,
|
||||||
} as const;
|
};
|
||||||
|
|
||||||
export const WINDOWS_EMOJI_FALLBACK_FONT = "Segoe UI Emoji";
|
export const WINDOWS_EMOJI_FALLBACK_FONT = "Segoe UI Emoji";
|
||||||
|
|
||||||
export const DEFAULT_FONT_SIZE = 20;
|
export const DEFAULT_FONT_SIZE = 20;
|
||||||
export const DEFAULT_FONT_FAMILY: FontFamily = 1;
|
export const DEFAULT_FONT_FAMILY: FontFamilyValues = FONT_FAMILY.Virgil;
|
||||||
export const DEFAULT_TEXT_ALIGN = "left";
|
export const DEFAULT_TEXT_ALIGN = "left";
|
||||||
export const DEFAULT_VERTICAL_ALIGN = "top";
|
export const DEFAULT_VERTICAL_ALIGN = "top";
|
||||||
export const DEFAULT_VERSION = "{version}";
|
export const DEFAULT_VERSION = "{version}";
|
||||||
@@ -131,11 +132,11 @@ export const DEFAULT_UI_OPTIONS: AppProps["UIOptions"] = {
|
|||||||
canvasActions: {
|
canvasActions: {
|
||||||
changeViewBackgroundColor: true,
|
changeViewBackgroundColor: true,
|
||||||
clearCanvas: true,
|
clearCanvas: true,
|
||||||
export: true,
|
export: { saveFileToDisk: true },
|
||||||
loadScene: true,
|
loadScene: true,
|
||||||
saveAsScene: true,
|
saveToActiveFile: true,
|
||||||
saveScene: true,
|
|
||||||
theme: true,
|
theme: true,
|
||||||
|
saveAsImage: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -144,3 +145,6 @@ export const MQ_MAX_WIDTH_LANDSCAPE = 1000;
|
|||||||
export const MQ_MAX_HEIGHT_LANDSCAPE = 500;
|
export const MQ_MAX_HEIGHT_LANDSCAPE = 500;
|
||||||
|
|
||||||
export const MAX_DECIMALS_FOR_SVG_EXPORT = 2;
|
export const MAX_DECIMALS_FOR_SVG_EXPORT = 2;
|
||||||
|
|
||||||
|
export const EXPORT_SCALES = [1, 2, 3];
|
||||||
|
export const DEFAULT_EXPORT_PADDING = 10; // px
|
||||||
|
|||||||
+3
-2
@@ -51,11 +51,12 @@
|
|||||||
image-rendering: -moz-crisp-edges; // FF
|
image-rendering: -moz-crisp-edges; // FF
|
||||||
|
|
||||||
z-index: var(--zIndex-canvas);
|
z-index: var(--zIndex-canvas);
|
||||||
}
|
|
||||||
|
|
||||||
#canvas {
|
|
||||||
// Remove the main canvas from document flow to avoid resizeObserver
|
// Remove the main canvas from document flow to avoid resizeObserver
|
||||||
// feedback loop (see https://github.com/excalidraw/excalidraw/pull/3379)
|
// feedback loop (see https://github.com/excalidraw/excalidraw/pull/3379)
|
||||||
|
}
|
||||||
|
|
||||||
|
&__canvas {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { cleanAppStateForExport } from "../appState";
|
import { cleanAppStateForExport } from "../appState";
|
||||||
import { EXPORT_DATA_TYPES } from "../constants";
|
import { EXPORT_DATA_TYPES } from "../constants";
|
||||||
import { clearElementsForExport } from "../element";
|
import { clearElementsForExport } from "../element";
|
||||||
|
import { ExcalidrawElement } from "../element/types";
|
||||||
import { CanvasError } from "../errors";
|
import { CanvasError } from "../errors";
|
||||||
import { t } from "../i18n";
|
import { t } from "../i18n";
|
||||||
import { calculateScrollCenter } from "../scene";
|
import { calculateScrollCenter } from "../scene";
|
||||||
@@ -83,6 +84,7 @@ export const loadFromBlob = async (
|
|||||||
blob: Blob,
|
blob: Blob,
|
||||||
/** @see restore.localAppState */
|
/** @see restore.localAppState */
|
||||||
localAppState: AppState | null,
|
localAppState: AppState | null,
|
||||||
|
localElements: readonly ExcalidrawElement[] | null,
|
||||||
) => {
|
) => {
|
||||||
const contents = await parseFileContents(blob);
|
const contents = await parseFileContents(blob);
|
||||||
try {
|
try {
|
||||||
@@ -103,6 +105,7 @@ export const loadFromBlob = async (
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
localAppState,
|
localAppState,
|
||||||
|
localElements,
|
||||||
);
|
);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
+6
-15
@@ -3,6 +3,7 @@ import {
|
|||||||
copyBlobToClipboardAsPng,
|
copyBlobToClipboardAsPng,
|
||||||
copyTextToSystemClipboard,
|
copyTextToSystemClipboard,
|
||||||
} from "../clipboard";
|
} from "../clipboard";
|
||||||
|
import { DEFAULT_EXPORT_PADDING } from "../constants";
|
||||||
import { NonDeletedExcalidrawElement } from "../element/types";
|
import { NonDeletedExcalidrawElement } from "../element/types";
|
||||||
import { t } from "../i18n";
|
import { t } from "../i18n";
|
||||||
import { exportToCanvas, exportToSvg } from "../scene/export";
|
import { exportToCanvas, exportToSvg } from "../scene/export";
|
||||||
@@ -20,36 +21,27 @@ export const exportCanvas = async (
|
|||||||
appState: AppState,
|
appState: AppState,
|
||||||
{
|
{
|
||||||
exportBackground,
|
exportBackground,
|
||||||
exportPadding = 10,
|
exportPadding = DEFAULT_EXPORT_PADDING,
|
||||||
viewBackgroundColor,
|
viewBackgroundColor,
|
||||||
name,
|
name,
|
||||||
scale = 1,
|
|
||||||
}: {
|
}: {
|
||||||
exportBackground: boolean;
|
exportBackground: boolean;
|
||||||
exportPadding?: number;
|
exportPadding?: number;
|
||||||
viewBackgroundColor: string;
|
viewBackgroundColor: string;
|
||||||
name: string;
|
name: string;
|
||||||
scale?: number;
|
|
||||||
},
|
},
|
||||||
) => {
|
) => {
|
||||||
if (elements.length === 0) {
|
if (elements.length === 0) {
|
||||||
throw new Error(t("alerts.cannotExportEmptyCanvas"));
|
throw new Error(t("alerts.cannotExportEmptyCanvas"));
|
||||||
}
|
}
|
||||||
if (type === "svg" || type === "clipboard-svg") {
|
if (type === "svg" || type === "clipboard-svg") {
|
||||||
const tempSvg = exportToSvg(elements, {
|
const tempSvg = await exportToSvg(elements, {
|
||||||
exportBackground,
|
exportBackground,
|
||||||
exportWithDarkMode: appState.exportWithDarkMode,
|
exportWithDarkMode: appState.exportWithDarkMode,
|
||||||
viewBackgroundColor,
|
viewBackgroundColor,
|
||||||
exportPadding,
|
exportPadding,
|
||||||
scale,
|
exportScale: appState.exportScale,
|
||||||
metadata:
|
exportEmbedScene: appState.exportEmbedScene && type === "svg",
|
||||||
appState.exportEmbedScene && type === "svg"
|
|
||||||
? await (
|
|
||||||
await import(/* webpackChunkName: "image" */ "./image")
|
|
||||||
).encodeSvgMetadata({
|
|
||||||
text: serializeAsJSON(elements, appState),
|
|
||||||
})
|
|
||||||
: undefined,
|
|
||||||
});
|
});
|
||||||
if (type === "svg") {
|
if (type === "svg") {
|
||||||
await fileSave(new Blob([tempSvg.outerHTML], { type: "image/svg+xml" }), {
|
await fileSave(new Blob([tempSvg.outerHTML], { type: "image/svg+xml" }), {
|
||||||
@@ -58,7 +50,7 @@ export const exportCanvas = async (
|
|||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
} else if (type === "clipboard-svg") {
|
} else if (type === "clipboard-svg") {
|
||||||
copyTextToSystemClipboard(tempSvg.outerHTML);
|
await copyTextToSystemClipboard(tempSvg.outerHTML);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -67,7 +59,6 @@ export const exportCanvas = async (
|
|||||||
exportBackground,
|
exportBackground,
|
||||||
viewBackgroundColor,
|
viewBackgroundColor,
|
||||||
exportPadding,
|
exportPadding,
|
||||||
scale,
|
|
||||||
});
|
});
|
||||||
tempCanvas.style.display = "none";
|
tempCanvas.style.display = "none";
|
||||||
document.body.appendChild(tempCanvas);
|
document.body.appendChild(tempCanvas);
|
||||||
|
|||||||
+6
-3
@@ -15,7 +15,7 @@ import Library from "./library";
|
|||||||
|
|
||||||
export const serializeAsJSON = (
|
export const serializeAsJSON = (
|
||||||
elements: readonly ExcalidrawElement[],
|
elements: readonly ExcalidrawElement[],
|
||||||
appState: AppState,
|
appState: Partial<AppState>,
|
||||||
): string => {
|
): string => {
|
||||||
const data: ExportedDataState = {
|
const data: ExportedDataState = {
|
||||||
type: EXPORT_DATA_TYPES.excalidraw,
|
type: EXPORT_DATA_TYPES.excalidraw,
|
||||||
@@ -49,7 +49,10 @@ export const saveAsJSON = async (
|
|||||||
return { fileHandle };
|
return { fileHandle };
|
||||||
};
|
};
|
||||||
|
|
||||||
export const loadFromJSON = async (localAppState: AppState) => {
|
export const loadFromJSON = async (
|
||||||
|
localAppState: AppState,
|
||||||
|
localElements: readonly ExcalidrawElement[] | null,
|
||||||
|
) => {
|
||||||
const blob = await fileOpen({
|
const blob = await fileOpen({
|
||||||
description: "Excalidraw files",
|
description: "Excalidraw files",
|
||||||
// ToDo: Be over-permissive until https://bugs.webkit.org/show_bug.cgi?id=34442
|
// ToDo: Be over-permissive until https://bugs.webkit.org/show_bug.cgi?id=34442
|
||||||
@@ -64,7 +67,7 @@ export const loadFromJSON = async (localAppState: AppState) => {
|
|||||||
],
|
],
|
||||||
*/
|
*/
|
||||||
});
|
});
|
||||||
return loadFromBlob(blob, localAppState);
|
return loadFromBlob(blob, localAppState, localElements);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const isValidExcalidrawData = (data?: {
|
export const isValidExcalidrawData = (data?: {
|
||||||
|
|||||||
+2
-2
@@ -2,7 +2,7 @@ import { loadLibraryFromBlob } from "./blob";
|
|||||||
import { LibraryItems, LibraryItem } from "../types";
|
import { LibraryItems, LibraryItem } from "../types";
|
||||||
import { restoreElements } from "./restore";
|
import { restoreElements } from "./restore";
|
||||||
import { getNonDeletedElements } from "../element";
|
import { getNonDeletedElements } from "../element";
|
||||||
import App from "../components/App";
|
import type App from "../components/App";
|
||||||
|
|
||||||
class Library {
|
class Library {
|
||||||
private libraryCache: LibraryItems | null = null;
|
private libraryCache: LibraryItems | null = null;
|
||||||
@@ -18,7 +18,7 @@ class Library {
|
|||||||
};
|
};
|
||||||
|
|
||||||
restoreLibraryItem = (libraryItem: LibraryItem): LibraryItem | null => {
|
restoreLibraryItem = (libraryItem: LibraryItem): LibraryItem | null => {
|
||||||
const elements = getNonDeletedElements(restoreElements(libraryItem));
|
const elements = getNonDeletedElements(restoreElements(libraryItem, null));
|
||||||
return elements.length ? elements : null;
|
return elements.length ? elements : null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+29
-16
@@ -1,21 +1,26 @@
|
|||||||
import {
|
import {
|
||||||
ExcalidrawElement,
|
ExcalidrawElement,
|
||||||
FontFamily,
|
|
||||||
ExcalidrawSelectionElement,
|
ExcalidrawSelectionElement,
|
||||||
|
FontFamilyValues,
|
||||||
} from "../element/types";
|
} from "../element/types";
|
||||||
import { AppState, NormalizedZoomValue } from "../types";
|
import { AppState, NormalizedZoomValue } from "../types";
|
||||||
import { ImportedDataState } from "./types";
|
import { ImportedDataState } from "./types";
|
||||||
import { isInvisiblySmallElement, getNormalizedDimensions } from "../element";
|
import {
|
||||||
|
getElementMap,
|
||||||
|
getNormalizedDimensions,
|
||||||
|
isInvisiblySmallElement,
|
||||||
|
} from "../element";
|
||||||
import { isLinearElementType } from "../element/typeChecks";
|
import { isLinearElementType } from "../element/typeChecks";
|
||||||
import { randomId } from "../random";
|
import { randomId } from "../random";
|
||||||
import {
|
import {
|
||||||
FONT_FAMILY,
|
|
||||||
DEFAULT_FONT_FAMILY,
|
DEFAULT_FONT_FAMILY,
|
||||||
DEFAULT_TEXT_ALIGN,
|
DEFAULT_TEXT_ALIGN,
|
||||||
DEFAULT_VERTICAL_ALIGN,
|
DEFAULT_VERTICAL_ALIGN,
|
||||||
|
FONT_FAMILY,
|
||||||
} from "../constants";
|
} from "../constants";
|
||||||
import { getDefaultAppState } from "../appState";
|
import { getDefaultAppState } from "../appState";
|
||||||
import { LinearElementEditor } from "../element/linearElementEditor";
|
import { LinearElementEditor } from "../element/linearElementEditor";
|
||||||
|
import { bumpVersion } from "../element/mutateElement";
|
||||||
|
|
||||||
type RestoredAppState = Omit<
|
type RestoredAppState = Omit<
|
||||||
AppState,
|
AppState,
|
||||||
@@ -41,11 +46,11 @@ export type RestoredDataState = {
|
|||||||
appState: RestoredAppState;
|
appState: RestoredAppState;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getFontFamilyByName = (fontFamilyName: string): FontFamily => {
|
const getFontFamilyByName = (fontFamilyName: string): FontFamilyValues => {
|
||||||
for (const [id, fontFamilyString] of Object.entries(FONT_FAMILY)) {
|
if (Object.keys(FONT_FAMILY).includes(fontFamilyName)) {
|
||||||
if (fontFamilyString.includes(fontFamilyName)) {
|
return FONT_FAMILY[
|
||||||
return parseInt(id) as FontFamily;
|
fontFamilyName as keyof typeof FONT_FAMILY
|
||||||
}
|
] as FontFamilyValues;
|
||||||
}
|
}
|
||||||
return DEFAULT_FONT_FAMILY;
|
return DEFAULT_FONT_FAMILY;
|
||||||
};
|
};
|
||||||
@@ -181,13 +186,20 @@ const restoreElement = (
|
|||||||
|
|
||||||
export const restoreElements = (
|
export const restoreElements = (
|
||||||
elements: ImportedDataState["elements"],
|
elements: ImportedDataState["elements"],
|
||||||
|
/** NOTE doesn't serve for reconciliation */
|
||||||
|
localElements: readonly ExcalidrawElement[] | null | undefined,
|
||||||
): ExcalidrawElement[] => {
|
): ExcalidrawElement[] => {
|
||||||
|
const localElementsMap = localElements ? getElementMap(localElements) : null;
|
||||||
return (elements || []).reduce((elements, element) => {
|
return (elements || []).reduce((elements, element) => {
|
||||||
// filtering out selection, which is legacy, no longer kept in elements,
|
// filtering out selection, which is legacy, no longer kept in elements,
|
||||||
// and causing issues if retained
|
// and causing issues if retained
|
||||||
if (element.type !== "selection" && !isInvisiblySmallElement(element)) {
|
if (element.type !== "selection" && !isInvisiblySmallElement(element)) {
|
||||||
const migratedElement = restoreElement(element);
|
let migratedElement: ExcalidrawElement = restoreElement(element);
|
||||||
if (migratedElement) {
|
if (migratedElement) {
|
||||||
|
const localElement = localElementsMap?.[element.id];
|
||||||
|
if (localElement && localElement.version > migratedElement.version) {
|
||||||
|
migratedElement = bumpVersion(migratedElement, localElement.version);
|
||||||
|
}
|
||||||
elements.push(migratedElement);
|
elements.push(migratedElement);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -197,25 +209,25 @@ export const restoreElements = (
|
|||||||
|
|
||||||
export const restoreAppState = (
|
export const restoreAppState = (
|
||||||
appState: ImportedDataState["appState"],
|
appState: ImportedDataState["appState"],
|
||||||
localAppState: Partial<AppState> | null,
|
localAppState: Partial<AppState> | null | undefined,
|
||||||
): RestoredAppState => {
|
): RestoredAppState => {
|
||||||
appState = appState || {};
|
appState = appState || {};
|
||||||
|
|
||||||
const defaultAppState = getDefaultAppState();
|
const defaultAppState = getDefaultAppState();
|
||||||
const nextAppState = {} as typeof defaultAppState;
|
const nextAppState = {} as typeof defaultAppState;
|
||||||
|
|
||||||
for (const [key, val] of Object.entries(defaultAppState) as [
|
for (const [key, defaultValue] of Object.entries(defaultAppState) as [
|
||||||
keyof typeof defaultAppState,
|
keyof typeof defaultAppState,
|
||||||
any,
|
any,
|
||||||
][]) {
|
][]) {
|
||||||
const restoredValue = appState[key];
|
const suppliedValue = appState[key];
|
||||||
const localValue = localAppState ? localAppState[key] : undefined;
|
const localValue = localAppState ? localAppState[key] : undefined;
|
||||||
(nextAppState as any)[key] =
|
(nextAppState as any)[key] =
|
||||||
restoredValue !== undefined
|
suppliedValue !== undefined
|
||||||
? restoredValue
|
? suppliedValue
|
||||||
: localValue !== undefined
|
: localValue !== undefined
|
||||||
? localValue
|
? localValue
|
||||||
: val;
|
: defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -243,9 +255,10 @@ export const restore = (
|
|||||||
* Supply `null` if you can't get access to it.
|
* Supply `null` if you can't get access to it.
|
||||||
*/
|
*/
|
||||||
localAppState: Partial<AppState> | null | undefined,
|
localAppState: Partial<AppState> | null | undefined,
|
||||||
|
localElements: readonly ExcalidrawElement[] | null | undefined,
|
||||||
): RestoredDataState => {
|
): RestoredDataState => {
|
||||||
return {
|
return {
|
||||||
elements: restoreElements(data?.elements),
|
elements: restoreElements(data?.elements, localElements),
|
||||||
appState: restoreAppState(data?.appState, localAppState || null),
|
appState: restoreAppState(data?.appState, localAppState || null),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { mutateElement } from "./mutateElement";
|
|||||||
import { getPerfectElementSize } from "./sizeHelpers";
|
import { getPerfectElementSize } from "./sizeHelpers";
|
||||||
import Scene from "../scene/Scene";
|
import Scene from "../scene/Scene";
|
||||||
import { NonDeletedExcalidrawElement } from "./types";
|
import { NonDeletedExcalidrawElement } from "./types";
|
||||||
import { PointerDownState } from "../components/App";
|
import { PointerDownState } from "../types";
|
||||||
|
|
||||||
export const dragSelectedElements = (
|
export const dragSelectedElements = (
|
||||||
pointerDownState: PointerDownState,
|
pointerDownState: PointerDownState,
|
||||||
|
|||||||
@@ -120,8 +120,11 @@ export const newElementWith = <TElement extends ExcalidrawElement>(
|
|||||||
*
|
*
|
||||||
* NOTE: does not trigger re-render.
|
* NOTE: does not trigger re-render.
|
||||||
*/
|
*/
|
||||||
export const bumpVersion = (element: Mutable<ExcalidrawElement>) => {
|
export const bumpVersion = (
|
||||||
element.version = element.version + 1;
|
element: Mutable<ExcalidrawElement>,
|
||||||
|
version?: ExcalidrawElement["version"],
|
||||||
|
) => {
|
||||||
|
element.version = (version ?? element.version) + 1;
|
||||||
element.versionNonce = randomInteger();
|
element.versionNonce = randomInteger();
|
||||||
return element;
|
return element;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { duplicateElement } from "./newElement";
|
import { duplicateElement } from "./newElement";
|
||||||
import { mutateElement } from "./mutateElement";
|
import { mutateElement } from "./mutateElement";
|
||||||
import { API } from "../tests/helpers/api";
|
import { API } from "../tests/helpers/api";
|
||||||
|
import { FONT_FAMILY } from "../constants";
|
||||||
|
|
||||||
const isPrimitive = (val: any) => {
|
const isPrimitive = (val: any) => {
|
||||||
const type = typeof val;
|
const type = typeof val;
|
||||||
@@ -79,7 +80,7 @@ it("clones text element", () => {
|
|||||||
opacity: 100,
|
opacity: 100,
|
||||||
text: "hello",
|
text: "hello",
|
||||||
fontSize: 20,
|
fontSize: 20,
|
||||||
fontFamily: 1,
|
fontFamily: FONT_FAMILY.Virgil,
|
||||||
textAlign: "left",
|
textAlign: "left",
|
||||||
verticalAlign: "top",
|
verticalAlign: "top",
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -5,11 +5,11 @@ import {
|
|||||||
ExcalidrawGenericElement,
|
ExcalidrawGenericElement,
|
||||||
NonDeleted,
|
NonDeleted,
|
||||||
TextAlign,
|
TextAlign,
|
||||||
FontFamily,
|
|
||||||
GroupId,
|
GroupId,
|
||||||
VerticalAlign,
|
VerticalAlign,
|
||||||
Arrowhead,
|
Arrowhead,
|
||||||
ExcalidrawFreeDrawElement,
|
ExcalidrawFreeDrawElement,
|
||||||
|
FontFamilyValues,
|
||||||
} from "../element/types";
|
} from "../element/types";
|
||||||
import { measureText, getFontString } from "../utils";
|
import { measureText, getFontString } from "../utils";
|
||||||
import { randomInteger, randomId } from "../random";
|
import { randomInteger, randomId } from "../random";
|
||||||
@@ -109,7 +109,7 @@ export const newTextElement = (
|
|||||||
opts: {
|
opts: {
|
||||||
text: string;
|
text: string;
|
||||||
fontSize: number;
|
fontSize: number;
|
||||||
fontFamily: FontFamily;
|
fontFamily: FontFamilyValues;
|
||||||
textAlign: TextAlign;
|
textAlign: TextAlign;
|
||||||
verticalAlign: VerticalAlign;
|
verticalAlign: VerticalAlign;
|
||||||
} & ElementConstructorOpts,
|
} & ElementConstructorOpts,
|
||||||
@@ -307,7 +307,19 @@ export const duplicateElement = <TElement extends Mutable<ExcalidrawElement>>(
|
|||||||
overrides?: Partial<TElement>,
|
overrides?: Partial<TElement>,
|
||||||
): TElement => {
|
): TElement => {
|
||||||
let copy: TElement = deepCopyElement(element);
|
let copy: TElement = deepCopyElement(element);
|
||||||
copy.id = process.env.NODE_ENV === "test" ? `${copy.id}_copy` : randomId();
|
if (process.env.NODE_ENV === "test") {
|
||||||
|
copy.id = `${copy.id}_copy`;
|
||||||
|
// `window.h` may not be defined in some unit tests
|
||||||
|
if (
|
||||||
|
window.h?.app
|
||||||
|
?.getSceneElementsIncludingDeleted()
|
||||||
|
.find((el) => el.id === copy.id)
|
||||||
|
) {
|
||||||
|
copy.id += "_copy";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
copy.id = randomId();
|
||||||
|
}
|
||||||
copy.seed = randomInteger();
|
copy.seed = randomInteger();
|
||||||
copy.groupIds = getNewGroupIdsForDuplication(
|
copy.groupIds = getNewGroupIdsForDuplication(
|
||||||
copy.groupIds,
|
copy.groupIds,
|
||||||
|
|||||||
@@ -32,8 +32,7 @@ import {
|
|||||||
MaybeTransformHandleType,
|
MaybeTransformHandleType,
|
||||||
TransformHandleDirection,
|
TransformHandleDirection,
|
||||||
} from "./transformHandles";
|
} from "./transformHandles";
|
||||||
import { PointerDownState } from "../components/App";
|
import { Point, PointerDownState } from "../types";
|
||||||
import { Point } from "../types";
|
|
||||||
|
|
||||||
export const normalizeAngle = (angle: number): number => {
|
export const normalizeAngle = (angle: number): number => {
|
||||||
if (angle >= 2 * Math.PI) {
|
if (angle >= 2 * Math.PI) {
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ import { FONT_FAMILY } from "../constants";
|
|||||||
|
|
||||||
export type ChartType = "bar" | "line";
|
export type ChartType = "bar" | "line";
|
||||||
export type FillStyle = "hachure" | "cross-hatch" | "solid";
|
export type FillStyle = "hachure" | "cross-hatch" | "solid";
|
||||||
export type FontFamily = keyof typeof FONT_FAMILY;
|
export type FontFamilyKeys = keyof typeof FONT_FAMILY;
|
||||||
|
export type FontFamilyValues = typeof FONT_FAMILY[FontFamilyKeys];
|
||||||
export type FontString = string & { _brand: "fontString" };
|
export type FontString = string & { _brand: "fontString" };
|
||||||
export type GroupId = string;
|
export type GroupId = string;
|
||||||
export type PointerType = "mouse" | "pen" | "touch";
|
export type PointerType = "mouse" | "pen" | "touch";
|
||||||
@@ -91,7 +92,7 @@ export type ExcalidrawTextElement = _ExcalidrawElementBase &
|
|||||||
Readonly<{
|
Readonly<{
|
||||||
type: "text";
|
type: "text";
|
||||||
fontSize: number;
|
fontSize: number;
|
||||||
fontFamily: FontFamily;
|
fontFamily: FontFamilyValues;
|
||||||
text: string;
|
text: string;
|
||||||
baseline: number;
|
baseline: number;
|
||||||
textAlign: TextAlign;
|
textAlign: TextAlign;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import throttle from "lodash.throttle";
|
import throttle from "lodash.throttle";
|
||||||
import React, { PureComponent } from "react";
|
import React, { PureComponent } from "react";
|
||||||
import { ExcalidrawImperativeAPI } from "../../components/App";
|
import { ExcalidrawImperativeAPI } from "../../types";
|
||||||
import { ErrorDialog } from "../../components/ErrorDialog";
|
import { ErrorDialog } from "../../components/ErrorDialog";
|
||||||
import { APP_NAME, ENV, EVENT } from "../../constants";
|
import { APP_NAME, ENV, EVENT } from "../../constants";
|
||||||
import { ImportedDataState } from "../../data/types";
|
import { ImportedDataState } from "../../data/types";
|
||||||
|
|||||||
@@ -0,0 +1,92 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { Card } from "../../components/Card";
|
||||||
|
import { ToolButton } from "../../components/ToolButton";
|
||||||
|
import { serializeAsJSON } from "../../data/json";
|
||||||
|
import { getImportedKey, createIV, generateEncryptionKey } from "../data";
|
||||||
|
import { loadFirebaseStorage } from "../data/firebase";
|
||||||
|
import { NonDeletedExcalidrawElement } from "../../element/types";
|
||||||
|
import { AppState } from "../../types";
|
||||||
|
import { nanoid } from "nanoid";
|
||||||
|
import { t } from "../../i18n";
|
||||||
|
import { excalidrawPlusIcon } from "./icons";
|
||||||
|
|
||||||
|
const encryptData = async (
|
||||||
|
key: string,
|
||||||
|
json: string,
|
||||||
|
): Promise<{ blob: Blob; iv: Uint8Array }> => {
|
||||||
|
const importedKey = await getImportedKey(key, "encrypt");
|
||||||
|
const iv = createIV();
|
||||||
|
const encoded = new TextEncoder().encode(json);
|
||||||
|
const ciphertext = await window.crypto.subtle.encrypt(
|
||||||
|
{
|
||||||
|
name: "AES-GCM",
|
||||||
|
iv,
|
||||||
|
},
|
||||||
|
importedKey,
|
||||||
|
encoded,
|
||||||
|
);
|
||||||
|
|
||||||
|
return { blob: new Blob([new Uint8Array(ciphertext)]), iv };
|
||||||
|
};
|
||||||
|
|
||||||
|
const exportToExcalidrawPlus = async (
|
||||||
|
elements: readonly NonDeletedExcalidrawElement[],
|
||||||
|
appState: AppState,
|
||||||
|
) => {
|
||||||
|
const firebase = await loadFirebaseStorage();
|
||||||
|
|
||||||
|
const id = `${nanoid(12)}`;
|
||||||
|
|
||||||
|
const key = (await generateEncryptionKey())!;
|
||||||
|
const encryptedData = await encryptData(
|
||||||
|
key,
|
||||||
|
serializeAsJSON(elements, appState),
|
||||||
|
);
|
||||||
|
|
||||||
|
const blob = new Blob([encryptedData.iv, encryptedData.blob], {
|
||||||
|
type: "application/octet-stream",
|
||||||
|
});
|
||||||
|
|
||||||
|
await firebase
|
||||||
|
.storage()
|
||||||
|
.ref(`/migrations/scenes/${id}`)
|
||||||
|
.put(blob, {
|
||||||
|
customMetadata: {
|
||||||
|
data: JSON.stringify({ version: 1, name: appState.name }),
|
||||||
|
created: Date.now().toString(),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
window.open(`https://plus.excalidraw.com/import?excalidraw=${id},${key}`);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const ExportToExcalidrawPlus: React.FC<{
|
||||||
|
elements: readonly NonDeletedExcalidrawElement[];
|
||||||
|
appState: AppState;
|
||||||
|
onError: (error: Error) => void;
|
||||||
|
}> = ({ elements, appState, onError }) => {
|
||||||
|
return (
|
||||||
|
<Card color="indigo">
|
||||||
|
<div className="Card-icon">{excalidrawPlusIcon}</div>
|
||||||
|
<h2>Excalidraw+</h2>
|
||||||
|
<div className="Card-details">
|
||||||
|
{t("exportDialog.excalidrawplus_description")}
|
||||||
|
</div>
|
||||||
|
<ToolButton
|
||||||
|
className="Card-button"
|
||||||
|
type="button"
|
||||||
|
title={t("exportDialog.excalidrawplus_button")}
|
||||||
|
aria-label={t("exportDialog.excalidrawplus_button")}
|
||||||
|
showAriaLabel={true}
|
||||||
|
onClick={async () => {
|
||||||
|
try {
|
||||||
|
await exportToExcalidrawPlus(elements, appState);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
onError(new Error(t("exportDialog.excalidrawplus_exportError")));
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Card>
|
||||||
|
);
|
||||||
|
};
|
||||||
File diff suppressed because one or more lines are too long
@@ -5,15 +5,19 @@ import { getSceneVersion } from "../../element";
|
|||||||
import Portal from "../collab/Portal";
|
import Portal from "../collab/Portal";
|
||||||
import { restoreElements } from "../../data/restore";
|
import { restoreElements } from "../../data/restore";
|
||||||
|
|
||||||
|
// private
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
let firebasePromise: Promise<
|
let firebasePromise: Promise<
|
||||||
typeof import("firebase/app").default
|
typeof import("firebase/app").default
|
||||||
> | null = null;
|
> | null = null;
|
||||||
|
let firestorePromise: Promise<any> | null = null;
|
||||||
|
let firebseStoragePromise: Promise<any> | null = null;
|
||||||
|
|
||||||
const loadFirebase = async () => {
|
const _loadFirebase = async () => {
|
||||||
const firebase = (
|
const firebase = (
|
||||||
await import(/* webpackChunkName: "firebase" */ "firebase/app")
|
await import(/* webpackChunkName: "firebase" */ "firebase/app")
|
||||||
).default;
|
).default;
|
||||||
await import(/* webpackChunkName: "firestore" */ "firebase/firestore");
|
|
||||||
|
|
||||||
const firebaseConfig = JSON.parse(process.env.REACT_APP_FIREBASE_CONFIG);
|
const firebaseConfig = JSON.parse(process.env.REACT_APP_FIREBASE_CONFIG);
|
||||||
firebase.initializeApp(firebaseConfig);
|
firebase.initializeApp(firebaseConfig);
|
||||||
@@ -21,13 +25,37 @@ const loadFirebase = async () => {
|
|||||||
return firebase;
|
return firebase;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getFirebase = async (): Promise<
|
const _getFirebase = async (): Promise<
|
||||||
typeof import("firebase/app").default
|
typeof import("firebase/app").default
|
||||||
> => {
|
> => {
|
||||||
if (!firebasePromise) {
|
if (!firebasePromise) {
|
||||||
firebasePromise = loadFirebase();
|
firebasePromise = _loadFirebase();
|
||||||
}
|
}
|
||||||
return await firebasePromise!;
|
return firebasePromise;
|
||||||
|
};
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const loadFirestore = async () => {
|
||||||
|
const firebase = await _getFirebase();
|
||||||
|
if (!firestorePromise) {
|
||||||
|
firestorePromise = import(
|
||||||
|
/* webpackChunkName: "firestore" */ "firebase/firestore"
|
||||||
|
);
|
||||||
|
await firestorePromise;
|
||||||
|
}
|
||||||
|
return firebase;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const loadFirebaseStorage = async () => {
|
||||||
|
const firebase = await _getFirebase();
|
||||||
|
if (!firebseStoragePromise) {
|
||||||
|
firebseStoragePromise = import(
|
||||||
|
/* webpackChunkName: "storage" */ "firebase/storage"
|
||||||
|
);
|
||||||
|
await firebseStoragePromise;
|
||||||
|
}
|
||||||
|
return firebase;
|
||||||
};
|
};
|
||||||
|
|
||||||
interface FirebaseStoredScene {
|
interface FirebaseStoredScene {
|
||||||
@@ -108,7 +136,7 @@ export const saveToFirebase = async (
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const firebase = await getFirebase();
|
const firebase = await loadFirestore();
|
||||||
const sceneVersion = getSceneVersion(elements);
|
const sceneVersion = getSceneVersion(elements);
|
||||||
const { ciphertext, iv } = await encryptElements(roomKey, elements);
|
const { ciphertext, iv } = await encryptElements(roomKey, elements);
|
||||||
|
|
||||||
@@ -150,7 +178,7 @@ export const loadFromFirebase = async (
|
|||||||
roomKey: string,
|
roomKey: string,
|
||||||
socket: SocketIOClient.Socket | null,
|
socket: SocketIOClient.Socket | null,
|
||||||
): Promise<readonly ExcalidrawElement[] | null> => {
|
): Promise<readonly ExcalidrawElement[] | null> => {
|
||||||
const firebase = await getFirebase();
|
const firebase = await loadFirestore();
|
||||||
const db = firebase.firestore();
|
const db = firebase.firestore();
|
||||||
|
|
||||||
const docRef = db.collection("scenes").doc(roomId);
|
const docRef = db.collection("scenes").doc(roomId);
|
||||||
@@ -168,5 +196,5 @@ export const loadFromFirebase = async (
|
|||||||
firebaseSceneVersionCache.set(socket, getSceneVersion(elements));
|
firebaseSceneVersionCache.set(socket, getSceneVersion(elements));
|
||||||
}
|
}
|
||||||
|
|
||||||
return restoreElements(elements);
|
return restoreElements(elements, null);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ const generateRandomID = async () => {
|
|||||||
return Array.from(arr, byteToHex).join("");
|
return Array.from(arr, byteToHex).join("");
|
||||||
};
|
};
|
||||||
|
|
||||||
const generateEncryptionKey = async () => {
|
export const generateEncryptionKey = async () => {
|
||||||
const key = await window.crypto.subtle.generateKey(
|
const key = await window.crypto.subtle.generateKey(
|
||||||
{
|
{
|
||||||
name: "AES-GCM",
|
name: "AES-GCM",
|
||||||
@@ -176,7 +176,7 @@ export const getImportedKey = (key: string, usage: KeyUsage) =>
|
|||||||
[usage],
|
[usage],
|
||||||
);
|
);
|
||||||
|
|
||||||
const decryptImported = async (
|
export const decryptImported = async (
|
||||||
iv: ArrayBuffer,
|
iv: ArrayBuffer,
|
||||||
encrypted: ArrayBuffer,
|
encrypted: ArrayBuffer,
|
||||||
privateKey: string,
|
privateKey: string,
|
||||||
@@ -257,9 +257,10 @@ export const loadScene = async (
|
|||||||
data = restore(
|
data = restore(
|
||||||
await importFromBackend(id, privateKey),
|
await importFromBackend(id, privateKey),
|
||||||
localDataState?.appState,
|
localDataState?.appState,
|
||||||
|
localDataState?.elements,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
data = restore(localDataState || null, null);
|
data = restore(localDataState || null, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import React, {
|
|||||||
} from "react";
|
} from "react";
|
||||||
import { trackEvent } from "../analytics";
|
import { trackEvent } from "../analytics";
|
||||||
import { getDefaultAppState } from "../appState";
|
import { getDefaultAppState } from "../appState";
|
||||||
import { ExcalidrawImperativeAPI } from "../components/App";
|
|
||||||
import { ErrorDialog } from "../components/ErrorDialog";
|
import { ErrorDialog } from "../components/ErrorDialog";
|
||||||
import { TopErrorBoundary } from "../components/TopErrorBoundary";
|
import { TopErrorBoundary } from "../components/TopErrorBoundary";
|
||||||
import {
|
import {
|
||||||
@@ -31,7 +30,7 @@ import Excalidraw, {
|
|||||||
defaultLang,
|
defaultLang,
|
||||||
languages,
|
languages,
|
||||||
} from "../packages/excalidraw/index";
|
} from "../packages/excalidraw/index";
|
||||||
import { AppState, LibraryItems } from "../types";
|
import { AppState, LibraryItems, ExcalidrawImperativeAPI } from "../types";
|
||||||
import {
|
import {
|
||||||
debounce,
|
debounce,
|
||||||
getVersion,
|
getVersion,
|
||||||
@@ -56,6 +55,7 @@ import { Tooltip } from "../components/Tooltip";
|
|||||||
import { shield } from "../components/icons";
|
import { shield } from "../components/icons";
|
||||||
|
|
||||||
import "./index.scss";
|
import "./index.scss";
|
||||||
|
import { ExportToExcalidrawPlus } from "./components/ExportToExcalidrawPlus";
|
||||||
|
|
||||||
const languageDetector = new LanguageDetector();
|
const languageDetector = new LanguageDetector();
|
||||||
languageDetector.init({
|
languageDetector.init({
|
||||||
@@ -141,7 +141,7 @@ const initializeScene = async (opts: {
|
|||||||
const url = externalUrlMatch[1];
|
const url = externalUrlMatch[1];
|
||||||
try {
|
try {
|
||||||
const request = await fetch(window.decodeURIComponent(url));
|
const request = await fetch(window.decodeURIComponent(url));
|
||||||
const data = await loadFromBlob(await request.blob(), null);
|
const data = await loadFromBlob(await request.blob(), null, null);
|
||||||
if (
|
if (
|
||||||
!scene.elements.length ||
|
!scene.elements.length ||
|
||||||
window.confirm(t("alerts.loadSceneOverridePrompt"))
|
window.confirm(t("alerts.loadSceneOverridePrompt"))
|
||||||
@@ -424,7 +424,28 @@ const ExcalidrawWrapper = () => {
|
|||||||
onCollabButtonClick={collabAPI?.onCollabButtonClick}
|
onCollabButtonClick={collabAPI?.onCollabButtonClick}
|
||||||
isCollaborating={collabAPI?.isCollaborating()}
|
isCollaborating={collabAPI?.isCollaborating()}
|
||||||
onPointerUpdate={collabAPI?.onPointerUpdate}
|
onPointerUpdate={collabAPI?.onPointerUpdate}
|
||||||
onExportToBackend={onExportToBackend}
|
UIOptions={{
|
||||||
|
canvasActions: {
|
||||||
|
export: {
|
||||||
|
onExportToBackend,
|
||||||
|
renderCustomUI: (elements, appState) => {
|
||||||
|
return (
|
||||||
|
<ExportToExcalidrawPlus
|
||||||
|
elements={elements}
|
||||||
|
appState={appState}
|
||||||
|
onError={(error) => {
|
||||||
|
excalidrawAPI?.updateScene({
|
||||||
|
appState: {
|
||||||
|
errorMessage: error.message,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}}
|
||||||
renderTopRightUI={renderTopRightUI}
|
renderTopRightUI={renderTopRightUI}
|
||||||
renderFooter={renderFooter}
|
renderFooter={renderFooter}
|
||||||
langCode={langCode}
|
langCode={langCode}
|
||||||
@@ -432,6 +453,7 @@ const ExcalidrawWrapper = () => {
|
|||||||
detectScroll={false}
|
detectScroll={false}
|
||||||
handleKeyboardGlobally={true}
|
handleKeyboardGlobally={true}
|
||||||
onLibraryChange={onLibraryChange}
|
onLibraryChange={onLibraryChange}
|
||||||
|
autoFocus={true}
|
||||||
/>
|
/>
|
||||||
{excalidrawAPI && <CollabWrapper excalidrawAPI={excalidrawAPI} />}
|
{excalidrawAPI && <CollabWrapper excalidrawAPI={excalidrawAPI} />}
|
||||||
{errorMessage && (
|
{errorMessage && (
|
||||||
|
|||||||
+2
-1
@@ -21,6 +21,7 @@ interface DehydratedHistoryEntry {
|
|||||||
const clearAppStatePropertiesForHistory = (appState: AppState) => {
|
const clearAppStatePropertiesForHistory = (appState: AppState) => {
|
||||||
return {
|
return {
|
||||||
selectedElementIds: appState.selectedElementIds,
|
selectedElementIds: appState.selectedElementIds,
|
||||||
|
selectedGroupIds: appState.selectedGroupIds,
|
||||||
viewBackgroundColor: appState.viewBackgroundColor,
|
viewBackgroundColor: appState.viewBackgroundColor,
|
||||||
editingLinearElement: appState.editingLinearElement,
|
editingLinearElement: appState.editingLinearElement,
|
||||||
editingGroupId: appState.editingGroupId,
|
editingGroupId: appState.editingGroupId,
|
||||||
@@ -169,7 +170,7 @@ class History {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (key === "selectedElementIds") {
|
if (key === "selectedElementIds" || key === "selectedGroupIds") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (nextEntry.appState[key] !== lastEntry.appState[key]) {
|
if (nextEntry.appState[key] !== lastEntry.appState[key]) {
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ const allLanguages: Language[] = [
|
|||||||
{ code: "zh-CN", label: "简体中文" },
|
{ code: "zh-CN", label: "简体中文" },
|
||||||
{ code: "zh-TW", label: "繁體中文" },
|
{ code: "zh-TW", label: "繁體中文" },
|
||||||
{ code: "lv-LV", label: "Latviešu" },
|
{ code: "lv-LV", label: "Latviešu" },
|
||||||
|
{ code: "cs-CZ", label: "Česky" },
|
||||||
|
{ code: "kk-KZ", label: "Қазақ тілі" },
|
||||||
].concat([defaultLang]);
|
].concat([defaultLang]);
|
||||||
|
|
||||||
export const languages: Language[] = allLanguages
|
export const languages: Language[] = allLanguages
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ const canvas = exportToCanvas(
|
|||||||
{
|
{
|
||||||
exportBackground: true,
|
exportBackground: true,
|
||||||
viewBackgroundColor: "#ffffff",
|
viewBackgroundColor: "#ffffff",
|
||||||
scale: 1,
|
|
||||||
},
|
},
|
||||||
createCanvas,
|
createCanvas,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ export const KEYS = {
|
|||||||
A: "a",
|
A: "a",
|
||||||
D: "d",
|
D: "d",
|
||||||
E: "e",
|
E: "e",
|
||||||
|
G: "g",
|
||||||
L: "l",
|
L: "l",
|
||||||
O: "o",
|
O: "o",
|
||||||
P: "p",
|
P: "p",
|
||||||
|
|||||||
+57
-33
@@ -20,6 +20,10 @@
|
|||||||
"background": "الخلفية",
|
"background": "الخلفية",
|
||||||
"fill": "التعبئة",
|
"fill": "التعبئة",
|
||||||
"strokeWidth": "حجم الحدود",
|
"strokeWidth": "حجم الحدود",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "نمط الحدود",
|
"strokeStyle": "نمط الحدود",
|
||||||
"strokeStyle_solid": "صلبة",
|
"strokeStyle_solid": "صلبة",
|
||||||
"strokeStyle_dashed": "متقطع",
|
"strokeStyle_dashed": "متقطع",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "حجم الخط",
|
"fontSize": "حجم الخط",
|
||||||
"fontFamily": "نوع الخط",
|
"fontFamily": "نوع الخط",
|
||||||
"onlySelected": "المحدد فقط",
|
"onlySelected": "المحدد فقط",
|
||||||
"withBackground": "مع الخلفية",
|
"withBackground": "الخلفية",
|
||||||
"exportEmbedScene": "تضمين المشهد في ملف التصدير",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "سيتم حفظ بيانات المشهد في ملف PNG/SVG المصدّر بحيث يمكن استعادة المشهد منه.\nسيزيد حجم الملف المصدر.",
|
"exportEmbedScene_details": "سيتم حفظ بيانات المشهد في ملف PNG/SVG المصدّر بحيث يمكن استعادة المشهد منه.\nسيزيد حجم الملف المصدر.",
|
||||||
"addWatermark": "إضافة \"مصنوعة بواسطة Excalidraw\"",
|
"addWatermark": "إضافة \"مصنوعة بواسطة Excalidraw\"",
|
||||||
"handDrawn": "رسم باليد",
|
"handDrawn": "رسم باليد",
|
||||||
@@ -61,7 +65,7 @@
|
|||||||
"architect": "معماري",
|
"architect": "معماري",
|
||||||
"artist": "رسام",
|
"artist": "رسام",
|
||||||
"cartoonist": "كرتوني",
|
"cartoonist": "كرتوني",
|
||||||
"fileTitle": "",
|
"fileTitle": "إسم الملف",
|
||||||
"colorPicker": "اختيار الألوان",
|
"colorPicker": "اختيار الألوان",
|
||||||
"canvasBackground": "خلفية اللوحة",
|
"canvasBackground": "خلفية اللوحة",
|
||||||
"drawingCanvas": "لوحة الرسم",
|
"drawingCanvas": "لوحة الرسم",
|
||||||
@@ -92,21 +96,26 @@
|
|||||||
"centerHorizontally": "توسيط أفقي",
|
"centerHorizontally": "توسيط أفقي",
|
||||||
"distributeHorizontally": "التوزيع الأفقي",
|
"distributeHorizontally": "التوزيع الأفقي",
|
||||||
"distributeVertically": "التوزيع عمودياً",
|
"distributeVertically": "التوزيع عمودياً",
|
||||||
"flipHorizontal": "",
|
"flipHorizontal": "قلب عامودي",
|
||||||
"flipVertical": "",
|
"flipVertical": "قلب أفقي",
|
||||||
"viewMode": "نمط العرض",
|
"viewMode": "نمط العرض",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "",
|
||||||
"share": "مشاركة"
|
"share": "مشاركة",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": "غير النمط"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "إعادة تعيين اللوحة",
|
"clearReset": "إعادة تعيين اللوحة",
|
||||||
|
"exportJSON": "صدر الملف",
|
||||||
|
"exportImage": "إحفظ كصورة",
|
||||||
"export": "تصدير",
|
"export": "تصدير",
|
||||||
"exportToPng": "تصدير بصيغة PNG",
|
"exportToPng": "تصدير بصيغة PNG",
|
||||||
"exportToSvg": "تصدير بصيغة SVG",
|
"exportToSvg": "تصدير بصيغة SVG",
|
||||||
"copyToClipboard": "نسخ إلى الحافظة",
|
"copyToClipboard": "نسخ إلى الحافظة",
|
||||||
"copyPngToClipboard": "نسخ الـ PNG إلى الحافظة",
|
"copyPngToClipboard": "نسخ الـ PNG إلى الحافظة",
|
||||||
"scale": "مقاس",
|
"scale": "مقاس",
|
||||||
"save": "حفظ",
|
"save": "احفظ للملف الحالي",
|
||||||
"saveAs": "حفظ كـ",
|
"saveAs": "حفظ كـ",
|
||||||
"load": "تحميل",
|
"load": "تحميل",
|
||||||
"getShareableLink": "احصل على رابط المشاركة",
|
"getShareableLink": "احصل على رابط المشاركة",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "تحديد",
|
"selection": "تحديد",
|
||||||
"freedraw": "الكتابة الحرة",
|
|
||||||
"rectangle": "مستطيل",
|
"rectangle": "مستطيل",
|
||||||
"diamond": "مضلع",
|
"diamond": "مضلع",
|
||||||
"ellipse": "دائرة",
|
"ellipse": "دائرة",
|
||||||
"arrow": "سهم",
|
"arrow": "سهم",
|
||||||
"line": "خط",
|
"line": "خط",
|
||||||
|
"freedraw": "",
|
||||||
"text": "نص",
|
"text": "نص",
|
||||||
"library": "مكتبة",
|
"library": "مكتبة",
|
||||||
"lock": "الحفاظ على أداة التحديد نشطة بعد الرسم"
|
"lock": "الحفاظ على أداة التحديد نشطة بعد الرسم"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "انقر لبدء نقاط متعددة، اسحب لخط واحد",
|
"linearElement": "انقر لبدء نقاط متعددة، اسحب لخط واحد",
|
||||||
"freeDraw": "انقر واسحب، افرج عند الانتهاء",
|
"freeDraw": "انقر واسحب، افرج عند الانتهاء",
|
||||||
"text": "نصيحة: يمكنك أيضًا إضافة نص بالنقر المزدوج في أي مكان بأداة الاختيار",
|
"text": "نصيحة: يمكنك أيضًا إضافة نص بالنقر المزدوج في أي مكان بأداة الاختيار",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "انقر فوق النقطة الأخيرة أو اضغط على Esc أو Enter للإنهاء",
|
"linearElementMulti": "انقر فوق النقطة الأخيرة أو اضغط على Esc أو Enter للإنهاء",
|
||||||
"lockAngle": "يمكنك تقييد الزاوية بالضغط على SHIFT",
|
"lockAngle": "يمكنك تقييد الزاوية بالضغط على SHIFT",
|
||||||
"resize": "يمكنك تقييد النسب بالضغط على SHIFT أثناء تغيير الحجم،\nاضغط على ALT لتغيير الحجم من المركز",
|
"resize": "يمكنك تقييد النسب بالضغط على SHIFT أثناء تغيير الحجم،\nاضغط على ALT لتغيير الحجم من المركز",
|
||||||
@@ -210,30 +221,43 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "خطأ"
|
"title": "خطأ"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "حفظ الملف للجهاز",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "إحفظ لملف",
|
||||||
|
"link_title": "رابط قابل للمشاركة",
|
||||||
|
"link_details": "صدر الملف للمشاهدة فقط.",
|
||||||
|
"link_button": "التصدير كرابط",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "",
|
"blog": "اقرأ مدونتنا",
|
||||||
"click": "",
|
"click": "انقر",
|
||||||
"curvedArrow": "",
|
"curvedArrow": "سهم مائل",
|
||||||
"curvedLine": "",
|
"curvedLine": "خط مائل",
|
||||||
"documentation": "",
|
"documentation": "دليل الاستخدام",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "اسحب",
|
"drag": "اسحب",
|
||||||
"editor": "المحرر",
|
"editor": "المحرر",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "عثرت على مشكلة؟ إرسال",
|
"github": "عثرت على مشكلة؟ إرسال",
|
||||||
"howto": "",
|
"howto": "اتبع التعليمات",
|
||||||
"or": "",
|
"or": "أو",
|
||||||
"preventBinding": "",
|
"preventBinding": "منع ارتبط السهم",
|
||||||
"shapes": "",
|
"shapes": "أشكال",
|
||||||
"shortcuts": "",
|
"shortcuts": "اختصارات لوحة المفاتيح",
|
||||||
"textFinish": "",
|
"textFinish": "",
|
||||||
"textNewLine": "",
|
"textNewLine": "",
|
||||||
"title": "",
|
"title": "المساعدة",
|
||||||
"view": "",
|
"view": "عرض",
|
||||||
"zoomToFit": "",
|
"zoomToFit": "تكبير للملائمة",
|
||||||
"zoomToSelection": ""
|
"zoomToSelection": "تكبير للعنصر المحدد"
|
||||||
},
|
},
|
||||||
"encrypted": {
|
"encrypted": {
|
||||||
"tooltip": "رسوماتك مشفرة من النهاية إلى النهاية حتى أن خوادم Excalidraw لن تراها أبدا.",
|
"tooltip": "رسوماتك مشفرة من النهاية إلى النهاية حتى أن خوادم Excalidraw لن تراها أبدا.",
|
||||||
"link": ""
|
"link": "مشاركة المدونة في التشفير من النهاية إلى النهاية في Excalidraw"
|
||||||
},
|
},
|
||||||
"stats": {
|
"stats": {
|
||||||
"angle": "الزاوية",
|
"angle": "الزاوية",
|
||||||
@@ -245,18 +269,18 @@
|
|||||||
"storage": "التخزين",
|
"storage": "التخزين",
|
||||||
"title": "إحصائيات للمهووسين",
|
"title": "إحصائيات للمهووسين",
|
||||||
"total": "المجموع",
|
"total": "المجموع",
|
||||||
"version": "",
|
"version": "الإصدار",
|
||||||
"versionCopy": "",
|
"versionCopy": "انقر للنسخ",
|
||||||
"versionNotAvailable": "",
|
"versionNotAvailable": "الإصدار غير متوفر",
|
||||||
"width": "العرض"
|
"width": "العرض"
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"copyStyles": "",
|
"copyStyles": "نسخ النمط.",
|
||||||
"copyToClipboard": "",
|
"copyToClipboard": "نسخ إلى الحافظة.",
|
||||||
"copyToClipboardAsPng": "",
|
"copyToClipboardAsPng": "تم نسخ {{exportSelection}} إلى الحافظة بصيغةPNG\n({{exportColorScheme}})",
|
||||||
"fileSaved": "",
|
"fileSaved": "تم حفظ الملف.",
|
||||||
"fileSavedToFilename": "",
|
"fileSavedToFilename": "حفظ باسم {filename}",
|
||||||
"canvas": "",
|
"canvas": "لوحة الرسم",
|
||||||
"selection": ""
|
"selection": "العنصر المحدد"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Фон",
|
"background": "Фон",
|
||||||
"fill": "Наситеност",
|
"fill": "Наситеност",
|
||||||
"strokeWidth": "Ширина на щриха",
|
"strokeWidth": "Ширина на щриха",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "Стил на линия",
|
"strokeStyle": "Стил на линия",
|
||||||
"strokeStyle_solid": "Плътен",
|
"strokeStyle_solid": "Плътен",
|
||||||
"strokeStyle_dashed": "Пунктир",
|
"strokeStyle_dashed": "Пунктир",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Размер на шрифта",
|
"fontSize": "Размер на шрифта",
|
||||||
"fontFamily": "Семейство шрифтове",
|
"fontFamily": "Семейство шрифтове",
|
||||||
"onlySelected": "Само избраното",
|
"onlySelected": "Само избраното",
|
||||||
"withBackground": "С фон",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "Вгради сцената във файл",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "Данните от сцената ще бъдат екпортирани в PNG/SVG файл, за да може сцената да бъде възстановена от него.\nТова ще увеличи размера на файла.",
|
"exportEmbedScene_details": "Данните от сцената ще бъдат екпортирани в PNG/SVG файл, за да може сцената да бъде възстановена от него.\nТова ще увеличи размера на файла.",
|
||||||
"addWatermark": "Добави \"Направено с Excalidraw\"",
|
"addWatermark": "Добави \"Направено с Excalidraw\"",
|
||||||
"handDrawn": "Нарисувано на ръка",
|
"handDrawn": "Нарисувано на ръка",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "",
|
"flipVertical": "",
|
||||||
"viewMode": "Изглед",
|
"viewMode": "Изглед",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "",
|
||||||
"share": ""
|
"share": "",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Нулиране на платно",
|
"clearReset": "Нулиране на платно",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "Експортиране",
|
"export": "Експортиране",
|
||||||
"exportToPng": "Изнасяне в PNG",
|
"exportToPng": "Изнасяне в PNG",
|
||||||
"exportToSvg": "Изнасяне в SVG",
|
"exportToSvg": "Изнасяне в SVG",
|
||||||
"copyToClipboard": "Копиране в клипборда",
|
"copyToClipboard": "Копиране в клипборда",
|
||||||
"copyPngToClipboard": "Копирай PNG в клипборда",
|
"copyPngToClipboard": "Копирай PNG в клипборда",
|
||||||
"scale": "Мащаб",
|
"scale": "Мащаб",
|
||||||
"save": "Запази",
|
"save": "",
|
||||||
"saveAs": "Запиши като",
|
"saveAs": "Запиши като",
|
||||||
"load": "Зареждане",
|
"load": "Зареждане",
|
||||||
"getShareableLink": "Получаване на връзка за споделяне",
|
"getShareableLink": "Получаване на връзка за споделяне",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Селекция",
|
"selection": "Селекция",
|
||||||
"freedraw": "Рисуване",
|
|
||||||
"rectangle": "Правоъгълник",
|
"rectangle": "Правоъгълник",
|
||||||
"diamond": "Диамант",
|
"diamond": "Диамант",
|
||||||
"ellipse": "Елипс",
|
"ellipse": "Елипс",
|
||||||
"arrow": "Стрелка",
|
"arrow": "Стрелка",
|
||||||
"line": "Линия",
|
"line": "Линия",
|
||||||
|
"freedraw": "",
|
||||||
"text": "Текст",
|
"text": "Текст",
|
||||||
"library": "Библиотека",
|
"library": "Библиотека",
|
||||||
"lock": "Поддържайте избрания инструмент активен след рисуване"
|
"lock": "Поддържайте избрания инструмент активен след рисуване"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Кликнете, за да стартирате няколко точки, плъзнете за една линия",
|
"linearElement": "Кликнете, за да стартирате няколко точки, плъзнете за една линия",
|
||||||
"freeDraw": "Натиснете и влачете, пуснете като сте готови",
|
"freeDraw": "Натиснете и влачете, пуснете като сте готови",
|
||||||
"text": "Подсказка: Можете също да добавите текст като натиснете някъде два път с инструмента за селекция",
|
"text": "Подсказка: Можете също да добавите текст като натиснете някъде два път с инструмента за селекция",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "Кликнете върху последната точка или натиснете Escape или Enter, за да завършите",
|
"linearElementMulti": "Кликнете върху последната точка или натиснете Escape или Enter, за да завършите",
|
||||||
"lockAngle": "Можете да ограничите ъгъла, като задържите SHIFT",
|
"lockAngle": "Можете да ограничите ъгъла, като задържите SHIFT",
|
||||||
"resize": "Може да ограничите при преоразмеряване като задържите SHIFT,\nзадръжте ALT за преоразмерите през центъра",
|
"resize": "Може да ограничите при преоразмеряване като задържите SHIFT,\nзадръжте ALT за преоразмерите през центъра",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Грешка"
|
"title": "Грешка"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Прочетете нашия блог",
|
"blog": "Прочетете нашия блог",
|
||||||
"click": "клик",
|
"click": "клик",
|
||||||
"curvedArrow": "Извита стрелка",
|
"curvedArrow": "Извита стрелка",
|
||||||
"curvedLine": "Извита линия",
|
"curvedLine": "Извита линия",
|
||||||
"documentation": "Документация",
|
"documentation": "Документация",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "плъзнете",
|
"drag": "плъзнете",
|
||||||
"editor": "Редактор",
|
"editor": "Редактор",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "Намерихте проблем? Изпратете",
|
"github": "Намерихте проблем? Изпратете",
|
||||||
"howto": "Следвайте нашите ръководства",
|
"howto": "Следвайте нашите ръководства",
|
||||||
"or": "или",
|
"or": "или",
|
||||||
"preventBinding": "Спри прилепяне на стрелките",
|
"preventBinding": "Спри прилепяне на стрелките",
|
||||||
"shapes": "Фигури",
|
"shapes": "Фигури",
|
||||||
"shortcuts": "Клавиши за бърз достъп",
|
"shortcuts": "Клавиши за бърз достъп",
|
||||||
"textFinish": "Завършете редактирането (текст)",
|
"textFinish": "",
|
||||||
"textNewLine": "Добавяне на нов ред (текст)",
|
"textNewLine": "",
|
||||||
"title": "Помощ",
|
"title": "Помощ",
|
||||||
"view": "Преглед",
|
"view": "Преглед",
|
||||||
"zoomToFit": "Приближи докато се виждат всички елементи",
|
"zoomToFit": "Приближи докато се виждат всички елементи",
|
||||||
|
|||||||
+110
-86
@@ -1,25 +1,29 @@
|
|||||||
{
|
{
|
||||||
"labels": {
|
"labels": {
|
||||||
"paste": "Enganxar",
|
"paste": "Enganxa",
|
||||||
"pasteCharts": "Enganxar diagrames",
|
"pasteCharts": "Enganxa els diagrames",
|
||||||
"selectAll": "Seleccionar tot",
|
"selectAll": "Selecciona-ho tot",
|
||||||
"multiSelect": "Afegir element a la selecció",
|
"multiSelect": "Afegeix un element a la selecció",
|
||||||
"moveCanvas": "Moure el llenç",
|
"moveCanvas": "Mou el llenç",
|
||||||
"cut": "Tallar",
|
"cut": "Retalla",
|
||||||
"copy": "Copiar",
|
"copy": "Copia",
|
||||||
"copyAsPng": "Copiar al porta-retalls com a PNG",
|
"copyAsPng": "Copia al porta-retalls com a PNG",
|
||||||
"copyAsSvg": "Copiar al porta-retalls com a SVG",
|
"copyAsSvg": "Copia al porta-retalls com a SVG",
|
||||||
"bringForward": "Portar endavant",
|
"bringForward": "Porta endavant",
|
||||||
"sendToBack": "Enviar endarrere",
|
"sendToBack": "Envia enrere",
|
||||||
"bringToFront": "Portar al capdavant",
|
"bringToFront": "Porta al davant",
|
||||||
"sendBackward": "Enviar al fons",
|
"sendBackward": "Envia al fons",
|
||||||
"delete": "Eliminar",
|
"delete": "Elimina",
|
||||||
"copyStyles": "Copiar estils",
|
"copyStyles": "Copia els estils",
|
||||||
"pasteStyles": "Enganxar estils",
|
"pasteStyles": "Enganxa els estils",
|
||||||
"stroke": "Color del traç",
|
"stroke": "Color del traç",
|
||||||
"background": "Color del fons",
|
"background": "Color del fons",
|
||||||
"fill": "Estil del fons",
|
"fill": "Estil del fons",
|
||||||
"strokeWidth": "Amplada del traç",
|
"strokeWidth": "Amplada del traç",
|
||||||
|
"strokeShape": "Estil del traç",
|
||||||
|
"strokeShape_gel": "Bolígraf de gel",
|
||||||
|
"strokeShape_fountain": "Bolígraf de font",
|
||||||
|
"strokeShape_brush": "Bolígraf de raspall",
|
||||||
"strokeStyle": "Estil del traç",
|
"strokeStyle": "Estil del traç",
|
||||||
"strokeStyle_solid": "Sòlid",
|
"strokeStyle_solid": "Sòlid",
|
||||||
"strokeStyle_dashed": "Guions",
|
"strokeStyle_dashed": "Guions",
|
||||||
@@ -38,10 +42,10 @@
|
|||||||
"fontSize": "Mida de lletra",
|
"fontSize": "Mida de lletra",
|
||||||
"fontFamily": "Tipus de lletra",
|
"fontFamily": "Tipus de lletra",
|
||||||
"onlySelected": "Només seleccionats",
|
"onlySelected": "Només seleccionats",
|
||||||
"withBackground": "Amb fons",
|
"withBackground": "Fons",
|
||||||
"exportEmbedScene": "Incrustar escena al fitxer exportat",
|
"exportEmbedScene": "Insereix l'escena",
|
||||||
"exportEmbedScene_details": "Les dades de l’escena es desaran al fitxer PNG/SVG de manera que es pugui restaurar l’escena.\nAugmentarà la mida del fitxer exportat.",
|
"exportEmbedScene_details": "Les dades de l’escena es desaran al fitxer PNG/SVG de manera que es pugui restaurar l’escena.\nAugmentarà la mida del fitxer exportat.",
|
||||||
"addWatermark": "Afegir \"Fet amb Excalidraw\"",
|
"addWatermark": "Afegeix-hi «Fet amb Excalidraw»",
|
||||||
"handDrawn": "Dibuixat a mà",
|
"handDrawn": "Dibuixat a mà",
|
||||||
"normal": "Normal",
|
"normal": "Normal",
|
||||||
"code": "Codi",
|
"code": "Codi",
|
||||||
@@ -69,70 +73,75 @@
|
|||||||
"actions": "Accions",
|
"actions": "Accions",
|
||||||
"language": "Llengua",
|
"language": "Llengua",
|
||||||
"liveCollaboration": "Col·laboració en directe",
|
"liveCollaboration": "Col·laboració en directe",
|
||||||
"duplicateSelection": "Duplicar",
|
"duplicateSelection": "Duplica",
|
||||||
"untitled": "Sense títol",
|
"untitled": "Sense títol",
|
||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
"yourName": "El teu nom",
|
"yourName": "El vostre nom",
|
||||||
"madeWithExcalidraw": "Fet amb Excalidraw",
|
"madeWithExcalidraw": "Fet amb Excalidraw",
|
||||||
"group": "Agrupar la selecció",
|
"group": "Agrupa la selecció",
|
||||||
"ungroup": "Desagrupar la selecció",
|
"ungroup": "Desagrupa la selecció",
|
||||||
"collaborators": "Col·laboradors",
|
"collaborators": "Col·laboradors",
|
||||||
"showGrid": "Mostra la graella",
|
"showGrid": "Mostra la graella",
|
||||||
"addToLibrary": "Afegir a la biblioteca",
|
"addToLibrary": "Afegir a la biblioteca",
|
||||||
"removeFromLibrary": "Eliminar de la biblioteca",
|
"removeFromLibrary": "Eliminar de la biblioteca",
|
||||||
"libraryLoadingMessage": "Carregant la biblioteca…",
|
"libraryLoadingMessage": "S'està carregant la biblioteca…",
|
||||||
"libraries": "Explorar biblioteques",
|
"libraries": "Explora les biblioteques",
|
||||||
"loadingScene": "Carregant escena…",
|
"loadingScene": "S'està carregant l'escena…",
|
||||||
"align": "Alinear",
|
"align": "Alinea",
|
||||||
"alignTop": "Alinear a dalt",
|
"alignTop": "Alinea a la part superior",
|
||||||
"alignBottom": "Alinear a baix",
|
"alignBottom": "Alinea a la part inferior",
|
||||||
"alignLeft": "Alinear a l’esquerra",
|
"alignLeft": "Alinea a l’esquerra",
|
||||||
"alignRight": "Alinear a la dreta",
|
"alignRight": "Alinea a la dreta",
|
||||||
"centerVertically": "Centrar verticalment",
|
"centerVertically": "Centra verticalment",
|
||||||
"centerHorizontally": "Centrar horitzontalment",
|
"centerHorizontally": "Centra horitzontalment",
|
||||||
"distributeHorizontally": "Distribuir horitzontalment",
|
"distributeHorizontally": "Distribueix horitzontalment",
|
||||||
"distributeVertically": "Distribuir verticalment",
|
"distributeVertically": "Distribueix verticalment",
|
||||||
"flipHorizontal": "Capgira horitzontalment",
|
"flipHorizontal": "Capgira horitzontalment",
|
||||||
"flipVertical": "Capgira verticalment",
|
"flipVertical": "Capgira verticalment",
|
||||||
"viewMode": "Mode de visualització",
|
"viewMode": "Mode de visualització",
|
||||||
"toggleExportColorScheme": "Canvia l'esquema de colors de l'exportació",
|
"toggleExportColorScheme": "Canvia l'esquema de colors de l'exportació",
|
||||||
"share": "Compartir"
|
"share": "Comparteix",
|
||||||
|
"showStroke": "Mostra el selector de color del traç",
|
||||||
|
"showBackground": "Mostra el selector de color de fons",
|
||||||
|
"toggleTheme": "Activa o desactiva el tema"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Netejar el llenç",
|
"clearReset": "Neteja el llenç",
|
||||||
"export": "Exportar",
|
"exportJSON": "Exporta a un fitxer",
|
||||||
"exportToPng": "Exportar a PNG",
|
"exportImage": "Desa com a imatge",
|
||||||
"exportToSvg": "Exportar a SNG",
|
"export": "Exporta",
|
||||||
"copyToClipboard": "Copiar al porta-retalls",
|
"exportToPng": "Exporta a PNG",
|
||||||
"copyPngToClipboard": "Copiar PNG al porta-retalls",
|
"exportToSvg": "Exporta a SNG",
|
||||||
|
"copyToClipboard": "Copia al porta-retalls",
|
||||||
|
"copyPngToClipboard": "Copia el PNG al porta-retalls",
|
||||||
"scale": "Escala",
|
"scale": "Escala",
|
||||||
"save": "Desar",
|
"save": "Desa al fitxer actual",
|
||||||
"saveAs": "Desar com",
|
"saveAs": "Anomena i desa",
|
||||||
"load": "Carregar",
|
"load": "Carrega",
|
||||||
"getShareableLink": "Obtenir enllaç per compartir",
|
"getShareableLink": "Obté l'enllaç per a compartir",
|
||||||
"close": "Tancar",
|
"close": "Tanca",
|
||||||
"selectLanguage": "Triar idioma",
|
"selectLanguage": "Trieu la llengua",
|
||||||
"scrollBackToContent": "Tornar al contingut",
|
"scrollBackToContent": "Torna al contingut",
|
||||||
"zoomIn": "Ampliar",
|
"zoomIn": "Apropa't",
|
||||||
"zoomOut": "Reduir",
|
"zoomOut": "Allunya't",
|
||||||
"resetZoom": "Restablir zoom",
|
"resetZoom": "Restableix el zoom",
|
||||||
"menu": "Menú",
|
"menu": "Menú",
|
||||||
"done": "Fet",
|
"done": "Fet",
|
||||||
"edit": "Editar",
|
"edit": "Edita",
|
||||||
"undo": "Desfer",
|
"undo": "Desfés",
|
||||||
"redo": "Refer",
|
"redo": "Refés",
|
||||||
"resetLibrary": "Restablir biblioteca",
|
"resetLibrary": "Restableix la biblioteca",
|
||||||
"createNewRoom": "Crear sala nova",
|
"createNewRoom": "Crea una sala nova",
|
||||||
"fullScreen": "Pantalla completa",
|
"fullScreen": "Pantalla completa",
|
||||||
"darkMode": "Mode fosc",
|
"darkMode": "Mode fosc",
|
||||||
"lightMode": "Mode clar",
|
"lightMode": "Mode clar",
|
||||||
"zenMode": "Mode Zen",
|
"zenMode": "Mode zen",
|
||||||
"exitZenMode": "Sortir de modo zen"
|
"exitZenMode": "Surt de mode zen"
|
||||||
},
|
},
|
||||||
"alerts": {
|
"alerts": {
|
||||||
"clearReset": "Tot el llenç s'esborrarà. Estàs segur?",
|
"clearReset": "S'esborrarà tot el llenç. N'esteu segur?",
|
||||||
"couldNotCreateShareableLink": "No s'ha pogut crear un enllaç per compartir.",
|
"couldNotCreateShareableLink": "No s'ha pogut crear un enllaç per a compartir.",
|
||||||
"couldNotCreateShareableLinkTooBig": "No s’ha pogut crear un enllaç per compartir: l’escena és massa gran",
|
"couldNotCreateShareableLinkTooBig": "No s’ha pogut crear un enllaç per a compartir: l’escena és massa gran",
|
||||||
"couldNotLoadInvalidFile": "No s'ha pogut carregar un fitxer no vàlid",
|
"couldNotLoadInvalidFile": "No s'ha pogut carregar un fitxer no vàlid",
|
||||||
"importBackendFailed": "Importació fallida.",
|
"importBackendFailed": "Importació fallida.",
|
||||||
"cannotExportEmptyCanvas": "No es pot exportar un llenç buit.",
|
"cannotExportEmptyCanvas": "No es pot exportar un llenç buit.",
|
||||||
@@ -142,22 +151,22 @@
|
|||||||
"loadSceneOverridePrompt": "Si carregas aquest dibuix extern, substituirá el que tens. Vols continuar?",
|
"loadSceneOverridePrompt": "Si carregas aquest dibuix extern, substituirá el que tens. Vols continuar?",
|
||||||
"collabStopOverridePrompt": "Aturar la sessió provocarà la sobreescriptura del dibuix previ, que hi ha desat en l'emmagatzematge local. N'esteu segur?\n\n(Si voleu conservar el dibuix local, tanqueu la pentanya del navegador en comptes d'aturar la sessió).",
|
"collabStopOverridePrompt": "Aturar la sessió provocarà la sobreescriptura del dibuix previ, que hi ha desat en l'emmagatzematge local. N'esteu segur?\n\n(Si voleu conservar el dibuix local, tanqueu la pentanya del navegador en comptes d'aturar la sessió).",
|
||||||
"errorLoadingLibrary": "S'ha produït un error en carregar la biblioteca de tercers.",
|
"errorLoadingLibrary": "S'ha produït un error en carregar la biblioteca de tercers.",
|
||||||
"errorAddingToLibrary": "",
|
"errorAddingToLibrary": "No s'ha pogut afegir l'element a la biblioteca",
|
||||||
"errorRemovingFromLibrary": "",
|
"errorRemovingFromLibrary": "No s'ha pogut eliminar l'element de la biblioteca",
|
||||||
"confirmAddLibrary": "Això afegirà {{numShapes}} forma(es) a la vostra biblioteca. Estàs segur?",
|
"confirmAddLibrary": "Això afegirà {{numShapes}} forma(es) a la vostra biblioteca. Estàs segur?",
|
||||||
"imageDoesNotContainScene": "En aquest moment no s’admet la importació d’imatges.\n\nVolies importar una escena? Sembla que aquesta imatge no conté cap dada d’escena. Ho has activat durant l'exportació?",
|
"imageDoesNotContainScene": "En aquest moment no s’admet la importació d’imatges.\n\nVolies importar una escena? Sembla que aquesta imatge no conté cap dada d’escena. Ho has activat durant l'exportació?",
|
||||||
"cannotRestoreFromImage": "L’escena no s’ha pogut restaurar des d’aquest fitxer d’imatge",
|
"cannotRestoreFromImage": "L’escena no s’ha pogut restaurar des d’aquest fitxer d’imatge",
|
||||||
"invalidSceneUrl": "No s'ha pogut importar l'escena des de l'adreça URL proporcionada. Està malformada o no conté dades Excalidraw JSON vàlides.",
|
"invalidSceneUrl": "No s'ha pogut importar l'escena des de l'adreça URL proporcionada. Està malformada o no conté dades Excalidraw JSON vàlides.",
|
||||||
"resetLibrary": "Tot el llenç s'esborrarà. Estàs segur?"
|
"resetLibrary": "Això buidarà la biblioteca. N'esteu segur?"
|
||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Selecció",
|
"selection": "Selecció",
|
||||||
"freedraw": "Dibuix lliure",
|
|
||||||
"rectangle": "Rectangle",
|
"rectangle": "Rectangle",
|
||||||
"diamond": "Rombe",
|
"diamond": "Rombe",
|
||||||
"ellipse": "El·lipse",
|
"ellipse": "El·lipse",
|
||||||
"arrow": "Fletxa",
|
"arrow": "Fletxa",
|
||||||
"line": "Línia",
|
"line": "Línia",
|
||||||
|
"freedraw": "Dibuix",
|
||||||
"text": "Text",
|
"text": "Text",
|
||||||
"library": "Biblioteca",
|
"library": "Biblioteca",
|
||||||
"lock": "Mantenir activa l'eina seleccionada desprès de dibuixar"
|
"lock": "Mantenir activa l'eina seleccionada desprès de dibuixar"
|
||||||
@@ -168,64 +177,79 @@
|
|||||||
"shapes": "Formes"
|
"shapes": "Formes"
|
||||||
},
|
},
|
||||||
"hints": {
|
"hints": {
|
||||||
"linearElement": "Fer clic per dibuixar múltiples punts; arrossegar per una sola línea",
|
"linearElement": "Feu clic per a dibuixar múltiples punts; arrossegueu per a una sola línia",
|
||||||
"freeDraw": "Fer clic i arrosegar, deixar anar al punt final",
|
"freeDraw": "Feu clic i arrossegueu, deixeu anar per a finalitzar",
|
||||||
"text": "Consell: també pots afegir text fent doble clic a qualsevol lloc amb l'eina de selecció",
|
"text": "Consell: també podeu afegir text fent doble clic en qualsevol lloc amb l'eina de selecció",
|
||||||
"linearElementMulti": "Fer clic a l'ultim punt, o polsar Escape o Enter per acabar",
|
"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",
|
||||||
"lockAngle": "Per restringir els angles, mantenir premut el majúscul (SHIFT)",
|
"lockAngle": "Per restringir els angles, mantenir premut el majúscul (SHIFT)",
|
||||||
"resize": "Per restringir les proporcions mentres es canvia la mida, mantenir premut el majúscul (SHIFT); per canviar la mida des del centre, mantenir premut ALT",
|
"resize": "Per restringir les proporcions mentres es canvia la mida, mantenir premut el majúscul (SHIFT); per canviar la mida des del centre, mantenir premut ALT",
|
||||||
"rotate": "Per restringir els angles mentre gira, mantenir premut el majúscul (SHIFT)",
|
"rotate": "Per restringir els angles mentre gira, mantenir premut el majúscul (SHIFT)",
|
||||||
"lineEditor_info": "Fes doble clic o premi Enter per editar punts",
|
"lineEditor_info": "Fes doble clic o premi Enter per editar punts",
|
||||||
"lineEditor_pointSelected": "Premi Suprimir per eliminar el punt, CtrlOrCmd+D per duplicar-lo, o arrosega'l per moure'l",
|
"lineEditor_pointSelected": "Premeu Suprimir per a eliminar el punt, CtrlOrCmd+D per a duplicar-lo, o arrossegueu-lo per a moure'l",
|
||||||
"lineEditor_nothingSelected": "Selecciona un punt per moure o eliminar, o manté premut Alt i fes clic per afegir punts nous"
|
"lineEditor_nothingSelected": "Selecciona un punt per moure o eliminar, o manté premut Alt i fes clic per afegir punts nous"
|
||||||
},
|
},
|
||||||
"canvasError": {
|
"canvasError": {
|
||||||
"cannotShowPreview": "No es pot mostrar la vista prèvia",
|
"cannotShowPreview": "No es pot mostrar la previsualització",
|
||||||
"canvasTooBig": "Pot ser que el llenç sigui massa gran.",
|
"canvasTooBig": "Pot ser que el llenç sigui massa gran.",
|
||||||
"canvasTooBigTip": "Consell: prova d’acostar una mica els elements més allunyats."
|
"canvasTooBigTip": "Consell: proveu d’acostar una mica els elements més allunyats."
|
||||||
},
|
},
|
||||||
"errorSplash": {
|
"errorSplash": {
|
||||||
"headingMain_pre": "S'ha produït un error. Intentar ",
|
"headingMain_pre": "S'ha produït un error. Proveu ",
|
||||||
"headingMain_button": "recarregar la pàgina.",
|
"headingMain_button": "recarregar la pàgina.",
|
||||||
"clearCanvasMessage": "Si la recarrega no funciona, intentar ",
|
"clearCanvasMessage": "Si la recàrrega no funciona, proveu ",
|
||||||
"clearCanvasMessage_button": "esborrar el llenç.",
|
"clearCanvasMessage_button": "esborrar el llenç.",
|
||||||
"clearCanvasCaveat": " Això resultarà en pèrdua de feina ",
|
"clearCanvasCaveat": " Això resultarà en la pèrdua de feina ",
|
||||||
"trackedToSentry_pre": "L'error amb l'identificador ",
|
"trackedToSentry_pre": "L'error amb l'identificador ",
|
||||||
"trackedToSentry_post": " s'ha rastrejat en el nostre sistema.",
|
"trackedToSentry_post": " s'ha rastrejat en el nostre sistema.",
|
||||||
"openIssueMessage_pre": "Estàvem molt amb compte de no incloure la teva informació de l'escena en l'error. Si la teva escena no és privada, pots fer el seguiment al nostre ",
|
"openIssueMessage_pre": "Anàvem amb molta cura de no incloure la informació de la vostra escena en l'error. Si l'escena no és privada, podeu fer-ne el seguiment al nostre ",
|
||||||
"openIssueMessage_button": "rastrejador d'errors.",
|
"openIssueMessage_button": "rastrejador d'errors.",
|
||||||
"openIssueMessage_post": " Si us plau incloure la informació a continuació copiant i enganxant a GitHub Issues.",
|
"openIssueMessage_post": " Incloeu la informació a continuació copiant i enganxant a GitHub Issues.",
|
||||||
"sceneContent": "Contingut de l'escena:"
|
"sceneContent": "Contingut de l'escena:"
|
||||||
},
|
},
|
||||||
"roomDialog": {
|
"roomDialog": {
|
||||||
"desc_intro": "Pots convidar persones a la teva escena actual a col·laborar amb tu.",
|
"desc_intro": "Podeu convidar persones a la vostra escena actual a col·laborar amb vós.",
|
||||||
"desc_privacy": "No et preocupis, la sessió utilitza el xifratge de punta a punta, de manera que qualsevol cosa que dibuixis quedarà privada. Ni tan sols el nostre servidor podrà veure el que fas.",
|
"desc_privacy": "No us preocupeu, la sessió utilitza el xifratge de punta a punta, de manera que qualsevol cosa que dibuixeu romandrà privada. Ni tan sols el nostre servidor podrà veure què feu.",
|
||||||
"button_startSession": "Iniciar sessió",
|
"button_startSession": "Inicia la sessió",
|
||||||
"button_stopSession": "Aturar sessió",
|
"button_stopSession": "Atura la sessió",
|
||||||
"desc_inProgressIntro": "La sessió de col·laboració en directe està en marxa.",
|
"desc_inProgressIntro": "La sessió de col·laboració en directe està en marxa.",
|
||||||
"desc_shareLink": "Comparteix aquest enllaç amb qualsevol persona amb qui vulguis col·laborar:",
|
"desc_shareLink": "Comparteix aquest enllaç amb qualsevol persona amb qui vulgueu col·laborar:",
|
||||||
"desc_exitSession": "Si aturas la sessió, et desconectarás de la sala, però podrás continuar treballant amb el dibuix localment. Tingues en compte que això no afectarà a altres persones, i encara podran col·laborar en la seva versió.",
|
"desc_exitSession": "Si atureu la sessió, us desconectareu de la sala, però podreu continuar treballant amb el dibuix localment. Tingues en compte que això no afectarà a altres persones, i encara podran col·laborar en la seva versió.",
|
||||||
"shareTitle": "Uniu-vos a una sessió de col·laboració en directe a Excalidraw"
|
"shareTitle": "Uniu-vos a una sessió de col·laboració en directe a Excalidraw"
|
||||||
},
|
},
|
||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Error"
|
"title": "Error"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Desa al disc",
|
||||||
|
"disk_details": "Exporta les dades de l'escena a un fitxer que després podreu importar.",
|
||||||
|
"disk_button": "Desa en un fitxer",
|
||||||
|
"link_title": "Enllaç per a compartir",
|
||||||
|
"link_details": "Exporta com a un enllaç de només lectura.",
|
||||||
|
"link_button": "Exporta a un enllaç",
|
||||||
|
"excalidrawplus_description": "Desa l'escena en el vostre espai de treball Excalidraw+.",
|
||||||
|
"excalidrawplus_button": "Exporta",
|
||||||
|
"excalidrawplus_exportError": "No és possible exportar a Excalidraw+ ara mateix..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Llegiu el nostre blog",
|
"blog": "Llegiu el nostre blog",
|
||||||
"click": "clic",
|
"click": "clic",
|
||||||
"curvedArrow": "Fletxa corba",
|
"curvedArrow": "Fletxa corba",
|
||||||
"curvedLine": "Línia corba",
|
"curvedLine": "Línia corba",
|
||||||
"documentation": "Documentació",
|
"documentation": "Documentació",
|
||||||
|
"doubleClick": "doble clic",
|
||||||
"drag": "arrossega",
|
"drag": "arrossega",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
|
"editSelectedShape": "Edita la forma seleccionada (text, fletxa o línia)",
|
||||||
"github": "Hi heu trobat un problema? Informeu-ne",
|
"github": "Hi heu trobat un problema? Informeu-ne",
|
||||||
"howto": "Seguiu les nostres guies",
|
"howto": "Seguiu les nostres guies",
|
||||||
"or": "o",
|
"or": "o",
|
||||||
"preventBinding": "Prevenir vinculació de la fletxa",
|
"preventBinding": "Prevenir vinculació de la fletxa",
|
||||||
"shapes": "Formes",
|
"shapes": "Formes",
|
||||||
"shortcuts": "Dreceres de teclat",
|
"shortcuts": "Dreceres de teclat",
|
||||||
"textFinish": "Acaba d'editar (text)",
|
"textFinish": "Finalitza l'edició (editor de text)",
|
||||||
"textNewLine": "Afegeix línea nova (text)",
|
"textNewLine": "Afegeix una línia nova (editor de text)",
|
||||||
"title": "Ajuda",
|
"title": "Ajuda",
|
||||||
"view": "Visualització",
|
"view": "Visualització",
|
||||||
"zoomToFit": "Zoom per veure tots els elements",
|
"zoomToFit": "Zoom per veure tots els elements",
|
||||||
|
|||||||
@@ -0,0 +1,286 @@
|
|||||||
|
{
|
||||||
|
"labels": {
|
||||||
|
"paste": "Vložit",
|
||||||
|
"pasteCharts": "Vložit grafy",
|
||||||
|
"selectAll": "Vybrat vše",
|
||||||
|
"multiSelect": "Přidat prvek do výběru",
|
||||||
|
"moveCanvas": "Posunout plátno",
|
||||||
|
"cut": "Vyjmout",
|
||||||
|
"copy": "Kopírovat",
|
||||||
|
"copyAsPng": "Zkopírovat do schránky jako PNG",
|
||||||
|
"copyAsSvg": "Zkopírovat do schránky jako SVG",
|
||||||
|
"bringForward": "Přenést blíž",
|
||||||
|
"sendToBack": "Přenést do pozadí",
|
||||||
|
"bringToFront": "Přenést do popředí",
|
||||||
|
"sendBackward": "Přenést dál",
|
||||||
|
"delete": "Smazat",
|
||||||
|
"copyStyles": "Kopírovat styly",
|
||||||
|
"pasteStyles": "Vložit styly",
|
||||||
|
"stroke": "Obrys",
|
||||||
|
"background": "Pozadí",
|
||||||
|
"fill": "Výplň",
|
||||||
|
"strokeWidth": "Šířka obrysu",
|
||||||
|
"strokeShape": "Tvar tahu",
|
||||||
|
"strokeShape_gel": "Gelové pero",
|
||||||
|
"strokeShape_fountain": "Plnicí pero",
|
||||||
|
"strokeShape_brush": "Fixa",
|
||||||
|
"strokeStyle": "Styl tahu",
|
||||||
|
"strokeStyle_solid": "Plný",
|
||||||
|
"strokeStyle_dashed": "Čárkovaný",
|
||||||
|
"strokeStyle_dotted": "Tečkovaný",
|
||||||
|
"sloppiness": "Stylizace",
|
||||||
|
"opacity": "Průhlednost",
|
||||||
|
"textAlign": "Zarovnání textu",
|
||||||
|
"edges": "Hrany",
|
||||||
|
"sharp": "Ostré",
|
||||||
|
"round": "Zaoblené",
|
||||||
|
"arrowheads": "Styl šipky",
|
||||||
|
"arrowhead_none": "Žádný",
|
||||||
|
"arrowhead_arrow": "Šipka",
|
||||||
|
"arrowhead_bar": "Kóta",
|
||||||
|
"arrowhead_dot": "Tečka",
|
||||||
|
"fontSize": "Velikost písma",
|
||||||
|
"fontFamily": "Písmo",
|
||||||
|
"onlySelected": "Pouze vybrané",
|
||||||
|
"withBackground": "",
|
||||||
|
"exportEmbedScene": "",
|
||||||
|
"exportEmbedScene_details": "",
|
||||||
|
"addWatermark": "",
|
||||||
|
"handDrawn": "Od ruky",
|
||||||
|
"normal": "Normální",
|
||||||
|
"code": "Kód",
|
||||||
|
"small": "Malé",
|
||||||
|
"medium": "Střední",
|
||||||
|
"large": "Velké",
|
||||||
|
"veryLarge": "Velmi velké",
|
||||||
|
"solid": "",
|
||||||
|
"hachure": "",
|
||||||
|
"crossHatch": "",
|
||||||
|
"thin": "",
|
||||||
|
"bold": "",
|
||||||
|
"left": "",
|
||||||
|
"center": "",
|
||||||
|
"right": "",
|
||||||
|
"extraBold": "",
|
||||||
|
"architect": "",
|
||||||
|
"artist": "",
|
||||||
|
"cartoonist": "",
|
||||||
|
"fileTitle": "",
|
||||||
|
"colorPicker": "",
|
||||||
|
"canvasBackground": "Pozadí plátna",
|
||||||
|
"drawingCanvas": "",
|
||||||
|
"layers": "",
|
||||||
|
"actions": "",
|
||||||
|
"language": "",
|
||||||
|
"liveCollaboration": "",
|
||||||
|
"duplicateSelection": "",
|
||||||
|
"untitled": "",
|
||||||
|
"name": "",
|
||||||
|
"yourName": "",
|
||||||
|
"madeWithExcalidraw": "",
|
||||||
|
"group": "",
|
||||||
|
"ungroup": "",
|
||||||
|
"collaborators": "",
|
||||||
|
"showGrid": "",
|
||||||
|
"addToLibrary": "",
|
||||||
|
"removeFromLibrary": "",
|
||||||
|
"libraryLoadingMessage": "",
|
||||||
|
"libraries": "",
|
||||||
|
"loadingScene": "",
|
||||||
|
"align": "",
|
||||||
|
"alignTop": "",
|
||||||
|
"alignBottom": "",
|
||||||
|
"alignLeft": "",
|
||||||
|
"alignRight": "",
|
||||||
|
"centerVertically": "",
|
||||||
|
"centerHorizontally": "",
|
||||||
|
"distributeHorizontally": "",
|
||||||
|
"distributeVertically": "",
|
||||||
|
"flipHorizontal": "",
|
||||||
|
"flipVertical": "",
|
||||||
|
"viewMode": "Náhled",
|
||||||
|
"toggleExportColorScheme": "",
|
||||||
|
"share": "Sdílet",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": "Přepnout tmavý řežim"
|
||||||
|
},
|
||||||
|
"buttons": {
|
||||||
|
"clearReset": "",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
|
"export": "Exportovat",
|
||||||
|
"exportToPng": "Exportovat do PNG",
|
||||||
|
"exportToSvg": "Exportovat do SVG",
|
||||||
|
"copyToClipboard": "Kopírovat do schránky",
|
||||||
|
"copyPngToClipboard": "Kopírovat PNG do schránky",
|
||||||
|
"scale": "Měřítko",
|
||||||
|
"save": "",
|
||||||
|
"saveAs": "Uložit jako",
|
||||||
|
"load": "Nahrát",
|
||||||
|
"getShareableLink": "Získat odkaz pro sdílení",
|
||||||
|
"close": "Zavřít",
|
||||||
|
"selectLanguage": "Zvolit jazyk",
|
||||||
|
"scrollBackToContent": "",
|
||||||
|
"zoomIn": "Přiblížit",
|
||||||
|
"zoomOut": "Oddálit",
|
||||||
|
"resetZoom": "Resetovat přiblížení",
|
||||||
|
"menu": "Menu",
|
||||||
|
"done": "Hotovo",
|
||||||
|
"edit": "Upravit",
|
||||||
|
"undo": "Zpět",
|
||||||
|
"redo": "Znovu",
|
||||||
|
"resetLibrary": "",
|
||||||
|
"createNewRoom": "Vytvořit novou místnost",
|
||||||
|
"fullScreen": "Celá obrazovka",
|
||||||
|
"darkMode": "Tmavý režim",
|
||||||
|
"lightMode": "Světlý režim",
|
||||||
|
"zenMode": "Zen mód",
|
||||||
|
"exitZenMode": "Opustit zen mód"
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"clearReset": "",
|
||||||
|
"couldNotCreateShareableLink": "",
|
||||||
|
"couldNotCreateShareableLinkTooBig": "",
|
||||||
|
"couldNotLoadInvalidFile": "",
|
||||||
|
"importBackendFailed": "",
|
||||||
|
"cannotExportEmptyCanvas": "",
|
||||||
|
"couldNotCopyToClipboard": "",
|
||||||
|
"decryptFailed": "",
|
||||||
|
"uploadedSecurly": "",
|
||||||
|
"loadSceneOverridePrompt": "",
|
||||||
|
"collabStopOverridePrompt": "",
|
||||||
|
"errorLoadingLibrary": "",
|
||||||
|
"errorAddingToLibrary": "",
|
||||||
|
"errorRemovingFromLibrary": "",
|
||||||
|
"confirmAddLibrary": "",
|
||||||
|
"imageDoesNotContainScene": "",
|
||||||
|
"cannotRestoreFromImage": "",
|
||||||
|
"invalidSceneUrl": "",
|
||||||
|
"resetLibrary": ""
|
||||||
|
},
|
||||||
|
"toolBar": {
|
||||||
|
"selection": "Výběr",
|
||||||
|
"rectangle": "Obdélník",
|
||||||
|
"diamond": "Diamant",
|
||||||
|
"ellipse": "Elipsa",
|
||||||
|
"arrow": "Šipka",
|
||||||
|
"line": "Čára",
|
||||||
|
"freedraw": "Kreslení",
|
||||||
|
"text": "Text",
|
||||||
|
"library": "",
|
||||||
|
"lock": ""
|
||||||
|
},
|
||||||
|
"headings": {
|
||||||
|
"canvasActions": "",
|
||||||
|
"selectedShapeActions": "",
|
||||||
|
"shapes": "Tvary"
|
||||||
|
},
|
||||||
|
"hints": {
|
||||||
|
"linearElement": "",
|
||||||
|
"freeDraw": "",
|
||||||
|
"text": "",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
|
"linearElementMulti": "",
|
||||||
|
"lockAngle": "",
|
||||||
|
"resize": "",
|
||||||
|
"rotate": "",
|
||||||
|
"lineEditor_info": "",
|
||||||
|
"lineEditor_pointSelected": "",
|
||||||
|
"lineEditor_nothingSelected": ""
|
||||||
|
},
|
||||||
|
"canvasError": {
|
||||||
|
"cannotShowPreview": "",
|
||||||
|
"canvasTooBig": "",
|
||||||
|
"canvasTooBigTip": ""
|
||||||
|
},
|
||||||
|
"errorSplash": {
|
||||||
|
"headingMain_pre": "",
|
||||||
|
"headingMain_button": "",
|
||||||
|
"clearCanvasMessage": "",
|
||||||
|
"clearCanvasMessage_button": "",
|
||||||
|
"clearCanvasCaveat": "",
|
||||||
|
"trackedToSentry_pre": "",
|
||||||
|
"trackedToSentry_post": "",
|
||||||
|
"openIssueMessage_pre": "",
|
||||||
|
"openIssueMessage_button": "",
|
||||||
|
"openIssueMessage_post": "",
|
||||||
|
"sceneContent": ""
|
||||||
|
},
|
||||||
|
"roomDialog": {
|
||||||
|
"desc_intro": "",
|
||||||
|
"desc_privacy": "",
|
||||||
|
"button_startSession": "",
|
||||||
|
"button_stopSession": "",
|
||||||
|
"desc_inProgressIntro": "",
|
||||||
|
"desc_shareLink": "",
|
||||||
|
"desc_exitSession": "",
|
||||||
|
"shareTitle": ""
|
||||||
|
},
|
||||||
|
"errorDialog": {
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
|
"helpDialog": {
|
||||||
|
"blog": "",
|
||||||
|
"click": "kliknutí",
|
||||||
|
"curvedArrow": "",
|
||||||
|
"curvedLine": "",
|
||||||
|
"documentation": "",
|
||||||
|
"doubleClick": "",
|
||||||
|
"drag": "tažení",
|
||||||
|
"editor": "",
|
||||||
|
"editSelectedShape": "",
|
||||||
|
"github": "",
|
||||||
|
"howto": "",
|
||||||
|
"or": "nebo",
|
||||||
|
"preventBinding": "",
|
||||||
|
"shapes": "",
|
||||||
|
"shortcuts": "",
|
||||||
|
"textFinish": "",
|
||||||
|
"textNewLine": "",
|
||||||
|
"title": "",
|
||||||
|
"view": "",
|
||||||
|
"zoomToFit": "",
|
||||||
|
"zoomToSelection": ""
|
||||||
|
},
|
||||||
|
"encrypted": {
|
||||||
|
"tooltip": "",
|
||||||
|
"link": ""
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"angle": "",
|
||||||
|
"element": "",
|
||||||
|
"elements": "",
|
||||||
|
"height": "",
|
||||||
|
"scene": "",
|
||||||
|
"selected": "",
|
||||||
|
"storage": "",
|
||||||
|
"title": "",
|
||||||
|
"total": "",
|
||||||
|
"version": "",
|
||||||
|
"versionCopy": "",
|
||||||
|
"versionNotAvailable": "",
|
||||||
|
"width": ""
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"copyStyles": "",
|
||||||
|
"copyToClipboard": "",
|
||||||
|
"copyToClipboardAsPng": "",
|
||||||
|
"fileSaved": "",
|
||||||
|
"fileSavedToFilename": "",
|
||||||
|
"canvas": "plátno",
|
||||||
|
"selection": "výběr"
|
||||||
|
}
|
||||||
|
}
|
||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Hintergrund",
|
"background": "Hintergrund",
|
||||||
"fill": "Füllung",
|
"fill": "Füllung",
|
||||||
"strokeWidth": "Strichstärke",
|
"strokeWidth": "Strichstärke",
|
||||||
|
"strokeShape": "Strichform",
|
||||||
|
"strokeShape_gel": "Gelschreiber",
|
||||||
|
"strokeShape_fountain": "Füllfederhalter",
|
||||||
|
"strokeShape_brush": "Pinselstift",
|
||||||
"strokeStyle": "Konturstil",
|
"strokeStyle": "Konturstil",
|
||||||
"strokeStyle_solid": "Durchgezogen",
|
"strokeStyle_solid": "Durchgezogen",
|
||||||
"strokeStyle_dashed": "Gestrichelt",
|
"strokeStyle_dashed": "Gestrichelt",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Schriftgröße",
|
"fontSize": "Schriftgröße",
|
||||||
"fontFamily": "Schriftfamilie",
|
"fontFamily": "Schriftfamilie",
|
||||||
"onlySelected": "Nur ausgewählte",
|
"onlySelected": "Nur ausgewählte",
|
||||||
"withBackground": "Mit Hintergrund",
|
"withBackground": "Hintergrund",
|
||||||
"exportEmbedScene": "Zeichnung in exportierte Datei einbetten",
|
"exportEmbedScene": "Szene einbetten",
|
||||||
"exportEmbedScene_details": "Die Zeichnungsdaten werden in der exportierten PNG/SVG-Datei gespeichert, sodass das Dokument später weiter bearbeitet werden kann. \nDieses wird die exportierte Datei vergrößern.",
|
"exportEmbedScene_details": "Die Zeichnungsdaten werden in der exportierten PNG/SVG-Datei gespeichert, sodass das Dokument später weiter bearbeitet werden kann. \nDieses wird die exportierte Datei vergrößern.",
|
||||||
"addWatermark": "\"Made with Excalidraw\" hinzufügen",
|
"addWatermark": "\"Made with Excalidraw\" hinzufügen",
|
||||||
"handDrawn": "Handgezeichnet",
|
"handDrawn": "Handgezeichnet",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Vertikal spiegeln",
|
"flipVertical": "Vertikal spiegeln",
|
||||||
"viewMode": "Ansichtsmodus",
|
"viewMode": "Ansichtsmodus",
|
||||||
"toggleExportColorScheme": "Exportfarbschema umschalten",
|
"toggleExportColorScheme": "Exportfarbschema umschalten",
|
||||||
"share": "Teilen"
|
"share": "Teilen",
|
||||||
|
"showStroke": "Auswahl für Strichfarbe anzeigen",
|
||||||
|
"showBackground": "Auswahl für Hintergrundfarbe anzeigen",
|
||||||
|
"toggleTheme": "Design umschalten"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Zeichenfläche löschen & Hintergrundfarbe zurücksetzen",
|
"clearReset": "Zeichenfläche löschen & Hintergrundfarbe zurücksetzen",
|
||||||
|
"exportJSON": "In Datei exportieren",
|
||||||
|
"exportImage": "Als Bild speichern",
|
||||||
"export": "Exportieren",
|
"export": "Exportieren",
|
||||||
"exportToPng": "Als PNG exportieren",
|
"exportToPng": "Als PNG exportieren",
|
||||||
"exportToSvg": "Als SVG exportieren",
|
"exportToSvg": "Als SVG exportieren",
|
||||||
"copyToClipboard": "In Zwischenablage kopieren",
|
"copyToClipboard": "In Zwischenablage kopieren",
|
||||||
"copyPngToClipboard": "PNG in die Zwischenablage kopieren",
|
"copyPngToClipboard": "PNG in die Zwischenablage kopieren",
|
||||||
"scale": "Skalierung",
|
"scale": "Skalierung",
|
||||||
"save": "Speichern",
|
"save": "In aktueller Datei speichern",
|
||||||
"saveAs": "Speichern unter",
|
"saveAs": "Speichern unter",
|
||||||
"load": "Laden",
|
"load": "Laden",
|
||||||
"getShareableLink": "Teilbaren Link erhalten",
|
"getShareableLink": "Teilbaren Link erhalten",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Auswahl",
|
"selection": "Auswahl",
|
||||||
"freedraw": "Freies Zeichnen",
|
|
||||||
"rectangle": "Rechteck",
|
"rectangle": "Rechteck",
|
||||||
"diamond": "Raute",
|
"diamond": "Raute",
|
||||||
"ellipse": "Ellipse",
|
"ellipse": "Ellipse",
|
||||||
"arrow": "Pfeil",
|
"arrow": "Pfeil",
|
||||||
"line": "Linie",
|
"line": "Linie",
|
||||||
|
"freedraw": "Zeichnen",
|
||||||
"text": "Text",
|
"text": "Text",
|
||||||
"library": "Bibliothek",
|
"library": "Bibliothek",
|
||||||
"lock": "Ausgewähltes Werkzeug nach Zeichnen aktiv lassen"
|
"lock": "Ausgewähltes Werkzeug nach Zeichnen aktiv lassen"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Klicken für Linie mit mehreren Punkten, Ziehen für einzelne Linie",
|
"linearElement": "Klicken für Linie mit mehreren Punkten, Ziehen für einzelne Linie",
|
||||||
"freeDraw": "Klicke und ziehe. Lass los, wenn du fertig bist",
|
"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",
|
"text": "Tipp: Du kannst auch Text hinzufügen, indem du mit dem Auswahlwerkzeug auf eine beliebige Stelle doppelklickst",
|
||||||
|
"text_selected": "Doppelklicken oder Eingabetaste drücken, um Text zu bearbeiten",
|
||||||
|
"text_editing": "Drücke Escape oder Strg/Cmd+Eingabetaste, um die Bearbeitung abzuschließen",
|
||||||
"linearElementMulti": "Zum Beenden auf den letzten Punkt klicken oder Escape oder Eingabe drücken",
|
"linearElementMulti": "Zum Beenden auf den letzten Punkt klicken oder Escape oder Eingabe drücken",
|
||||||
"lockAngle": "Du kannst Winkel einschränken, indem du SHIFT gedrückt hältst",
|
"lockAngle": "Du kannst Winkel einschränken, indem du SHIFT gedrückt hältst",
|
||||||
"resize": "Du kannst die Proportionen einschränken, indem du SHIFT während der Größenänderung gedrückt hältst. Halte ALT gedrückt, um die Größe vom Zentrum aus zu ändern",
|
"resize": "Du kannst die Proportionen einschränken, indem du SHIFT während der Größenänderung gedrückt hältst. Halte ALT gedrückt, um die Größe vom Zentrum aus zu ändern",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Fehler"
|
"title": "Fehler"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Auf Festplatte speichern",
|
||||||
|
"disk_details": "Exportiere die Zeichnungsdaten in eine Datei, die Du später importieren kannst.",
|
||||||
|
"disk_button": "In Datei speichern",
|
||||||
|
"link_title": "Teilbarer Link",
|
||||||
|
"link_details": "Als schreibgeschützten Link exportieren.",
|
||||||
|
"link_button": "Als Link exportieren",
|
||||||
|
"excalidrawplus_description": "Speichere die Szene in deinem Excalidraw+ Arbeitsbereich.",
|
||||||
|
"excalidrawplus_button": "Exportieren",
|
||||||
|
"excalidrawplus_exportError": "Konnte nicht nach Excalidraw+ exportieren..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Lies unseren Blog",
|
"blog": "Lies unseren Blog",
|
||||||
"click": "klicken",
|
"click": "klicken",
|
||||||
"curvedArrow": "Gebogener Pfeil",
|
"curvedArrow": "Gebogener Pfeil",
|
||||||
"curvedLine": "Gebogene Linie",
|
"curvedLine": "Gebogene Linie",
|
||||||
"documentation": "Dokumentation",
|
"documentation": "Dokumentation",
|
||||||
|
"doubleClick": "doppelklicken",
|
||||||
"drag": "ziehen",
|
"drag": "ziehen",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
|
"editSelectedShape": "Ausgewählte Form bearbeiten (Text/Pfeil/Linie)",
|
||||||
"github": "Ein Problem gefunden? Informiere uns",
|
"github": "Ein Problem gefunden? Informiere uns",
|
||||||
"howto": "Folge unseren Anleitungen",
|
"howto": "Folge unseren Anleitungen",
|
||||||
"or": "oder",
|
"or": "oder",
|
||||||
"preventBinding": "Pfeil-Bindung verhindern",
|
"preventBinding": "Pfeil-Bindung verhindern",
|
||||||
"shapes": "Formen",
|
"shapes": "Formen",
|
||||||
"shortcuts": "Tastaturkürzel",
|
"shortcuts": "Tastaturkürzel",
|
||||||
"textFinish": "Bearbeiten beenden (Text)",
|
"textFinish": "Bearbeitung beenden (Texteditor)",
|
||||||
"textNewLine": "Neue Zeile hinzufügen (Text)",
|
"textNewLine": "Neue Zeile hinzufügen (Texteditor)",
|
||||||
"title": "Hilfe",
|
"title": "Hilfe",
|
||||||
"view": "Ansicht",
|
"view": "Ansicht",
|
||||||
"zoomToFit": "Zoomen um alle Elemente einzupassen",
|
"zoomToFit": "Zoomen um alle Elemente einzupassen",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Φόντο",
|
"background": "Φόντο",
|
||||||
"fill": "Γέμισμα",
|
"fill": "Γέμισμα",
|
||||||
"strokeWidth": "Πάχος μολυβιάς",
|
"strokeWidth": "Πάχος μολυβιάς",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "Στυλ περιγράμματος",
|
"strokeStyle": "Στυλ περιγράμματος",
|
||||||
"strokeStyle_solid": "Συμπαγής",
|
"strokeStyle_solid": "Συμπαγής",
|
||||||
"strokeStyle_dashed": "Διακεκομμένη με παύλες",
|
"strokeStyle_dashed": "Διακεκομμένη με παύλες",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Μέγεθος γραμματοσειράς",
|
"fontSize": "Μέγεθος γραμματοσειράς",
|
||||||
"fontFamily": "Γραμματοσειρά",
|
"fontFamily": "Γραμματοσειρά",
|
||||||
"onlySelected": "Μόνο τα Επιλεγμένα",
|
"onlySelected": "Μόνο τα Επιλεγμένα",
|
||||||
"withBackground": "Με φόντο",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "Ενσωμάτωση της σκηνής στο αρχείο προς εξαγωγή",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "Τα δεδομένα σκηνής θα αποθηκευτούν στο αρχείο PNG/SVG προς εξαγωγή ώστε η σκηνή να είναι δυνατό να αποκατασταθεί από αυτό.\nΘα αυξήσει το μέγεθος του αρχείου προς εξαγωγή.",
|
"exportEmbedScene_details": "Τα δεδομένα σκηνής θα αποθηκευτούν στο αρχείο PNG/SVG προς εξαγωγή ώστε η σκηνή να είναι δυνατό να αποκατασταθεί από αυτό.\nΘα αυξήσει το μέγεθος του αρχείου προς εξαγωγή.",
|
||||||
"addWatermark": "Προσθήκη \"Φτιαγμένο με Excalidraw\"",
|
"addWatermark": "Προσθήκη \"Φτιαγμένο με Excalidraw\"",
|
||||||
"handDrawn": "Σχεδιασμένο στο χέρι",
|
"handDrawn": "Σχεδιασμένο στο χέρι",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Κατακόρυφη αναστροφή",
|
"flipVertical": "Κατακόρυφη αναστροφή",
|
||||||
"viewMode": "Λειτουργία προβολής",
|
"viewMode": "Λειτουργία προβολής",
|
||||||
"toggleExportColorScheme": "Εναλλαγή εξαγωγής θέματος χρωμάτων",
|
"toggleExportColorScheme": "Εναλλαγή εξαγωγής θέματος χρωμάτων",
|
||||||
"share": "Κοινοποίηση"
|
"share": "Κοινοποίηση",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Επαναφορά του καμβά",
|
"clearReset": "Επαναφορά του καμβά",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "Εξαγωγή",
|
"export": "Εξαγωγή",
|
||||||
"exportToPng": "Εξαγωγή σε PNG",
|
"exportToPng": "Εξαγωγή σε PNG",
|
||||||
"exportToSvg": "Εξαγωγή σε SVG",
|
"exportToSvg": "Εξαγωγή σε SVG",
|
||||||
"copyToClipboard": "Αντιγραφή στο πρόχειρο",
|
"copyToClipboard": "Αντιγραφή στο πρόχειρο",
|
||||||
"copyPngToClipboard": "Αντιγραφή PNG στο πρόχειρο",
|
"copyPngToClipboard": "Αντιγραφή PNG στο πρόχειρο",
|
||||||
"scale": "Κλίμακα",
|
"scale": "Κλίμακα",
|
||||||
"save": "Αποθήκευση",
|
"save": "",
|
||||||
"saveAs": "Αποθήκευση ως",
|
"saveAs": "Αποθήκευση ως",
|
||||||
"load": "Άνοιγμα",
|
"load": "Άνοιγμα",
|
||||||
"getShareableLink": "Δημόσιος σύνδεσμος",
|
"getShareableLink": "Δημόσιος σύνδεσμος",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Επιλογή",
|
"selection": "Επιλογή",
|
||||||
"freedraw": "Ελεύθερο σχέδιο",
|
|
||||||
"rectangle": "Ορθογώνιο",
|
"rectangle": "Ορθογώνιο",
|
||||||
"diamond": "Ρόμβος",
|
"diamond": "Ρόμβος",
|
||||||
"ellipse": "Έλλειψη",
|
"ellipse": "Έλλειψη",
|
||||||
"arrow": "Βέλος",
|
"arrow": "Βέλος",
|
||||||
"line": "Γραμμή",
|
"line": "Γραμμή",
|
||||||
|
"freedraw": "",
|
||||||
"text": "Κείμενο",
|
"text": "Κείμενο",
|
||||||
"library": "Βιβλιοθήκη",
|
"library": "Βιβλιοθήκη",
|
||||||
"lock": "Κράτησε επιλεγμένο το εργαλείο μετά το σχέδιο"
|
"lock": "Κράτησε επιλεγμένο το εργαλείο μετά το σχέδιο"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Κάνε κλικ για να ξεκινήσεις πολλαπλά σημεία, σύρε για μια γραμμή",
|
"linearElement": "Κάνε κλικ για να ξεκινήσεις πολλαπλά σημεία, σύρε για μια γραμμή",
|
||||||
"freeDraw": "Κάντε κλικ και σύρτε, απελευθερώσατε όταν έχετε τελειώσει",
|
"freeDraw": "Κάντε κλικ και σύρτε, απελευθερώσατε όταν έχετε τελειώσει",
|
||||||
"text": "Tip: μπορείτε επίσης να προσθέστε κείμενο με διπλό-κλικ οπουδήποτε με το εργαλείο επιλογών",
|
"text": "Tip: μπορείτε επίσης να προσθέστε κείμενο με διπλό-κλικ οπουδήποτε με το εργαλείο επιλογών",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "Κάνε κλικ στο τελευταίο σημείο ή πάτησε Escape ή Enter για να τελειώσεις",
|
"linearElementMulti": "Κάνε κλικ στο τελευταίο σημείο ή πάτησε Escape ή Enter για να τελειώσεις",
|
||||||
"lockAngle": "Μπορείτε να περιορίσετε τη γωνία κρατώντας πατημένο το SHIFT",
|
"lockAngle": "Μπορείτε να περιορίσετε τη γωνία κρατώντας πατημένο το SHIFT",
|
||||||
"resize": "Μπορείς να περιορίσεις τις αναλογίες κρατώντας το SHIFT ενώ αλλάζεις μέγεθος,\nκράτησε πατημένο το ALT για αλλαγή μεγέθους από το κέντρο",
|
"resize": "Μπορείς να περιορίσεις τις αναλογίες κρατώντας το SHIFT ενώ αλλάζεις μέγεθος,\nκράτησε πατημένο το ALT για αλλαγή μεγέθους από το κέντρο",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Σφάλμα"
|
"title": "Σφάλμα"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Διαβάστε το Blog μας",
|
"blog": "Διαβάστε το Blog μας",
|
||||||
"click": "κλικ",
|
"click": "κλικ",
|
||||||
"curvedArrow": "Κυρτό βέλος",
|
"curvedArrow": "Κυρτό βέλος",
|
||||||
"curvedLine": "Κυρτή γραμμή",
|
"curvedLine": "Κυρτή γραμμή",
|
||||||
"documentation": "Εγχειρίδιο",
|
"documentation": "Εγχειρίδιο",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "σύρε",
|
"drag": "σύρε",
|
||||||
"editor": "Επεξεργαστής",
|
"editor": "Επεξεργαστής",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "Βρήκατε πρόβλημα; Υποβάλετε το",
|
"github": "Βρήκατε πρόβλημα; Υποβάλετε το",
|
||||||
"howto": "Ακολουθήστε τους οδηγούς μας",
|
"howto": "Ακολουθήστε τους οδηγούς μας",
|
||||||
"or": "ή",
|
"or": "ή",
|
||||||
"preventBinding": "Αποτροπή δέσμευσης βέλων",
|
"preventBinding": "Αποτροπή δέσμευσης βέλων",
|
||||||
"shapes": "Σχήματα",
|
"shapes": "Σχήματα",
|
||||||
"shortcuts": "Συντομεύσεις πληκτρολογίου",
|
"shortcuts": "Συντομεύσεις πληκτρολογίου",
|
||||||
"textFinish": "Ολοκλήρωση επεξεργασίας (κείμενο)",
|
"textFinish": "",
|
||||||
"textNewLine": "Προσθήκη νέας γραμμής (κείμενο)",
|
"textNewLine": "",
|
||||||
"title": "Βοήθεια",
|
"title": "Βοήθεια",
|
||||||
"view": "Προβολή",
|
"view": "Προβολή",
|
||||||
"zoomToFit": "Zoom ώστε να χωρέσουν όλα τα στοιχεία",
|
"zoomToFit": "Zoom ώστε να χωρέσουν όλα τα στοιχεία",
|
||||||
|
|||||||
+12
-3
@@ -101,6 +101,8 @@
|
|||||||
"viewMode": "View mode",
|
"viewMode": "View mode",
|
||||||
"toggleExportColorScheme": "Toggle export color scheme",
|
"toggleExportColorScheme": "Toggle export color scheme",
|
||||||
"share": "Share",
|
"share": "Share",
|
||||||
|
"showStroke": "Show stroke color picker",
|
||||||
|
"showBackground": "Show background color picker",
|
||||||
"toggleTheme": "Toggle theme"
|
"toggleTheme": "Toggle theme"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
@@ -178,6 +180,8 @@
|
|||||||
"linearElement": "Click to start multiple points, drag for single line",
|
"linearElement": "Click to start multiple points, drag for single line",
|
||||||
"freeDraw": "Click and drag, release when you're finished",
|
"freeDraw": "Click and drag, release when you're finished",
|
||||||
"text": "Tip: you can also add text by double-clicking anywhere with the selection tool",
|
"text": "Tip: you can also add text by double-clicking anywhere with the selection tool",
|
||||||
|
"text_selected": "Double-click or press ENTER to edit text",
|
||||||
|
"text_editing": "Press Escape or CtrlOrCmd+ENTER to finish editing",
|
||||||
"linearElementMulti": "Click on last point or press Escape or Enter to finish",
|
"linearElementMulti": "Click on last point or press Escape or Enter to finish",
|
||||||
"lockAngle": "You can constrain angle by holding SHIFT",
|
"lockAngle": "You can constrain angle by holding SHIFT",
|
||||||
"resize": "You can constrain proportions by holding SHIFT while resizing,\nhold ALT to resize from the center",
|
"resize": "You can constrain proportions by holding SHIFT while resizing,\nhold ALT to resize from the center",
|
||||||
@@ -223,7 +227,10 @@
|
|||||||
"disk_button": "Save to file",
|
"disk_button": "Save to file",
|
||||||
"link_title": "Shareable link",
|
"link_title": "Shareable link",
|
||||||
"link_details": "Export as a read-only link.",
|
"link_details": "Export as a read-only link.",
|
||||||
"link_button": "Export to Link"
|
"link_button": "Export to Link",
|
||||||
|
"excalidrawplus_description": "Save the scene to your Excalidraw+ workspace.",
|
||||||
|
"excalidrawplus_button": "Export",
|
||||||
|
"excalidrawplus_exportError": "Couldn't export to Excalidraw+ at this moment..."
|
||||||
},
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Read our blog",
|
"blog": "Read our blog",
|
||||||
@@ -231,16 +238,18 @@
|
|||||||
"curvedArrow": "Curved arrow",
|
"curvedArrow": "Curved arrow",
|
||||||
"curvedLine": "Curved line",
|
"curvedLine": "Curved line",
|
||||||
"documentation": "Documentation",
|
"documentation": "Documentation",
|
||||||
|
"doubleClick": "double-click",
|
||||||
"drag": "drag",
|
"drag": "drag",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
|
"editSelectedShape": "Edit selected shape (text/arrow/line)",
|
||||||
"github": "Found an issue? Submit",
|
"github": "Found an issue? Submit",
|
||||||
"howto": "Follow our guides",
|
"howto": "Follow our guides",
|
||||||
"or": "or",
|
"or": "or",
|
||||||
"preventBinding": "Prevent arrow binding",
|
"preventBinding": "Prevent arrow binding",
|
||||||
"shapes": "Shapes",
|
"shapes": "Shapes",
|
||||||
"shortcuts": "Keyboard shortcuts",
|
"shortcuts": "Keyboard shortcuts",
|
||||||
"textFinish": "Finish editing (text)",
|
"textFinish": "Finish editing (text editor)",
|
||||||
"textNewLine": "Add new line (text)",
|
"textNewLine": "Add new line (text editor)",
|
||||||
"title": "Help",
|
"title": "Help",
|
||||||
"view": "View",
|
"view": "View",
|
||||||
"zoomToFit": "Zoom to fit all elements",
|
"zoomToFit": "Zoom to fit all elements",
|
||||||
|
|||||||
+33
-9
@@ -20,6 +20,10 @@
|
|||||||
"background": "Fondo",
|
"background": "Fondo",
|
||||||
"fill": "Rellenar",
|
"fill": "Rellenar",
|
||||||
"strokeWidth": "Grosor del trazo",
|
"strokeWidth": "Grosor del trazo",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "Estilo del trazo",
|
"strokeStyle": "Estilo del trazo",
|
||||||
"strokeStyle_solid": "Sólido",
|
"strokeStyle_solid": "Sólido",
|
||||||
"strokeStyle_dashed": "Discontinua",
|
"strokeStyle_dashed": "Discontinua",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Tamaño de la fuente",
|
"fontSize": "Tamaño de la fuente",
|
||||||
"fontFamily": "Tipo de fuente",
|
"fontFamily": "Tipo de fuente",
|
||||||
"onlySelected": "Sólo seleccionados",
|
"onlySelected": "Sólo seleccionados",
|
||||||
"withBackground": "Con fondo",
|
"withBackground": "Fondo",
|
||||||
"exportEmbedScene": "Insertar escena en el archivo exportado",
|
"exportEmbedScene": "Embeber escena",
|
||||||
"exportEmbedScene_details": "Los datos de escena se guardarán en el archivo PNG/SVG exportado, así la escena puede ser restaurada de la misma.\nEsto aumentará el tamaño del archivo exportado.",
|
"exportEmbedScene_details": "Los datos de escena se guardarán en el archivo PNG/SVG exportado, así la escena puede ser restaurada de la misma.\nEsto aumentará el tamaño del archivo exportado.",
|
||||||
"addWatermark": "Agregar \"Hecho con Excalidraw\"",
|
"addWatermark": "Agregar \"Hecho con Excalidraw\"",
|
||||||
"handDrawn": "Dibujado a mano",
|
"handDrawn": "Dibujado a mano",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Girar verticalmente",
|
"flipVertical": "Girar verticalmente",
|
||||||
"viewMode": "Modo presentación",
|
"viewMode": "Modo presentación",
|
||||||
"toggleExportColorScheme": "Cambiar el esquema de colores de exportación",
|
"toggleExportColorScheme": "Cambiar el esquema de colores de exportación",
|
||||||
"share": "Compartir"
|
"share": "Compartir",
|
||||||
|
"showStroke": "Mostrar el selector de color del trazo",
|
||||||
|
"showBackground": "Mostrar el selector de color de fondo",
|
||||||
|
"toggleTheme": "Alternar tema"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Limpiar lienzo y reiniciar el color de fondo",
|
"clearReset": "Limpiar lienzo y reiniciar el color de fondo",
|
||||||
|
"exportJSON": "Exportar como archivo",
|
||||||
|
"exportImage": "Guardar como imagen",
|
||||||
"export": "Exportar",
|
"export": "Exportar",
|
||||||
"exportToPng": "Exportar a PNG",
|
"exportToPng": "Exportar a PNG",
|
||||||
"exportToSvg": "Exportar a SVG",
|
"exportToSvg": "Exportar a SVG",
|
||||||
"copyToClipboard": "Copiar al portapapeles",
|
"copyToClipboard": "Copiar al portapapeles",
|
||||||
"copyPngToClipboard": "Copiar PNG al portapapeles",
|
"copyPngToClipboard": "Copiar PNG al portapapeles",
|
||||||
"scale": "Escalar",
|
"scale": "Escalar",
|
||||||
"save": "Guardar",
|
"save": "Guardal al archivo actual",
|
||||||
"saveAs": "Guardar como",
|
"saveAs": "Guardar como",
|
||||||
"load": "Cargar",
|
"load": "Cargar",
|
||||||
"getShareableLink": "Obtener enlace para compartir",
|
"getShareableLink": "Obtener enlace para compartir",
|
||||||
@@ -115,7 +124,7 @@
|
|||||||
"scrollBackToContent": "Volver al contenido",
|
"scrollBackToContent": "Volver al contenido",
|
||||||
"zoomIn": "Acercarse",
|
"zoomIn": "Acercarse",
|
||||||
"zoomOut": "Alejarse",
|
"zoomOut": "Alejarse",
|
||||||
"resetZoom": "Restablecer acercamiento",
|
"resetZoom": "Restablecer zoom",
|
||||||
"menu": "Menú",
|
"menu": "Menú",
|
||||||
"done": "Hecho",
|
"done": "Hecho",
|
||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Selección",
|
"selection": "Selección",
|
||||||
"freedraw": "Dibujo libre",
|
|
||||||
"rectangle": "Rectángulo",
|
"rectangle": "Rectángulo",
|
||||||
"diamond": "Diamante",
|
"diamond": "Diamante",
|
||||||
"ellipse": "Elipse",
|
"ellipse": "Elipse",
|
||||||
"arrow": "Flecha",
|
"arrow": "Flecha",
|
||||||
"line": "Línea",
|
"line": "Línea",
|
||||||
|
"freedraw": "Dibujar",
|
||||||
"text": "Texto",
|
"text": "Texto",
|
||||||
"library": "Biblioteca",
|
"library": "Biblioteca",
|
||||||
"lock": "Mantener la herramienta seleccionada activa después de dibujar"
|
"lock": "Mantener la herramienta seleccionada activa después de dibujar"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Haz clic para dibujar múltiples puntos, arrastrar para solo una línea",
|
"linearElement": "Haz clic para dibujar múltiples puntos, arrastrar para solo una línea",
|
||||||
"freeDraw": "Haz clic y arrastra, suelta al terminar",
|
"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",
|
"text": "Consejo: también puedes añadir texto haciendo doble clic en cualquier lugar con la herramienta de selección",
|
||||||
|
"text_selected": "Doble clic o pulse ENTER para editar el texto",
|
||||||
|
"text_editing": "Pulse Escape o CtrlOrCmd+ENTER para terminar de editar",
|
||||||
"linearElementMulti": "Haz clic en el último punto o presiona Escape o Enter para finalizar",
|
"linearElementMulti": "Haz clic en el último punto o presiona Escape o Enter para finalizar",
|
||||||
"lockAngle": "Puedes restringir el ángulo manteniendo presionado el botón SHIFT",
|
"lockAngle": "Puedes restringir el ángulo manteniendo presionado el botón SHIFT",
|
||||||
"resize": "Para mantener las proporciones mantén SHIFT presionado mientras modificas el tamaño, \nmantén presionado ALT para modificar el tamaño desde el centro",
|
"resize": "Para mantener las proporciones mantén SHIFT presionado mientras modificas el tamaño, \nmantén presionado ALT para modificar el tamaño desde el centro",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Error"
|
"title": "Error"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Guardar en el disco",
|
||||||
|
"disk_details": "Exportar los datos de la escena a un archivo desde el cual se puede importar más tarde.",
|
||||||
|
"disk_button": "Guardar en el archivo",
|
||||||
|
"link_title": "Enlace para compartir",
|
||||||
|
"link_details": "Exportar como enlace de sólo lectura.",
|
||||||
|
"link_button": "Exportar al link",
|
||||||
|
"excalidrawplus_description": "Guarda la escena en tu espacio de trabajo de Excalidraw+.",
|
||||||
|
"excalidrawplus_button": "Exportar",
|
||||||
|
"excalidrawplus_exportError": "No se pudo exportar a Excalidraw+ en este momento..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Lee nuestro blog",
|
"blog": "Lee nuestro blog",
|
||||||
"click": "click",
|
"click": "click",
|
||||||
"curvedArrow": "Flecha curvada",
|
"curvedArrow": "Flecha curvada",
|
||||||
"curvedLine": "Línea curva",
|
"curvedLine": "Línea curva",
|
||||||
"documentation": "Documentación",
|
"documentation": "Documentación",
|
||||||
|
"doubleClick": "doble clic",
|
||||||
"drag": "arrastrar",
|
"drag": "arrastrar",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
|
"editSelectedShape": "Editar la forma seleccionada (texto/flecha/línea)",
|
||||||
"github": "¿Has encontrado un problema? Envíalo",
|
"github": "¿Has encontrado un problema? Envíalo",
|
||||||
"howto": "Siga nuestras guías",
|
"howto": "Siga nuestras guías",
|
||||||
"or": "o",
|
"or": "o",
|
||||||
"preventBinding": "Evitar yuxtaposición de flechas",
|
"preventBinding": "Evitar yuxtaposición de flechas",
|
||||||
"shapes": "Formas",
|
"shapes": "Formas",
|
||||||
"shortcuts": "Atajos del teclado",
|
"shortcuts": "Atajos del teclado",
|
||||||
"textFinish": "Finalizar edición (texto)",
|
"textFinish": "Finalizar edición (editor de texto)",
|
||||||
"textNewLine": "Añadir nueva línea (texto)",
|
"textNewLine": "Añadir nueva linea (editor de texto)",
|
||||||
"title": "Ayuda",
|
"title": "Ayuda",
|
||||||
"view": "Vista",
|
"view": "Vista",
|
||||||
"zoomToFit": "Ajustar la vista para mostrar todos los elementos",
|
"zoomToFit": "Ajustar la vista para mostrar todos los elementos",
|
||||||
@@ -233,7 +257,7 @@
|
|||||||
},
|
},
|
||||||
"encrypted": {
|
"encrypted": {
|
||||||
"tooltip": "Tus dibujos están cifrados de punto a punto, por lo que los servidores de Excalidraw nunca los verán.",
|
"tooltip": "Tus dibujos están cifrados de punto a punto, por lo que los servidores de Excalidraw nunca los verán.",
|
||||||
"link": ""
|
"link": "Entrada en el blog sobre cifrado de extremo a extremo"
|
||||||
},
|
},
|
||||||
"stats": {
|
"stats": {
|
||||||
"angle": "Ángulo",
|
"angle": "Ángulo",
|
||||||
|
|||||||
+30
-6
@@ -20,6 +20,10 @@
|
|||||||
"background": "پس زمینه",
|
"background": "پس زمینه",
|
||||||
"fill": "رنگ آمیزی",
|
"fill": "رنگ آمیزی",
|
||||||
"strokeWidth": "ضخامت خط",
|
"strokeWidth": "ضخامت خط",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "استایل خط",
|
"strokeStyle": "استایل خط",
|
||||||
"strokeStyle_solid": "یکدست",
|
"strokeStyle_solid": "یکدست",
|
||||||
"strokeStyle_dashed": "خط چین",
|
"strokeStyle_dashed": "خط چین",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "اندازه قلم",
|
"fontSize": "اندازه قلم",
|
||||||
"fontFamily": "نوع قلم",
|
"fontFamily": "نوع قلم",
|
||||||
"onlySelected": "فقط انتخاب شده ها",
|
"onlySelected": "فقط انتخاب شده ها",
|
||||||
"withBackground": "با پس زمینه",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "قرار دادن صحنه در فایل خروجی",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "متحوای صحنه به فایل خروجی SVG/PNG اضافه خواهد شد برای بازیابی صحنه به آن اضافه خواهد شد.\nباعث افزایش حجم فایل خروجی میشود.",
|
"exportEmbedScene_details": "متحوای صحنه به فایل خروجی SVG/PNG اضافه خواهد شد برای بازیابی صحنه به آن اضافه خواهد شد.\nباعث افزایش حجم فایل خروجی میشود.",
|
||||||
"addWatermark": "\"ساخته شده با Excalidraw\" را اضافه کن",
|
"addWatermark": "\"ساخته شده با Excalidraw\" را اضافه کن",
|
||||||
"handDrawn": "دست نویس",
|
"handDrawn": "دست نویس",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "",
|
"flipVertical": "",
|
||||||
"viewMode": "",
|
"viewMode": "",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "",
|
||||||
"share": ""
|
"share": "",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "پاکسازی بوم نقاشی",
|
"clearReset": "پاکسازی بوم نقاشی",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "تبدیل",
|
"export": "تبدیل",
|
||||||
"exportToPng": "تبدیل به PNG",
|
"exportToPng": "تبدیل به PNG",
|
||||||
"exportToSvg": "تبدیل به SVG",
|
"exportToSvg": "تبدیل به SVG",
|
||||||
"copyToClipboard": "کپی در حافظه موقت",
|
"copyToClipboard": "کپی در حافظه موقت",
|
||||||
"copyPngToClipboard": "کپی PNG در حافظه موقت",
|
"copyPngToClipboard": "کپی PNG در حافظه موقت",
|
||||||
"scale": "مقیاس",
|
"scale": "مقیاس",
|
||||||
"save": "ذخیره",
|
"save": "",
|
||||||
"saveAs": "ذخیره با نام",
|
"saveAs": "ذخیره با نام",
|
||||||
"load": "بارگذاری",
|
"load": "بارگذاری",
|
||||||
"getShareableLink": "دریافت لینک قابل اشتراک",
|
"getShareableLink": "دریافت لینک قابل اشتراک",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "گزینش",
|
"selection": "گزینش",
|
||||||
"freedraw": "طراحی آزاد",
|
|
||||||
"rectangle": "مستطیل",
|
"rectangle": "مستطیل",
|
||||||
"diamond": "لوزی",
|
"diamond": "لوزی",
|
||||||
"ellipse": "بیضی",
|
"ellipse": "بیضی",
|
||||||
"arrow": "پیکان",
|
"arrow": "پیکان",
|
||||||
"line": "خط",
|
"line": "خط",
|
||||||
|
"freedraw": "",
|
||||||
"text": "متن",
|
"text": "متن",
|
||||||
"library": "کتابخانه",
|
"library": "کتابخانه",
|
||||||
"lock": "ابزار انتخاب شده را بعد از کشیدن نگه دار"
|
"lock": "ابزار انتخاب شده را بعد از کشیدن نگه دار"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "برای چند نقطه کلیک و برای یک خط بکشید",
|
"linearElement": "برای چند نقطه کلیک و برای یک خط بکشید",
|
||||||
"freeDraw": "کلیک کنید و بکشید و وقتی کار تمام شد رها کنید",
|
"freeDraw": "کلیک کنید و بکشید و وقتی کار تمام شد رها کنید",
|
||||||
"text": "نکته: با برنامه انتخاب شده شما میتوانید با دوبار کلیک کردن هرکجا میخواید متن اظاف کنید",
|
"text": "نکته: با برنامه انتخاب شده شما میتوانید با دوبار کلیک کردن هرکجا میخواید متن اظاف کنید",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "روی آخرین نقطه کلیک کنید یا کلید ESC را بزنید یا کلید Enter را بزنید برای اتمام کار",
|
"linearElementMulti": "روی آخرین نقطه کلیک کنید یا کلید ESC را بزنید یا کلید Enter را بزنید برای اتمام کار",
|
||||||
"lockAngle": "با نگه داشتن SHIFT هنگام چرخش می توانید زاویه ها را محدود کنید",
|
"lockAngle": "با نگه داشتن SHIFT هنگام چرخش می توانید زاویه ها را محدود کنید",
|
||||||
"resize": "می توانید با نگه داشتن SHIFT در هنگام تغییر اندازه، نسبت ها را محدود کنید،ALT را برای تغییر اندازه از مرکز نگه دارید",
|
"resize": "می توانید با نگه داشتن SHIFT در هنگام تغییر اندازه، نسبت ها را محدود کنید،ALT را برای تغییر اندازه از مرکز نگه دارید",
|
||||||
@@ -210,14 +221,27 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "خطا"
|
"title": "خطا"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "بلاگ ما را بخوانید",
|
"blog": "بلاگ ما را بخوانید",
|
||||||
"click": "",
|
"click": "",
|
||||||
"curvedArrow": "فلش خمیده",
|
"curvedArrow": "فلش خمیده",
|
||||||
"curvedLine": "منحنی",
|
"curvedLine": "منحنی",
|
||||||
"documentation": "مستندات",
|
"documentation": "مستندات",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "",
|
"drag": "",
|
||||||
"editor": "ویرایشگر",
|
"editor": "ویرایشگر",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "اشکالی می بینید؟ گزارش دهید",
|
"github": "اشکالی می بینید؟ گزارش دهید",
|
||||||
"howto": "راهنمای ما را دنبال کنید",
|
"howto": "راهنمای ما را دنبال کنید",
|
||||||
"or": "یا",
|
"or": "یا",
|
||||||
@@ -225,7 +249,7 @@
|
|||||||
"shapes": "شکلها",
|
"shapes": "شکلها",
|
||||||
"shortcuts": "میانبرهای صفحه کلید",
|
"shortcuts": "میانبرهای صفحه کلید",
|
||||||
"textFinish": "",
|
"textFinish": "",
|
||||||
"textNewLine": "یک خط جدید اضافه کنید (متن)",
|
"textNewLine": "",
|
||||||
"title": "راهنما",
|
"title": "راهنما",
|
||||||
"view": "مشاهده",
|
"view": "مشاهده",
|
||||||
"zoomToFit": "بزرگنمایی برای دیدن تمام آیتم ها",
|
"zoomToFit": "بزرگنمایی برای دیدن تمام آیتم ها",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Tausta",
|
"background": "Tausta",
|
||||||
"fill": "Täyttö",
|
"fill": "Täyttö",
|
||||||
"strokeWidth": "Viivan leveys",
|
"strokeWidth": "Viivan leveys",
|
||||||
|
"strokeShape": "Viivan muoto",
|
||||||
|
"strokeShape_gel": "Geelikynä",
|
||||||
|
"strokeShape_fountain": "Sulkakynä",
|
||||||
|
"strokeShape_brush": "Sivellinkynä",
|
||||||
"strokeStyle": "Viivan tyyli",
|
"strokeStyle": "Viivan tyyli",
|
||||||
"strokeStyle_solid": "Yhtenäinen",
|
"strokeStyle_solid": "Yhtenäinen",
|
||||||
"strokeStyle_dashed": "Katkoviiva",
|
"strokeStyle_dashed": "Katkoviiva",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Kirjasinkoko",
|
"fontSize": "Kirjasinkoko",
|
||||||
"fontFamily": "Kirjasintyyppi",
|
"fontFamily": "Kirjasintyyppi",
|
||||||
"onlySelected": "Vain valitut",
|
"onlySelected": "Vain valitut",
|
||||||
"withBackground": "Sisällytä tausta",
|
"withBackground": "Taustalla",
|
||||||
"exportEmbedScene": "Upota teos tiedostoon",
|
"exportEmbedScene": "Upota työ",
|
||||||
"exportEmbedScene_details": "Teoksen tiedot tallennetaan PNG/SVG-tiedostoon, jolloin teoksen voi palauttaa siitä. Kasvattaa tallennetun tiedoston kokoa.",
|
"exportEmbedScene_details": "Teoksen tiedot tallennetaan PNG/SVG-tiedostoon, jolloin teoksen voi palauttaa siitä. Kasvattaa tallennetun tiedoston kokoa.",
|
||||||
"addWatermark": "Lisää \"Tehty Excalidrawilla\"",
|
"addWatermark": "Lisää \"Tehty Excalidrawilla\"",
|
||||||
"handDrawn": "Käsinkirjoitettu",
|
"handDrawn": "Käsinkirjoitettu",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Käännä pystysuunnassa",
|
"flipVertical": "Käännä pystysuunnassa",
|
||||||
"viewMode": "Katselutila",
|
"viewMode": "Katselutila",
|
||||||
"toggleExportColorScheme": "Vaihda viennin väriteema",
|
"toggleExportColorScheme": "Vaihda viennin väriteema",
|
||||||
"share": "Jaa"
|
"share": "Jaa",
|
||||||
|
"showStroke": "Näytä viivan värin valitsin",
|
||||||
|
"showBackground": "Näytä taustavärin valitsin",
|
||||||
|
"toggleTheme": "Vaihda teema"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Tyhjennä piirtoalue",
|
"clearReset": "Tyhjennä piirtoalue",
|
||||||
|
"exportJSON": "Vie tiedostoon",
|
||||||
|
"exportImage": "Tallenna kuvana",
|
||||||
"export": "Vie",
|
"export": "Vie",
|
||||||
"exportToPng": "Vie PNG-tiedostona",
|
"exportToPng": "Vie PNG-tiedostona",
|
||||||
"exportToSvg": "Vie SVG-tiedostona",
|
"exportToSvg": "Vie SVG-tiedostona",
|
||||||
"copyToClipboard": "Kopioi leikepöydälle",
|
"copyToClipboard": "Kopioi leikepöydälle",
|
||||||
"copyPngToClipboard": "Kopioi PNG-tiedosto leikepöydälle",
|
"copyPngToClipboard": "Kopioi PNG-tiedosto leikepöydälle",
|
||||||
"scale": "Koko",
|
"scale": "Koko",
|
||||||
"save": "Tallenna",
|
"save": "Tallenna nykyiseen tiedostoon",
|
||||||
"saveAs": "Tallenna nimellä",
|
"saveAs": "Tallenna nimellä",
|
||||||
"load": "Avaa",
|
"load": "Avaa",
|
||||||
"getShareableLink": "Hae jaettava linkki",
|
"getShareableLink": "Hae jaettava linkki",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Valinta",
|
"selection": "Valinta",
|
||||||
"freedraw": "Vapaa piirto",
|
|
||||||
"rectangle": "Suorakulmio",
|
"rectangle": "Suorakulmio",
|
||||||
"diamond": "Vinoneliö",
|
"diamond": "Vinoneliö",
|
||||||
"ellipse": "Soikio",
|
"ellipse": "Soikio",
|
||||||
"arrow": "Nuoli",
|
"arrow": "Nuoli",
|
||||||
"line": "Viiva",
|
"line": "Viiva",
|
||||||
|
"freedraw": "Piirrä",
|
||||||
"text": "Teksti",
|
"text": "Teksti",
|
||||||
"library": "Kirjasto",
|
"library": "Kirjasto",
|
||||||
"lock": "Pidä valittu työkalu aktiivisena piirron jälkeen"
|
"lock": "Pidä valittu työkalu aktiivisena piirron jälkeen"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Klikkaa piirtääksesi useampi piste, raahaa piirtääksesi yksittäinen viiva",
|
"linearElement": "Klikkaa piirtääksesi useampi piste, raahaa piirtääksesi yksittäinen viiva",
|
||||||
"freeDraw": "Paina ja raahaa, päästä irti kun olet valmis",
|
"freeDraw": "Paina ja raahaa, päästä irti kun olet valmis",
|
||||||
"text": "Vinkki: voit myös lisätä tekstiä kaksoisnapsauttamalla mihin tahansa valintatyökalulla",
|
"text": "Vinkki: voit myös lisätä tekstiä kaksoisnapsauttamalla mihin tahansa valintatyökalulla",
|
||||||
|
"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ä",
|
"linearElementMulti": "Lopeta klikkaamalla viimeistä pistettä, painamalla Escape- tai Enter-näppäintä",
|
||||||
"lockAngle": "Voit rajoittaa kulmaa pitämällä SHIFT-näppäintä alaspainettuna",
|
"lockAngle": "Voit rajoittaa kulmaa pitämällä SHIFT-näppäintä alaspainettuna",
|
||||||
"resize": "Voit rajoittaa mittasuhteet pitämällä SHIFT-näppäintä alaspainettuna kun muutat kokoa, pidä ALT-näppäintä alaspainettuna muuttaaksesi kokoa keskipisteen suhteen",
|
"resize": "Voit rajoittaa mittasuhteet pitämällä SHIFT-näppäintä alaspainettuna kun muutat kokoa, pidä ALT-näppäintä alaspainettuna muuttaaksesi kokoa keskipisteen suhteen",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Virhe"
|
"title": "Virhe"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Tallenna levylle",
|
||||||
|
"disk_details": "Vie työn tiedot tiedostoon, josta sen voi tuoda myöhemmin.",
|
||||||
|
"disk_button": "Tallenna tiedostoon",
|
||||||
|
"link_title": "Jaettava linkki",
|
||||||
|
"link_details": "Vie vain luku -linkkinä.",
|
||||||
|
"link_button": "Vie linkkinä",
|
||||||
|
"excalidrawplus_description": "Tallenna teos Excalidraw+ tilaan.",
|
||||||
|
"excalidrawplus_button": "Vie",
|
||||||
|
"excalidrawplus_exportError": "Ei voitu viedä Excalidraw+-palveluun tällä hetkellä..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Lue blogiamme",
|
"blog": "Lue blogiamme",
|
||||||
"click": "klikkaa",
|
"click": "klikkaa",
|
||||||
"curvedArrow": "Kaareva nuoli",
|
"curvedArrow": "Kaareva nuoli",
|
||||||
"curvedLine": "Kaareva viiva",
|
"curvedLine": "Kaareva viiva",
|
||||||
"documentation": "Käyttöohjeet",
|
"documentation": "Käyttöohjeet",
|
||||||
|
"doubleClick": "kaksoisnapsautus",
|
||||||
"drag": "vedä",
|
"drag": "vedä",
|
||||||
"editor": "Muokkausohjelma",
|
"editor": "Muokkausohjelma",
|
||||||
|
"editSelectedShape": "Muokkaa valittua muotoa (teksti/nuoli/viiva)",
|
||||||
"github": "Löysitkö ongelman? Kerro meille",
|
"github": "Löysitkö ongelman? Kerro meille",
|
||||||
"howto": "Seuraa oppaitamme",
|
"howto": "Seuraa oppaitamme",
|
||||||
"or": "tai",
|
"or": "tai",
|
||||||
"preventBinding": "Estä nuolten kiinnitys",
|
"preventBinding": "Estä nuolten kiinnitys",
|
||||||
"shapes": "Muodot",
|
"shapes": "Muodot",
|
||||||
"shortcuts": "Pikanäppäimet",
|
"shortcuts": "Pikanäppäimet",
|
||||||
"textFinish": "Lopeta muokkaus (teksti)",
|
"textFinish": "Lopeta muokkaus (tekstieditori)",
|
||||||
"textNewLine": "Lisää uusi rivi (teksti)",
|
"textNewLine": "Lisää uusi rivi (tekstieditori)",
|
||||||
"title": "Ohjeet",
|
"title": "Ohjeet",
|
||||||
"view": "Näkymä",
|
"view": "Näkymä",
|
||||||
"zoomToFit": "Näytä kaikki elementit",
|
"zoomToFit": "Näytä kaikki elementit",
|
||||||
|
|||||||
+37
-13
@@ -16,10 +16,14 @@
|
|||||||
"delete": "Supprimer",
|
"delete": "Supprimer",
|
||||||
"copyStyles": "Copier les styles",
|
"copyStyles": "Copier les styles",
|
||||||
"pasteStyles": "Coller les styles",
|
"pasteStyles": "Coller les styles",
|
||||||
"stroke": "Contour",
|
"stroke": "Trait",
|
||||||
"background": "Arrière-plan",
|
"background": "Arrière-plan",
|
||||||
"fill": "Remplissage",
|
"fill": "Remplissage",
|
||||||
"strokeWidth": "Largeur du trait",
|
"strokeWidth": "Largeur du trait",
|
||||||
|
"strokeShape": "Forme du trait",
|
||||||
|
"strokeShape_gel": "Stylo à bille",
|
||||||
|
"strokeShape_fountain": "Stylo-plume",
|
||||||
|
"strokeShape_brush": "Pinceau",
|
||||||
"strokeStyle": "Style du trait",
|
"strokeStyle": "Style du trait",
|
||||||
"strokeStyle_solid": "Plein",
|
"strokeStyle_solid": "Plein",
|
||||||
"strokeStyle_dashed": "Tirets",
|
"strokeStyle_dashed": "Tirets",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Taille de la police",
|
"fontSize": "Taille de la police",
|
||||||
"fontFamily": "Police",
|
"fontFamily": "Police",
|
||||||
"onlySelected": "Uniquement la sélection",
|
"onlySelected": "Uniquement la sélection",
|
||||||
"withBackground": "Avec arrière-plan",
|
"withBackground": "Arrière-plan",
|
||||||
"exportEmbedScene": "Intégrer la scène au fichier exporté",
|
"exportEmbedScene": "Intégrer la scène",
|
||||||
"exportEmbedScene_details": "Les données de scène seront enregistrées dans le fichier PNG/SVG exporté, afin que la scène puisse être restaurée à partir de celui-ci.\nCela augmentera la taille du fichier exporté.",
|
"exportEmbedScene_details": "Les données de scène seront enregistrées dans le fichier PNG/SVG exporté, afin que la scène puisse être restaurée à partir de celui-ci.\nCela augmentera la taille du fichier exporté.",
|
||||||
"addWatermark": "Ajouter \"Fait avec Excalidraw\"",
|
"addWatermark": "Ajouter \"Fait avec Excalidraw\"",
|
||||||
"handDrawn": "À main levée",
|
"handDrawn": "À main levée",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Retourner verticalement",
|
"flipVertical": "Retourner verticalement",
|
||||||
"viewMode": "Mode présentation",
|
"viewMode": "Mode présentation",
|
||||||
"toggleExportColorScheme": "Activer/Désactiver l'export du thème de couleur",
|
"toggleExportColorScheme": "Activer/Désactiver l'export du thème de couleur",
|
||||||
"share": "Partager"
|
"share": "Partager",
|
||||||
|
"showStroke": "Afficher le sélecteur de couleur de trait",
|
||||||
|
"showBackground": "Afficher le sélecteur de couleur d'arrière-plan",
|
||||||
|
"toggleTheme": "Changer le thème"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Réinitialiser le canevas",
|
"clearReset": "Réinitialiser le canevas",
|
||||||
|
"exportJSON": "Exporter comme fichier",
|
||||||
|
"exportImage": "Enregistrer comme image",
|
||||||
"export": "Exporter",
|
"export": "Exporter",
|
||||||
"exportToPng": "Exporter en PNG",
|
"exportToPng": "Enregistrer en PNG",
|
||||||
"exportToSvg": "Exporter en SVG",
|
"exportToSvg": "Enregistrer en SVG",
|
||||||
"copyToClipboard": "Copier dans le presse-papier",
|
"copyToClipboard": "Copier dans le presse-papier",
|
||||||
"copyPngToClipboard": "Copier le PNG vers le presse-papier",
|
"copyPngToClipboard": "Copier le PNG dans le presse-papier",
|
||||||
"scale": "Échelle",
|
"scale": "Échelle",
|
||||||
"save": "Sauvegarder",
|
"save": "Enregistrer dans le fichier actuel",
|
||||||
"saveAs": "Enregistrer sous",
|
"saveAs": "Enregistrer sous",
|
||||||
"load": "Ouvrir",
|
"load": "Ouvrir",
|
||||||
"getShareableLink": "Obtenir un lien de partage",
|
"getShareableLink": "Obtenir un lien de partage",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Sélection",
|
"selection": "Sélection",
|
||||||
"freedraw": "Dessin libre",
|
|
||||||
"rectangle": "Rectangle",
|
"rectangle": "Rectangle",
|
||||||
"diamond": "Losange",
|
"diamond": "Losange",
|
||||||
"ellipse": "Ellipse",
|
"ellipse": "Ellipse",
|
||||||
"arrow": "Flèche",
|
"arrow": "Flèche",
|
||||||
"line": "Ligne",
|
"line": "Ligne",
|
||||||
|
"freedraw": "Dessiner",
|
||||||
"text": "Texte",
|
"text": "Texte",
|
||||||
"library": "Bibliothèque",
|
"library": "Bibliothèque",
|
||||||
"lock": "Garder l'outil sélectionné actif après le dessin"
|
"lock": "Garder l'outil sélectionné actif après le dessin"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Cliquez pour démarrer plusieurs points, faites glisser pour une seule ligne",
|
"linearElement": "Cliquez pour démarrer plusieurs points, faites glisser pour une seule ligne",
|
||||||
"freeDraw": "Cliquez et faites glissez, relâchez quand vous avez terminé",
|
"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",
|
"text": "Astuce : vous pouvez aussi ajouter du texte en double-cliquant n'importe où avec l'outil de sélection",
|
||||||
|
"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",
|
"linearElementMulti": "Cliquez sur le dernier point ou appuyez sur Échap ou Entrée pour terminer",
|
||||||
"lockAngle": "Vous pouvez restreindre l'angle en maintenant MAJ",
|
"lockAngle": "Vous pouvez restreindre l'angle en maintenant MAJ",
|
||||||
"resize": "Vous pouvez conserver les proportions en maintenant la touche MAJ pendant le redimensionnement,\nmaintenez la touche ALT pour redimensionner par rapport au centre",
|
"resize": "Vous pouvez conserver les proportions en maintenant la touche MAJ pendant le redimensionnement,\nmaintenez la touche ALT pour redimensionner par rapport au centre",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Erreur"
|
"title": "Erreur"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Enregistrer sur le disque",
|
||||||
|
"disk_details": "Exporter les données de la scène comme un fichier que vous pourrez importer ultérieurement.",
|
||||||
|
"disk_button": "Enregistrer comme fichier",
|
||||||
|
"link_title": "Lien partageable",
|
||||||
|
"link_details": "Exporter comme un lien en lecture seule.",
|
||||||
|
"link_button": "Exporter comme lien",
|
||||||
|
"excalidrawplus_description": "Enregistrer la scène dans votre espace de travail Excalidraw+.",
|
||||||
|
"excalidrawplus_button": "Exporter",
|
||||||
|
"excalidrawplus_exportError": "Impossible d'exporter vers Excalidraw+ pour le moment..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Lire notre blog",
|
"blog": "Lire notre blog",
|
||||||
"click": "clic",
|
"click": "clic",
|
||||||
"curvedArrow": "Flèche courbée",
|
"curvedArrow": "Flèche courbée",
|
||||||
"curvedLine": "Ligne courbée",
|
"curvedLine": "Ligne courbée",
|
||||||
"documentation": "Documentation",
|
"documentation": "Documentation",
|
||||||
|
"doubleClick": "double-clic",
|
||||||
"drag": "glisser",
|
"drag": "glisser",
|
||||||
"editor": "Éditeur",
|
"editor": "Éditeur",
|
||||||
|
"editSelectedShape": "Modifier la forme sélectionnée (texte/flèche/ligne)",
|
||||||
"github": "Problème trouvé ? Soumettre",
|
"github": "Problème trouvé ? Soumettre",
|
||||||
"howto": "Suivez nos guides",
|
"howto": "Suivez nos guides",
|
||||||
"or": "ou",
|
"or": "ou",
|
||||||
"preventBinding": "Empêcher la liaison de flèche",
|
"preventBinding": "Empêcher la liaison de flèche",
|
||||||
"shapes": "Formes",
|
"shapes": "Formes",
|
||||||
"shortcuts": "Raccourcis clavier",
|
"shortcuts": "Raccourcis clavier",
|
||||||
"textFinish": "Terminer l'édition (texte)",
|
"textFinish": "Terminer l'édition (éditeur de texte)",
|
||||||
"textNewLine": "Ajouter une nouvelle ligne (texte)",
|
"textNewLine": "Ajouter une nouvelle ligne (éditeur de texte)",
|
||||||
"title": "Aide",
|
"title": "Aide",
|
||||||
"view": "Affichage",
|
"view": "Affichage",
|
||||||
"zoomToFit": "Zoomer pour voir tous les éléments",
|
"zoomToFit": "Zoomer pour voir tous les éléments",
|
||||||
@@ -252,8 +276,8 @@
|
|||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"copyStyles": "Styles copiés.",
|
"copyStyles": "Styles copiés.",
|
||||||
"copyToClipboard": "Copié vers le presse-papiers.",
|
"copyToClipboard": "Copié dans le presse-papier.",
|
||||||
"copyToClipboardAsPng": "{{exportSelection}} copié dans le presse-papiers en PNG\n({{exportColorScheme}})",
|
"copyToClipboardAsPng": "{{exportSelection}} copié dans le presse-papier en PNG\n({{exportColorScheme}})",
|
||||||
"fileSaved": "Fichier enregistré.",
|
"fileSaved": "Fichier enregistré.",
|
||||||
"fileSavedToFilename": "Enregistré sous {filename}",
|
"fileSavedToFilename": "Enregistré sous {filename}",
|
||||||
"canvas": "canevas",
|
"canvas": "canevas",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "רקע",
|
"background": "רקע",
|
||||||
"fill": "מילוי",
|
"fill": "מילוי",
|
||||||
"strokeWidth": "עובי קו מתאר",
|
"strokeWidth": "עובי קו מתאר",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "סגנון קו המתאר",
|
"strokeStyle": "סגנון קו המתאר",
|
||||||
"strokeStyle_solid": "מלא",
|
"strokeStyle_solid": "מלא",
|
||||||
"strokeStyle_dashed": "מקווקו",
|
"strokeStyle_dashed": "מקווקו",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "גודל גופן",
|
"fontSize": "גודל גופן",
|
||||||
"fontFamily": "סוג הגופן",
|
"fontFamily": "סוג הגופן",
|
||||||
"onlySelected": "רק מה שנבחר",
|
"onlySelected": "רק מה שנבחר",
|
||||||
"withBackground": "עם רקע",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "שלב את התצוגה בקובץ המיוצא",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "מידע התצוגה יישמר לקובץ המיוצא מסוג PNG/SVG כך שיהיה ניתן לשחזרה ממנו.\nהפעולה תגדיל את גודל הקובץ המיוצא.",
|
"exportEmbedScene_details": "מידע התצוגה יישמר לקובץ המיוצא מסוג PNG/SVG כך שיהיה ניתן לשחזרה ממנו.\nהפעולה תגדיל את גודל הקובץ המיוצא.",
|
||||||
"addWatermark": "הוסף \"נוצר באמצעות Excalidraw\"",
|
"addWatermark": "הוסף \"נוצר באמצעות Excalidraw\"",
|
||||||
"handDrawn": "כתב יד",
|
"handDrawn": "כתב יד",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "",
|
"flipVertical": "",
|
||||||
"viewMode": "מצב תצוגה",
|
"viewMode": "מצב תצוגה",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "",
|
||||||
"share": ""
|
"share": "",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "אפס את הלוח",
|
"clearReset": "אפס את הלוח",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "ייצא",
|
"export": "ייצא",
|
||||||
"exportToPng": "יצא ל PNG",
|
"exportToPng": "יצא ל PNG",
|
||||||
"exportToSvg": "יצא ל SVG",
|
"exportToSvg": "יצא ל SVG",
|
||||||
"copyToClipboard": "העתק ללוח",
|
"copyToClipboard": "העתק ללוח",
|
||||||
"copyPngToClipboard": "העתק PNG ללוח",
|
"copyPngToClipboard": "העתק PNG ללוח",
|
||||||
"scale": "קנה מידה",
|
"scale": "קנה מידה",
|
||||||
"save": "שמור",
|
"save": "",
|
||||||
"saveAs": "שמירה בשם",
|
"saveAs": "שמירה בשם",
|
||||||
"load": "טען",
|
"load": "טען",
|
||||||
"getShareableLink": "קבל קישור לשיתוף",
|
"getShareableLink": "קבל קישור לשיתוף",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "בחירה",
|
"selection": "בחירה",
|
||||||
"freedraw": "ציור חופשי",
|
|
||||||
"rectangle": "מרובע",
|
"rectangle": "מרובע",
|
||||||
"diamond": "מעוין",
|
"diamond": "מעוין",
|
||||||
"ellipse": "אליפסה",
|
"ellipse": "אליפסה",
|
||||||
"arrow": "חץ",
|
"arrow": "חץ",
|
||||||
"line": "קו",
|
"line": "קו",
|
||||||
|
"freedraw": "",
|
||||||
"text": "טקסט",
|
"text": "טקסט",
|
||||||
"library": "ספריה",
|
"library": "ספריה",
|
||||||
"lock": "השאר את הכלי הנבחר פעיל גם לאחר סיום הציור"
|
"lock": "השאר את הכלי הנבחר פעיל גם לאחר סיום הציור"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "הקלק בשביל לבחור נקודות מרובות, גרור בשביל קו בודד",
|
"linearElement": "הקלק בשביל לבחור נקודות מרובות, גרור בשביל קו בודד",
|
||||||
"freeDraw": "לחץ וגרור, שחרר כשסיימת",
|
"freeDraw": "לחץ וגרור, שחרר כשסיימת",
|
||||||
"text": "טיפ: אפשר להוסיף טקסט על ידי לחיצה כפולה בכל מקום עם כלי הבחירה",
|
"text": "טיפ: אפשר להוסיף טקסט על ידי לחיצה כפולה בכל מקום עם כלי הבחירה",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "הקלק על הנקודה האחרונה או הקש Escape או Enter לסיום",
|
"linearElementMulti": "הקלק על הנקודה האחרונה או הקש Escape או Enter לסיום",
|
||||||
"lockAngle": "אתה יכול להגביל זווית ע״י לחיצה על SHIFT",
|
"lockAngle": "אתה יכול להגביל זווית ע״י לחיצה על SHIFT",
|
||||||
"resize": "ניתן להגביל פרופורציות על ידי לחיצה על SHIFT תוך כדי שינוי גודל,\nהחזק ALT בשביל לשנות גודל ביחס למרכז",
|
"resize": "ניתן להגביל פרופורציות על ידי לחיצה על SHIFT תוך כדי שינוי גודל,\nהחזק ALT בשביל לשנות גודל ביחס למרכז",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "שגיאה"
|
"title": "שגיאה"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "קרא את הבלוג שלנו",
|
"blog": "קרא את הבלוג שלנו",
|
||||||
"click": "קליק",
|
"click": "קליק",
|
||||||
"curvedArrow": "",
|
"curvedArrow": "",
|
||||||
"curvedLine": "",
|
"curvedLine": "",
|
||||||
"documentation": "תיעוד",
|
"documentation": "תיעוד",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "לגרור",
|
"drag": "לגרור",
|
||||||
"editor": "עורך",
|
"editor": "עורך",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "מצאת בעיה? דווח",
|
"github": "מצאת בעיה? דווח",
|
||||||
"howto": "עקוב אחר המדריכים שלנו",
|
"howto": "עקוב אחר המדריכים שלנו",
|
||||||
"or": "או",
|
"or": "או",
|
||||||
"preventBinding": "",
|
"preventBinding": "",
|
||||||
"shapes": "צורות",
|
"shapes": "צורות",
|
||||||
"shortcuts": "קיצורי מקלדת",
|
"shortcuts": "קיצורי מקלדת",
|
||||||
"textFinish": "סיים עריכה (טקסט)",
|
"textFinish": "",
|
||||||
"textNewLine": "הוסף שורה חדשה (טקסט)",
|
"textNewLine": "",
|
||||||
"title": "עזרה",
|
"title": "עזרה",
|
||||||
"view": "תצוגה",
|
"view": "תצוגה",
|
||||||
"zoomToFit": "",
|
"zoomToFit": "",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "पृष्ठभूमि",
|
"background": "पृष्ठभूमि",
|
||||||
"fill": "भरें",
|
"fill": "भरें",
|
||||||
"strokeWidth": "रेखा की चौड़ाई",
|
"strokeWidth": "रेखा की चौड़ाई",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "स्ट्रोक का आकार",
|
"strokeStyle": "स्ट्रोक का आकार",
|
||||||
"strokeStyle_solid": "ठोस",
|
"strokeStyle_solid": "ठोस",
|
||||||
"strokeStyle_dashed": "डैश",
|
"strokeStyle_dashed": "डैश",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "फ़ॉन्ट का आकार",
|
"fontSize": "फ़ॉन्ट का आकार",
|
||||||
"fontFamily": "फ़ॉन्ट का परिवार",
|
"fontFamily": "फ़ॉन्ट का परिवार",
|
||||||
"onlySelected": "केवल चयनित",
|
"onlySelected": "केवल चयनित",
|
||||||
"withBackground": "बैकग्राउंड के साथ",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "निर्यात एम्बेड दृश्य",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "निर्यात एम्बेड दृश्य विवरण",
|
"exportEmbedScene_details": "निर्यात एम्बेड दृश्य विवरण",
|
||||||
"addWatermark": "ऐड \"मेड विथ एक्सकैलिडराव\"",
|
"addWatermark": "ऐड \"मेड विथ एक्सकैलिडराव\"",
|
||||||
"handDrawn": "हाथ से बनाया हुआ",
|
"handDrawn": "हाथ से बनाया हुआ",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "",
|
"flipVertical": "",
|
||||||
"viewMode": "",
|
"viewMode": "",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "",
|
||||||
"share": ""
|
"share": "",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "कैनवास रीसेट करें",
|
"clearReset": "कैनवास रीसेट करें",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "निर्यात",
|
"export": "निर्यात",
|
||||||
"exportToPng": "पीएनजी के रूप में निर्यात करे",
|
"exportToPng": "पीएनजी के रूप में निर्यात करे",
|
||||||
"exportToSvg": "Svg के रूप में निर्यात करे",
|
"exportToSvg": "Svg के रूप में निर्यात करे",
|
||||||
"copyToClipboard": "क्लिपबोर्ड पर प्रतिलिपि बनाएँ",
|
"copyToClipboard": "क्लिपबोर्ड पर प्रतिलिपि बनाएँ",
|
||||||
"copyPngToClipboard": "क्लिपबोर्ड पर कॉपी करें,पीएनजी के रूप में",
|
"copyPngToClipboard": "क्लिपबोर्ड पर कॉपी करें,पीएनजी के रूप में",
|
||||||
"scale": "पैमाना",
|
"scale": "पैमाना",
|
||||||
"save": "सहेजें",
|
"save": "",
|
||||||
"saveAs": "सेव करे इस तरह",
|
"saveAs": "सेव करे इस तरह",
|
||||||
"load": "लोड करें",
|
"load": "लोड करें",
|
||||||
"getShareableLink": "साझा करने योग्य लिंक प्राप्त करें",
|
"getShareableLink": "साझा करने योग्य लिंक प्राप्त करें",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "चयन",
|
"selection": "चयन",
|
||||||
"freedraw": "मुफ्त ड्रा",
|
|
||||||
"rectangle": "आयात",
|
"rectangle": "आयात",
|
||||||
"diamond": "तिर्यग्वर्ग",
|
"diamond": "तिर्यग्वर्ग",
|
||||||
"ellipse": "दीर्घवृत्त",
|
"ellipse": "दीर्घवृत्त",
|
||||||
"arrow": "तीर",
|
"arrow": "तीर",
|
||||||
"line": "रेखा",
|
"line": "रेखा",
|
||||||
|
"freedraw": "",
|
||||||
"text": "पाठ",
|
"text": "पाठ",
|
||||||
"library": "लाइब्रेरी",
|
"library": "लाइब्रेरी",
|
||||||
"lock": "ड्राइंग के बाद चयनित टूल को सक्रिय रखें"
|
"lock": "ड्राइंग के बाद चयनित टूल को सक्रिय रखें"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "कई बिंदुओं को शुरू करने के लिए क्लिक करें, सिंगल लाइन के लिए खींचें",
|
"linearElement": "कई बिंदुओं को शुरू करने के लिए क्लिक करें, सिंगल लाइन के लिए खींचें",
|
||||||
"freeDraw": "क्लिक करें और खींचें। समाप्त करने के लिए, छोड़ो",
|
"freeDraw": "क्लिक करें और खींचें। समाप्त करने के लिए, छोड़ो",
|
||||||
"text": "आप चयन टूल से कहीं भी डबल-क्लिक करके टेक्स्ट जोड़ सकते हैं",
|
"text": "आप चयन टूल से कहीं भी डबल-क्लिक करके टेक्स्ट जोड़ सकते हैं",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "अंतिम बिंदु पर क्लिक करें या समाप्त होने के लिए एस्केप या एंटर दबाएं",
|
"linearElementMulti": "अंतिम बिंदु पर क्लिक करें या समाप्त होने के लिए एस्केप या एंटर दबाएं",
|
||||||
"lockAngle": "आप घूर्णन करते समय SHIFT पकड़कर कोणों को मोड़ सकते हैं",
|
"lockAngle": "आप घूर्णन करते समय SHIFT पकड़कर कोणों को मोड़ सकते हैं",
|
||||||
"resize": "आकार बदलते समय आप SHIFT को पकड़ कर अनुपात में कमी कर सकते हैं,\nकेंद्र से आकार बदलने के लिए ALT दबाए रखें",
|
"resize": "आकार बदलते समय आप SHIFT को पकड़ कर अनुपात में कमी कर सकते हैं,\nकेंद्र से आकार बदलने के लिए ALT दबाए रखें",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "गलती"
|
"title": "गलती"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "हमारा ब्लॉग पढे",
|
"blog": "हमारा ब्लॉग पढे",
|
||||||
"click": "क्लिक करें",
|
"click": "क्लिक करें",
|
||||||
"curvedArrow": "वक्र तीर",
|
"curvedArrow": "वक्र तीर",
|
||||||
"curvedLine": "वक्र रेखा",
|
"curvedLine": "वक्र रेखा",
|
||||||
"documentation": "",
|
"documentation": "",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "खींचें",
|
"drag": "खींचें",
|
||||||
"editor": "संपादक",
|
"editor": "संपादक",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "मुद्दा मिला? प्रस्तुत करें",
|
"github": "मुद्दा मिला? प्रस्तुत करें",
|
||||||
"howto": "हमारे गाइड का पालन करें",
|
"howto": "हमारे गाइड का पालन करें",
|
||||||
"or": "या",
|
"or": "या",
|
||||||
"preventBinding": "तीर बंधन रोकें",
|
"preventBinding": "तीर बंधन रोकें",
|
||||||
"shapes": "आकृतियाँ",
|
"shapes": "आकृतियाँ",
|
||||||
"shortcuts": "कीबोर्ड के शॉर्टकट्स",
|
"shortcuts": "कीबोर्ड के शॉर्टकट्स",
|
||||||
"textFinish": "संपादन समाप्त करें (पाठ)",
|
"textFinish": "",
|
||||||
"textNewLine": "नई पंक्ति जोड़ें (पाठ)",
|
"textNewLine": "",
|
||||||
"title": "मदद",
|
"title": "मदद",
|
||||||
"view": "दृश्य",
|
"view": "दृश्य",
|
||||||
"zoomToFit": "सभी तत्वों को फिट करने के लिए ज़ूम करें",
|
"zoomToFit": "सभी तत्वों को फिट करने के लिए ज़ूम करें",
|
||||||
|
|||||||
+29
-5
@@ -20,6 +20,10 @@
|
|||||||
"background": "Háttér",
|
"background": "Háttér",
|
||||||
"fill": "Kitöltés",
|
"fill": "Kitöltés",
|
||||||
"strokeWidth": "Körvonal vastagsága",
|
"strokeWidth": "Körvonal vastagsága",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "Körvonal stílusa",
|
"strokeStyle": "Körvonal stílusa",
|
||||||
"strokeStyle_solid": "Kitöltött",
|
"strokeStyle_solid": "Kitöltött",
|
||||||
"strokeStyle_dashed": "Szaggatott",
|
"strokeStyle_dashed": "Szaggatott",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Betűméret",
|
"fontSize": "Betűméret",
|
||||||
"fontFamily": "Betűkészlet család",
|
"fontFamily": "Betűkészlet család",
|
||||||
"onlySelected": "Csak a kijelölt",
|
"onlySelected": "Csak a kijelölt",
|
||||||
"withBackground": "Háttérrel",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "Jelenet beágyazása az exportált fájlba",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "A jelenetet leíró adatok hozzá lesznek adva a PNG/SVG fájlhoz, így a jelenetet vissza lehet majd tölteni belőle. Ez megnöveli a fájl méretét.",
|
"exportEmbedScene_details": "A jelenetet leíró adatok hozzá lesznek adva a PNG/SVG fájlhoz, így a jelenetet vissza lehet majd tölteni belőle. Ez megnöveli a fájl méretét.",
|
||||||
"addWatermark": "Add hozzá, hogy \"Excalidraw-val készült\"",
|
"addWatermark": "Add hozzá, hogy \"Excalidraw-val készült\"",
|
||||||
"handDrawn": "Kézzel rajzolt",
|
"handDrawn": "Kézzel rajzolt",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "",
|
"flipVertical": "",
|
||||||
"viewMode": "",
|
"viewMode": "",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "",
|
||||||
"share": ""
|
"share": "",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Vászon törlése",
|
"clearReset": "Vászon törlése",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "Exportálás",
|
"export": "Exportálás",
|
||||||
"exportToPng": "Exportálás PNG-be",
|
"exportToPng": "Exportálás PNG-be",
|
||||||
"exportToSvg": "Exportálás SVG-be",
|
"exportToSvg": "Exportálás SVG-be",
|
||||||
"copyToClipboard": "Vágólapra másolás",
|
"copyToClipboard": "Vágólapra másolás",
|
||||||
"copyPngToClipboard": "PNG másolása a vágólapra",
|
"copyPngToClipboard": "PNG másolása a vágólapra",
|
||||||
"scale": "Nagyítás",
|
"scale": "Nagyítás",
|
||||||
"save": "Mentés",
|
"save": "",
|
||||||
"saveAs": "Mentés másként",
|
"saveAs": "Mentés másként",
|
||||||
"load": "Betöltés",
|
"load": "Betöltés",
|
||||||
"getShareableLink": "Megosztható link létrehozása",
|
"getShareableLink": "Megosztható link létrehozása",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Kijelölés",
|
"selection": "Kijelölés",
|
||||||
"freedraw": "Szabadkézi rajz",
|
|
||||||
"rectangle": "Téglalap",
|
"rectangle": "Téglalap",
|
||||||
"diamond": "Rombusz",
|
"diamond": "Rombusz",
|
||||||
"ellipse": "Ellipszis",
|
"ellipse": "Ellipszis",
|
||||||
"arrow": "Nyíl",
|
"arrow": "Nyíl",
|
||||||
"line": "Vonal",
|
"line": "Vonal",
|
||||||
|
"freedraw": "",
|
||||||
"text": "Szöveg",
|
"text": "Szöveg",
|
||||||
"library": "Könyvtár",
|
"library": "Könyvtár",
|
||||||
"lock": "Rajzolás után az aktív eszközt tartsa kijelölve"
|
"lock": "Rajzolás után az aktív eszközt tartsa kijelölve"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Kattintással görbe, az eger húzásával pedig egyenes nyilat rajzolhatsz",
|
"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",
|
"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",
|
"text": "Tipp: A kijelölés eszközzel a dupla kattintás új szöveget hoz létre",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "Kattints a következő ív pozíciójára, vagy fejezd be a nyilat az Escape vagy Enter megnyomásával",
|
"linearElementMulti": "Kattints a következő ív pozíciójára, vagy fejezd be a nyilat az Escape vagy Enter megnyomásával",
|
||||||
"lockAngle": "A SHIFT billentyű lenyomva tartásával korlátozhatja forgatás szögét",
|
"lockAngle": "A SHIFT billentyű lenyomva tartásával korlátozhatja forgatás szögét",
|
||||||
"resize": "A SHIFT billentyű lenyomva tartásával az átméretezés megtartja az arányokat,\naz ALT lenyomva tartásával pedig a középpont egy helyben marad",
|
"resize": "A SHIFT billentyű lenyomva tartásával az átméretezés megtartja az arányokat,\naz ALT lenyomva tartásával pedig a középpont egy helyben marad",
|
||||||
@@ -210,14 +221,27 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Hiba"
|
"title": "Hiba"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "",
|
"blog": "",
|
||||||
"click": "",
|
"click": "",
|
||||||
"curvedArrow": "",
|
"curvedArrow": "",
|
||||||
"curvedLine": "",
|
"curvedLine": "",
|
||||||
"documentation": "",
|
"documentation": "",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "",
|
"drag": "",
|
||||||
"editor": "",
|
"editor": "",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "",
|
"github": "",
|
||||||
"howto": "",
|
"howto": "",
|
||||||
"or": "",
|
"or": "",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Latar",
|
"background": "Latar",
|
||||||
"fill": "Isian",
|
"fill": "Isian",
|
||||||
"strokeWidth": "Lebar guratan",
|
"strokeWidth": "Lebar guratan",
|
||||||
|
"strokeShape": "Bentuk guratan",
|
||||||
|
"strokeShape_gel": "Pena gel",
|
||||||
|
"strokeShape_fountain": "Pena gunung",
|
||||||
|
"strokeShape_brush": "Kuas",
|
||||||
"strokeStyle": "Gaya guratan",
|
"strokeStyle": "Gaya guratan",
|
||||||
"strokeStyle_solid": "Padat",
|
"strokeStyle_solid": "Padat",
|
||||||
"strokeStyle_dashed": "Putus-putus",
|
"strokeStyle_dashed": "Putus-putus",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Ukuran font",
|
"fontSize": "Ukuran font",
|
||||||
"fontFamily": "Jenis font",
|
"fontFamily": "Jenis font",
|
||||||
"onlySelected": "Hanya yang Dipilih",
|
"onlySelected": "Hanya yang Dipilih",
|
||||||
"withBackground": "Dengan latar",
|
"withBackground": "Latar",
|
||||||
"exportEmbedScene": "Sematkan pemandangan ke dalam file yang diekspor",
|
"exportEmbedScene": "Sematkan pemandangan",
|
||||||
"exportEmbedScene_details": "Data pemandangan akan disimpan dalam file PNG/SVG yang diekspor, sehingga pemandangan itu dapat dipulihkan darinya.\nAkan membesarkan ukuran file yang diekspor.",
|
"exportEmbedScene_details": "Data pemandangan akan disimpan dalam file PNG/SVG yang diekspor, sehingga pemandangan itu dapat dipulihkan darinya.\nAkan membesarkan ukuran file yang diekspor.",
|
||||||
"addWatermark": "Tambahkan \"Dibuat dengan Excalidraw\"",
|
"addWatermark": "Tambahkan \"Dibuat dengan Excalidraw\"",
|
||||||
"handDrawn": "Tulisan tangan",
|
"handDrawn": "Tulisan tangan",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Balikkan vertikal",
|
"flipVertical": "Balikkan vertikal",
|
||||||
"viewMode": "Mode tampilan",
|
"viewMode": "Mode tampilan",
|
||||||
"toggleExportColorScheme": "Ubah skema warna ekspor",
|
"toggleExportColorScheme": "Ubah skema warna ekspor",
|
||||||
"share": "Bagikan"
|
"share": "Bagikan",
|
||||||
|
"showStroke": "Tampilkan garis pengambil warna",
|
||||||
|
"showBackground": "Tampilkan latar pengambil warna",
|
||||||
|
"toggleTheme": "Ubah tema"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Setel Ulang Kanvas",
|
"clearReset": "Setel Ulang Kanvas",
|
||||||
|
"exportJSON": "Ekspor ke file",
|
||||||
|
"exportImage": "Simpan gambar",
|
||||||
"export": "Ekspor",
|
"export": "Ekspor",
|
||||||
"exportToPng": "Ekspor ke PNG",
|
"exportToPng": "Ekspor ke PNG",
|
||||||
"exportToSvg": "Ekspor ke SVG",
|
"exportToSvg": "Ekspor ke SVG",
|
||||||
"copyToClipboard": "Salin ke Papan Klip",
|
"copyToClipboard": "Salin ke Papan Klip",
|
||||||
"copyPngToClipboard": "Salin PNG ke papan klip",
|
"copyPngToClipboard": "Salin PNG ke papan klip",
|
||||||
"scale": "Skala",
|
"scale": "Skala",
|
||||||
"save": "Simpan",
|
"save": "Simpan ke file sekarang",
|
||||||
"saveAs": "Simpan sebagai",
|
"saveAs": "Simpan sebagai",
|
||||||
"load": "Muat",
|
"load": "Muat",
|
||||||
"getShareableLink": "Buat Tautan yang Bisa Dibagian",
|
"getShareableLink": "Buat Tautan yang Bisa Dibagian",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Pilihan",
|
"selection": "Pilihan",
|
||||||
"freedraw": "Menggambar bebas",
|
|
||||||
"rectangle": "Persegi",
|
"rectangle": "Persegi",
|
||||||
"diamond": "Berlian",
|
"diamond": "Berlian",
|
||||||
"ellipse": "Elips",
|
"ellipse": "Elips",
|
||||||
"arrow": "Panah",
|
"arrow": "Panah",
|
||||||
"line": "Garis",
|
"line": "Garis",
|
||||||
|
"freedraw": "Gambar",
|
||||||
"text": "Teks",
|
"text": "Teks",
|
||||||
"library": "Pustaka",
|
"library": "Pustaka",
|
||||||
"lock": "Biarkan alat yang dipilih aktif setelah menggambar"
|
"lock": "Biarkan alat yang dipilih aktif setelah menggambar"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Klik untuk memulai banyak poin, seret untuk satu baris",
|
"linearElement": "Klik untuk memulai banyak poin, seret untuk satu baris",
|
||||||
"freeDraw": "Klik dan seret, lepaskan jika Anda selesai",
|
"freeDraw": "Klik dan seret, lepaskan jika Anda selesai",
|
||||||
"text": "Tip: Anda juga dapat menambahkan teks dengan klik ganda di mana saja dengan alat pemilihan",
|
"text": "Tip: Anda juga dapat menambahkan teks dengan klik ganda di mana saja dengan alat pemilihan",
|
||||||
|
"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",
|
"linearElementMulti": "Klik pada titik akhir atau tekan Escape atau Enter untuk menyelesaikan",
|
||||||
"lockAngle": "Anda dapat menjaga sudut dengan menahan SHIFT",
|
"lockAngle": "Anda dapat menjaga sudut dengan menahan SHIFT",
|
||||||
"resize": "Anda dapat menjaga proposi dengan menekan SHIFT sambil mengubah ukuran,\ntekan AlT untuk mengubah ukuran dari tengah",
|
"resize": "Anda dapat menjaga proposi dengan menekan SHIFT sambil mengubah ukuran,\ntekan AlT untuk mengubah ukuran dari tengah",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Kesalahan"
|
"title": "Kesalahan"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Simpan ke disk",
|
||||||
|
"disk_details": "Ekspor data pemandangan ke file yang mana Anda dapat impor nanti.",
|
||||||
|
"disk_button": "Simpan ke file",
|
||||||
|
"link_title": "Tautan",
|
||||||
|
"link_details": "Ekspor sebagai tautan yang hanya dibaca.",
|
||||||
|
"link_button": "Ekspor ke tautan",
|
||||||
|
"excalidrawplus_description": "Simpan pemandangan ke ruang kerja Excalidraw+ Anda.",
|
||||||
|
"excalidrawplus_button": "Ekspor",
|
||||||
|
"excalidrawplus_exportError": "Tidak dapat ekspor ke Excalidraw+ saat ini..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Baca blog kami",
|
"blog": "Baca blog kami",
|
||||||
"click": "klik",
|
"click": "klik",
|
||||||
"curvedArrow": "Panah lengkung",
|
"curvedArrow": "Panah lengkung",
|
||||||
"curvedLine": "Garis lengkung",
|
"curvedLine": "Garis lengkung",
|
||||||
"documentation": "Dokumentasi",
|
"documentation": "Dokumentasi",
|
||||||
|
"doubleClick": "klik-ganda",
|
||||||
"drag": "seret",
|
"drag": "seret",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
|
"editSelectedShape": "Edit bentuk yang dipilih (teks/panah/garis)",
|
||||||
"github": "Menemukan masalah? Kirimkan",
|
"github": "Menemukan masalah? Kirimkan",
|
||||||
"howto": "Ikuti panduan kami",
|
"howto": "Ikuti panduan kami",
|
||||||
"or": "atau",
|
"or": "atau",
|
||||||
"preventBinding": "Cegah pengikatan panah",
|
"preventBinding": "Cegah pengikatan panah",
|
||||||
"shapes": "Bentuk",
|
"shapes": "Bentuk",
|
||||||
"shortcuts": "Pintasan keyboard",
|
"shortcuts": "Pintasan keyboard",
|
||||||
"textFinish": "Selesai mengedit (teks)",
|
"textFinish": "Selesai mengedit (editor teks)",
|
||||||
"textNewLine": "Tambahkan baris baru (teks)",
|
"textNewLine": "Tambahkan garis baru (editor teks)",
|
||||||
"title": "Bantuan",
|
"title": "Bantuan",
|
||||||
"view": "Tampilan",
|
"view": "Tampilan",
|
||||||
"zoomToFit": "Perbesar agar sesuai dengan semua elemen",
|
"zoomToFit": "Perbesar agar sesuai dengan semua elemen",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Sfondo",
|
"background": "Sfondo",
|
||||||
"fill": "Riempimento",
|
"fill": "Riempimento",
|
||||||
"strokeWidth": "Spessore del tratto",
|
"strokeWidth": "Spessore del tratto",
|
||||||
|
"strokeShape": "Forma del tratto",
|
||||||
|
"strokeShape_gel": "Penna gel",
|
||||||
|
"strokeShape_fountain": "Penna stilografica",
|
||||||
|
"strokeShape_brush": "Pennello",
|
||||||
"strokeStyle": "Stile del tratto",
|
"strokeStyle": "Stile del tratto",
|
||||||
"strokeStyle_solid": "Pieno",
|
"strokeStyle_solid": "Pieno",
|
||||||
"strokeStyle_dashed": "Tratteggiato",
|
"strokeStyle_dashed": "Tratteggiato",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Dimensione carattere",
|
"fontSize": "Dimensione carattere",
|
||||||
"fontFamily": "Carattere",
|
"fontFamily": "Carattere",
|
||||||
"onlySelected": "Solo selezionati",
|
"onlySelected": "Solo selezionati",
|
||||||
"withBackground": "Con sfondo",
|
"withBackground": "Sfondo",
|
||||||
"exportEmbedScene": "Incorpora la scena nel file esportato",
|
"exportEmbedScene": "Includi scena",
|
||||||
"exportEmbedScene_details": "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.",
|
"exportEmbedScene_details": "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.",
|
||||||
"addWatermark": "Aggiungi \"Creato con Excalidraw\"",
|
"addWatermark": "Aggiungi \"Creato con Excalidraw\"",
|
||||||
"handDrawn": "A mano libera",
|
"handDrawn": "A mano libera",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Capovolgi verticalmente",
|
"flipVertical": "Capovolgi verticalmente",
|
||||||
"viewMode": "Modalità visualizzazione",
|
"viewMode": "Modalità visualizzazione",
|
||||||
"toggleExportColorScheme": "Cambia lo schema di colori in esportazione",
|
"toggleExportColorScheme": "Cambia lo schema di colori in esportazione",
|
||||||
"share": "Condividi"
|
"share": "Condividi",
|
||||||
|
"showStroke": "Mostra selettore colore del tratto",
|
||||||
|
"showBackground": "Mostra selettore colore di sfondo",
|
||||||
|
"toggleTheme": "Cambia tema"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Svuota la tela",
|
"clearReset": "Svuota la tela",
|
||||||
|
"exportJSON": "Esporta su file",
|
||||||
|
"exportImage": "Salva come immagine",
|
||||||
"export": "Esporta",
|
"export": "Esporta",
|
||||||
"exportToPng": "Esporta come PNG",
|
"exportToPng": "Esporta come PNG",
|
||||||
"exportToSvg": "Esporta come SVG",
|
"exportToSvg": "Esporta come SVG",
|
||||||
"copyToClipboard": "Copia negli appunti",
|
"copyToClipboard": "Copia negli appunti",
|
||||||
"copyPngToClipboard": "Copia PNG negli appunti",
|
"copyPngToClipboard": "Copia PNG negli appunti",
|
||||||
"scale": "Scala",
|
"scale": "Scala",
|
||||||
"save": "Salva",
|
"save": "Salva sul file corrente",
|
||||||
"saveAs": "Salva con nome",
|
"saveAs": "Salva con nome",
|
||||||
"load": "Carica",
|
"load": "Carica",
|
||||||
"getShareableLink": "Ottieni link condivisibile",
|
"getShareableLink": "Ottieni link condivisibile",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Selezione",
|
"selection": "Selezione",
|
||||||
"freedraw": "Disegno libero",
|
|
||||||
"rectangle": "Rettangolo",
|
"rectangle": "Rettangolo",
|
||||||
"diamond": "Rombo",
|
"diamond": "Rombo",
|
||||||
"ellipse": "Ellisse",
|
"ellipse": "Ellisse",
|
||||||
"arrow": "Freccia",
|
"arrow": "Freccia",
|
||||||
"line": "Linea",
|
"line": "Linea",
|
||||||
|
"freedraw": "Disegno",
|
||||||
"text": "Testo",
|
"text": "Testo",
|
||||||
"library": "Libreria",
|
"library": "Libreria",
|
||||||
"lock": "Mantieni lo strumento selezionato attivo dopo aver disegnato"
|
"lock": "Mantieni lo strumento selezionato attivo dopo aver disegnato"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Clicca per iniziare una linea in più punti, trascina per singola linea",
|
"linearElement": "Clicca per iniziare una linea in più punti, trascina per singola linea",
|
||||||
"freeDraw": "Clicca e trascina, rilascia quando avrai finito",
|
"freeDraw": "Clicca e trascina, rilascia quando avrai finito",
|
||||||
"text": "Suggerimento: puoi anche aggiungere del testo facendo doppio clic ovunque con lo strumento di selezione",
|
"text": "Suggerimento: puoi anche aggiungere del testo facendo doppio clic ovunque con lo strumento di selezione",
|
||||||
|
"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",
|
"linearElementMulti": "Clicca sull'ultimo punto o premi Esc o Invio per finire",
|
||||||
"lockAngle": "Puoi limitare l'angolo tenendo premuto SHIFT",
|
"lockAngle": "Puoi limitare l'angolo tenendo premuto SHIFT",
|
||||||
"resize": "Per vincolare le proporzioni, tieni premuto MAIUSC durante il ridimensionamento;\nper ridimensionare dal centro, tieni premuto ALT",
|
"resize": "Per vincolare le proporzioni, tieni premuto MAIUSC durante il ridimensionamento;\nper ridimensionare dal centro, tieni premuto ALT",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Errore"
|
"title": "Errore"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Salva su disco",
|
||||||
|
"disk_details": "Esporta i dati della scena su file, dal quale potrai importare in seguito.",
|
||||||
|
"disk_button": "Salva su file",
|
||||||
|
"link_title": "Link condivisibile",
|
||||||
|
"link_details": "Esporta come link di sola lettura.",
|
||||||
|
"link_button": "Esporta come Link",
|
||||||
|
"excalidrawplus_description": "Salva la scena nel tuo spazio di lavoro Excalidraw+.",
|
||||||
|
"excalidrawplus_button": "Esporta",
|
||||||
|
"excalidrawplus_exportError": "Non è stato possibile esportare su Excalidraw+ al questo momento..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Leggi il nostro blog",
|
"blog": "Leggi il nostro blog",
|
||||||
"click": "click",
|
"click": "click",
|
||||||
"curvedArrow": "Freccia curva",
|
"curvedArrow": "Freccia curva",
|
||||||
"curvedLine": "Linea curva",
|
"curvedLine": "Linea curva",
|
||||||
"documentation": "Documentazione",
|
"documentation": "Documentazione",
|
||||||
|
"doubleClick": "doppio-click",
|
||||||
"drag": "trascina",
|
"drag": "trascina",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
|
"editSelectedShape": "Modifica la forma selezionata (testo/freccia/linea)",
|
||||||
"github": "Trovato un problema? Segnalalo",
|
"github": "Trovato un problema? Segnalalo",
|
||||||
"howto": "Segui le nostre guide",
|
"howto": "Segui le nostre guide",
|
||||||
"or": "oppure",
|
"or": "oppure",
|
||||||
"preventBinding": "Impedisci legame della freccia",
|
"preventBinding": "Impedisci legame della freccia",
|
||||||
"shapes": "Forme",
|
"shapes": "Forme",
|
||||||
"shortcuts": "Scorciatoie da tastiera",
|
"shortcuts": "Scorciatoie da tastiera",
|
||||||
"textFinish": "Termina la modifica (testo)",
|
"textFinish": "Completa la modifica (editor di testo)",
|
||||||
"textNewLine": "Aggiungi nuova riga (testo)",
|
"textNewLine": "Aggiungi nuova riga (editor di testo)",
|
||||||
"title": "Guida",
|
"title": "Guida",
|
||||||
"view": "Vista",
|
"view": "Vista",
|
||||||
"zoomToFit": "Adatta zoom per mostrare tutti gli elementi",
|
"zoomToFit": "Adatta zoom per mostrare tutti gli elementi",
|
||||||
|
|||||||
+37
-13
@@ -20,6 +20,10 @@
|
|||||||
"background": "背景の色",
|
"background": "背景の色",
|
||||||
"fill": "塗りつぶし",
|
"fill": "塗りつぶし",
|
||||||
"strokeWidth": "線の幅",
|
"strokeWidth": "線の幅",
|
||||||
|
"strokeShape": "ストロークの形状",
|
||||||
|
"strokeShape_gel": "ジェルペン",
|
||||||
|
"strokeShape_fountain": "噴水ペン",
|
||||||
|
"strokeShape_brush": "ブラシペン",
|
||||||
"strokeStyle": "線の種類",
|
"strokeStyle": "線の種類",
|
||||||
"strokeStyle_solid": "実線",
|
"strokeStyle_solid": "実線",
|
||||||
"strokeStyle_dashed": "破線",
|
"strokeStyle_dashed": "破線",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "フォントの大きさ",
|
"fontSize": "フォントの大きさ",
|
||||||
"fontFamily": "フォントの種類",
|
"fontFamily": "フォントの種類",
|
||||||
"onlySelected": "選択中のみ",
|
"onlySelected": "選択中のみ",
|
||||||
"withBackground": "背景を含める",
|
"withBackground": "背景",
|
||||||
"exportEmbedScene": "エクスポートされたファイルにシーンを埋め込みます",
|
"exportEmbedScene": "埋め込みシーン",
|
||||||
"exportEmbedScene_details": "シーンデータはエクスポートされたPNG/SVGファイルに保存され、シーンを復元することができます。\nエクスポートされたファイルのサイズは増加します。",
|
"exportEmbedScene_details": "シーンデータはエクスポートされたPNG/SVGファイルに保存され、シーンを復元することができます。\nエクスポートされたファイルのサイズは増加します。",
|
||||||
"addWatermark": "\"Made with Excalidraw\"と表示",
|
"addWatermark": "\"Made with Excalidraw\"と表示",
|
||||||
"handDrawn": "手描き風",
|
"handDrawn": "手描き風",
|
||||||
@@ -95,18 +99,23 @@
|
|||||||
"flipHorizontal": "水平方向に反転",
|
"flipHorizontal": "水平方向に反転",
|
||||||
"flipVertical": "垂直方向に反転",
|
"flipVertical": "垂直方向に反転",
|
||||||
"viewMode": "閲覧モード",
|
"viewMode": "閲覧モード",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "エクスポートカラースキームの切り替え",
|
||||||
"share": ""
|
"share": "共有",
|
||||||
|
"showStroke": "ストロークカラーピッカーを表示",
|
||||||
|
"showBackground": "背景色ピッカーを表示",
|
||||||
|
"toggleTheme": "テーマの切り替え"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "キャンバスのリセット",
|
"clearReset": "キャンバスのリセット",
|
||||||
|
"exportJSON": "ファイルへエクスポート",
|
||||||
|
"exportImage": "画像として保存",
|
||||||
"export": "エクスポート",
|
"export": "エクスポート",
|
||||||
"exportToPng": "PNG にエクスポート",
|
"exportToPng": "PNG にエクスポート",
|
||||||
"exportToSvg": "SVG にエクスポート",
|
"exportToSvg": "SVG にエクスポート",
|
||||||
"copyToClipboard": "クリップボードにコピー",
|
"copyToClipboard": "クリップボードにコピー",
|
||||||
"copyPngToClipboard": "クリップボードにPNGをコピー",
|
"copyPngToClipboard": "クリップボードにPNGをコピー",
|
||||||
"scale": "スケール",
|
"scale": "スケール",
|
||||||
"save": "保存",
|
"save": "現在のファイルに保存",
|
||||||
"saveAs": "名前を付けて保存",
|
"saveAs": "名前を付けて保存",
|
||||||
"load": "読み込み...",
|
"load": "読み込み...",
|
||||||
"getShareableLink": "共有URLの取得",
|
"getShareableLink": "共有URLの取得",
|
||||||
@@ -142,22 +151,22 @@
|
|||||||
"loadSceneOverridePrompt": "外部図面を読み込むと、既存のコンテンツが置き換わります。続行しますか?",
|
"loadSceneOverridePrompt": "外部図面を読み込むと、既存のコンテンツが置き換わります。続行しますか?",
|
||||||
"collabStopOverridePrompt": "セッションを停止すると、ローカルに保存されている図が上書きされます。 本当によろしいですか?\n\n(ローカルの図を保持したい場合は、セッションを停止せずにブラウザタブを閉じてください。)",
|
"collabStopOverridePrompt": "セッションを停止すると、ローカルに保存されている図が上書きされます。 本当によろしいですか?\n\n(ローカルの図を保持したい場合は、セッションを停止せずにブラウザタブを閉じてください。)",
|
||||||
"errorLoadingLibrary": "サードパーティライブラリの読み込み中にエラーが発生しました。",
|
"errorLoadingLibrary": "サードパーティライブラリの読み込み中にエラーが発生しました。",
|
||||||
"errorAddingToLibrary": "",
|
"errorAddingToLibrary": "アイテムをライブラリに追加できませんでした",
|
||||||
"errorRemovingFromLibrary": "",
|
"errorRemovingFromLibrary": "ライブラリからアイテムを削除できませんでした",
|
||||||
"confirmAddLibrary": "{{numShapes}} 個の図形をライブラリに追加します。よろしいですか?",
|
"confirmAddLibrary": "{{numShapes}} 個の図形をライブラリに追加します。よろしいですか?",
|
||||||
"imageDoesNotContainScene": "現在、画像のインポートはサポートされていません。\n\nシーンをインポートしようとしましたか?この画像にはシーンデータが含まれていないようです。エクスポート中に有効にしていましたか?",
|
"imageDoesNotContainScene": "現在、画像のインポートはサポートされていません。\n\nシーンをインポートしようとしましたか?この画像にはシーンデータが含まれていないようです。エクスポート中に有効にしていましたか?",
|
||||||
"cannotRestoreFromImage": "このイメージファイルからシーンを復元できませんでした",
|
"cannotRestoreFromImage": "このイメージファイルからシーンを復元できませんでした",
|
||||||
"invalidSceneUrl": "",
|
"invalidSceneUrl": "指定された URL からシーンをインポートできませんでした。不正な形式であるか、有効な Excalidraw JSON データが含まれていません。",
|
||||||
"resetLibrary": "ライブラリを消去します。本当によろしいですか?"
|
"resetLibrary": "ライブラリを消去します。本当によろしいですか?"
|
||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "選択",
|
"selection": "選択",
|
||||||
"freedraw": "手書き",
|
|
||||||
"rectangle": "矩形",
|
"rectangle": "矩形",
|
||||||
"diamond": "ひし形",
|
"diamond": "ひし形",
|
||||||
"ellipse": "楕円",
|
"ellipse": "楕円",
|
||||||
"arrow": "矢印",
|
"arrow": "矢印",
|
||||||
"line": "直線",
|
"line": "直線",
|
||||||
|
"freedraw": "描画",
|
||||||
"text": "テキスト",
|
"text": "テキスト",
|
||||||
"library": "ライブラリ",
|
"library": "ライブラリ",
|
||||||
"lock": "描画後も使用中のツールを選択したままにする"
|
"lock": "描画後も使用中のツールを選択したままにする"
|
||||||
@@ -168,9 +177,11 @@
|
|||||||
"shapes": "図形"
|
"shapes": "図形"
|
||||||
},
|
},
|
||||||
"hints": {
|
"hints": {
|
||||||
"linearElement": "クリックして複数の点を開始し、1行にドラッグします。",
|
"linearElement": "クリックして複数の点を開始し、ドラッグで直線を引きます。",
|
||||||
"freeDraw": "クリックしてドラッグします。離すと終了します",
|
"freeDraw": "クリックしてドラッグします。離すと終了します",
|
||||||
"text": "ヒント: 選択ツールを使用して任意の場所をダブルクリックしてテキストを追加することもできます",
|
"text": "ヒント: 選択ツールを使用して任意の場所をダブルクリックしてテキストを追加することもできます",
|
||||||
|
"text_selected": "テキストを編集するには、ダブルクリックまたはEnterキーを押します",
|
||||||
|
"text_editing": "Esc キーまたは CtrlOrCmd+ENTER キーを押して編集を終了します",
|
||||||
"linearElementMulti": "最後のポイントをクリックするか、エスケープまたはEnterを押して終了します",
|
"linearElementMulti": "最後のポイントをクリックするか、エスケープまたはEnterを押して終了します",
|
||||||
"lockAngle": "SHIFTを押したままにすると、角度を制限することができます",
|
"lockAngle": "SHIFTを押したままにすると、角度を制限することができます",
|
||||||
"resize": "サイズを変更中にSHIFTを押しすと比率を制御できます。Altを押すと中央からサイズを変更できます。",
|
"resize": "サイズを変更中にSHIFTを押しすと比率を制御できます。Altを押すと中央からサイズを変更できます。",
|
||||||
@@ -210,21 +221,34 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "エラー"
|
"title": "エラー"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "ディスクに保存",
|
||||||
|
"disk_details": "シーンデータを後からインポートできるファイルにエクスポートします。",
|
||||||
|
"disk_button": "ファイルへ保存",
|
||||||
|
"link_title": "共有可能なリンク",
|
||||||
|
"link_details": "読み取り専用リンクとしてエクスポート",
|
||||||
|
"link_button": "リンクとしてエクスポート",
|
||||||
|
"excalidrawplus_description": "Excalidraw+ ワークスペースにシーンを保存します。",
|
||||||
|
"excalidrawplus_button": "エクスポート",
|
||||||
|
"excalidrawplus_exportError": "Excalidraw+ にエクスポートできませんでした..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "公式ブログを読む",
|
"blog": "公式ブログを読む",
|
||||||
"click": "クリック",
|
"click": "クリック",
|
||||||
"curvedArrow": "カーブした矢印",
|
"curvedArrow": "カーブした矢印",
|
||||||
"curvedLine": "曲線",
|
"curvedLine": "曲線",
|
||||||
"documentation": "ドキュメント",
|
"documentation": "ドキュメント",
|
||||||
|
"doubleClick": "ダブルクリック",
|
||||||
"drag": "ドラッグ",
|
"drag": "ドラッグ",
|
||||||
"editor": "エディタ",
|
"editor": "エディタ",
|
||||||
|
"editSelectedShape": "選択した図形の編集 (テキスト/矢印/線)",
|
||||||
"github": "不具合報告はこちら",
|
"github": "不具合報告はこちら",
|
||||||
"howto": "ヘルプ・マニュアル",
|
"howto": "ヘルプ・マニュアル",
|
||||||
"or": "または",
|
"or": "または",
|
||||||
"preventBinding": "矢印を結合しない",
|
"preventBinding": "矢印を結合しない",
|
||||||
"shapes": "図形",
|
"shapes": "図形",
|
||||||
"shortcuts": "キーボードショートカット",
|
"shortcuts": "キーボードショートカット",
|
||||||
"textFinish": "編集を終了する (テキスト)",
|
"textFinish": "編集を終了 (テキストエディタ)",
|
||||||
"textNewLine": "新しい行を追加 (テキスト)",
|
"textNewLine": "新しい行を追加 (テキスト)",
|
||||||
"title": "ヘルプ",
|
"title": "ヘルプ",
|
||||||
"view": "表示",
|
"view": "表示",
|
||||||
@@ -253,10 +277,10 @@
|
|||||||
"toast": {
|
"toast": {
|
||||||
"copyStyles": "スタイルをコピー",
|
"copyStyles": "スタイルをコピー",
|
||||||
"copyToClipboard": "クリップボードにコピー",
|
"copyToClipboard": "クリップボードにコピー",
|
||||||
"copyToClipboardAsPng": "",
|
"copyToClipboardAsPng": "{{exportSelection}} を PNG 形式でクリップボードにコピーしました\n({{exportColorScheme}})",
|
||||||
"fileSaved": "ファイルを保存しました",
|
"fileSaved": "ファイルを保存しました",
|
||||||
"fileSavedToFilename": "{filename} に保存しました",
|
"fileSavedToFilename": "{filename} に保存しました",
|
||||||
"canvas": "キャンバス",
|
"canvas": "キャンバス",
|
||||||
"selection": ""
|
"selection": "選択"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,10 @@
|
|||||||
"background": "Agilal",
|
"background": "Agilal",
|
||||||
"fill": "Taččart",
|
"fill": "Taččart",
|
||||||
"strokeWidth": "Tehri n yizirig",
|
"strokeWidth": "Tehri n yizirig",
|
||||||
|
"strokeShape": "Talɣa n yizirig",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "Amfezzu",
|
||||||
"strokeStyle": "Aɣanib n tizirig",
|
"strokeStyle": "Aɣanib n tizirig",
|
||||||
"strokeStyle_solid": "Aččuran",
|
"strokeStyle_solid": "Aččuran",
|
||||||
"strokeStyle_dashed": "S tjerriḍin",
|
"strokeStyle_dashed": "S tjerriḍin",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Tiddi n tsefsit",
|
"fontSize": "Tiddi n tsefsit",
|
||||||
"fontFamily": "Tawacult n tsefsiyin",
|
"fontFamily": "Tawacult n tsefsiyin",
|
||||||
"onlySelected": "Tafrayt kan",
|
"onlySelected": "Tafrayt kan",
|
||||||
"withBackground": "S ugilal",
|
"withBackground": "Agilal",
|
||||||
"exportEmbedScene": "Seddu asayes deg ufaylu yettwasifḍen",
|
"exportEmbedScene": "Sleɣ asayes",
|
||||||
"exportEmbedScene_details": "Asayes ad yettwasekles deg ufaylu n usifeḍ PNG/SVG akken akken ad yili wamek ara d-yettwarr seg-s usayes. Ayagi ad isimɣur tiddi n ufaylu n usifeḍ.",
|
"exportEmbedScene_details": "Asayes ad yettwasekles deg ufaylu n usifeḍ PNG/SVG akken akken ad yili wamek ara d-yettwarr seg-s usayes. Ayagi ad isimɣur tiddi n ufaylu n usifeḍ.",
|
||||||
"addWatermark": "Seddu \"Yettwaxdem s Excalidraw\"",
|
"addWatermark": "Seddu \"Yettwaxdem s Excalidraw\"",
|
||||||
"handDrawn": "Asuneɣ s ufus",
|
"handDrawn": "Asuneɣ s ufus",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Tuttya tubdidt",
|
"flipVertical": "Tuttya tubdidt",
|
||||||
"viewMode": "Askar n tmuɣli",
|
"viewMode": "Askar n tmuɣli",
|
||||||
"toggleExportColorScheme": "Sermed/sens asifeḍ usentel n yini",
|
"toggleExportColorScheme": "Sermed/sens asifeḍ usentel n yini",
|
||||||
"share": "Bḍu"
|
"share": "Bḍu",
|
||||||
|
"showStroke": "Beqqeḍ amelqaḍ n yini n yizirig",
|
||||||
|
"showBackground": "Beqqeḍ amelqaḍ n yini n ugilal",
|
||||||
|
"toggleTheme": "Snifel asentel"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Ales awennez n teɣzut n usuneɣ",
|
"clearReset": "Ales awennez n teɣzut n usuneɣ",
|
||||||
|
"exportJSON": "Sifeḍ afaylu",
|
||||||
|
"exportImage": "Sekles am tugna",
|
||||||
"export": "Sifeḍ",
|
"export": "Sifeḍ",
|
||||||
"exportToPng": "Sifeḍ ɣer PNG",
|
"exportToPng": "Sifeḍ ɣer PNG",
|
||||||
"exportToSvg": "Sifeḍ ɣer SVG",
|
"exportToSvg": "Sifeḍ ɣer SVG",
|
||||||
"copyToClipboard": "Nɣel ɣer tecfawit",
|
"copyToClipboard": "Nɣel ɣer tecfawit",
|
||||||
"copyPngToClipboard": "Nɣel PNG ɣer tecfawit",
|
"copyPngToClipboard": "Nɣel PNG ɣer tecfawit",
|
||||||
"scale": "Taskala",
|
"scale": "Taskala",
|
||||||
"save": "Sekles",
|
"save": "Sekles deg ufaylu amiran",
|
||||||
"saveAs": "Sekles am",
|
"saveAs": "Sekles am",
|
||||||
"load": "Sali-d",
|
"load": "Sali-d",
|
||||||
"getShareableLink": "Awi-d aseɣwen n beṭṭu",
|
"getShareableLink": "Awi-d aseɣwen n beṭṭu",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Tafrayt",
|
"selection": "Tafrayt",
|
||||||
"freedraw": "Unuɣ ilelli",
|
|
||||||
"rectangle": "Asrem",
|
"rectangle": "Asrem",
|
||||||
"diamond": "Ameɣṛun",
|
"diamond": "Ameɣṛun",
|
||||||
"ellipse": "Taglayt",
|
"ellipse": "Taglayt",
|
||||||
"arrow": "Taneccabt",
|
"arrow": "Taneccabt",
|
||||||
"line": "Izirig",
|
"line": "Izirig",
|
||||||
|
"freedraw": "Suneɣ",
|
||||||
"text": "Aḍris",
|
"text": "Aḍris",
|
||||||
"library": "Tamkarḍit",
|
"library": "Tamkarḍit",
|
||||||
"lock": "Eǧǧ afecku n tefrayt yermed mbaɛd asuneɣ"
|
"lock": "Eǧǧ afecku n tefrayt yermed mbaɛd asuneɣ"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Ssit akken ad tebduḍ aṭas n tenqiḍin, zuɣer i yiwen n yizirig",
|
"linearElement": "Ssit akken ad tebduḍ aṭas n tenqiḍin, zuɣer i yiwen n yizirig",
|
||||||
"freeDraw": "Ssit yerna zuɣer, serreḥ ticki tfukeḍ",
|
"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",
|
"text": "Tixidest: tzemreḍ daɣen ad ternuḍ aḍris s usiti snat n tikkal anida tebɣiḍ s ufecku n tefrayt",
|
||||||
|
"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ḍ",
|
"linearElementMulti": "Ssit ɣef tenqiḍt taneggarut neɣ ssed taqeffalt Escape neɣ taqeffalt Kcem akken ad tfakkeḍ",
|
||||||
"lockAngle": "Tzemreḍ ad tḥettmeḍ tiɣmert s tuṭṭfa n tqeffalt SHIFT",
|
"lockAngle": "Tzemreḍ ad tḥettmeḍ tiɣmert s tuṭṭfa n tqeffalt SHIFT",
|
||||||
"resize": "Tzemreḍ ad tḥettemeḍ assaɣ s tuṭṭfa n tqeffalt SHIFT mi ara tettbeddileḍ tiddi,\nma teṭṭfeḍ ALT abeddel n tiddi ad yili si tlemmast",
|
"resize": "Tzemreḍ ad tḥettemeḍ assaɣ s tuṭṭfa n tqeffalt SHIFT mi ara tettbeddileḍ tiddi,\nma teṭṭfeḍ ALT abeddel n tiddi ad yili si tlemmast",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Tuccḍa"
|
"title": "Tuccḍa"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Sekles deg uḍebsi",
|
||||||
|
"disk_details": "Sekles isefka n usayes deg ufaylu ansi ara tizmireḍ ad d-tketreḍ areḍqal.",
|
||||||
|
"disk_button": "Sekles deg ufaylu",
|
||||||
|
"link_title": "Aseɣwen n beṭṭu",
|
||||||
|
"link_details": "Sifeḍ am useɣwen n tɣuri kan.",
|
||||||
|
"link_button": "Sifeḍ deg useɣwen",
|
||||||
|
"excalidrawplus_description": "Sekles asayes-inek•inem di tallunt n umahil Excalidraw+.",
|
||||||
|
"excalidrawplus_button": "Sifeḍ",
|
||||||
|
"excalidrawplus_exportError": "Ulamek asifeḍ ɣer Excalidraw+ akka tura..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Ɣeṛ ablug-nneɣ",
|
"blog": "Ɣeṛ ablug-nneɣ",
|
||||||
"click": "ssit",
|
"click": "ssit",
|
||||||
"curvedArrow": "Taneccabt izelgen",
|
"curvedArrow": "Taneccabt izelgen",
|
||||||
"curvedLine": "Izirig izelgen",
|
"curvedLine": "Izirig izelgen",
|
||||||
"documentation": "Tasemlit",
|
"documentation": "Tasemlit",
|
||||||
|
"doubleClick": "ssit snat n tikkal",
|
||||||
"drag": "zuɣer",
|
"drag": "zuɣer",
|
||||||
"editor": "Amaẓrag",
|
"editor": "Amaẓrag",
|
||||||
|
"editSelectedShape": "Ẓreg talɣa yettwafernen (aḍris/taneccabt/izirig)",
|
||||||
"github": "Tufiḍ-d ugur? Azen-aɣ-d",
|
"github": "Tufiḍ-d ugur? Azen-aɣ-d",
|
||||||
"howto": "Ḍfer imniren-nneɣ",
|
"howto": "Ḍfer imniren-nneɣ",
|
||||||
"or": "neɣ",
|
"or": "neɣ",
|
||||||
"preventBinding": "Seḥbes tuqqna n tneccabin",
|
"preventBinding": "Seḥbes tuqqna n tneccabin",
|
||||||
"shapes": "Talɣiwin",
|
"shapes": "Talɣiwin",
|
||||||
"shortcuts": "Inegzumen n unasiw",
|
"shortcuts": "Inegzumen n unasiw",
|
||||||
"textFinish": "Fak asiẓreg (aḍris)",
|
"textFinish": "Fak asiẓreg (amaẓrag n uḍris)",
|
||||||
"textNewLine": "Rnu ajerriḍ amaynut (aḍris)",
|
"textNewLine": "Rnu ajerriḍ amaynut (amaẓrag n uḍris)",
|
||||||
"title": "Tallelt",
|
"title": "Tallelt",
|
||||||
"view": "Tamuɣli",
|
"view": "Tamuɣli",
|
||||||
"zoomToFit": "Simɣur akken ad twliḍ akk iferdisen",
|
"zoomToFit": "Simɣur akken ad twliḍ akk iferdisen",
|
||||||
|
|||||||
@@ -0,0 +1,286 @@
|
|||||||
|
{
|
||||||
|
"labels": {
|
||||||
|
"paste": "Қою",
|
||||||
|
"pasteCharts": "Диаграммаларды қою",
|
||||||
|
"selectAll": "Бәрін таңдау",
|
||||||
|
"multiSelect": "",
|
||||||
|
"moveCanvas": "",
|
||||||
|
"cut": "Қию",
|
||||||
|
"copy": "Көшіру",
|
||||||
|
"copyAsPng": "",
|
||||||
|
"copyAsSvg": "",
|
||||||
|
"bringForward": "",
|
||||||
|
"sendToBack": "",
|
||||||
|
"bringToFront": "",
|
||||||
|
"sendBackward": "",
|
||||||
|
"delete": "Жою",
|
||||||
|
"copyStyles": "Стильдерді көшіру",
|
||||||
|
"pasteStyles": "Стильдерді қою",
|
||||||
|
"stroke": "",
|
||||||
|
"background": "",
|
||||||
|
"fill": "",
|
||||||
|
"strokeWidth": "",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
|
"strokeStyle": "",
|
||||||
|
"strokeStyle_solid": "",
|
||||||
|
"strokeStyle_dashed": "",
|
||||||
|
"strokeStyle_dotted": "",
|
||||||
|
"sloppiness": "",
|
||||||
|
"opacity": "",
|
||||||
|
"textAlign": "",
|
||||||
|
"edges": "",
|
||||||
|
"sharp": "",
|
||||||
|
"round": "",
|
||||||
|
"arrowheads": "Нұсқар ұштары",
|
||||||
|
"arrowhead_none": "Жоқ",
|
||||||
|
"arrowhead_arrow": "Нұсқар",
|
||||||
|
"arrowhead_bar": "Тосқауыл",
|
||||||
|
"arrowhead_dot": "Нүкте",
|
||||||
|
"fontSize": "Қаріп өлшемі",
|
||||||
|
"fontFamily": "Қаріп тобы",
|
||||||
|
"onlySelected": "",
|
||||||
|
"withBackground": "",
|
||||||
|
"exportEmbedScene": "",
|
||||||
|
"exportEmbedScene_details": "",
|
||||||
|
"addWatermark": "",
|
||||||
|
"handDrawn": "",
|
||||||
|
"normal": "Қалыпты",
|
||||||
|
"code": "",
|
||||||
|
"small": "Кіші",
|
||||||
|
"medium": "Орта",
|
||||||
|
"large": "Үлкен",
|
||||||
|
"veryLarge": "Өте үлкен",
|
||||||
|
"solid": "",
|
||||||
|
"hachure": "",
|
||||||
|
"crossHatch": "",
|
||||||
|
"thin": "",
|
||||||
|
"bold": "",
|
||||||
|
"left": "Солға",
|
||||||
|
"center": "Ортаға",
|
||||||
|
"right": "Оңға",
|
||||||
|
"extraBold": "",
|
||||||
|
"architect": "",
|
||||||
|
"artist": "",
|
||||||
|
"cartoonist": "",
|
||||||
|
"fileTitle": "Файл атауы",
|
||||||
|
"colorPicker": "",
|
||||||
|
"canvasBackground": "",
|
||||||
|
"drawingCanvas": "",
|
||||||
|
"layers": "",
|
||||||
|
"actions": "",
|
||||||
|
"language": "Тіл",
|
||||||
|
"liveCollaboration": "",
|
||||||
|
"duplicateSelection": "Көшірме",
|
||||||
|
"untitled": "Атауысыз",
|
||||||
|
"name": "",
|
||||||
|
"yourName": "",
|
||||||
|
"madeWithExcalidraw": "",
|
||||||
|
"group": "",
|
||||||
|
"ungroup": "",
|
||||||
|
"collaborators": "",
|
||||||
|
"showGrid": "",
|
||||||
|
"addToLibrary": "",
|
||||||
|
"removeFromLibrary": "",
|
||||||
|
"libraryLoadingMessage": "",
|
||||||
|
"libraries": "",
|
||||||
|
"loadingScene": "",
|
||||||
|
"align": "",
|
||||||
|
"alignTop": "",
|
||||||
|
"alignBottom": "",
|
||||||
|
"alignLeft": "",
|
||||||
|
"alignRight": "",
|
||||||
|
"centerVertically": "",
|
||||||
|
"centerHorizontally": "",
|
||||||
|
"distributeHorizontally": "",
|
||||||
|
"distributeVertically": "",
|
||||||
|
"flipHorizontal": "",
|
||||||
|
"flipVertical": "",
|
||||||
|
"viewMode": "",
|
||||||
|
"toggleExportColorScheme": "",
|
||||||
|
"share": "",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
|
},
|
||||||
|
"buttons": {
|
||||||
|
"clearReset": "",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
|
"export": "Экспорт",
|
||||||
|
"exportToPng": "",
|
||||||
|
"exportToSvg": "",
|
||||||
|
"copyToClipboard": "",
|
||||||
|
"copyPngToClipboard": "",
|
||||||
|
"scale": "",
|
||||||
|
"save": "",
|
||||||
|
"saveAs": "",
|
||||||
|
"load": "",
|
||||||
|
"getShareableLink": "",
|
||||||
|
"close": "Жабу",
|
||||||
|
"selectLanguage": "Тілді таңдау",
|
||||||
|
"scrollBackToContent": "",
|
||||||
|
"zoomIn": "",
|
||||||
|
"zoomOut": "",
|
||||||
|
"resetZoom": "",
|
||||||
|
"menu": "Mәзір",
|
||||||
|
"done": "Дайын",
|
||||||
|
"edit": "",
|
||||||
|
"undo": "",
|
||||||
|
"redo": "",
|
||||||
|
"resetLibrary": "",
|
||||||
|
"createNewRoom": "",
|
||||||
|
"fullScreen": "",
|
||||||
|
"darkMode": "",
|
||||||
|
"lightMode": "",
|
||||||
|
"zenMode": "",
|
||||||
|
"exitZenMode": ""
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"clearReset": "",
|
||||||
|
"couldNotCreateShareableLink": "",
|
||||||
|
"couldNotCreateShareableLinkTooBig": "",
|
||||||
|
"couldNotLoadInvalidFile": "",
|
||||||
|
"importBackendFailed": "",
|
||||||
|
"cannotExportEmptyCanvas": "",
|
||||||
|
"couldNotCopyToClipboard": "",
|
||||||
|
"decryptFailed": "",
|
||||||
|
"uploadedSecurly": "",
|
||||||
|
"loadSceneOverridePrompt": "",
|
||||||
|
"collabStopOverridePrompt": "",
|
||||||
|
"errorLoadingLibrary": "",
|
||||||
|
"errorAddingToLibrary": "",
|
||||||
|
"errorRemovingFromLibrary": "",
|
||||||
|
"confirmAddLibrary": "",
|
||||||
|
"imageDoesNotContainScene": "",
|
||||||
|
"cannotRestoreFromImage": "",
|
||||||
|
"invalidSceneUrl": "",
|
||||||
|
"resetLibrary": ""
|
||||||
|
},
|
||||||
|
"toolBar": {
|
||||||
|
"selection": "",
|
||||||
|
"rectangle": "",
|
||||||
|
"diamond": "",
|
||||||
|
"ellipse": "",
|
||||||
|
"arrow": "Нұсқар",
|
||||||
|
"line": "",
|
||||||
|
"freedraw": "",
|
||||||
|
"text": "Мәтін",
|
||||||
|
"library": "",
|
||||||
|
"lock": ""
|
||||||
|
},
|
||||||
|
"headings": {
|
||||||
|
"canvasActions": "",
|
||||||
|
"selectedShapeActions": "",
|
||||||
|
"shapes": ""
|
||||||
|
},
|
||||||
|
"hints": {
|
||||||
|
"linearElement": "",
|
||||||
|
"freeDraw": "",
|
||||||
|
"text": "",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
|
"linearElementMulti": "",
|
||||||
|
"lockAngle": "",
|
||||||
|
"resize": "",
|
||||||
|
"rotate": "",
|
||||||
|
"lineEditor_info": "",
|
||||||
|
"lineEditor_pointSelected": "",
|
||||||
|
"lineEditor_nothingSelected": ""
|
||||||
|
},
|
||||||
|
"canvasError": {
|
||||||
|
"cannotShowPreview": "",
|
||||||
|
"canvasTooBig": "",
|
||||||
|
"canvasTooBigTip": ""
|
||||||
|
},
|
||||||
|
"errorSplash": {
|
||||||
|
"headingMain_pre": "",
|
||||||
|
"headingMain_button": "",
|
||||||
|
"clearCanvasMessage": "",
|
||||||
|
"clearCanvasMessage_button": "",
|
||||||
|
"clearCanvasCaveat": "",
|
||||||
|
"trackedToSentry_pre": "",
|
||||||
|
"trackedToSentry_post": "",
|
||||||
|
"openIssueMessage_pre": "",
|
||||||
|
"openIssueMessage_button": "",
|
||||||
|
"openIssueMessage_post": "",
|
||||||
|
"sceneContent": ""
|
||||||
|
},
|
||||||
|
"roomDialog": {
|
||||||
|
"desc_intro": "",
|
||||||
|
"desc_privacy": "",
|
||||||
|
"button_startSession": "",
|
||||||
|
"button_stopSession": "",
|
||||||
|
"desc_inProgressIntro": "",
|
||||||
|
"desc_shareLink": "",
|
||||||
|
"desc_exitSession": "",
|
||||||
|
"shareTitle": ""
|
||||||
|
},
|
||||||
|
"errorDialog": {
|
||||||
|
"title": "Қате"
|
||||||
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "Сахна деректерін кейін қайта импорттауға болатын файлға экспорттаңыз.",
|
||||||
|
"disk_button": "Файлға сақтау",
|
||||||
|
"link_title": "Ортақ сілтеме",
|
||||||
|
"link_details": "Тек оқуға арналған сілтеме ретінде экспорттау.",
|
||||||
|
"link_button": "Сілтемеге экспорттау",
|
||||||
|
"excalidrawplus_description": "Сахнаны өзіңіздің Excalidraw+ жұмыс кеңістігінде сақтаңыз.",
|
||||||
|
"excalidrawplus_button": "Экспорт",
|
||||||
|
"excalidrawplus_exportError": "Қазіргі уақытта Excalidraw+ үшін экспорттау мүмкін емес..."
|
||||||
|
},
|
||||||
|
"helpDialog": {
|
||||||
|
"blog": "Біздің блогты оқу",
|
||||||
|
"click": "шерту",
|
||||||
|
"curvedArrow": "Майысқан нұсқар",
|
||||||
|
"curvedLine": "Майысқан сызық",
|
||||||
|
"documentation": "Құжаттама",
|
||||||
|
"doubleClick": "қос шерту",
|
||||||
|
"drag": "апару",
|
||||||
|
"editor": "Өңдеу",
|
||||||
|
"editSelectedShape": "Таңдалған пішінді өңдеу (мәтін/нұсқар/сызық)",
|
||||||
|
"github": "Қате таптыңыз ба? Жолдаңыз",
|
||||||
|
"howto": "Біздің нұсқаулықтарды орындаңыз",
|
||||||
|
"or": "немесе",
|
||||||
|
"preventBinding": "Нұсқарды байланыстыруға жол бермеу",
|
||||||
|
"shapes": "Пішіндер",
|
||||||
|
"shortcuts": "Пернетақта пәрмендері",
|
||||||
|
"textFinish": "Өңдеуді аяқтау (мәтіндік редактор)",
|
||||||
|
"textNewLine": "Жаңа жолға көшу (мәтіндік редактор)",
|
||||||
|
"title": "Көмек",
|
||||||
|
"view": "Көру",
|
||||||
|
"zoomToFit": "Барлық элементтердің көлеміне сәйкес үлкейту",
|
||||||
|
"zoomToSelection": "Таңдалғанды үлкейту"
|
||||||
|
},
|
||||||
|
"encrypted": {
|
||||||
|
"tooltip": "Сіздің сызбаларыңыз өтпелі шифрлеу арқылы шифрланған, сондықтан Excalidraw серверлері оларды ешқашан көрмейді.",
|
||||||
|
"link": "Excalidraw қолданатын өтпелі шифрлеу туралы блог жазбасы"
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"angle": "Бұрыш",
|
||||||
|
"element": "Элемент",
|
||||||
|
"elements": "Элементтер",
|
||||||
|
"height": "Биіктігі",
|
||||||
|
"scene": "Сахна",
|
||||||
|
"selected": "Таңдалды",
|
||||||
|
"storage": "Сақтау көлемі",
|
||||||
|
"title": "",
|
||||||
|
"total": "Барлығы",
|
||||||
|
"version": "Нұсқа",
|
||||||
|
"versionCopy": "Көшіру үшін басыңыз",
|
||||||
|
"versionNotAvailable": "Бұл нұсқа қолжетімсіз",
|
||||||
|
"width": "Ені"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"copyStyles": "Стильдер көшірілді.",
|
||||||
|
"copyToClipboard": "",
|
||||||
|
"copyToClipboardAsPng": "",
|
||||||
|
"fileSaved": "Файл сақталды.",
|
||||||
|
"fileSavedToFilename": "{filename} сақталды",
|
||||||
|
"canvas": "",
|
||||||
|
"selection": "таңдау"
|
||||||
|
}
|
||||||
|
}
|
||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "배경색",
|
"background": "배경색",
|
||||||
"fill": "채우기",
|
"fill": "채우기",
|
||||||
"strokeWidth": "선 굵기",
|
"strokeWidth": "선 굵기",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "선",
|
"strokeStyle": "선",
|
||||||
"strokeStyle_solid": "실선",
|
"strokeStyle_solid": "실선",
|
||||||
"strokeStyle_dashed": "파선",
|
"strokeStyle_dashed": "파선",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "글자 크기",
|
"fontSize": "글자 크기",
|
||||||
"fontFamily": "글꼴",
|
"fontFamily": "글꼴",
|
||||||
"onlySelected": "선택한 항목만",
|
"onlySelected": "선택한 항목만",
|
||||||
"withBackground": "배경 포함",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "화면을 내보낸 파일에 담기",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "화면 정보가 내보내는 PNG/SVG 파일에 저장되어 이후에 파일에서 화면을 복구할 수 있습니다. 파일 크기가 증가합니다.",
|
"exportEmbedScene_details": "화면 정보가 내보내는 PNG/SVG 파일에 저장되어 이후에 파일에서 화면을 복구할 수 있습니다. 파일 크기가 증가합니다.",
|
||||||
"addWatermark": "\"Made with Excalidraw\" 추가",
|
"addWatermark": "\"Made with Excalidraw\" 추가",
|
||||||
"handDrawn": "손글씨",
|
"handDrawn": "손글씨",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "",
|
"flipVertical": "",
|
||||||
"viewMode": "보기 모드",
|
"viewMode": "보기 모드",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "",
|
||||||
"share": ""
|
"share": "",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "캔버스 초기화",
|
"clearReset": "캔버스 초기화",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "내보내기",
|
"export": "내보내기",
|
||||||
"exportToPng": "PNG로 내보내기",
|
"exportToPng": "PNG로 내보내기",
|
||||||
"exportToSvg": "SVG로 내보내기",
|
"exportToSvg": "SVG로 내보내기",
|
||||||
"copyToClipboard": "클립보드로 복사",
|
"copyToClipboard": "클립보드로 복사",
|
||||||
"copyPngToClipboard": "클립보드로 PNG 이미지 복사",
|
"copyPngToClipboard": "클립보드로 PNG 이미지 복사",
|
||||||
"scale": "크기",
|
"scale": "크기",
|
||||||
"save": "저장",
|
"save": "",
|
||||||
"saveAs": "다른 이름으로 저장",
|
"saveAs": "다른 이름으로 저장",
|
||||||
"load": "불러오기",
|
"load": "불러오기",
|
||||||
"getShareableLink": "공유 가능한 링크 생성",
|
"getShareableLink": "공유 가능한 링크 생성",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "선택",
|
"selection": "선택",
|
||||||
"freedraw": "자유롭게 그리기",
|
|
||||||
"rectangle": "사각형",
|
"rectangle": "사각형",
|
||||||
"diamond": "다이아몬드",
|
"diamond": "다이아몬드",
|
||||||
"ellipse": "타원",
|
"ellipse": "타원",
|
||||||
"arrow": "화살표",
|
"arrow": "화살표",
|
||||||
"line": "선",
|
"line": "선",
|
||||||
|
"freedraw": "",
|
||||||
"text": "텍스트",
|
"text": "텍스트",
|
||||||
"library": "라이브러리",
|
"library": "라이브러리",
|
||||||
"lock": "선택된 도구 유지하기"
|
"lock": "선택된 도구 유지하기"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "여러 점을 연결하려면 클릭하고, 직선을 그리려면 바로 드래그하세요.",
|
"linearElement": "여러 점을 연결하려면 클릭하고, 직선을 그리려면 바로 드래그하세요.",
|
||||||
"freeDraw": "클릭 후 드래그하세요. 완료되면 놓으세요.",
|
"freeDraw": "클릭 후 드래그하세요. 완료되면 놓으세요.",
|
||||||
"text": "팁: 선택 툴로 아무 곳이나 더블 클릭해 텍스트를 추가할 수도 있습니다.",
|
"text": "팁: 선택 툴로 아무 곳이나 더블 클릭해 텍스트를 추가할 수도 있습니다.",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "마지막 지점을 클릭하거나 Esc 또는 Enter 키를 눌러 완료하세요.",
|
"linearElementMulti": "마지막 지점을 클릭하거나 Esc 또는 Enter 키를 눌러 완료하세요.",
|
||||||
"lockAngle": "SHIFT 키를 누르면서 회전하면 각도를 제한할 수 있습니다.",
|
"lockAngle": "SHIFT 키를 누르면서 회전하면 각도를 제한할 수 있습니다.",
|
||||||
"resize": "SHIFT 키를 누르면서 조정하면 크기의 비율이 제한됩니다.\nALT를 누르면서 조정하면 중앙을 기준으로 크기를 조정합니다.",
|
"resize": "SHIFT 키를 누르면서 조정하면 크기의 비율이 제한됩니다.\nALT를 누르면서 조정하면 중앙을 기준으로 크기를 조정합니다.",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "오류"
|
"title": "오류"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "블로그 읽어보기",
|
"blog": "블로그 읽어보기",
|
||||||
"click": "클릭",
|
"click": "클릭",
|
||||||
"curvedArrow": "곡선 화살표",
|
"curvedArrow": "곡선 화살표",
|
||||||
"curvedLine": "곡선",
|
"curvedLine": "곡선",
|
||||||
"documentation": "설명서",
|
"documentation": "설명서",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "드래그",
|
"drag": "드래그",
|
||||||
"editor": "에디터",
|
"editor": "에디터",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "문제 제보하기",
|
"github": "문제 제보하기",
|
||||||
"howto": "가이드 참고하기",
|
"howto": "가이드 참고하기",
|
||||||
"or": "또는",
|
"or": "또는",
|
||||||
"preventBinding": "화살표가 붙지 않게 하기",
|
"preventBinding": "화살표가 붙지 않게 하기",
|
||||||
"shapes": "도형",
|
"shapes": "도형",
|
||||||
"shortcuts": "키보드 단축키",
|
"shortcuts": "키보드 단축키",
|
||||||
"textFinish": "편집 완료 (텍스트)",
|
"textFinish": "",
|
||||||
"textNewLine": "줄바꿈 (텍스트)",
|
"textNewLine": "",
|
||||||
"title": "도움말",
|
"title": "도움말",
|
||||||
"view": "보기",
|
"view": "보기",
|
||||||
"zoomToFit": "모든 요소가 보이도록 확대/축소",
|
"zoomToFit": "모든 요소가 보이도록 확대/축소",
|
||||||
|
|||||||
+64
-40
@@ -1,43 +1,47 @@
|
|||||||
{
|
{
|
||||||
"labels": {
|
"labels": {
|
||||||
"paste": "",
|
"paste": "Ielīmēt",
|
||||||
"pasteCharts": "",
|
"pasteCharts": "Ielīmēt grafikus",
|
||||||
"selectAll": "",
|
"selectAll": "Iezīmēt visu",
|
||||||
"multiSelect": "",
|
"multiSelect": "Pievienot elementu iezīmētajam",
|
||||||
"moveCanvas": "",
|
"moveCanvas": "Pārvietot darba laukumu",
|
||||||
"cut": "",
|
"cut": "Izgriezt",
|
||||||
"copy": "",
|
"copy": "Kopēt",
|
||||||
"copyAsPng": "",
|
"copyAsPng": "Kopēt starpliktuvē kā PNG",
|
||||||
"copyAsSvg": "",
|
"copyAsSvg": "Kopēt starpliktuvē kā SVG",
|
||||||
"bringForward": "",
|
"bringForward": "Pārvietot vienu slāni augstāk",
|
||||||
"sendToBack": "",
|
"sendToBack": "Pārvietot uz zemāko slāni",
|
||||||
"bringToFront": "",
|
"bringToFront": "Pārvietot uz virsējo slāni",
|
||||||
"sendBackward": "",
|
"sendBackward": "Pārvietot par vienu slāni zemāk",
|
||||||
"delete": "",
|
"delete": "Dzēst",
|
||||||
"copyStyles": "",
|
"copyStyles": "Kopēt stilus",
|
||||||
"pasteStyles": "",
|
"pasteStyles": "Ielīmēt stilus",
|
||||||
"stroke": "",
|
"stroke": "Līnija",
|
||||||
"background": "",
|
"background": "Fons",
|
||||||
"fill": "",
|
"fill": "Aizpildījums",
|
||||||
"strokeWidth": "",
|
"strokeWidth": "Līnijas platums",
|
||||||
"strokeStyle": "",
|
"strokeShape": "Līnijas forma",
|
||||||
"strokeStyle_solid": "",
|
"strokeShape_gel": "Gēla pildspalva",
|
||||||
"strokeStyle_dashed": "",
|
"strokeShape_fountain": "Lodīšu pildspalva",
|
||||||
"strokeStyle_dotted": "",
|
"strokeShape_brush": "Flomāsters - ota",
|
||||||
"sloppiness": "",
|
"strokeStyle": "Līnijas forma",
|
||||||
"opacity": "",
|
"strokeStyle_solid": "Vienlaidu",
|
||||||
"textAlign": "",
|
"strokeStyle_dashed": "Raustīta līnija",
|
||||||
"edges": "",
|
"strokeStyle_dotted": "Punktota līnija",
|
||||||
"sharp": "",
|
"sloppiness": "Precizitāte",
|
||||||
"round": "",
|
"opacity": "Necaurspīdīgums",
|
||||||
"arrowheads": "",
|
"textAlign": "Teksta izkārtojums",
|
||||||
"arrowhead_none": "",
|
"edges": "Malas",
|
||||||
"arrowhead_arrow": "",
|
"sharp": "Asas",
|
||||||
"arrowhead_bar": "",
|
"round": "Apaļas",
|
||||||
"arrowhead_dot": "",
|
"arrowheads": "Bultas",
|
||||||
"fontSize": "",
|
"arrowhead_none": "Nekādas",
|
||||||
"fontFamily": "",
|
"arrowhead_arrow": "Bulta",
|
||||||
"onlySelected": "",
|
"arrowhead_bar": "Svītra",
|
||||||
|
"arrowhead_dot": "Punkts",
|
||||||
|
"fontSize": "Teksta lielums",
|
||||||
|
"fontFamily": "Fontu saime",
|
||||||
|
"onlySelected": "Tikai iezīmētais",
|
||||||
"withBackground": "",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "",
|
"exportEmbedScene_details": "",
|
||||||
@@ -96,10 +100,15 @@
|
|||||||
"flipVertical": "",
|
"flipVertical": "",
|
||||||
"viewMode": "",
|
"viewMode": "",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "",
|
||||||
"share": ""
|
"share": "",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "",
|
"clearReset": "",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "",
|
"export": "",
|
||||||
"exportToPng": "",
|
"exportToPng": "",
|
||||||
"exportToSvg": "",
|
"exportToSvg": "",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "",
|
"selection": "",
|
||||||
"draw": "",
|
|
||||||
"rectangle": "",
|
"rectangle": "",
|
||||||
"diamond": "",
|
"diamond": "",
|
||||||
"ellipse": "",
|
"ellipse": "",
|
||||||
"arrow": "",
|
"arrow": "",
|
||||||
"line": "",
|
"line": "",
|
||||||
|
"freedraw": "",
|
||||||
"text": "",
|
"text": "",
|
||||||
"library": "",
|
"library": "",
|
||||||
"lock": ""
|
"lock": ""
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "",
|
"linearElement": "",
|
||||||
"freeDraw": "",
|
"freeDraw": "",
|
||||||
"text": "",
|
"text": "",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "",
|
"linearElementMulti": "",
|
||||||
"lockAngle": "",
|
"lockAngle": "",
|
||||||
"resize": "",
|
"resize": "",
|
||||||
@@ -210,14 +221,27 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": ""
|
"title": ""
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "",
|
"blog": "",
|
||||||
"click": "",
|
"click": "",
|
||||||
"curvedArrow": "",
|
"curvedArrow": "",
|
||||||
"curvedLine": "",
|
"curvedLine": "",
|
||||||
"documentation": "",
|
"documentation": "",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "",
|
"drag": "",
|
||||||
"editor": "",
|
"editor": "",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "",
|
"github": "",
|
||||||
"howto": "",
|
"howto": "",
|
||||||
"or": "",
|
"or": "",
|
||||||
|
|||||||
+28
-4
@@ -20,6 +20,10 @@
|
|||||||
"background": "နောက်ခံ",
|
"background": "နောက်ခံ",
|
||||||
"fill": "ဖြည့်",
|
"fill": "ဖြည့်",
|
||||||
"strokeWidth": "မျဉ်းအထူ",
|
"strokeWidth": "မျဉ်းအထူ",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "မျဉ်းပုံစံ",
|
"strokeStyle": "မျဉ်းပုံစံ",
|
||||||
"strokeStyle_solid": "အပြည့်",
|
"strokeStyle_solid": "အပြည့်",
|
||||||
"strokeStyle_dashed": "မျဉ်းပြတ်",
|
"strokeStyle_dashed": "မျဉ်းပြတ်",
|
||||||
@@ -39,7 +43,7 @@
|
|||||||
"fontFamily": "စာလုံးပုံစံ",
|
"fontFamily": "စာလုံးပုံစံ",
|
||||||
"onlySelected": "ရွေးထားသလောက်",
|
"onlySelected": "ရွေးထားသလောက်",
|
||||||
"withBackground": "",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "မြင်ကွင်းပါမြှုပ်နှံ၍ထုတ်ပါ",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "ထုတ်ယူလိုက်သော PNG/SVG ထဲမြင်ကွင်းအချက်အလက်များပါဝင်သဖြင့် ပြန်လည်ရယူနိုင်သော်လည်း ဖိုင်အရွယ်အစားကြီးပါမည်။",
|
"exportEmbedScene_details": "ထုတ်ယူလိုက်သော PNG/SVG ထဲမြင်ကွင်းအချက်အလက်များပါဝင်သဖြင့် ပြန်လည်ရယူနိုင်သော်လည်း ဖိုင်အရွယ်အစားကြီးပါမည်။",
|
||||||
"addWatermark": "\"Excalidraw ဖြင့်ဖန်တီးသည်။\" စာသားထည့်",
|
"addWatermark": "\"Excalidraw ဖြင့်ဖန်တီးသည်။\" စာသားထည့်",
|
||||||
"handDrawn": "လက်ရေး",
|
"handDrawn": "လက်ရေး",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "",
|
"flipVertical": "",
|
||||||
"viewMode": "",
|
"viewMode": "",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "",
|
||||||
"share": ""
|
"share": "",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "ကားချပ်ရှင်းလင်း",
|
"clearReset": "ကားချပ်ရှင်းလင်း",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "ထုတ်",
|
"export": "ထုတ်",
|
||||||
"exportToPng": "PNG ထုတ်",
|
"exportToPng": "PNG ထုတ်",
|
||||||
"exportToSvg": "SVG ထုတ်",
|
"exportToSvg": "SVG ထုတ်",
|
||||||
"copyToClipboard": "ကူးယူ",
|
"copyToClipboard": "ကူးယူ",
|
||||||
"copyPngToClipboard": "PNG ကူးယူ",
|
"copyPngToClipboard": "PNG ကူးယူ",
|
||||||
"scale": "စကေး",
|
"scale": "စကေး",
|
||||||
"save": "သိမ်း",
|
"save": "",
|
||||||
"saveAs": "ပြောင်းသိမ်း",
|
"saveAs": "ပြောင်းသိမ်း",
|
||||||
"load": "တင်သွင်း",
|
"load": "တင်သွင်း",
|
||||||
"getShareableLink": "မျှဝေရန် လင့်ခ်ရယူ",
|
"getShareableLink": "မျှဝေရန် လင့်ခ်ရယူ",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "ရွေးချယ်",
|
"selection": "ရွေးချယ်",
|
||||||
"freedraw": "အလွတ်ရေးဆွဲ",
|
|
||||||
"rectangle": "စတုဂံ",
|
"rectangle": "စတုဂံ",
|
||||||
"diamond": "စိန်",
|
"diamond": "စိန်",
|
||||||
"ellipse": "အဝိုင်း",
|
"ellipse": "အဝိုင်း",
|
||||||
"arrow": "မြှား",
|
"arrow": "မြှား",
|
||||||
"line": "မျဉ်း",
|
"line": "မျဉ်း",
|
||||||
|
"freedraw": "",
|
||||||
"text": "စာသား",
|
"text": "စာသား",
|
||||||
"library": "မှတ်တမ်း",
|
"library": "မှတ်တမ်း",
|
||||||
"lock": "ရွေးချယ်ထားသောကိရိယာကိုသာဆက်သုံး"
|
"lock": "ရွေးချယ်ထားသောကိရိယာကိုသာဆက်သုံး"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "အမှတ်များချမှတ်ရေးဆွဲရန်ကလစ်နှိပ်ပါ၊ မျဉ်းတစ်ကြောင်းတည်းအတွက် တရွတ်ဆွဲပါ။",
|
"linearElement": "အမှတ်များချမှတ်ရေးဆွဲရန်ကလစ်နှိပ်ပါ၊ မျဉ်းတစ်ကြောင်းတည်းအတွက် တရွတ်ဆွဲပါ။",
|
||||||
"freeDraw": "ကလစ်နှိပ်၍ တရွတ်ဆွဲပါ၊ ပြီးလျှင်လွှတ်ပါ။",
|
"freeDraw": "ကလစ်နှိပ်၍ တရွတ်ဆွဲပါ၊ ပြီးလျှင်လွှတ်ပါ။",
|
||||||
"text": "မှတ်ချက်။ ။မည်သည့်ကိရိယာရွေးထားသည်ဖြစ်စေ ကလစ်နှစ်ချက်နှိပ်၍စာသားထည့်နိုင်သည်",
|
"text": "မှတ်ချက်။ ။မည်သည့်ကိရိယာရွေးထားသည်ဖြစ်စေ ကလစ်နှစ်ချက်နှိပ်၍စာသားထည့်နိုင်သည်",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "နောက်ဆုံးအမှတ်ပေါ်တွင်ကလစ်နှိပ်ခြင်း၊ Escape (သို့) Enter နှိပ်ခြင်းတို့ဖြင့်အဆုံးသတ်နိုင်",
|
"linearElementMulti": "နောက်ဆုံးအမှတ်ပေါ်တွင်ကလစ်နှိပ်ခြင်း၊ Escape (သို့) Enter နှိပ်ခြင်းတို့ဖြင့်အဆုံးသတ်နိုင်",
|
||||||
"lockAngle": "",
|
"lockAngle": "",
|
||||||
"resize": "အချိုးအစားကန့်သတ်ရန် Shift နှင့် ဗဟိုမှချိန်ညှိရန် Alt တို့ကိုနှိပ်ထားနိုင်သည်",
|
"resize": "အချိုးအစားကန့်သတ်ရန် Shift နှင့် ဗဟိုမှချိန်ညှိရန် Alt တို့ကိုနှိပ်ထားနိုင်သည်",
|
||||||
@@ -210,14 +221,27 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "ချို့ယွင်းချက်"
|
"title": "ချို့ယွင်းချက်"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "",
|
"blog": "",
|
||||||
"click": "",
|
"click": "",
|
||||||
"curvedArrow": "",
|
"curvedArrow": "",
|
||||||
"curvedLine": "",
|
"curvedLine": "",
|
||||||
"documentation": "",
|
"documentation": "",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "",
|
"drag": "",
|
||||||
"editor": "",
|
"editor": "",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "",
|
"github": "",
|
||||||
"howto": "",
|
"howto": "",
|
||||||
"or": "",
|
"or": "",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Bakgrunn",
|
"background": "Bakgrunn",
|
||||||
"fill": "Fyll",
|
"fill": "Fyll",
|
||||||
"strokeWidth": "Strektykkelse",
|
"strokeWidth": "Strektykkelse",
|
||||||
|
"strokeShape": "Strekstil",
|
||||||
|
"strokeShape_gel": "Gelepenn",
|
||||||
|
"strokeShape_fountain": "Fyllepenn",
|
||||||
|
"strokeShape_brush": "Pensel",
|
||||||
"strokeStyle": "Strekstil",
|
"strokeStyle": "Strekstil",
|
||||||
"strokeStyle_solid": "Heltrukket",
|
"strokeStyle_solid": "Heltrukket",
|
||||||
"strokeStyle_dashed": "Stiplet",
|
"strokeStyle_dashed": "Stiplet",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Skriftstørrelse",
|
"fontSize": "Skriftstørrelse",
|
||||||
"fontFamily": "Fontfamilie",
|
"fontFamily": "Fontfamilie",
|
||||||
"onlySelected": "Kun valgte",
|
"onlySelected": "Kun valgte",
|
||||||
"withBackground": "Med bakgrunn",
|
"withBackground": "Bakgrunn",
|
||||||
"exportEmbedScene": "Bygg inn scenen i den eksporterte filen",
|
"exportEmbedScene": "Bygg inn scene",
|
||||||
"exportEmbedScene_details": "Scenedata vil bli lagret i den eksporterte PNG/SVG-filen, slik at scenen kan gjenopprettes fra den.\nDet vil øke den eksporterte filstørrelsen.",
|
"exportEmbedScene_details": "Scenedata vil bli lagret i den eksporterte PNG/SVG-filen, slik at scenen kan gjenopprettes fra den.\nDet vil øke den eksporterte filstørrelsen.",
|
||||||
"addWatermark": "Legg til \"Laget med Excalidraw\"",
|
"addWatermark": "Legg til \"Laget med Excalidraw\"",
|
||||||
"handDrawn": "Håndtegnet",
|
"handDrawn": "Håndtegnet",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Snu vertikalt",
|
"flipVertical": "Snu vertikalt",
|
||||||
"viewMode": "Visningsmodus",
|
"viewMode": "Visningsmodus",
|
||||||
"toggleExportColorScheme": "Veksle eksport av fargepalett",
|
"toggleExportColorScheme": "Veksle eksport av fargepalett",
|
||||||
"share": "Del"
|
"share": "Del",
|
||||||
|
"showStroke": "Vis fargevelger for kantfarge",
|
||||||
|
"showBackground": "Vis fargevelger for bakgrunnsfarge",
|
||||||
|
"toggleTheme": "Veksle tema"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Tøm lerretet og tilbakestill bakgrunnsfargen",
|
"clearReset": "Tøm lerretet og tilbakestill bakgrunnsfargen",
|
||||||
|
"exportJSON": "Eksporter til fil",
|
||||||
|
"exportImage": "Lagre som bilde",
|
||||||
"export": "Eksporter",
|
"export": "Eksporter",
|
||||||
"exportToPng": "Eksporter til PNG",
|
"exportToPng": "Eksporter til PNG",
|
||||||
"exportToSvg": "Eksporter til SVG",
|
"exportToSvg": "Eksporter til SVG",
|
||||||
"copyToClipboard": "Kopier til utklippstavle",
|
"copyToClipboard": "Kopier til utklippstavle",
|
||||||
"copyPngToClipboard": "Kopier PNG til utklippstavlen",
|
"copyPngToClipboard": "Kopier PNG til utklippstavlen",
|
||||||
"scale": "Skalering",
|
"scale": "Skalering",
|
||||||
"save": "Lagre",
|
"save": "Lagre til aktiv fil",
|
||||||
"saveAs": "Lagre som",
|
"saveAs": "Lagre som",
|
||||||
"load": "Åpne",
|
"load": "Åpne",
|
||||||
"getShareableLink": "Få delingslenke",
|
"getShareableLink": "Få delingslenke",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Velg",
|
"selection": "Velg",
|
||||||
"freedraw": "Frihåndstegning",
|
|
||||||
"rectangle": "Rektangel",
|
"rectangle": "Rektangel",
|
||||||
"diamond": "Diamant",
|
"diamond": "Diamant",
|
||||||
"ellipse": "Ellipse",
|
"ellipse": "Ellipse",
|
||||||
"arrow": "Pil",
|
"arrow": "Pil",
|
||||||
"line": "Linje",
|
"line": "Linje",
|
||||||
|
"freedraw": "Tegn",
|
||||||
"text": "Tekst",
|
"text": "Tekst",
|
||||||
"library": "Bibliotek",
|
"library": "Bibliotek",
|
||||||
"lock": "Behold merket verktøy som aktivt"
|
"lock": "Behold merket verktøy som aktivt"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Klikk for å starte linje med flere punkter, eller dra for en enkel linje",
|
"linearElement": "Klikk for å starte linje med flere punkter, eller dra for en enkel linje",
|
||||||
"freeDraw": "Klikk og dra, slipp når du er ferdig",
|
"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",
|
"text": "Tips: du kan også legge til tekst ved å dobbeltklikke hvor som helst med utvalgsverktøyet",
|
||||||
|
"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",
|
"linearElementMulti": "Klikk på siste punkt eller trykk Escape eller Enter for å fullføre",
|
||||||
"lockAngle": "Du kan låse vinkelen ved å holde nede SHIFT",
|
"lockAngle": "Du kan låse vinkelen ved å holde nede SHIFT",
|
||||||
"resize": "Du kan beholde forholdet ved å trykke SHIFT mens du endrer størrelse,\ntrykk ALT for å endre størrelsen fra midten",
|
"resize": "Du kan beholde forholdet ved å trykke SHIFT mens du endrer størrelse,\ntrykk ALT for å endre størrelsen fra midten",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Feil"
|
"title": "Feil"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Lagre til disk",
|
||||||
|
"disk_details": "Eksporter scene-dataene til en fil som du kan importere fra senere.",
|
||||||
|
"disk_button": "Lagre til fil",
|
||||||
|
"link_title": "Delbar lenke",
|
||||||
|
"link_details": "Eksporter som en skrivebeskyttet lenke.",
|
||||||
|
"link_button": "Eksporter til lenke",
|
||||||
|
"excalidrawplus_description": "Lagre scenen til ditt Excalidraw+ arbeidsområde.",
|
||||||
|
"excalidrawplus_button": "Eksporter",
|
||||||
|
"excalidrawplus_exportError": "Kunne ikke eksportere til Excalidraw+ for øyeblikket..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Les bloggen vår",
|
"blog": "Les bloggen vår",
|
||||||
"click": "klikk",
|
"click": "klikk",
|
||||||
"curvedArrow": "Buet pil",
|
"curvedArrow": "Buet pil",
|
||||||
"curvedLine": "Buet linje",
|
"curvedLine": "Buet linje",
|
||||||
"documentation": "Dokumentasjon",
|
"documentation": "Dokumentasjon",
|
||||||
|
"doubleClick": "dobbeltklikk",
|
||||||
"drag": "dra",
|
"drag": "dra",
|
||||||
"editor": "Redigeringsvisning",
|
"editor": "Redigeringsvisning",
|
||||||
|
"editSelectedShape": "Rediger valgt figur (tekst/pil/linje)",
|
||||||
"github": "Funnet et problem? Send inn",
|
"github": "Funnet et problem? Send inn",
|
||||||
"howto": "Følg våre veiledninger",
|
"howto": "Følg våre veiledninger",
|
||||||
"or": "eller",
|
"or": "eller",
|
||||||
"preventBinding": "Forhindre pilbinding",
|
"preventBinding": "Forhindre pilbinding",
|
||||||
"shapes": "Former",
|
"shapes": "Former",
|
||||||
"shortcuts": "Tastatursnarveier",
|
"shortcuts": "Tastatursnarveier",
|
||||||
"textFinish": "Fullfør redigering (tekst)",
|
"textFinish": "Fullfør redigering (teksteditor)",
|
||||||
"textNewLine": "Legg til ny linje (tekst)",
|
"textNewLine": "Legg til ny linje (teksteditor)",
|
||||||
"title": "Hjelp",
|
"title": "Hjelp",
|
||||||
"view": "Vis",
|
"view": "Vis",
|
||||||
"zoomToFit": "Zoom for å se alle elementer",
|
"zoomToFit": "Zoom for å se alle elementer",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Achtergrond",
|
"background": "Achtergrond",
|
||||||
"fill": "Invulling",
|
"fill": "Invulling",
|
||||||
"strokeWidth": "Lijnbreedte",
|
"strokeWidth": "Lijnbreedte",
|
||||||
|
"strokeShape": "Lijnstijl",
|
||||||
|
"strokeShape_gel": "Gel pen",
|
||||||
|
"strokeShape_fountain": "Vulpen",
|
||||||
|
"strokeShape_brush": "Penseel",
|
||||||
"strokeStyle": "Lijnstijl",
|
"strokeStyle": "Lijnstijl",
|
||||||
"strokeStyle_solid": "Ononderbroken",
|
"strokeStyle_solid": "Ononderbroken",
|
||||||
"strokeStyle_dashed": "Gestreept",
|
"strokeStyle_dashed": "Gestreept",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Tekstgrootte",
|
"fontSize": "Tekstgrootte",
|
||||||
"fontFamily": "Lettertype",
|
"fontFamily": "Lettertype",
|
||||||
"onlySelected": "Enkel geselecteerde",
|
"onlySelected": "Enkel geselecteerde",
|
||||||
"withBackground": "Met achtergrond",
|
"withBackground": "Achtergrond",
|
||||||
"exportEmbedScene": "Scène in geëxporteerd bestand invoegen",
|
"exportEmbedScene": "Scène insluiten",
|
||||||
"exportEmbedScene_details": "Scènegegevens worden in het geëxporteerde PNG/SVG-bestand opgeslagen zodat de scène kan worden hersteld.\nDe grootte van de geëxporteerde bestanden zal toenemen.",
|
"exportEmbedScene_details": "Scènegegevens worden in het geëxporteerde PNG/SVG-bestand opgeslagen zodat de scène kan worden hersteld.\nDe grootte van de geëxporteerde bestanden zal toenemen.",
|
||||||
"addWatermark": "Voeg \"Gemaakt met Excalidraw\" toe",
|
"addWatermark": "Voeg \"Gemaakt met Excalidraw\" toe",
|
||||||
"handDrawn": "Handgetekend",
|
"handDrawn": "Handgetekend",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Verticaal spiegelen",
|
"flipVertical": "Verticaal spiegelen",
|
||||||
"viewMode": "Weergavemodus",
|
"viewMode": "Weergavemodus",
|
||||||
"toggleExportColorScheme": "Kleurenschema exporteren aan/uit",
|
"toggleExportColorScheme": "Kleurenschema exporteren aan/uit",
|
||||||
"share": "Deel"
|
"share": "Deel",
|
||||||
|
"showStroke": "Toon lijn kleur kiezer",
|
||||||
|
"showBackground": "Toon achtergrondkleur kiezer",
|
||||||
|
"toggleTheme": "Thema aan/uit"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Canvas opnieuw instellen",
|
"clearReset": "Canvas opnieuw instellen",
|
||||||
|
"exportJSON": "Exporteren naar bestand",
|
||||||
|
"exportImage": "Als afbeelding opslaan",
|
||||||
"export": "Exporteren",
|
"export": "Exporteren",
|
||||||
"exportToPng": "Exporteren naar PNG",
|
"exportToPng": "Exporteren naar PNG",
|
||||||
"exportToSvg": "Exporteren naar SVG",
|
"exportToSvg": "Exporteren naar SVG",
|
||||||
"copyToClipboard": "Kopieer",
|
"copyToClipboard": "Kopieer",
|
||||||
"copyPngToClipboard": "Kopieer als PNG",
|
"copyPngToClipboard": "Kopieer als PNG",
|
||||||
"scale": "Schaal",
|
"scale": "Schaal",
|
||||||
"save": "Opslaan",
|
"save": "Opslaan naar huidige bestand",
|
||||||
"saveAs": "Opslaan als",
|
"saveAs": "Opslaan als",
|
||||||
"load": "Open",
|
"load": "Open",
|
||||||
"getShareableLink": "Maak een deelbare link",
|
"getShareableLink": "Maak een deelbare link",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Selectie",
|
"selection": "Selectie",
|
||||||
"freedraw": "Vrij tekenen",
|
|
||||||
"rectangle": "Rechthoek",
|
"rectangle": "Rechthoek",
|
||||||
"diamond": "Ruit",
|
"diamond": "Ruit",
|
||||||
"ellipse": "Ovaal",
|
"ellipse": "Ovaal",
|
||||||
"arrow": "Pijl",
|
"arrow": "Pijl",
|
||||||
"line": "Lijn",
|
"line": "Lijn",
|
||||||
|
"freedraw": "Tekenen",
|
||||||
"text": "Tekst",
|
"text": "Tekst",
|
||||||
"library": "Bibliotheek",
|
"library": "Bibliotheek",
|
||||||
"lock": "Geselecteerde tool actief houden na tekenen"
|
"lock": "Geselecteerde tool actief houden na tekenen"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Klik om meerdere punten te starten, sleep voor één lijn",
|
"linearElement": "Klik om meerdere punten te starten, sleep voor één lijn",
|
||||||
"freeDraw": "Klik en sleep, laat los als je klaar bent",
|
"freeDraw": "Klik en sleep, laat los als je klaar bent",
|
||||||
"text": "Tip: je kunt tekst toevoegen door ergens dubbel te klikken met de selectietool",
|
"text": "Tip: je kunt tekst toevoegen door ergens dubbel te klikken met de selectietool",
|
||||||
|
"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",
|
"linearElementMulti": "Klik op het laatste punt of druk op Escape of Enter om te stoppen",
|
||||||
"lockAngle": "Je kunt de hoek beperken door SHIFT ingedrukt te houden",
|
"lockAngle": "Je kunt de hoek beperken door SHIFT ingedrukt te houden",
|
||||||
"resize": "Houd tijdens het vergroten SHIFT ingedrukt om verhoudingen te behouden,\ngebruik ALT om vanuit het midden te vergroten/verkleinen",
|
"resize": "Houd tijdens het vergroten SHIFT ingedrukt om verhoudingen te behouden,\ngebruik ALT om vanuit het midden te vergroten/verkleinen",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Fout"
|
"title": "Fout"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Opslaan op schijf",
|
||||||
|
"disk_details": "De scènegegevens exporteren naar een bestand waaruit u later kunt importeren.",
|
||||||
|
"disk_button": "Opslaan naar bestand",
|
||||||
|
"link_title": "Deelbare link",
|
||||||
|
"link_details": "Exporteren als een alleen-lezen link.",
|
||||||
|
"link_button": "Exporteer naar link",
|
||||||
|
"excalidrawplus_description": "Sla de scène op in je Excalidraw+ werkruimte.",
|
||||||
|
"excalidrawplus_button": "Exporteren",
|
||||||
|
"excalidrawplus_exportError": "Kan op dit moment niet exporteren naar Excalidraw+..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Lees onze blog",
|
"blog": "Lees onze blog",
|
||||||
"click": "klik",
|
"click": "klik",
|
||||||
"curvedArrow": "Gebogen pijl",
|
"curvedArrow": "Gebogen pijl",
|
||||||
"curvedLine": "Kromme lijn",
|
"curvedLine": "Kromme lijn",
|
||||||
"documentation": "Documentatie",
|
"documentation": "Documentatie",
|
||||||
|
"doubleClick": "dubbelklikken",
|
||||||
"drag": "slepen",
|
"drag": "slepen",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
|
"editSelectedShape": "Bewerk geselecteerde vorm (tekst/pijl/lijn)",
|
||||||
"github": "Probleem gevonden? Verzenden",
|
"github": "Probleem gevonden? Verzenden",
|
||||||
"howto": "Volg onze handleidingen",
|
"howto": "Volg onze handleidingen",
|
||||||
"or": "of",
|
"or": "of",
|
||||||
"preventBinding": "Pijlbinding voorkomen",
|
"preventBinding": "Pijlbinding voorkomen",
|
||||||
"shapes": "Vormen",
|
"shapes": "Vormen",
|
||||||
"shortcuts": "Sneltoetsen",
|
"shortcuts": "Sneltoetsen",
|
||||||
"textFinish": "Voltooi bewerken (tekst)",
|
"textFinish": "Voltooi het bewerken (teksteditor)",
|
||||||
"textNewLine": "Nieuwe regel toevoegen (tekst)",
|
"textNewLine": "Nieuwe regel toevoegen (teksteditor)",
|
||||||
"title": "Help",
|
"title": "Help",
|
||||||
"view": "Weergave",
|
"view": "Weergave",
|
||||||
"zoomToFit": "Zoom in op alle elementen",
|
"zoomToFit": "Zoom in op alle elementen",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Bakgrunn",
|
"background": "Bakgrunn",
|
||||||
"fill": "Fyll",
|
"fill": "Fyll",
|
||||||
"strokeWidth": "Strekbreidd",
|
"strokeWidth": "Strekbreidd",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "Strekstil",
|
"strokeStyle": "Strekstil",
|
||||||
"strokeStyle_solid": "Solid",
|
"strokeStyle_solid": "Solid",
|
||||||
"strokeStyle_dashed": "Stipla",
|
"strokeStyle_dashed": "Stipla",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Skriftstorleik",
|
"fontSize": "Skriftstorleik",
|
||||||
"fontFamily": "Skrifttype",
|
"fontFamily": "Skrifttype",
|
||||||
"onlySelected": "Kun valde",
|
"onlySelected": "Kun valde",
|
||||||
"withBackground": "Med bakgrunn",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "Bygg scena inn i eksportert fil",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "Scenedata vert lagra i den eksporterte PNG- eller SVG-fila slik at scena kan bli gjenopprettast frå den. Dette vil auke eksportert filstorleik.",
|
"exportEmbedScene_details": "Scenedata vert lagra i den eksporterte PNG- eller SVG-fila slik at scena kan bli gjenopprettast frå den. Dette vil auke eksportert filstorleik.",
|
||||||
"addWatermark": "Legg til «Laga med Excalidraw»",
|
"addWatermark": "Legg til «Laga med Excalidraw»",
|
||||||
"handDrawn": "Handteikna",
|
"handDrawn": "Handteikna",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Vipp loddrett",
|
"flipVertical": "Vipp loddrett",
|
||||||
"viewMode": "Visningsmodus",
|
"viewMode": "Visningsmodus",
|
||||||
"toggleExportColorScheme": "Veksle eksport av fargepalett",
|
"toggleExportColorScheme": "Veksle eksport av fargepalett",
|
||||||
"share": "Del"
|
"share": "Del",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Tilbakestill lerretet",
|
"clearReset": "Tilbakestill lerretet",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "Eksporter",
|
"export": "Eksporter",
|
||||||
"exportToPng": "Eksporter til PNG",
|
"exportToPng": "Eksporter til PNG",
|
||||||
"exportToSvg": "Eksporter til SVG",
|
"exportToSvg": "Eksporter til SVG",
|
||||||
"copyToClipboard": "Kopier til utklippstavla",
|
"copyToClipboard": "Kopier til utklippstavla",
|
||||||
"copyPngToClipboard": "Kopier PNG til utklippstavla",
|
"copyPngToClipboard": "Kopier PNG til utklippstavla",
|
||||||
"scale": "Skaler",
|
"scale": "Skaler",
|
||||||
"save": "Lagre",
|
"save": "",
|
||||||
"saveAs": "Lagre som",
|
"saveAs": "Lagre som",
|
||||||
"load": "Opne",
|
"load": "Opne",
|
||||||
"getShareableLink": "Hent delingslenke",
|
"getShareableLink": "Hent delingslenke",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Vel",
|
"selection": "Vel",
|
||||||
"freedraw": "Frihandsteikning",
|
|
||||||
"rectangle": "Rektangel",
|
"rectangle": "Rektangel",
|
||||||
"diamond": "Diamant",
|
"diamond": "Diamant",
|
||||||
"ellipse": "Ellipse",
|
"ellipse": "Ellipse",
|
||||||
"arrow": "Pil",
|
"arrow": "Pil",
|
||||||
"line": "Linje",
|
"line": "Linje",
|
||||||
|
"freedraw": "",
|
||||||
"text": "Tekst",
|
"text": "Tekst",
|
||||||
"library": "Bibliotek",
|
"library": "Bibliotek",
|
||||||
"lock": "Hald fram med valt verktøy"
|
"lock": "Hald fram med valt verktøy"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Klikk for å starte linje med fleire punkt, eller drag for ei enkel linje",
|
"linearElement": "Klikk for å starte linje med fleire punkt, eller drag for ei enkel linje",
|
||||||
"freeDraw": "Klikk og drag, slepp når du er ferdig",
|
"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",
|
"text": "Tips: du kan òg leggje til tekst ved å dobbeltklikke kor som helst med utvalgsverktyet",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "Klikk på siste punkt eller trykk Escape eller Enter for å fullføre",
|
"linearElementMulti": "Klikk på siste punkt eller trykk Escape eller Enter for å fullføre",
|
||||||
"lockAngle": "Du kan begrense vinkelen ved å holde nede SKIFT",
|
"lockAngle": "Du kan begrense vinkelen ved å holde nede SKIFT",
|
||||||
"resize": "Du kan halde fram med forholdet ved å trykke SHIFT medan du endrar storleik,\ntrykk ALT for å endre storleiken frå midten",
|
"resize": "Du kan halde fram med forholdet ved å trykke SHIFT medan du endrar storleik,\ntrykk ALT for å endre storleiken frå midten",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Feil"
|
"title": "Feil"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Les bloggen vår",
|
"blog": "Les bloggen vår",
|
||||||
"click": "klikk",
|
"click": "klikk",
|
||||||
"curvedArrow": "Boga pil",
|
"curvedArrow": "Boga pil",
|
||||||
"curvedLine": "Boga linje",
|
"curvedLine": "Boga linje",
|
||||||
"documentation": "Dokumentasjon",
|
"documentation": "Dokumentasjon",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "drag",
|
"drag": "drag",
|
||||||
"editor": "Redigering",
|
"editor": "Redigering",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "Funne eit problem? Send inn",
|
"github": "Funne eit problem? Send inn",
|
||||||
"howto": "Følg vegleiinga vår",
|
"howto": "Følg vegleiinga vår",
|
||||||
"or": "eller",
|
"or": "eller",
|
||||||
"preventBinding": "Hindre pilkopling",
|
"preventBinding": "Hindre pilkopling",
|
||||||
"shapes": "Formar",
|
"shapes": "Formar",
|
||||||
"shortcuts": "Tastatursnarvegar",
|
"shortcuts": "Tastatursnarvegar",
|
||||||
"textFinish": "Fullfør redigering (tekst)",
|
"textFinish": "",
|
||||||
"textNewLine": "Legg til ny linje (tekst)",
|
"textNewLine": "",
|
||||||
"title": "Hjelp",
|
"title": "Hjelp",
|
||||||
"view": "Vising",
|
"view": "Vising",
|
||||||
"zoomToFit": "Zoom for å sjå alle elementa",
|
"zoomToFit": "Zoom for å sjå alle elementa",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Rèireplan",
|
"background": "Rèireplan",
|
||||||
"fill": "Empliment",
|
"fill": "Empliment",
|
||||||
"strokeWidth": "Largor de contorn",
|
"strokeWidth": "Largor de contorn",
|
||||||
|
"strokeShape": "Fòrma del trach",
|
||||||
|
"strokeShape_gel": "Estilo gèl",
|
||||||
|
"strokeShape_fountain": "Calam",
|
||||||
|
"strokeShape_brush": "Pincèl",
|
||||||
"strokeStyle": "Estil de contorn",
|
"strokeStyle": "Estil de contorn",
|
||||||
"strokeStyle_solid": "Solide",
|
"strokeStyle_solid": "Solide",
|
||||||
"strokeStyle_dashed": "Tiret",
|
"strokeStyle_dashed": "Tiret",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Talha poliça",
|
"fontSize": "Talha poliça",
|
||||||
"fontFamily": "Familha de poliça",
|
"fontFamily": "Familha de poliça",
|
||||||
"onlySelected": "Seleccion sonque",
|
"onlySelected": "Seleccion sonque",
|
||||||
"withBackground": "Inclure lo rèireplan",
|
"withBackground": "Rèireplan",
|
||||||
"exportEmbedScene": "Integrar la scèna al fichièr d’expo",
|
"exportEmbedScene": "Scèna embarcada",
|
||||||
"exportEmbedScene_details": "Las donadas de scèna seràn enregistradas dins lo fichièr PNG/SVG exportat, per que la scèna pòsca èsser restaurada a partir d’aqueste fichièr.\nAumentarà la talha del fichièr exportat.",
|
"exportEmbedScene_details": "Las donadas de scèna seràn enregistradas dins lo fichièr PNG/SVG exportat, per que la scèna pòsca èsser restaurada a partir d’aqueste fichièr.\nAumentarà la talha del fichièr exportat.",
|
||||||
"addWatermark": "Apondre « Fabricat amb Excalidraw »",
|
"addWatermark": "Apondre « Fabricat amb Excalidraw »",
|
||||||
"handDrawn": "A la man levada",
|
"handDrawn": "A la man levada",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Virar verticalament",
|
"flipVertical": "Virar verticalament",
|
||||||
"viewMode": "Mòde de vista",
|
"viewMode": "Mòde de vista",
|
||||||
"toggleExportColorScheme": "Alternar l’esquèma de color d’expòrt",
|
"toggleExportColorScheme": "Alternar l’esquèma de color d’expòrt",
|
||||||
"share": "Partejar"
|
"share": "Partejar",
|
||||||
|
"showStroke": "Mostrar lo selector de color de contorn",
|
||||||
|
"showBackground": "Mostrar lo selector de color de fons",
|
||||||
|
"toggleTheme": "Alternar tèma"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Reïnicializar lo canabàs",
|
"clearReset": "Reïnicializar lo canabàs",
|
||||||
|
"exportJSON": "Exportar en fichièr",
|
||||||
|
"exportImage": "Salvar coma imatge",
|
||||||
"export": "Exportar",
|
"export": "Exportar",
|
||||||
"exportToPng": "Exportar en PNG",
|
"exportToPng": "Exportar en PNG",
|
||||||
"exportToSvg": "Exportar en SVG",
|
"exportToSvg": "Exportar en SVG",
|
||||||
"copyToClipboard": "Copiar al quichapapièrs",
|
"copyToClipboard": "Copiar al quichapapièrs",
|
||||||
"copyPngToClipboard": "Copiar PNG al quichapapièrs",
|
"copyPngToClipboard": "Copiar PNG al quichapapièrs",
|
||||||
"scale": "Escala",
|
"scale": "Escala",
|
||||||
"save": "Enregistrar",
|
"save": "Salvar al fichièr actual",
|
||||||
"saveAs": "Enregistrar jos",
|
"saveAs": "Enregistrar jos",
|
||||||
"load": "Cargar",
|
"load": "Cargar",
|
||||||
"getShareableLink": "Obténer lo ligam de partatge",
|
"getShareableLink": "Obténer lo ligam de partatge",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Seleccion",
|
"selection": "Seleccion",
|
||||||
"freedraw": "Dessenh liure",
|
|
||||||
"rectangle": "Rectangle",
|
"rectangle": "Rectangle",
|
||||||
"diamond": "Lausange",
|
"diamond": "Lausange",
|
||||||
"ellipse": "Ellipsa",
|
"ellipse": "Ellipsa",
|
||||||
"arrow": "Sageta",
|
"arrow": "Sageta",
|
||||||
"line": "Linha",
|
"line": "Linha",
|
||||||
|
"freedraw": "Dessenhar",
|
||||||
"text": "Tèxt",
|
"text": "Tèxt",
|
||||||
"library": "Bibliotèca",
|
"library": "Bibliotèca",
|
||||||
"lock": "Mantenir activa l’aisina aprèp dessenhar"
|
"lock": "Mantenir activa l’aisina aprèp dessenhar"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Clicatz per començar mantun punt, lisatz per una sola linha",
|
"linearElement": "Clicatz per començar mantun punt, lisatz per una sola linha",
|
||||||
"freeDraw": "Clicatz e lisatz, relargatz un còp acabat",
|
"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 l’aisina de seleccion",
|
"text": "Astúcia : podètz tanben apondre de tèxt en doble clicant ont que siá amb l’aisina de seleccion",
|
||||||
|
"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",
|
"linearElementMulti": "Clicatz sul darrièr punt o quichatz Ecap o Entrada per acabar",
|
||||||
"lockAngle": "Podètz restrénger l’angle en mantenent MAJ",
|
"lockAngle": "Podètz restrénger l’angle en mantenent MAJ",
|
||||||
"resize": "Podètz servar las proporcions en mantenent la tòca MAJ pendent lo redimensionament,\nmantenètz la tòca ALT per redimensionar a partir del centre",
|
"resize": "Podètz servar las proporcions en mantenent la tòca MAJ pendent lo redimensionament,\nmantenètz la tòca ALT per redimensionar a partir del centre",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Error"
|
"title": "Error"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Salvar al disc",
|
||||||
|
"disk_details": "Exportar las donadas de la scèna cap a un fichièr que podètz importar mai tard.",
|
||||||
|
"disk_button": "Salvar al fichièr",
|
||||||
|
"link_title": "Ligam de partejar",
|
||||||
|
"link_details": "Exportar coma un ligam de lectura sola.",
|
||||||
|
"link_button": "Exportar en ligam",
|
||||||
|
"excalidrawplus_description": "Enregistrar la scèna dins vòstre espaci de trabalh Excalidraw+.",
|
||||||
|
"excalidrawplus_button": "Exportar",
|
||||||
|
"excalidrawplus_exportError": "Export impossibla cap a Excalidraw+ pel moment..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Legir nòstre blog",
|
"blog": "Legir nòstre blog",
|
||||||
"click": "clic",
|
"click": "clic",
|
||||||
"curvedArrow": "Sageta corba",
|
"curvedArrow": "Sageta corba",
|
||||||
"curvedLine": "Linha corba",
|
"curvedLine": "Linha corba",
|
||||||
"documentation": "Documentacion",
|
"documentation": "Documentacion",
|
||||||
|
"doubleClick": "doble clic",
|
||||||
"drag": "lisar",
|
"drag": "lisar",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
|
"editSelectedShape": "Modificar la fòrma seleccionada (tèxt/sageta/linha)",
|
||||||
"github": "Problèma trobat ? Senhalatz-lo",
|
"github": "Problèma trobat ? Senhalatz-lo",
|
||||||
"howto": "Seguissètz nòstras guidas",
|
"howto": "Seguissètz nòstras guidas",
|
||||||
"or": "o",
|
"or": "o",
|
||||||
"preventBinding": "Empachar la fixacion de sagetas",
|
"preventBinding": "Empachar la fixacion de sagetas",
|
||||||
"shapes": "Formas",
|
"shapes": "Formas",
|
||||||
"shortcuts": "Acorchis clavièr",
|
"shortcuts": "Acorchis clavièr",
|
||||||
"textFinish": "Terminar l’edicion (tèxt)",
|
"textFinish": "Terminar l’edicion (editor de tèxt)",
|
||||||
"textNewLine": "Apondre linha novèl (tèxt)",
|
"textNewLine": "Apondre linha novèl (editor de tèxt)",
|
||||||
"title": "Ajuda",
|
"title": "Ajuda",
|
||||||
"view": "Vista",
|
"view": "Vista",
|
||||||
"zoomToFit": "Zoomar per veire totes los elements",
|
"zoomToFit": "Zoomar per veire totes los elements",
|
||||||
|
|||||||
+42
-18
@@ -20,6 +20,10 @@
|
|||||||
"background": "ਬੈਕਗਰਾਉਂਡ",
|
"background": "ਬੈਕਗਰਾਉਂਡ",
|
||||||
"fill": "ਭਰਨਾ",
|
"fill": "ਭਰਨਾ",
|
||||||
"strokeWidth": "ਰੇਖਾ ਦੀ ਚੌੜਾਈ",
|
"strokeWidth": "ਰੇਖਾ ਦੀ ਚੌੜਾਈ",
|
||||||
|
"strokeShape": "ਰੇਖਾ ਦਾ ਆਕ੍ਰਿਤੀ",
|
||||||
|
"strokeShape_gel": "ਜੈੱਲ ਪੈੱਨ",
|
||||||
|
"strokeShape_fountain": "ਫਾਉਨਟੇਨ ਪੈੱਨ",
|
||||||
|
"strokeShape_brush": "ਬੁਰਸ਼ ਪੈੱਨ",
|
||||||
"strokeStyle": "ਰੇਖਾ ਦਾ ਸਟਾਇਲ",
|
"strokeStyle": "ਰੇਖਾ ਦਾ ਸਟਾਇਲ",
|
||||||
"strokeStyle_solid": "ਠੋਸ",
|
"strokeStyle_solid": "ਠੋਸ",
|
||||||
"strokeStyle_dashed": "ਡੈਸ਼ ਵਾਲੀ",
|
"strokeStyle_dashed": "ਡੈਸ਼ ਵਾਲੀ",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "ਫੌਂਟ ਅਕਾਰ",
|
"fontSize": "ਫੌਂਟ ਅਕਾਰ",
|
||||||
"fontFamily": "ਫੌਂਟ ਪਰਿਵਾਰ",
|
"fontFamily": "ਫੌਂਟ ਪਰਿਵਾਰ",
|
||||||
"onlySelected": "ਸਿਰਫ ਚੁਣੇ ਹੋਏ ਹੀ",
|
"onlySelected": "ਸਿਰਫ ਚੁਣੇ ਹੋਏ ਹੀ",
|
||||||
"withBackground": "ਬੈਕਗਰਾਉਂਂਡ ਨਾਲ",
|
"withBackground": "ਬੈਕਗਰਾਉਂਡ",
|
||||||
"exportEmbedScene": "ਦ੍ਰਿਸ਼ ਨੂੰ ਨਿਰਯਾਤ ਕੀਤੀ ਫਾਈਲ ਵਿੱਚ ਮੜ੍ਹੋ",
|
"exportEmbedScene": "ਦ੍ਰਿਸ਼ ਮੜ੍ਹੋ",
|
||||||
"exportEmbedScene_details": "ਦ੍ਰਿਸ਼ ਦਾ ਡਾਟਾ ਨਿਰਯਾਤ ਕੀਤੀ PNG/SVG ਫਾਈਲ ਵਿੱਚ ਸਾਂਭ ਦਿੱਤਾ ਜਾਵੇਗਾ ਤਾਂ ਜੋ ਇਸ ਵਿੱਚੋਂ ਦ੍ਰਿਸ਼ ਨੂੰ ਬਹਾਲ ਕੀਤਾ ਜਾ ਸਕੇ। ਇਹ ਨਿਰਯਾਤ ਕੀਤੀ ਜਾਣ ਵਾਲੀ ਫਾਈਲ ਦਾ ਅਕਾਰ ਵਧਾ ਦੇਵੇਗਾ।",
|
"exportEmbedScene_details": "ਦ੍ਰਿਸ਼ ਦਾ ਡਾਟਾ ਨਿਰਯਾਤ ਕੀਤੀ PNG/SVG ਫਾਈਲ ਵਿੱਚ ਸਾਂਭ ਦਿੱਤਾ ਜਾਵੇਗਾ ਤਾਂ ਜੋ ਇਸ ਵਿੱਚੋਂ ਦ੍ਰਿਸ਼ ਨੂੰ ਬਹਾਲ ਕੀਤਾ ਜਾ ਸਕੇ। ਇਹ ਨਿਰਯਾਤ ਕੀਤੀ ਜਾਣ ਵਾਲੀ ਫਾਈਲ ਦਾ ਅਕਾਰ ਵਧਾ ਦੇਵੇਗਾ।",
|
||||||
"addWatermark": "\"Excalidraw ਨਾਲ ਬਣਾਇਆ\" ਜੋੜੋ",
|
"addWatermark": "\"Excalidraw ਨਾਲ ਬਣਾਇਆ\" ਜੋੜੋ",
|
||||||
"handDrawn": "ਹੱਥਲਿਖਤ",
|
"handDrawn": "ਹੱਥਲਿਖਤ",
|
||||||
@@ -61,14 +65,14 @@
|
|||||||
"architect": "ਭਵਨ ਨਿਰਮਾਣਕਾਰੀ",
|
"architect": "ਭਵਨ ਨਿਰਮਾਣਕਾਰੀ",
|
||||||
"artist": "ਕਲਾਕਾਰ",
|
"artist": "ਕਲਾਕਾਰ",
|
||||||
"cartoonist": "ਕਾਰਟੂਨਿਸਟ",
|
"cartoonist": "ਕਾਰਟੂਨਿਸਟ",
|
||||||
"fileTitle": "",
|
"fileTitle": "ਫਾਈਲ ਦਾ ਨਾਂ",
|
||||||
"colorPicker": "ਰੰਗ ਚੋਣਕਾਰ",
|
"colorPicker": "ਰੰਗ ਚੋਣਕਾਰ",
|
||||||
"canvasBackground": "ਕੈਨਵਸ ਦਾ ਬੈਕਗਰਾਉਂਡ",
|
"canvasBackground": "ਕੈਨਵਸ ਦਾ ਬੈਕਗਰਾਉਂਡ",
|
||||||
"drawingCanvas": "ਡਰਾਇੰਗ ਕੈਨਵਸ",
|
"drawingCanvas": "ਡਰਾਇੰਗ ਕੈਨਵਸ",
|
||||||
"layers": "ਪਰਤਾਂ",
|
"layers": "ਪਰਤਾਂ",
|
||||||
"actions": "ਕਾਰਵਾਈਆਂ",
|
"actions": "ਕਾਰਵਾਈਆਂ",
|
||||||
"language": "ਭਾਸ਼ਾ",
|
"language": "ਭਾਸ਼ਾ",
|
||||||
"liveCollaboration": "",
|
"liveCollaboration": "ਲਾਇਵ ਸਹਿਯੋਗ",
|
||||||
"duplicateSelection": "ਡੁਪਲੀਕੇਟ ਬਣਾਓ",
|
"duplicateSelection": "ਡੁਪਲੀਕੇਟ ਬਣਾਓ",
|
||||||
"untitled": "ਬੇ-ਸਿਰਨਾਵਾਂ",
|
"untitled": "ਬੇ-ਸਿਰਨਾਵਾਂ",
|
||||||
"name": "ਨਾਂ",
|
"name": "ਨਾਂ",
|
||||||
@@ -92,21 +96,26 @@
|
|||||||
"centerHorizontally": "ਖੜ੍ਹਵੇਂ ਵਿਚਕਾਰ ਕਰੋ",
|
"centerHorizontally": "ਖੜ੍ਹਵੇਂ ਵਿਚਕਾਰ ਕਰੋ",
|
||||||
"distributeHorizontally": "ਖੜ੍ਹਵੇਂ ਇਕਸਾਰ ਵੰਡੋ",
|
"distributeHorizontally": "ਖੜ੍ਹਵੇਂ ਇਕਸਾਰ ਵੰਡੋ",
|
||||||
"distributeVertically": "ਲੇਟਵੇਂ ਇਕਸਾਰ ਵੰਡੋ",
|
"distributeVertically": "ਲੇਟਵੇਂ ਇਕਸਾਰ ਵੰਡੋ",
|
||||||
"flipHorizontal": "",
|
"flipHorizontal": "ਖਿਤਿਜ ਪਲਟੋ",
|
||||||
"flipVertical": "",
|
"flipVertical": "ਲੰਬਕਾਰੀ ਪਲਟੋ",
|
||||||
"viewMode": "ਦੇਖੋ ਮੋਡ",
|
"viewMode": "ਦੇਖੋ ਮੋਡ",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "ਨਿਰਯਾਤ ਰੰਗ ਦੀ ਸਕੀਮ ਟਾਗਲ ਕਰੋ",
|
||||||
"share": ""
|
"share": "ਸਾਂਝਾ ਕਰੋ",
|
||||||
|
"showStroke": "ਰੇਖਾ ਦਾ ਰੰਗ ਚੋਣਕਾਰ ਦਿਖਾਓ ",
|
||||||
|
"showBackground": "ਬੈਕਗਰਾਉਂਡ ਦਾ ਰੰਗ ਚੋਣਕਾਰ ਦਿਖਾਓ",
|
||||||
|
"toggleTheme": "ਥੀਮ ਬਦਲੋ"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "ਕੈਨਵਸ ਰੀਸੈੱਟ ਕਰੋ",
|
"clearReset": "ਕੈਨਵਸ ਰੀਸੈੱਟ ਕਰੋ",
|
||||||
|
"exportJSON": "ਫਾਈਲ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
|
||||||
|
"exportImage": "ਤਸਵੀਰ ਵਜੋਂ ਸਾਂਭੋ",
|
||||||
"export": "ਨਿਰਯਾਤ",
|
"export": "ਨਿਰਯਾਤ",
|
||||||
"exportToPng": "PNG ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
|
"exportToPng": "PNG ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
|
||||||
"exportToSvg": "SVG ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
|
"exportToSvg": "SVG ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
|
||||||
"copyToClipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
|
"copyToClipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
|
||||||
"copyPngToClipboard": "PNG ਨੂੰ ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
|
"copyPngToClipboard": "PNG ਨੂੰ ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
|
||||||
"scale": "ਪੈਮਾਇਸ਼",
|
"scale": "ਪੈਮਾਇਸ਼",
|
||||||
"save": "ਸਾਂਭੋ",
|
"save": "ਮੌਜੂਦਾ ਫਾਈਲ ਵਿੱਚ ਸਾਂਭੋ",
|
||||||
"saveAs": "ਇਸ ਵਜੋਂ ਸਾਂਭੋ",
|
"saveAs": "ਇਸ ਵਜੋਂ ਸਾਂਭੋ",
|
||||||
"load": "ਲੋਡ ਕਰੋ",
|
"load": "ਲੋਡ ਕਰੋ",
|
||||||
"getShareableLink": "ਸਾਂਝੀ ਕਰਨ ਵਾਲੀ ਲਿੰਕ ਲਵੋ",
|
"getShareableLink": "ਸਾਂਝੀ ਕਰਨ ਵਾਲੀ ਲਿੰਕ ਲਵੋ",
|
||||||
@@ -121,7 +130,7 @@
|
|||||||
"edit": "ਸੋਧੋ",
|
"edit": "ਸੋਧੋ",
|
||||||
"undo": "ਅਣਕੀਤਾ ਕਰੋ",
|
"undo": "ਅਣਕੀਤਾ ਕਰੋ",
|
||||||
"redo": "ਮੁੜ-ਕਰੋ",
|
"redo": "ਮੁੜ-ਕਰੋ",
|
||||||
"resetLibrary": "",
|
"resetLibrary": "ਲਾਇਬ੍ਰੇਰੀ ਰੀਸੈੱਟ ਕਰੋ",
|
||||||
"createNewRoom": "ਨਵਾਂ ਕਮਰਾ ਬਣਾਓ",
|
"createNewRoom": "ਨਵਾਂ ਕਮਰਾ ਬਣਾਓ",
|
||||||
"fullScreen": "ਪੂਰੀ ਸਕਰੀਨ",
|
"fullScreen": "ਪੂਰੀ ਸਕਰੀਨ",
|
||||||
"darkMode": "ਡਾਰਕ ਮੋਡ",
|
"darkMode": "ਡਾਰਕ ਮੋਡ",
|
||||||
@@ -142,22 +151,22 @@
|
|||||||
"loadSceneOverridePrompt": "ਬਾਹਰੀ ਡਰਾਇੰਗ ਨੂੰ ਲੋਡ ਕਰਨਾ ਤੁਹਾਡੀ ਮੌਜੂਦਾ ਸਮੱਗਰੀ ਦੀ ਥਾਂ ਲੈ ਲਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
"loadSceneOverridePrompt": "ਬਾਹਰੀ ਡਰਾਇੰਗ ਨੂੰ ਲੋਡ ਕਰਨਾ ਤੁਹਾਡੀ ਮੌਜੂਦਾ ਸਮੱਗਰੀ ਦੀ ਥਾਂ ਲੈ ਲਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
||||||
"collabStopOverridePrompt": "ਇਜਲਾਸ ਨੂੰ ਰੋਕਣਾ ਪਿਛਲੀ ਲੋਕਲ ਸਾਂਭੀ ਡਰਾਇੰਗ ਦੀ ਥਾਂ ਲੈ ਲਵੇਗਾ। ਪੱਕਾ ਇੰਝ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?\n\n(ਜੇ ਤੁਸੀਂ ਆਪਣੀ ਲੋਕਲ ਡਰਾਇੰਗ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ ਇਹ ਕਰਨ ਦੀ ਬਜਾਏ ਬੱਸ ਆਪਣਾ ਟੈਬ ਬੰਦ ਕਰ ਦਿਉ।)",
|
"collabStopOverridePrompt": "ਇਜਲਾਸ ਨੂੰ ਰੋਕਣਾ ਪਿਛਲੀ ਲੋਕਲ ਸਾਂਭੀ ਡਰਾਇੰਗ ਦੀ ਥਾਂ ਲੈ ਲਵੇਗਾ। ਪੱਕਾ ਇੰਝ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?\n\n(ਜੇ ਤੁਸੀਂ ਆਪਣੀ ਲੋਕਲ ਡਰਾਇੰਗ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ ਇਹ ਕਰਨ ਦੀ ਬਜਾਏ ਬੱਸ ਆਪਣਾ ਟੈਬ ਬੰਦ ਕਰ ਦਿਉ।)",
|
||||||
"errorLoadingLibrary": "ਤੀਜੀ ਧਿਰ ਦੀ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਲੋਡ ਕਰਨ ਵਿੱਚ ਗਲਤੀ ਹੋਈ ਸੀ।",
|
"errorLoadingLibrary": "ਤੀਜੀ ਧਿਰ ਦੀ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਲੋਡ ਕਰਨ ਵਿੱਚ ਗਲਤੀ ਹੋਈ ਸੀ।",
|
||||||
"errorAddingToLibrary": "",
|
"errorAddingToLibrary": "ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚ ਸਮੱਗਰੀ ਨਹੀਂ ਜੋੜ ਸਕੇ",
|
||||||
"errorRemovingFromLibrary": "",
|
"errorRemovingFromLibrary": "ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚੋਂ ਸਮੱਗਰੀ ਨਹੀਂ ਹਟਾ ਸਕੇ",
|
||||||
"confirmAddLibrary": "ਇਹ ਤੁਹਾਡੀ ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚ {{numShapes}} ਆਕ੍ਰਿਤੀ(ਆਂ) ਨੂੰ ਜੋੜ ਦੇਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਇੰਝ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
"confirmAddLibrary": "ਇਹ ਤੁਹਾਡੀ ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚ {{numShapes}} ਆਕ੍ਰਿਤੀ(ਆਂ) ਨੂੰ ਜੋੜ ਦੇਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਇੰਝ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
||||||
"imageDoesNotContainScene": "ਫਿਲਹਾਲ ਤਸਵੀਰਾਂ ਨੂੰ ਆਯਾਤ ਕਰਨ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ।\n\nਕੀ ਤੁਸੀਂ ਦ੍ਰਿਸ਼ ਨੂੰ ਆਯਾਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਸੀ? ਇਸ ਤਸਵੀਰ ਵਿੱਚ ਦ੍ਰਿਸ਼ ਦਾ ਕੋਈ ਵੀ ਡਾਟਾ ਨਜ਼ਰ ਨਹੀਂ ਆ ਰਿਹਾ। ਕੀ ਨਿਰਯਾਤ ਦੌਰਾਨ ਤੁਸੀਂ ਇਹ ਸਮਰੱਥ ਕੀਤਾ ਸੀ?",
|
"imageDoesNotContainScene": "ਫਿਲਹਾਲ ਤਸਵੀਰਾਂ ਨੂੰ ਆਯਾਤ ਕਰਨ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ।\n\nਕੀ ਤੁਸੀਂ ਦ੍ਰਿਸ਼ ਨੂੰ ਆਯਾਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਸੀ? ਇਸ ਤਸਵੀਰ ਵਿੱਚ ਦ੍ਰਿਸ਼ ਦਾ ਕੋਈ ਵੀ ਡਾਟਾ ਨਜ਼ਰ ਨਹੀਂ ਆ ਰਿਹਾ। ਕੀ ਨਿਰਯਾਤ ਦੌਰਾਨ ਤੁਸੀਂ ਇਹ ਸਮਰੱਥ ਕੀਤਾ ਸੀ?",
|
||||||
"cannotRestoreFromImage": "ਇਸ ਤਸਵੀਰ ਫਾਈਲ ਤੋਂ ਦ੍ਰਿਸ਼ ਬਹਾਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ",
|
"cannotRestoreFromImage": "ਇਸ ਤਸਵੀਰ ਫਾਈਲ ਤੋਂ ਦ੍ਰਿਸ਼ ਬਹਾਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ",
|
||||||
"invalidSceneUrl": "",
|
"invalidSceneUrl": "",
|
||||||
"resetLibrary": ""
|
"resetLibrary": "ਇਹ ਤੁਹਾਡੀ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਸਾਫ ਕਰ ਦੇਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਇੰਝ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
|
||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "ਚੋਣਕਾਰ",
|
"selection": "ਚੋਣਕਾਰ",
|
||||||
"freedraw": "ਖੁੱਲ੍ਹੀ ਵਾਹੀ",
|
|
||||||
"rectangle": "ਆਇਤ",
|
"rectangle": "ਆਇਤ",
|
||||||
"diamond": "ਹੀਰਾ",
|
"diamond": "ਹੀਰਾ",
|
||||||
"ellipse": "ਅੰਡਾਕਾਰ",
|
"ellipse": "ਅੰਡਾਕਾਰ",
|
||||||
"arrow": "ਤੀਰ",
|
"arrow": "ਤੀਰ",
|
||||||
"line": "ਲਕੀਰ",
|
"line": "ਲਕੀਰ",
|
||||||
|
"freedraw": "ਵਾਹੋ",
|
||||||
"text": "ਪਾਠ",
|
"text": "ਪਾਠ",
|
||||||
"library": "ਲਾਇਬ੍ਰੇਰੀ",
|
"library": "ਲਾਇਬ੍ਰੇਰੀ",
|
||||||
"lock": "ਡਰਾਇੰਗ ਤੋਂ ਬਾਅਦ ਵੀ ਚੁਣੇ ਹੋਏ ਸੰਦ ਨੂੰ ਸਰਗਰਮ ਰੱਖੋ "
|
"lock": "ਡਰਾਇੰਗ ਤੋਂ ਬਾਅਦ ਵੀ ਚੁਣੇ ਹੋਏ ਸੰਦ ਨੂੰ ਸਰਗਰਮ ਰੱਖੋ "
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਬਿੰਦੂਆਂ ਲਈ ਕਲਿੱਕ ਕਰਕੇ ਸ਼ੁਰੂਆਤ ਕਰੋ, ਇਕਹਿਰੀ ਲਕੀਰ ਲਈ ਘਸੀਟੋ",
|
"linearElement": "ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਬਿੰਦੂਆਂ ਲਈ ਕਲਿੱਕ ਕਰਕੇ ਸ਼ੁਰੂਆਤ ਕਰੋ, ਇਕਹਿਰੀ ਲਕੀਰ ਲਈ ਘਸੀਟੋ",
|
||||||
"freeDraw": "ਕਲਿੱਕ ਕਰਕੇ ਘਸੀਟੋ, ਪੂਰਾ ਹੋਣ 'ਤੇ ਛੱਡ ਦਿਉ",
|
"freeDraw": "ਕਲਿੱਕ ਕਰਕੇ ਘਸੀਟੋ, ਪੂਰਾ ਹੋਣ 'ਤੇ ਛੱਡ ਦਿਉ",
|
||||||
"text": "ਨੁਸਖਾ: ਤੁਸੀਂ ਚੋਣਕਾਰ ਸੰਦ ਰਾਹੀਂ ਕਿਤੇ ਵੀ ਡਬਲ-ਕਲਿੱਕ ਕਰਕੇ ਵੀ ਪਾਠ ਜੋੜ ਸਕਦੇ ਹੋ",
|
"text": "ਨੁਸਖਾ: ਤੁਸੀਂ ਚੋਣਕਾਰ ਸੰਦ ਰਾਹੀਂ ਕਿਤੇ ਵੀ ਡਬਲ-ਕਲਿੱਕ ਕਰਕੇ ਵੀ ਪਾਠ ਜੋੜ ਸਕਦੇ ਹੋ",
|
||||||
|
"text_selected": "ਲਿਖਤ ਨੂੰ ਸੋਧਣ ਲਈ ਡਬਲ-ਕਲਿੱਕ ਕਰੋ ਜਾਂ ਐਂਟਰ ਦਬਾਓ",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "ਮੁਕੰਮਲ ਕਰਨ ਲਈ ਆਖਰੀ ਬਿੰਦੂ 'ਤੇ ਕਲਿੱਕ ਕਰੋ ਜਾਂ ਇਸਕੇਪ ਜਾਂ ਐਂਟਰ ਦਬਾਓ",
|
"linearElementMulti": "ਮੁਕੰਮਲ ਕਰਨ ਲਈ ਆਖਰੀ ਬਿੰਦੂ 'ਤੇ ਕਲਿੱਕ ਕਰੋ ਜਾਂ ਇਸਕੇਪ ਜਾਂ ਐਂਟਰ ਦਬਾਓ",
|
||||||
"lockAngle": "ਤੁਸੀਂ SHIFT ਦਬਾਈ ਰੱਖ ਕੇ ਕੋਣਾਂ ਨੂੰ ਕਾਬੂ ਕਰ ਸਕਦੇ ਹੋ",
|
"lockAngle": "ਤੁਸੀਂ SHIFT ਦਬਾਈ ਰੱਖ ਕੇ ਕੋਣਾਂ ਨੂੰ ਕਾਬੂ ਕਰ ਸਕਦੇ ਹੋ",
|
||||||
"resize": "ਤੁਸੀਂ ਅਕਾਰ ਬਦਲਦੇ ਸਮੇਂ SHIFT ਦਬਾਈ ਰੱਖ ਕੇ ਅਨੁਪਾਤ ਨੂੰ ਕਾਬੂ ਕਰ ਸਕਦੇ ਹੋ, ਵਿਚਕਾਰ ਤੋਂ ਅਕਾਰ ਬਦਲਣ ਲਈ ALT ਦਬਾਓ",
|
"resize": "ਤੁਸੀਂ ਅਕਾਰ ਬਦਲਦੇ ਸਮੇਂ SHIFT ਦਬਾਈ ਰੱਖ ਕੇ ਅਨੁਪਾਤ ਨੂੰ ਕਾਬੂ ਕਰ ਸਕਦੇ ਹੋ, ਵਿਚਕਾਰ ਤੋਂ ਅਕਾਰ ਬਦਲਣ ਲਈ ALT ਦਬਾਓ",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "ਗਲਤੀ"
|
"title": "ਗਲਤੀ"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "ਡਿਸਕ ਵਿੱਚ ਸਾਂਭੋ",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "ਫਾਈਲ ਵਿੱਚ ਸਾਂਭੋ",
|
||||||
|
"link_title": "ਸਾਂਝੀ ਕਰਨ ਵਾਲੀ ਲਿੰਕ",
|
||||||
|
"link_details": "ਸਿਰਫ ਪੜ੍ਹੇ-ਜਾਣ ਵਾਲੀ ਲਿੰਕ ਨਿਰਯਾਤ ਕਰੋ।",
|
||||||
|
"link_button": "ਲਿੰਕ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "ਨਿਰਯਾਤ ਕਰੋ",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "ਸਾਡਾ ਬਲੌਗ ਪੜ੍ਹੋ",
|
"blog": "ਸਾਡਾ ਬਲੌਗ ਪੜ੍ਹੋ",
|
||||||
"click": "ਕਲਿੱਕ",
|
"click": "ਕਲਿੱਕ",
|
||||||
"curvedArrow": "ਵਿੰਗਾ ਤੀਰ",
|
"curvedArrow": "ਵਿੰਗਾ ਤੀਰ",
|
||||||
"curvedLine": "ਵਿੰਗੀ ਲਕੀਰ",
|
"curvedLine": "ਵਿੰਗੀ ਲਕੀਰ",
|
||||||
"documentation": "ਕਾਗਜ਼ਾਤ",
|
"documentation": "ਕਾਗਜ਼ਾਤ",
|
||||||
|
"doubleClick": "ਡਬਲ-ਕਲਿੱਕ",
|
||||||
"drag": "ਘਸੀਟੋ",
|
"drag": "ਘਸੀਟੋ",
|
||||||
"editor": "ਸੋਧਕ",
|
"editor": "ਸੋਧਕ",
|
||||||
|
"editSelectedShape": "ਚੁਣੀ ਆਕ੍ਰਿਤੀ ਸੋਧੋ (ਲਿਖਤ/ਤੀਰ/ਲਾਈਨ)",
|
||||||
"github": "ਕੋਈ ਸਮੱਸਿਆ ਲੱਭੀ? ਜਮ੍ਹਾਂ ਕਰਵਾਓ",
|
"github": "ਕੋਈ ਸਮੱਸਿਆ ਲੱਭੀ? ਜਮ੍ਹਾਂ ਕਰਵਾਓ",
|
||||||
"howto": "ਸਾਡੀਆਂ ਗਾਈਡਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ",
|
"howto": "ਸਾਡੀਆਂ ਗਾਈਡਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ",
|
||||||
"or": "ਜਾਂ",
|
"or": "ਜਾਂ",
|
||||||
"preventBinding": "ਤੀਰ ਬੱਝਣਾ ਰੋਕੋ",
|
"preventBinding": "ਤੀਰ ਬੱਝਣਾ ਰੋਕੋ",
|
||||||
"shapes": "ਆਕ੍ਰਿਤੀਆਂ",
|
"shapes": "ਆਕ੍ਰਿਤੀਆਂ",
|
||||||
"shortcuts": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ",
|
"shortcuts": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ",
|
||||||
"textFinish": "ਸੋਧ ਮੁਕੰਮਲ ਕਰੋ (ਪਾਠ)",
|
"textFinish": "ਸੋਧਣਾ ਮੁਕੰਮਲ ਕਰੋ (ਲਿਖਤ ਸੋਧਕ)",
|
||||||
"textNewLine": "ਨਵੀਂ ਪੰਕਤੀ ਜੋੜੋ (ਪਾਠ)",
|
"textNewLine": "",
|
||||||
"title": "ਮਦਦ",
|
"title": "ਮਦਦ",
|
||||||
"view": "ਦਿੱਖ",
|
"view": "ਦਿੱਖ",
|
||||||
"zoomToFit": "ਸਾਰੇ ਐਲੀਮੈਂਟਾਂ ਨੂੰ ਫਿੱਟ ਕਰਨ ਲਈ ਜ਼ੂਮ ਕਰੋ",
|
"zoomToFit": "ਸਾਰੇ ਐਲੀਮੈਂਟਾਂ ਨੂੰ ਫਿੱਟ ਕਰਨ ਲਈ ਜ਼ੂਮ ਕਰੋ",
|
||||||
@@ -256,7 +280,7 @@
|
|||||||
"copyToClipboardAsPng": "",
|
"copyToClipboardAsPng": "",
|
||||||
"fileSaved": "ਫਾਈਲ ਸਾਂਭੀ ਗਈ।",
|
"fileSaved": "ਫਾਈਲ ਸਾਂਭੀ ਗਈ।",
|
||||||
"fileSavedToFilename": "{filename} ਵਿੱਚ ਸਾਂਭੀ",
|
"fileSavedToFilename": "{filename} ਵਿੱਚ ਸਾਂਭੀ",
|
||||||
"canvas": "",
|
"canvas": "ਕੈਨਵਸ",
|
||||||
"selection": ""
|
"selection": "ਚੋਣ"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,38 +1,40 @@
|
|||||||
{
|
{
|
||||||
"ar-SA": 84,
|
"ar-SA": 90,
|
||||||
"bg-BG": 92,
|
"bg-BG": 81,
|
||||||
"ca-ES": 99,
|
"ca-ES": 100,
|
||||||
|
"cs-CZ": 35,
|
||||||
"de-DE": 100,
|
"de-DE": 100,
|
||||||
"el-GR": 97,
|
"el-GR": 86,
|
||||||
"en": 100,
|
"en": 100,
|
||||||
"es-ES": 99,
|
"es-ES": 98,
|
||||||
"fa-IR": 87,
|
"fa-IR": 77,
|
||||||
"fi-FI": 99,
|
"fi-FI": 99,
|
||||||
"fr-FR": 100,
|
"fr-FR": 100,
|
||||||
"he-IL": 88,
|
"he-IL": 78,
|
||||||
"hi-IN": 91,
|
"hi-IN": 80,
|
||||||
"hu-HU": 80,
|
"hu-HU": 71,
|
||||||
"id-ID": 100,
|
"id-ID": 100,
|
||||||
"it-IT": 100,
|
"it-IT": 100,
|
||||||
"ja-JP": 96,
|
"ja-JP": 100,
|
||||||
"kab-KAB": 99,
|
"kab-KAB": 98,
|
||||||
"ko-KR": 91,
|
"kk-KZ": 31,
|
||||||
"lv-LV": 0,
|
"ko-KR": 81,
|
||||||
"my-MM": 75,
|
"lv-LV": 16,
|
||||||
|
"my-MM": 67,
|
||||||
"nb-NO": 100,
|
"nb-NO": 100,
|
||||||
"nl-NL": 100,
|
"nl-NL": 100,
|
||||||
"nn-NO": 100,
|
"nn-NO": 88,
|
||||||
"oc-FR": 100,
|
"oc-FR": 100,
|
||||||
"pa-IN": 93,
|
"pa-IN": 96,
|
||||||
"pl-PL": 94,
|
"pl-PL": 83,
|
||||||
"pt-BR": 100,
|
"pt-BR": 88,
|
||||||
"pt-PT": 99,
|
"pt-PT": 100,
|
||||||
"ro-RO": 100,
|
"ro-RO": 100,
|
||||||
"ru-RU": 97,
|
"ru-RU": 100,
|
||||||
"sk-SK": 100,
|
"sk-SK": 100,
|
||||||
"sv-SE": 100,
|
"sv-SE": 100,
|
||||||
"tr-TR": 100,
|
"tr-TR": 89,
|
||||||
"uk-UA": 100,
|
"uk-UA": 95,
|
||||||
"zh-CN": 100,
|
"zh-CN": 98,
|
||||||
"zh-TW": 99
|
"zh-TW": 99
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Kolor wypełnienia",
|
"background": "Kolor wypełnienia",
|
||||||
"fill": "Wypełnienie",
|
"fill": "Wypełnienie",
|
||||||
"strokeWidth": "Grubość obramowania",
|
"strokeWidth": "Grubość obramowania",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "Styl obrysu",
|
"strokeStyle": "Styl obrysu",
|
||||||
"strokeStyle_solid": "Pełny",
|
"strokeStyle_solid": "Pełny",
|
||||||
"strokeStyle_dashed": "Kreskowany",
|
"strokeStyle_dashed": "Kreskowany",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Rozmiar tekstu",
|
"fontSize": "Rozmiar tekstu",
|
||||||
"fontFamily": "Krój pisma",
|
"fontFamily": "Krój pisma",
|
||||||
"onlySelected": "Tylko wybrane",
|
"onlySelected": "Tylko wybrane",
|
||||||
"withBackground": "Z tłem",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "Osadź scenę w eksportowanym pliku",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "Dane sceny zostaną zapisane w eksportowanym pliku PNG/SVG tak, aby scena mogła zostać z niego przywrócona.\nZwiększy to rozmiar eksportowanego pliku.",
|
"exportEmbedScene_details": "Dane sceny zostaną zapisane w eksportowanym pliku PNG/SVG tak, aby scena mogła zostać z niego przywrócona.\nZwiększy to rozmiar eksportowanego pliku.",
|
||||||
"addWatermark": "Dodaj \"Zrobione w Excalidraw\"",
|
"addWatermark": "Dodaj \"Zrobione w Excalidraw\"",
|
||||||
"handDrawn": "Odręczny",
|
"handDrawn": "Odręczny",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "",
|
"flipVertical": "",
|
||||||
"viewMode": "Tryb widoku",
|
"viewMode": "Tryb widoku",
|
||||||
"toggleExportColorScheme": "",
|
"toggleExportColorScheme": "",
|
||||||
"share": ""
|
"share": "",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Wyczyść dokument i zresetuj kolor dokumentu",
|
"clearReset": "Wyczyść dokument i zresetuj kolor dokumentu",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "Zapisz jako",
|
"export": "Zapisz jako",
|
||||||
"exportToPng": "Zapisz jako PNG",
|
"exportToPng": "Zapisz jako PNG",
|
||||||
"exportToSvg": "Zapisz jako SVG",
|
"exportToSvg": "Zapisz jako SVG",
|
||||||
"copyToClipboard": "Skopiuj do schowka",
|
"copyToClipboard": "Skopiuj do schowka",
|
||||||
"copyPngToClipboard": "Skopiuj do schowka jako plik PNG",
|
"copyPngToClipboard": "Skopiuj do schowka jako plik PNG",
|
||||||
"scale": "Skala",
|
"scale": "Skala",
|
||||||
"save": "Zapisz",
|
"save": "",
|
||||||
"saveAs": "Zapisz jako",
|
"saveAs": "Zapisz jako",
|
||||||
"load": "Otwórz",
|
"load": "Otwórz",
|
||||||
"getShareableLink": "Udostępnij",
|
"getShareableLink": "Udostępnij",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Zaznaczenie",
|
"selection": "Zaznaczenie",
|
||||||
"freedraw": "Swobodne rysowanie",
|
|
||||||
"rectangle": "Prostokąt",
|
"rectangle": "Prostokąt",
|
||||||
"diamond": "Romb",
|
"diamond": "Romb",
|
||||||
"ellipse": "Elipsa",
|
"ellipse": "Elipsa",
|
||||||
"arrow": "Strzałka",
|
"arrow": "Strzałka",
|
||||||
"line": "Linia",
|
"line": "Linia",
|
||||||
|
"freedraw": "",
|
||||||
"text": "Tekst",
|
"text": "Tekst",
|
||||||
"library": "Biblioteka",
|
"library": "Biblioteka",
|
||||||
"lock": "Zablokuj wybrane narzędzie"
|
"lock": "Zablokuj wybrane narzędzie"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Naciśnij, aby zrobić punkt, przeciągnij, aby narysować linię",
|
"linearElement": "Naciśnij, aby zrobić punkt, przeciągnij, aby narysować linię",
|
||||||
"freeDraw": "Naciśnij i przeciągnij by rysować, puść kiedy skończysz",
|
"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",
|
"text": "Wskazówka: możesz również dodać tekst klikając dwukrotnie gdziekolwiek za pomocą narzędzia zaznaczania",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "Aby zakończyć krzywą, ponownie kliknij w ostatni punkt, bądź naciśnij Esc albo Enter",
|
"linearElementMulti": "Aby zakończyć krzywą, ponownie kliknij w ostatni punkt, bądź naciśnij Esc albo Enter",
|
||||||
"lockAngle": "Możesz ograniczyć kąt trzymając SHIFT",
|
"lockAngle": "Możesz ograniczyć kąt trzymając SHIFT",
|
||||||
"resize": "Możesz zachować proporcję trzymająć wcisnięty SHIFT, przytrzymaj ALT by zmienić rozmiar względem środka",
|
"resize": "Możesz zachować proporcję trzymająć wcisnięty SHIFT, przytrzymaj ALT by zmienić rozmiar względem środka",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Wystąpił błąd"
|
"title": "Wystąpił błąd"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Przeczytaj na naszym blogu",
|
"blog": "Przeczytaj na naszym blogu",
|
||||||
"click": "kliknięcie",
|
"click": "kliknięcie",
|
||||||
"curvedArrow": "Zakrzywiona strzałka",
|
"curvedArrow": "Zakrzywiona strzałka",
|
||||||
"curvedLine": "Zakrzywiona linia",
|
"curvedLine": "Zakrzywiona linia",
|
||||||
"documentation": "Dokumentacja",
|
"documentation": "Dokumentacja",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "przeciągnij",
|
"drag": "przeciągnij",
|
||||||
"editor": "Edytor",
|
"editor": "Edytor",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "Znalazłeś problem? Prześlij",
|
"github": "Znalazłeś problem? Prześlij",
|
||||||
"howto": "Skorzystaj z instrukcji",
|
"howto": "Skorzystaj z instrukcji",
|
||||||
"or": "lub",
|
"or": "lub",
|
||||||
"preventBinding": "Zapobiegaj wiązaniu strzałek",
|
"preventBinding": "Zapobiegaj wiązaniu strzałek",
|
||||||
"shapes": "Kształty",
|
"shapes": "Kształty",
|
||||||
"shortcuts": "Skróty klawiszowe",
|
"shortcuts": "Skróty klawiszowe",
|
||||||
"textFinish": "Zakończ edycję (tekst)",
|
"textFinish": "",
|
||||||
"textNewLine": "Dodaj nową linię (tekst)",
|
"textNewLine": "",
|
||||||
"title": "Pomoc",
|
"title": "Pomoc",
|
||||||
"view": "Widok",
|
"view": "Widok",
|
||||||
"zoomToFit": "Powiększ, aby wyświetlić wszystkie elementy",
|
"zoomToFit": "Powiększ, aby wyświetlić wszystkie elementy",
|
||||||
|
|||||||
+31
-7
@@ -20,6 +20,10 @@
|
|||||||
"background": "Fundo",
|
"background": "Fundo",
|
||||||
"fill": "Preenchimento",
|
"fill": "Preenchimento",
|
||||||
"strokeWidth": "Espessura do traço",
|
"strokeWidth": "Espessura do traço",
|
||||||
|
"strokeShape": "",
|
||||||
|
"strokeShape_gel": "",
|
||||||
|
"strokeShape_fountain": "",
|
||||||
|
"strokeShape_brush": "",
|
||||||
"strokeStyle": "Estilo de traço",
|
"strokeStyle": "Estilo de traço",
|
||||||
"strokeStyle_solid": "Sólido",
|
"strokeStyle_solid": "Sólido",
|
||||||
"strokeStyle_dashed": "Tracejado",
|
"strokeStyle_dashed": "Tracejado",
|
||||||
@@ -38,8 +42,8 @@
|
|||||||
"fontSize": "Tamanho da fonte",
|
"fontSize": "Tamanho da fonte",
|
||||||
"fontFamily": "Família da fonte",
|
"fontFamily": "Família da fonte",
|
||||||
"onlySelected": "Somente a seleção",
|
"onlySelected": "Somente a seleção",
|
||||||
"withBackground": "Com fundo",
|
"withBackground": "",
|
||||||
"exportEmbedScene": "Incorporar a cena no arquivo exportado",
|
"exportEmbedScene": "",
|
||||||
"exportEmbedScene_details": "Os dados da cena serão salvos no arquivo PNG/SVG exportado para que a cena possa ser restaurada.\nIrá aumentar o tamanho do arquivo exportado.",
|
"exportEmbedScene_details": "Os dados da cena serão salvos no arquivo PNG/SVG exportado para que a cena possa ser restaurada.\nIrá aumentar o tamanho do arquivo exportado.",
|
||||||
"addWatermark": "Adicionar \"Feito com Excalidraw\"",
|
"addWatermark": "Adicionar \"Feito com Excalidraw\"",
|
||||||
"handDrawn": "Manuscrito",
|
"handDrawn": "Manuscrito",
|
||||||
@@ -96,17 +100,22 @@
|
|||||||
"flipVertical": "Inverter verticalmente",
|
"flipVertical": "Inverter verticalmente",
|
||||||
"viewMode": "Modo de visualização",
|
"viewMode": "Modo de visualização",
|
||||||
"toggleExportColorScheme": "Alternar esquema de cores de exportação",
|
"toggleExportColorScheme": "Alternar esquema de cores de exportação",
|
||||||
"share": "Compartilhar"
|
"share": "Compartilhar",
|
||||||
|
"showStroke": "",
|
||||||
|
"showBackground": "",
|
||||||
|
"toggleTheme": ""
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Limpar o canvas e redefinir a cor de fundo",
|
"clearReset": "Limpar o canvas e redefinir a cor de fundo",
|
||||||
|
"exportJSON": "",
|
||||||
|
"exportImage": "",
|
||||||
"export": "Exportar",
|
"export": "Exportar",
|
||||||
"exportToPng": "Exportar em PNG",
|
"exportToPng": "Exportar em PNG",
|
||||||
"exportToSvg": "Exportar em SVG",
|
"exportToSvg": "Exportar em SVG",
|
||||||
"copyToClipboard": "Copiar para o clipboard",
|
"copyToClipboard": "Copiar para o clipboard",
|
||||||
"copyPngToClipboard": "Copiar PNG para área de transferência",
|
"copyPngToClipboard": "Copiar PNG para área de transferência",
|
||||||
"scale": "Escala",
|
"scale": "Escala",
|
||||||
"save": "Salvar",
|
"save": "",
|
||||||
"saveAs": "Salvar como",
|
"saveAs": "Salvar como",
|
||||||
"load": "Carregar",
|
"load": "Carregar",
|
||||||
"getShareableLink": "Obter um link de compartilhamento",
|
"getShareableLink": "Obter um link de compartilhamento",
|
||||||
@@ -152,12 +161,12 @@
|
|||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Seleção",
|
"selection": "Seleção",
|
||||||
"freedraw": "Desenho livre",
|
|
||||||
"rectangle": "Retângulo",
|
"rectangle": "Retângulo",
|
||||||
"diamond": "Losango",
|
"diamond": "Losango",
|
||||||
"ellipse": "Elipse",
|
"ellipse": "Elipse",
|
||||||
"arrow": "Flecha",
|
"arrow": "Flecha",
|
||||||
"line": "Linha",
|
"line": "Linha",
|
||||||
|
"freedraw": "",
|
||||||
"text": "Texto",
|
"text": "Texto",
|
||||||
"library": "Biblioteca",
|
"library": "Biblioteca",
|
||||||
"lock": "Manter ativa a ferramenta selecionada após desenhar"
|
"lock": "Manter ativa a ferramenta selecionada após desenhar"
|
||||||
@@ -171,6 +180,8 @@
|
|||||||
"linearElement": "Clique para iniciar vários pontos, arraste para uma única linha",
|
"linearElement": "Clique para iniciar vários pontos, arraste para uma única linha",
|
||||||
"freeDraw": "Toque e arraste, solte quando terminar",
|
"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",
|
"text": "Dica: você também pode adicionar texto clicando duas vezes em qualquer lugar com a ferramenta de seleção",
|
||||||
|
"text_selected": "",
|
||||||
|
"text_editing": "",
|
||||||
"linearElementMulti": "Clique no último ponto ou pressione Escape ou Enter para terminar",
|
"linearElementMulti": "Clique no último ponto ou pressione Escape ou Enter para terminar",
|
||||||
"lockAngle": "Você pode restringir o ângulo segurando o SHIFT",
|
"lockAngle": "Você pode restringir o ângulo segurando o SHIFT",
|
||||||
"resize": "Você pode restringir proporções segurando SHIFT enquanto redimensiona,\nsegure ALT para redimensionar do centro",
|
"resize": "Você pode restringir proporções segurando SHIFT enquanto redimensiona,\nsegure ALT para redimensionar do centro",
|
||||||
@@ -210,22 +221,35 @@
|
|||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Erro"
|
"title": "Erro"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "",
|
||||||
|
"disk_details": "",
|
||||||
|
"disk_button": "",
|
||||||
|
"link_title": "",
|
||||||
|
"link_details": "",
|
||||||
|
"link_button": "",
|
||||||
|
"excalidrawplus_description": "",
|
||||||
|
"excalidrawplus_button": "",
|
||||||
|
"excalidrawplus_exportError": ""
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Leia o nosso blog",
|
"blog": "Leia o nosso blog",
|
||||||
"click": "clicar",
|
"click": "clicar",
|
||||||
"curvedArrow": "Seta curva",
|
"curvedArrow": "Seta curva",
|
||||||
"curvedLine": "Linha curva",
|
"curvedLine": "Linha curva",
|
||||||
"documentation": "Documentação",
|
"documentation": "Documentação",
|
||||||
|
"doubleClick": "",
|
||||||
"drag": "arrastar",
|
"drag": "arrastar",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
|
"editSelectedShape": "",
|
||||||
"github": "Encontrou algum problema? Nos informe",
|
"github": "Encontrou algum problema? Nos informe",
|
||||||
"howto": "Siga nossos guias",
|
"howto": "Siga nossos guias",
|
||||||
"or": "ou",
|
"or": "ou",
|
||||||
"preventBinding": "Evitar fixação de seta",
|
"preventBinding": "Evitar fixação de seta",
|
||||||
"shapes": "Formas",
|
"shapes": "Formas",
|
||||||
"shortcuts": "Atalhos de teclado",
|
"shortcuts": "Atalhos de teclado",
|
||||||
"textFinish": "Finalizar edição (texto)",
|
"textFinish": "",
|
||||||
"textNewLine": "Adicionar nova linha (texto)",
|
"textNewLine": "",
|
||||||
"title": "Ajudar",
|
"title": "Ajudar",
|
||||||
"view": "Visualizar",
|
"view": "Visualizar",
|
||||||
"zoomToFit": "Ampliar para encaixar todos os elementos",
|
"zoomToFit": "Ampliar para encaixar todos os elementos",
|
||||||
|
|||||||
+82
-58
@@ -20,6 +20,10 @@
|
|||||||
"background": "Fundo",
|
"background": "Fundo",
|
||||||
"fill": "Preenchimento",
|
"fill": "Preenchimento",
|
||||||
"strokeWidth": "Espessura do traço",
|
"strokeWidth": "Espessura do traço",
|
||||||
|
"strokeShape": "Forma do traço",
|
||||||
|
"strokeShape_gel": "Caneta de gel",
|
||||||
|
"strokeShape_fountain": "Caneta de fonte",
|
||||||
|
"strokeShape_brush": "Caneta de pincel",
|
||||||
"strokeStyle": "Estilo de traço",
|
"strokeStyle": "Estilo de traço",
|
||||||
"strokeStyle_solid": "Sólido",
|
"strokeStyle_solid": "Sólido",
|
||||||
"strokeStyle_dashed": "Tracejado",
|
"strokeStyle_dashed": "Tracejado",
|
||||||
@@ -38,9 +42,9 @@
|
|||||||
"fontSize": "Tamanho da fonte",
|
"fontSize": "Tamanho da fonte",
|
||||||
"fontFamily": "Família da fontes",
|
"fontFamily": "Família da fontes",
|
||||||
"onlySelected": "Somente a seleção",
|
"onlySelected": "Somente a seleção",
|
||||||
"withBackground": "Com fundo",
|
"withBackground": "Fundo",
|
||||||
"exportEmbedScene": "Incorporar a cena no arquivo exportado",
|
"exportEmbedScene": "Cena embutida",
|
||||||
"exportEmbedScene_details": "Os dados da cena serão salvos no arquivo PNG/SVG exportado para que a cena possa ser restaurada.\nIrá aumentar o tamanho do arquivo exportado.",
|
"exportEmbedScene_details": "Os dados da cena serão guardados no ficheiro PNG/SVG exportado para que a cena possa ser restaurada.\nIrá aumentar o tamanho do ficheiro exportado.",
|
||||||
"addWatermark": "Adicionar \"Feito com Excalidraw\"",
|
"addWatermark": "Adicionar \"Feito com Excalidraw\"",
|
||||||
"handDrawn": "Manuscrito",
|
"handDrawn": "Manuscrito",
|
||||||
"normal": "Normal",
|
"normal": "Normal",
|
||||||
@@ -51,7 +55,7 @@
|
|||||||
"veryLarge": "Muito grande",
|
"veryLarge": "Muito grande",
|
||||||
"solid": "Sólido",
|
"solid": "Sólido",
|
||||||
"hachure": "Eclosão",
|
"hachure": "Eclosão",
|
||||||
"crossHatch": "Hachurado",
|
"crossHatch": "Sombreado",
|
||||||
"thin": "Fino",
|
"thin": "Fino",
|
||||||
"bold": "Espesso",
|
"bold": "Espesso",
|
||||||
"left": "Esquerda",
|
"left": "Esquerda",
|
||||||
@@ -63,8 +67,8 @@
|
|||||||
"cartoonist": "Caricaturista",
|
"cartoonist": "Caricaturista",
|
||||||
"fileTitle": "Nome do ficheiro",
|
"fileTitle": "Nome do ficheiro",
|
||||||
"colorPicker": "Seletor de cores",
|
"colorPicker": "Seletor de cores",
|
||||||
"canvasBackground": "Fundo da tela",
|
"canvasBackground": "Fundo da área de desenho",
|
||||||
"drawingCanvas": "Tela de desenho",
|
"drawingCanvas": "Área de desenho",
|
||||||
"layers": "Camadas",
|
"layers": "Camadas",
|
||||||
"actions": "Ações",
|
"actions": "Ações",
|
||||||
"language": "Idioma",
|
"language": "Idioma",
|
||||||
@@ -72,7 +76,7 @@
|
|||||||
"duplicateSelection": "Duplicar",
|
"duplicateSelection": "Duplicar",
|
||||||
"untitled": "Sem título",
|
"untitled": "Sem título",
|
||||||
"name": "Nome",
|
"name": "Nome",
|
||||||
"yourName": "Seu nome",
|
"yourName": "O seu nome",
|
||||||
"madeWithExcalidraw": "Feito com Excalidraw",
|
"madeWithExcalidraw": "Feito com Excalidraw",
|
||||||
"group": "Agrupar seleção",
|
"group": "Agrupar seleção",
|
||||||
"ungroup": "Desagrupar seleção",
|
"ungroup": "Desagrupar seleção",
|
||||||
@@ -80,34 +84,39 @@
|
|||||||
"showGrid": "Mostrar grelha",
|
"showGrid": "Mostrar grelha",
|
||||||
"addToLibrary": "Adicionar à biblioteca",
|
"addToLibrary": "Adicionar à biblioteca",
|
||||||
"removeFromLibrary": "Remover da biblioteca",
|
"removeFromLibrary": "Remover da biblioteca",
|
||||||
"libraryLoadingMessage": "Carregando biblioteca…",
|
"libraryLoadingMessage": "A carregar a biblioteca…",
|
||||||
"libraries": "Procurar bibliotecas",
|
"libraries": "Procurar bibliotecas",
|
||||||
"loadingScene": "Carregando cena…",
|
"loadingScene": "A carregar a cena…",
|
||||||
"align": "Alinhamento",
|
"align": "Alinhamento",
|
||||||
"alignTop": "Alinhar ao topo",
|
"alignTop": "Alinhar ao topo",
|
||||||
"alignBottom": "Alinhar ao fundo",
|
"alignBottom": "Alinhar ao fundo",
|
||||||
"alignLeft": "Alinhar à esquerda",
|
"alignLeft": "Alinhar à esquerda",
|
||||||
"alignRight": "Alinhar à direita",
|
"alignRight": "Alinhar à direita",
|
||||||
"centerVertically": "Centralizar verticalmente",
|
"centerVertically": "Centrar verticalmente",
|
||||||
"centerHorizontally": "Centralizar horizontalmente",
|
"centerHorizontally": "Centrar horizontalmente",
|
||||||
"distributeHorizontally": "Distribuir horizontalmente",
|
"distributeHorizontally": "Distribuir horizontalmente",
|
||||||
"distributeVertically": "Distribuir verticalmente",
|
"distributeVertically": "Distribuir verticalmente",
|
||||||
"flipHorizontal": "Inverter horizontalmente",
|
"flipHorizontal": "Inverter horizontalmente",
|
||||||
"flipVertical": "Inverter verticalmente",
|
"flipVertical": "Inverter verticalmente",
|
||||||
"viewMode": "Modo de visualização",
|
"viewMode": "Modo de visualização",
|
||||||
"toggleExportColorScheme": "Alternar esquema de cores de exportação",
|
"toggleExportColorScheme": "Alternar esquema de cores de exportação",
|
||||||
"share": "Partilhar"
|
"share": "Partilhar",
|
||||||
|
"showStroke": "Mostrar seletor de cores do traço",
|
||||||
|
"showBackground": "Mostrar seletor de cores do fundo",
|
||||||
|
"toggleTheme": "Alternar tema"
|
||||||
},
|
},
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"clearReset": "Limpar o canvas e redefinir a cor de fundo",
|
"clearReset": "Limpar a área de desenho e redefinir a cor de fundo",
|
||||||
|
"exportJSON": "Exportar para ficheiro",
|
||||||
|
"exportImage": "Guardar como imagem",
|
||||||
"export": "Exportar",
|
"export": "Exportar",
|
||||||
"exportToPng": "Exportar em PNG",
|
"exportToPng": "Exportar em PNG",
|
||||||
"exportToSvg": "Exportar em SVG",
|
"exportToSvg": "Exportar em SVG",
|
||||||
"copyToClipboard": "Copiar para o clipboard",
|
"copyToClipboard": "Copiar para o clipboard",
|
||||||
"copyPngToClipboard": "Copiar PNG para área de transferência",
|
"copyPngToClipboard": "Copiar PNG para área de transferência",
|
||||||
"scale": "Escala",
|
"scale": "Escala",
|
||||||
"save": "Guardar",
|
"save": "Guardar no ficheiro atual",
|
||||||
"saveAs": "Salvar como",
|
"saveAs": "Guardar como",
|
||||||
"load": "Carregar",
|
"load": "Carregar",
|
||||||
"getShareableLink": "Obter um link de partilha",
|
"getShareableLink": "Obter um link de partilha",
|
||||||
"close": "Fechar",
|
"close": "Fechar",
|
||||||
@@ -123,117 +132,132 @@
|
|||||||
"redo": "Refazer",
|
"redo": "Refazer",
|
||||||
"resetLibrary": "Repor a biblioteca",
|
"resetLibrary": "Repor a biblioteca",
|
||||||
"createNewRoom": "Criar nova sala",
|
"createNewRoom": "Criar nova sala",
|
||||||
"fullScreen": "Tela cheia",
|
"fullScreen": "Ecrã inteiro",
|
||||||
"darkMode": "Modo escuro",
|
"darkMode": "Modo escuro",
|
||||||
"lightMode": "Modo claro",
|
"lightMode": "Modo claro",
|
||||||
"zenMode": "Modo Zen",
|
"zenMode": "Modo zen",
|
||||||
"exitZenMode": "Sair do modo zen"
|
"exitZenMode": "Sair do modo zen"
|
||||||
},
|
},
|
||||||
"alerts": {
|
"alerts": {
|
||||||
"clearReset": "Isto irá limpar toda a tela. Você tem certeza?",
|
"clearReset": "Isto irá limpar toda a área de desenho. Tem a certeza?",
|
||||||
"couldNotCreateShareableLink": "Não foi possível criar um link de compartilhamento.",
|
"couldNotCreateShareableLink": "Não foi possível criar um link partilhável.",
|
||||||
"couldNotCreateShareableLinkTooBig": "Não foi possível criar um link compartilhável: a cena é muito grande",
|
"couldNotCreateShareableLinkTooBig": "Não foi possível criar um link partilhável: a cena é muito grande",
|
||||||
"couldNotLoadInvalidFile": "Não foi possível carregar o arquivo inválido",
|
"couldNotLoadInvalidFile": "Não foi possível carregar o ficheiro inválido",
|
||||||
"importBackendFailed": "A importação do servidor falhou.",
|
"importBackendFailed": "A importação do servidor falhou.",
|
||||||
"cannotExportEmptyCanvas": "Não é possível exportar um canvas vazío.",
|
"cannotExportEmptyCanvas": "Não é possível exportar uma área de desenho vazia.",
|
||||||
"couldNotCopyToClipboard": "Não foi possível copiar no clipboard. Experimente no navegador Chrome.",
|
"couldNotCopyToClipboard": "Não foi possível copiar para a área de transferência. Experimente no navegador Chrome.",
|
||||||
"decryptFailed": "Não foi possível descriptografar os dados.",
|
"decryptFailed": "Não foi possível desencriptar os dados.",
|
||||||
"uploadedSecurly": "O upload foi protegido com criptografia de ponta a ponta, o que significa que o servidor do Excalidraw e terceiros não podem ler o conteúdo.",
|
"uploadedSecurly": "O upload foi protegido com criptografia de ponta a ponta, o que significa que o servidor do Excalidraw e terceiros não podem ler o conteúdo.",
|
||||||
"loadSceneOverridePrompt": "Carregar um desenho externo substituirá o seu conteúdo existente. Deseja continuar?",
|
"loadSceneOverridePrompt": "Se carregar um desenho externo substituirá o conteúdo existente. Quer continuar?",
|
||||||
"collabStopOverridePrompt": "Ao interromper a sessão irá substituir o último desenho guardado. Tem a certeza?\n\n(Caso queira manter o último desenho, simplesmente feche a janela do navegador.)",
|
"collabStopOverridePrompt": "Ao interromper a sessão irá substituir o último desenho guardado. Tem a certeza?\n\n(Caso queira manter o último desenho, simplesmente feche a janela do navegador.)",
|
||||||
"errorLoadingLibrary": "Houve um erro ao carregar a biblioteca de terceiros.",
|
"errorLoadingLibrary": "Houve um erro ao carregar a biblioteca de terceiros.",
|
||||||
"errorAddingToLibrary": "",
|
"errorAddingToLibrary": "Não foi possível adicionar o item à biblioteca",
|
||||||
"errorRemovingFromLibrary": "",
|
"errorRemovingFromLibrary": "Não foi possível remover o item da biblioteca",
|
||||||
"confirmAddLibrary": "Isso adicionará {{numShapes}} forma(s) à sua biblioteca. Tem certeza?",
|
"confirmAddLibrary": "Isso adicionará {{numShapes}} forma(s) à sua biblioteca. Tem a certeza?",
|
||||||
"imageDoesNotContainScene": "A importação de imagens não é suportada no momento.\n\nVocê deseja importar uma cena? Esta imagem parece não conter dados de cena. Você ativou isto durante a exportação?",
|
"imageDoesNotContainScene": "A importação de imagens não é suportada neste momento.\n\nQuer importar uma cena? Esta imagem parece não conter dados de cena. Ativou isto durante a exportação?",
|
||||||
"cannotRestoreFromImage": "Não foi possível restaurar a cena deste arquivo de imagem",
|
"cannotRestoreFromImage": "Não foi possível restaurar a cena deste ficheiro de imagem",
|
||||||
"invalidSceneUrl": "Não foi possível importar a cena a partir da URL fornecida. Ela está malformada ou não contém dados JSON de Excalidraw válidos.",
|
"invalidSceneUrl": "Não foi possível importar a cena a partir do URL fornecido. Ou está mal formado ou não contém dados JSON do Excalidraw válidos.",
|
||||||
"resetLibrary": "Isto irá limpar a sua biblioteca. Tem a certeza?"
|
"resetLibrary": "Isto irá limpar a sua biblioteca. Tem a certeza?"
|
||||||
},
|
},
|
||||||
"toolBar": {
|
"toolBar": {
|
||||||
"selection": "Seleção",
|
"selection": "Seleção",
|
||||||
"freedraw": "Desenho livre",
|
|
||||||
"rectangle": "Retângulo",
|
"rectangle": "Retângulo",
|
||||||
"diamond": "Losango",
|
"diamond": "Losango",
|
||||||
"ellipse": "Elipse",
|
"ellipse": "Elipse",
|
||||||
"arrow": "Flecha",
|
"arrow": "Flecha",
|
||||||
"line": "Linha",
|
"line": "Linha",
|
||||||
|
"freedraw": "Desenhar",
|
||||||
"text": "Texto",
|
"text": "Texto",
|
||||||
"library": "Biblioteca",
|
"library": "Biblioteca",
|
||||||
"lock": "Manter a ferramenta selecionada ativa após desenhar"
|
"lock": "Manter a ferramenta selecionada ativa após desenhar"
|
||||||
},
|
},
|
||||||
"headings": {
|
"headings": {
|
||||||
"canvasActions": "Ações da tela",
|
"canvasActions": "Ações da área de desenho",
|
||||||
"selectedShapeActions": "Ações das formas selecionadas",
|
"selectedShapeActions": "Ações das formas selecionadas",
|
||||||
"shapes": "Formas"
|
"shapes": "Formas"
|
||||||
},
|
},
|
||||||
"hints": {
|
"hints": {
|
||||||
"linearElement": "Clique para iniciar vários pontos, arraste para uma única linha",
|
"linearElement": "Clique para iniciar vários pontos, arraste para uma única linha",
|
||||||
"freeDraw": "Toque e arraste, solte quando terminar",
|
"freeDraw": "Clique e arraste, large quando terminar",
|
||||||
"text": "Dica: você também pode adicionar texto clicando duas vezes em qualquer lugar com a ferramenta de seleção",
|
"text": "Dica: também pode adicionar texto clicando duas vezes em qualquer lugar com a ferramenta de seleção",
|
||||||
|
"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",
|
"linearElementMulti": "Clique no último ponto ou pressione Escape ou Enter para terminar",
|
||||||
"lockAngle": "Você pode restringir o ângulo segurando SHIFT",
|
"lockAngle": "Pode restringir o ângulo mantendo premida a tecla SHIFT",
|
||||||
"resize": "Você pode restringir proporções segurando SHIFT enquanto redimensiona,\nsegure ALT para redimensionar do centro",
|
"resize": "Pode restringir as proporções mantendo a tecla SHIFT premida enquanto redimensiona,\nmantenha a tecla ALT premida para redimensionar a partir do centro",
|
||||||
"rotate": "Você pode restringir os ângulos segurando SHIFT enquanto gira",
|
"rotate": "Pode restringir os ângulos mantendo a tecla SHIFT premida enquanto roda",
|
||||||
"lineEditor_info": "Clique duas vezes ou pressione Enter para editar os pontos",
|
"lineEditor_info": "Clique duas vezes ou pressione a tecla Enter para editar os pontos",
|
||||||
"lineEditor_pointSelected": "Pressione Deletar para remover ponto, CtrlOuCmd+D para duplicar ou arraste para mover",
|
"lineEditor_pointSelected": "Pressione a tecla Delete para remover o ponto, CtrlOuCmd+D para duplicar ou arraste para mover",
|
||||||
"lineEditor_nothingSelected": "Selecione um ponto para mover ou remover, ou segure Alt e clique para adicionar novos pontos"
|
"lineEditor_nothingSelected": "Selecione um ponto para mover ou remover, ou mantenha premida a tecla Alt e clique para adicionar novos pontos"
|
||||||
},
|
},
|
||||||
"canvasError": {
|
"canvasError": {
|
||||||
"cannotShowPreview": "Não é possível mostrar pré-visualização",
|
"cannotShowPreview": "Não é possível mostrar uma pré-visualização",
|
||||||
"canvasTooBig": "A tela pode ser muito grande.",
|
"canvasTooBig": "A área de desenho pode ser muito grande.",
|
||||||
"canvasTooBigTip": "Dica: tente aproximar um pouco os elementos mais distantes."
|
"canvasTooBigTip": "Dica: tente aproximar um pouco os elementos mais distantes."
|
||||||
},
|
},
|
||||||
"errorSplash": {
|
"errorSplash": {
|
||||||
"headingMain_pre": "Foi encontrado um erro. Tente ",
|
"headingMain_pre": "Foi encontrado um erro. Tente ",
|
||||||
"headingMain_button": "recarregar a página.",
|
"headingMain_button": "recarregar a página.",
|
||||||
"clearCanvasMessage": "Se a recarga não funcionar, tente ",
|
"clearCanvasMessage": "Se a recarga não funcionar, tente ",
|
||||||
"clearCanvasMessage_button": "limpando a tela.",
|
"clearCanvasMessage_button": "a limpar a área de desenho.",
|
||||||
"clearCanvasCaveat": " Isso resultará em perda de trabalho ",
|
"clearCanvasCaveat": " Isso resultará em perda de trabalho ",
|
||||||
"trackedToSentry_pre": "O erro com o identificador ",
|
"trackedToSentry_pre": "O erro com o identificador ",
|
||||||
"trackedToSentry_post": " foi rastreado no nosso sistema.",
|
"trackedToSentry_post": " foi rastreado no nosso sistema.",
|
||||||
"openIssueMessage_pre": "Fomos muito cautelosos para não incluir suas informações de cena no erro. Se sua cena não for privada, por favor, considere seguir nosso ",
|
"openIssueMessage_pre": "Fomos muito cautelosos para não incluir suas informações de cena no erro. Se sua cena não for privada, por favor, considere seguir nosso ",
|
||||||
"openIssueMessage_button": "rastreador de bugs.",
|
"openIssueMessage_button": "rastreador de bugs.",
|
||||||
"openIssueMessage_post": " Por favor, inclua informações abaixo, copiando e colando para a issue do GitHub.",
|
"openIssueMessage_post": " Por favor, inclua informações abaixo, copiando e colando no relatório de erros no GitHub.",
|
||||||
"sceneContent": "Conteúdo da cena:"
|
"sceneContent": "Conteúdo da cena:"
|
||||||
},
|
},
|
||||||
"roomDialog": {
|
"roomDialog": {
|
||||||
"desc_intro": "Você pode convidar pessoas para sua cena atual para colaborar com você.",
|
"desc_intro": "Pode convidar pessoas para colaborarem na sua cena atual.",
|
||||||
"desc_privacy": "Não se preocupe, a sessão usa criptografia de ponta a ponta; portanto, o que você desenhar permanecerá privado. Nem mesmo nosso servidor poderá ver o que você cria.",
|
"desc_privacy": "Não se preocupe, a sessão usa criptografia de ponta-a-ponta, por isso o que desenhar permanecerá privado. Nem mesmo o nosso servidor poderá ver o que cria.",
|
||||||
"button_startSession": "Iniciar sessão",
|
"button_startSession": "Iniciar sessão",
|
||||||
"button_stopSession": "Parar sessão",
|
"button_stopSession": "Parar sessão",
|
||||||
"desc_inProgressIntro": "A sessão de colaboração ao vivo está agora em andamento.",
|
"desc_inProgressIntro": "A sessão de colaboração ao vivo está agora em andamento.",
|
||||||
"desc_shareLink": "Compartilhe este link com qualquer pessoa com quem você queira colaborar:",
|
"desc_shareLink": "Partilhe este link com qualquer pessoa com quem queira colaborar:",
|
||||||
"desc_exitSession": "Interrompendo a sessão você irá se desconectar da sala, mas você poderá continuar trabalhando com a cena localmente. Observe que isso não afetará outras pessoas, e elas ainda poderão colaborar em sua versão.",
|
"desc_exitSession": "Interrompendo a sessão irá desconectar-se da sala, mas poderá continuar a trabalhar com a cena localmente. Note que isso não afetará outras pessoas e elas ainda poderão colaborar nas versões deles.",
|
||||||
"shareTitle": "Participe de uma sessão de colaboração ao vivo na Excalidraw"
|
"shareTitle": "Participe numa sessão de colaboração ao vivo no Excalidraw"
|
||||||
},
|
},
|
||||||
"errorDialog": {
|
"errorDialog": {
|
||||||
"title": "Erro"
|
"title": "Erro"
|
||||||
},
|
},
|
||||||
|
"exportDialog": {
|
||||||
|
"disk_title": "Guardar no disco",
|
||||||
|
"disk_details": "Exportar os dados da cena para um ficheiro do qual poderá importar mais tarde.",
|
||||||
|
"disk_button": "Guardar num ficheiro",
|
||||||
|
"link_title": "Link partilhável",
|
||||||
|
"link_details": "Exportar como um link de apenas leitura.",
|
||||||
|
"link_button": "Exportar para link",
|
||||||
|
"excalidrawplus_description": "Guardar a cena no seu espaço de trabalho Excalidraw+",
|
||||||
|
"excalidrawplus_button": "Exportar",
|
||||||
|
"excalidrawplus_exportError": "Não foi possível exportar para o Excalidraw+ neste momento..."
|
||||||
|
},
|
||||||
"helpDialog": {
|
"helpDialog": {
|
||||||
"blog": "Leia o nosso blog",
|
"blog": "Leia o nosso blogue",
|
||||||
"click": "clicar",
|
"click": "clicar",
|
||||||
"curvedArrow": "Seta curva",
|
"curvedArrow": "Seta curva",
|
||||||
"curvedLine": "Linha curva",
|
"curvedLine": "Linha curva",
|
||||||
"documentation": "Documentação",
|
"documentation": "Documentação",
|
||||||
|
"doubleClick": "clique duplo",
|
||||||
"drag": "arrastar",
|
"drag": "arrastar",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
"github": "Encontrou algum problema? Nos informe",
|
"editSelectedShape": "Editar forma selecionada (texto/seta/linha)",
|
||||||
|
"github": "Encontrou algum problema? Informe-nos",
|
||||||
"howto": "Siga os nossos guias",
|
"howto": "Siga os nossos guias",
|
||||||
"or": "ou",
|
"or": "ou",
|
||||||
"preventBinding": "Prevenir fixação de seta",
|
"preventBinding": "Prevenir fixação de seta",
|
||||||
"shapes": "Formas",
|
"shapes": "Formas",
|
||||||
"shortcuts": "Atalhos de teclado",
|
"shortcuts": "Atalhos de teclado",
|
||||||
"textFinish": "Finalizar edição (texto)",
|
"textFinish": "Finalizar edição (editor texto)",
|
||||||
"textNewLine": "Adicionar nova linha (texto)",
|
"textNewLine": "Adicionar nova linha (editor de texto)",
|
||||||
"title": "Ajuda",
|
"title": "Ajuda",
|
||||||
"view": "Visualizar",
|
"view": "Visualizar",
|
||||||
"zoomToFit": "Ajustar para caber todos os elementos",
|
"zoomToFit": "Ajustar para todos os elementos caberem",
|
||||||
"zoomToSelection": "Ampliar a seleção"
|
"zoomToSelection": "Ampliar a seleção"
|
||||||
},
|
},
|
||||||
"encrypted": {
|
"encrypted": {
|
||||||
"tooltip": "Seus desenhos são criptografados de ponta a ponta, então os servidores do Excalidraw nunca os verão.",
|
"tooltip": "Os seus desenhos são encriptados de ponta-a-ponta, por isso os servidores do Excalidraw nunca os verão.",
|
||||||
"link": "Publicação de blog na encriptação de ponta a ponta na Excalidraw"
|
"link": "Publicação de blogue na encriptação ponta-a-ponta no Excalidraw"
|
||||||
},
|
},
|
||||||
"stats": {
|
"stats": {
|
||||||
"angle": "Ângulo",
|
"angle": "Ângulo",
|
||||||
@@ -253,7 +277,7 @@
|
|||||||
"toast": {
|
"toast": {
|
||||||
"copyStyles": "Estilos copiados.",
|
"copyStyles": "Estilos copiados.",
|
||||||
"copyToClipboard": "Copiado para a área de transferência.",
|
"copyToClipboard": "Copiado para a área de transferência.",
|
||||||
"copyToClipboardAsPng": "Copiado {{exportSelection}} para a área de transferência como PNG\n({{exportColorScheme}})",
|
"copyToClipboardAsPng": "{{exportSelection}} copiado para a área de transferência como PNG\n({{exportColorScheme}})",
|
||||||
"fileSaved": "Ficheiro guardado.",
|
"fileSaved": "Ficheiro guardado.",
|
||||||
"fileSavedToFilename": "Guardado como {filename}",
|
"fileSavedToFilename": "Guardado como {filename}",
|
||||||
"canvas": "área de desenho",
|
"canvas": "área de desenho",
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user