Browse Source

Merge branch 'master' into dwelle/bump-socket.io

# Conflicts:
#	src/locales/en.json
dwelle 2 years ago
parent
commit
fb4a7bdf45
100 changed files with 2854 additions and 1618 deletions
  1. 1 1
      package.json
  2. 2 1
      public/index.html
  3. 13 9
      src/actions/actionCanvas.tsx
  4. 14 10
      src/actions/actionExport.tsx
  5. 7 5
      src/actions/actionMenu.tsx
  6. 5 5
      src/components/ActiveFile.tsx
  7. 98 77
      src/components/App.tsx
  8. 7 5
      src/components/ClearCanvas.tsx
  9. 7 6
      src/components/CollabButton.tsx
  10. 8 9
      src/components/ConfirmDialog.tsx
  11. 10 6
      src/components/Dialog.tsx
  12. 10 2
      src/components/HelpDialog.tsx
  13. 7 16
      src/components/JSONExportDialog.tsx
  14. 0 10
      src/components/LayerUI.scss
  15. 39 104
      src/components/LayerUI.tsx
  16. 23 0
      src/components/LibraryMenu.scss
  17. 76 72
      src/components/LibraryMenuHeaderContent.tsx
  18. 0 85
      src/components/Menu.scss
  19. 0 37
      src/components/MenuItem.tsx
  20. 0 53
      src/components/MenuUtils.tsx
  21. 7 87
      src/components/MobileMenu.tsx
  22. 0 18
      src/components/Sidebar/Sidebar.scss
  23. 4 24
      src/components/UserList.tsx
  24. 1 17
      src/components/WelcomeScreen.tsx
  25. 127 0
      src/components/dropdownMenu/DropdownMenu.scss
  26. 43 0
      src/components/dropdownMenu/DropdownMenu.tsx
  27. 51 0
      src/components/dropdownMenu/DropdownMenuContent.tsx
  28. 23 0
      src/components/dropdownMenu/DropdownMenuGroup.tsx
  29. 45 0
      src/components/dropdownMenu/DropdownMenuItem.tsx
  30. 23 0
      src/components/dropdownMenu/DropdownMenuItemContent.tsx
  31. 23 0
      src/components/dropdownMenu/DropdownMenuItemCustom.tsx
  32. 42 0
      src/components/dropdownMenu/DropdownMenuItemLink.tsx
  33. 14 0
      src/components/dropdownMenu/DropdownMenuSeparator.tsx
  34. 37 0
      src/components/dropdownMenu/DropdownMenuTrigger.tsx
  35. 35 0
      src/components/dropdownMenu/dropdownMenuUtils.ts
  36. 4 5
      src/components/footer/Footer.tsx
  37. 10 0
      src/components/footer/FooterCenter.scss
  38. 2 1
      src/components/footer/FooterCenter.tsx
  39. 174 0
      src/components/mainMenu/DefaultItems.tsx
  40. 56 0
      src/components/mainMenu/MainMenu.tsx
  41. 14 0
      src/css/styles.scss
  42. 6 0
      src/excalidraw-app/collab/Collab.tsx
  43. 15 17
      src/excalidraw-app/components/LanguageList.tsx
  44. 23 1
      src/excalidraw-app/index.scss
  45. 43 2
      src/excalidraw-app/index.tsx
  46. 2 0
      src/keys.ts
  47. 18 7
      src/locales/ar-SA.json
  48. 17 6
      src/locales/bg-BG.json
  49. 19 8
      src/locales/bn-BD.json
  50. 19 8
      src/locales/ca-ES.json
  51. 61 50
      src/locales/cs-CZ.json
  52. 18 7
      src/locales/da-DK.json
  53. 19 8
      src/locales/de-DE.json
  54. 18 7
      src/locales/el-GR.json
  55. 6 2
      src/locales/en.json
  56. 27 16
      src/locales/es-ES.json
  57. 21 10
      src/locales/eu-ES.json
  58. 25 14
      src/locales/fa-IR.json
  59. 19 8
      src/locales/fi-FI.json
  60. 19 8
      src/locales/fr-FR.json
  61. 227 216
      src/locales/gl-ES.json
  62. 18 7
      src/locales/he-IL.json
  63. 20 9
      src/locales/hi-IN.json
  64. 17 12
      src/locales/hu-HU.json
  65. 19 8
      src/locales/id-ID.json
  66. 19 8
      src/locales/it-IT.json
  67. 21 10
      src/locales/ja-JP.json
  68. 24 13
      src/locales/kab-KAB.json
  69. 14 3
      src/locales/kk-KZ.json
  70. 19 8
      src/locales/ko-KR.json
  71. 45 34
      src/locales/ku-TR.json
  72. 179 168
      src/locales/lt-LT.json
  73. 19 8
      src/locales/lv-LV.json
  74. 19 8
      src/locales/mr-IN.json
  75. 16 5
      src/locales/my-MM.json
  76. 18 7
      src/locales/nb-NO.json
  77. 56 45
      src/locales/nl-NL.json
  78. 19 8
      src/locales/nn-NO.json
  79. 22 11
      src/locales/oc-FR.json
  80. 18 7
      src/locales/pa-IN.json
  81. 39 39
      src/locales/percentages.json
  82. 18 7
      src/locales/pl-PL.json
  83. 19 8
      src/locales/pt-BR.json
  84. 21 10
      src/locales/pt-PT.json
  85. 19 8
      src/locales/ro-RO.json
  86. 21 10
      src/locales/ru-RU.json
  87. 13 2
      src/locales/si-LK.json
  88. 19 8
      src/locales/sk-SK.json
  89. 19 8
      src/locales/sl-SI.json
  90. 20 9
      src/locales/sv-SE.json
  91. 19 8
      src/locales/ta-IN.json
  92. 19 8
      src/locales/tr-TR.json
  93. 19 8
      src/locales/uk-UA.json
  94. 28 17
      src/locales/vi-VN.json
  95. 24 13
      src/locales/zh-CN.json
  96. 14 3
      src/locales/zh-HK.json
  97. 19 8
      src/locales/zh-TW.json
  98. 2 0
      src/packages/excalidraw/CHANGELOG.md
  99. 236 0
      src/packages/excalidraw/README.md
  100. 0 5
      src/packages/excalidraw/example/App.scss

+ 1 - 1
package.json

@@ -102,7 +102,7 @@
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {
     "build-node": "node ./scripts/build-node.js",
     "build-node": "node ./scripts/build-node.js",
-    "build:app:docker": "REACT_APP_DISABLE_SENTRY=true react-scripts build",
+    "build:app:docker": "cross-env REACT_APP_DISABLE_SENTRY=true REACT_APP_DISABLE_TRACKING=true react-scripts build",
     "build:app": "cross-env REACT_APP_GIT_SHA=$VERCEL_GIT_COMMIT_SHA react-scripts build",
     "build:app": "cross-env REACT_APP_GIT_SHA=$VERCEL_GIT_COMMIT_SHA react-scripts build",
     "build:version": "node ./scripts/build-version.js",
     "build:version": "node ./scripts/build-version.js",
     "build": "yarn build:app && yarn build:version",
     "build": "yarn build:app && yarn build:version",

+ 2 - 1
public/index.html

@@ -146,7 +146,8 @@
       // setting this so that libraries installation reuses this window tab.
       // setting this so that libraries installation reuses this window tab.
       window.name = "_excalidraw";
       window.name = "_excalidraw";
     </script>
     </script>
-    <% if (process.env.REACT_APP_GOOGLE_ANALYTICS_ID) { %>
+    <% if (process.env.REACT_APP_DISABLE_TRACKING !== 'true' &&
+    process.env.REACT_APP_GOOGLE_ANALYTICS_ID) { %>
     <script
     <script
       async
       async
       src="https://www.googletagmanager.com/gtag/js?id=%REACT_APP_GOOGLE_ANALYTICS_ID%"
       src="https://www.googletagmanager.com/gtag/js?id=%REACT_APP_GOOGLE_ANALYTICS_ID%"

+ 13 - 9
src/actions/actionCanvas.tsx

@@ -23,7 +23,7 @@ import { newElementWith } from "../element/mutateElement";
 import { getDefaultAppState, isEraserActive } from "../appState";
 import { getDefaultAppState, isEraserActive } from "../appState";
 import ClearCanvas from "../components/ClearCanvas";
 import ClearCanvas from "../components/ClearCanvas";
 import clsx from "clsx";
 import clsx from "clsx";
-import MenuItem from "../components/MenuItem";
+import DropdownMenuItem from "../components/dropdownMenu/DropdownMenuItem";
 import { getShortcutFromShortcutName } from "./shortcuts";
 import { getShortcutFromShortcutName } from "./shortcuts";
 
 
 export const actionChangeViewBackgroundColor = register({
 export const actionChangeViewBackgroundColor = register({
@@ -299,19 +299,23 @@ export const actionToggleTheme = register({
     };
     };
   },
   },
   PanelComponent: ({ appState, updateData }) => (
   PanelComponent: ({ appState, updateData }) => (
-    <MenuItem
-      label={
-        appState.theme === "dark"
-          ? t("buttons.lightMode")
-          : t("buttons.darkMode")
-      }
-      onClick={() => {
+    <DropdownMenuItem
+      onSelect={() => {
         updateData(appState.theme === THEME.LIGHT ? THEME.DARK : THEME.LIGHT);
         updateData(appState.theme === THEME.LIGHT ? THEME.DARK : THEME.LIGHT);
       }}
       }}
       icon={appState.theme === "dark" ? SunIcon : MoonIcon}
       icon={appState.theme === "dark" ? SunIcon : MoonIcon}
       dataTestId="toggle-dark-mode"
       dataTestId="toggle-dark-mode"
       shortcut={getShortcutFromShortcutName("toggleTheme")}
       shortcut={getShortcutFromShortcutName("toggleTheme")}
-    />
+      ariaLabel={
+        appState.theme === "dark"
+          ? t("buttons.lightMode")
+          : t("buttons.darkMode")
+      }
+    >
+      {appState.theme === "dark"
+        ? t("buttons.lightMode")
+        : t("buttons.darkMode")}
+    </DropdownMenuItem>
   ),
   ),
   keyTest: (event) => event.altKey && event.shiftKey && event.code === CODES.D,
   keyTest: (event) => event.altKey && event.shiftKey && event.code === CODES.D,
 });
 });

+ 14 - 10
src/actions/actionExport.tsx

@@ -19,7 +19,7 @@ import { ActiveFile } from "../components/ActiveFile";
 import { isImageFileHandle } from "../data/blob";
 import { isImageFileHandle } from "../data/blob";
 import { nativeFileSystemSupported } from "../data/filesystem";
 import { nativeFileSystemSupported } from "../data/filesystem";
 import { Theme } from "../element/types";
 import { Theme } from "../element/types";
-import MenuItem from "../components/MenuItem";
+import DropdownMenuItem from "../components/dropdownMenu/DropdownMenuItem";
 import { getShortcutFromShortcutName } from "./shortcuts";
 import { getShortcutFromShortcutName } from "./shortcuts";
 
 
 export const actionChangeProjectName = register({
 export const actionChangeProjectName = register({
@@ -247,15 +247,19 @@ export const actionLoadScene = register({
     }
     }
   },
   },
   keyTest: (event) => event[KEYS.CTRL_OR_CMD] && event.key === KEYS.O,
   keyTest: (event) => event[KEYS.CTRL_OR_CMD] && event.key === KEYS.O,
-  PanelComponent: ({ updateData }) => (
-    <MenuItem
-      label={t("buttons.load")}
-      icon={LoadIcon}
-      onClick={updateData}
-      dataTestId="load-button"
-      shortcut={getShortcutFromShortcutName("loadScene")}
-    />
-  ),
+  PanelComponent: ({ updateData }) => {
+    return (
+      <DropdownMenuItem
+        icon={LoadIcon}
+        onSelect={updateData}
+        dataTestId="load-button"
+        shortcut={getShortcutFromShortcutName("loadScene")}
+        ariaLabel={t("buttons.load")}
+      >
+        {t("buttons.load")}
+      </DropdownMenuItem>
+    );
+  },
 });
 });
 
 
 export const actionExportWithDarkMode = register({
 export const actionExportWithDarkMode = register({

+ 7 - 5
src/actions/actionMenu.tsx

@@ -6,7 +6,7 @@ import { register } from "./register";
 import { allowFullScreen, exitFullScreen, isFullScreen } from "../utils";
 import { allowFullScreen, exitFullScreen, isFullScreen } from "../utils";
 import { KEYS } from "../keys";
 import { KEYS } from "../keys";
 import { HelpButton } from "../components/HelpButton";
 import { HelpButton } from "../components/HelpButton";
-import MenuItem from "../components/MenuItem";
+import DropdownMenuItem from "../components/dropdownMenu/DropdownMenuItem";
 
 
 export const actionToggleCanvasMenu = register({
 export const actionToggleCanvasMenu = register({
   name: "toggleCanvasMenu",
   name: "toggleCanvasMenu",
@@ -90,13 +90,15 @@ export const actionShortcuts = register({
   },
   },
   PanelComponent: ({ updateData, isInHamburgerMenu }) =>
   PanelComponent: ({ updateData, isInHamburgerMenu }) =>
     isInHamburgerMenu ? (
     isInHamburgerMenu ? (
-      <MenuItem
-        label={t("helpDialog.title")}
+      <DropdownMenuItem
         dataTestId="help-menu-item"
         dataTestId="help-menu-item"
         icon={HelpIcon}
         icon={HelpIcon}
-        onClick={updateData}
+        onSelect={updateData}
         shortcut="?"
         shortcut="?"
-      />
+        ariaLabel={t("helpDialog.title")}
+      >
+        {t("helpDialog.title")}
+      </DropdownMenuItem>
     ) : (
     ) : (
       <HelpButton title={t("helpDialog.title")} onClick={updateData} />
       <HelpButton title={t("helpDialog.title")} onClick={updateData} />
     ),
     ),

+ 5 - 5
src/components/ActiveFile.tsx

@@ -5,7 +5,7 @@ import { save } from "../components/icons";
 import { t } from "../i18n";
 import { t } from "../i18n";
 
 
 import "./ActiveFile.scss";
 import "./ActiveFile.scss";
-import MenuItem from "./MenuItem";
+import DropdownMenuItem from "./dropdownMenu/DropdownMenuItem";
 
 
 type ActiveFileProps = {
 type ActiveFileProps = {
   fileName?: string;
   fileName?: string;
@@ -13,11 +13,11 @@ type ActiveFileProps = {
 };
 };
 
 
 export const ActiveFile = ({ fileName, onSave }: ActiveFileProps) => (
 export const ActiveFile = ({ fileName, onSave }: ActiveFileProps) => (
-  <MenuItem
-    label={`${t("buttons.save")}`}
+  <DropdownMenuItem
     shortcut={getShortcutFromShortcutName("saveScene")}
     shortcut={getShortcutFromShortcutName("saveScene")}
     dataTestId="save-button"
     dataTestId="save-button"
-    onClick={onSave}
+    onSelect={onSave}
     icon={save}
     icon={save}
-  />
+    ariaLabel={`${t("buttons.save")}`}
+  >{`${t("buttons.save")}`}</DropdownMenuItem>
 );
 );

+ 98 - 77
src/components/App.tsx

@@ -272,13 +272,9 @@ import {
   isLocalLink,
   isLocalLink,
 } from "../element/Hyperlink";
 } from "../element/Hyperlink";
 import { shouldShowBoundingBox } from "../element/transformHandles";
 import { shouldShowBoundingBox } from "../element/transformHandles";
-import { atom } from "jotai";
 import { Fonts } from "../scene/Fonts";
 import { Fonts } from "../scene/Fonts";
 import { actionPaste } from "../actions/actionClipboard";
 import { actionPaste } from "../actions/actionClipboard";
 
 
-export const isMenuOpenAtom = atom(false);
-export const isDropdownOpenAtom = atom(false);
-
 const deviceContextInitialValue = {
 const deviceContextInitialValue = {
   isSmScreen: false,
   isSmScreen: false,
   isMobile: false,
   isMobile: false,
@@ -289,7 +285,7 @@ const DeviceContext = React.createContext<Device>(deviceContextInitialValue);
 DeviceContext.displayName = "DeviceContext";
 DeviceContext.displayName = "DeviceContext";
 export const useDevice = () => useContext<Device>(DeviceContext);
 export const useDevice = () => useContext<Device>(DeviceContext);
 
 
-const ExcalidrawContainerContext = React.createContext<{
+export const ExcalidrawContainerContext = React.createContext<{
   container: HTMLDivElement | null;
   container: HTMLDivElement | null;
   id: string | null;
   id: string | null;
 }>({ container: null, id: null });
 }>({ container: null, id: null });
@@ -316,12 +312,19 @@ const ExcalidrawSetAppStateContext = React.createContext<
 >(() => {});
 >(() => {});
 ExcalidrawSetAppStateContext.displayName = "ExcalidrawSetAppStateContext";
 ExcalidrawSetAppStateContext.displayName = "ExcalidrawSetAppStateContext";
 
 
+const ExcalidrawActionManagerContext = React.createContext<
+  ActionManager | { renderAction: ActionManager["renderAction"] }
+>({ renderAction: () => null });
+ExcalidrawActionManagerContext.displayName = "ExcalidrawActionManagerContext";
+
 export const useExcalidrawElements = () =>
 export const useExcalidrawElements = () =>
   useContext(ExcalidrawElementsContext);
   useContext(ExcalidrawElementsContext);
 export const useExcalidrawAppState = () =>
 export const useExcalidrawAppState = () =>
   useContext(ExcalidrawAppStateContext);
   useContext(ExcalidrawAppStateContext);
 export const useExcalidrawSetAppState = () =>
 export const useExcalidrawSetAppState = () =>
   useContext(ExcalidrawSetAppStateContext);
   useContext(ExcalidrawSetAppStateContext);
+export const useExcalidrawActionManager = () =>
+  useContext(ExcalidrawActionManagerContext);
 
 
 let didTapTwice: boolean = false;
 let didTapTwice: boolean = false;
 let tappedTwiceTimer = 0;
 let tappedTwiceTimer = 0;
@@ -559,75 +562,79 @@ class App extends React.Component<AppProps, AppState> {
                 <ExcalidrawElementsContext.Provider
                 <ExcalidrawElementsContext.Provider
                   value={this.scene.getNonDeletedElements()}
                   value={this.scene.getNonDeletedElements()}
                 >
                 >
-                  <LayerUI
-                    canvas={this.canvas}
-                    appState={this.state}
-                    files={this.files}
-                    setAppState={this.setAppState}
-                    actionManager={this.actionManager}
-                    elements={this.scene.getNonDeletedElements()}
-                    onCollabButtonClick={onCollabButtonClick}
-                    onLockToggle={this.toggleLock}
-                    onPenModeToggle={this.togglePenMode}
-                    onInsertElements={(elements) =>
-                      this.addElementsFromPasteOrLibrary({
-                        elements,
-                        position: "center",
-                        files: null,
-                      })
-                    }
-                    langCode={getLanguage().code}
-                    isCollaborating={this.props.isCollaborating}
-                    renderTopRightUI={renderTopRightUI}
-                    renderCustomStats={renderCustomStats}
-                    renderCustomSidebar={this.props.renderSidebar}
-                    showExitZenModeBtn={
-                      typeof this.props?.zenModeEnabled === "undefined" &&
-                      this.state.zenModeEnabled
-                    }
-                    libraryReturnUrl={this.props.libraryReturnUrl}
-                    UIOptions={this.props.UIOptions}
-                    focusContainer={this.focusContainer}
-                    library={this.library}
-                    id={this.id}
-                    onImageAction={this.onImageAction}
-                    renderWelcomeScreen={
-                      this.state.showWelcomeScreen &&
-                      this.state.activeTool.type === "selection" &&
-                      !this.scene.getElementsIncludingDeleted().length
-                    }
+                  <ExcalidrawActionManagerContext.Provider
+                    value={this.actionManager}
                   >
                   >
-                    {this.props.children}
-                  </LayerUI>
-                  <div className="excalidraw-textEditorContainer" />
-                  <div className="excalidraw-contextMenuContainer" />
-                  {selectedElement.length === 1 &&
-                    !this.state.contextMenu &&
-                    this.state.showHyperlinkPopup && (
-                      <Hyperlink
-                        key={selectedElement[0].id}
-                        element={selectedElement[0]}
-                        setAppState={this.setAppState}
-                        onLinkOpen={this.props.onLinkOpen}
+                    <LayerUI
+                      canvas={this.canvas}
+                      appState={this.state}
+                      files={this.files}
+                      setAppState={this.setAppState}
+                      actionManager={this.actionManager}
+                      elements={this.scene.getNonDeletedElements()}
+                      onCollabButtonClick={onCollabButtonClick}
+                      onLockToggle={this.toggleLock}
+                      onPenModeToggle={this.togglePenMode}
+                      onInsertElements={(elements) =>
+                        this.addElementsFromPasteOrLibrary({
+                          elements,
+                          position: "center",
+                          files: null,
+                        })
+                      }
+                      langCode={getLanguage().code}
+                      isCollaborating={this.props.isCollaborating}
+                      renderTopRightUI={renderTopRightUI}
+                      renderCustomStats={renderCustomStats}
+                      renderCustomSidebar={this.props.renderSidebar}
+                      showExitZenModeBtn={
+                        typeof this.props?.zenModeEnabled === "undefined" &&
+                        this.state.zenModeEnabled
+                      }
+                      libraryReturnUrl={this.props.libraryReturnUrl}
+                      UIOptions={this.props.UIOptions}
+                      focusContainer={this.focusContainer}
+                      library={this.library}
+                      id={this.id}
+                      onImageAction={this.onImageAction}
+                      renderWelcomeScreen={
+                        this.state.showWelcomeScreen &&
+                        this.state.activeTool.type === "selection" &&
+                        !this.scene.getElementsIncludingDeleted().length
+                      }
+                    >
+                      {this.props.children}
+                    </LayerUI>
+                    <div className="excalidraw-textEditorContainer" />
+                    <div className="excalidraw-contextMenuContainer" />
+                    {selectedElement.length === 1 &&
+                      !this.state.contextMenu &&
+                      this.state.showHyperlinkPopup && (
+                        <Hyperlink
+                          key={selectedElement[0].id}
+                          element={selectedElement[0]}
+                          setAppState={this.setAppState}
+                          onLinkOpen={this.props.onLinkOpen}
+                        />
+                      )}
+                    {this.state.toast !== null && (
+                      <Toast
+                        message={this.state.toast.message}
+                        onClose={() => this.setToast(null)}
+                        duration={this.state.toast.duration}
+                        closable={this.state.toast.closable}
                       />
                       />
                     )}
                     )}
-                  {this.state.toast !== null && (
-                    <Toast
-                      message={this.state.toast.message}
-                      onClose={() => this.setToast(null)}
-                      duration={this.state.toast.duration}
-                      closable={this.state.toast.closable}
-                    />
-                  )}
-                  {this.state.contextMenu && (
-                    <ContextMenu
-                      items={this.state.contextMenu.items}
-                      top={this.state.contextMenu.top}
-                      left={this.state.contextMenu.left}
-                      actionManager={this.actionManager}
-                    />
-                  )}
-                  <main>{this.renderCanvas()}</main>
+                    {this.state.contextMenu && (
+                      <ContextMenu
+                        items={this.state.contextMenu.items}
+                        top={this.state.contextMenu.top}
+                        left={this.state.contextMenu.left}
+                        actionManager={this.actionManager}
+                      />
+                    )}
+                    <main>{this.renderCanvas()}</main>
+                  </ExcalidrawActionManagerContext.Provider>
                 </ExcalidrawElementsContext.Provider>{" "}
                 </ExcalidrawElementsContext.Provider>{" "}
               </ExcalidrawAppStateContext.Provider>
               </ExcalidrawAppStateContext.Provider>
             </ExcalidrawSetAppStateContext.Provider>
             </ExcalidrawSetAppStateContext.Provider>
@@ -2008,6 +2015,20 @@ class App extends React.Component<AppProps, AppState> {
         return;
         return;
       }
       }
 
 
+      if (event.key === KEYS.PAGE_UP || event.key === KEYS.PAGE_DOWN) {
+        let offset =
+          (event.shiftKey ? this.state.width : this.state.height) /
+          this.state.zoom.value;
+        if (event.key === KEYS.PAGE_DOWN) {
+          offset = -offset;
+        }
+        if (event.shiftKey) {
+          this.setState((state) => ({ scrollX: state.scrollX + offset }));
+        } else {
+          this.setState((state) => ({ scrollY: state.scrollY + offset }));
+        }
+      }
+
       if (this.actionManager.handleKeyDown(event)) {
       if (this.actionManager.handleKeyDown(event)) {
         return;
         return;
       }
       }
@@ -2030,12 +2051,6 @@ class App extends React.Component<AppProps, AppState> {
             ? ELEMENT_SHIFT_TRANSLATE_AMOUNT
             ? ELEMENT_SHIFT_TRANSLATE_AMOUNT
             : ELEMENT_TRANSLATE_AMOUNT);
             : ELEMENT_TRANSLATE_AMOUNT);
 
 
-        const selectedElements = getSelectedElements(
-          this.scene.getNonDeletedElements(),
-          this.state,
-          true,
-        );
-
         let offsetX = 0;
         let offsetX = 0;
         let offsetY = 0;
         let offsetY = 0;
 
 
@@ -2049,6 +2064,12 @@ class App extends React.Component<AppProps, AppState> {
           offsetY = step;
           offsetY = step;
         }
         }
 
 
+        const selectedElements = getSelectedElements(
+          this.scene.getNonDeletedElements(),
+          this.state,
+          true,
+        );
+
         selectedElements.forEach((element) => {
         selectedElements.forEach((element) => {
           mutateElement(element, {
           mutateElement(element, {
             x: element.x + offsetX,
             x: element.x + offsetX,

+ 7 - 5
src/components/ClearCanvas.tsx

@@ -3,7 +3,7 @@ import { t } from "../i18n";
 import { TrashIcon } from "./icons";
 import { TrashIcon } from "./icons";
 
 
 import ConfirmDialog from "./ConfirmDialog";
 import ConfirmDialog from "./ConfirmDialog";
-import MenuItem from "./MenuItem";
+import DropdownMenuItem from "./dropdownMenu/DropdownMenuItem";
 
 
 const ClearCanvas = ({ onConfirm }: { onConfirm: () => void }) => {
 const ClearCanvas = ({ onConfirm }: { onConfirm: () => void }) => {
   const [showDialog, setShowDialog] = useState(false);
   const [showDialog, setShowDialog] = useState(false);
@@ -13,12 +13,14 @@ const ClearCanvas = ({ onConfirm }: { onConfirm: () => void }) => {
 
 
   return (
   return (
     <>
     <>
-      <MenuItem
-        label={t("buttons.clearReset")}
+      <DropdownMenuItem
         icon={TrashIcon}
         icon={TrashIcon}
-        onClick={toggleDialog}
+        onSelect={toggleDialog}
         dataTestId="clear-canvas-button"
         dataTestId="clear-canvas-button"
-      />
+        ariaLabel={t("buttons.clearReset")}
+      >
+        {t("buttons.clearReset")}
+      </DropdownMenuItem>
 
 
       {showDialog && (
       {showDialog && (
         <ConfirmDialog
         <ConfirmDialog

+ 7 - 6
src/components/CollabButton.tsx

@@ -2,7 +2,7 @@ import { t } from "../i18n";
 import { UsersIcon } from "./icons";
 import { UsersIcon } from "./icons";
 
 
 import "./CollabButton.scss";
 import "./CollabButton.scss";
-import MenuItem from "./MenuItem";
+import DropdownMenuItem from "./dropdownMenu/DropdownMenuItem";
 import clsx from "clsx";
 import clsx from "clsx";
 
 
 const CollabButton = ({
 const CollabButton = ({
@@ -19,13 +19,14 @@ const CollabButton = ({
   return (
   return (
     <>
     <>
       {isInHamburgerMenu ? (
       {isInHamburgerMenu ? (
-        <MenuItem
-          label={t("labels.liveCollaboration")}
+        <DropdownMenuItem
           dataTestId="collab-button"
           dataTestId="collab-button"
           icon={UsersIcon}
           icon={UsersIcon}
-          onClick={onClick}
-          isCollaborating={isCollaborating}
-        />
+          onSelect={onClick}
+          ariaLabel={t("labels.liveCollaboration")}
+        >
+          {t("labels.liveCollaboration")}
+        </DropdownMenuItem>
       ) : (
       ) : (
         <button
         <button
           className={clsx("collab-button", { active: isCollaborating })}
           className={clsx("collab-button", { active: isCollaborating })}

+ 8 - 9
src/components/ConfirmDialog.tsx

@@ -3,9 +3,9 @@ import { Dialog, DialogProps } from "./Dialog";
 
 
 import "./ConfirmDialog.scss";
 import "./ConfirmDialog.scss";
 import DialogActionButton from "./DialogActionButton";
 import DialogActionButton from "./DialogActionButton";
-import { isMenuOpenAtom } from "./App";
-import { isDropdownOpenAtom } from "./App";
 import { useSetAtom } from "jotai";
 import { useSetAtom } from "jotai";
+import { isLibraryMenuOpenAtom } from "./LibraryMenuHeaderContent";
+import { useExcalidrawSetAppState } from "./App";
 
 
 interface Props extends Omit<DialogProps, "onCloseRequest"> {
 interface Props extends Omit<DialogProps, "onCloseRequest"> {
   onConfirm: () => void;
   onConfirm: () => void;
@@ -23,9 +23,8 @@ const ConfirmDialog = (props: Props) => {
     className = "",
     className = "",
     ...rest
     ...rest
   } = props;
   } = props;
-
-  const setIsMenuOpen = useSetAtom(isMenuOpenAtom);
-  const setIsDropdownOpen = useSetAtom(isDropdownOpenAtom);
+  const setAppState = useExcalidrawSetAppState();
+  const setIsLibraryMenuOpen = useSetAtom(isLibraryMenuOpenAtom);
 
 
   return (
   return (
     <Dialog
     <Dialog
@@ -39,16 +38,16 @@ const ConfirmDialog = (props: Props) => {
         <DialogActionButton
         <DialogActionButton
           label={cancelText}
           label={cancelText}
           onClick={() => {
           onClick={() => {
-            setIsMenuOpen(false);
-            setIsDropdownOpen(false);
+            setAppState({ openMenu: null });
+            setIsLibraryMenuOpen(false);
             onCancel();
             onCancel();
           }}
           }}
         />
         />
         <DialogActionButton
         <DialogActionButton
           label={confirmText}
           label={confirmText}
           onClick={() => {
           onClick={() => {
-            setIsMenuOpen(false);
-            setIsDropdownOpen(false);
+            setAppState({ openMenu: null });
+            setIsLibraryMenuOpen(false);
             onConfirm();
             onConfirm();
           }}
           }}
           actionType="danger"
           actionType="danger"

+ 10 - 6
src/components/Dialog.tsx

@@ -2,7 +2,11 @@ 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 { useExcalidrawContainer, useDevice } from "../components/App";
+import {
+  useExcalidrawContainer,
+  useDevice,
+  useExcalidrawSetAppState,
+} from "../components/App";
 import { KEYS } from "../keys";
 import { KEYS } from "../keys";
 import "./Dialog.scss";
 import "./Dialog.scss";
 import { back, CloseIcon } from "./icons";
 import { back, CloseIcon } from "./icons";
@@ -10,8 +14,8 @@ import { Island } from "./Island";
 import { Modal } from "./Modal";
 import { Modal } from "./Modal";
 import { AppState } from "../types";
 import { AppState } from "../types";
 import { queryFocusableElements } from "../utils";
 import { queryFocusableElements } from "../utils";
-import { isMenuOpenAtom, isDropdownOpenAtom } from "./App";
 import { useSetAtom } from "jotai";
 import { useSetAtom } from "jotai";
+import { isLibraryMenuOpenAtom } from "./LibraryMenuHeaderContent";
 
 
 export interface DialogProps {
 export interface DialogProps {
   children: React.ReactNode;
   children: React.ReactNode;
@@ -67,12 +71,12 @@ export const Dialog = (props: DialogProps) => {
     return () => islandNode.removeEventListener("keydown", handleKeyDown);
     return () => islandNode.removeEventListener("keydown", handleKeyDown);
   }, [islandNode, props.autofocus]);
   }, [islandNode, props.autofocus]);
 
 
-  const setIsMenuOpen = useSetAtom(isMenuOpenAtom);
-  const setIsDropdownOpen = useSetAtom(isDropdownOpenAtom);
+  const setAppState = useExcalidrawSetAppState();
+  const setIsLibraryMenuOpen = useSetAtom(isLibraryMenuOpenAtom);
 
 
   const onClose = () => {
   const onClose = () => {
-    setIsMenuOpen(false);
-    setIsDropdownOpen(false);
+    setAppState({ openMenu: null });
+    setIsLibraryMenuOpen(false);
     (lastActiveElement as HTMLElement).focus();
     (lastActiveElement as HTMLElement).focus();
     props.onCloseRequest();
     props.onCloseRequest();
   };
   };

+ 10 - 2
src/components/HelpDialog.tsx

@@ -140,11 +140,11 @@ export const HelpDialog = ({ onClose }: { onClose?: () => void }) => {
             />
             />
             <Shortcut
             <Shortcut
               label={t("toolBar.line")}
               label={t("toolBar.line")}
-              shortcuts={[KEYS.P, KEYS["6"]]}
+              shortcuts={[KEYS.L, KEYS["6"]]}
             />
             />
             <Shortcut
             <Shortcut
               label={t("toolBar.freedraw")}
               label={t("toolBar.freedraw")}
-              shortcuts={["Shift + P", KEYS["7"]]}
+              shortcuts={[KEYS.P, KEYS["7"]]}
             />
             />
             <Shortcut
             <Shortcut
               label={t("toolBar.text")}
               label={t("toolBar.text")}
@@ -230,6 +230,14 @@ export const HelpDialog = ({ onClose }: { onClose?: () => void }) => {
               label={t("helpDialog.zoomToSelection")}
               label={t("helpDialog.zoomToSelection")}
               shortcuts={["Shift+2"]}
               shortcuts={["Shift+2"]}
             />
             />
+            <Shortcut
+              label={t("helpDialog.movePageUpDown")}
+              shortcuts={["PgUp/PgDn"]}
+            />
+            <Shortcut
+              label={t("helpDialog.movePageLeftRight")}
+              shortcuts={["Shift+PgUp/PgDn"]}
+            />
             <Shortcut label={t("buttons.fullScreen")} shortcuts={["F"]} />
             <Shortcut label={t("buttons.fullScreen")} shortcuts={["F"]} />
             <Shortcut
             <Shortcut
               label={t("buttons.zenMode")}
               label={t("buttons.zenMode")}

+ 7 - 16
src/components/JSONExportDialog.tsx

@@ -1,10 +1,10 @@
-import React, { useState } from "react";
+import React from "react";
 import { NonDeletedExcalidrawElement } from "../element/types";
 import { NonDeletedExcalidrawElement } from "../element/types";
 import { t } from "../i18n";
 import { t } from "../i18n";
 
 
 import { AppState, ExportOpts, BinaryFiles } from "../types";
 import { AppState, ExportOpts, BinaryFiles } from "../types";
 import { Dialog } from "./Dialog";
 import { Dialog } from "./Dialog";
-import { ExportIcon, exportToFileIcon, LinkIcon } from "./icons";
+import { exportToFileIcon, LinkIcon } from "./icons";
 import { ToolButton } from "./ToolButton";
 import { ToolButton } from "./ToolButton";
 import { actionSaveFileToDisk } from "../actions/actionExport";
 import { actionSaveFileToDisk } from "../actions/actionExport";
 import { Card } from "./Card";
 import { Card } from "./Card";
@@ -14,7 +14,6 @@ import { nativeFileSystemSupported } from "../data/filesystem";
 import { trackEvent } from "../analytics";
 import { trackEvent } from "../analytics";
 import { ActionManager } from "../actions/manager";
 import { ActionManager } from "../actions/manager";
 import { getFrame } from "../utils";
 import { getFrame } from "../utils";
-import MenuItem from "./MenuItem";
 
 
 export type ExportCB = (
 export type ExportCB = (
   elements: readonly NonDeletedExcalidrawElement[],
   elements: readonly NonDeletedExcalidrawElement[],
@@ -94,6 +93,7 @@ export const JSONExportDialog = ({
   actionManager,
   actionManager,
   exportOpts,
   exportOpts,
   canvas,
   canvas,
+  setAppState,
 }: {
 }: {
   elements: readonly NonDeletedExcalidrawElement[];
   elements: readonly NonDeletedExcalidrawElement[];
   appState: AppState;
   appState: AppState;
@@ -101,24 +101,15 @@ export const JSONExportDialog = ({
   actionManager: ActionManager;
   actionManager: ActionManager;
   exportOpts: ExportOpts;
   exportOpts: ExportOpts;
   canvas: HTMLCanvasElement | null;
   canvas: HTMLCanvasElement | null;
+  setAppState: React.Component<any, AppState>["setState"];
 }) => {
 }) => {
-  const [modalIsShown, setModalIsShown] = useState(false);
-
   const handleClose = React.useCallback(() => {
   const handleClose = React.useCallback(() => {
-    setModalIsShown(false);
-  }, []);
+    setAppState({ openDialog: null });
+  }, [setAppState]);
 
 
   return (
   return (
     <>
     <>
-      <MenuItem
-        icon={ExportIcon}
-        label={t("buttons.export")}
-        onClick={() => {
-          setModalIsShown(true);
-        }}
-        dataTestId="json-export-button"
-      />
-      {modalIsShown && (
+      {appState.openDialog === "jsonExport" && (
         <Dialog onCloseRequest={handleClose} title={t("buttons.export")}>
         <Dialog onCloseRequest={handleClose} title={t("buttons.export")}>
           <JSONExportModal
           <JSONExportModal
             elements={elements}
             elements={elements}

+ 0 - 10
src/components/LayerUI.scss

@@ -80,16 +80,6 @@
       }
       }
     }
     }
 
 
-    .layer-ui__wrapper__footer-center {
-      pointer-events: none;
-      & > * {
-        pointer-events: all;
-      }
-
-      display: flex;
-      width: 100%;
-      justify-content: flex-start;
-    }
     .layer-ui__wrapper__footer-left,
     .layer-ui__wrapper__footer-left,
     .layer-ui__wrapper__footer-right,
     .layer-ui__wrapper__footer-right,
     .disable-zen-mode--visible {
     .disable-zen-mode--visible {

+ 39 - 104
src/components/LayerUI.tsx

@@ -41,26 +41,17 @@ import "./LayerUI.scss";
 import "./Toolbar.scss";
 import "./Toolbar.scss";
 import { PenModeButton } from "./PenModeButton";
 import { PenModeButton } from "./PenModeButton";
 import { trackEvent } from "../analytics";
 import { trackEvent } from "../analytics";
-import { isMenuOpenAtom, useDevice } from "../components/App";
+import { useDevice } from "../components/App";
 import { Stats } from "./Stats";
 import { Stats } from "./Stats";
 import { actionToggleStats } from "../actions/actionToggleStats";
 import { actionToggleStats } from "../actions/actionToggleStats";
 import Footer from "./footer/Footer";
 import Footer from "./footer/Footer";
-import {
-  ExportImageIcon,
-  HamburgerMenuIcon,
-  WelcomeScreenMenuArrow,
-  WelcomeScreenTopToolbarArrow,
-} from "./icons";
-import { MenuLinks, Separator } from "./MenuUtils";
-import { useOutsideClickHook } from "../hooks/useOutsideClick";
+import { WelcomeScreenMenuArrow, WelcomeScreenTopToolbarArrow } from "./icons";
 import WelcomeScreen from "./WelcomeScreen";
 import WelcomeScreen from "./WelcomeScreen";
 import { hostSidebarCountersAtom } from "./Sidebar/Sidebar";
 import { hostSidebarCountersAtom } from "./Sidebar/Sidebar";
 import { jotaiScope } from "../jotai";
 import { jotaiScope } from "../jotai";
 import { useAtom } from "jotai";
 import { useAtom } from "jotai";
-import { LanguageList } from "../excalidraw-app/components/LanguageList";
 import WelcomeScreenDecor from "./WelcomeScreenDecor";
 import WelcomeScreenDecor from "./WelcomeScreenDecor";
-import { getShortcutFromShortcutName } from "../actions/shortcuts";
-import MenuItem from "./MenuItem";
+import MainMenu from "./mainMenu/MainMenu";
 
 
 interface LayerUIProps {
 interface LayerUIProps {
   actionManager: ActionManager;
   actionManager: ActionManager;
@@ -103,7 +94,6 @@ const LayerUI = ({
   showExitZenModeBtn,
   showExitZenModeBtn,
   isCollaborating,
   isCollaborating,
   renderTopRightUI,
   renderTopRightUI,
-
   renderCustomStats,
   renderCustomStats,
   renderCustomSidebar,
   renderCustomSidebar,
   libraryReturnUrl,
   libraryReturnUrl,
@@ -133,6 +123,7 @@ const LayerUI = ({
         actionManager={actionManager}
         actionManager={actionManager}
         exportOpts={UIOptions.canvasActions.export}
         exportOpts={UIOptions.canvasActions.export}
         canvas={canvas}
         canvas={canvas}
+        setAppState={setAppState}
       />
       />
     );
     );
   };
   };
@@ -186,9 +177,35 @@ const LayerUI = ({
     );
     );
   };
   };
 
 
-  const [isMenuOpen, setIsMenuOpen] = useAtom(isMenuOpenAtom);
-  const menuRef = useOutsideClickHook(() => setIsMenuOpen(false));
-
+  const renderMenu = () => {
+    return (
+      childrenComponents.Menu || (
+        <MainMenu>
+          <MainMenu.DefaultItems.LoadScene />
+          <MainMenu.DefaultItems.SaveToActiveFile />
+          {UIOptions.canvasActions.export && <MainMenu.DefaultItems.Export />}
+          {UIOptions.canvasActions.saveAsImage && (
+            <MainMenu.DefaultItems.SaveAsImage />
+          )}
+          {onCollabButtonClick && (
+            <MainMenu.DefaultItems.LiveCollaboration
+              onSelect={onCollabButtonClick}
+              isCollaborating={isCollaborating}
+            />
+          )}
+          <MainMenu.DefaultItems.Help />
+          <MainMenu.DefaultItems.ClearCanvas />
+          <MainMenu.Separator />
+          <MainMenu.Group title="Excalidraw links">
+            <MainMenu.DefaultItems.Socials />
+          </MainMenu.Group>
+          <MainMenu.Separator />
+          <MainMenu.DefaultItems.ToggleTheme />
+          <MainMenu.DefaultItems.ChangeCanvasBackground />
+        </MainMenu>
+      )
+    );
+  };
   const renderCanvasActions = () => (
   const renderCanvasActions = () => (
     <div style={{ position: "relative" }}>
     <div style={{ position: "relative" }}>
       <WelcomeScreenDecor
       <WelcomeScreenDecor
@@ -199,87 +216,7 @@ const LayerUI = ({
           <div>{t("welcomeScreen.menuHints")}</div>
           <div>{t("welcomeScreen.menuHints")}</div>
         </div>
         </div>
       </WelcomeScreenDecor>
       </WelcomeScreenDecor>
-
-      <button
-        data-prevent-outside-click
-        className={clsx("menu-button", "zen-mode-transition", {
-          "transition-left": appState.zenModeEnabled,
-        })}
-        onClick={() => setIsMenuOpen(!isMenuOpen)}
-        type="button"
-        data-testid="menu-button"
-      >
-        {HamburgerMenuIcon}
-      </button>
-
-      {isMenuOpen && (
-        <div
-          ref={menuRef}
-          style={{ position: "absolute", top: "100%", marginTop: ".25rem" }}
-        >
-          <Section heading="canvasActions">
-            {/* the zIndex ensures this menu has higher stacking order,
-         see https://github.com/excalidraw/excalidraw/pull/1445 */}
-            <Island
-              className="menu-container"
-              padding={2}
-              style={{ zIndex: 1 }}
-            >
-              {!appState.viewModeEnabled &&
-                actionManager.renderAction("loadScene")}
-              {/* // TODO barnabasmolnar/editor-redesign  */}
-              {/* is this fine here? */}
-              {appState.fileHandle &&
-                actionManager.renderAction("saveToActiveFile")}
-              {renderJSONExportDialog()}
-              {UIOptions.canvasActions.saveAsImage && (
-                <MenuItem
-                  label={t("buttons.exportImage")}
-                  icon={ExportImageIcon}
-                  dataTestId="image-export-button"
-                  onClick={() => setAppState({ openDialog: "imageExport" })}
-                  shortcut={getShortcutFromShortcutName("imageExport")}
-                />
-              )}
-              {onCollabButtonClick && (
-                <CollabButton
-                  isCollaborating={isCollaborating}
-                  collaboratorCount={appState.collaborators.size}
-                  onClick={onCollabButtonClick}
-                />
-              )}
-              {actionManager.renderAction("toggleShortcuts", undefined, true)}
-              {!appState.viewModeEnabled &&
-                actionManager.renderAction("clearCanvas")}
-              <Separator />
-              <MenuLinks />
-              <Separator />
-              <div
-                style={{
-                  display: "flex",
-                  flexDirection: "column",
-                  rowGap: ".5rem",
-                }}
-              >
-                <div>{actionManager.renderAction("toggleTheme")}</div>
-                <div style={{ padding: "0 0.625rem" }}>
-                  <LanguageList style={{ width: "100%" }} />
-                </div>
-                {!appState.viewModeEnabled && (
-                  <div>
-                    <div style={{ fontSize: ".75rem", marginBottom: ".5rem" }}>
-                      {t("labels.canvasBackground")}
-                    </div>
-                    <div style={{ padding: "0 0.625rem" }}>
-                      {actionManager.renderAction("changeViewBackgroundColor")}
-                    </div>
-                  </div>
-                )}
-              </div>
-            </Island>
-          </Section>
-        </div>
-      )}
+      {renderMenu()}
     </div>
     </div>
   );
   );
 
 
@@ -410,10 +347,7 @@ const LayerUI = ({
               },
               },
             )}
             )}
           >
           >
-            <UserList
-              collaborators={appState.collaborators}
-              actionManager={actionManager}
-            />
+            <UserList collaborators={appState.collaborators} />
             {onCollabButtonClick && (
             {onCollabButtonClick && (
               <CollabButton
               <CollabButton
                 isInHamburgerMenu={false}
                 isInHamburgerMenu={false}
@@ -466,6 +400,7 @@ const LayerUI = ({
         />
         />
       )}
       )}
       {renderImageExportDialog()}
       {renderImageExportDialog()}
+      {renderJSONExportDialog()}
       {appState.pasteDialog.shown && (
       {appState.pasteDialog.shown && (
         <PasteChartDialog
         <PasteChartDialog
           setAppState={setAppState}
           setAppState={setAppState}
@@ -497,6 +432,7 @@ const LayerUI = ({
           renderCustomStats={renderCustomStats}
           renderCustomStats={renderCustomStats}
           renderSidebars={renderSidebars}
           renderSidebars={renderSidebars}
           device={device}
           device={device}
+          renderMenu={renderMenu}
         />
         />
       )}
       )}
 
 
@@ -525,9 +461,8 @@ const LayerUI = ({
               appState={appState}
               appState={appState}
               actionManager={actionManager}
               actionManager={actionManager}
               showExitZenModeBtn={showExitZenModeBtn}
               showExitZenModeBtn={showExitZenModeBtn}
-            >
-              {childrenComponents.FooterCenter}
-            </Footer>
+              footerCenter={childrenComponents.FooterCenter}
+            />
 
 
             {appState.showStats && (
             {appState.showStats && (
               <Stats
               <Stats

+ 23 - 0
src/components/LibraryMenu.scss

@@ -129,4 +129,27 @@
       padding-right: 0;
       padding-right: 0;
     }
     }
   }
   }
+
+  .layer-ui__sidebar__header .dropdown-menu {
+    &.dropdown-menu--mobile {
+      top: 100%;
+    }
+    .dropdown-menu-container {
+      --gap: 0;
+      z-index: 1;
+      position: absolute;
+      top: 100%;
+      left: 0;
+
+      :root[dir="rtl"] & {
+        right: 0;
+        left: auto;
+      }
+
+      width: 196px;
+      box-shadow: var(--library-dropdown-shadow);
+      border-radius: var(--border-radius-lg);
+      padding: 0.25rem 0.5rem;
+    }
+  }
 }
 }

+ 76 - 72
src/components/LibraryMenuHeaderContent.tsx

@@ -13,14 +13,15 @@ import {
 import { ToolButton } from "./ToolButton";
 import { ToolButton } from "./ToolButton";
 import { fileOpen } from "../data/filesystem";
 import { fileOpen } from "../data/filesystem";
 import { muteFSAbortError } from "../utils";
 import { muteFSAbortError } from "../utils";
-import { useAtom } from "jotai";
+import { atom, useAtom } from "jotai";
 import { jotaiScope } from "../jotai";
 import { jotaiScope } from "../jotai";
 import ConfirmDialog from "./ConfirmDialog";
 import ConfirmDialog from "./ConfirmDialog";
 import PublishLibrary from "./PublishLibrary";
 import PublishLibrary from "./PublishLibrary";
 import { Dialog } from "./Dialog";
 import { Dialog } from "./Dialog";
-import { useOutsideClickHook } from "../hooks/useOutsideClick";
-import MenuItem from "./MenuItem";
-import { isDropdownOpenAtom } from "./App";
+
+import DropdownMenu from "./dropdownMenu/DropdownMenu";
+
+export const isLibraryMenuOpenAtom = atom(false);
 
 
 const getSelectedItems = (
 const getSelectedItems = (
   libraryItems: LibraryItems,
   libraryItems: LibraryItems,
@@ -45,7 +46,9 @@ export const LibraryMenuHeader: React.FC<{
   appState,
   appState,
 }) => {
 }) => {
   const [libraryItemsData] = useAtom(libraryItemsAtom, jotaiScope);
   const [libraryItemsData] = useAtom(libraryItemsAtom, jotaiScope);
-
+  const [isLibraryMenuOpen, setIsLibraryMenuOpen] = useAtom(
+    isLibraryMenuOpenAtom,
+  );
   const renderRemoveLibAlert = useCallback(() => {
   const renderRemoveLibAlert = useCallback(() => {
     const content = selectedItems.length
     const content = selectedItems.length
       ? t("alerts.removeItemsFromsLibrary", { count: selectedItems.length })
       ? t("alerts.removeItemsFromsLibrary", { count: selectedItems.length })
@@ -173,85 +176,86 @@ export const LibraryMenuHeader: React.FC<{
       });
       });
   };
   };
 
 
-  const [isDropdownOpen, setIsDropdownOpen] = useAtom(isDropdownOpenAtom);
-  const dropdownRef = useOutsideClickHook(() => setIsDropdownOpen(false));
-
-  return (
-    <div style={{ position: "relative" }}>
-      <button
-        type="button"
-        className="Sidebar__dropdown-btn"
-        data-prevent-outside-click
-        onClick={() => setIsDropdownOpen(!isDropdownOpen)}
-      >
-        {DotsIcon}
-      </button>
-
-      {selectedItems.length > 0 && (
-        <div className="library-actions-counter">{selectedItems.length}</div>
-      )}
-
-      {isDropdownOpen && (
-        <div
-          className="Sidebar__dropdown-content menu-container"
-          ref={dropdownRef}
+  const renderLibraryMenu = () => {
+    return (
+      <DropdownMenu open={isLibraryMenuOpen}>
+        <DropdownMenu.Trigger
+          className="Sidebar__dropdown-btn"
+          onToggle={() => setIsLibraryMenuOpen(!isLibraryMenuOpen)}
+        >
+          {DotsIcon}
+        </DropdownMenu.Trigger>
+        <DropdownMenu.Content
+          onClickOutside={() => setIsLibraryMenuOpen(false)}
+          className="library-menu"
         >
         >
           {!itemsSelected && (
           {!itemsSelected && (
-            <MenuItem
-              label={t("buttons.load")}
+            <DropdownMenu.Item
+              onSelect={onLibraryImport}
               icon={LoadIcon}
               icon={LoadIcon}
               dataTestId="lib-dropdown--load"
               dataTestId="lib-dropdown--load"
-              onClick={onLibraryImport}
-            />
+            >
+              {t("buttons.load")}
+            </DropdownMenu.Item>
           )}
           )}
-          {showRemoveLibAlert && renderRemoveLibAlert()}
-          {showPublishLibraryDialog && (
-            <PublishLibrary
-              onClose={() => setShowPublishLibraryDialog(false)}
-              libraryItems={getSelectedItems(
-                libraryItemsData.libraryItems,
-                selectedItems,
-              )}
-              appState={appState}
-              onSuccess={(data) =>
-                onPublishLibSuccess(data, libraryItemsData.libraryItems)
-              }
-              onError={(error) => window.alert(error)}
-              updateItemsInStorage={() =>
-                library.setLibrary(libraryItemsData.libraryItems)
-              }
-              onRemove={(id: string) =>
-                onSelectItems(selectedItems.filter((_id) => _id !== id))
-              }
-            />
+          {!!items.length && (
+            <DropdownMenu.Item
+              onSelect={onLibraryExport}
+              icon={ExportIcon}
+              dataTestId="lib-dropdown--export"
+            >
+              {t("buttons.export")}
+            </DropdownMenu.Item>
           )}
           )}
-          {publishLibSuccess && renderPublishSuccess()}
           {!!items.length && (
           {!!items.length && (
-            <>
-              <MenuItem
-                label={t("buttons.export")}
-                icon={ExportIcon}
-                onClick={onLibraryExport}
-                dataTestId="lib-dropdown--export"
-              />
-              <MenuItem
-                label={resetLabel}
-                icon={TrashIcon}
-                onClick={() => setShowRemoveLibAlert(true)}
-                dataTestId="lib-dropdown--remove"
-              />
-            </>
+            <DropdownMenu.Item
+              onSelect={() => setShowRemoveLibAlert(true)}
+              icon={TrashIcon}
+            >
+              {resetLabel}
+            </DropdownMenu.Item>
           )}
           )}
           {itemsSelected && (
           {itemsSelected && (
-            <MenuItem
-              label={t("buttons.publishLibrary")}
+            <DropdownMenu.Item
               icon={publishIcon}
               icon={publishIcon}
-              dataTestId="lib-dropdown--publish"
-              onClick={() => setShowPublishLibraryDialog(true)}
-            />
+              onSelect={() => setShowPublishLibraryDialog(true)}
+              dataTestId="lib-dropdown--remove"
+            >
+              {t("buttons.publishLibrary")}
+            </DropdownMenu.Item>
+          )}
+        </DropdownMenu.Content>
+      </DropdownMenu>
+    );
+  };
+  return (
+    <div style={{ position: "relative" }}>
+      {renderLibraryMenu()}
+      {selectedItems.length > 0 && (
+        <div className="library-actions-counter">{selectedItems.length}</div>
+      )}
+      {showRemoveLibAlert && renderRemoveLibAlert()}
+      {showPublishLibraryDialog && (
+        <PublishLibrary
+          onClose={() => setShowPublishLibraryDialog(false)}
+          libraryItems={getSelectedItems(
+            libraryItemsData.libraryItems,
+            selectedItems,
           )}
           )}
-        </div>
+          appState={appState}
+          onSuccess={(data) =>
+            onPublishLibSuccess(data, libraryItemsData.libraryItems)
+          }
+          onError={(error) => window.alert(error)}
+          updateItemsInStorage={() =>
+            library.setLibrary(libraryItemsData.libraryItems)
+          }
+          onRemove={(id: string) =>
+            onSelectItems(selectedItems.filter((_id) => _id !== id))
+          }
+        />
       )}
       )}
+      {publishLibSuccess && renderPublishSuccess()}
     </div>
     </div>
   );
   );
 };
 };

+ 0 - 85
src/components/Menu.scss

@@ -1,85 +0,0 @@
-@import "../css/variables.module";
-
-.excalidraw {
-  .menu-container {
-    background-color: #fff !important;
-    max-height: calc(100vh - 150px);
-    overflow-y: auto;
-  }
-
-  .menu-button {
-    @include outlineButtonStyles;
-    background-color: var(--island-bg-color);
-    width: var(--lg-button-size);
-    height: var(--lg-button-size);
-
-    svg {
-      width: var(--lg-icon-size);
-      height: var(--lg-icon-size);
-    }
-  }
-
-  .menu-item {
-    display: flex;
-    background-color: transparent;
-    border: 0;
-    align-items: center;
-    padding: 0 0.625rem;
-    height: 2rem;
-    column-gap: 0.625rem;
-    font-size: 0.875rem;
-    color: var(--color-gray-100);
-    cursor: pointer;
-    border-radius: var(--border-radius-md);
-    width: 100%;
-    box-sizing: border-box;
-    font-weight: normal;
-    font-family: inherit;
-
-    @media screen and (min-width: 1921px) {
-      height: 2.25rem;
-    }
-
-    &__text {
-      text-overflow: ellipsis;
-      overflow: hidden;
-      white-space: nowrap;
-    }
-
-    &__shortcut {
-      margin-inline-start: auto;
-      opacity: 0.5;
-    }
-
-    &:hover {
-      background-color: var(--button-hover);
-      text-decoration: none;
-    }
-
-    svg {
-      width: 1rem;
-      height: 1rem;
-      display: block;
-    }
-
-    &.active-collab {
-      background-color: #ecfdf5;
-      color: #064e3c;
-    }
-  }
-
-  &.theme--dark {
-    .menu-item {
-      color: var(--color-gray-40);
-
-      &.active-collab {
-        background-color: #064e3c;
-        color: #ecfdf5;
-      }
-    }
-
-    .menu-container {
-      background-color: var(--color-gray-90) !important;
-    }
-  }
-}

+ 0 - 37
src/components/MenuItem.tsx

@@ -1,37 +0,0 @@
-import clsx from "clsx";
-import "./Menu.scss";
-
-interface MenuProps {
-  icon: JSX.Element;
-  onClick: () => void;
-  label: string;
-  dataTestId: string;
-  shortcut?: string;
-  isCollaborating?: boolean;
-}
-
-const MenuItem = ({
-  icon,
-  onClick,
-  label,
-  dataTestId,
-  shortcut,
-  isCollaborating,
-}: MenuProps) => {
-  return (
-    <button
-      className={clsx("menu-item", { "active-collab": isCollaborating })}
-      aria-label={label}
-      onClick={onClick}
-      data-testid={dataTestId}
-      title={label}
-      type="button"
-    >
-      <div className="menu-item__icon">{icon}</div>
-      <div className="menu-item__text">{label}</div>
-      {shortcut && <div className="menu-item__shortcut">{shortcut}</div>}
-    </button>
-  );
-};
-
-export default MenuItem;

+ 0 - 53
src/components/MenuUtils.tsx

@@ -1,53 +0,0 @@
-import { GithubIcon, DiscordIcon, PlusPromoIcon, TwitterIcon } from "./icons";
-
-export const MenuLinks = () => (
-  <>
-    <a
-      href="https://plus.excalidraw.com/plus?utm_source=excalidraw&utm_medium=app&utm_content=hamburger"
-      target="_blank"
-      rel="noreferrer"
-      className="menu-item"
-      style={{ color: "var(--color-promo)" }}
-    >
-      <div className="menu-item__icon">{PlusPromoIcon}</div>
-      <div className="menu-item__text">Excalidraw+</div>
-    </a>
-    <a
-      className="menu-item"
-      href="https://github.com/excalidraw/excalidraw"
-      target="_blank"
-      rel="noopener noreferrer"
-    >
-      <div className="menu-item__icon">{GithubIcon}</div>
-      <div className="menu-item__text">GitHub</div>
-    </a>
-    <a
-      className="menu-item"
-      target="_blank"
-      href="https://discord.gg/UexuTaE"
-      rel="noopener noreferrer"
-    >
-      <div className="menu-item__icon">{DiscordIcon}</div>
-      <div className="menu-item__text">Discord</div>
-    </a>
-    <a
-      className="menu-item"
-      target="_blank"
-      href="https://twitter.com/excalidraw"
-      rel="noopener noreferrer"
-    >
-      <div className="menu-item__icon">{TwitterIcon}</div>
-      <div className="menu-item__text">Twitter</div>
-    </a>
-  </>
-);
-
-export const Separator = () => (
-  <div
-    style={{
-      height: "1px",
-      backgroundColor: "var(--default-border-color)",
-      margin: ".5rem 0",
-    }}
-  />
-);

+ 7 - 87
src/components/MobileMenu.tsx

@@ -11,18 +11,13 @@ import { HintViewer } from "./HintViewer";
 import { calculateScrollCenter } from "../scene";
 import { calculateScrollCenter } from "../scene";
 import { SelectedShapeActions, ShapesSwitcher } from "./Actions";
 import { SelectedShapeActions, ShapesSwitcher } from "./Actions";
 import { Section } from "./Section";
 import { Section } from "./Section";
-import CollabButton from "./CollabButton";
 import { SCROLLBAR_WIDTH, SCROLLBAR_MARGIN } from "../scene/scrollbars";
 import { SCROLLBAR_WIDTH, SCROLLBAR_MARGIN } from "../scene/scrollbars";
 import { LockButton } from "./LockButton";
 import { LockButton } from "./LockButton";
-import { UserList } from "./UserList";
 import { LibraryButton } from "./LibraryButton";
 import { LibraryButton } from "./LibraryButton";
 import { PenModeButton } from "./PenModeButton";
 import { PenModeButton } from "./PenModeButton";
 import { Stats } from "./Stats";
 import { Stats } from "./Stats";
 import { actionToggleStats } from "../actions";
 import { actionToggleStats } from "../actions";
-import { MenuLinks, Separator } from "./MenuUtils";
 import WelcomeScreen from "./WelcomeScreen";
 import WelcomeScreen from "./WelcomeScreen";
-import MenuItem from "./MenuItem";
-import { ExportImageIcon } from "./icons";
 
 
 type MobileMenuProps = {
 type MobileMenuProps = {
   appState: AppState;
   appState: AppState;
@@ -46,16 +41,14 @@ type MobileMenuProps = {
   renderSidebars: () => JSX.Element | null;
   renderSidebars: () => JSX.Element | null;
   device: Device;
   device: Device;
   renderWelcomeScreen?: boolean;
   renderWelcomeScreen?: boolean;
+  renderMenu: () => React.ReactNode;
 };
 };
 
 
 export const MobileMenu = ({
 export const MobileMenu = ({
   appState,
   appState,
   elements,
   elements,
   actionManager,
   actionManager,
-  renderJSONExportDialog,
-  renderImageExportDialog,
   setAppState,
   setAppState,
-  onCollabButtonClick,
   onLockToggle,
   onLockToggle,
   onPenModeToggle,
   onPenModeToggle,
   canvas,
   canvas,
@@ -66,6 +59,7 @@ export const MobileMenu = ({
   renderSidebars,
   renderSidebars,
   device,
   device,
   renderWelcomeScreen,
   renderWelcomeScreen,
+  renderMenu,
 }: MobileMenuProps) => {
 }: MobileMenuProps) => {
   const renderToolbar = () => {
   const renderToolbar = () => {
     return (
     return (
@@ -147,16 +141,12 @@ export const MobileMenu = ({
 
 
   const renderAppToolbar = () => {
   const renderAppToolbar = () => {
     if (appState.viewModeEnabled) {
     if (appState.viewModeEnabled) {
-      return (
-        <div className="App-toolbar-content">
-          {actionManager.renderAction("toggleCanvasMenu")}
-        </div>
-      );
+      return <div className="App-toolbar-content">{renderMenu()}</div>;
     }
     }
 
 
     return (
     return (
       <div className="App-toolbar-content">
       <div className="App-toolbar-content">
-        {actionManager.renderAction("toggleCanvasMenu")}
+        {renderMenu()}
         {actionManager.renderAction("toggleEditMenu")}
         {actionManager.renderAction("toggleEditMenu")}
         {actionManager.renderAction("undo")}
         {actionManager.renderAction("undo")}
         {actionManager.renderAction("redo")}
         {actionManager.renderAction("redo")}
@@ -168,58 +158,6 @@ export const MobileMenu = ({
     );
     );
   };
   };
 
 
-  const renderCanvasActions = () => {
-    if (appState.viewModeEnabled) {
-      return (
-        <>
-          {renderJSONExportDialog()}
-          <MenuItem
-            label={t("buttons.exportImage")}
-            icon={ExportImageIcon}
-            dataTestId="image-export-button"
-            onClick={() => setAppState({ openDialog: "imageExport" })}
-          />
-          {renderImageExportDialog()}
-        </>
-      );
-    }
-    return (
-      <>
-        {!appState.viewModeEnabled && actionManager.renderAction("loadScene")}
-        {renderJSONExportDialog()}
-        {renderImageExportDialog()}
-        <MenuItem
-          label={t("buttons.exportImage")}
-          icon={ExportImageIcon}
-          dataTestId="image-export-button"
-          onClick={() => setAppState({ openDialog: "imageExport" })}
-        />
-        {onCollabButtonClick && (
-          <CollabButton
-            isCollaborating={isCollaborating}
-            collaboratorCount={appState.collaborators.size}
-            onClick={onCollabButtonClick}
-          />
-        )}
-        {actionManager.renderAction("toggleShortcuts", undefined, true)}
-        {!appState.viewModeEnabled && actionManager.renderAction("clearCanvas")}
-        <Separator />
-        <MenuLinks />
-        <Separator />
-        {!appState.viewModeEnabled && (
-          <div style={{ marginBottom: ".5rem" }}>
-            <div style={{ fontSize: ".75rem", marginBottom: ".5rem" }}>
-              {t("labels.canvasBackground")}
-            </div>
-            <div style={{ padding: "0 0.625rem" }}>
-              {actionManager.renderAction("changeViewBackgroundColor")}
-            </div>
-          </div>
-        )}
-        {actionManager.renderAction("toggleTheme")}
-      </>
-    );
-  };
   return (
   return (
     <>
     <>
       {renderSidebars()}
       {renderSidebars()}
@@ -244,27 +182,9 @@ export const MobileMenu = ({
         }}
         }}
       >
       >
         <Island padding={0}>
         <Island padding={0}>
-          {appState.openMenu === "canvas" ? (
-            <Section className="App-mobile-menu" heading="canvasActions">
-              <div className="panelColumn">
-                <Stack.Col gap={2}>
-                  {renderCanvasActions()}
-                  {appState.collaborators.size > 0 && (
-                    <fieldset>
-                      <legend>{t("labels.collaborators")}</legend>
-                      <UserList
-                        mobile
-                        collaborators={appState.collaborators}
-                        actionManager={actionManager}
-                      />
-                    </fieldset>
-                  )}
-                </Stack.Col>
-              </div>
-            </Section>
-          ) : appState.openMenu === "shape" &&
-            !appState.viewModeEnabled &&
-            showSelectedShapeActions(appState, elements) ? (
+          {appState.openMenu === "shape" &&
+          !appState.viewModeEnabled &&
+          showSelectedShapeActions(appState, elements) ? (
             <Section className="App-mobile-menu" heading="selectedShapeActions">
             <Section className="App-mobile-menu" heading="selectedShapeActions">
               <SelectedShapeActions
               <SelectedShapeActions
                 appState={appState}
                 appState={appState}

+ 0 - 18
src/components/Sidebar/Sidebar.scss

@@ -3,24 +3,6 @@
 
 
 .excalidraw {
 .excalidraw {
   .Sidebar {
   .Sidebar {
-    &__dropdown-content {
-      z-index: 1;
-      position: absolute;
-      top: 100%;
-      left: 0;
-
-      :root[dir="rtl"] & {
-        right: 0;
-        left: auto;
-      }
-
-      margin-top: 0.25rem;
-      width: 180px;
-      box-shadow: var(--library-dropdown-shadow);
-      border-radius: var(--border-radius-lg);
-      padding: 0.25rem 0.5rem;
-    }
-
     &__close-btn,
     &__close-btn,
     &__pin-btn,
     &__pin-btn,
     &__dropdown-btn {
     &__dropdown-btn {

+ 4 - 24
src/components/UserList.tsx

@@ -4,16 +4,16 @@ import React from "react";
 import clsx from "clsx";
 import clsx from "clsx";
 import { AppState, Collaborator } from "../types";
 import { AppState, Collaborator } from "../types";
 import { Tooltip } from "./Tooltip";
 import { Tooltip } from "./Tooltip";
-import { ActionManager } from "../actions/manager";
+import { useExcalidrawActionManager } from "./App";
 
 
 export const UserList: React.FC<{
 export const UserList: React.FC<{
   className?: string;
   className?: string;
   mobile?: boolean;
   mobile?: boolean;
   collaborators: AppState["collaborators"];
   collaborators: AppState["collaborators"];
-  actionManager: ActionManager;
-}> = ({ className, mobile, collaborators, actionManager }) => {
-  const uniqueCollaborators = new Map<string, Collaborator>();
+}> = ({ className, mobile, collaborators }) => {
+  const actionManager = useExcalidrawActionManager();
 
 
+  const uniqueCollaborators = new Map<string, Collaborator>();
   collaborators.forEach((collaborator, socketId) => {
   collaborators.forEach((collaborator, socketId) => {
     uniqueCollaborators.set(
     uniqueCollaborators.set(
       // filter on user id, else fall back on unique socketId
       // filter on user id, else fall back on unique socketId
@@ -44,26 +44,6 @@ export const UserList: React.FC<{
         );
         );
       });
       });
 
 
-  // TODO barnabasmolnar/editor-redesign
-  // probably remove before shipping :)
-  // 20 fake collaborators; for easy, convenient debug purposes ˇˇ
-  // const avatars = Array.from({ length: 20 }).map((_, index) => {
-  //   const avatarJSX = actionManager.renderAction("goToCollaborator", [
-  //     index.toString(),
-  //     {
-  //       username: `User ${index}`,
-  //     },
-  //   ]);
-
-  //   return mobile ? (
-  //     <Tooltip label={`User ${index}`} key={index}>
-  //       {avatarJSX}
-  //     </Tooltip>
-  //   ) : (
-  //     <React.Fragment key={index}>{avatarJSX}</React.Fragment>
-  //   );
-  // });
-
   return (
   return (
     <div className={clsx("UserList", className, { UserList_mobile: mobile })}>
     <div className={clsx("UserList", className, { UserList_mobile: mobile })}>
       {avatars}
       {avatars}

+ 1 - 17
src/components/WelcomeScreen.tsx

@@ -1,18 +1,10 @@
-import { useAtom } from "jotai";
 import { actionLoadScene, actionShortcuts } from "../actions";
 import { actionLoadScene, actionShortcuts } from "../actions";
 import { ActionManager } from "../actions/manager";
 import { ActionManager } from "../actions/manager";
 import { getShortcutFromShortcutName } from "../actions/shortcuts";
 import { getShortcutFromShortcutName } from "../actions/shortcuts";
 import { isExcalidrawPlusSignedUser } from "../constants";
 import { isExcalidrawPlusSignedUser } from "../constants";
-import { collabDialogShownAtom } from "../excalidraw-app/collab/Collab";
 import { t } from "../i18n";
 import { t } from "../i18n";
 import { AppState } from "../types";
 import { AppState } from "../types";
-import {
-  ExcalLogo,
-  HelpIcon,
-  LoadIcon,
-  PlusPromoIcon,
-  UsersIcon,
-} from "./icons";
+import { ExcalLogo, HelpIcon, LoadIcon, PlusPromoIcon } from "./icons";
 import "./WelcomeScreen.scss";
 import "./WelcomeScreen.scss";
 
 
 const WelcomeScreenItem = ({
 const WelcomeScreenItem = ({
@@ -64,8 +56,6 @@ const WelcomeScreen = ({
   appState: AppState;
   appState: AppState;
   actionManager: ActionManager;
   actionManager: ActionManager;
 }) => {
 }) => {
-  const [, setCollabDialogShown] = useAtom(collabDialogShownAtom);
-
   let subheadingJSX;
   let subheadingJSX;
 
 
   if (isExcalidrawPlusSignedUser) {
   if (isExcalidrawPlusSignedUser) {
@@ -109,12 +99,6 @@ const WelcomeScreen = ({
             icon={LoadIcon}
             icon={LoadIcon}
           />
           />
         )}
         )}
-        <WelcomeScreenItem
-          label={t("labels.liveCollaboration")}
-          shortcut={null}
-          onClick={() => setCollabDialogShown(true)}
-          icon={UsersIcon}
-        />
         <WelcomeScreenItem
         <WelcomeScreenItem
           onClick={() => actionManager.executeAction(actionShortcuts)}
           onClick={() => actionManager.executeAction(actionShortcuts)}
           label={t("helpDialog.title")}
           label={t("helpDialog.title")}

+ 127 - 0
src/components/dropdownMenu/DropdownMenu.scss

@@ -0,0 +1,127 @@
+@import "../../css/variables.module";
+
+.excalidraw {
+  .dropdown-menu {
+    position: absolute;
+    top: 100%;
+    margin-top: 0.25rem;
+
+    &--mobile {
+      bottom: 55px;
+      top: auto;
+      left: 0;
+      width: 100%;
+      display: flex;
+      flex-direction: column;
+      row-gap: 0.75rem;
+
+      .dropdown-menu-container {
+        padding: 8px 8px;
+        box-sizing: border-box;
+        background-color: var(--island-bg-color);
+        box-shadow: var(--shadow-island);
+        border-radius: var(--border-radius-lg);
+        position: relative;
+        transition: box-shadow 0.5s ease-in-out;
+
+        &.zen-mode {
+          box-shadow: none;
+        }
+      }
+    }
+
+    .dropdown-menu-container {
+      background-color: #fff !important;
+      max-height: calc(100vh - 150px);
+      overflow-y: auto;
+      --gap: 2;
+    }
+
+    .dropdown-menu-item-base {
+      display: flex;
+      padding: 0 0.625rem;
+      column-gap: 0.625rem;
+      font-size: 0.875rem;
+      color: var(--color-gray-100);
+      width: 100%;
+      box-sizing: border-box;
+      font-weight: normal;
+      font-family: inherit;
+    }
+
+    .dropdown-menu-item {
+      background-color: transparent;
+      border: 0;
+      align-items: center;
+      height: 2rem;
+      cursor: pointer;
+      border-radius: var(--border-radius-md);
+
+      @media screen and (min-width: 1921px) {
+        height: 2.25rem;
+      }
+
+      &__text {
+        text-overflow: ellipsis;
+        overflow: hidden;
+        white-space: nowrap;
+      }
+
+      &__shortcut {
+        margin-inline-start: auto;
+        opacity: 0.5;
+      }
+
+      &:hover {
+        background-color: var(--button-hover);
+        text-decoration: none;
+      }
+
+      svg {
+        width: 1rem;
+        height: 1rem;
+        display: block;
+      }
+    }
+
+    .dropdown-menu-item-custom {
+      margin-top: 0.5rem;
+    }
+
+    .dropdown-menu-group-title {
+      font-size: 14px;
+      text-align: left;
+      margin: 10px 0;
+      font-weight: 500;
+    }
+  }
+  &.theme--dark {
+    .dropdown-menu-item {
+      color: var(--color-gray-40);
+    }
+
+    .dropdown-menu-container {
+      background-color: var(--color-gray-90) !important;
+    }
+  }
+
+  .dropdown-menu-button {
+    @include outlineButtonStyles;
+    background-color: var(--island-bg-color);
+    width: var(--lg-button-size);
+    height: var(--lg-button-size);
+
+    svg {
+      width: var(--lg-icon-size);
+      height: var(--lg-icon-size);
+    }
+
+    &--mobile {
+      border: none;
+      margin: 0;
+      padding: 0;
+      width: var(--default-button-size);
+      height: var(--default-button-size);
+    }
+  }
+}

+ 43 - 0
src/components/dropdownMenu/DropdownMenu.tsx

@@ -0,0 +1,43 @@
+import React from "react";
+import DropdownMenuTrigger from "./DropdownMenuTrigger";
+import DropdownMenuItem from "./DropdownMenuItem";
+import MenuSeparator from "./DropdownMenuSeparator";
+import DropdownMenuGroup from "./DropdownMenuGroup";
+import DropdownMenuContent from "./DropdownMenuContent";
+import DropdownMenuItemLink from "./DropdownMenuItemLink";
+import DropdownMenuItemCustom from "./DropdownMenuItemCustom";
+import {
+  getMenuContentComponent,
+  getMenuTriggerComponent,
+} from "./dropdownMenuUtils";
+
+import "./DropdownMenu.scss";
+
+const DropdownMenu = ({
+  children,
+  open,
+}: {
+  children?: React.ReactNode;
+  open: boolean;
+}) => {
+  const MenuTriggerComp = getMenuTriggerComponent(children);
+  const MenuContentComp = getMenuContentComponent(children);
+  return (
+    <>
+      {MenuTriggerComp}
+      {open && MenuContentComp}
+    </>
+  );
+};
+
+DropdownMenu.Trigger = DropdownMenuTrigger;
+DropdownMenu.Content = DropdownMenuContent;
+DropdownMenu.Item = DropdownMenuItem;
+DropdownMenu.ItemLink = DropdownMenuItemLink;
+DropdownMenu.ItemCustom = DropdownMenuItemCustom;
+DropdownMenu.Group = DropdownMenuGroup;
+DropdownMenu.Separator = MenuSeparator;
+
+export default DropdownMenu;
+
+DropdownMenu.displayName = "DropdownMenu";

+ 51 - 0
src/components/dropdownMenu/DropdownMenuContent.tsx

@@ -0,0 +1,51 @@
+import { useOutsideClickHook } from "../../hooks/useOutsideClick";
+import { Island } from "../Island";
+
+import { useDevice } from "../App";
+import clsx from "clsx";
+import Stack from "../Stack";
+
+const MenuContent = ({
+  children,
+  onClickOutside,
+  className = "",
+  style,
+}: {
+  children?: React.ReactNode;
+  onClickOutside?: () => void;
+  className?: string;
+  style?: React.CSSProperties;
+}) => {
+  const device = useDevice();
+  const menuRef = useOutsideClickHook(() => {
+    onClickOutside?.();
+  });
+
+  const classNames = clsx(`dropdown-menu ${className}`, {
+    "dropdown-menu--mobile": device.isMobile,
+  }).trim();
+  return (
+    <div
+      ref={menuRef}
+      className={classNames}
+      style={style}
+      data-testid="dropdown-menu"
+    >
+      {/* the zIndex ensures this menu has higher stacking order,
+    see https://github.com/excalidraw/excalidraw/pull/1445 */}
+      {device.isMobile ? (
+        <Stack.Col className="dropdown-menu-container">{children}</Stack.Col>
+      ) : (
+        <Island
+          className="dropdown-menu-container"
+          padding={2}
+          style={{ zIndex: 1 }}
+        >
+          {children}
+        </Island>
+      )}
+    </div>
+  );
+};
+export default MenuContent;
+MenuContent.displayName = "DropdownMenuContent";

+ 23 - 0
src/components/dropdownMenu/DropdownMenuGroup.tsx

@@ -0,0 +1,23 @@
+import React from "react";
+
+const MenuGroup = ({
+  children,
+  className = "",
+  style,
+  title,
+}: {
+  children: React.ReactNode;
+  className?: string;
+  style?: React.CSSProperties;
+  title?: string;
+}) => {
+  return (
+    <div className={`dropdown-menu-group ${className}`} style={style}>
+      {title && <p className="dropdown-menu-group-title">{title}</p>}
+      {children}
+    </div>
+  );
+};
+
+export default MenuGroup;
+MenuGroup.displayName = "DropdownMenuGroup";

+ 45 - 0
src/components/dropdownMenu/DropdownMenuItem.tsx

@@ -0,0 +1,45 @@
+import React from "react";
+import MenuItemContent from "./DropdownMenuItemContent";
+
+export const getDrodownMenuItemClassName = (className = "") => {
+  return `dropdown-menu-item dropdown-menu-item-base ${className}`.trim();
+};
+
+const DropdownMenuItem = ({
+  icon,
+  onSelect,
+  children,
+  dataTestId,
+  shortcut,
+  className,
+  style,
+  ariaLabel,
+}: {
+  icon?: JSX.Element;
+  onSelect: () => void;
+  children: React.ReactNode;
+  dataTestId?: string;
+  shortcut?: string;
+  className?: string;
+  style?: React.CSSProperties;
+  ariaLabel?: string;
+}) => {
+  return (
+    <button
+      aria-label={ariaLabel}
+      onClick={onSelect}
+      data-testid={dataTestId}
+      title={ariaLabel}
+      type="button"
+      className={getDrodownMenuItemClassName(className)}
+      style={style}
+    >
+      <MenuItemContent icon={icon} shortcut={shortcut}>
+        {children}
+      </MenuItemContent>
+    </button>
+  );
+};
+
+export default DropdownMenuItem;
+DropdownMenuItem.displayName = "DropdownMenuItem";

+ 23 - 0
src/components/dropdownMenu/DropdownMenuItemContent.tsx

@@ -0,0 +1,23 @@
+import { useDevice } from "../App";
+
+const MenuItemContent = ({
+  icon,
+  shortcut,
+  children,
+}: {
+  icon?: JSX.Element;
+  shortcut?: string;
+  children: React.ReactNode;
+}) => {
+  const device = useDevice();
+  return (
+    <>
+      <div className="dropdown-menu-item__icon">{icon}</div>
+      <div className="dropdown-menu-item__text">{children}</div>
+      {shortcut && !device.isMobile && (
+        <div className="dropdown-menu-item__shortcut">{shortcut}</div>
+      )}
+    </>
+  );
+};
+export default MenuItemContent;

+ 23 - 0
src/components/dropdownMenu/DropdownMenuItemCustom.tsx

@@ -0,0 +1,23 @@
+const DropdownMenuItemCustom = ({
+  children,
+  className = "",
+  style,
+  dataTestId,
+}: {
+  children: React.ReactNode;
+  className?: string;
+  style?: React.CSSProperties;
+  dataTestId?: string;
+}) => {
+  return (
+    <div
+      className={`dropdown-menu-item-base dropdown-menu-item-custom ${className}`.trim()}
+      style={style}
+      data-testid={dataTestId}
+    >
+      {children}
+    </div>
+  );
+};
+
+export default DropdownMenuItemCustom;

+ 42 - 0
src/components/dropdownMenu/DropdownMenuItemLink.tsx

@@ -0,0 +1,42 @@
+import MenuItemContent from "./DropdownMenuItemContent";
+import React from "react";
+import { getDrodownMenuItemClassName } from "./DropdownMenuItem";
+const DropdownMenuItemLink = ({
+  icon,
+  dataTestId,
+  shortcut,
+  href,
+  children,
+  className = "",
+  style,
+  ariaLabel,
+}: {
+  icon?: JSX.Element;
+  children: React.ReactNode;
+  dataTestId?: string;
+  shortcut?: string;
+  className?: string;
+  href: string;
+  style?: React.CSSProperties;
+  ariaLabel?: string;
+}) => {
+  return (
+    <a
+      href={href}
+      target="_blank"
+      rel="noreferrer"
+      className={getDrodownMenuItemClassName(className)}
+      style={style}
+      data-testid={dataTestId}
+      title={ariaLabel}
+      aria-label={ariaLabel}
+    >
+      <MenuItemContent icon={icon} shortcut={shortcut}>
+        {children}
+      </MenuItemContent>
+    </a>
+  );
+};
+
+export default DropdownMenuItemLink;
+DropdownMenuItemLink.displayName = "DropdownMenuItemLink";

+ 14 - 0
src/components/dropdownMenu/DropdownMenuSeparator.tsx

@@ -0,0 +1,14 @@
+import React from "react";
+
+const MenuSeparator = () => (
+  <div
+    style={{
+      height: "1px",
+      backgroundColor: "var(--default-border-color)",
+      margin: ".5rem 0",
+    }}
+  />
+);
+
+export default MenuSeparator;
+MenuSeparator.displayName = "DropdownMenuSeparator";

+ 37 - 0
src/components/dropdownMenu/DropdownMenuTrigger.tsx

@@ -0,0 +1,37 @@
+import clsx from "clsx";
+import { useDevice, useExcalidrawAppState } from "../App";
+
+const MenuTrigger = ({
+  className = "",
+  children,
+  onToggle,
+}: {
+  className?: string;
+  children: React.ReactNode;
+  onToggle: () => void;
+}) => {
+  const appState = useExcalidrawAppState();
+  const device = useDevice();
+  const classNames = clsx(
+    `dropdown-menu-button ${className}`,
+    "zen-mode-transition",
+    {
+      "transition-left": appState.zenModeEnabled,
+      "dropdown-menu-button--mobile": device.isMobile,
+    },
+  ).trim();
+  return (
+    <button
+      data-prevent-outside-click
+      className={classNames}
+      onClick={onToggle}
+      type="button"
+      data-testid="dropdown-menu-button"
+    >
+      {children}
+    </button>
+  );
+};
+
+export default MenuTrigger;
+MenuTrigger.displayName = "DropdownMenuTrigger";

+ 35 - 0
src/components/dropdownMenu/dropdownMenuUtils.ts

@@ -0,0 +1,35 @@
+import React from "react";
+
+export const getMenuTriggerComponent = (children: React.ReactNode) => {
+  const comp = React.Children.toArray(children).find(
+    (child) =>
+      React.isValidElement(child) &&
+      typeof child.type !== "string" &&
+      //@ts-ignore
+      child?.type.displayName &&
+      //@ts-ignore
+      child.type.displayName === "DropdownMenuTrigger",
+  );
+  if (!comp) {
+    return null;
+  }
+  //@ts-ignore
+  return comp;
+};
+
+export const getMenuContentComponent = (children: React.ReactNode) => {
+  const comp = React.Children.toArray(children).find(
+    (child) =>
+      React.isValidElement(child) &&
+      typeof child.type !== "string" &&
+      //@ts-ignore
+      child?.type.displayName &&
+      //@ts-ignore
+      child.type.displayName === "DropdownMenuContent",
+  );
+  if (!comp) {
+    return null;
+  }
+  //@ts-ignore
+  return comp;
+};

+ 4 - 5
src/components/footer/Footer.tsx

@@ -1,7 +1,7 @@
 import clsx from "clsx";
 import clsx from "clsx";
 import { ActionManager } from "../../actions/manager";
 import { ActionManager } from "../../actions/manager";
 import { t } from "../../i18n";
 import { t } from "../../i18n";
-import { AppState } from "../../types";
+import { AppState, UIChildrenComponents } from "../../types";
 import {
 import {
   ExitZenModeAction,
   ExitZenModeAction,
   FinalizeAction,
   FinalizeAction,
@@ -13,20 +13,19 @@ import { WelcomeScreenHelpArrow } from "../icons";
 import { Section } from "../Section";
 import { Section } from "../Section";
 import Stack from "../Stack";
 import Stack from "../Stack";
 import WelcomeScreenDecor from "../WelcomeScreenDecor";
 import WelcomeScreenDecor from "../WelcomeScreenDecor";
-import FooterCenter from "./FooterCenter";
 
 
 const Footer = ({
 const Footer = ({
   appState,
   appState,
   actionManager,
   actionManager,
   showExitZenModeBtn,
   showExitZenModeBtn,
   renderWelcomeScreen,
   renderWelcomeScreen,
-  children,
+  footerCenter,
 }: {
 }: {
   appState: AppState;
   appState: AppState;
   actionManager: ActionManager;
   actionManager: ActionManager;
   showExitZenModeBtn: boolean;
   showExitZenModeBtn: boolean;
   renderWelcomeScreen: boolean;
   renderWelcomeScreen: boolean;
-  children?: React.ReactNode;
+  footerCenter: UIChildrenComponents["FooterCenter"];
 }) => {
 }) => {
   const device = useDevice();
   const device = useDevice();
   const showFinalize =
   const showFinalize =
@@ -71,7 +70,7 @@ const Footer = ({
           </Section>
           </Section>
         </Stack.Col>
         </Stack.Col>
       </div>
       </div>
-      <FooterCenter>{children}</FooterCenter>
+      {footerCenter}
       <div
       <div
         className={clsx("layer-ui__wrapper__footer-right zen-mode-transition", {
         className={clsx("layer-ui__wrapper__footer-right zen-mode-transition", {
           "transition-right disable-pointerEvents": appState.zenModeEnabled,
           "transition-right disable-pointerEvents": appState.zenModeEnabled,

+ 10 - 0
src/components/footer/FooterCenter.scss

@@ -0,0 +1,10 @@
+.footer-center {
+  pointer-events: none;
+  & > * {
+    pointer-events: all;
+  }
+
+  display: flex;
+  width: 100%;
+  justify-content: flex-start;
+}

+ 2 - 1
src/components/footer/FooterCenter.tsx

@@ -1,11 +1,12 @@
 import clsx from "clsx";
 import clsx from "clsx";
 import { useExcalidrawAppState } from "../App";
 import { useExcalidrawAppState } from "../App";
+import "./FooterCenter.scss";
 
 
 const FooterCenter = ({ children }: { children?: React.ReactNode }) => {
 const FooterCenter = ({ children }: { children?: React.ReactNode }) => {
   const appState = useExcalidrawAppState();
   const appState = useExcalidrawAppState();
   return (
   return (
     <div
     <div
-      className={clsx("layer-ui__wrapper__footer-center zen-mode-transition", {
+      className={clsx("footer-center zen-mode-transition", {
         "layer-ui__wrapper__footer-left--transition-bottom":
         "layer-ui__wrapper__footer-left--transition-bottom":
           appState.zenModeEnabled,
           appState.zenModeEnabled,
       })}
       })}

+ 174 - 0
src/components/mainMenu/DefaultItems.tsx

@@ -0,0 +1,174 @@
+import clsx from "clsx";
+import { getShortcutFromShortcutName } from "../../actions/shortcuts";
+import { t } from "../../i18n";
+import {
+  useExcalidrawAppState,
+  useExcalidrawSetAppState,
+  useExcalidrawActionManager,
+} from "../App";
+import { ExportIcon, ExportImageIcon, UsersIcon } from "../icons";
+import { GithubIcon, DiscordIcon, TwitterIcon } from "../icons";
+import DropdownMenuItem from "../dropdownMenu/DropdownMenuItem";
+import DropdownMenuItemLink from "../dropdownMenu/DropdownMenuItemLink";
+
+export const LoadScene = () => {
+  const appState = useExcalidrawAppState();
+  const actionManager = useExcalidrawActionManager();
+  if (appState.viewModeEnabled) {
+    return null;
+  }
+  return actionManager.renderAction("loadScene");
+};
+LoadScene.displayName = "LoadScene";
+
+export const SaveToActiveFile = () => {
+  const appState = useExcalidrawAppState();
+  const actionManager = useExcalidrawActionManager();
+  if (!appState.fileHandle) {
+    return null;
+  }
+  return actionManager.renderAction("saveToActiveFile");
+};
+SaveToActiveFile.displayName = "SaveToActiveFile";
+
+export const SaveAsImage = () => {
+  const setAppState = useExcalidrawSetAppState();
+  // Hack until we tie "t" to lang state
+  // eslint-disable-next-line
+  const appState = useExcalidrawAppState();
+  return (
+    <DropdownMenuItem
+      icon={ExportImageIcon}
+      dataTestId="image-export-button"
+      onSelect={() => setAppState({ openDialog: "imageExport" })}
+      shortcut={getShortcutFromShortcutName("imageExport")}
+      ariaLabel={t("buttons.exportImage")}
+    >
+      {t("buttons.exportImage")}
+    </DropdownMenuItem>
+  );
+};
+SaveAsImage.displayName = "SaveAsImage";
+
+export const Help = () => {
+  // Hack until we tie "t" to lang state
+  // eslint-disable-next-line
+  const appState = useExcalidrawAppState();
+
+  const actionManager = useExcalidrawActionManager();
+  return actionManager.renderAction("toggleShortcuts", undefined, true);
+};
+Help.displayName = "Help";
+
+export const ClearCanvas = () => {
+  const appState = useExcalidrawAppState();
+  const actionManager = useExcalidrawActionManager();
+
+  if (appState.viewModeEnabled) {
+    return null;
+  }
+  return actionManager.renderAction("clearCanvas");
+};
+ClearCanvas.displayName = "ClearCanvas";
+
+export const ToggleTheme = () => {
+  // Hack until we tie "t" to lang state
+  // eslint-disable-next-line
+  const appState = useExcalidrawAppState();
+  const actionManager = useExcalidrawActionManager();
+  return actionManager.renderAction("toggleTheme");
+};
+ToggleTheme.displayName = "ToggleTheme";
+
+export const ChangeCanvasBackground = () => {
+  const appState = useExcalidrawAppState();
+  const actionManager = useExcalidrawActionManager();
+
+  if (appState.viewModeEnabled) {
+    return null;
+  }
+  return (
+    <div style={{ marginTop: "0.5rem" }}>
+      <div style={{ fontSize: ".75rem", marginBottom: ".5rem" }}>
+        {t("labels.canvasBackground")}
+      </div>
+      <div style={{ padding: "0 0.625rem" }}>
+        {actionManager.renderAction("changeViewBackgroundColor")}
+      </div>
+    </div>
+  );
+};
+ChangeCanvasBackground.displayName = "ChangeCanvasBackground";
+
+export const Export = () => {
+  // Hack until we tie "t" to lang state
+  // eslint-disable-next-line
+  const appState = useExcalidrawAppState();
+  const setAppState = useExcalidrawSetAppState();
+  return (
+    <DropdownMenuItem
+      icon={ExportIcon}
+      onSelect={() => {
+        setAppState({ openDialog: "jsonExport" });
+      }}
+      dataTestId="json-export-button"
+      ariaLabel={t("buttons.export")}
+    >
+      {t("buttons.export")}
+    </DropdownMenuItem>
+  );
+};
+Export.displayName = "Export";
+
+export const Socials = () => (
+  <>
+    <DropdownMenuItemLink
+      icon={GithubIcon}
+      href="https://github.com/excalidraw/excalidraw"
+      ariaLabel="GitHub"
+    >
+      GitHub
+    </DropdownMenuItemLink>
+    <DropdownMenuItemLink
+      icon={DiscordIcon}
+      href="https://discord.gg/UexuTaE"
+      ariaLabel="Discord"
+    >
+      Discord
+    </DropdownMenuItemLink>
+    <DropdownMenuItemLink
+      icon={TwitterIcon}
+      href="https://twitter.com/excalidraw"
+      ariaLabel="Twitter"
+    >
+      Twitter
+    </DropdownMenuItemLink>
+  </>
+);
+Socials.displayName = "Socials";
+
+export const LiveCollaboration = ({
+  onSelect,
+  isCollaborating,
+}: {
+  onSelect: () => void;
+  isCollaborating: boolean;
+}) => {
+  // Hack until we tie "t" to lang state
+  // eslint-disable-next-line
+  const appState = useExcalidrawAppState();
+  return (
+    <DropdownMenuItem
+      dataTestId="collab-button"
+      icon={UsersIcon}
+      className={clsx({
+        "active-collab": isCollaborating,
+      })}
+      onSelect={onSelect}
+    >
+      {t("labels.liveCollaboration")}
+    </DropdownMenuItem>
+  );
+};
+
+LiveCollaboration.displayName = "LiveCollaboration";

+ 56 - 0
src/components/mainMenu/MainMenu.tsx

@@ -0,0 +1,56 @@
+import React from "react";
+import {
+  useDevice,
+  useExcalidrawAppState,
+  useExcalidrawSetAppState,
+} from "../App";
+import DropdownMenu from "../dropdownMenu/DropdownMenu";
+
+import * as DefaultItems from "./DefaultItems";
+
+import { UserList } from "../UserList";
+import { t } from "../../i18n";
+import { HamburgerMenuIcon } from "../icons";
+
+const MainMenu = ({ children }: { children?: React.ReactNode }) => {
+  const device = useDevice();
+  const appState = useExcalidrawAppState();
+  const setAppState = useExcalidrawSetAppState();
+  const onClickOutside = device.isMobile
+    ? undefined
+    : () => setAppState({ openMenu: null });
+  return (
+    <DropdownMenu open={appState.openMenu === "canvas"}>
+      <DropdownMenu.Trigger
+        onToggle={() => {
+          setAppState({
+            openMenu: appState.openMenu === "canvas" ? null : "canvas",
+          });
+        }}
+      >
+        {HamburgerMenuIcon}
+      </DropdownMenu.Trigger>
+      <DropdownMenu.Content onClickOutside={onClickOutside}>
+        {children}
+        {device.isMobile && appState.collaborators.size > 0 && (
+          <fieldset className="UserList-Wrapper">
+            <legend>{t("labels.collaborators")}</legend>
+            <UserList mobile={true} collaborators={appState.collaborators} />
+          </fieldset>
+        )}
+      </DropdownMenu.Content>
+    </DropdownMenu>
+  );
+};
+
+MainMenu.Trigger = DropdownMenu.Trigger;
+MainMenu.Item = DropdownMenu.Item;
+MainMenu.ItemLink = DropdownMenu.ItemLink;
+MainMenu.ItemCustom = DropdownMenu.ItemCustom;
+MainMenu.Group = DropdownMenu.Group;
+MainMenu.Separator = DropdownMenu.Separator;
+MainMenu.DefaultItems = DefaultItems;
+
+export default MainMenu;
+
+MainMenu.displayName = "Menu";

+ 14 - 0
src/css/styles.scss

@@ -569,6 +569,20 @@
       display: none;
       display: none;
     }
     }
   }
   }
+  .UserList-Wrapper {
+    margin: 0;
+    padding: 0;
+    border: none;
+    text-align: left;
+
+    legend {
+      display: block;
+      font-size: 0.75rem;
+      font-weight: 400;
+      margin: 0 0 0.25rem;
+      padding: 0;
+    }
+  }
 }
 }
 
 
 .ErrorSplash.excalidraw {
 .ErrorSplash.excalidraw {

+ 6 - 0
src/excalidraw-app/collab/Collab.tsx

@@ -242,6 +242,12 @@ class Collab extends PureComponent<Props, CollabState> {
         );
         );
       }
       }
     } catch (error: any) {
     } catch (error: any) {
+      this.setState({
+        // firestore doesn't return a specific error code when size exceeded
+        errorMessage: /is longer than.*?bytes/.test(error.message)
+          ? t("errors.collabSaveFailed_sizeExceeded")
+          : t("errors.collabSaveFailed"),
+      });
       console.error(error);
       console.error(error);
     }
     }
   };
   };

+ 15 - 17
src/excalidraw-app/components/LanguageList.tsx

@@ -8,23 +8,21 @@ export const LanguageList = ({ style }: { style?: React.CSSProperties }) => {
   const [langCode, setLangCode] = useAtom(langCodeAtom);
   const [langCode, setLangCode] = useAtom(langCodeAtom);
 
 
   return (
   return (
-    <React.Fragment>
-      <select
-        className="dropdown-select dropdown-select__language"
-        onChange={({ target }) => setLangCode(target.value)}
-        value={langCode}
-        aria-label={i18n.t("buttons.selectLanguage")}
-        style={style}
-      >
-        <option key={i18n.defaultLang.code} value={i18n.defaultLang.code}>
-          {i18n.defaultLang.label}
+    <select
+      className="dropdown-select dropdown-select__language"
+      onChange={({ target }) => setLangCode(target.value)}
+      value={langCode}
+      aria-label={i18n.t("buttons.selectLanguage")}
+      style={style}
+    >
+      <option key={i18n.defaultLang.code} value={i18n.defaultLang.code}>
+        {i18n.defaultLang.label}
+      </option>
+      {languages.map((lang) => (
+        <option key={lang.code} value={lang.code}>
+          {lang.label}
         </option>
         </option>
-        {languages.map((lang) => (
-          <option key={lang.code} value={lang.code}>
-            {lang.label}
-          </option>
-        ))}
-      </select>
-    </React.Fragment>
+      ))}
+    </select>
   );
   );
 };
 };

+ 23 - 1
src/excalidraw-app/index.scss

@@ -4,7 +4,7 @@
   &.theme--dark {
   &.theme--dark {
     --color-primary-contrast-offset: #726dff; // to offset Chubb illusion
     --color-primary-contrast-offset: #726dff; // to offset Chubb illusion
   }
   }
-  .layer-ui__wrapper .layer-ui__wrapper__footer-center {
+  .footer-center {
     justify-content: flex-end;
     justify-content: flex-end;
     margin-top: auto;
     margin-top: auto;
     margin-bottom: auto;
     margin-bottom: auto;
@@ -24,7 +24,29 @@
       height: 1.2rem;
       height: 1.2rem;
     }
     }
   }
   }
+
+  .dropdown-menu-container {
+    .dropdown-menu-item {
+      &.active-collab {
+        background-color: #ecfdf5;
+        color: #064e3c;
+      }
+      &.ExcalidrawPlus {
+        color: var(--color-promo);
+      }
+    }
+  }
+
+  &.theme--dark {
+    .dropdown-menu-item {
+      &.active-collab {
+        background-color: #064e3c;
+        color: #ecfdf5;
+      }
+    }
+  }
 }
 }
+
 .excalidraw-app.is-collaborating {
 .excalidraw-app.is-collaborating {
   [data-testid="clear-canvas-button"] {
   [data-testid="clear-canvas-button"] {
     display: none;
     display: none;

+ 43 - 2
src/excalidraw-app/index.tsx

@@ -21,7 +21,12 @@ import {
 } from "../element/types";
 } from "../element/types";
 import { useCallbackRefState } from "../hooks/useCallbackRefState";
 import { useCallbackRefState } from "../hooks/useCallbackRefState";
 import { t } from "../i18n";
 import { t } from "../i18n";
-import { Excalidraw, defaultLang, Footer } from "../packages/excalidraw/index";
+import {
+  Excalidraw,
+  defaultLang,
+  Footer,
+  MainMenu,
+} from "../packages/excalidraw/index";
 import {
 import {
   AppState,
   AppState,
   LibraryItems,
   LibraryItems,
@@ -79,8 +84,11 @@ import { reconcileElements } from "./collab/reconciliation";
 import { parseLibraryTokensFromUrl, useHandleLibrary } from "../data/library";
 import { parseLibraryTokensFromUrl, useHandleLibrary } from "../data/library";
 import { EncryptedIcon } from "./components/EncryptedIcon";
 import { EncryptedIcon } from "./components/EncryptedIcon";
 import { ExcalidrawPlusAppLink } from "./components/ExcalidrawPlusAppLink";
 import { ExcalidrawPlusAppLink } from "./components/ExcalidrawPlusAppLink";
+import { LanguageList } from "./components/LanguageList";
+import { PlusPromoIcon } from "../components/icons";
 
 
 polyfill();
 polyfill();
+
 window.EXCALIDRAW_THROTTLE_RENDER = true;
 window.EXCALIDRAW_THROTTLE_RENDER = true;
 
 
 const languageDetector = new LanguageDetector();
 const languageDetector = new LanguageDetector();
@@ -229,7 +237,6 @@ export const langCodeAtom = atom(
 const ExcalidrawWrapper = () => {
 const ExcalidrawWrapper = () => {
   const [errorMessage, setErrorMessage] = useState("");
   const [errorMessage, setErrorMessage] = useState("");
   const [langCode, setLangCode] = useAtom(langCodeAtom);
   const [langCode, setLangCode] = useAtom(langCodeAtom);
-
   // initial state
   // initial state
   // ---------------------------------------------------------------------------
   // ---------------------------------------------------------------------------
 
 
@@ -594,6 +601,39 @@ const ExcalidrawWrapper = () => {
     localStorage.setItem(STORAGE_KEYS.LOCAL_STORAGE_LIBRARY, serializedItems);
     localStorage.setItem(STORAGE_KEYS.LOCAL_STORAGE_LIBRARY, serializedItems);
   };
   };
 
 
+  const renderMenu = () => {
+    return (
+      <MainMenu>
+        <MainMenu.DefaultItems.LoadScene />
+        <MainMenu.DefaultItems.SaveToActiveFile />
+        <MainMenu.DefaultItems.Export />
+        <MainMenu.DefaultItems.SaveAsImage />
+        <MainMenu.DefaultItems.LiveCollaboration
+          isCollaborating={isCollaborating}
+          onSelect={() => setCollabDialogShown(true)}
+        />
+
+        <MainMenu.DefaultItems.Help />
+        <MainMenu.DefaultItems.ClearCanvas />
+        <MainMenu.Separator />
+        <MainMenu.ItemLink
+          icon={PlusPromoIcon}
+          href="https://plus.excalidraw.com/plus?utm_source=excalidraw&utm_medium=app&utm_content=hamburger"
+          className="ExcalidrawPlus"
+        >
+          Excalidraw+
+        </MainMenu.ItemLink>
+        <MainMenu.DefaultItems.Socials />
+        <MainMenu.Separator />
+        <MainMenu.DefaultItems.ToggleTheme />
+        <MainMenu.ItemCustom>
+          <LanguageList style={{ width: "100%" }} />
+        </MainMenu.ItemCustom>
+        <MainMenu.DefaultItems.ChangeCanvasBackground />
+      </MainMenu>
+    );
+  };
+
   return (
   return (
     <div
     <div
       style={{ height: "100%" }}
       style={{ height: "100%" }}
@@ -640,6 +680,7 @@ const ExcalidrawWrapper = () => {
         autoFocus={true}
         autoFocus={true}
         theme={theme}
         theme={theme}
       >
       >
+        {renderMenu()}
         <Footer>
         <Footer>
           <div style={{ display: "flex", gap: ".5rem", alignItems: "center" }}>
           <div style={{ display: "flex", gap: ".5rem", alignItems: "center" }}>
             <ExcalidrawPlusAppLink />
             <ExcalidrawPlusAppLink />

+ 2 - 0
src/keys.ts

@@ -29,6 +29,8 @@ export const KEYS = {
   ARROW_LEFT: "ArrowLeft",
   ARROW_LEFT: "ArrowLeft",
   ARROW_RIGHT: "ArrowRight",
   ARROW_RIGHT: "ArrowRight",
   ARROW_UP: "ArrowUp",
   ARROW_UP: "ArrowUp",
+  PAGE_UP: "PageUp",
+  PAGE_DOWN: "PageDown",
   BACKSPACE: "Backspace",
   BACKSPACE: "Backspace",
   ALT: "Alt",
   ALT: "Alt",
   CTRL_OR_CMD: isDarwin ? "metaKey" : "ctrlKey",
   CTRL_OR_CMD: isDarwin ? "metaKey" : "ctrlKey",

+ 18 - 7
src/locales/ar-SA.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "لصق",
     "paste": "لصق",
+    "pasteAsPlaintext": "",
     "pasteCharts": "لصق الرسوم البيانية",
     "pasteCharts": "لصق الرسوم البيانية",
     "selectAll": "تحديد الكل",
     "selectAll": "تحديد الكل",
     "multiSelect": "إضافة عنصر للتحديد",
     "multiSelect": "إضافة عنصر للتحديد",
@@ -71,7 +72,7 @@
     "layers": "الطبقات",
     "layers": "الطبقات",
     "actions": "الإجراءات",
     "actions": "الإجراءات",
     "language": "اللغة",
     "language": "اللغة",
-    "liveCollaboration": "بدء المشاركة الحية",
+    "liveCollaboration": "",
     "duplicateSelection": "تكرار",
     "duplicateSelection": "تكرار",
     "untitled": "غير معنون",
     "untitled": "غير معنون",
     "name": "الاسم",
     "name": "الاسم",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "إعادة تعيين اللوحة",
     "clearReset": "إعادة تعيين اللوحة",
     "exportJSON": "صدر الملف",
     "exportJSON": "صدر الملف",
-    "exportImage": "إحفظ كصورة",
-    "export": "تصدير",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "تصدير بصيغة PNG",
     "exportToPng": "تصدير بصيغة PNG",
     "exportToSvg": "تصدير بصيغة SVG",
     "exportToSvg": "تصدير بصيغة SVG",
     "copyToClipboard": "نسخ إلى الحافظة",
     "copyToClipboard": "نسخ إلى الحافظة",
@@ -144,7 +145,7 @@
     "scale": "مقاس",
     "scale": "مقاس",
     "save": "احفظ للملف الحالي",
     "save": "احفظ للملف الحالي",
     "saveAs": "حفظ كـ",
     "saveAs": "حفظ كـ",
-    "load": "تحميل",
+    "load": "",
     "getShareableLink": "احصل على رابط المشاركة",
     "getShareableLink": "احصل على رابط المشاركة",
     "close": "غلق",
     "close": "غلق",
     "selectLanguage": "اختر اللغة",
     "selectLanguage": "اختر اللغة",
@@ -235,7 +236,7 @@
     "resize": "يمكنك تقييد النسب بالضغط على SHIFT أثناء تغيير الحجم،\nاضغط على ALT لتغيير الحجم من المركز",
     "resize": "يمكنك تقييد النسب بالضغط على SHIFT أثناء تغيير الحجم،\nاضغط على ALT لتغيير الحجم من المركز",
     "resizeImage": "يمكنك تغيير الحجم بحرية بالضغط بأستمرار على SHIFT،\nاضغط بأستمرار على ALT أيضا لتغيير الحجم من المركز",
     "resizeImage": "يمكنك تغيير الحجم بحرية بالضغط بأستمرار على SHIFT،\nاضغط بأستمرار على ALT أيضا لتغيير الحجم من المركز",
     "rotate": "يمكنك تقييد الزوايا من خلال الضغط على SHIFT أثناء الدوران",
     "rotate": "يمكنك تقييد الزوايا من خلال الضغط على SHIFT أثناء الدوران",
-    "lineEditor_info": "انقر نقراً مزدوجاً أو اضغط Enter لتعديل النقاط",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "",
     "lineEditor_pointSelected": "",
     "lineEditor_nothingSelected": "",
     "lineEditor_nothingSelected": "",
     "placeImage": "",
     "placeImage": "",
@@ -310,7 +311,9 @@
     "view": "عرض",
     "view": "عرض",
     "zoomToFit": "تكبير للملائمة",
     "zoomToFit": "تكبير للملائمة",
     "zoomToSelection": "تكبير للعنصر المحدد",
     "zoomToSelection": "تكبير للعنصر المحدد",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "مسح اللوحة"
     "title": "مسح اللوحة"
@@ -391,7 +394,8 @@
     "fileSaved": "تم حفظ الملف.",
     "fileSaved": "تم حفظ الملف.",
     "fileSavedToFilename": "حفظ باسم {filename}",
     "fileSavedToFilename": "حفظ باسم {filename}",
     "canvas": "لوحة الرسم",
     "canvas": "لوحة الرسم",
-    "selection": "العنصر المحدد"
+    "selection": "العنصر المحدد",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "أبيض",
     "ffffff": "أبيض",
@@ -439,5 +443,12 @@
     "5c940d": "ليموني 9",
     "5c940d": "ليموني 9",
     "e67700": "أصفر 9",
     "e67700": "أصفر 9",
     "d9480f": "برتقالي 9"
     "d9480f": "برتقالي 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 17 - 6
src/locales/bg-BG.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Постави",
     "paste": "Постави",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Постави графики",
     "pasteCharts": "Постави графики",
     "selectAll": "Маркирай всичко",
     "selectAll": "Маркирай всичко",
     "multiSelect": "Добави елемент към селекция",
     "multiSelect": "Добави елемент към селекция",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Нулиране на платно",
     "clearReset": "Нулиране на платно",
     "exportJSON": "",
     "exportJSON": "",
-    "exportImage": "Запиши като изображение",
-    "export": "Експортиране",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "Изнасяне в PNG",
     "exportToPng": "Изнасяне в PNG",
     "exportToSvg": "Изнасяне в SVG",
     "exportToSvg": "Изнасяне в SVG",
     "copyToClipboard": "Копиране в клипборда",
     "copyToClipboard": "Копиране в клипборда",
@@ -144,7 +145,7 @@
     "scale": "Мащаб",
     "scale": "Мащаб",
     "save": "",
     "save": "",
     "saveAs": "Запиши като",
     "saveAs": "Запиши като",
-    "load": "Зареждане",
+    "load": "",
     "getShareableLink": "Получаване на връзка за споделяне",
     "getShareableLink": "Получаване на връзка за споделяне",
     "close": "Затвори",
     "close": "Затвори",
     "selectLanguage": "Избор на език",
     "selectLanguage": "Избор на език",
@@ -235,7 +236,7 @@
     "resize": "Може да ограничите при преоразмеряване като задържите SHIFT,\nзадръжте ALT за преоразмерите през центъра",
     "resize": "Може да ограничите при преоразмеряване като задържите SHIFT,\nзадръжте ALT за преоразмерите през центъра",
     "resizeImage": "",
     "resizeImage": "",
     "rotate": "Можете да ограничите ъглите, като държите SHIFT, докато се въртите",
     "rotate": "Можете да ограничите ъглите, като държите SHIFT, докато се въртите",
-    "lineEditor_info": "Кликнете два пъти или натиснете Enter за да промените точките",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Натиснете Delete за да изтриете точка(и), CtrlOrCmd+D за дуплициране, или извлачете за да преместите",
     "lineEditor_pointSelected": "Натиснете Delete за да изтриете точка(и), CtrlOrCmd+D за дуплициране, или извлачете за да преместите",
     "lineEditor_nothingSelected": "",
     "lineEditor_nothingSelected": "",
     "placeImage": "",
     "placeImage": "",
@@ -310,7 +311,9 @@
     "view": "Преглед",
     "view": "Преглед",
     "zoomToFit": "Приближи докато се виждат всички елементи",
     "zoomToFit": "Приближи докато се виждат всички елементи",
     "zoomToSelection": "Приближи селекцията",
     "zoomToSelection": "Приближи селекцията",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": ""
     "title": ""
@@ -391,7 +394,8 @@
     "fileSaved": "",
     "fileSaved": "",
     "fileSavedToFilename": "",
     "fileSavedToFilename": "",
     "canvas": "",
     "canvas": "",
-    "selection": ""
+    "selection": "",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "",
     "ffffff": "",
@@ -439,5 +443,12 @@
     "5c940d": "",
     "5c940d": "",
     "e67700": "",
     "e67700": "",
     "d9480f": ""
     "d9480f": ""
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/bn-BD.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "পেস্ট করুন",
     "paste": "পেস্ট করুন",
+    "pasteAsPlaintext": "",
     "pasteCharts": "চার্ট পেস্ট করুন",
     "pasteCharts": "চার্ট পেস্ট করুন",
     "selectAll": "সবটা সিলেক্ট করুন",
     "selectAll": "সবটা সিলেক্ট করুন",
     "multiSelect": "একাধিক সিলেক্ট করুন",
     "multiSelect": "একাধিক সিলেক্ট করুন",
@@ -71,7 +72,7 @@
     "layers": "মাত্রা",
     "layers": "মাত্রা",
     "actions": "ক্রিয়া",
     "actions": "ক্রিয়া",
     "language": "ভাষা",
     "language": "ভাষা",
-    "liveCollaboration": "যুগ্ম কার্য",
+    "liveCollaboration": "",
     "duplicateSelection": "সদৃশ সিলেক্ট",
     "duplicateSelection": "সদৃশ সিলেক্ট",
     "untitled": "অনামী",
     "untitled": "অনামী",
     "name": "নাম",
     "name": "নাম",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "ক্যানভাস সাফ করুন",
     "clearReset": "ক্যানভাস সাফ করুন",
     "exportJSON": "জেসন নিবদ্ধ করুন",
     "exportJSON": "জেসন নিবদ্ধ করুন",
-    "exportImage": "চিত্র নিবদ্ধ করুন",
-    "export": "নিবদ্ধ",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "পীএনজী ছবির মতন নিবদ্ধ করুন",
     "exportToPng": "পীএনজী ছবির মতন নিবদ্ধ করুন",
     "exportToSvg": "এসভীজী ছবির মতন নিবদ্ধ করুন",
     "exportToSvg": "এসভীজী ছবির মতন নিবদ্ধ করুন",
     "copyToClipboard": "ক্লিপবোর্ডে কপি করুন",
     "copyToClipboard": "ক্লিপবোর্ডে কপি করুন",
@@ -144,7 +145,7 @@
     "scale": "মাপ",
     "scale": "মাপ",
     "save": "জমা করুন",
     "save": "জমা করুন",
     "saveAs": "অন্যভাবে জমা করুন",
     "saveAs": "অন্যভাবে জমা করুন",
-    "load": "লোড করুন",
+    "load": "",
     "getShareableLink": "ভাগযোগ্য লিঙ্ক পান",
     "getShareableLink": "ভাগযোগ্য লিঙ্ক পান",
     "close": "বন্ধ করুন",
     "close": "বন্ধ করুন",
     "selectLanguage": "ভাষা চিহ্নিত করুন",
     "selectLanguage": "ভাষা চিহ্নিত করুন",
@@ -214,7 +215,7 @@
     "text": "লেখা",
     "text": "লেখা",
     "library": "সংগ্রহ",
     "library": "সংগ্রহ",
     "lock": "আঁকার পরে নির্বাচিত টুল সক্রিয় রাখুন",
     "lock": "আঁকার পরে নির্বাচিত টুল সক্রিয় রাখুন",
-    "penMode": "পিঞ্চ-জুম প্রতিরোধ করুন এবং শুধুমাত্র কলম থেকে ইনপুট গ্রহণ করুন",
+    "penMode": "",
     "link": "একটি নির্বাচিত আকৃতির জন্য লিঙ্ক যোগ বা আপডেট করুন",
     "link": "একটি নির্বাচিত আকৃতির জন্য লিঙ্ক যোগ বা আপডেট করুন",
     "eraser": "ঝাড়ন"
     "eraser": "ঝাড়ন"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "আপনি আকার পরিবর্তন করার সময় শিফ্ট ধরে রেখে অনুপাতকে সীমাবদ্ধ করতে পারেন,\nকেন্দ্র থেকে আকার পরিবর্তন করতে অল্ট ধরে রাখুন",
     "resize": "আপনি আকার পরিবর্তন করার সময় শিফ্ট ধরে রেখে অনুপাতকে সীমাবদ্ধ করতে পারেন,\nকেন্দ্র থেকে আকার পরিবর্তন করতে অল্ট ধরে রাখুন",
     "resizeImage": "আপনি শিফ্ট ধরে রেখে অবাধে আকার পরিবর্তন করতে পারেন, কেন্দ্র থেকে আকার পরিবর্তন করতে অল্ট ধরুন",
     "resizeImage": "আপনি শিফ্ট ধরে রেখে অবাধে আকার পরিবর্তন করতে পারেন, কেন্দ্র থেকে আকার পরিবর্তন করতে অল্ট ধরুন",
     "rotate": "আপনি ঘোরানোর সময় শিফ্ট ধরে রেখে কোণগুলিকে সীমাবদ্ধ করতে পারেন",
     "rotate": "আপনি ঘোরানোর সময় শিফ্ট ধরে রেখে কোণগুলিকে সীমাবদ্ধ করতে পারেন",
-    "lineEditor_info": "পয়েন্ট সম্পাদনা করতে ডাবল-ক্লিক করুন বা এন্টার টিপুন",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "বিন্দু(গুলি) মুছতে ডিলিট টিপুন, কন্ট্রোল/কম্যান্ড যোগে ডি টিপুন নকল করতে অথবা সরানোর জন্য টানুন",
     "lineEditor_pointSelected": "বিন্দু(গুলি) মুছতে ডিলিট টিপুন, কন্ট্রোল/কম্যান্ড যোগে ডি টিপুন নকল করতে অথবা সরানোর জন্য টানুন",
     "lineEditor_nothingSelected": "সম্পাদনা করার জন্য একটি বিন্দু নির্বাচন করুন (একাধিক নির্বাচন করতে শিফ্ট ধরে রাখুন),\nঅথবা অল্ট ধরে রাখুন এবং নতুন বিন্দু যোগ করতে ক্লিক করুন",
     "lineEditor_nothingSelected": "সম্পাদনা করার জন্য একটি বিন্দু নির্বাচন করুন (একাধিক নির্বাচন করতে শিফ্ট ধরে রাখুন),\nঅথবা অল্ট ধরে রাখুন এবং নতুন বিন্দু যোগ করতে ক্লিক করুন",
     "placeImage": "ছবিটি স্থাপন করতে ক্লিক করুন, অথবা নিজে আকার সেট করতে ক্লিক করুন এবং টেনে আনুন",
     "placeImage": "ছবিটি স্থাপন করতে ক্লিক করুন, অথবা নিজে আকার সেট করতে ক্লিক করুন এবং টেনে আনুন",
@@ -310,7 +311,9 @@
     "view": "",
     "view": "",
     "zoomToFit": "",
     "zoomToFit": "",
     "zoomToSelection": "",
     "zoomToSelection": "",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": ""
     "title": ""
@@ -391,7 +394,8 @@
     "fileSaved": "",
     "fileSaved": "",
     "fileSavedToFilename": "",
     "fileSavedToFilename": "",
     "canvas": "",
     "canvas": "",
-    "selection": "বাছাই"
+    "selection": "বাছাই",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "সাদা",
     "ffffff": "সাদা",
@@ -439,5 +443,12 @@
     "5c940d": "",
     "5c940d": "",
     "e67700": "",
     "e67700": "",
     "d9480f": ""
     "d9480f": ""
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/ca-ES.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Enganxa",
     "paste": "Enganxa",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Enganxa els diagrames",
     "pasteCharts": "Enganxa els diagrames",
     "selectAll": "Selecciona-ho tot",
     "selectAll": "Selecciona-ho tot",
     "multiSelect": "Afegeix un element a la selecció",
     "multiSelect": "Afegeix un element a la selecció",
@@ -71,7 +72,7 @@
     "layers": "Capes",
     "layers": "Capes",
     "actions": "Accions",
     "actions": "Accions",
     "language": "Llengua",
     "language": "Llengua",
-    "liveCollaboration": "Col·laboració en directe",
+    "liveCollaboration": "",
     "duplicateSelection": "Duplica",
     "duplicateSelection": "Duplica",
     "untitled": "Sense títol",
     "untitled": "Sense títol",
     "name": "Nom",
     "name": "Nom",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Neteja el llenç",
     "clearReset": "Neteja el llenç",
     "exportJSON": "Exporta a un fitxer",
     "exportJSON": "Exporta a un fitxer",
-    "exportImage": "Desa com a imatge",
-    "export": "Exporta",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "Exporta a PNG",
     "exportToPng": "Exporta a PNG",
     "exportToSvg": "Exporta a SNG",
     "exportToSvg": "Exporta a SNG",
     "copyToClipboard": "Copia al porta-retalls",
     "copyToClipboard": "Copia al porta-retalls",
@@ -144,7 +145,7 @@
     "scale": "Escala",
     "scale": "Escala",
     "save": "Desa al fitxer actual",
     "save": "Desa al fitxer actual",
     "saveAs": "Anomena i desa",
     "saveAs": "Anomena i desa",
-    "load": "Carrega",
+    "load": "",
     "getShareableLink": "Obté l'enllaç per a compartir",
     "getShareableLink": "Obté l'enllaç per a compartir",
     "close": "Tanca",
     "close": "Tanca",
     "selectLanguage": "Trieu la llengua",
     "selectLanguage": "Trieu la llengua",
@@ -214,7 +215,7 @@
     "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",
-    "penMode": "Evita el zoom i accepta solament el dibuix lliure amb bolígraf",
+    "penMode": "",
     "link": "Afegeix / actualitza l'enllaç per a la forma seleccionada",
     "link": "Afegeix / actualitza l'enllaç per a la forma seleccionada",
     "eraser": "Esborrador"
     "eraser": "Esborrador"
   },
   },
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Podeu redimensionar lliurement prement MAJÚSCULA;\nper a redimensionar des del centre, premeu ALT",
     "resizeImage": "Podeu redimensionar lliurement prement MAJÚSCULA;\nper a redimensionar des del centre, premeu 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": "",
     "lineEditor_pointSelected": "Premeu Suprimir per a eliminar el(s) punt(s), CtrlOrCmd+D per a duplicar-lo, o arrossegueu-lo per a moure'l",
     "lineEditor_pointSelected": "Premeu Suprimir per a eliminar el(s) punt(s), CtrlOrCmd+D per a duplicar-lo, o arrossegueu-lo per a moure'l",
     "lineEditor_nothingSelected": "Seleccioneu un punt per a editar-lo (premeu SHIFT si voleu\nselecció múltiple), o manteniu Alt i feu clic per a afegir més punts",
     "lineEditor_nothingSelected": "Seleccioneu un punt per a editar-lo (premeu SHIFT si voleu\nselecció múltiple), o manteniu Alt i feu clic per a afegir més punts",
     "placeImage": "Feu clic per a col·locar la imatge o clic i arrossegar per a establir-ne la mida manualment",
     "placeImage": "Feu clic per a col·locar la imatge o clic i arrossegar per a establir-ne la mida manualment",
@@ -310,7 +311,9 @@
     "view": "Visualització",
     "view": "Visualització",
     "zoomToFit": "Zoom per veure tots els elements",
     "zoomToFit": "Zoom per veure tots els elements",
     "zoomToSelection": "Zoom per veure la selecció",
     "zoomToSelection": "Zoom per veure la selecció",
-    "toggleElementLock": "Blocar/desblocar la selecció"
+    "toggleElementLock": "Blocar/desblocar la selecció",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Neteja el llenç"
     "title": "Neteja el llenç"
@@ -391,7 +394,8 @@
     "fileSaved": "S'ha desat el fitxer.",
     "fileSaved": "S'ha desat el fitxer.",
     "fileSavedToFilename": "S'ha desat a {filename}",
     "fileSavedToFilename": "S'ha desat a {filename}",
     "canvas": "el llenç",
     "canvas": "el llenç",
-    "selection": "la selecció"
+    "selection": "la selecció",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Blanc",
     "ffffff": "Blanc",
@@ -439,5 +443,12 @@
     "5c940d": "Llima 9",
     "5c940d": "Llima 9",
     "e67700": "Groc 9",
     "e67700": "Groc 9",
     "d9480f": "Taronja 9"
     "d9480f": "Taronja 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 61 - 50
src/locales/cs-CZ.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Vložit",
     "paste": "Vložit",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Vložit grafy",
     "pasteCharts": "Vložit grafy",
     "selectAll": "Vybrat vše",
     "selectAll": "Vybrat vše",
     "multiSelect": "Přidat prvek do výběru",
     "multiSelect": "Přidat prvek do výběru",
@@ -60,18 +61,18 @@
     "center": "Na střed",
     "center": "Na střed",
     "right": "Vpravo",
     "right": "Vpravo",
     "extraBold": "Extra tlustý",
     "extraBold": "Extra tlustý",
-    "architect": "",
-    "artist": "",
+    "architect": "Architekt",
+    "artist": "Umělec",
     "cartoonist": "",
     "cartoonist": "",
     "fileTitle": "Název souboru",
     "fileTitle": "Název souboru",
     "colorPicker": "Výběr barvy",
     "colorPicker": "Výběr barvy",
-    "canvasColors": "",
+    "canvasColors": "Použito na plátně",
     "canvasBackground": "Pozadí plátna",
     "canvasBackground": "Pozadí plátna",
-    "drawingCanvas": "",
+    "drawingCanvas": "Kreslicí plátno",
     "layers": "Vrstvy",
     "layers": "Vrstvy",
     "actions": "Akce",
     "actions": "Akce",
     "language": "Jazyk",
     "language": "Jazyk",
-    "liveCollaboration": "Živá spolupráce",
+    "liveCollaboration": "Živá spolupráce...",
     "duplicateSelection": "Duplikovat",
     "duplicateSelection": "Duplikovat",
     "untitled": "Bez názvu",
     "untitled": "Bez názvu",
     "name": "Název",
     "name": "Název",
@@ -98,57 +99,57 @@
     "flipHorizontal": "Převrátit vodorovně",
     "flipHorizontal": "Převrátit vodorovně",
     "flipVertical": "Převrátit svisle",
     "flipVertical": "Převrátit svisle",
     "viewMode": "Náhled",
     "viewMode": "Náhled",
-    "toggleExportColorScheme": "",
+    "toggleExportColorScheme": "Přepnout exportování barevného schématu",
     "share": "Sdílet",
     "share": "Sdílet",
-    "showStroke": "",
-    "showBackground": "",
+    "showStroke": "Zobrazit výběr barvy",
+    "showBackground": "Zobrazit výběr barev pozadí",
     "toggleTheme": "Přepnout tmavý řežim",
     "toggleTheme": "Přepnout tmavý řežim",
-    "personalLib": "",
-    "excalidrawLib": "",
-    "decreaseFontSize": "",
-    "increaseFontSize": "",
-    "unbindText": "",
-    "bindText": "",
+    "personalLib": "Osobní knihovna",
+    "excalidrawLib": "Exkalidraw knihovna",
+    "decreaseFontSize": "Zmenšit písmo",
+    "increaseFontSize": "Zvětšit písmo",
+    "unbindText": "Zrušit vazbu textu",
+    "bindText": "Vázat text s kontejnerem",
     "link": {
     "link": {
-      "edit": "",
-      "create": "",
-      "label": ""
+      "edit": "Upravit odkaz",
+      "create": "Vytvořit odkaz",
+      "label": "Odkaz"
     },
     },
     "lineEditor": {
     "lineEditor": {
-      "edit": "",
-      "exit": ""
+      "edit": "Upravit čáru",
+      "exit": "Ukončit editor řádků"
     },
     },
     "elementLock": {
     "elementLock": {
-      "lock": "",
-      "unlock": "",
-      "lockAll": "",
-      "unlockAll": ""
+      "lock": "Uzamknout",
+      "unlock": "Odemknout",
+      "lockAll": "Uzamknout vše",
+      "unlockAll": "Odemknout vše"
     },
     },
-    "statusPublished": "",
-    "sidebarLock": ""
+    "statusPublished": "Zveřejněno",
+    "sidebarLock": "Ponechat postranní panel otevřený"
   },
   },
   "library": {
   "library": {
-    "noItems": "",
-    "hint_emptyLibrary": "",
-    "hint_emptyPrivateLibrary": ""
+    "noItems": "Dosud neexistují žádné položky...",
+    "hint_emptyLibrary": "Vyberte položku na plátně a přidejte ji sem nebo nainstalujte knihovnu z veřejného úložiště níže.",
+    "hint_emptyPrivateLibrary": "Vyberte položku na plátně a přidejte ji sem."
   },
   },
   "buttons": {
   "buttons": {
-    "clearReset": "",
-    "exportJSON": "",
-    "exportImage": "",
-    "export": "Exportovat",
+    "clearReset": "Resetovat plátno",
+    "exportJSON": "Exportovat do souboru",
+    "exportImage": "Exportovat obrázek...",
+    "export": "Uložit jako...",
     "exportToPng": "Exportovat do PNG",
     "exportToPng": "Exportovat do PNG",
     "exportToSvg": "Exportovat do SVG",
     "exportToSvg": "Exportovat do SVG",
     "copyToClipboard": "Kopírovat do schránky",
     "copyToClipboard": "Kopírovat do schránky",
     "copyPngToClipboard": "Kopírovat PNG do schránky",
     "copyPngToClipboard": "Kopírovat PNG do schránky",
     "scale": "Měřítko",
     "scale": "Měřítko",
-    "save": "",
+    "save": "Uložit do aktuálního souboru",
     "saveAs": "Uložit jako",
     "saveAs": "Uložit jako",
-    "load": "Nahrát",
+    "load": "Otevřít",
     "getShareableLink": "Získat odkaz pro sdílení",
     "getShareableLink": "Získat odkaz pro sdílení",
     "close": "Zavřít",
     "close": "Zavřít",
     "selectLanguage": "Zvolit jazyk",
     "selectLanguage": "Zvolit jazyk",
-    "scrollBackToContent": "",
+    "scrollBackToContent": "Přejít zpět na obsah",
     "zoomIn": "Přiblížit",
     "zoomIn": "Přiblížit",
     "zoomOut": "Oddálit",
     "zoomOut": "Oddálit",
     "resetZoom": "Resetovat přiblížení",
     "resetZoom": "Resetovat přiblížení",
@@ -157,7 +158,7 @@
     "edit": "Upravit",
     "edit": "Upravit",
     "undo": "Zpět",
     "undo": "Zpět",
     "redo": "Znovu",
     "redo": "Znovu",
-    "resetLibrary": "",
+    "resetLibrary": "Obnovit knihovnu",
     "createNewRoom": "Vytvořit novou místnost",
     "createNewRoom": "Vytvořit novou místnost",
     "fullScreen": "Celá obrazovka",
     "fullScreen": "Celá obrazovka",
     "darkMode": "Tmavý režim",
     "darkMode": "Tmavý režim",
@@ -176,17 +177,17 @@
     "couldNotCreateShareableLink": "Nepodařilo se vytvořit sdílitelný odkaz.",
     "couldNotCreateShareableLink": "Nepodařilo se vytvořit sdílitelný odkaz.",
     "couldNotCreateShareableLinkTooBig": "Nepodařilo se vytvořit sdílený odkaz: scéna je příliš velká",
     "couldNotCreateShareableLinkTooBig": "Nepodařilo se vytvořit sdílený odkaz: scéna je příliš velká",
     "couldNotLoadInvalidFile": "Nepodařilo se načíst neplatný soubor",
     "couldNotLoadInvalidFile": "Nepodařilo se načíst neplatný soubor",
-    "importBackendFailed": "",
-    "cannotExportEmptyCanvas": "",
-    "couldNotCopyToClipboard": "",
-    "decryptFailed": "",
-    "uploadedSecurly": "",
-    "loadSceneOverridePrompt": "",
+    "importBackendFailed": "Import z backendu se nezdařil.",
+    "cannotExportEmptyCanvas": "Nelze exportovat prázdné plátno.",
+    "couldNotCopyToClipboard": "Nelze zkopírovat do schránky.",
+    "decryptFailed": "Nelze dešifrovat data.",
+    "uploadedSecurly": "Nahrávání je zabezpečeno koncovým šifrováním, což znamená, že server Excalidraw ani třetí strany nemohou obsah přečíst.",
+    "loadSceneOverridePrompt": "Načítání externího výkresu nahradí váš existující obsah. Přejete si pokračovat?",
     "collabStopOverridePrompt": "",
     "collabStopOverridePrompt": "",
-    "errorAddingToLibrary": "",
-    "errorRemovingFromLibrary": "",
-    "confirmAddLibrary": "",
-    "imageDoesNotContainScene": "",
+    "errorAddingToLibrary": "Položku nelze přidat do knihovny",
+    "errorRemovingFromLibrary": "Položku nelze odstranit z knihovny",
+    "confirmAddLibrary": "Tímto přidáte {{numShapes}} tvarů do tvé knihovny. Jste si jisti?",
+    "imageDoesNotContainScene": "Zdá se, že tento obrázek neobsahuje žádná data o scéně. Zapnuli jste při exportu vkládání scény?",
     "cannotRestoreFromImage": "",
     "cannotRestoreFromImage": "",
     "invalidSceneUrl": "",
     "invalidSceneUrl": "",
     "resetLibrary": "",
     "resetLibrary": "",
@@ -255,8 +256,8 @@
     "clearCanvasMessage": "",
     "clearCanvasMessage": "",
     "clearCanvasMessage_button": "",
     "clearCanvasMessage_button": "",
     "clearCanvasCaveat": "",
     "clearCanvasCaveat": "",
-    "trackedToSentry_pre": "",
-    "trackedToSentry_post": "",
+    "trackedToSentry_pre": "Chyba identifikátoru ",
+    "trackedToSentry_post": " byl zaznamenán v našem systému.",
     "openIssueMessage_pre": "",
     "openIssueMessage_pre": "",
     "openIssueMessage_button": "",
     "openIssueMessage_button": "",
     "openIssueMessage_post": "",
     "openIssueMessage_post": "",
@@ -310,7 +311,9 @@
     "view": "Zobrazení",
     "view": "Zobrazení",
     "zoomToFit": "Přiblížit na zobrazení všech prvků",
     "zoomToFit": "Přiblížit na zobrazení všech prvků",
     "zoomToSelection": "Přiblížit na výběr",
     "zoomToSelection": "Přiblížit na výběr",
-    "toggleElementLock": "Zamknout/odemknout výběr"
+    "toggleElementLock": "Zamknout/odemknout výběr",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Vymazat plátno"
     "title": "Vymazat plátno"
@@ -391,7 +394,8 @@
     "fileSaved": "Soubor byl uložen.",
     "fileSaved": "Soubor byl uložen.",
     "fileSavedToFilename": "Uloženo do {filename}",
     "fileSavedToFilename": "Uloženo do {filename}",
     "canvas": "plátno",
     "canvas": "plátno",
-    "selection": "výběr"
+    "selection": "výběr",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Bílá",
     "ffffff": "Bílá",
@@ -439,5 +443,12 @@
     "5c940d": "Limetková 9",
     "5c940d": "Limetková 9",
     "e67700": "Žlutá 9",
     "e67700": "Žlutá 9",
     "d9480f": "Oranzova"
     "d9480f": "Oranzova"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 18 - 7
src/locales/da-DK.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Indsæt",
     "paste": "Indsæt",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Indsæt diagrammer",
     "pasteCharts": "Indsæt diagrammer",
     "selectAll": "Marker alle",
     "selectAll": "Marker alle",
     "multiSelect": "Tilføj element til markering",
     "multiSelect": "Tilføj element til markering",
@@ -69,12 +70,12 @@
     "canvasBackground": "Lærredsbaggrund",
     "canvasBackground": "Lærredsbaggrund",
     "drawingCanvas": "Tegnelærred",
     "drawingCanvas": "Tegnelærred",
     "layers": "Lag",
     "layers": "Lag",
-    "actions": "",
+    "actions": "Handlinger",
     "language": "Sprog",
     "language": "Sprog",
-    "liveCollaboration": "Direkte samarbejde",
+    "liveCollaboration": "",
     "duplicateSelection": "",
     "duplicateSelection": "",
-    "untitled": "",
-    "name": "",
+    "untitled": "Unavngivet",
+    "name": "Navn",
     "yourName": "Dit navn",
     "yourName": "Dit navn",
     "madeWithExcalidraw": "Fremstillet med Excalidraw",
     "madeWithExcalidraw": "Fremstillet med Excalidraw",
     "group": "",
     "group": "",
@@ -144,7 +145,7 @@
     "scale": "",
     "scale": "",
     "save": "",
     "save": "",
     "saveAs": "Gem som",
     "saveAs": "Gem som",
-    "load": "Indlæs",
+    "load": "",
     "getShareableLink": "Lav et delbart link",
     "getShareableLink": "Lav et delbart link",
     "close": "Luk",
     "close": "Luk",
     "selectLanguage": "Vælg sprog",
     "selectLanguage": "Vælg sprog",
@@ -310,7 +311,9 @@
     "view": "",
     "view": "",
     "zoomToFit": "",
     "zoomToFit": "",
     "zoomToSelection": "",
     "zoomToSelection": "",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": ""
     "title": ""
@@ -391,7 +394,8 @@
     "fileSaved": "Fil gemt.",
     "fileSaved": "Fil gemt.",
     "fileSavedToFilename": "Gemt som {filename}",
     "fileSavedToFilename": "Gemt som {filename}",
     "canvas": "canvas",
     "canvas": "canvas",
-    "selection": "markering"
+    "selection": "markering",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "",
     "ffffff": "",
@@ -439,5 +443,12 @@
     "5c940d": "",
     "5c940d": "",
     "e67700": "",
     "e67700": "",
     "d9480f": ""
     "d9480f": ""
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/de-DE.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Einfügen",
     "paste": "Einfügen",
+    "pasteAsPlaintext": "Als reinen Text einfügen",
     "pasteCharts": "Diagramme einfügen",
     "pasteCharts": "Diagramme einfügen",
     "selectAll": "Alle auswählen",
     "selectAll": "Alle auswählen",
     "multiSelect": "Element zur Auswahl hinzufügen",
     "multiSelect": "Element zur Auswahl hinzufügen",
@@ -71,7 +72,7 @@
     "layers": "Ebenen",
     "layers": "Ebenen",
     "actions": "Aktionen",
     "actions": "Aktionen",
     "language": "Sprache",
     "language": "Sprache",
-    "liveCollaboration": "Live-Zusammenarbeit",
+    "liveCollaboration": "Live-Zusammenarbeit...",
     "duplicateSelection": "Duplizieren",
     "duplicateSelection": "Duplizieren",
     "untitled": "Unbenannt",
     "untitled": "Unbenannt",
     "name": "Name",
     "name": "Name",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Zeichenfläche löschen & Hintergrundfarbe zurücksetzen",
     "clearReset": "Zeichenfläche löschen & Hintergrundfarbe zurücksetzen",
     "exportJSON": "In Datei exportieren",
     "exportJSON": "In Datei exportieren",
-    "exportImage": "Als Bild speichern",
-    "export": "Exportieren",
+    "exportImage": "Exportiere Bild...",
+    "export": "Speichern als...",
     "exportToPng": "Als PNG exportieren",
     "exportToPng": "Als PNG exportieren",
     "exportToSvg": "Als SVG exportieren",
     "exportToSvg": "Als SVG exportieren",
     "copyToClipboard": "In Zwischenablage kopieren",
     "copyToClipboard": "In Zwischenablage kopieren",
@@ -144,7 +145,7 @@
     "scale": "Skalierung",
     "scale": "Skalierung",
     "save": "In aktueller Datei speichern",
     "save": "In aktueller Datei speichern",
     "saveAs": "Speichern unter",
     "saveAs": "Speichern unter",
-    "load": "Laden",
+    "load": "Öffnen",
     "getShareableLink": "Teilbaren Link erhalten",
     "getShareableLink": "Teilbaren Link erhalten",
     "close": "Schließen",
     "close": "Schließen",
     "selectLanguage": "Sprache auswählen",
     "selectLanguage": "Sprache auswählen",
@@ -214,7 +215,7 @@
     "text": "Text",
     "text": "Text",
     "library": "Bibliothek",
     "library": "Bibliothek",
     "lock": "Ausgewähltes Werkzeug nach Zeichnen aktiv lassen",
     "lock": "Ausgewähltes Werkzeug nach Zeichnen aktiv lassen",
-    "penMode": "Verhindere Pinch-Zoom und akzeptiere Eingabe nur vom Stift",
+    "penMode": "Stift-Modus - Berührung verhindern",
     "link": "Link für ausgewählte Form hinzufügen / aktualisieren",
     "link": "Link für ausgewählte Form hinzufügen / aktualisieren",
     "eraser": "Radierer"
     "eraser": "Radierer"
   },
   },
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Du kannst die Größe frei ändern, indem du SHIFT gedrückt hältst; halte ALT, um die Größe vom Zentrum aus zu ändern",
     "resizeImage": "Du kannst die Größe frei ändern, indem du SHIFT gedrückt hältst; halte ALT, um die Größe vom Zentrum aus zu ändern",
     "rotate": "Du kannst Winkel einschränken, indem du SHIFT während der Drehung gedrückt hältst",
     "rotate": "Du kannst Winkel einschränken, indem du SHIFT während der Drehung gedrückt hältst",
-    "lineEditor_info": "Doppelklicken oder Eingabetaste drücken, um Punkte zu bearbeiten",
+    "lineEditor_info": "CtrlOrCmd halten und Doppelklick oder CtrlOrCmd + Eingabe drücken, um Punkte zu bearbeiten",
     "lineEditor_pointSelected": "Drücke Löschen, um Punkt(e) zu entfernen, CtrlOrCmd+D zum Duplizieren oder ziehe zum Verschieben",
     "lineEditor_pointSelected": "Drücke Löschen, um Punkt(e) zu entfernen, CtrlOrCmd+D zum Duplizieren oder ziehe zum Verschieben",
     "lineEditor_nothingSelected": "Wähle einen zu bearbeitenden Punkt (halte SHIFT gedrückt um mehrere Punkte auszuwählen),\noder halte Alt gedrückt und klicke um neue Punkte hinzuzufügen",
     "lineEditor_nothingSelected": "Wähle einen zu bearbeitenden Punkt (halte SHIFT gedrückt um mehrere Punkte auszuwählen),\noder halte Alt gedrückt und klicke um neue Punkte hinzuzufügen",
     "placeImage": "Klicken, um das Bild zu platzieren oder klicken und ziehen um seine Größe manuell zu setzen",
     "placeImage": "Klicken, um das Bild zu platzieren oder klicken und ziehen um seine Größe manuell zu setzen",
@@ -310,7 +311,9 @@
     "view": "Ansicht",
     "view": "Ansicht",
     "zoomToFit": "Zoomen um alle Elemente einzupassen",
     "zoomToFit": "Zoomen um alle Elemente einzupassen",
     "zoomToSelection": "Auf Auswahl zoomen",
     "zoomToSelection": "Auf Auswahl zoomen",
-    "toggleElementLock": "Auswahl sperren/entsperren"
+    "toggleElementLock": "Auswahl sperren/entsperren",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Zeichenfläche löschen"
     "title": "Zeichenfläche löschen"
@@ -391,7 +394,8 @@
     "fileSaved": "Datei gespeichert.",
     "fileSaved": "Datei gespeichert.",
     "fileSavedToFilename": "Als {filename} gespeichert",
     "fileSavedToFilename": "Als {filename} gespeichert",
     "canvas": "Zeichenfläche",
     "canvas": "Zeichenfläche",
-    "selection": "Auswahl"
+    "selection": "Auswahl",
+    "pasteAsSingleElement": "Verwende {{shortcut}} , um als einzelnes Element\neinzufügen oder in einen existierenden Texteditor einzufügen"
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Weiß",
     "ffffff": "Weiß",
@@ -439,5 +443,12 @@
     "5c940d": "Hellgrün 9",
     "5c940d": "Hellgrün 9",
     "e67700": "Gelb 9",
     "e67700": "Gelb 9",
     "d9480f": "Orange 9"
     "d9480f": "Orange 9"
+  },
+  "welcomeScreen": {
+    "data": "Alle Daten werden lokal in Deinem Browser gespeichert.",
+    "switchToPlusApp": "Möchtest du stattdessen zu Excalidraw+ gehen?",
+    "menuHints": "Exportieren, Einstellungen, Sprachen, ...",
+    "toolbarHints": "Wähle ein Werkzeug & beginne zu zeichnen!",
+    "helpHints": "Kurzbefehle & Hilfe"
   }
   }
 }
 }

+ 18 - 7
src/locales/el-GR.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Επικόλληση",
     "paste": "Επικόλληση",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Επικόλληση γραφημάτων",
     "pasteCharts": "Επικόλληση γραφημάτων",
     "selectAll": "Επιλογή όλων",
     "selectAll": "Επιλογή όλων",
     "multiSelect": "Προσθέστε το στοιχείο στην επιλογή",
     "multiSelect": "Προσθέστε το στοιχείο στην επιλογή",
@@ -71,7 +72,7 @@
     "layers": "Στρώματα",
     "layers": "Στρώματα",
     "actions": "Ενέργειες",
     "actions": "Ενέργειες",
     "language": "Γλώσσα",
     "language": "Γλώσσα",
-    "liveCollaboration": "Ζωντανή συνεργασία",
+    "liveCollaboration": "",
     "duplicateSelection": "Δημιουργία αντιγράφου",
     "duplicateSelection": "Δημιουργία αντιγράφου",
     "untitled": "Χωρίς τίτλο",
     "untitled": "Χωρίς τίτλο",
     "name": "Όνομα",
     "name": "Όνομα",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Επαναφορά του καμβά",
     "clearReset": "Επαναφορά του καμβά",
     "exportJSON": "Εξαγωγή σε αρχείο",
     "exportJSON": "Εξαγωγή σε αρχείο",
-    "exportImage": "Αποθήκευση ως εικόνα",
-    "export": "Εξαγωγή",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "Εξαγωγή σε PNG",
     "exportToPng": "Εξαγωγή σε PNG",
     "exportToSvg": "Εξαγωγή σε SVG",
     "exportToSvg": "Εξαγωγή σε SVG",
     "copyToClipboard": "Αντιγραφή στο πρόχειρο",
     "copyToClipboard": "Αντιγραφή στο πρόχειρο",
@@ -144,7 +145,7 @@
     "scale": "Κλίμακα",
     "scale": "Κλίμακα",
     "save": "Αποθήκευση στο τρέχον αρχείο",
     "save": "Αποθήκευση στο τρέχον αρχείο",
     "saveAs": "Αποθήκευση ως",
     "saveAs": "Αποθήκευση ως",
-    "load": "Άνοιγμα",
+    "load": "",
     "getShareableLink": "Δημόσιος σύνδεσμος",
     "getShareableLink": "Δημόσιος σύνδεσμος",
     "close": "Κλείσιμο",
     "close": "Κλείσιμο",
     "selectLanguage": "Επιλογή γλώσσας",
     "selectLanguage": "Επιλογή γλώσσας",
@@ -235,7 +236,7 @@
     "resize": "Μπορείς να περιορίσεις τις αναλογίες κρατώντας το SHIFT ενώ αλλάζεις μέγεθος,\nκράτησε πατημένο το ALT για αλλαγή μεγέθους από το κέντρο",
     "resize": "Μπορείς να περιορίσεις τις αναλογίες κρατώντας το SHIFT ενώ αλλάζεις μέγεθος,\nκράτησε πατημένο το ALT για αλλαγή μεγέθους από το κέντρο",
     "resizeImage": "Μπορείτε να αλλάξετε το μέγεθος ελεύθερα κρατώντας πατημένο το SHIFT,\nκρατήστε πατημένο το ALT για να αλλάξετε το μέγεθος από το κέντρο",
     "resizeImage": "Μπορείτε να αλλάξετε το μέγεθος ελεύθερα κρατώντας πατημένο το SHIFT,\nκρατήστε πατημένο το ALT για να αλλάξετε το μέγεθος από το κέντρο",
     "rotate": "Μπορείς να περιορίσεις τις γωνίες κρατώντας πατημένο το πλήκτρο SHIFT κατά την περιστροφή",
     "rotate": "Μπορείς να περιορίσεις τις γωνίες κρατώντας πατημένο το πλήκτρο SHIFT κατά την περιστροφή",
-    "lineEditor_info": "Διπλό-κλικ ή πιέστε Enter για να επεξεργαστείτε τα σημεία",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Πατήστε Διαγραφή για αφαίρεση σημείου(ων),\nCtrlOrCmd+D για αντιγραφή, ή σύρετε για μετακίνηση",
     "lineEditor_pointSelected": "Πατήστε Διαγραφή για αφαίρεση σημείου(ων),\nCtrlOrCmd+D για αντιγραφή, ή σύρετε για μετακίνηση",
     "lineEditor_nothingSelected": "Επιλέξτε ένα σημείο για να επεξεργαστείτε (κρατήστε πατημένο το SHIFT για να επιλέξετε πολλαπλά),\nή κρατήστε πατημένο το Alt και κάντε κλικ για να προσθέσετε νέα σημεία",
     "lineEditor_nothingSelected": "Επιλέξτε ένα σημείο για να επεξεργαστείτε (κρατήστε πατημένο το SHIFT για να επιλέξετε πολλαπλά),\nή κρατήστε πατημένο το Alt και κάντε κλικ για να προσθέσετε νέα σημεία",
     "placeImage": "Κάντε κλικ για να τοποθετήσετε την εικόνα ή κάντε κλικ και σύρετε για να ορίσετε το μέγεθός της χειροκίνητα",
     "placeImage": "Κάντε κλικ για να τοποθετήσετε την εικόνα ή κάντε κλικ και σύρετε για να ορίσετε το μέγεθός της χειροκίνητα",
@@ -310,7 +311,9 @@
     "view": "Προβολή",
     "view": "Προβολή",
     "zoomToFit": "Zoom ώστε να χωρέσουν όλα τα στοιχεία",
     "zoomToFit": "Zoom ώστε να χωρέσουν όλα τα στοιχεία",
     "zoomToSelection": "Ζουμ στην επιλογή",
     "zoomToSelection": "Ζουμ στην επιλογή",
-    "toggleElementLock": "Κλείδωμα/Ξεκλείδωμα επιλογής"
+    "toggleElementLock": "Κλείδωμα/Ξεκλείδωμα επιλογής",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Καθαρισμός καμβά"
     "title": "Καθαρισμός καμβά"
@@ -391,7 +394,8 @@
     "fileSaved": "Το αρχείο αποθηκεύτηκε.",
     "fileSaved": "Το αρχείο αποθηκεύτηκε.",
     "fileSavedToFilename": "Αποθηκεύτηκε στο {filename}",
     "fileSavedToFilename": "Αποθηκεύτηκε στο {filename}",
     "canvas": "καμβάς",
     "canvas": "καμβάς",
-    "selection": "επιλογή"
+    "selection": "επιλογή",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Λευκό",
     "ffffff": "Λευκό",
@@ -439,5 +443,12 @@
     "5c940d": "Πρασινοκίτρινο 9",
     "5c940d": "Πρασινοκίτρινο 9",
     "e67700": "Κίτρινο 9",
     "e67700": "Κίτρινο 9",
     "d9480f": "Πορτοκαλί 9"
     "d9480f": "Πορτοκαλί 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 6 - 2
src/locales/en.json

@@ -204,7 +204,9 @@
     "cannotResolveCollabServer": "Couldn't connect to the collab server. Please reload the page and try again.",
     "cannotResolveCollabServer": "Couldn't connect to the collab server. Please reload the page and try again.",
     "importLibraryError": "Couldn't load library",
     "importLibraryError": "Couldn't load library",
     "socketDisconnected": "You've been disconnected from the server",
     "socketDisconnected": "You've been disconnected from the server",
-    "socketConnectionError": "Couldn't connect to the server"
+    "socketConnectionError": "Couldn't connect to the server",
+    "collabSaveFailed": "Couldn't save to the backend database. If problems persist, you should save your file locally to ensure you don't lose your work.",
+    "collabSaveFailed_sizeExceeded": "Couldn't save to the backend database, the canvas seems to be too big. You should save the file locally to ensure you don't lose your work."
   },
   },
   "toolBar": {
   "toolBar": {
     "selection": "Selection",
     "selection": "Selection",
@@ -314,7 +316,9 @@
     "view": "View",
     "view": "View",
     "zoomToFit": "Zoom to fit all elements",
     "zoomToFit": "Zoom to fit all elements",
     "zoomToSelection": "Zoom to selection",
     "zoomToSelection": "Zoom to selection",
-    "toggleElementLock": "Lock/unlock selection"
+    "toggleElementLock": "Lock/unlock selection",
+    "movePageUpDown": "Move page up/down",
+    "movePageLeftRight": "Move page left/right"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Clear canvas"
     "title": "Clear canvas"

+ 27 - 16
src/locales/es-ES.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Pegar",
     "paste": "Pegar",
+    "pasteAsPlaintext": "Pegar como texto sin formato",
     "pasteCharts": "Pegar gráficos",
     "pasteCharts": "Pegar gráficos",
     "selectAll": "Seleccionar todo",
     "selectAll": "Seleccionar todo",
     "multiSelect": "Añadir elemento a la selección",
     "multiSelect": "Añadir elemento a la selección",
@@ -71,7 +72,7 @@
     "layers": "Capas",
     "layers": "Capas",
     "actions": "Acciones",
     "actions": "Acciones",
     "language": "Idioma",
     "language": "Idioma",
-    "liveCollaboration": "Colaboración en directo",
+    "liveCollaboration": "Colaboración en directo...",
     "duplicateSelection": "Duplicar",
     "duplicateSelection": "Duplicar",
     "untitled": "Sin título",
     "untitled": "Sin título",
     "name": "Nombre",
     "name": "Nombre",
@@ -115,8 +116,8 @@
       "label": "Enlace"
       "label": "Enlace"
     },
     },
     "lineEditor": {
     "lineEditor": {
-      "edit": "",
-      "exit": ""
+      "edit": "Editar línea",
+      "exit": "Salir del editor en línea"
     },
     },
     "elementLock": {
     "elementLock": {
       "lock": "Bloquear",
       "lock": "Bloquear",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Limpiar lienzo y reiniciar el color de fondo",
     "clearReset": "Limpiar lienzo y reiniciar el color de fondo",
     "exportJSON": "Exportar a archivo",
     "exportJSON": "Exportar a archivo",
-    "exportImage": "Guardar como imagen",
-    "export": "Exportar",
+    "exportImage": "Exportar imagen...",
+    "export": "Guardar en...",
     "exportToPng": "Exportar a PNG",
     "exportToPng": "Exportar a PNG",
     "exportToSvg": "Exportar a SVG",
     "exportToSvg": "Exportar a SVG",
     "copyToClipboard": "Copiar al portapapeles",
     "copyToClipboard": "Copiar al portapapeles",
@@ -144,7 +145,7 @@
     "scale": "Escalar",
     "scale": "Escalar",
     "save": "Guardar en archivo actual",
     "save": "Guardar en archivo actual",
     "saveAs": "Guardar como",
     "saveAs": "Guardar como",
-    "load": "Cargar",
+    "load": "Abrir",
     "getShareableLink": "Obtener enlace para compartir",
     "getShareableLink": "Obtener enlace para compartir",
     "close": "Cerrar",
     "close": "Cerrar",
     "selectLanguage": "Elegir idioma",
     "selectLanguage": "Elegir idioma",
@@ -214,7 +215,7 @@
     "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",
-    "penMode": "Evitar el zoom de pellizco y aceptar la entrada libre sólo desde el lápiz",
+    "penMode": "Modo Lápiz - previene toque",
     "link": "Añadir/Actualizar enlace para una forma seleccionada",
     "link": "Añadir/Actualizar enlace para una forma seleccionada",
     "eraser": "Borrar"
     "eraser": "Borrar"
   },
   },
@@ -235,10 +236,10 @@
     "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",
     "resizeImage": "Puede redimensionar libremente pulsando SHIFT,\npulse ALT para redimensionar desde el centro",
     "resizeImage": "Puede redimensionar libremente pulsando SHIFT,\npulse ALT para redimensionar desde el centro",
     "rotate": "Puedes restringir los ángulos manteniendo presionado SHIFT mientras giras",
     "rotate": "Puedes restringir los ángulos manteniendo presionado SHIFT mientras giras",
-    "lineEditor_info": "Doble clic o pulse Enter para editar puntos",
+    "lineEditor_info": "Mantenga pulsado CtrlOrCmd y haga doble click o presione CtrlOrCmd + Enter para editar puntos",
     "lineEditor_pointSelected": "Presione Suprimir para eliminar el/los punto(s), CtrlOrCmd+D para duplicarlo, o arrástrelo para moverlo",
     "lineEditor_pointSelected": "Presione Suprimir para eliminar el/los punto(s), CtrlOrCmd+D para duplicarlo, o arrástrelo para moverlo",
-    "lineEditor_nothingSelected": "Seleccione un punto a editar (mantenga MAYÚSCULAS para seleccionar múltiples),\no mantenga pulsado Alt y haga clic para añadir nuevos puntos",
-    "placeImage": "Haga clic para colocar la imagen o haga clic y arrastre para establecer su tamaño manualmente",
+    "lineEditor_nothingSelected": "Seleccione un punto a editar (mantenga MAYÚSCULAS para seleccionar múltiples),\no mantenga pulsado Alt y haga click para añadir nuevos puntos",
+    "placeImage": "Haga clic para colocar la imagen o haga click y arrastre para establecer su tamaño manualmente",
     "publishLibrary": "Publica tu propia biblioteca",
     "publishLibrary": "Publica tu propia biblioteca",
     "bindTextToElement": "Presione Entrar para agregar",
     "bindTextToElement": "Presione Entrar para agregar",
     "deepBoxSelect": "Mantén CtrlOrCmd para seleccionar en profundidad, y para evitar arrastrar",
     "deepBoxSelect": "Mantén CtrlOrCmd para seleccionar en profundidad, y para evitar arrastrar",
@@ -288,7 +289,7 @@
   },
   },
   "helpDialog": {
   "helpDialog": {
     "blog": "Lea nuestro blog",
     "blog": "Lea nuestro blog",
-    "click": "clic",
+    "click": "click",
     "deepSelect": "Selección profunda",
     "deepSelect": "Selección profunda",
     "deepBoxSelect": "Seleccione en profundidad dentro de la caja, y evite arrastrar",
     "deepBoxSelect": "Seleccione en profundidad dentro de la caja, y evite arrastrar",
     "curvedArrow": "Flecha curva",
     "curvedArrow": "Flecha curva",
@@ -301,7 +302,7 @@
     "github": "¿Ha encontrado un problema? Envíelo",
     "github": "¿Ha encontrado un problema? Envíelo",
     "howto": "Siga nuestras guías",
     "howto": "Siga nuestras guías",
     "or": "o",
     "or": "o",
-    "preventBinding": "Evitar yuxtaposición de flechas",
+    "preventBinding": "Evitar enlace de flechas",
     "tools": "Herramientas",
     "tools": "Herramientas",
     "shortcuts": "Atajos del teclado",
     "shortcuts": "Atajos del teclado",
     "textFinish": "Finalizar edición (editor de texto)",
     "textFinish": "Finalizar edición (editor de texto)",
@@ -310,7 +311,9 @@
     "view": "Vista",
     "view": "Vista",
     "zoomToFit": "Ajustar la vista para mostrar todos los elementos",
     "zoomToFit": "Ajustar la vista para mostrar todos los elementos",
     "zoomToSelection": "Zoom a la selección",
     "zoomToSelection": "Zoom a la selección",
-    "toggleElementLock": "Bloquear/desbloquear selección"
+    "toggleElementLock": "Bloquear/desbloquear selección",
+    "movePageUpDown": "Mover página hacia arriba/abajo",
+    "movePageLeftRight": "Mover página hacia la izquierda/derecha"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Borrar lienzo"
     "title": "Borrar lienzo"
@@ -328,7 +331,7 @@
       "authorName": "Nombre o nombre de usuario",
       "authorName": "Nombre o nombre de usuario",
       "libraryName": "Nombre de tu biblioteca",
       "libraryName": "Nombre de tu biblioteca",
       "libraryDesc": "Descripción de su biblioteca para ayudar a la gente a entender su uso",
       "libraryDesc": "Descripción de su biblioteca para ayudar a la gente a entender su uso",
-      "githubHandle": "GitHub maneja (opcional), así que puede editar la biblioteca una vez enviada para su revisión",
+      "githubHandle": "Nombre de usuario de GitHub (opcional), así podrá editar la biblioteca una vez enviada para su revisión",
       "twitterHandle": "Nombre de usuario de Twitter (opcional), así que sabemos a quién acreditar cuando se promociona en Twitter",
       "twitterHandle": "Nombre de usuario de Twitter (opcional), así que sabemos a quién acreditar cuando se promociona en Twitter",
       "website": "Enlace a su sitio web personal o en cualquier otro lugar (opcional)"
       "website": "Enlace a su sitio web personal o en cualquier otro lugar (opcional)"
     },
     },
@@ -379,7 +382,7 @@
     "title": "Estadísticas para nerds",
     "title": "Estadísticas para nerds",
     "total": "Total",
     "total": "Total",
     "version": "Versión",
     "version": "Versión",
-    "versionCopy": "Clic para copiar",
+    "versionCopy": "Click para copiar",
     "versionNotAvailable": "Versión no disponible",
     "versionNotAvailable": "Versión no disponible",
     "width": "Ancho"
     "width": "Ancho"
   },
   },
@@ -391,7 +394,8 @@
     "fileSaved": "Archivo guardado.",
     "fileSaved": "Archivo guardado.",
     "fileSavedToFilename": "Guardado en {filename}",
     "fileSavedToFilename": "Guardado en {filename}",
     "canvas": "lienzo",
     "canvas": "lienzo",
-    "selection": "selección"
+    "selection": "selección",
+    "pasteAsSingleElement": "Usa {{shortcut}} para pegar como un solo elemento,\no pegar en un editor de texto existente"
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Blanco",
     "ffffff": "Blanco",
@@ -439,5 +443,12 @@
     "5c940d": "Lima 9",
     "5c940d": "Lima 9",
     "e67700": "Amarillo 9",
     "e67700": "Amarillo 9",
     "d9480f": "Naranja 9"
     "d9480f": "Naranja 9"
+  },
+  "welcomeScreen": {
+    "data": "Toda su información es guardada localmente en su navegador.",
+    "switchToPlusApp": "¿Quieres ir a Excalidraw+ en su lugar?",
+    "menuHints": "Exportar, preferencias, idiomas, ...",
+    "toolbarHints": "¡Escoge una herramienta & Empiece a dibujar!",
+    "helpHints": "Atajos & ayuda"
   }
   }
 }
 }

+ 21 - 10
src/locales/eu-ES.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Itsatsi",
     "paste": "Itsatsi",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Itsatsi grafikoak",
     "pasteCharts": "Itsatsi grafikoak",
     "selectAll": "Hautatu dena",
     "selectAll": "Hautatu dena",
     "multiSelect": "Gehitu elementua hautapenera",
     "multiSelect": "Gehitu elementua hautapenera",
@@ -71,7 +72,7 @@
     "layers": "Geruzak",
     "layers": "Geruzak",
     "actions": "Ekintzak",
     "actions": "Ekintzak",
     "language": "Hizkuntza",
     "language": "Hizkuntza",
-    "liveCollaboration": "Zuzeneko elkarlana",
+    "liveCollaboration": "Zuzeneko elkarlana...",
     "duplicateSelection": "Bikoiztu",
     "duplicateSelection": "Bikoiztu",
     "untitled": "Izengabea",
     "untitled": "Izengabea",
     "name": "Izena",
     "name": "Izena",
@@ -115,8 +116,8 @@
       "label": "Esteka"
       "label": "Esteka"
     },
     },
     "lineEditor": {
     "lineEditor": {
-      "edit": "",
-      "exit": ""
+      "edit": "Editatu lerroa",
+      "exit": "Irten lerro-editoretik"
     },
     },
     "elementLock": {
     "elementLock": {
       "lock": "Blokeatu",
       "lock": "Blokeatu",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Garbitu oihala",
     "clearReset": "Garbitu oihala",
     "exportJSON": "Esportatu fitxategira",
     "exportJSON": "Esportatu fitxategira",
-    "exportImage": "Gorde irudi gisa",
-    "export": "Esportatu",
+    "exportImage": "Esportatu irudia...",
+    "export": "Gorde hemen...",
     "exportToPng": "Esportatu PNG gisa",
     "exportToPng": "Esportatu PNG gisa",
     "exportToSvg": "Esportatu SVG gisa",
     "exportToSvg": "Esportatu SVG gisa",
     "copyToClipboard": "Kopiatu arbelera",
     "copyToClipboard": "Kopiatu arbelera",
@@ -144,7 +145,7 @@
     "scale": "Eskala",
     "scale": "Eskala",
     "save": "Gorde uneko fitxategian",
     "save": "Gorde uneko fitxategian",
     "saveAs": "Gorde honela",
     "saveAs": "Gorde honela",
-    "load": "Kargatu",
+    "load": "Ireki",
     "getShareableLink": "Lortu partekatzeko esteka",
     "getShareableLink": "Lortu partekatzeko esteka",
     "close": "Itxi",
     "close": "Itxi",
     "selectLanguage": "Hautatu hizkuntza",
     "selectLanguage": "Hautatu hizkuntza",
@@ -214,7 +215,7 @@
     "text": "Testua",
     "text": "Testua",
     "library": "Liburutegia",
     "library": "Liburutegia",
     "lock": "Mantendu aktibo hautatutako tresna marraztu ondoren",
     "lock": "Mantendu aktibo hautatutako tresna marraztu ondoren",
-    "penMode": "Saihestu txikiagotzea eta onartu marrazte libreko idazketa solik arkatza bidez",
+    "penMode": "Luma modua - ukipena saihestu",
     "link": "Gehitu / Eguneratu esteka hautatutako forma baterako",
     "link": "Gehitu / Eguneratu esteka hautatutako forma baterako",
     "eraser": "Borragoma"
     "eraser": "Borragoma"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Proportzioak mantendu ditzakezu SHIFT sakatuta tamaina aldatzen duzun bitartean.\nsakatu ALT erditik tamaina aldatzeko",
     "resize": "Proportzioak mantendu ditzakezu SHIFT sakatuta tamaina aldatzen duzun bitartean.\nsakatu ALT erditik tamaina aldatzeko",
     "resizeImage": "Tamaina libreki alda dezakezu SHIFT sakatuta,\nsakatu ALT erditik tamaina aldatzeko",
     "resizeImage": "Tamaina libreki alda dezakezu SHIFT sakatuta,\nsakatu ALT erditik tamaina aldatzeko",
     "rotate": "Angeluak mantendu ditzakezu SHIFT sakatuta biratzen duzun bitartean",
     "rotate": "Angeluak mantendu ditzakezu SHIFT sakatuta biratzen duzun bitartean",
-    "lineEditor_info": "Egin klik bikoitza edo sakatu Sartu puntuak editatzeko",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Sakatu Ezabatu puntuak kentzeko,\nKtrl+D bikoizteko, edo arrastatu mugitzeko",
     "lineEditor_pointSelected": "Sakatu Ezabatu puntuak kentzeko,\nKtrl+D bikoizteko, edo arrastatu mugitzeko",
     "lineEditor_nothingSelected": "Hautatu editatzeko puntu bat (SHIFT sakatuta anitz hautatzeko),\nedo eduki Alt sakatuta eta egin klik puntu berriak gehitzeko",
     "lineEditor_nothingSelected": "Hautatu editatzeko puntu bat (SHIFT sakatuta anitz hautatzeko),\nedo eduki Alt sakatuta eta egin klik puntu berriak gehitzeko",
     "placeImage": "Egin klik irudia kokatzeko, edo egin klik eta arrastatu bere tamaina eskuz ezartzeko",
     "placeImage": "Egin klik irudia kokatzeko, edo egin klik eta arrastatu bere tamaina eskuz ezartzeko",
@@ -310,7 +311,9 @@
     "view": "Bistaratu",
     "view": "Bistaratu",
     "zoomToFit": "Egin zoom elementu guztiak ikusteko",
     "zoomToFit": "Egin zoom elementu guztiak ikusteko",
     "zoomToSelection": "Zooma hautapenera",
     "zoomToSelection": "Zooma hautapenera",
-    "toggleElementLock": "Blokeatu/desbloketatu hautapena"
+    "toggleElementLock": "Blokeatu/desbloketatu hautapena",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Garbitu oihala"
     "title": "Garbitu oihala"
@@ -391,7 +394,8 @@
     "fileSaved": "Fitxategia gorde da.",
     "fileSaved": "Fitxategia gorde da.",
     "fileSavedToFilename": "{filename}-n gorde da",
     "fileSavedToFilename": "{filename}-n gorde da",
     "canvas": "oihala",
     "canvas": "oihala",
-    "selection": "hautapena"
+    "selection": "hautapena",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Zuria",
     "ffffff": "Zuria",
@@ -439,5 +443,12 @@
     "5c940d": "Lima 9",
     "5c940d": "Lima 9",
     "e67700": "Horia 9",
     "e67700": "Horia 9",
     "d9480f": "Laranja 9"
     "d9480f": "Laranja 9"
+  },
+  "welcomeScreen": {
+    "data": "Zure datu guztiak modu lokalean gordetzen dira zure nabigatzailean.",
+    "switchToPlusApp": "Horren ordez Excalidraw+-ra joan nahi al zenuen?",
+    "menuHints": "Esportatu, hobespenak, hizkuntzak,...",
+    "toolbarHints": "Aukeratu tresna bat eta hasi marrazten!",
+    "helpHints": "Lasterbideak eta laguntza"
   }
   }
 }
 }

+ 25 - 14
src/locales/fa-IR.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "جای گذاری",
     "paste": "جای گذاری",
+    "pasteAsPlaintext": "",
     "pasteCharts": "قراردادن نمودارها",
     "pasteCharts": "قراردادن نمودارها",
     "selectAll": "انتخاب همه",
     "selectAll": "انتخاب همه",
     "multiSelect": "یک ایتم به انتخاب شده ها اضافه کنید.",
     "multiSelect": "یک ایتم به انتخاب شده ها اضافه کنید.",
@@ -71,7 +72,7 @@
     "layers": "لایه ها",
     "layers": "لایه ها",
     "actions": "عملیات",
     "actions": "عملیات",
     "language": "زبان",
     "language": "زبان",
-    "liveCollaboration": "همکاری زنده",
+    "liveCollaboration": "همکاری آنلاین...",
     "duplicateSelection": "تکرار",
     "duplicateSelection": "تکرار",
     "untitled": "بدون عنوان",
     "untitled": "بدون عنوان",
     "name": "نام",
     "name": "نام",
@@ -115,8 +116,8 @@
       "label": "لینک"
       "label": "لینک"
     },
     },
     "lineEditor": {
     "lineEditor": {
-      "edit": "",
-      "exit": ""
+      "edit": "ویرایش لینک",
+      "exit": "خروج از ویرایشگر"
     },
     },
     "elementLock": {
     "elementLock": {
       "lock": "قفل",
       "lock": "قفل",
@@ -125,18 +126,18 @@
       "unlockAll": "باز کردن قفل همه"
       "unlockAll": "باز کردن قفل همه"
     },
     },
     "statusPublished": "منتشر شده",
     "statusPublished": "منتشر شده",
-    "sidebarLock": ""
+    "sidebarLock": "باز نگه داشتن سایدبار"
   },
   },
   "library": {
   "library": {
-    "noItems": "",
-    "hint_emptyLibrary": "",
-    "hint_emptyPrivateLibrary": ""
+    "noItems": "آیتمی به اینجا اضافه نشده...",
+    "hint_emptyLibrary": "یک آیتم روی بوم را برای اضافه شده به اینجا انتخاب کنید، یا یک کتابخانه از مخزن عمومی در بخش پایین را نصب کنید.",
+    "hint_emptyPrivateLibrary": "یک آیتم روی بوم را برای اضافه شدن به اینجا انتخاب کنید."
   },
   },
   "buttons": {
   "buttons": {
     "clearReset": "پاکسازی بوم نقاشی",
     "clearReset": "پاکسازی بوم نقاشی",
     "exportJSON": "خروجی در فایل",
     "exportJSON": "خروجی در فایل",
-    "exportImage": "ذخیره به عنوان عکس",
-    "export": "تبدیل",
+    "exportImage": "خروجی گرفتن از تصویر...",
+    "export": "ذخیره در...",
     "exportToPng": "تبدیل به PNG",
     "exportToPng": "تبدیل به PNG",
     "exportToSvg": "تبدیل به SVG",
     "exportToSvg": "تبدیل به SVG",
     "copyToClipboard": "کپی در حافظه موقت",
     "copyToClipboard": "کپی در حافظه موقت",
@@ -144,7 +145,7 @@
     "scale": "مقیاس",
     "scale": "مقیاس",
     "save": "ذخیره در همین فایل",
     "save": "ذخیره در همین فایل",
     "saveAs": "ذخیره با نام",
     "saveAs": "ذخیره با نام",
-    "load": "بارگذاری",
+    "load": "باز کردن",
     "getShareableLink": "دریافت لینک قابل اشتراک",
     "getShareableLink": "دریافت لینک قابل اشتراک",
     "close": "بستن",
     "close": "بستن",
     "selectLanguage": "انتخاب زبان",
     "selectLanguage": "انتخاب زبان",
@@ -214,7 +215,7 @@
     "text": "متن",
     "text": "متن",
     "library": "کتابخانه",
     "library": "کتابخانه",
     "lock": "ابزار انتخاب شده را بعد از کشیدن نگه دار",
     "lock": "ابزار انتخاب شده را بعد از کشیدن نگه دار",
-    "penMode": "از زوم کوچک کردن جلوگیری کنید و ورودی آزاد را فقط از قلم بپذیرید",
+    "penMode": "حالت قلم - جلوگیری از تماس",
     "link": "افزودن/به‌روزرسانی پیوند برای شکل انتخابی",
     "link": "افزودن/به‌روزرسانی پیوند برای شکل انتخابی",
     "eraser": "پاک کن"
     "eraser": "پاک کن"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "می توانید با نگه داشتن SHIFT در هنگام تغییر اندازه، نسبت ها را محدود کنید،ALT را برای تغییر اندازه از مرکز نگه دارید",
     "resize": "می توانید با نگه داشتن SHIFT در هنگام تغییر اندازه، نسبت ها را محدود کنید،ALT را برای تغییر اندازه از مرکز نگه دارید",
     "resizeImage": "با نگه داشتن SHIFT می توانید آزادانه اندازه را تغییر دهید،\nبرای تغییر اندازه از مرکز، ALT را نگه دارید",
     "resizeImage": "با نگه داشتن SHIFT می توانید آزادانه اندازه را تغییر دهید،\nبرای تغییر اندازه از مرکز، ALT را نگه دارید",
     "rotate": "با نگه داشتن SHIFT هنگام چرخش می توانید زاویه ها را محدود کنید",
     "rotate": "با نگه داشتن SHIFT هنگام چرخش می توانید زاویه ها را محدود کنید",
-    "lineEditor_info": "دوبار کلیک کنید یا Enter را فشار دهید تا نقاط را ویرایش کنید",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "برای حذف نقطه Delete برای کپی زدن Ctrl یا Cmd+D را بزنید و یا برای جابجایی بکشید",
     "lineEditor_pointSelected": "برای حذف نقطه Delete برای کپی زدن Ctrl یا Cmd+D را بزنید و یا برای جابجایی بکشید",
     "lineEditor_nothingSelected": "یک نقطه را برای ویرایش انتخاب کنید (SHIFT را برای انتخاب چندگانه نگه دارید)،\nیا Alt را نگه دارید و برای افزودن نقاط جدید کلیک کنید",
     "lineEditor_nothingSelected": "یک نقطه را برای ویرایش انتخاب کنید (SHIFT را برای انتخاب چندگانه نگه دارید)،\nیا Alt را نگه دارید و برای افزودن نقاط جدید کلیک کنید",
     "placeImage": "برای قرار دادن تصویر کلیک کنید، یا کلیک کنید و بکشید تا اندازه آن به صورت دستی تنظیم شود",
     "placeImage": "برای قرار دادن تصویر کلیک کنید، یا کلیک کنید و بکشید تا اندازه آن به صورت دستی تنظیم شود",
@@ -310,7 +311,9 @@
     "view": "مشاهده",
     "view": "مشاهده",
     "zoomToFit": "بزرگنمایی برای دیدن تمام آیتم ها",
     "zoomToFit": "بزرگنمایی برای دیدن تمام آیتم ها",
     "zoomToSelection": "بزرگنمایی قسمت انتخاب شده",
     "zoomToSelection": "بزرگنمایی قسمت انتخاب شده",
-    "toggleElementLock": "قفل/بازکردن انتخاب شده ها"
+    "toggleElementLock": "قفل/بازکردن انتخاب شده ها",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "پاک کردن بوم"
     "title": "پاک کردن بوم"
@@ -391,7 +394,8 @@
     "fileSaved": "فایل ذخیره شد.",
     "fileSaved": "فایل ذخیره شد.",
     "fileSavedToFilename": "ذخیره در {filename}",
     "fileSavedToFilename": "ذخیره در {filename}",
     "canvas": "بوم",
     "canvas": "بوم",
-    "selection": "انتخاب"
+    "selection": "انتخاب",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "سفید",
     "ffffff": "سفید",
@@ -439,5 +443,12 @@
     "5c940d": "لیمویی 9",
     "5c940d": "لیمویی 9",
     "e67700": "زرد 9",
     "e67700": "زرد 9",
     "d9480f": "نارنجی 9"
     "d9480f": "نارنجی 9"
+  },
+  "welcomeScreen": {
+    "data": "همه ی داده های شما به صورت محلی در مرورگر ذخیره میشود.",
+    "switchToPlusApp": "آیا ترجیح میدهید به Excalidraw+ بروید؟",
+    "menuHints": "خروجی گرفتن، تنظیمات، زبانها، ...",
+    "toolbarHints": "یک ابزار را انتخاب کنید و ترسیم را شروع کنید!",
+    "helpHints": "میانبرها و کمک"
   }
   }
 }
 }

+ 19 - 8
src/locales/fi-FI.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Liitä",
     "paste": "Liitä",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Liitä kaaviot",
     "pasteCharts": "Liitä kaaviot",
     "selectAll": "Valitse kaikki",
     "selectAll": "Valitse kaikki",
     "multiSelect": "Lisää kohde valintaan",
     "multiSelect": "Lisää kohde valintaan",
@@ -71,7 +72,7 @@
     "layers": "Tasot",
     "layers": "Tasot",
     "actions": "Toiminnot",
     "actions": "Toiminnot",
     "language": "Kieli",
     "language": "Kieli",
-    "liveCollaboration": "Live-yhteistyö",
+    "liveCollaboration": "",
     "duplicateSelection": "Monista",
     "duplicateSelection": "Monista",
     "untitled": "Nimetön",
     "untitled": "Nimetön",
     "name": "Nimi",
     "name": "Nimi",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Tyhjennä piirtoalue",
     "clearReset": "Tyhjennä piirtoalue",
     "exportJSON": "Vie tiedostoon",
     "exportJSON": "Vie tiedostoon",
-    "exportImage": "Tallenna kuvana",
-    "export": "Vie",
+    "exportImage": "",
+    "export": "",
     "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",
@@ -144,7 +145,7 @@
     "scale": "Koko",
     "scale": "Koko",
     "save": "Tallenna nykyiseen tiedostoon",
     "save": "Tallenna nykyiseen tiedostoon",
     "saveAs": "Tallenna nimellä",
     "saveAs": "Tallenna nimellä",
-    "load": "Avaa",
+    "load": "",
     "getShareableLink": "Hae jaettava linkki",
     "getShareableLink": "Hae jaettava linkki",
     "close": "Sulje",
     "close": "Sulje",
     "selectLanguage": "Valitse kieli",
     "selectLanguage": "Valitse kieli",
@@ -214,7 +215,7 @@
     "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",
-    "penMode": "Estä nipistyszoomaus ja vastaanota ainoastaan kynällä piirretty",
+    "penMode": "",
     "link": "Lisää/päivitä linkki valitulle muodolle",
     "link": "Lisää/päivitä linkki valitulle muodolle",
     "eraser": "Poistotyökalu"
     "eraser": "Poistotyökalu"
   },
   },
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Voit muuttaa kokoa vapaasti pitämällä SHIFTiä pohjassa, pidä ALT pohjassa muuttaaksesi kokoa keskipisteen ympäri",
     "resizeImage": "Voit muuttaa kokoa vapaasti pitämällä SHIFTiä pohjassa, pidä ALT pohjassa muuttaaksesi kokoa keskipisteen ympäri",
     "rotate": "Voit rajoittaa kulman pitämällä SHIFT pohjassa pyörittäessäsi",
     "rotate": "Voit rajoittaa kulman pitämällä SHIFT pohjassa pyörittäessäsi",
-    "lineEditor_info": "Kaksoisnapauta tai paina Enter muokataksesi pisteitä",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Poista piste(et) painamalla delete, monista painamalla CtrlOrCmd+D, tai liikuta raahaamalla",
     "lineEditor_pointSelected": "Poista piste(et) painamalla delete, monista painamalla CtrlOrCmd+D, tai liikuta raahaamalla",
     "lineEditor_nothingSelected": "Valitse muokattava piste (monivalinta pitämällä SHIFT pohjassa), tai paina Alt ja klikkaa lisätäksesi uusia pisteitä",
     "lineEditor_nothingSelected": "Valitse muokattava piste (monivalinta pitämällä SHIFT pohjassa), tai paina Alt ja klikkaa lisätäksesi uusia pisteitä",
     "placeImage": "Klikkaa asettaaksesi kuvan, tai klikkaa ja raahaa asettaaksesi sen koon manuaalisesti",
     "placeImage": "Klikkaa asettaaksesi kuvan, tai klikkaa ja raahaa asettaaksesi sen koon manuaalisesti",
@@ -310,7 +311,9 @@
     "view": "Näkymä",
     "view": "Näkymä",
     "zoomToFit": "Näytä kaikki elementit",
     "zoomToFit": "Näytä kaikki elementit",
     "zoomToSelection": "Näytä valinta",
     "zoomToSelection": "Näytä valinta",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Pyyhi piirtoalue"
     "title": "Pyyhi piirtoalue"
@@ -391,7 +394,8 @@
     "fileSaved": "Tiedosto tallennettu.",
     "fileSaved": "Tiedosto tallennettu.",
     "fileSavedToFilename": "Tallennettiin kohteeseen {filename}",
     "fileSavedToFilename": "Tallennettiin kohteeseen {filename}",
     "canvas": "piirtoalue",
     "canvas": "piirtoalue",
-    "selection": "valinta"
+    "selection": "valinta",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Valkoinen",
     "ffffff": "Valkoinen",
@@ -439,5 +443,12 @@
     "5c940d": "Limenvihreä 9",
     "5c940d": "Limenvihreä 9",
     "e67700": "Keltainen 9",
     "e67700": "Keltainen 9",
     "d9480f": "Oranssi 9"
     "d9480f": "Oranssi 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/fr-FR.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Coller",
     "paste": "Coller",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Coller les graphiques",
     "pasteCharts": "Coller les graphiques",
     "selectAll": "Tout sélectionner",
     "selectAll": "Tout sélectionner",
     "multiSelect": "Ajouter l'élément à la sélection",
     "multiSelect": "Ajouter l'élément à la sélection",
@@ -44,7 +45,7 @@
     "exportEmbedScene": "Intégrer la scène",
     "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 \"Réalisé avec Excalidraw\"",
     "addWatermark": "Ajouter \"Réalisé avec Excalidraw\"",
-    "handDrawn": "À la main",
+    "handDrawn": "Manuscrit",
     "normal": "Normale",
     "normal": "Normale",
     "code": "Code",
     "code": "Code",
     "small": "Petite",
     "small": "Petite",
@@ -71,7 +72,7 @@
     "layers": "Disposition",
     "layers": "Disposition",
     "actions": "Actions",
     "actions": "Actions",
     "language": "Langue",
     "language": "Langue",
-    "liveCollaboration": "Collaboration en direct",
+    "liveCollaboration": "Collaboration en direct...",
     "duplicateSelection": "Dupliquer",
     "duplicateSelection": "Dupliquer",
     "untitled": "Sans-titre",
     "untitled": "Sans-titre",
     "name": "Nom",
     "name": "Nom",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Réinitialiser le canevas",
     "clearReset": "Réinitialiser le canevas",
     "exportJSON": "Exporter comme fichier",
     "exportJSON": "Exporter comme fichier",
-    "exportImage": "Enregistrer comme image",
-    "export": "Exporter",
+    "exportImage": "Exporter l'image...",
+    "export": "Enregistrer sous...",
     "exportToPng": "Enregistrer en PNG",
     "exportToPng": "Enregistrer en PNG",
     "exportToSvg": "Enregistrer en SVG",
     "exportToSvg": "Enregistrer en SVG",
     "copyToClipboard": "Copier dans le presse-papier",
     "copyToClipboard": "Copier dans le presse-papier",
@@ -214,7 +215,7 @@
     "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",
-    "penMode": "Empêcher le zoom tactile et accepter la saisie libre uniquement à partir du stylet",
+    "penMode": "Mode stylo - évite le toucher",
     "link": "Ajouter/mettre à jour le lien pour une forme sélectionnée",
     "link": "Ajouter/mettre à jour le lien pour une forme sélectionnée",
     "eraser": "Gomme"
     "eraser": "Gomme"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Vous pouvez conserver les proportions en maintenant la touche MAJ pendant le redimensionnement, maintenez la touche ALT pour redimensionner par rapport au centre",
     "resize": "Vous pouvez conserver les proportions en maintenant la touche MAJ pendant le redimensionnement, maintenez la touche ALT pour redimensionner par rapport au centre",
     "resizeImage": "Vous pouvez redimensionner librement en maintenant SHIFT,\nmaintenez ALT pour redimensionner depuis le centre",
     "resizeImage": "Vous pouvez redimensionner librement en maintenant SHIFT,\nmaintenez ALT pour redimensionner depuis le centre",
     "rotate": "Vous pouvez restreindre les angles en maintenant MAJ pendant la rotation",
     "rotate": "Vous pouvez restreindre les angles en maintenant MAJ pendant la rotation",
-    "lineEditor_info": "Double-cliquez ou appuyez sur Entrée pour éditer les points",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Appuyer sur Suppr. pour supprimer des points, Ctrl ou Cmd+D pour dupliquer, ou faire glisser pour déplacer",
     "lineEditor_pointSelected": "Appuyer sur Suppr. pour supprimer des points, Ctrl ou Cmd+D pour dupliquer, ou faire glisser pour déplacer",
     "lineEditor_nothingSelected": "Sélectionner un point pour éditer (maintenir la touche MAJ pour en sélectionner plusieurs),\nou maintenir la touche Alt enfoncée et cliquer pour ajouter de nouveaux points",
     "lineEditor_nothingSelected": "Sélectionner un point pour éditer (maintenir la touche MAJ pour en sélectionner plusieurs),\nou maintenir la touche Alt enfoncée et cliquer pour ajouter de nouveaux points",
     "placeImage": "Cliquez pour placer l'image, ou cliquez et faites glisser pour définir sa taille manuellement",
     "placeImage": "Cliquez pour placer l'image, ou cliquez et faites glisser pour définir sa taille manuellement",
@@ -310,7 +311,9 @@
     "view": "Affichage",
     "view": "Affichage",
     "zoomToFit": "Zoomer pour voir tous les éléments",
     "zoomToFit": "Zoomer pour voir tous les éléments",
     "zoomToSelection": "Zoomer sur la sélection",
     "zoomToSelection": "Zoomer sur la sélection",
-    "toggleElementLock": "Verrouiller/déverrouiller la sélection"
+    "toggleElementLock": "Verrouiller/déverrouiller la sélection",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Effacer la zone de dessin"
     "title": "Effacer la zone de dessin"
@@ -391,7 +394,8 @@
     "fileSaved": "Fichier enregistré.",
     "fileSaved": "Fichier enregistré.",
     "fileSavedToFilename": "Enregistré sous {filename}",
     "fileSavedToFilename": "Enregistré sous {filename}",
     "canvas": "canevas",
     "canvas": "canevas",
-    "selection": "sélection"
+    "selection": "sélection",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Blanc",
     "ffffff": "Blanc",
@@ -439,5 +443,12 @@
     "5c940d": "Citron vert 9",
     "5c940d": "Citron vert 9",
     "e67700": "Jaune 9",
     "e67700": "Jaune 9",
     "d9480f": "Orange 9"
     "d9480f": "Orange 9"
+  },
+  "welcomeScreen": {
+    "data": "Toutes vos données sont sauvegardées en local dans votre navigateur.",
+    "switchToPlusApp": "Vous vouliez plutôt aller à Excalidraw+ ?",
+    "menuHints": "Exportation, préférences, langues, ...",
+    "toolbarHints": "Choisissez un outil et commencez à dessiner !",
+    "helpHints": "Raccourcis et aide"
   }
   }
 }
 }

+ 227 - 216
src/locales/gl-ES.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
-    "paste": "Paste",
+    "paste": "Pegar",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Pegar gráficos",
     "pasteCharts": "Pegar gráficos",
     "selectAll": "Seleccionar todo",
     "selectAll": "Seleccionar todo",
     "multiSelect": "Engadir elemento á selección",
     "multiSelect": "Engadir elemento á selección",
@@ -42,9 +43,9 @@
     "onlySelected": "Só seleccionados",
     "onlySelected": "Só seleccionados",
     "withBackground": "Fondo",
     "withBackground": "Fondo",
     "exportEmbedScene": "Inserir escena",
     "exportEmbedScene": "Inserir escena",
-    "exportEmbedScene_details": "",
+    "exportEmbedScene_details": "Os datos da escena serán gardados no ficheiro PNG/SVG exportado polo que a escena poderá ser restaurada dende el. Isto aumentará o tamaño do ficheiro exportado.",
     "addWatermark": "Engadir \"Feito con Excalidraw\"",
     "addWatermark": "Engadir \"Feito con Excalidraw\"",
-    "handDrawn": "Debuzado á man",
+    "handDrawn": "Debuxado a man",
     "normal": "Normal",
     "normal": "Normal",
     "code": "Código",
     "code": "Código",
     "small": "Pequeno",
     "small": "Pequeno",
@@ -71,7 +72,7 @@
     "layers": "Capas",
     "layers": "Capas",
     "actions": "Accións",
     "actions": "Accións",
     "language": "Idioma",
     "language": "Idioma",
-    "liveCollaboration": "Colaboración en directo",
+    "liveCollaboration": "Colaboración en directo...",
     "duplicateSelection": "Duplicar",
     "duplicateSelection": "Duplicar",
     "untitled": "Sen título",
     "untitled": "Sen título",
     "name": "Nome",
     "name": "Nome",
@@ -95,8 +96,8 @@
     "centerHorizontally": "Centrar horizontalmente",
     "centerHorizontally": "Centrar horizontalmente",
     "distributeHorizontally": "Distribuír horizontalmente",
     "distributeHorizontally": "Distribuír horizontalmente",
     "distributeVertically": "Distribuír verticalmente",
     "distributeVertically": "Distribuír verticalmente",
-    "flipHorizontal": "",
-    "flipVertical": "",
+    "flipHorizontal": "Virar horizontalmente",
+    "flipVertical": "Virar verticalmente",
     "viewMode": "Modo de visualización",
     "viewMode": "Modo de visualización",
     "toggleExportColorScheme": "Alternar esquema de cores de exportación",
     "toggleExportColorScheme": "Alternar esquema de cores de exportación",
     "share": "Compartir",
     "share": "Compartir",
@@ -115,8 +116,8 @@
       "label": "Ligazón"
       "label": "Ligazón"
     },
     },
     "lineEditor": {
     "lineEditor": {
-      "edit": "",
-      "exit": ""
+      "edit": "Editar liña",
+      "exit": "Saír do editor de liñas"
     },
     },
     "elementLock": {
     "elementLock": {
       "lock": "Bloquear",
       "lock": "Bloquear",
@@ -129,14 +130,14 @@
   },
   },
   "library": {
   "library": {
     "noItems": "Aínda non hai elementos engadidos...",
     "noItems": "Aínda non hai elementos engadidos...",
-    "hint_emptyLibrary": "",
-    "hint_emptyPrivateLibrary": ""
+    "hint_emptyLibrary": "Seleccione un elemento no lenzo para engadilo aquí, ou instale unha biblioteca dende o repositorio público, como se detalla a continuación.",
+    "hint_emptyPrivateLibrary": "Seleccione un elemento do lenzo para engadilo aquí."
   },
   },
   "buttons": {
   "buttons": {
     "clearReset": "Limpar o lenzo",
     "clearReset": "Limpar o lenzo",
     "exportJSON": "Exportar a arquivo",
     "exportJSON": "Exportar a arquivo",
-    "exportImage": "Gardar como imaxe",
-    "export": "Exportar",
+    "exportImage": "Exportar imaxe...",
+    "export": "Gardar en...",
     "exportToPng": "Exportar a PNG",
     "exportToPng": "Exportar a PNG",
     "exportToSvg": "Exportar a SVG",
     "exportToSvg": "Exportar a SVG",
     "copyToClipboard": "Copiar ao portapapeis",
     "copyToClipboard": "Copiar ao portapapeis",
@@ -144,7 +145,7 @@
     "scale": "Escala",
     "scale": "Escala",
     "save": "Gardar no ficheiro actual",
     "save": "Gardar no ficheiro actual",
     "saveAs": "Gardar como",
     "saveAs": "Gardar como",
-    "load": "Cargar",
+    "load": "Abrir",
     "getShareableLink": "Obter unha ligazón que se poida compartir",
     "getShareableLink": "Obter unha ligazón que se poida compartir",
     "close": "Pechar",
     "close": "Pechar",
     "selectLanguage": "Seleccionar idioma",
     "selectLanguage": "Seleccionar idioma",
@@ -176,35 +177,35 @@
     "couldNotCreateShareableLink": "Non se puido crear unha ligazón para compartir.",
     "couldNotCreateShareableLink": "Non se puido crear unha ligazón para compartir.",
     "couldNotCreateShareableLinkTooBig": "Non se puido crear a ligazón para compartir: a escena é demasiado grande",
     "couldNotCreateShareableLinkTooBig": "Non se puido crear a ligazón para compartir: a escena é demasiado grande",
     "couldNotLoadInvalidFile": "Non se puido cargar o ficheiro non válido",
     "couldNotLoadInvalidFile": "Non se puido cargar o ficheiro non válido",
-    "importBackendFailed": "",
-    "cannotExportEmptyCanvas": "",
-    "couldNotCopyToClipboard": "",
+    "importBackendFailed": "A importación dende o backend fallou.",
+    "cannotExportEmptyCanvas": "Non se pode exportar un lenzo baleiro.",
+    "couldNotCopyToClipboard": "Non se puido copiar ao portapapeis.",
     "decryptFailed": "Non se poideron descifrar os datos.",
     "decryptFailed": "Non se poideron descifrar os datos.",
-    "uploadedSecurly": "A carga foi asegurada con cifrado de extremo a extremo, o que significa que o servidor de Excalidraw e terceiros non poder ler o contenido.",
-    "loadSceneOverridePrompt": "Si carga este debuxo externo, reemprazará o que ten. ¿Desexa continuar?",
-    "collabStopOverridePrompt": "",
-    "errorAddingToLibrary": "",
-    "errorRemovingFromLibrary": "",
-    "confirmAddLibrary": "",
-    "imageDoesNotContainScene": "",
-    "cannotRestoreFromImage": "",
-    "invalidSceneUrl": "",
-    "resetLibrary": "",
-    "removeItemsFromsLibrary": "",
-    "invalidEncryptionKey": ""
+    "uploadedSecurly": "A carga foi asegurada con cifrado de extremo a extremo, o que significa que o servidor de Excalidraw e terceiros non poden ler o contido.",
+    "loadSceneOverridePrompt": "A carga dun debuxo externo substituirá o contido existente. Desexa continuar?",
+    "collabStopOverridePrompt": "Deter a sesión, sobrescribirá o seu debuxo local previamente almacenado. Está seguro?\n\n(Se quere manter o seu debuxo local, simplemente peche a lapela do navegador.)",
+    "errorAddingToLibrary": "Non se puido engadir o elemento á biblioteca",
+    "errorRemovingFromLibrary": "Non se puido eliminar o elemento da biblioteca",
+    "confirmAddLibrary": "Isto engadirá {{numShapes}} forma(s) a túa biblioteca. Estás seguro?",
+    "imageDoesNotContainScene": "Esta imaxe non parece conter ningún dato da escena. Activou a inserción de escenas durante a exportación?",
+    "cannotRestoreFromImage": "Non se puido restaurar a escena dende este arquivo de imaxe",
+    "invalidSceneUrl": "Non se puido importar a escena dende a URL proporcionada. Ou ben está malformada ou non contén un JSON con información válida para Excalidraw.",
+    "resetLibrary": "Isto limpará a súa biblioteca. Está seguro?",
+    "removeItemsFromsLibrary": "Eliminar {{count}} elemento(s) da biblioteca?",
+    "invalidEncryptionKey": "A clave de cifrado debe ter 22 caracteres. A colaboración en directo está desactivada."
   },
   },
   "errors": {
   "errors": {
-    "unsupportedFileType": "",
-    "imageInsertError": "",
-    "fileTooBig": "",
-    "svgImageInsertError": "",
-    "invalidSVGString": "",
-    "cannotResolveCollabServer": "",
-    "importLibraryError": ""
+    "unsupportedFileType": "Tipo de ficheiro non soportado.",
+    "imageInsertError": "Non se puido inserir a imaxe. Probe de novo máis tarde...",
+    "fileTooBig": "O ficheiro é demasiado grande. O tamaño máximo permitido é {{maxSize}}.",
+    "svgImageInsertError": "Non se puido inserir como imaxe SVG. O marcado SVG semella inválido.",
+    "invalidSVGString": "SVG inválido.",
+    "cannotResolveCollabServer": "Non se puido conectar ao servidor de colaboración. Por favor recargue a páxina e probe de novo.",
+    "importLibraryError": "Non se puido cargar a biblioteca"
   },
   },
   "toolBar": {
   "toolBar": {
     "selection": "Selección",
     "selection": "Selección",
-    "image": "",
+    "image": "Inserir imaxe",
     "rectangle": "Rectángulo",
     "rectangle": "Rectángulo",
     "diamond": "Diamante",
     "diamond": "Diamante",
     "ellipse": "Elipse",
     "ellipse": "Elipse",
@@ -214,230 +215,240 @@
     "text": "Texto",
     "text": "Texto",
     "library": "Biblioteca",
     "library": "Biblioteca",
     "lock": "Manter a ferramenta seleccionada activa despois de debuxar",
     "lock": "Manter a ferramenta seleccionada activa despois de debuxar",
-    "penMode": "",
-    "link": "",
-    "eraser": ""
+    "penMode": "Modo lapis - evitar o contacto",
+    "link": "Engadir/ Actualizar ligazón para a forma seleccionada",
+    "eraser": "Goma de borrar"
   },
   },
   "headings": {
   "headings": {
     "canvasActions": "Accións do lenzo",
     "canvasActions": "Accións do lenzo",
-    "selectedShapeActions": "",
-    "shapes": ""
+    "selectedShapeActions": "Accións da forma seleccionada",
+    "shapes": "Formas"
   },
   },
   "hints": {
   "hints": {
-    "canvasPanning": "",
-    "linearElement": "",
-    "freeDraw": "",
-    "text": "",
-    "text_selected": "",
-    "text_editing": "",
-    "linearElementMulti": "",
-    "lockAngle": "",
-    "resize": "",
-    "resizeImage": "",
-    "rotate": "",
+    "canvasPanning": "Para mover o lenzo, manteña a roda do rato ou a barra de espazo mentres arrastra",
+    "linearElement": "Faga clic para iniciar varios puntos, arrastre para unha sola liña",
+    "freeDraw": "Fai clic e arrastra, solta cando acabes",
+    "text": "Consello: tamén podes engadir texto facendo dobre-clic en calquera lugar coa ferramenta de selección",
+    "text_selected": "Dobre-clic ou prema ENTER para editar o texto",
+    "text_editing": "Prema Escape ou CtrlOrCmd+ENTER para finalizar a edición",
+    "linearElementMulti": "Faga clic no último punto ou prema Escape ou Enter para rematar",
+    "lockAngle": "Pode reducir o ángulo mantendo SHIFT",
+    "resize": "Pode reducir as proporcións mantendo SHIFT mentres axusta o tamaño,\nmanteña ALT para axustalo dende o centro",
+    "resizeImage": "Pode axustar o tamaño libremente mantendo SHIFT,\nmanteña ALT para axustalo dende o centro",
+    "rotate": "Podes reducir os ángulos mantendo SHIFT mentres os rotas",
     "lineEditor_info": "",
     "lineEditor_info": "",
-    "lineEditor_pointSelected": "",
-    "lineEditor_nothingSelected": "",
-    "placeImage": "",
-    "publishLibrary": "",
-    "bindTextToElement": "",
-    "deepBoxSelect": "",
-    "eraserRevert": ""
+    "lineEditor_pointSelected": "Prema Suprimir para eliminar o(s) punto(s)\nCtrlOrCmd+D para duplicalos, ou arrastre para movelos",
+    "lineEditor_nothingSelected": "Seleccione un punto para editar (manteña pulsado SHIFT para selección múltiple),\nou manteña pulsado Alt e faga clic para engadir novos puntos",
+    "placeImage": "Faga clic para colocar a imaxe, ou faga clic e arrastre para establecer o seu tamaño manualmente",
+    "publishLibrary": "Publica a túa propia biblioteca",
+    "bindTextToElement": "Prema a tecla enter para engadir texto",
+    "deepBoxSelect": "Manteña pulsado CtrlOrCmd para seleccionar en profundidade e evitar o arrastre",
+    "eraserRevert": "Manteña pulsado Alt para reverter os elementos marcados para a súa eliminación"
   },
   },
   "canvasError": {
   "canvasError": {
-    "cannotShowPreview": "",
-    "canvasTooBig": "",
-    "canvasTooBigTip": ""
+    "cannotShowPreview": "Non se pode mostrar a vista previa",
+    "canvasTooBig": "Pode que o lenzo sexa demasiado grande.",
+    "canvasTooBigTip": "Consello: Probe a acercar un pouco os elementos máis afastados."
   },
   },
   "errorSplash": {
   "errorSplash": {
-    "headingMain_pre": "",
-    "headingMain_button": "",
-    "clearCanvasMessage": "",
-    "clearCanvasMessage_button": "",
-    "clearCanvasCaveat": "",
-    "trackedToSentry_pre": "",
-    "trackedToSentry_post": "",
-    "openIssueMessage_pre": "",
-    "openIssueMessage_button": "",
-    "openIssueMessage_post": "",
-    "sceneContent": ""
+    "headingMain_pre": "Atopouse un erro. Probe ",
+    "headingMain_button": "recargando a páxina.",
+    "clearCanvasMessage": "Se recargar non funcionou, probe ",
+    "clearCanvasMessage_button": "limpando o lenzo.",
+    "clearCanvasCaveat": " Isto resultará nunha perda do seu traballo ",
+    "trackedToSentry_pre": "O erro con identificador ",
+    "trackedToSentry_post": " foi rastrexado no noso sistema.",
+    "openIssueMessage_pre": "Fomos moi cautelosos de non incluír a información da súa escena no erro. Se a súa escena non é privada, por favor, considere o seguimento do noso ",
+    "openIssueMessage_button": "rastrexador de erros.",
+    "openIssueMessage_post": " Por favor inclúa a seguinte información copiándoa e pegándoa na issue de Github.",
+    "sceneContent": "Contido da escena:"
   },
   },
   "roomDialog": {
   "roomDialog": {
-    "desc_intro": "",
-    "desc_privacy": "",
-    "button_startSession": "",
-    "button_stopSession": "",
-    "desc_inProgressIntro": "",
-    "desc_shareLink": "",
-    "desc_exitSession": "",
-    "shareTitle": ""
+    "desc_intro": "Podes invitar xente a colaborar contigo na túa escena actual.",
+    "desc_privacy": "Non te preocupes, a sesión usa cifrado de punto a punto, polo que calquera cousa que debuxes mantense privada. Nin tan sequera o noso servidor será capaz de ver o que fas.",
+    "button_startSession": "Comezar sesión",
+    "button_stopSession": "Rematar sesión",
+    "desc_inProgressIntro": "A sesión de colaboración en directo está agora en progreso.",
+    "desc_shareLink": "Comparte esta ligazón con calquera que queiras colaborar:",
+    "desc_exitSession": "Deter a sesión desconectarao da sala, pero poderá seguir traballando coa escena de maneira local. Teña en conta que isto non afectará a outras persoas, que poderán seguir colaborando na súa versión.",
+    "shareTitle": "Únase a unha sesión de colaboración en directo en Excalidraw"
   },
   },
   "errorDialog": {
   "errorDialog": {
     "title": "Erro"
     "title": "Erro"
   },
   },
   "exportDialog": {
   "exportDialog": {
-    "disk_title": "",
-    "disk_details": "",
-    "disk_button": "",
-    "link_title": "",
-    "link_details": "",
-    "link_button": "",
-    "excalidrawplus_description": "",
-    "excalidrawplus_button": "",
-    "excalidrawplus_exportError": ""
+    "disk_title": "Gardar no disco",
+    "disk_details": "Exporte os datos da escena a un ficheiro que poderás importar máis tarde.",
+    "disk_button": "Gardar nun ficheiro",
+    "link_title": "Ligazón para compartir",
+    "link_details": "Exportar como unha ligazón de só lectura.",
+    "link_button": "Exportar a unha ligazón",
+    "excalidrawplus_description": "Garde a escena no seu espazo de traballo en Excalidraw+.",
+    "excalidrawplus_button": "Exportar",
+    "excalidrawplus_exportError": "Non se puido exportar a Excalidraw+ neste momento..."
   },
   },
   "helpDialog": {
   "helpDialog": {
-    "blog": "",
-    "click": "",
-    "deepSelect": "",
-    "deepBoxSelect": "",
-    "curvedArrow": "",
-    "curvedLine": "",
-    "documentation": "",
-    "doubleClick": "",
-    "drag": "",
-    "editor": "",
-    "editSelectedShape": "",
-    "github": "",
-    "howto": "",
-    "or": "",
-    "preventBinding": "",
-    "tools": "",
-    "shortcuts": "",
-    "textFinish": "",
-    "textNewLine": "",
-    "title": "",
-    "view": "",
-    "zoomToFit": "",
-    "zoomToSelection": "",
-    "toggleElementLock": ""
+    "blog": "Le o noso blog",
+    "click": "clic",
+    "deepSelect": "Selección en profundidade",
+    "deepBoxSelect": "Selección en profundidade dentro da caixa, evitando o arrastre",
+    "curvedArrow": "Frecha curva",
+    "curvedLine": "Liña curva",
+    "documentation": "Documentación",
+    "doubleClick": "dobre-clic",
+    "drag": "arrastrar",
+    "editor": "Editor",
+    "editSelectedShape": "Editar a forma seleccionada (texto/frecha/liña)",
+    "github": "Encontrou un problema? Envíeo",
+    "howto": "Sigue as nosas normas",
+    "or": "ou",
+    "preventBinding": "Evitar a unión de frechas",
+    "tools": "Ferramentas",
+    "shortcuts": "Atallos de teclado",
+    "textFinish": "Rematar de editar (editor de texto)",
+    "textNewLine": "Engadir unha nova liña (editor de texto)",
+    "title": "Axuda",
+    "view": "Vista",
+    "zoomToFit": "Zoom que se axuste a todos os elementos",
+    "zoomToSelection": "Zoom á selección",
+    "toggleElementLock": "Bloquear/desbloquear selección",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
-    "title": ""
+    "title": "Limpar lenzo"
   },
   },
   "publishDialog": {
   "publishDialog": {
-    "title": "",
-    "itemName": "",
-    "authorName": "",
-    "githubUsername": "",
-    "twitterUsername": "",
-    "libraryName": "",
-    "libraryDesc": "",
-    "website": "",
+    "title": "Publicar biblioteca",
+    "itemName": "Nome do elemento",
+    "authorName": "Nome do autor",
+    "githubUsername": "Nome de usuario en Github",
+    "twitterUsername": "Nome de usuario en Twitter",
+    "libraryName": "Nome da biblioteca",
+    "libraryDesc": "Descrición da biblioteca",
+    "website": "Páxina web",
     "placeholder": {
     "placeholder": {
-      "authorName": "",
-      "libraryName": "",
-      "libraryDesc": "",
-      "githubHandle": "",
-      "twitterHandle": "",
-      "website": ""
+      "authorName": "O seu nome ou nome de usuario",
+      "libraryName": "Nome da súa biblioteca",
+      "libraryDesc": "Descrición da súa biblioteca para axudar a xente a entender o seu uso",
+      "githubHandle": "Nome de usuario de GitHub (opcional), así poderás editar a biblioteca unha vez enviada para a súa revisión",
+      "twitterHandle": "Nome de usuario en Twitter(opcional), así sabemos a quen darlle crédito cando se lle de promoción a través de Twitter",
+      "website": "Ligazón ao teu sitio web persoal ou a outro sitio (opcional)"
     },
     },
     "errors": {
     "errors": {
-      "required": "",
-      "website": ""
+      "required": "Obrigatorio",
+      "website": "Introduza unha URL válida"
     },
     },
     "noteDescription": {
     "noteDescription": {
-      "pre": "",
-      "link": "",
-      "post": ""
+      "pre": "Envíe a súa biblioteca para que sexa incluída no ",
+      "link": "repositorio público de bibliotecas",
+      "post": "para que outra xente a poida usar nos seus debuxos."
     },
     },
     "noteGuidelines": {
     "noteGuidelines": {
-      "pre": "",
-      "link": "",
-      "post": ""
+      "pre": "A biblioteca necesita ser aprobada manualmente primeiro. Por favor, lea as ",
+      "link": "normas",
+      "post": " antes de ser enviado. Necesitarás unha conta de GitHub para comunicarte ou facer cambios se se solicitan, pero non é estritamente necesario."
     },
     },
     "noteLicense": {
     "noteLicense": {
-      "pre": "",
-      "link": "",
-      "post": ""
+      "pre": "Ao enviar, estás de acordo con que a biblioteca sexa publicada baixo a ",
+      "link": "Licenza MIT, ",
+      "post": "o cal significa que, en resumo, calquera pode usalo sen restricións."
     },
     },
-    "noteItems": "",
-    "atleastOneLibItem": "",
-    "republishWarning": ""
+    "noteItems": "Cada elemento da biblioteca debe ter o seu nome propio para que se poida filtrar. Os seguintes elementos da biblioteca serán incluídos:",
+    "atleastOneLibItem": "Por favor seleccione polo menos un elemento da biblioteca para comezar",
+    "republishWarning": "Nota: algúns dos elementos seleccionados están marcados como xa publicados/enviados. Só deberías reenviar elementos cando se actualice unha biblioteca ou envío."
   },
   },
   "publishSuccessDialog": {
   "publishSuccessDialog": {
-    "title": "",
-    "content": "",
-    "link": ""
+    "title": "Biblioteca enviada",
+    "content": "Grazas {{authorName}}. A súa biblioteca foi enviada para ser revisada. Pode seguir o estado",
+    "link": "aquí"
   },
   },
   "confirmDialog": {
   "confirmDialog": {
-    "resetLibrary": "",
-    "removeItemsFromLib": ""
+    "resetLibrary": "Restablecer biblioteca",
+    "removeItemsFromLib": "Eliminar os elementos seleccionados da biblioteca"
   },
   },
   "encrypted": {
   "encrypted": {
-    "tooltip": "",
-    "link": ""
+    "tooltip": "Os teus debuxos están cifrados de punto a punto, polo que os servidores de Excalidraw nunca os verán.",
+    "link": "Entrada do blog acerca do cifrado de punto a punto en Excalidraw"
   },
   },
   "stats": {
   "stats": {
-    "angle": "",
-    "element": "",
-    "elements": "",
-    "height": "",
-    "scene": "",
-    "selected": "",
-    "storage": "",
-    "title": "",
-    "total": "",
-    "version": "",
-    "versionCopy": "",
-    "versionNotAvailable": "",
-    "width": ""
+    "angle": "Ángulo",
+    "element": "Elemento",
+    "elements": "Elementos",
+    "height": "Alto",
+    "scene": "Escena",
+    "selected": "Seleccionado",
+    "storage": "Almacenamento",
+    "title": "Estadísticas para nerds",
+    "total": "Total",
+    "version": "Versión",
+    "versionCopy": "Faga clic para copiar",
+    "versionNotAvailable": "Versión non dispoñible",
+    "width": "Ancho"
   },
   },
   "toast": {
   "toast": {
-    "addedToLibrary": "",
-    "copyStyles": "",
-    "copyToClipboard": "",
-    "copyToClipboardAsPng": "",
-    "fileSaved": "",
-    "fileSavedToFilename": "",
-    "canvas": "",
-    "selection": ""
+    "addedToLibrary": "Engadido á biblioteca",
+    "copyStyles": "Estilos copiados.",
+    "copyToClipboard": "Copiado ao portapapeis.",
+    "copyToClipboardAsPng": "Copiar {{exportSelection}} ao portapapeis como PNG\n({{exportColorScheme}})",
+    "fileSaved": "Ficheiro gardado.",
+    "fileSavedToFilename": "Gardado en {filename}",
+    "canvas": "lenzo",
+    "selection": "selección",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
-    "ffffff": "",
-    "f8f9fa": "",
-    "f1f3f5": "",
-    "fff5f5": "",
-    "fff0f6": "",
-    "f8f0fc": "",
-    "f3f0ff": "",
-    "edf2ff": "",
-    "e7f5ff": "",
-    "e3fafc": "",
-    "e6fcf5": "",
-    "ebfbee": "",
-    "f4fce3": "",
-    "fff9db": "",
-    "fff4e6": "",
-    "transparent": "",
-    "ced4da": "",
-    "868e96": "",
-    "fa5252": "",
-    "e64980": "",
-    "be4bdb": "",
-    "7950f2": "",
-    "4c6ef5": "",
-    "228be6": "",
-    "15aabf": "",
-    "12b886": "",
-    "40c057": "",
-    "82c91e": "",
-    "fab005": "",
-    "fd7e14": "",
-    "000000": "",
-    "343a40": "",
-    "495057": "",
-    "c92a2a": "",
-    "a61e4d": "",
-    "862e9c": "",
-    "5f3dc4": "",
-    "364fc7": "",
-    "1864ab": "",
-    "0b7285": "",
-    "087f5b": "",
-    "2b8a3e": "",
-    "5c940d": "",
-    "e67700": "",
-    "d9480f": ""
+    "ffffff": "Branco",
+    "f8f9fa": "Gris 0",
+    "f1f3f5": "Gris 1",
+    "fff5f5": "Vermello 0",
+    "fff0f6": "Rosa 0",
+    "f8f0fc": "Uva 0",
+    "f3f0ff": "Violeta 0",
+    "edf2ff": "Índigo 0",
+    "e7f5ff": "Azul 0",
+    "e3fafc": "Ciano 0",
+    "e6fcf5": "Turquesa 0",
+    "ebfbee": "Verde 0",
+    "f4fce3": "Lima 0",
+    "fff9db": "Amarelo 0",
+    "fff4e6": "Laranxa 0",
+    "transparent": "Transparente",
+    "ced4da": "Gris 4",
+    "868e96": "Gris 6",
+    "fa5252": "Vermello 6",
+    "e64980": "Rosa 6",
+    "be4bdb": "Uva 6",
+    "7950f2": "Violeta 6",
+    "4c6ef5": "Índigo 6",
+    "228be6": "Azul 6",
+    "15aabf": "Ciano 6",
+    "12b886": "Turquesa 6",
+    "40c057": "Verde 6",
+    "82c91e": "Lima 6",
+    "fab005": "Amarelo 6",
+    "fd7e14": "Laranxa 6",
+    "000000": "Negro",
+    "343a40": "Gris 8",
+    "495057": "Gris 7",
+    "c92a2a": "Vermello 9",
+    "a61e4d": "Rosa 9",
+    "862e9c": "Uva 9",
+    "5f3dc4": "Violeta 9",
+    "364fc7": "Índigo 9",
+    "1864ab": "Azul 9",
+    "0b7285": "Ciano 9",
+    "087f5b": "Turquesa 9",
+    "2b8a3e": "Verde 9",
+    "5c940d": "Lima 9",
+    "e67700": "Amarelo 9",
+    "d9480f": "Laranxa 9"
+  },
+  "welcomeScreen": {
+    "data": "Toda a información é gardada de maneira local no seu navegador.",
+    "switchToPlusApp": "Queres ir a Excalidraw+ no seu lugar?",
+    "menuHints": "Exportar, preferencias, idiomas, ...",
+    "toolbarHints": "Escolle unha ferramenta & Comeza a debuxar!",
+    "helpHints": "Atallos & axuda"
   }
   }
 }
 }

+ 18 - 7
src/locales/he-IL.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "הדבק",
     "paste": "הדבק",
+    "pasteAsPlaintext": "",
     "pasteCharts": "הדבק גרפים",
     "pasteCharts": "הדבק גרפים",
     "selectAll": "בחר הכל",
     "selectAll": "בחר הכל",
     "multiSelect": "הוסף אובייקט לבחירה",
     "multiSelect": "הוסף אובייקט לבחירה",
@@ -71,7 +72,7 @@
     "layers": "שכבות",
     "layers": "שכבות",
     "actions": "פעולות",
     "actions": "פעולות",
     "language": "שפה",
     "language": "שפה",
-    "liveCollaboration": "התחל שיתוף חי",
+    "liveCollaboration": "",
     "duplicateSelection": "שכפל",
     "duplicateSelection": "שכפל",
     "untitled": "ללא כותרת",
     "untitled": "ללא כותרת",
     "name": "שם",
     "name": "שם",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "אפס את הלוח",
     "clearReset": "אפס את הלוח",
     "exportJSON": "ייצא לקובץ",
     "exportJSON": "ייצא לקובץ",
-    "exportImage": "שמירה כתמונה",
-    "export": "ייצא",
+    "exportImage": "ייצוא התמונה...",
+    "export": "שמור ל...",
     "exportToPng": "יצא ל PNG",
     "exportToPng": "יצא ל PNG",
     "exportToSvg": "יצא ל SVG",
     "exportToSvg": "יצא ל SVG",
     "copyToClipboard": "העתק ללוח",
     "copyToClipboard": "העתק ללוח",
@@ -144,7 +145,7 @@
     "scale": "קנה מידה",
     "scale": "קנה מידה",
     "save": "שמירת קובץ נוכחי",
     "save": "שמירת קובץ נוכחי",
     "saveAs": "שמירה בשם",
     "saveAs": "שמירה בשם",
-    "load": "טען",
+    "load": "פתח",
     "getShareableLink": "קבל קישור לשיתוף",
     "getShareableLink": "קבל קישור לשיתוף",
     "close": "סגור",
     "close": "סגור",
     "selectLanguage": "בחר שפה",
     "selectLanguage": "בחר שפה",
@@ -235,7 +236,7 @@
     "resize": "ניתן להגביל פרופורציות על ידי לחיצה על SHIFT תוך כדי שינוי גודל,\nהחזק ALT בשביל לשנות גודל ביחס למרכז",
     "resize": "ניתן להגביל פרופורציות על ידי לחיצה על SHIFT תוך כדי שינוי גודל,\nהחזק ALT בשביל לשנות גודל ביחס למרכז",
     "resizeImage": "",
     "resizeImage": "",
     "rotate": "ניתן להגביל זוויות על ידי לחיצה על SHIFT תוך כדי סיבוב",
     "rotate": "ניתן להגביל זוויות על ידי לחיצה על SHIFT תוך כדי סיבוב",
-    "lineEditor_info": "לחץ לחיצה כפולה או אנטר לעריכת הנקודות",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "",
     "lineEditor_pointSelected": "",
     "lineEditor_nothingSelected": "",
     "lineEditor_nothingSelected": "",
     "placeImage": "",
     "placeImage": "",
@@ -310,7 +311,9 @@
     "view": "תצוגה",
     "view": "תצוגה",
     "zoomToFit": "גלילה להצגת כל האלמנטים במסך",
     "zoomToFit": "גלילה להצגת כל האלמנטים במסך",
     "zoomToSelection": "התמקד בבחירה",
     "zoomToSelection": "התמקד בבחירה",
-    "toggleElementLock": "נעילה/ביטול הנעילה של הרכיבים הנבחרים"
+    "toggleElementLock": "נעילה/ביטול הנעילה של הרכיבים הנבחרים",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "ניקוי הקנבס"
     "title": "ניקוי הקנבס"
@@ -391,7 +394,8 @@
     "fileSaved": "קובץ נשמר.",
     "fileSaved": "קובץ נשמר.",
     "fileSavedToFilename": "נשמר לקובץ {filename}",
     "fileSavedToFilename": "נשמר לקובץ {filename}",
     "canvas": "משטח ציור",
     "canvas": "משטח ציור",
-    "selection": "בחירה"
+    "selection": "בחירה",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "לבן",
     "ffffff": "לבן",
@@ -439,5 +443,12 @@
     "5c940d": "ליים 9",
     "5c940d": "ליים 9",
     "e67700": "ירוק 9",
     "e67700": "ירוק 9",
     "d9480f": "כתום 9"
     "d9480f": "כתום 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 20 - 9
src/locales/hi-IN.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "चिपकाएँ",
     "paste": "चिपकाएँ",
+    "pasteAsPlaintext": "",
     "pasteCharts": "चार्ट चिपकाएँ",
     "pasteCharts": "चार्ट चिपकाएँ",
     "selectAll": "सभी चुनें",
     "selectAll": "सभी चुनें",
     "multiSelect": "आकार को चयन में जोड़ें",
     "multiSelect": "आकार को चयन में जोड़ें",
@@ -52,7 +53,7 @@
     "large": "बड़ा",
     "large": "बड़ा",
     "veryLarge": "बहुत बड़ा",
     "veryLarge": "बहुत बड़ा",
     "solid": "दृढ़",
     "solid": "दृढ़",
-    "hachure": "हाचुरे",
+    "hachure": "हैशूर",
     "crossHatch": "क्रॉस हैच",
     "crossHatch": "क्रॉस हैच",
     "thin": "पतला",
     "thin": "पतला",
     "bold": "मोटा",
     "bold": "मोटा",
@@ -71,7 +72,7 @@
     "layers": "परतें",
     "layers": "परतें",
     "actions": "कार्रवाई",
     "actions": "कार्रवाई",
     "language": "भाषा",
     "language": "भाषा",
-    "liveCollaboration": "जीवंत सहयोग",
+    "liveCollaboration": "जीवंत सहयोग...",
     "duplicateSelection": "डुप्लिकेट",
     "duplicateSelection": "डुप्लिकेट",
     "untitled": "अशीर्षित",
     "untitled": "अशीर्षित",
     "name": "नाम",
     "name": "नाम",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "कैनवास रीसेट करें",
     "clearReset": "कैनवास रीसेट करें",
     "exportJSON": "",
     "exportJSON": "",
-    "exportImage": "",
-    "export": "निर्यात",
+    "exportImage": "प्रतिमा निर्यात करे...",
+    "export": "यंहा सुरक्षित करे...",
     "exportToPng": "पीएनजी के रूप में निर्यात करे",
     "exportToPng": "पीएनजी के रूप में निर्यात करे",
     "exportToSvg": "Svg के रूप में निर्यात करे",
     "exportToSvg": "Svg के रूप में निर्यात करे",
     "copyToClipboard": "क्लिपबोर्ड पर प्रतिलिपि बनाएँ",
     "copyToClipboard": "क्लिपबोर्ड पर प्रतिलिपि बनाएँ",
@@ -144,7 +145,7 @@
     "scale": "पैमाना",
     "scale": "पैमाना",
     "save": "",
     "save": "",
     "saveAs": "सेव करे इस तरह",
     "saveAs": "सेव करे इस तरह",
-    "load": "लोड करें",
+    "load": "खोलें",
     "getShareableLink": "साझा करने योग्य लिंक प्राप्त करें",
     "getShareableLink": "साझा करने योग्य लिंक प्राप्त करें",
     "close": "बंद करें",
     "close": "बंद करें",
     "selectLanguage": "भाषा चुनें",
     "selectLanguage": "भाषा चुनें",
@@ -214,7 +215,7 @@
     "text": "पाठ",
     "text": "पाठ",
     "library": "लाइब्रेरी",
     "library": "लाइब्रेरी",
     "lock": "ड्राइंग के बाद चयनित टूल को सक्रिय रखें",
     "lock": "ड्राइंग के बाद चयनित टूल को सक्रिय रखें",
-    "penMode": "",
+    "penMode": "पेन का मोड - स्पर्श टाले",
     "link": "",
     "link": "",
     "eraser": "रबड़"
     "eraser": "रबड़"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "आकार बदलते समय आप SHIFT को पकड़ कर अनुपात में कमी कर सकते हैं,\nकेंद्र से आकार बदलने के लिए ALT दबाए रखें",
     "resize": "आकार बदलते समय आप SHIFT को पकड़ कर अनुपात में कमी कर सकते हैं,\nकेंद्र से आकार बदलने के लिए ALT दबाए रखें",
     "resizeImage": "",
     "resizeImage": "",
     "rotate": "आप घूर्णन करते समय SHIFT पकड़कर कोणों को विवश कर सकते हैं",
     "rotate": "आप घूर्णन करते समय SHIFT पकड़कर कोणों को विवश कर सकते हैं",
-    "lineEditor_info": "बिंदुओं को संपादित करने के लिए Enter पर डबल-क्लिक करें या दबाएँ",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "",
     "lineEditor_pointSelected": "",
     "lineEditor_nothingSelected": "",
     "lineEditor_nothingSelected": "",
     "placeImage": "",
     "placeImage": "",
@@ -310,7 +311,9 @@
     "view": "दृश्य",
     "view": "दृश्य",
     "zoomToFit": "सभी तत्वों को फिट करने के लिए ज़ूम करें",
     "zoomToFit": "सभी तत्वों को फिट करने के लिए ज़ूम करें",
     "zoomToSelection": "चयन तक ज़ूम करे",
     "zoomToSelection": "चयन तक ज़ूम करे",
-    "toggleElementLock": "ताले के अंदर/बाहर चुनाव"
+    "toggleElementLock": "ताले के अंदर/बाहर चुनाव",
+    "movePageUpDown": "पृष्ठ ऊपर/नीचे करे",
+    "movePageLeftRight": "पृष्ठ बायी/दायी तरफ करे"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": ""
     "title": ""
@@ -391,7 +394,8 @@
     "fileSaved": "",
     "fileSaved": "",
     "fileSavedToFilename": "",
     "fileSavedToFilename": "",
     "canvas": "",
     "canvas": "",
-    "selection": ""
+    "selection": "",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "सफेद",
     "ffffff": "सफेद",
@@ -439,5 +443,12 @@
     "5c940d": "",
     "5c940d": "",
     "e67700": "पीला",
     "e67700": "पीला",
     "d9480f": "नारंगी"
     "d9480f": "नारंगी"
+  },
+  "welcomeScreen": {
+    "data": "आपका सर्व डेटा ब्राउज़र के भीतर स्थानिक जगह पे सुरक्षित किया गया.",
+    "switchToPlusApp": "बजाय आपको Excalidraw+ जगह जाना है?",
+    "menuHints": "निर्यात, पसंद, भाषायें, ...",
+    "toolbarHints": "औजार चुने और चित्रकारी प्रारंभ करे!",
+    "helpHints": "शॉर्ट्कट & सहाय्य"
   }
   }
 }
 }

+ 17 - 12
src/locales/hu-HU.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Beillesztés",
     "paste": "Beillesztés",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Grafikon beillesztése",
     "pasteCharts": "Grafikon beillesztése",
     "selectAll": "Összes kijelölése",
     "selectAll": "Összes kijelölése",
     "multiSelect": "Elem hozzáadása a kijelöléshez",
     "multiSelect": "Elem hozzáadása a kijelöléshez",
@@ -71,7 +72,7 @@
     "layers": "Rétegek",
     "layers": "Rétegek",
     "actions": "Műveletek",
     "actions": "Műveletek",
     "language": "Nyelv",
     "language": "Nyelv",
-    "liveCollaboration": "Élő együttműködés",
+    "liveCollaboration": "",
     "duplicateSelection": "Duplikálás",
     "duplicateSelection": "Duplikálás",
     "untitled": "Névtelen",
     "untitled": "Névtelen",
     "name": "Név",
     "name": "Név",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Vászon törlése",
     "clearReset": "Vászon törlése",
     "exportJSON": "Exportálás fájlba",
     "exportJSON": "Exportálás fájlba",
-    "exportImage": "Mentés képként",
-    "export": "Exportálás",
+    "exportImage": "",
+    "export": "",
     "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",
@@ -144,7 +145,7 @@
     "scale": "Nagyítás",
     "scale": "Nagyítás",
     "save": "Mentés az aktuális fájlba",
     "save": "Mentés az aktuális fájlba",
     "saveAs": "Mentés másként",
     "saveAs": "Mentés másként",
-    "load": "Betöltés",
+    "load": "",
     "getShareableLink": "Megosztható link létrehozása",
     "getShareableLink": "Megosztható link létrehozása",
     "close": "Bezárás",
     "close": "Bezárás",
     "selectLanguage": "Nyelv kiválasztása",
     "selectLanguage": "Nyelv kiválasztása",
@@ -214,7 +215,7 @@
     "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",
-    "penMode": "Akadályozza meg a kicsinyítést, és csak tollról fogadja el a szabadkézi bevitelt",
+    "penMode": "",
     "link": "Hivatkozás hozzáadása/frissítése a kiválasztott alakzathoz",
     "link": "Hivatkozás hozzáadása/frissítése a kiválasztott alakzathoz",
     "eraser": ""
     "eraser": ""
   },
   },
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "A SHIFT billentyű lenyomva tartásával szabadon átméretezheted,\ntartsd lenyomva az ALT billentyűt a középről való átméretezéshez",
     "resizeImage": "A SHIFT billentyű lenyomva tartásával szabadon átméretezheted,\ntartsd lenyomva az ALT billentyűt a középről való átméretezéshez",
     "rotate": "A SHIFT billentyű lenyomva tartásával korlátozhatja a szögek illesztését",
     "rotate": "A SHIFT billentyű lenyomva tartásával korlátozhatja a szögek illesztését",
-    "lineEditor_info": "Kattints duplán, vagy nyomj entert a pontok szerkesztéséhez",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Nyomd meg a Törlés gombot a pont(ok) eltávolításához,\nA Ctrl/Cmd+D a többszörözéshez, vagy húzással mozgathatja",
     "lineEditor_pointSelected": "Nyomd meg a Törlés gombot a pont(ok) eltávolításához,\nA Ctrl/Cmd+D a többszörözéshez, vagy húzással mozgathatja",
     "lineEditor_nothingSelected": "Válaszd ki a szerkeszteni kívánt pontot (több kijelöléséhez tartsd lenyomva a SHIFT billentyűt),\nvagy Alt, és kattintson az új pontok hozzáadásához",
     "lineEditor_nothingSelected": "Válaszd ki a szerkeszteni kívánt pontot (több kijelöléséhez tartsd lenyomva a SHIFT billentyűt),\nvagy Alt, és kattintson az új pontok hozzáadásához",
     "placeImage": "Kattints a kép elhelyezéséhez, vagy kattints és méretezd manuálisan",
     "placeImage": "Kattints a kép elhelyezéséhez, vagy kattints és méretezd manuálisan",
@@ -310,7 +311,9 @@
     "view": "Nézet",
     "view": "Nézet",
     "zoomToFit": "Az összes elem látótérbe hozása",
     "zoomToFit": "Az összes elem látótérbe hozása",
     "zoomToSelection": "Kijelölésre nagyítás",
     "zoomToSelection": "Kijelölésre nagyítás",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Rajzvászon alaphelyzetbe"
     "title": "Rajzvászon alaphelyzetbe"
@@ -391,7 +394,8 @@
     "fileSaved": "Fájl elmentve.",
     "fileSaved": "Fájl elmentve.",
     "fileSavedToFilename": "Mentve mint {filename}",
     "fileSavedToFilename": "Mentve mint {filename}",
     "canvas": "rajzvászon",
     "canvas": "rajzvászon",
-    "selection": "kijelölés"
+    "selection": "kijelölés",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Fehér",
     "ffffff": "Fehér",
@@ -441,9 +445,10 @@
     "d9480f": "Narancs 9"
     "d9480f": "Narancs 9"
   },
   },
   "welcomeScreen": {
   "welcomeScreen": {
-    "data": "Minden adatodat kizárólag a böngésződben tároljuk.",
-    "menuHints": "Export, beállítások, nyelvek, ...",
-    "toolbarHints": "Válassz egy eszközt & kezdj alkotni!",
-    "helpHints": "Gyorsbillentyűk & súgó"
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/id-ID.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Tempel",
     "paste": "Tempel",
+    "pasteAsPlaintext": "Tempel sebagai teks biasa",
     "pasteCharts": "Tempel diagram",
     "pasteCharts": "Tempel diagram",
     "selectAll": "Pilih semua",
     "selectAll": "Pilih semua",
     "multiSelect": "Tambahkan elemen ke pilihan",
     "multiSelect": "Tambahkan elemen ke pilihan",
@@ -71,7 +72,7 @@
     "layers": "Lapisan",
     "layers": "Lapisan",
     "actions": "Aksi",
     "actions": "Aksi",
     "language": "Bahasa",
     "language": "Bahasa",
-    "liveCollaboration": "Kolaborasi langsung",
+    "liveCollaboration": "Kolaborasi langsung...",
     "duplicateSelection": "Duplikat",
     "duplicateSelection": "Duplikat",
     "untitled": "Tanpa judul",
     "untitled": "Tanpa judul",
     "name": "Nama",
     "name": "Nama",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Setel Ulang Kanvas",
     "clearReset": "Setel Ulang Kanvas",
     "exportJSON": "Ekspor ke file",
     "exportJSON": "Ekspor ke file",
-    "exportImage": "Simpan gambar",
-    "export": "Ekspor",
+    "exportImage": "Ekspor gambar...",
+    "export": "Simpan ke...",
     "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",
@@ -144,7 +145,7 @@
     "scale": "Skala",
     "scale": "Skala",
     "save": "Simpan ke file sekarang",
     "save": "Simpan ke file sekarang",
     "saveAs": "Simpan sebagai",
     "saveAs": "Simpan sebagai",
-    "load": "Muat",
+    "load": "Buka",
     "getShareableLink": "Buat Tautan yang Bisa Dibagian",
     "getShareableLink": "Buat Tautan yang Bisa Dibagian",
     "close": "Tutup",
     "close": "Tutup",
     "selectLanguage": "Pilih bahasa",
     "selectLanguage": "Pilih bahasa",
@@ -214,7 +215,7 @@
     "text": "Teks",
     "text": "Teks",
     "library": "Pustaka",
     "library": "Pustaka",
     "lock": "Biarkan alat yang dipilih aktif setelah menggambar",
     "lock": "Biarkan alat yang dipilih aktif setelah menggambar",
-    "penMode": "Cegah jepit perbesar dan terima hanya input freedraw dari pena",
+    "penMode": "Mode pena - mencegah sentuhan",
     "link": "Tambah/Perbarui tautan untuk bentuk yang dipilih",
     "link": "Tambah/Perbarui tautan untuk bentuk yang dipilih",
     "eraser": "Penghapus"
     "eraser": "Penghapus"
   },
   },
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Anda dapat mengubah secara bebas dengan menekan SHIFT,\nTekan ALT untuk mengubah dari tengah",
     "resizeImage": "Anda dapat mengubah secara bebas dengan menekan SHIFT,\nTekan ALT untuk mengubah dari tengah",
     "rotate": "Anda dapat menjaga sudut dengan menahan SHIFT sambil memutar",
     "rotate": "Anda dapat menjaga sudut dengan menahan SHIFT sambil memutar",
-    "lineEditor_info": "Klik ganda atau tekan Enter untuk mengedit titik",
+    "lineEditor_info": "Tekan Ctrl/Cmd dan Dobel-klik atau tekan Ctrl/Cmd +Enter untuk mengedit poin",
     "lineEditor_pointSelected": "Tekan Delete untuk menghapus titik, Ctrl/Cmd + D untuk menduplikasi, atau seret untuk memindahkan",
     "lineEditor_pointSelected": "Tekan Delete untuk menghapus titik, Ctrl/Cmd + D untuk menduplikasi, atau seret untuk memindahkan",
     "lineEditor_nothingSelected": "Pilih titik untuk mengedit (tekan SHIFT untuk pilih banyak), atau tekan Alt dan klik untuk tambahkan titik baru",
     "lineEditor_nothingSelected": "Pilih titik untuk mengedit (tekan SHIFT untuk pilih banyak), atau tekan Alt dan klik untuk tambahkan titik baru",
     "placeImage": "Klik untuk tempatkan gambar, atau klik dan jatuhkan untuk tetapkan ukuran secara manual",
     "placeImage": "Klik untuk tempatkan gambar, atau klik dan jatuhkan untuk tetapkan ukuran secara manual",
@@ -310,7 +311,9 @@
     "view": "Tampilan",
     "view": "Tampilan",
     "zoomToFit": "Perbesar agar sesuai dengan semua elemen",
     "zoomToFit": "Perbesar agar sesuai dengan semua elemen",
     "zoomToSelection": "Perbesar ke seleksi",
     "zoomToSelection": "Perbesar ke seleksi",
-    "toggleElementLock": "Kunci/lepas seleksi"
+    "toggleElementLock": "Kunci/lepas seleksi",
+    "movePageUpDown": "Pindah halaman keatas/kebawah",
+    "movePageLeftRight": "Pindah halaman kebawah/keatas"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Hapus kanvas"
     "title": "Hapus kanvas"
@@ -391,7 +394,8 @@
     "fileSaved": "File tersimpan.",
     "fileSaved": "File tersimpan.",
     "fileSavedToFilename": "Disimpan ke {filename}",
     "fileSavedToFilename": "Disimpan ke {filename}",
     "canvas": "kanvas",
     "canvas": "kanvas",
-    "selection": "pilihan"
+    "selection": "pilihan",
+    "pasteAsSingleElement": "Gunakan {{shortcut}} untuk menempelkan sebagai satu elemen,\natau tempelkan ke teks editor yang ada"
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Putih",
     "ffffff": "Putih",
@@ -439,5 +443,12 @@
     "5c940d": "Lime 9",
     "5c940d": "Lime 9",
     "e67700": "Kuning 9",
     "e67700": "Kuning 9",
     "d9480f": "Jingga 9"
     "d9480f": "Jingga 9"
+  },
+  "welcomeScreen": {
+    "data": "Semua data Anda tersimpan secara lokal di browser.",
+    "switchToPlusApp": "Apa Anda ingin berpindah ke Excalidraw+?",
+    "menuHints": "Ekspor, preferensi, bahasa, ...",
+    "toolbarHints": "Ambil alat & mulai menggambar!",
+    "helpHints": "Pintasan & bantuan"
   }
   }
 }
 }

+ 19 - 8
src/locales/it-IT.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Incolla",
     "paste": "Incolla",
+    "pasteAsPlaintext": "Incolla come testo normale",
     "pasteCharts": "Incolla grafici",
     "pasteCharts": "Incolla grafici",
     "selectAll": "Seleziona tutto",
     "selectAll": "Seleziona tutto",
     "multiSelect": "Aggiungi elemento alla selezione",
     "multiSelect": "Aggiungi elemento alla selezione",
@@ -71,7 +72,7 @@
     "layers": "Livelli",
     "layers": "Livelli",
     "actions": "Azioni",
     "actions": "Azioni",
     "language": "Lingua",
     "language": "Lingua",
-    "liveCollaboration": "Collaborazione live",
+    "liveCollaboration": "Collaborazione dal vivo...",
     "duplicateSelection": "Duplica",
     "duplicateSelection": "Duplica",
     "untitled": "Senza titolo",
     "untitled": "Senza titolo",
     "name": "Nome",
     "name": "Nome",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Svuota la tela",
     "clearReset": "Svuota la tela",
     "exportJSON": "Esporta su file",
     "exportJSON": "Esporta su file",
-    "exportImage": "Salva come immagine",
-    "export": "Esporta",
+    "exportImage": "Esporta immagine...",
+    "export": "Salva in...",
     "exportToPng": "Esporta come PNG",
     "exportToPng": "Esporta come PNG",
     "exportToSvg": "Esporta come SVG",
     "exportToSvg": "Esporta come SVG",
     "copyToClipboard": "Copia negli appunti",
     "copyToClipboard": "Copia negli appunti",
@@ -144,7 +145,7 @@
     "scale": "Scala",
     "scale": "Scala",
     "save": "Salva sul file corrente",
     "save": "Salva sul file corrente",
     "saveAs": "Salva con nome",
     "saveAs": "Salva con nome",
-    "load": "Carica",
+    "load": "Apri",
     "getShareableLink": "Ottieni link condivisibile",
     "getShareableLink": "Ottieni link condivisibile",
     "close": "Chiudi",
     "close": "Chiudi",
     "selectLanguage": "Seleziona lingua",
     "selectLanguage": "Seleziona lingua",
@@ -214,7 +215,7 @@
     "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",
-    "penMode": "Impedisci il pinch-zoom e accetta l'input di disegno libero solo dalla penna",
+    "penMode": "Modalità penna - previene il tocco",
     "link": "Aggiungi/ aggiorna il link per una forma selezionata",
     "link": "Aggiungi/ aggiorna il link per una forma selezionata",
     "eraser": "Gomma"
     "eraser": "Gomma"
   },
   },
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Puoi ridimensionare liberamente tenendo premuto SHIFT,\ntieni premuto ALT per ridimensionare dal centro",
     "resizeImage": "Puoi ridimensionare liberamente tenendo premuto SHIFT,\ntieni premuto ALT per ridimensionare dal centro",
     "rotate": "Puoi mantenere gli angoli tenendo premuto SHIFT durante la rotazione",
     "rotate": "Puoi mantenere gli angoli tenendo premuto SHIFT durante la rotazione",
-    "lineEditor_info": "Fai doppio click o premi invio per modificare i punti",
+    "lineEditor_info": "Tieni premuto Ctrl o Cmd e doppio clic oppure premi Ctrl o Cmd + Invio per modificare i punti",
     "lineEditor_pointSelected": "Premi Elimina per rimuovere il punto(i),\nCtrlOCmd+D per duplicare o trascinare per spostare",
     "lineEditor_pointSelected": "Premi Elimina per rimuovere il punto(i),\nCtrlOCmd+D per duplicare o trascinare per spostare",
     "lineEditor_nothingSelected": "Seleziona un punto da modificare (tieni premuto MAIUSC per selezionare più punti),\noppure tieni premuto Alt e fai clic per aggiungere nuovi punti",
     "lineEditor_nothingSelected": "Seleziona un punto da modificare (tieni premuto MAIUSC per selezionare più punti),\noppure tieni premuto Alt e fai clic per aggiungere nuovi punti",
     "placeImage": "Fai click per posizionare l'immagine, o click e trascina per impostarne la dimensione manualmente",
     "placeImage": "Fai click per posizionare l'immagine, o click e trascina per impostarne la dimensione manualmente",
@@ -310,7 +311,9 @@
     "view": "Vista",
     "view": "Vista",
     "zoomToFit": "Adatta zoom per mostrare tutti gli elementi",
     "zoomToFit": "Adatta zoom per mostrare tutti gli elementi",
     "zoomToSelection": "Zoom alla selezione",
     "zoomToSelection": "Zoom alla selezione",
-    "toggleElementLock": "Blocca/sblocca selezione"
+    "toggleElementLock": "Blocca/sblocca selezione",
+    "movePageUpDown": "Sposta la pagina su/giù",
+    "movePageLeftRight": "Sposta la pagina a sinistra/destra"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Svuota la tela"
     "title": "Svuota la tela"
@@ -391,7 +394,8 @@
     "fileSaved": "File salvato.",
     "fileSaved": "File salvato.",
     "fileSavedToFilename": "Salvato in {filename}",
     "fileSavedToFilename": "Salvato in {filename}",
     "canvas": "tela",
     "canvas": "tela",
-    "selection": "selezione"
+    "selection": "selezione",
+    "pasteAsSingleElement": "Usa {{shortcut}} per incollare come un singolo elemento,\no incollare in un editor di testo esistente"
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Bianco",
     "ffffff": "Bianco",
@@ -439,5 +443,12 @@
     "5c940d": "Lime 9",
     "5c940d": "Lime 9",
     "e67700": "Giallo 9",
     "e67700": "Giallo 9",
     "d9480f": "Arancio 9"
     "d9480f": "Arancio 9"
+  },
+  "welcomeScreen": {
+    "data": "Tutti i tuoi dati sono salvati localmente nel browser.",
+    "switchToPlusApp": "Volevi invece andare su Excalidraw+?",
+    "menuHints": "Esporta, preferenze, lingue, ...",
+    "toolbarHints": "Scegli uno strumento & Inizia a disegnare!",
+    "helpHints": "Scorciatoie & aiuto"
   }
   }
 }
 }

+ 21 - 10
src/locales/ja-JP.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "貼り付け",
     "paste": "貼り付け",
+    "pasteAsPlaintext": "",
     "pasteCharts": "チャートの貼り付け",
     "pasteCharts": "チャートの貼り付け",
     "selectAll": "すべて選択",
     "selectAll": "すべて選択",
     "multiSelect": "複数選択",
     "multiSelect": "複数選択",
@@ -71,7 +72,7 @@
     "layers": "レイヤー",
     "layers": "レイヤー",
     "actions": "操作",
     "actions": "操作",
     "language": "言語",
     "language": "言語",
-    "liveCollaboration": "共同編集",
+    "liveCollaboration": "共同編集...",
     "duplicateSelection": "複製",
     "duplicateSelection": "複製",
     "untitled": "無題",
     "untitled": "無題",
     "name": "名前",
     "name": "名前",
@@ -115,8 +116,8 @@
       "label": "リンク"
       "label": "リンク"
     },
     },
     "lineEditor": {
     "lineEditor": {
-      "edit": "",
-      "exit": ""
+      "edit": "行を編集",
+      "exit": "行エディタを終了"
     },
     },
     "elementLock": {
     "elementLock": {
       "lock": "ロック",
       "lock": "ロック",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "キャンバスのリセット",
     "clearReset": "キャンバスのリセット",
     "exportJSON": "ファイルへエクスポート",
     "exportJSON": "ファイルへエクスポート",
-    "exportImage": "画像として保存",
-    "export": "エクスポート",
+    "exportImage": "画像のエクスポート...",
+    "export": "名前を付けて保存...",
     "exportToPng": "PNG にエクスポート",
     "exportToPng": "PNG にエクスポート",
     "exportToSvg": "SVG にエクスポート",
     "exportToSvg": "SVG にエクスポート",
     "copyToClipboard": "クリップボードにコピー",
     "copyToClipboard": "クリップボードにコピー",
@@ -144,7 +145,7 @@
     "scale": "スケール",
     "scale": "スケール",
     "save": "現在のファイルに保存",
     "save": "現在のファイルに保存",
     "saveAs": "名前を付けて保存",
     "saveAs": "名前を付けて保存",
-    "load": "読み込み...",
+    "load": "開く",
     "getShareableLink": "共有URLの取得",
     "getShareableLink": "共有URLの取得",
     "close": "閉じる",
     "close": "閉じる",
     "selectLanguage": "言語の選択",
     "selectLanguage": "言語の選択",
@@ -214,7 +215,7 @@
     "text": "テキスト",
     "text": "テキスト",
     "library": "ライブラリ",
     "library": "ライブラリ",
     "lock": "描画後も使用中のツールを選択したままにする",
     "lock": "描画後も使用中のツールを選択したままにする",
-    "penMode": "ピンチとズームを抑止し、ペンからのみ自由な入力を受け付けます",
+    "penMode": "ペンモード - タッチ防止",
     "link": "選択した図形のリンクを追加/更新",
     "link": "選択した図形のリンクを追加/更新",
     "eraser": "消しゴム"
     "eraser": "消しゴム"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "サイズを変更中にSHIFTを押すと縦横比を固定できます。Altを押すと中央からサイズを変更できます",
     "resize": "サイズを変更中にSHIFTを押すと縦横比を固定できます。Altを押すと中央からサイズを変更できます",
     "resizeImage": "SHIFTを長押しすると自由にサイズを変更できます。\n中央からサイズを変更するにはALTを長押しします",
     "resizeImage": "SHIFTを長押しすると自由にサイズを変更できます。\n中央からサイズを変更するにはALTを長押しします",
     "rotate": "回転中にSHIFT キーを押すと角度を制限することができます",
     "rotate": "回転中にSHIFT キーを押すと角度を制限することができます",
-    "lineEditor_info": "ポイントを編集するには、ダブルクリックまたはEnterキーを押します",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Deleteキーを押すと点を削除、CtrlOrCmd+Dで複製、マウスドラッグで移動",
     "lineEditor_pointSelected": "Deleteキーを押すと点を削除、CtrlOrCmd+Dで複製、マウスドラッグで移動",
     "lineEditor_nothingSelected": "編集する点を選択(SHIFTを押したままで複数選択)、\nAltキーを押しながらクリックすると新しい点を追加",
     "lineEditor_nothingSelected": "編集する点を選択(SHIFTを押したままで複数選択)、\nAltキーを押しながらクリックすると新しい点を追加",
     "placeImage": "クリックして画像を配置するか、クリックしてドラッグしてサイズを手動で設定します",
     "placeImage": "クリックして画像を配置するか、クリックしてドラッグしてサイズを手動で設定します",
@@ -310,7 +311,9 @@
     "view": "表示",
     "view": "表示",
     "zoomToFit": "すべての要素が収まるようにズーム",
     "zoomToFit": "すべての要素が収まるようにズーム",
     "zoomToSelection": "選択要素にズーム",
     "zoomToSelection": "選択要素にズーム",
-    "toggleElementLock": "選択したアイテムをロック/ロック解除"
+    "toggleElementLock": "選択したアイテムをロック/ロック解除",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "キャンバスを消去"
     "title": "キャンバスを消去"
@@ -391,7 +394,8 @@
     "fileSaved": "ファイルを保存しました",
     "fileSaved": "ファイルを保存しました",
     "fileSavedToFilename": "{filename} に保存しました",
     "fileSavedToFilename": "{filename} に保存しました",
     "canvas": "キャンバス",
     "canvas": "キャンバス",
-    "selection": "選択"
+    "selection": "選択",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "ホワイト",
     "ffffff": "ホワイト",
@@ -439,5 +443,12 @@
     "5c940d": "ライム 9",
     "5c940d": "ライム 9",
     "e67700": "イエロー 9",
     "e67700": "イエロー 9",
     "d9480f": "オレンジ 9"
     "d9480f": "オレンジ 9"
+  },
+  "welcomeScreen": {
+    "data": "すべてのデータはブラウザにローカル保存されます。",
+    "switchToPlusApp": "代わりにExcalidraw+を開きますか?",
+    "menuHints": "エクスポート, 設定, 言語, ...",
+    "toolbarHints": "ツールを選んで描き始めよう!",
+    "helpHints": "ショートカットとヘルプ"
   }
   }
 }
 }

+ 24 - 13
src/locales/kab-KAB.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Senṭeḍ",
     "paste": "Senṭeḍ",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Senṭeḍ udlifen",
     "pasteCharts": "Senṭeḍ udlifen",
     "selectAll": "Fren akk",
     "selectAll": "Fren akk",
     "multiSelect": "Rnu aferdis ɣer tefrayt",
     "multiSelect": "Rnu aferdis ɣer tefrayt",
@@ -71,7 +72,7 @@
     "layers": "Tissiyin",
     "layers": "Tissiyin",
     "actions": "Tigawin",
     "actions": "Tigawin",
     "language": "Tutlayt",
     "language": "Tutlayt",
-    "liveCollaboration": "Amɛiwen s srid",
+    "liveCollaboration": "",
     "duplicateSelection": "Sisleg",
     "duplicateSelection": "Sisleg",
     "untitled": "War azwel",
     "untitled": "War azwel",
     "name": "Isem",
     "name": "Isem",
@@ -115,8 +116,8 @@
       "label": "Aseɣwen"
       "label": "Aseɣwen"
     },
     },
     "lineEditor": {
     "lineEditor": {
-      "edit": "",
-      "exit": ""
+      "edit": "Ẓreg izirig",
+      "exit": "Ffeɣ seg umaẓrag n yizirig"
     },
     },
     "elementLock": {
     "elementLock": {
       "lock": "Sekkeṛ",
       "lock": "Sekkeṛ",
@@ -125,18 +126,18 @@
       "unlockAll": "Serreḥ akk"
       "unlockAll": "Serreḥ akk"
     },
     },
     "statusPublished": "Yeffeɣ-d",
     "statusPublished": "Yeffeɣ-d",
-    "sidebarLock": ""
+    "sidebarLock": "Eǧǧ afeggag n yidis yeldi"
   },
   },
   "library": {
   "library": {
-    "noItems": "",
-    "hint_emptyLibrary": "",
-    "hint_emptyPrivateLibrary": ""
+    "noItems": "Ulac iferdisen yettwarnan yakan...",
+    "hint_emptyLibrary": "Fren aferdis di teɣzut nusuneɣ akken at-ternuḍ dagi, neɣ sbedd tamkarḍit seg usarsay azayez, ukessar-agi.",
+    "hint_emptyPrivateLibrary": "Fren aferdis di teɣzut nusuneɣ akken at-ternuḍ dagi."
   },
   },
   "buttons": {
   "buttons": {
     "clearReset": "Ales awennez n teɣzut n usuneɣ",
     "clearReset": "Ales awennez n teɣzut n usuneɣ",
     "exportJSON": "Sifeḍ afaylu",
     "exportJSON": "Sifeḍ afaylu",
-    "exportImage": "Sekles am tugna",
-    "export": "Sifeḍ",
+    "exportImage": "Sifeḍ tugna...",
+    "export": "Sekles di...",
     "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",
@@ -144,7 +145,7 @@
     "scale": "Taskala",
     "scale": "Taskala",
     "save": "Sekles deg ufaylu amiran",
     "save": "Sekles deg ufaylu amiran",
     "saveAs": "Sekles am",
     "saveAs": "Sekles am",
-    "load": "Sali-d",
+    "load": "Ldi",
     "getShareableLink": "Awi-d aseɣwen n beṭṭu",
     "getShareableLink": "Awi-d aseɣwen n beṭṭu",
     "close": "Mdel",
     "close": "Mdel",
     "selectLanguage": "Fren tutlayt",
     "selectLanguage": "Fren tutlayt",
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Tzemreḍ ad talseḍ tiddi s tilelli s tuṭṭfa n SHIFT,\nṭṭef ALT akken ad talseḍ tiddi si tlemmast",
     "resizeImage": "Tzemreḍ ad talseḍ tiddi s tilelli s tuṭṭfa n SHIFT,\nṭṭef ALT akken ad talseḍ tiddi si tlemmast",
     "rotate": "Tzemreḍ ad tḥettemeḍ tiɣemmar s tuṭṭfa n SHIFT di tuzzya",
     "rotate": "Tzemreḍ ad tḥettemeḍ tiɣemmar s tuṭṭfa n SHIFT di tuzzya",
-    "lineEditor_info": "Ssit snat n tikkal neɣ ssed taqeffalt Kcem akken ad tẓergeḍ tinqiḍin",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Ssed taqeffalt kkes akken ad tekkseḍ tanqiḍ (tinqiḍin),\nCtrlOrCmd+D akken ad tsiselgeḍ, neɣ zuɣer akken ad tesmuttiḍ",
     "lineEditor_pointSelected": "Ssed taqeffalt kkes akken ad tekkseḍ tanqiḍ (tinqiḍin),\nCtrlOrCmd+D akken ad tsiselgeḍ, neɣ zuɣer akken ad tesmuttiḍ",
     "lineEditor_nothingSelected": "Fren tanqiḍt akken ad tẓergeḍ (ṭṭef SHIFT akken ad tferneḍ aṭas),\nneɣ ṭṭef Alt akken ad ternuḍ tinqiḍin timaynutin",
     "lineEditor_nothingSelected": "Fren tanqiḍt akken ad tẓergeḍ (ṭṭef SHIFT akken ad tferneḍ aṭas),\nneɣ ṭṭef Alt akken ad ternuḍ tinqiḍin timaynutin",
     "placeImage": "Ssit akken ad tserseḍ tugna, neɣ ssit u zuɣer akken ad tesbaduḍ tiddi-ines s ufus",
     "placeImage": "Ssit akken ad tserseḍ tugna, neɣ ssit u zuɣer akken ad tesbaduḍ tiddi-ines s ufus",
@@ -310,7 +311,9 @@
     "view": "Tamuɣli",
     "view": "Tamuɣli",
     "zoomToFit": "Simɣur akken ad twliḍ akk iferdisen",
     "zoomToFit": "Simɣur akken ad twliḍ akk iferdisen",
     "zoomToSelection": "Simɣur ɣer tefrayt",
     "zoomToSelection": "Simɣur ɣer tefrayt",
-    "toggleElementLock": "Sekkeṛ/kkes asekker i tefrayt"
+    "toggleElementLock": "Sekkeṛ/kkes asekker i tefrayt",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Sfeḍ taɣzut n usuneɣ"
     "title": "Sfeḍ taɣzut n usuneɣ"
@@ -391,7 +394,8 @@
     "fileSaved": "Afaylu yettwasekles.",
     "fileSaved": "Afaylu yettwasekles.",
     "fileSavedToFilename": "Yettwasekles di {filename}",
     "fileSavedToFilename": "Yettwasekles di {filename}",
     "canvas": "taɣzut n usuneɣ",
     "canvas": "taɣzut n usuneɣ",
-    "selection": "tafrayt"
+    "selection": "tafrayt",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Amellal",
     "ffffff": "Amellal",
@@ -439,5 +443,12 @@
     "5c940d": "Llim 9",
     "5c940d": "Llim 9",
     "e67700": "Awraɣ 9",
     "e67700": "Awraɣ 9",
     "d9480f": "Aččinawi 9"
     "d9480f": "Aččinawi 9"
+  },
+  "welcomeScreen": {
+    "data": "Akk isefka-inek•inem ttwakelsen s wudem adigan deg yiminig-inek•inem.",
+    "switchToPlusApp": "Tebɣiḍ ad tedduḍ ɣer Excalidraw+ deg umḍiq?",
+    "menuHints": "Asifeḍ, ismenyifen, tutlayin, ...",
+    "toolbarHints": "Fren afecku tebduḍ asuneɣ!",
+    "helpHints": "Inegzumen akked tallelt"
   }
   }
 }
 }

+ 14 - 3
src/locales/kk-KZ.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Қою",
     "paste": "Қою",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Диаграммаларды қою",
     "pasteCharts": "Диаграммаларды қою",
     "selectAll": "Бәрін таңдау",
     "selectAll": "Бәрін таңдау",
     "multiSelect": "",
     "multiSelect": "",
@@ -136,7 +137,7 @@
     "clearReset": "",
     "clearReset": "",
     "exportJSON": "",
     "exportJSON": "",
     "exportImage": "",
     "exportImage": "",
-    "export": "Экспорт",
+    "export": "",
     "exportToPng": "",
     "exportToPng": "",
     "exportToSvg": "",
     "exportToSvg": "",
     "copyToClipboard": "",
     "copyToClipboard": "",
@@ -310,7 +311,9 @@
     "view": "Көру",
     "view": "Көру",
     "zoomToFit": "Барлық элементтердің көлеміне сәйкес үлкейту",
     "zoomToFit": "Барлық элементтердің көлеміне сәйкес үлкейту",
     "zoomToSelection": "Таңдалғанды үлкейту",
     "zoomToSelection": "Таңдалғанды үлкейту",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": ""
     "title": ""
@@ -391,7 +394,8 @@
     "fileSaved": "Файл сақталды.",
     "fileSaved": "Файл сақталды.",
     "fileSavedToFilename": "{filename} сақталды",
     "fileSavedToFilename": "{filename} сақталды",
     "canvas": "",
     "canvas": "",
-    "selection": "таңдау"
+    "selection": "таңдау",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "",
     "ffffff": "",
@@ -439,5 +443,12 @@
     "5c940d": "",
     "5c940d": "",
     "e67700": "",
     "e67700": "",
     "d9480f": ""
     "d9480f": ""
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/ko-KR.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "붙여넣기",
     "paste": "붙여넣기",
+    "pasteAsPlaintext": "",
     "pasteCharts": "차트 붙여넣기",
     "pasteCharts": "차트 붙여넣기",
     "selectAll": "전체 선택",
     "selectAll": "전체 선택",
     "multiSelect": "선택 영역에 추가하기",
     "multiSelect": "선택 영역에 추가하기",
@@ -71,7 +72,7 @@
     "layers": "레이어",
     "layers": "레이어",
     "actions": "동작",
     "actions": "동작",
     "language": "언어",
     "language": "언어",
-    "liveCollaboration": "실시간 협업",
+    "liveCollaboration": "",
     "duplicateSelection": "복제",
     "duplicateSelection": "복제",
     "untitled": "제목 없음",
     "untitled": "제목 없음",
     "name": "이름",
     "name": "이름",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "캔버스 초기화",
     "clearReset": "캔버스 초기화",
     "exportJSON": "파일로 내보내기",
     "exportJSON": "파일로 내보내기",
-    "exportImage": "이미지로 저장",
-    "export": "내보내기",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "PNG로 내보내기",
     "exportToPng": "PNG로 내보내기",
     "exportToSvg": "SVG로 내보내기",
     "exportToSvg": "SVG로 내보내기",
     "copyToClipboard": "클립보드로 복사",
     "copyToClipboard": "클립보드로 복사",
@@ -144,7 +145,7 @@
     "scale": "크기",
     "scale": "크기",
     "save": "현재 파일에 저장",
     "save": "현재 파일에 저장",
     "saveAs": "다른 이름으로 저장",
     "saveAs": "다른 이름으로 저장",
-    "load": "불러오기",
+    "load": "",
     "getShareableLink": "공유 가능한 링크 생성",
     "getShareableLink": "공유 가능한 링크 생성",
     "close": "닫기",
     "close": "닫기",
     "selectLanguage": "언어 선택",
     "selectLanguage": "언어 선택",
@@ -214,7 +215,7 @@
     "text": "텍스트",
     "text": "텍스트",
     "library": "라이브러리",
     "library": "라이브러리",
     "lock": "선택된 도구 유지하기",
     "lock": "선택된 도구 유지하기",
-    "penMode": "핀치 줌을 하지 않도록 하고 펜을 통해서 자유롭게 그리기",
+    "penMode": "",
     "link": "선택한 도형에 대해서 링크를 추가/업데이트",
     "link": "선택한 도형에 대해서 링크를 추가/업데이트",
     "eraser": "지우개"
     "eraser": "지우개"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "SHIFT 키를 누르면서 조정하면 크기의 비율이 제한됩니다.\nALT를 누르면서 조정하면 중앙을 기준으로 크기를 조정합니다.",
     "resize": "SHIFT 키를 누르면서 조정하면 크기의 비율이 제한됩니다.\nALT를 누르면서 조정하면 중앙을 기준으로 크기를 조정합니다.",
     "resizeImage": "SHIFT를 눌러서 자유롭게 크기를 변경하거나,\nALT를 눌러서 중앙을 고정하고 크기를 변경하기",
     "resizeImage": "SHIFT를 눌러서 자유롭게 크기를 변경하거나,\nALT를 눌러서 중앙을 고정하고 크기를 변경하기",
     "rotate": "SHIFT 키를 누르면서 회전하면 각도를 제한할 수 있습니다.",
     "rotate": "SHIFT 키를 누르면서 회전하면 각도를 제한할 수 있습니다.",
-    "lineEditor_info": "지점을 수정하려면 두 번 클릭하거나 Enter 키를 누르세요.",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Delete 키로 꼭짓점을 제거하거나,\nCtrlOrCmd+D 로 복제하거나, 드래그 해서 이동시키기",
     "lineEditor_pointSelected": "Delete 키로 꼭짓점을 제거하거나,\nCtrlOrCmd+D 로 복제하거나, 드래그 해서 이동시키기",
     "lineEditor_nothingSelected": "꼭짓점을 선택해서 수정하거나 (SHIFT를 눌러서 여러개 선택),\nAlt를 누르고 클릭해서 새로운 꼭짓점 추가하기",
     "lineEditor_nothingSelected": "꼭짓점을 선택해서 수정하거나 (SHIFT를 눌러서 여러개 선택),\nAlt를 누르고 클릭해서 새로운 꼭짓점 추가하기",
     "placeImage": "클릭해서 이미지를 배치하거나, 클릭하고 드래그해서 사이즈를 조정하기",
     "placeImage": "클릭해서 이미지를 배치하거나, 클릭하고 드래그해서 사이즈를 조정하기",
@@ -310,7 +311,9 @@
     "view": "보기",
     "view": "보기",
     "zoomToFit": "모든 요소가 보이도록 확대/축소",
     "zoomToFit": "모든 요소가 보이도록 확대/축소",
     "zoomToSelection": "선택 영역으로 확대/축소",
     "zoomToSelection": "선택 영역으로 확대/축소",
-    "toggleElementLock": "선택한 항목을 잠금/잠금 해제"
+    "toggleElementLock": "선택한 항목을 잠금/잠금 해제",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "캔버스 지우기"
     "title": "캔버스 지우기"
@@ -391,7 +394,8 @@
     "fileSaved": "파일이 저장되었습니다.",
     "fileSaved": "파일이 저장되었습니다.",
     "fileSavedToFilename": "{filename} 로 저장되었습니다",
     "fileSavedToFilename": "{filename} 로 저장되었습니다",
     "canvas": "캔버스",
     "canvas": "캔버스",
-    "selection": "선택한 요소"
+    "selection": "선택한 요소",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "화이트",
     "ffffff": "화이트",
@@ -439,5 +443,12 @@
     "5c940d": "라임 9",
     "5c940d": "라임 9",
     "e67700": "노란색 9",
     "e67700": "노란색 9",
     "d9480f": "주황색 9"
     "d9480f": "주황색 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 45 - 34
src/locales/ku-TR.json

@@ -1,36 +1,37 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "دانانەوە",
     "paste": "دانانەوە",
+    "pasteAsPlaintext": "",
     "pasteCharts": "دانانەوەی خشتەکان",
     "pasteCharts": "دانانەوەی خشتەکان",
     "selectAll": "دیاریکردنی هەموو",
     "selectAll": "دیاریکردنی هەموو",
     "multiSelect": "زیادکردنی بۆ دیاریکراوەکان",
     "multiSelect": "زیادکردنی بۆ دیاریکراوەکان",
-    "moveCanvas": "کانڤای زیاتر",
+    "moveCanvas": "تابلۆ بجوڵێنە",
     "cut": "بڕین",
     "cut": "بڕین",
     "copy": "لەبەرگرتنەوە",
     "copy": "لەبەرگرتنەوە",
     "copyAsPng": "PNGلەبەرگرتنەوە بۆ تەختەنووس وەک",
     "copyAsPng": "PNGلەبەرگرتنەوە بۆ تەختەنووس وەک",
     "copyAsSvg": "SVGلەبەرگرتنەوە بۆ تەختەنووس وەک",
     "copyAsSvg": "SVGلەبەرگرتنەوە بۆ تەختەنووس وەک",
     "copyText": "لەبەرگرتنەوە بۆ تەختەنووس وەک نوسین",
     "copyText": "لەبەرگرتنەوە بۆ تەختەنووس وەک نوسین",
-    "bringForward": "بیهێنە پێش",
+    "bringForward": "بهێنە پێشتر",
     "sendToBack": "بنێرە دواوە",
     "sendToBack": "بنێرە دواوە",
-    "bringToFront": "بهێنە بەردەم",
-    "sendBackward": "بنێرە کۆتای",
+    "bringToFront": "بهێنە پێشەوە",
+    "sendBackward": "بنێرە دواتر",
     "delete": "سڕینەوە",
     "delete": "سڕینەوە",
     "copyStyles": "لەبەرگرتنەوەی ستایل",
     "copyStyles": "لەبەرگرتنەوەی ستایل",
     "pasteStyles": "دانانەوەی ستایل",
     "pasteStyles": "دانانەوەی ستایل",
     "stroke": "هێڵکار",
     "stroke": "هێڵکار",
-    "background": "باکگراوند",
+    "background": "پاشبنەما",
     "fill": "پڕکردنەوە",
     "fill": "پڕکردنەوە",
     "strokeWidth": "پانی هێڵکاری",
     "strokeWidth": "پانی هێڵکاری",
     "strokeStyle": "ستایلی هێڵکاری",
     "strokeStyle": "ستایلی هێڵکاری",
     "strokeStyle_solid": "سادە",
     "strokeStyle_solid": "سادە",
-    "strokeStyle_dashed": "داشاوی",
+    "strokeStyle_dashed": "پچڕ پچڕ",
     "strokeStyle_dotted": "خاڵدار",
     "strokeStyle_dotted": "خاڵدار",
-    "sloppiness": "خواری",
-    "opacity": "ناڕونی",
+    "sloppiness": "لێژی",
+    "opacity": "ڕوونی",
     "textAlign": "ڕێکخستنی دەق",
     "textAlign": "ڕێکخستنی دەق",
     "edges": "لێوارەکان",
     "edges": "لێوارەکان",
     "sharp": "تیژ",
     "sharp": "تیژ",
-    "round": "چەماو",
+    "round": "چەماوە",
     "arrowheads": "سەرەتیر",
     "arrowheads": "سەرەتیر",
     "arrowhead_none": "هیچیان",
     "arrowhead_none": "هیچیان",
     "arrowhead_arrow": "تیر",
     "arrowhead_arrow": "تیر",
@@ -65,13 +66,13 @@
     "cartoonist": "کارتۆنی",
     "cartoonist": "کارتۆنی",
     "fileTitle": "ناوی فایل",
     "fileTitle": "ناوی فایل",
     "colorPicker": "ڕەنگ هەڵگر",
     "colorPicker": "ڕەنگ هەڵگر",
-    "canvasColors": "کانڤای بەکارهاتوو",
-    "canvasBackground": "باکگراوندی کانڤاکان",
-    "drawingCanvas": "کێشانی کانڤا",
+    "canvasColors": "بەکارهاتووە لەسەر تابلۆ",
+    "canvasBackground": "پاشبنەمای تابلۆ",
+    "drawingCanvas": "کێشانی تابلۆ",
     "layers": "چینەکان",
     "layers": "چینەکان",
     "actions": "کردارەکان",
     "actions": "کردارەکان",
     "language": "زمان",
     "language": "زمان",
-    "liveCollaboration": "هاوکاری ڕاستەوخۆ",
+    "liveCollaboration": "هاوکاریکردنی زیندو...",
     "duplicateSelection": "لەبەرگرتنەوە",
     "duplicateSelection": "لەبەرگرتنەوە",
     "untitled": "Untitled",
     "untitled": "Untitled",
     "name": "ناو",
     "name": "ناو",
@@ -129,14 +130,14 @@
   },
   },
   "library": {
   "library": {
     "noItems": "هێشتا هیچ بڕگەیەک زیاد نەکراوە...",
     "noItems": "هێشتا هیچ بڕگەیەک زیاد نەکراوە...",
-    "hint_emptyLibrary": "شتێک لەسەر کانڤاس هەڵبژێرە بۆ ئەوەی لێرە زیاد بکەیت، یان کتێبخانەیەک لە کۆگای گشتیەوە دابمەزرێنە، لە خوارەوە.",
-    "hint_emptyPrivateLibrary": "شتێک لەسەر کانڤاس هەڵبژێرە بۆ ئەوەی لێرە زیاد بکەیت."
+    "hint_emptyLibrary": "شتێک لەسەر تابلۆ هەڵبژێرە بۆ ئەوەی لێرە زیادی بکەیت، یان کتێبخانەیەک لە کۆگا گشتیەکەوە دابمەزرێنە، لە خوارەوە.",
+    "hint_emptyPrivateLibrary": "شتێک لەسەر تابلۆ هەڵبژێرە بۆ ئەوەی لێرە زیادی بکەیت."
   },
   },
   "buttons": {
   "buttons": {
-    "clearReset": "کانڤاسەکە ڕێست بکەرەوە",
+    "clearReset": "تابلۆکە وەک سەرەتا لێبکەوە",
     "exportJSON": "هەناردەکردن بۆ فایل",
     "exportJSON": "هەناردەکردن بۆ فایل",
-    "exportImage": "پاشەکەوتکرد وەک وێنە",
-    "export": "هەناردەکردن",
+    "exportImage": "وێنە هەناردە بکە...",
+    "export": "پاشەکەوت بکە بۆ...",
     "exportToPng": "هەناردەکردن بۆ PNG",
     "exportToPng": "هەناردەکردن بۆ PNG",
     "exportToSvg": "هەناردەکردن بۆ SVG",
     "exportToSvg": "هەناردەکردن بۆ SVG",
     "copyToClipboard": "له‌به‌ری بگره‌وه‌ بۆ ته‌خته‌نووس",
     "copyToClipboard": "له‌به‌ری بگره‌وه‌ بۆ ته‌خته‌نووس",
@@ -144,7 +145,7 @@
     "scale": "پێوەر",
     "scale": "پێوەر",
     "save": "پاشەکەوت بکە بۆ فایلی بەردەست",
     "save": "پاشەکەوت بکە بۆ فایلی بەردەست",
     "saveAs": "پاشەکەوتکردن وەک",
     "saveAs": "پاشەکەوتکردن وەک",
-    "load": "بارکردن",
+    "load": "بکەرەوە",
     "getShareableLink": "بەستەری هاوبەشیپێکردن بەدەستبهێنە",
     "getShareableLink": "بەستەری هاوبەشیپێکردن بەدەستبهێنە",
     "close": "داخستن",
     "close": "داخستن",
     "selectLanguage": "دیاریکردنی زمان",
     "selectLanguage": "دیاریکردنی زمان",
@@ -172,12 +173,12 @@
     "confirm": "دوپاتکردنەوە"
     "confirm": "دوپاتکردنەوە"
   },
   },
   "alerts": {
   "alerts": {
-    "clearReset": "ئەمە هەموو کانڤاکە خاوێن دەکاتەوە، دڵنیایت؟",
+    "clearReset": "ئەمە هەموو تابلۆکە خاوێن دەکاتەوە، دڵنیایت؟",
     "couldNotCreateShareableLink": "نەتوانرا بەستەری هاوبەشیپێکردن دروستبکرێت",
     "couldNotCreateShareableLink": "نەتوانرا بەستەری هاوبەشیپێکردن دروستبکرێت",
     "couldNotCreateShareableLinkTooBig": "نەتوانرا بەستەری هاوبەشیپێکردن دروستبکرێت: دیمەنەکە زۆر گەورەیە",
     "couldNotCreateShareableLinkTooBig": "نەتوانرا بەستەری هاوبەشیپێکردن دروستبکرێت: دیمەنەکە زۆر گەورەیە",
     "couldNotLoadInvalidFile": "ناتوانرا باربکرێت، فایلەکە دروستنییە",
     "couldNotLoadInvalidFile": "ناتوانرا باربکرێت، فایلەکە دروستنییە",
     "importBackendFailed": "هاوردەکردن لە پاشکۆکە سەرکەوتوو نەبوو.",
     "importBackendFailed": "هاوردەکردن لە پاشکۆکە سەرکەوتوو نەبوو.",
-    "cannotExportEmptyCanvas": "ناتوانرێت کانڤای بەتاڵ هەناردەبکرێت",
+    "cannotExportEmptyCanvas": "ناتوانرێت تابلۆی بەتاڵ هەناردەبکرێت.",
     "couldNotCopyToClipboard": "ناتوانرا لەبەربگیرێتەوە بۆ تەختەنوس",
     "couldNotCopyToClipboard": "ناتوانرا لەبەربگیرێتەوە بۆ تەختەنوس",
     "decryptFailed": "ناتوانرا داتاکان شیبکرێتەوە",
     "decryptFailed": "ناتوانرا داتاکان شیبکرێتەوە",
     "uploadedSecurly": "بارکردنەکە بە کۆدکردنی کۆتایی بۆ کۆتایی پارێزراوە، ئەمەش واتە سێرڤەری Excalidraw و لایەنی سێیەم ناتوانن ناوەڕۆکەکە بخوێننەوە.",
     "uploadedSecurly": "بارکردنەکە بە کۆدکردنی کۆتایی بۆ کۆتایی پارێزراوە، ئەمەش واتە سێرڤەری Excalidraw و لایەنی سێیەم ناتوانن ناوەڕۆکەکە بخوێننەوە.",
@@ -214,17 +215,17 @@
     "text": "دەق",
     "text": "دەق",
     "library": "کتێبخانە",
     "library": "کتێبخانە",
     "lock": "ئامێرە دیاریکراوەکان چالاک بهێڵەوە دوای وێنەکێشان",
     "lock": "ئامێرە دیاریکراوەکان چالاک بهێڵەوە دوای وێنەکێشان",
-    "penMode": "ڕێگری بکە لە گەورەکردنەوەی پینچ و قبولکردنی تێکردنی فریدراو تەنها لە پێنووسەوە",
+    "penMode": "شێوازی قەڵەم - دەست لێدان ڕابگرە",
     "link": "زیادکردن/ نوێکردنەوەی لینک بۆ شێوەی دیاریکراو",
     "link": "زیادکردن/ نوێکردنەوەی لینک بۆ شێوەی دیاریکراو",
     "eraser": "سڕەر"
     "eraser": "سڕەر"
   },
   },
   "headings": {
   "headings": {
-    "canvasActions": "کردارەکانی کانڤا",
+    "canvasActions": "کردارەکانی تابلۆ",
     "selectedShapeActions": "کردارەکانی شێوەی دەستنیشانکراو",
     "selectedShapeActions": "کردارەکانی شێوەی دەستنیشانکراو",
     "shapes": "شێوەکان"
     "shapes": "شێوەکان"
   },
   },
   "hints": {
   "hints": {
-    "canvasPanning": "بۆ جوڵاندنی کانڤاکە، لە کاتی ڕاکێشاندا ویل ماوس یان سپەیسبار دابگرە",
+    "canvasPanning": "بۆ جوڵاندنی تابلۆ، لە کاتی ڕاکێشاندا ویلی ماوس یان شریتی بۆشایی دابگرە",
     "linearElement": "کرتە بکە بۆ دەستپێکردنی چەند خاڵێک، ڕایبکێشە بۆ یەک هێڵ",
     "linearElement": "کرتە بکە بۆ دەستپێکردنی چەند خاڵێک، ڕایبکێشە بۆ یەک هێڵ",
     "freeDraw": "کرتە بکە و ڕایبکێشە، کاتێک تەواو بوویت دەست هەڵگرە",
     "freeDraw": "کرتە بکە و ڕایبکێشە، کاتێک تەواو بوویت دەست هەڵگرە",
     "text": "زانیاری: هەروەها دەتوانیت دەق زیادبکەیت بە دوو کرتەکردن لە هەر شوێنێک لەگەڵ ئامڕازی دەستنیشانکردن",
     "text": "زانیاری: هەروەها دەتوانیت دەق زیادبکەیت بە دوو کرتەکردن لە هەر شوێنێک لەگەڵ ئامڕازی دەستنیشانکردن",
@@ -235,7 +236,7 @@
     "resize": "دەتوانیت ڕێژەکان سنووردار بکەیت بە ڕاگرتنی SHIFT لەکاتی گۆڕینی قەبارەدا،\nALT ڕابگرە بۆ گۆڕینی قەبارە لە ناوەندەوە",
     "resize": "دەتوانیت ڕێژەکان سنووردار بکەیت بە ڕاگرتنی SHIFT لەکاتی گۆڕینی قەبارەدا،\nALT ڕابگرە بۆ گۆڕینی قەبارە لە ناوەندەوە",
     "resizeImage": "دەتوانیت بە ئازادی قەبارە بگۆڕیت بە ڕاگرتنی SHIFT،\nALT ڕابگرە بۆ گۆڕینی قەبارە لە ناوەندەوە",
     "resizeImage": "دەتوانیت بە ئازادی قەبارە بگۆڕیت بە ڕاگرتنی SHIFT،\nALT ڕابگرە بۆ گۆڕینی قەبارە لە ناوەندەوە",
     "rotate": "دەتوانیت گۆشەکان سنووردار بکەیت بە ڕاگرتنی SHIFT لەکاتی سوڕانەوەدا",
     "rotate": "دەتوانیت گۆشەکان سنووردار بکەیت بە ڕاگرتنی SHIFT لەکاتی سوڕانەوەدا",
-    "lineEditor_info": "دووجار کلیک بکە یان Enter بکە بۆ دەستکاریکردنی خاڵەکان",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "بۆ لابردنی خاڵەکان Delete دابگرە، Ctrl Cmd+D بکە بۆ لەبەرگرتنەوە، یان بۆ جووڵە ڕاکێشان بکە",
     "lineEditor_pointSelected": "بۆ لابردنی خاڵەکان Delete دابگرە، Ctrl Cmd+D بکە بۆ لەبەرگرتنەوە، یان بۆ جووڵە ڕاکێشان بکە",
     "lineEditor_nothingSelected": "خاڵێک هەڵبژێرە بۆ دەستکاریکردن (SHIFT ڕابگرە بۆ هەڵبژاردنی چەندین)،\nیان Alt ڕابگرە و کلیک بکە بۆ زیادکردنی خاڵە نوێیەکان",
     "lineEditor_nothingSelected": "خاڵێک هەڵبژێرە بۆ دەستکاریکردن (SHIFT ڕابگرە بۆ هەڵبژاردنی چەندین)،\nیان Alt ڕابگرە و کلیک بکە بۆ زیادکردنی خاڵە نوێیەکان",
     "placeImage": "کلیک بکە بۆ دانانی وێنەکە، یان کلیک بکە و ڕایبکێشە بۆ ئەوەی قەبارەکەی بە دەستی دابنێیت",
     "placeImage": "کلیک بکە بۆ دانانی وێنەکە، یان کلیک بکە و ڕایبکێشە بۆ ئەوەی قەبارەکەی بە دەستی دابنێیت",
@@ -245,15 +246,15 @@
     "eraserRevert": "بۆ گەڕاندنەوەی ئەو توخمانەی کە بۆ سڕینەوە نیشانە کراون، Alt ڕابگرە"
     "eraserRevert": "بۆ گەڕاندنەوەی ئەو توخمانەی کە بۆ سڕینەوە نیشانە کراون، Alt ڕابگرە"
   },
   },
   "canvasError": {
   "canvasError": {
-    "cannotShowPreview": "ناتوانێت پێشبینین پیشان بدرێت",
-    "canvasTooBig": "کانڤاکە لەوانەیە زۆر گەورەبێت.",
-    "canvasTooBigTip": "زانیاری: هەوڵ بدە دوورترین توخمەکان کەمێک نزیکتر لە یەکتر بجوڵێنن."
+    "cannotShowPreview": "ناتوانرێ پێشبینین پیشان بدرێت",
+    "canvasTooBig": "تابلۆکە لەوانەیە زۆر گەورەبێت.",
+    "canvasTooBigTip": "زانیاری: هەوڵ بدە دوورترین توخمەکان کەمێک لە یەکتر نزیک بکەوە."
   },
   },
   "errorSplash": {
   "errorSplash": {
     "headingMain_pre": "تووشی هەڵەیەک بوو. هەوڵ بدە ",
     "headingMain_pre": "تووشی هەڵەیەک بوو. هەوڵ بدە ",
     "headingMain_button": "دووبارە بارکردنی لاپەڕەکە.",
     "headingMain_button": "دووبارە بارکردنی لاپەڕەکە.",
-    "clearCanvasMessage": "ئەگەر دووبارە بارکردنەوە کار نەکات، هەوڵبدە ",
-    "clearCanvasMessage_button": "کانڤاکە خاوێن بکەیتەوە.",
+    "clearCanvasMessage": "ئەگەر دووبارە بارکردنەوە کار ناکات، هەوڵبدە ",
+    "clearCanvasMessage_button": "خاوێنکردنەوەی تابلۆکە.",
     "clearCanvasCaveat": " ئەمە دەبێتە هۆی لەدەستدانی ئەوەی کە کردوتە ",
     "clearCanvasCaveat": " ئەمە دەبێتە هۆی لەدەستدانی ئەوەی کە کردوتە ",
     "trackedToSentry_pre": "هەڵەکە لەگەڵ ناسێنەری ",
     "trackedToSentry_pre": "هەڵەکە لەگەڵ ناسێنەری ",
     "trackedToSentry_post": " لەسەر سیستەمەکەمان بەدواداچوونی بۆ کرا.",
     "trackedToSentry_post": " لەسەر سیستەمەکەمان بەدواداچوونی بۆ کرا.",
@@ -310,10 +311,12 @@
     "view": "دیمەن",
     "view": "دیمەن",
     "zoomToFit": "زووم بکە بۆ ئەوەی لەگەڵ هەموو توخمەکاندا بگونجێت",
     "zoomToFit": "زووم بکە بۆ ئەوەی لەگەڵ هەموو توخمەکاندا بگونجێت",
     "zoomToSelection": "زووم بکە بۆ دەستنیشانکراوەکان",
     "zoomToSelection": "زووم بکە بۆ دەستنیشانکراوەکان",
-    "toggleElementLock": "قفڵ/کردنەوەی دەستنیشانکراوەکان"
+    "toggleElementLock": "قفڵ/کردنەوەی دەستنیشانکراوەکان",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
-    "title": "خاوێنکردنەوەی کانڤا"
+    "title": "تابلۆکە خاوێن بکەرەوە"
   },
   },
   "publishDialog": {
   "publishDialog": {
     "title": "پێشکەشکردنی کتێبخانە",
     "title": "پێشکەشکردنی کتێبخانە",
@@ -390,8 +393,9 @@
     "copyToClipboardAsPng": "کۆپی کراوە {{exportSelection}} بۆ کلیپبۆرد وەک PNG\n({{exportColorScheme}})",
     "copyToClipboardAsPng": "کۆپی کراوە {{exportSelection}} بۆ کلیپبۆرد وەک PNG\n({{exportColorScheme}})",
     "fileSaved": "فایل هەڵگیرا.",
     "fileSaved": "فایل هەڵگیرا.",
     "fileSavedToFilename": "هەڵگیراوە بۆ {filename}",
     "fileSavedToFilename": "هەڵگیراوە بۆ {filename}",
-    "canvas": "کانڤاکان",
-    "selection": "دەستنیشانکراوەکان"
+    "canvas": "تابلۆ",
+    "selection": "دەستنیشانکراوەکان",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "سپی",
     "ffffff": "سپی",
@@ -439,5 +443,12 @@
     "5c940d": "نارنجی 9",
     "5c940d": "نارنجی 9",
     "e67700": "زەرد 9",
     "e67700": "زەرد 9",
     "d9480f": "پرتەقاڵی 9"
     "d9480f": "پرتەقاڵی 9"
+  },
+  "welcomeScreen": {
+    "data": "هەموو داتاکانت لە ناو بڕاوزەرەکەتدا پاشەکەوت کراوە.",
+    "switchToPlusApp": "دەتویست بچیت بۆ Excalidraw+؟",
+    "menuHints": "هەناردەکردن، پەسندکردنەکان، زمانەکان، ...",
+    "toolbarHints": "ئامرازێک هەڵبژێرە و دەستبکە بە وێنەکێشان!",
+    "helpHints": "قەدبڕەکان و یارمەتی"
   }
   }
 }
 }

+ 179 - 168
src/locales/lt-LT.json

@@ -1,19 +1,20 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Įklijuoti",
     "paste": "Įklijuoti",
+    "pasteAsPlaintext": "Įklijuoti kaip paprastą tekstą",
     "pasteCharts": "Įklijuoti diagramas",
     "pasteCharts": "Įklijuoti diagramas",
     "selectAll": "Pažymėti viską",
     "selectAll": "Pažymėti viską",
-    "multiSelect": "",
-    "moveCanvas": "",
+    "multiSelect": "Pridėkite elementą prie pasirinktų",
+    "moveCanvas": "Judinti drobę",
     "cut": "Iškirpti",
     "cut": "Iškirpti",
     "copy": "Kopijuoti",
     "copy": "Kopijuoti",
-    "copyAsPng": "",
-    "copyAsSvg": "",
-    "copyText": "",
-    "bringForward": "",
-    "sendToBack": "",
-    "bringToFront": "",
-    "sendBackward": "",
+    "copyAsPng": "Kopijuoti į iškarpinę kaip PNG",
+    "copyAsSvg": "Kopijuoti į iškarpinę kaip SVG",
+    "copyText": "Kopijuoti į iškarpinę kaip tekstą",
+    "bringForward": "Kelti priekio link",
+    "sendToBack": "Nustumti į užnugarį",
+    "bringToFront": "Iškelti į priekį",
+    "sendBackward": "Nustumti link užnugario",
     "delete": "Ištrinti",
     "delete": "Ištrinti",
     "copyStyles": "Kopijuoti stilius",
     "copyStyles": "Kopijuoti stilius",
     "pasteStyles": "Įklijuoti stilius",
     "pasteStyles": "Įklijuoti stilius",
@@ -22,56 +23,56 @@
     "fill": "Užpildymas",
     "fill": "Užpildymas",
     "strokeWidth": "Linijos storis",
     "strokeWidth": "Linijos storis",
     "strokeStyle": "Linijos stilius",
     "strokeStyle": "Linijos stilius",
-    "strokeStyle_solid": "",
-    "strokeStyle_dashed": "",
-    "strokeStyle_dotted": "",
-    "sloppiness": "",
-    "opacity": "",
-    "textAlign": "",
+    "strokeStyle_solid": "Ištisinė",
+    "strokeStyle_dashed": "Brūkšniuota",
+    "strokeStyle_dotted": "Taškuota",
+    "sloppiness": "Netvarkingumas",
+    "opacity": "Nepermatomumas",
+    "textAlign": "Teksto lygiavimas",
     "edges": "Kraštai",
     "edges": "Kraštai",
-    "sharp": "",
-    "round": "",
-    "arrowheads": "",
-    "arrowhead_none": "",
-    "arrowhead_arrow": "",
-    "arrowhead_bar": "",
-    "arrowhead_dot": "",
+    "sharp": "Aštrus",
+    "round": "Užapvalintas",
+    "arrowheads": "Rodyklės viršūnės",
+    "arrowhead_none": "Jokios",
+    "arrowhead_arrow": "Rodyklė",
+    "arrowhead_bar": "Brukšnys",
+    "arrowhead_dot": "Taškas",
     "arrowhead_triangle": "Trikampis",
     "arrowhead_triangle": "Trikampis",
-    "fontSize": "",
-    "fontFamily": "",
-    "onlySelected": "",
-    "withBackground": "",
-    "exportEmbedScene": "",
-    "exportEmbedScene_details": "",
+    "fontSize": "Šrifto dydis",
+    "fontFamily": "Šriftas",
+    "onlySelected": "Tik pasirinktus",
+    "withBackground": "Fonas",
+    "exportEmbedScene": "Įterpti sceną",
+    "exportEmbedScene_details": "Scenos duomenys bus išsaugoti eksportuotame PNG/SVG faile taip, jog vėliau scena galėtu būti iš jo atkurta.\nTai padydins eksportuoto failo dydį.",
     "addWatermark": "Sukurta su Excalidraw",
     "addWatermark": "Sukurta su Excalidraw",
-    "handDrawn": "",
+    "handDrawn": "Ranka rašytas",
     "normal": "Normalus",
     "normal": "Normalus",
     "code": "Kodas",
     "code": "Kodas",
     "small": "Mažas",
     "small": "Mažas",
     "medium": "Vidutinis",
     "medium": "Vidutinis",
     "large": "Didelis",
     "large": "Didelis",
-    "veryLarge": "",
+    "veryLarge": "Labai didelis",
     "solid": "",
     "solid": "",
     "hachure": "",
     "hachure": "",
     "crossHatch": "",
     "crossHatch": "",
-    "thin": "",
-    "bold": "",
-    "left": "",
-    "center": "",
-    "right": "",
-    "extraBold": "",
-    "architect": "",
-    "artist": "",
-    "cartoonist": "",
+    "thin": "Plonas",
+    "bold": "Pastorintas",
+    "left": "Kairėje",
+    "center": "Centre",
+    "right": "Dešinėje",
+    "extraBold": "Labiau pastorintas",
+    "architect": "Architektas",
+    "artist": "Menininkas",
+    "cartoonist": "Karikatūristas",
     "fileTitle": "Failo pavadinimas",
     "fileTitle": "Failo pavadinimas",
-    "colorPicker": "",
+    "colorPicker": "Spalvos parinkiklis",
     "canvasColors": "",
     "canvasColors": "",
-    "canvasBackground": "",
+    "canvasBackground": "Drobės fonas",
     "drawingCanvas": "",
     "drawingCanvas": "",
-    "layers": "",
-    "actions": "",
-    "language": "",
-    "liveCollaboration": "",
+    "layers": "Sluoksniai",
+    "actions": "Veiksmai",
+    "language": "Kalba",
+    "liveCollaboration": "Bendradarbiavimas gyvai...",
     "duplicateSelection": "",
     "duplicateSelection": "",
     "untitled": "",
     "untitled": "",
     "name": "",
     "name": "",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "",
     "clearReset": "",
     "exportJSON": "Eksportuoti į failą",
     "exportJSON": "Eksportuoti į failą",
-    "exportImage": "Išsaugoti kaip paveikslėlį",
-    "export": "Eksportuoti",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "Eksportuoti į PNG",
     "exportToPng": "Eksportuoti į PNG",
     "exportToSvg": "Eksportuoti į SVG",
     "exportToSvg": "Eksportuoti į SVG",
     "copyToClipboard": "Kopijuoti į iškarpinę",
     "copyToClipboard": "Kopijuoti į iškarpinę",
@@ -144,7 +145,7 @@
     "scale": "",
     "scale": "",
     "save": "",
     "save": "",
     "saveAs": "Išsaugoti kaip",
     "saveAs": "Išsaugoti kaip",
-    "load": "Įkelti",
+    "load": "",
     "getShareableLink": "Gauti nuorodą dalinimuisi",
     "getShareableLink": "Gauti nuorodą dalinimuisi",
     "close": "Uždaryti",
     "close": "Uždaryti",
     "selectLanguage": "Pasirinkite kalbą",
     "selectLanguage": "Pasirinkite kalbą",
@@ -182,52 +183,52 @@
     "decryptFailed": "",
     "decryptFailed": "",
     "uploadedSecurly": "",
     "uploadedSecurly": "",
     "loadSceneOverridePrompt": "",
     "loadSceneOverridePrompt": "",
-    "collabStopOverridePrompt": "",
-    "errorAddingToLibrary": "",
-    "errorRemovingFromLibrary": "",
-    "confirmAddLibrary": "",
-    "imageDoesNotContainScene": "",
-    "cannotRestoreFromImage": "",
-    "invalidSceneUrl": "",
-    "resetLibrary": "",
-    "removeItemsFromsLibrary": "",
-    "invalidEncryptionKey": ""
+    "collabStopOverridePrompt": "Sesijos nutraukimas perrašys ankstesnį, lokaliai išsaugotą piešinį. Ar tikrai to nori?\n\n(Jei nori išlaikyti lokalų piešinį, tiesiog uždaryk naršyklės skirtuką.)",
+    "errorAddingToLibrary": "Nepavyko įtraukti elemento į biblioteką",
+    "errorRemovingFromLibrary": "Nepavyko pašalinti elemento iš bibliotekos",
+    "confirmAddLibrary": "Tai įtrauks {{numShapes}} figūrą/-as į tavo biblioteką. Ar tikrai to nori?",
+    "imageDoesNotContainScene": "Panašu, jog šis paveiksliukas neturi scenos duomenų. Ar yra įjuntas scenos įtraukimas ekportavimo metu?",
+    "cannotRestoreFromImage": "Nepavyko atstatyti scenos iš šio nuotraukos failo",
+    "invalidSceneUrl": "Nepavyko suimportuoti scenos iš pateiktos nuorodos (URL). Ji arba blogai suformatuota, arba savyje neturi teisingų Excalidraw JSON duomenų.",
+    "resetLibrary": "Tai išvalys tavo biblioteką. Ar tikrai to nori?",
+    "removeItemsFromsLibrary": "Ištrinti {{count}} elementą/-us iš bibliotekos?",
+    "invalidEncryptionKey": "Šifravimo raktas turi būti iš 22 simbolių. Redagavimas gyvai yra išjungtas."
   },
   },
   "errors": {
   "errors": {
-    "unsupportedFileType": "",
-    "imageInsertError": "",
-    "fileTooBig": "",
-    "svgImageInsertError": "",
-    "invalidSVGString": "",
-    "cannotResolveCollabServer": "",
-    "importLibraryError": ""
+    "unsupportedFileType": "Nepalaikomas failo tipas.",
+    "imageInsertError": "Nepyko įkelti paveiksliuko. Pabandyk vėliau...",
+    "fileTooBig": "Per didelis failas. Didžiausias leidžiamas dydis yra {{maxSize}}.",
+    "svgImageInsertError": "Nepavyko įtraukti SVG paveiksliuko. Panašu, jog SVG yra nevalidus.",
+    "invalidSVGString": "Nevalidus SVG.",
+    "cannotResolveCollabServer": "Nepavyko prisijungti prie serverio bendradarbiavimui. Perkrauk puslapį ir pabandyk prisijungti dar kartą.",
+    "importLibraryError": "Nepavyko įkelti bibliotekos"
   },
   },
   "toolBar": {
   "toolBar": {
-    "selection": "",
-    "image": "",
-    "rectangle": "",
-    "diamond": "",
-    "ellipse": "",
-    "arrow": "",
-    "line": "",
+    "selection": "Žymėjimas",
+    "image": "Įkelti paveiksliuką",
+    "rectangle": "Stačiakampis",
+    "diamond": "Deimantas",
+    "ellipse": "Elipsė",
+    "arrow": "Rodyklė",
+    "line": "Linija",
     "freedraw": "Piešti",
     "freedraw": "Piešti",
     "text": "Tekstas",
     "text": "Tekstas",
     "library": "Biblioteka",
     "library": "Biblioteka",
-    "lock": "",
-    "penMode": "",
-    "link": "",
-    "eraser": ""
+    "lock": "Baigus piešti, išlaikyti pasirinktą įrankį",
+    "penMode": "Rašyklio režimas - neleisti prisilietimų",
+    "link": "Pridėti / Atnaujinti pasirinktos figūros nuorodą",
+    "eraser": "Trintukas"
   },
   },
   "headings": {
   "headings": {
-    "canvasActions": "",
-    "selectedShapeActions": "",
+    "canvasActions": "Veiksmai su drobe",
+    "selectedShapeActions": "Veiksmai su pasirinkta figūra",
     "shapes": "Figūros"
     "shapes": "Figūros"
   },
   },
   "hints": {
   "hints": {
-    "canvasPanning": "",
-    "linearElement": "",
-    "freeDraw": "",
-    "text": "",
+    "canvasPanning": "Norint judinti drobę, judink pelę kartu įspaudus pelės ratuką arba tarpo klavišą",
+    "linearElement": "Paspaudimai sukurs papildomus taškus, nepertraukiamas tempimas sukurs liniją",
+    "freeDraw": "Spausk ir tempk, paleisk kai norėsi pabaigti",
+    "text": "Užuomina: tekstą taip pat galima pridėti bet kur su dvigubu pelės paspaudimu, kol parinkas žymėjimo įrankis",
     "text_selected": "",
     "text_selected": "",
     "text_editing": "",
     "text_editing": "",
     "linearElementMulti": "",
     "linearElementMulti": "",
@@ -283,72 +284,74 @@
     "link_details": "",
     "link_details": "",
     "link_button": "",
     "link_button": "",
     "excalidrawplus_description": "",
     "excalidrawplus_description": "",
-    "excalidrawplus_button": "",
+    "excalidrawplus_button": "Eksportuoti",
     "excalidrawplus_exportError": ""
     "excalidrawplus_exportError": ""
   },
   },
   "helpDialog": {
   "helpDialog": {
     "blog": "",
     "blog": "",
-    "click": "",
+    "click": "paspaudimas",
     "deepSelect": "",
     "deepSelect": "",
     "deepBoxSelect": "",
     "deepBoxSelect": "",
-    "curvedArrow": "",
-    "curvedLine": "",
-    "documentation": "",
-    "doubleClick": "",
+    "curvedArrow": "Banguota rodyklė",
+    "curvedLine": "Banguota linija",
+    "documentation": "Dokumentacija",
+    "doubleClick": "dvigubas paspaudimas",
     "drag": "vilkti",
     "drag": "vilkti",
-    "editor": "",
+    "editor": "Redaktorius",
     "editSelectedShape": "",
     "editSelectedShape": "",
-    "github": "",
-    "howto": "",
-    "or": "",
+    "github": "Radai klaidą? Pateik",
+    "howto": "Vadovaukis mūsų gidu",
+    "or": "arba",
     "preventBinding": "",
     "preventBinding": "",
-    "tools": "",
-    "shortcuts": "",
-    "textFinish": "",
-    "textNewLine": "",
-    "title": "",
+    "tools": "Įrankiai",
+    "shortcuts": "Spartieji klavišai",
+    "textFinish": "Baigti redagavimą (teksto redaktoriuje)",
+    "textNewLine": "Pridėti naują eilutę (tekto redaktoriuje)",
+    "title": "Pagalba",
     "view": "",
     "view": "",
     "zoomToFit": "",
     "zoomToFit": "",
-    "zoomToSelection": "",
-    "toggleElementLock": ""
+    "zoomToSelection": "Priartinti iki pažymėtos vietos",
+    "toggleElementLock": "",
+    "movePageUpDown": "Pajudinti puslapį aukštyn/žemyn",
+    "movePageLeftRight": "Pajudinti puslapį kairėn/dešinėn"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
-    "title": ""
+    "title": "Išvalyti drobę"
   },
   },
   "publishDialog": {
   "publishDialog": {
-    "title": "",
-    "itemName": "",
-    "authorName": "",
-    "githubUsername": "",
-    "twitterUsername": "",
-    "libraryName": "",
-    "libraryDesc": "",
+    "title": "Paviešinti biblioteką",
+    "itemName": "Elemento pavadinimas",
+    "authorName": "Autoriaus vardas",
+    "githubUsername": "Github spalyvardis",
+    "twitterUsername": "Twitter slapyvardis",
+    "libraryName": "Bibliotekos pavadinimas",
+    "libraryDesc": "Bibliotekos aprašas",
     "website": "Tinklalapis",
     "website": "Tinklalapis",
     "placeholder": {
     "placeholder": {
-      "authorName": "",
-      "libraryName": "",
-      "libraryDesc": "",
+      "authorName": "Tavo vardas arba spalyvardis",
+      "libraryName": "Tavo bibliotekos pavadinimas",
+      "libraryDesc": "Tavo bibliotekos aprašas, padėti žmonėms geriau suprasti jos paskirtį",
       "githubHandle": "",
       "githubHandle": "",
       "twitterHandle": "",
       "twitterHandle": "",
       "website": ""
       "website": ""
     },
     },
     "errors": {
     "errors": {
-      "required": "",
-      "website": ""
+      "required": "Privalomas",
+      "website": "Įveskite teisingą nuorodą (URL)"
     },
     },
     "noteDescription": {
     "noteDescription": {
-      "pre": "",
+      "pre": "Pateik savo biblioteką, jog ji galėtų būti įtraukta į ",
       "link": "",
       "link": "",
-      "post": ""
+      "post": "jog kiti žmonės galėtų tai naudoti savo piešiniuose."
     },
     },
     "noteGuidelines": {
     "noteGuidelines": {
-      "pre": "",
-      "link": "",
+      "pre": "Visų pirma, biblioteka turi būti rankiniu būdu patvirtinta. Prašome paskaityti ",
+      "link": "gairės",
       "post": ""
       "post": ""
     },
     },
     "noteLicense": {
     "noteLicense": {
       "pre": "",
       "pre": "",
-      "link": "",
+      "link": "MIT licencija, ",
       "post": ""
       "post": ""
     },
     },
     "noteItems": "",
     "noteItems": "",
@@ -356,13 +359,13 @@
     "republishWarning": ""
     "republishWarning": ""
   },
   },
   "publishSuccessDialog": {
   "publishSuccessDialog": {
-    "title": "",
-    "content": "",
+    "title": "Biblioteka pateikta",
+    "content": "Ačiū {{authorName}}. Tavo biblioteka buvo pateikta peržiūrai. Gali sekti būseną",
     "link": "čia"
     "link": "čia"
   },
   },
   "confirmDialog": {
   "confirmDialog": {
-    "resetLibrary": "",
-    "removeItemsFromLib": ""
+    "resetLibrary": "Atstatyti biblioteką",
+    "removeItemsFromLib": "Pašalinti pasirinktus elementus iš bibliotekos"
   },
   },
   "encrypted": {
   "encrypted": {
     "tooltip": "",
     "tooltip": "",
@@ -370,74 +373,82 @@
   },
   },
   "stats": {
   "stats": {
     "angle": "",
     "angle": "",
-    "element": "",
-    "elements": "",
-    "height": "",
-    "scene": "",
-    "selected": "",
-    "storage": "",
-    "title": "",
+    "element": "Elementas",
+    "elements": "Elementai",
+    "height": "Aukštis",
+    "scene": "Scena",
+    "selected": "Pasirinkta",
+    "storage": "Saugykla",
+    "title": "Informacija moksliukams",
     "total": "",
     "total": "",
     "version": "",
     "version": "",
     "versionCopy": "",
     "versionCopy": "",
     "versionNotAvailable": "",
     "versionNotAvailable": "",
-    "width": ""
+    "width": "Plotis"
   },
   },
   "toast": {
   "toast": {
-    "addedToLibrary": "",
+    "addedToLibrary": "Pridėta į biblioteką",
     "copyStyles": "",
     "copyStyles": "",
-    "copyToClipboard": "",
+    "copyToClipboard": "Nukopijuota į iškarpinę.",
     "copyToClipboardAsPng": "",
     "copyToClipboardAsPng": "",
-    "fileSaved": "",
-    "fileSavedToFilename": "",
-    "canvas": "",
-    "selection": ""
+    "fileSaved": "Failas išsaugotas.",
+    "fileSavedToFilename": "Išsaugota į {filename}",
+    "canvas": "drobė",
+    "selection": "",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
-    "ffffff": "",
-    "f8f9fa": "",
-    "f1f3f5": "",
-    "fff5f5": "",
-    "fff0f6": "",
+    "ffffff": "Balta",
+    "f8f9fa": "Pilka 0",
+    "f1f3f5": "Pilka 1",
+    "fff5f5": "Raudona 0",
+    "fff0f6": "Rožinė 0",
     "f8f0fc": "",
     "f8f0fc": "",
-    "f3f0ff": "",
-    "edf2ff": "",
-    "e7f5ff": "",
+    "f3f0ff": "Violetinė 0",
+    "edf2ff": "Indigo 0",
+    "e7f5ff": "Mėlyna 0",
     "e3fafc": "",
     "e3fafc": "",
     "e6fcf5": "",
     "e6fcf5": "",
-    "ebfbee": "",
+    "ebfbee": "Žalia 0",
     "f4fce3": "",
     "f4fce3": "",
-    "fff9db": "",
-    "fff4e6": "",
-    "transparent": "",
-    "ced4da": "",
-    "868e96": "",
-    "fa5252": "",
-    "e64980": "",
+    "fff9db": "Geltona 0",
+    "fff4e6": "Oranžinė 0",
+    "transparent": "Permatoma",
+    "ced4da": "Pilka 4",
+    "868e96": "Pilka 6",
+    "fa5252": "Raudona 6",
+    "e64980": "Rožinė 6",
     "be4bdb": "",
     "be4bdb": "",
-    "7950f2": "",
-    "4c6ef5": "",
-    "228be6": "",
+    "7950f2": "Violetinė 6",
+    "4c6ef5": "Indigo 6",
+    "228be6": "Mėlyna 6",
     "15aabf": "",
     "15aabf": "",
     "12b886": "",
     "12b886": "",
-    "40c057": "",
+    "40c057": "Žalia 6",
     "82c91e": "",
     "82c91e": "",
-    "fab005": "",
-    "fd7e14": "",
-    "000000": "",
-    "343a40": "",
-    "495057": "",
-    "c92a2a": "",
-    "a61e4d": "",
+    "fab005": "Geltona 6",
+    "fd7e14": "Oranžinė 6",
+    "000000": "Juoda",
+    "343a40": "Pilna 8",
+    "495057": "Pilka 7",
+    "c92a2a": "Raudona 9",
+    "a61e4d": "Rožinė 9",
     "862e9c": "",
     "862e9c": "",
-    "5f3dc4": "",
-    "364fc7": "",
-    "1864ab": "",
+    "5f3dc4": "Violetinė 9",
+    "364fc7": "Indigo 9",
+    "1864ab": "Mėlyna 9",
     "0b7285": "",
     "0b7285": "",
     "087f5b": "",
     "087f5b": "",
-    "2b8a3e": "",
+    "2b8a3e": "Žalia 9",
     "5c940d": "",
     "5c940d": "",
-    "e67700": "",
-    "d9480f": ""
+    "e67700": "Geltona 9",
+    "d9480f": "Oranžinė 9"
+  },
+  "welcomeScreen": {
+    "data": "Visi tavo duomenys išsaugoti lokaliai naršyklėje.",
+    "switchToPlusApp": "Ar vietoj to norėjai patekti į Excalidraw+?",
+    "menuHints": "Eksportavimas, parinktys, kalbos, ...",
+    "toolbarHints": "Pasirink įrankį ir Pradėk piešti!",
+    "helpHints": "Spartieji klavišai ir pagalba"
   }
   }
 }
 }

+ 19 - 8
src/locales/lv-LV.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Ielīmēt",
     "paste": "Ielīmēt",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Ielīmēt grafikus",
     "pasteCharts": "Ielīmēt grafikus",
     "selectAll": "Atlasīt visu",
     "selectAll": "Atlasīt visu",
     "multiSelect": "Pievienot elementu atlasei",
     "multiSelect": "Pievienot elementu atlasei",
@@ -71,7 +72,7 @@
     "layers": "Slāņi",
     "layers": "Slāņi",
     "actions": "Darbības",
     "actions": "Darbības",
     "language": "Valoda",
     "language": "Valoda",
-    "liveCollaboration": "Sadarbība tiešsaistē",
+    "liveCollaboration": "Sadarbība tiešsaistē...",
     "duplicateSelection": "Izveidot kopiju",
     "duplicateSelection": "Izveidot kopiju",
     "untitled": "Bez nosaukuma",
     "untitled": "Bez nosaukuma",
     "name": "Vārds",
     "name": "Vārds",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Atiestatīt tāfeli",
     "clearReset": "Atiestatīt tāfeli",
     "exportJSON": "Eksportēt kā failu",
     "exportJSON": "Eksportēt kā failu",
-    "exportImage": "Saglabāt kā attēlu",
-    "export": "Eksportēt",
+    "exportImage": "Eksportēt attēlu...",
+    "export": "Saglabāt uz...",
     "exportToPng": "Eksportēt kā PNG",
     "exportToPng": "Eksportēt kā PNG",
     "exportToSvg": "Eksportēt kā SVG",
     "exportToSvg": "Eksportēt kā SVG",
     "copyToClipboard": "Kopēt starpliktuvē",
     "copyToClipboard": "Kopēt starpliktuvē",
@@ -144,7 +145,7 @@
     "scale": "Mērogs",
     "scale": "Mērogs",
     "save": "Saglabāt pašreizējo datni",
     "save": "Saglabāt pašreizējo datni",
     "saveAs": "Saglabāt kā",
     "saveAs": "Saglabāt kā",
-    "load": "Ielādēt",
+    "load": "Atvērt",
     "getShareableLink": "Iegūt kopīgošanas saiti",
     "getShareableLink": "Iegūt kopīgošanas saiti",
     "close": "Aizvērt",
     "close": "Aizvērt",
     "selectLanguage": "Izvēlieties valodu",
     "selectLanguage": "Izvēlieties valodu",
@@ -214,7 +215,7 @@
     "text": "Teksts",
     "text": "Teksts",
     "library": "Bibliotēka",
     "library": "Bibliotēka",
     "lock": "Paturēt izvēlēto rīku pēc darbības",
     "lock": "Paturēt izvēlēto rīku pēc darbības",
-    "penMode": "Lietojot pildspalvu, bloķēt tuvināšanu un atļaut tikai zīmēšanu",
+    "penMode": "Pildspalvas režīms – novērst pieskaršanos",
     "link": "Pievienot/rediģēt atlasītās figūras saiti",
     "link": "Pievienot/rediģēt atlasītās figūras saiti",
     "eraser": "Dzēšgumija"
     "eraser": "Dzēšgumija"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Kad maināt izmēru, varat ierobežot proporcijas, turot nospiestu SHIFT,\nvai arī ALT, lai mainītu izmēru ap centru",
     "resize": "Kad maināt izmēru, varat ierobežot proporcijas, turot nospiestu SHIFT,\nvai arī ALT, lai mainītu izmēru ap centru",
     "resizeImage": "Varat brīvi mainīt izmēru, turot nospiestu SHIFT;\nturiet nospiestu ALT, lai mainītu izmēru ap centru",
     "resizeImage": "Varat brīvi mainīt izmēru, turot nospiestu SHIFT;\nturiet nospiestu ALT, lai mainītu izmēru ap centru",
     "rotate": "Rotējot varat ierobežot leņķi, turot nospiestu SHIFT",
     "rotate": "Rotējot varat ierobežot leņķi, turot nospiestu SHIFT",
-    "lineEditor_info": "Dubultklikšķiniet vai spiediet ievades taustiņu, lai rediģētu punktus",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Spiediet dzēšanas taustiņu, lai noņemtu punktus, – CtrlOrCmd+D, lai to kopētu, vai velciet, lai pārvietotu",
     "lineEditor_pointSelected": "Spiediet dzēšanas taustiņu, lai noņemtu punktus, – CtrlOrCmd+D, lai to kopētu, vai velciet, lai pārvietotu",
     "lineEditor_nothingSelected": "Atlasiet punktu, lai labotu (turiet nospiestu SHIFT, lai atlasītu vairākus),\nvai turiet Alt un clikšķiniet, lai pievienotu jaunus punktus",
     "lineEditor_nothingSelected": "Atlasiet punktu, lai labotu (turiet nospiestu SHIFT, lai atlasītu vairākus),\nvai turiet Alt un clikšķiniet, lai pievienotu jaunus punktus",
     "placeImage": "Klikšķiniet, lai novietotu attēlu, vai spiediet un velciet, lai iestatītu tā izmēru",
     "placeImage": "Klikšķiniet, lai novietotu attēlu, vai spiediet un velciet, lai iestatītu tā izmēru",
@@ -310,7 +311,9 @@
     "view": "Skatīt",
     "view": "Skatīt",
     "zoomToFit": "Iestatīt mērogu, kas iekļauj visus elementus",
     "zoomToFit": "Iestatīt mērogu, kas iekļauj visus elementus",
     "zoomToSelection": "Iestatīt mērogu, lai rādītu atlasi",
     "zoomToSelection": "Iestatīt mērogu, lai rādītu atlasi",
-    "toggleElementLock": "Fiksēt/atbrīvot atlasīto"
+    "toggleElementLock": "Fiksēt/atbrīvot atlasīto",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Notīrīt tāfeli"
     "title": "Notīrīt tāfeli"
@@ -391,7 +394,8 @@
     "fileSaved": "Datne saglabāta.",
     "fileSaved": "Datne saglabāta.",
     "fileSavedToFilename": "Saglabāts kā {filename}",
     "fileSavedToFilename": "Saglabāts kā {filename}",
     "canvas": "tāfeli",
     "canvas": "tāfeli",
-    "selection": "atlasi"
+    "selection": "atlasi",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Balts",
     "ffffff": "Balts",
@@ -439,5 +443,12 @@
     "5c940d": "Laims 9",
     "5c940d": "Laims 9",
     "e67700": "Dzeltens 9",
     "e67700": "Dzeltens 9",
     "d9480f": "Oranžs 9"
     "d9480f": "Oranžs 9"
+  },
+  "welcomeScreen": {
+    "data": "Visi jūsu dati tiek glabāti uz vietas jūsu pārlūkā.",
+    "switchToPlusApp": "",
+    "menuHints": "Eksportēšana, iestatījumi, valodas...",
+    "toolbarHints": "Izvēlieties rīku un sāciet zīmēt!",
+    "helpHints": "Saīsnes un palīdzība"
   }
   }
 }
 }

+ 19 - 8
src/locales/mr-IN.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "चिटकवा",
     "paste": "चिटकवा",
+    "pasteAsPlaintext": "",
     "pasteCharts": "चार्ट चिकटवा",
     "pasteCharts": "चार्ट चिकटवा",
     "selectAll": "समस्त निवडा",
     "selectAll": "समस्त निवडा",
     "multiSelect": "निवडित तत्व जोडा",
     "multiSelect": "निवडित तत्व जोडा",
@@ -71,7 +72,7 @@
     "layers": "स्तर",
     "layers": "स्तर",
     "actions": "क्रिया",
     "actions": "क्रिया",
     "language": "भाषा",
     "language": "भाषा",
-    "liveCollaboration": "थेट सहयोग",
+    "liveCollaboration": "ज्वलंत सहयोग...",
     "duplicateSelection": "प्रतिलिपि",
     "duplicateSelection": "प्रतिलिपि",
     "untitled": "अशीर्षकांकित",
     "untitled": "अशीर्षकांकित",
     "name": "नाव",
     "name": "नाव",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "पटल पुसा",
     "clearReset": "पटल पुसा",
     "exportJSON": "फ़ाइलमधे बाहेर ठेवा",
     "exportJSON": "फ़ाइलमधे बाहेर ठेवा",
-    "exportImage": "प्रतिमेस्वरूप जतन करा",
-    "export": "बाहेर ठेवा",
+    "exportImage": "प्रतिमा निर्यात करा...",
+    "export": "येथे सुरक्षित करा...",
     "exportToPng": "पी-एन-जी स्वरूपात बाहेर ठेवा",
     "exportToPng": "पी-एन-जी स्वरूपात बाहेर ठेवा",
     "exportToSvg": "एस-वी-जी स्वरूपात बाहेर ठेवा",
     "exportToSvg": "एस-वी-जी स्वरूपात बाहेर ठेवा",
     "copyToClipboard": "फळी वर कॉपी करा",
     "copyToClipboard": "फळी वर कॉपी करा",
@@ -144,7 +145,7 @@
     "scale": "मोजपट्टी",
     "scale": "मोजपट्टी",
     "save": "वर्तमान फ़ाइल मधे जतन करा",
     "save": "वर्तमान फ़ाइल मधे जतन करा",
     "saveAs": "ह्या नावाने जतन करा",
     "saveAs": "ह्या नावाने जतन करा",
-    "load": "बाहेरुन भरा",
+    "load": "उघडा",
     "getShareableLink": "सामायिके साठी दुवा प्राप्त करा",
     "getShareableLink": "सामायिके साठी दुवा प्राप्त करा",
     "close": "बंद करा",
     "close": "बंद करा",
     "selectLanguage": "भाषा निवड करा",
     "selectLanguage": "भाषा निवड करा",
@@ -214,7 +215,7 @@
     "text": "टेक्स्ट",
     "text": "टेक्स्ट",
     "library": "संग्रह",
     "library": "संग्रह",
     "lock": "निवडलेले यंत्र चित्रकरण झाल्या नंतर ही सक्रिय ठेवा",
     "lock": "निवडलेले यंत्र चित्रकरण झाल्या नंतर ही सक्रिय ठेवा",
-    "penMode": "पिंच-झूम प्रतिबंधित करा आणि फक्त पेन हे यंत्र मुक्त चित्री करण साठी स्वीकारा",
+    "penMode": "पेन चा मोड - स्पर्श टाळा",
     "link": "निवडलेल्या आकारासाठी दुवा जोडा/बदल करा",
     "link": "निवडलेल्या आकारासाठी दुवा जोडा/बदल करा",
     "eraser": "खोड रबर"
     "eraser": "खोड रबर"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "आकार छोटा मोठा करताना SHIFT धरून तुम्ही प्रमाण मर्यादित करू शकता, \nकेंद्रापासून आकार छोटा मोठा करण्यासाठी ALT धरून ठेवा",
     "resize": "आकार छोटा मोठा करताना SHIFT धरून तुम्ही प्रमाण मर्यादित करू शकता, \nकेंद्रापासून आकार छोटा मोठा करण्यासाठी ALT धरून ठेवा",
     "resizeImage": "SHIFT धरून तुम्ही मुक्तपणे आकार मोठा छोटा करु शकता,\nकेंद्रापासून आकार मोठा छोटा करण्यासाठी ALT धरून ठेवा",
     "resizeImage": "SHIFT धरून तुम्ही मुक्तपणे आकार मोठा छोटा करु शकता,\nकेंद्रापासून आकार मोठा छोटा करण्यासाठी ALT धरून ठेवा",
     "rotate": "फिरवत असताना शिफ्ट धरून तुम्ही कोन मर्यादित करू शकता",
     "rotate": "फिरवत असताना शिफ्ट धरून तुम्ही कोन मर्यादित करू शकता",
-    "lineEditor_info": "बिंदु संपादित करण्या साठी दुहेरी क्लिक किव्हा एंटर की दाबा",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "बिंदु (एक किव्हा अनेक) काढ़ण्या साठी डिलीट की दाबा,\nCtrlOrCmd बरोबार D प्रति साठी,\nकिव्हा ड्रेग हलवण्या साठी",
     "lineEditor_pointSelected": "बिंदु (एक किव्हा अनेक) काढ़ण्या साठी डिलीट की दाबा,\nCtrlOrCmd बरोबार D प्रति साठी,\nकिव्हा ड्रेग हलवण्या साठी",
     "lineEditor_nothingSelected": "संपादित करण्यासाठी एक बिंदू निवडा (अनेक निवडण्यासाठी SHIFT धरून ठेवा),\nकिंवा Alt धरून ठेवा आणि नवीन बिंदू जोडण्यासाठी क्लिक करा",
     "lineEditor_nothingSelected": "संपादित करण्यासाठी एक बिंदू निवडा (अनेक निवडण्यासाठी SHIFT धरून ठेवा),\nकिंवा Alt धरून ठेवा आणि नवीन बिंदू जोडण्यासाठी क्लिक करा",
     "placeImage": "प्रतिमा ठेवण्यासाठी क्लिक करा, किंवा त्याचा आकार बदलण्या साठी क्लिक करा आणि ड्रॅग करा",
     "placeImage": "प्रतिमा ठेवण्यासाठी क्लिक करा, किंवा त्याचा आकार बदलण्या साठी क्लिक करा आणि ड्रॅग करा",
@@ -310,7 +311,9 @@
     "view": "दृश्य",
     "view": "दृश्य",
     "zoomToFit": "सर्व तत्व दिसतील असे दृश्यरूप आकार करा",
     "zoomToFit": "सर्व तत्व दिसतील असे दृश्यरूप आकार करा",
     "zoomToSelection": "निवडी प्रयंत दृश्यरूप आकार करा",
     "zoomToSelection": "निवडी प्रयंत दृश्यरूप आकार करा",
-    "toggleElementLock": "कुलूपातून आत/बाहेर निवड"
+    "toggleElementLock": "कुलूपातून आत/बाहेर निवड",
+    "movePageUpDown": "पान वर/खाली करा",
+    "movePageLeftRight": "पान डावी/उजवी कडे करा"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "पटल स्वच्छ करा"
     "title": "पटल स्वच्छ करा"
@@ -391,7 +394,8 @@
     "fileSaved": "फ़ाइल जतन झाली.",
     "fileSaved": "फ़ाइल जतन झाली.",
     "fileSavedToFilename": "{filename} मधे जतन झाली",
     "fileSavedToFilename": "{filename} मधे जतन झाली",
     "canvas": "पटल",
     "canvas": "पटल",
-    "selection": "निवड"
+    "selection": "निवड",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "पांढरा",
     "ffffff": "पांढरा",
@@ -439,5 +443,12 @@
     "5c940d": "नीबू 9",
     "5c940d": "नीबू 9",
     "e67700": "पीला 9",
     "e67700": "पीला 9",
     "d9480f": "नारंगी 9"
     "d9480f": "नारंगी 9"
+  },
+  "welcomeScreen": {
+    "data": "तुमचा सर्व डेटा ब्राउज़र मधे स्थानिक जागेत सुरक्षित झाला.",
+    "switchToPlusApp": "त्याएवजी तुम्हाला Excalidraw+ पर्याय हवा आहे का?",
+    "menuHints": "निर्यात, पसंती, भाषा, ...",
+    "toolbarHints": "साधन निवडा आणि चित्रीकरण सुरु करा!",
+    "helpHints": "शॉर्टकट & सहाय"
   }
   }
 }
 }

+ 16 - 5
src/locales/my-MM.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "ထား",
     "paste": "ထား",
+    "pasteAsPlaintext": "",
     "pasteCharts": "",
     "pasteCharts": "",
     "selectAll": "အကုန်ရွေး",
     "selectAll": "အကုန်ရွေး",
     "multiSelect": "ရွေးထားသည့်ထဲပုံထည့်",
     "multiSelect": "ရွေးထားသည့်ထဲပုံထည့်",
@@ -136,7 +137,7 @@
     "clearReset": "ကားချပ်ရှင်းလင်း",
     "clearReset": "ကားချပ်ရှင်းလင်း",
     "exportJSON": "",
     "exportJSON": "",
     "exportImage": "",
     "exportImage": "",
-    "export": "ထုတ်",
+    "export": "",
     "exportToPng": "PNG ထုတ်",
     "exportToPng": "PNG ထုတ်",
     "exportToSvg": "SVG ထုတ်",
     "exportToSvg": "SVG ထုတ်",
     "copyToClipboard": "ကူးယူ",
     "copyToClipboard": "ကူးယူ",
@@ -144,7 +145,7 @@
     "scale": "စကေး",
     "scale": "စကေး",
     "save": "",
     "save": "",
     "saveAs": "ပြောင်းသိမ်း",
     "saveAs": "ပြောင်းသိမ်း",
-    "load": "တင်သွင်း",
+    "load": "",
     "getShareableLink": "မျှဝေရန် လင့်ခ်ရယူ",
     "getShareableLink": "မျှဝေရန် လင့်ခ်ရယူ",
     "close": "ပိတ်",
     "close": "ပိတ်",
     "selectLanguage": "ဘာသာစကားရွေးပါ",
     "selectLanguage": "ဘာသာစကားရွေးပါ",
@@ -235,7 +236,7 @@
     "resize": "အချိုးအစားကန့်သတ်ရန် Shift နှင့် ဗဟိုမှချိန်ညှိရန် Alt တို့ကိုနှိပ်ထားနိုင်သည်",
     "resize": "အချိုးအစားကန့်သတ်ရန် Shift နှင့် ဗဟိုမှချိန်ညှိရန် Alt တို့ကိုနှိပ်ထားနိုင်သည်",
     "resizeImage": "",
     "resizeImage": "",
     "rotate": "Shift ကိုနှိပ်ထားခြင်းဖြင့် ထောင့်အလိုက်လှည့်နိုင်သည်",
     "rotate": "Shift ကိုနှိပ်ထားခြင်းဖြင့် ထောင့်အလိုက်လှည့်နိုင်သည်",
-    "lineEditor_info": "အမှတ်များပြင်ဆင်သတ်မှတ်ရင် ကလစ်နှစ်ချက် (သို့) Enter ကိုနှိပ်ပါ",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "",
     "lineEditor_pointSelected": "",
     "lineEditor_nothingSelected": "",
     "lineEditor_nothingSelected": "",
     "placeImage": "",
     "placeImage": "",
@@ -310,7 +311,9 @@
     "view": "",
     "view": "",
     "zoomToFit": "",
     "zoomToFit": "",
     "zoomToSelection": "",
     "zoomToSelection": "",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": ""
     "title": ""
@@ -391,7 +394,8 @@
     "fileSaved": "",
     "fileSaved": "",
     "fileSavedToFilename": "",
     "fileSavedToFilename": "",
     "canvas": "",
     "canvas": "",
-    "selection": ""
+    "selection": "",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "",
     "ffffff": "",
@@ -439,5 +443,12 @@
     "5c940d": "",
     "5c940d": "",
     "e67700": "",
     "e67700": "",
     "d9480f": ""
     "d9480f": ""
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 18 - 7
src/locales/nb-NO.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Lim inn",
     "paste": "Lim inn",
+    "pasteAsPlaintext": "Lim inn som klartekst",
     "pasteCharts": "Lim inn diagrammer",
     "pasteCharts": "Lim inn diagrammer",
     "selectAll": "Velg alt",
     "selectAll": "Velg alt",
     "multiSelect": "Legg til element i utvalg",
     "multiSelect": "Legg til element i utvalg",
@@ -71,7 +72,7 @@
     "layers": "Lag",
     "layers": "Lag",
     "actions": "Handlinger",
     "actions": "Handlinger",
     "language": "Språk",
     "language": "Språk",
-    "liveCollaboration": "Sanntids-samarbeid",
+    "liveCollaboration": "Sanntids-samarbeid...",
     "duplicateSelection": "Dupliser",
     "duplicateSelection": "Dupliser",
     "untitled": "Uten navn",
     "untitled": "Uten navn",
     "name": "Navn",
     "name": "Navn",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Tøm lerretet og tilbakestill bakgrunnsfargen",
     "clearReset": "Tøm lerretet og tilbakestill bakgrunnsfargen",
     "exportJSON": "Eksporter til fil",
     "exportJSON": "Eksporter til fil",
-    "exportImage": "Lagre som bilde",
-    "export": "Eksporter",
+    "exportImage": "Eksporter bilde...",
+    "export": "Lagre som...",
     "exportToPng": "Eksporter til PNG",
     "exportToPng": "Eksporter til PNG",
     "exportToSvg": "Eksporter til SVG",
     "exportToSvg": "Eksporter til SVG",
     "copyToClipboard": "Kopier til utklippstavle",
     "copyToClipboard": "Kopier til utklippstavle",
@@ -214,7 +215,7 @@
     "text": "Tekst",
     "text": "Tekst",
     "library": "Bibliotek",
     "library": "Bibliotek",
     "lock": "Behold merket verktøy som aktivt",
     "lock": "Behold merket verktøy som aktivt",
-    "penMode": "Forhindre zoom ved kniping og godta frihåndstegning kun fra penn",
+    "penMode": "Pennemodus - forhindre berøring",
     "link": "Legg til / oppdater link for en valgt figur",
     "link": "Legg til / oppdater link for en valgt figur",
     "eraser": "Viskelær"
     "eraser": "Viskelær"
   },
   },
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Du kan endre størrelse fritt ved å holde SHIFT,\nhold ALT for å endre størrelse fra midten",
     "resizeImage": "Du kan endre størrelse fritt ved å holde SHIFT,\nhold ALT for å endre størrelse fra midten",
     "rotate": "Du kan låse vinklene ved å holde SHIFT mens du roterer",
     "rotate": "Du kan låse vinklene ved å holde SHIFT mens du roterer",
-    "lineEditor_info": "Dobbeltklikk eller trykk Enter for å redigere punkter",
+    "lineEditor_info": "Hold Ctrl/Cmd og dobbelklikk eller trykk Ctrl/Cmd + Enter for å endre punkter",
     "lineEditor_pointSelected": "Trykk på Slett for å fjerne punktet, Ctrl / Cmd+D for å duplisere, eller dra for å flytte",
     "lineEditor_pointSelected": "Trykk på Slett for å fjerne punktet, Ctrl / Cmd+D for å duplisere, eller dra for å flytte",
     "lineEditor_nothingSelected": "Velg et punkt å redigere (hold SHIFT for å velge flere),\neller hold Alt og klikk for å legge til nye punkter",
     "lineEditor_nothingSelected": "Velg et punkt å redigere (hold SHIFT for å velge flere),\neller hold Alt og klikk for å legge til nye punkter",
     "placeImage": "Klikk for å plassere bildet, eller klikk og dra for å angi størrelsen manuelt",
     "placeImage": "Klikk for å plassere bildet, eller klikk og dra for å angi størrelsen manuelt",
@@ -310,7 +311,9 @@
     "view": "Vis",
     "view": "Vis",
     "zoomToFit": "Zoom for å se alle elementer",
     "zoomToFit": "Zoom for å se alle elementer",
     "zoomToSelection": "Zoom til utvalg",
     "zoomToSelection": "Zoom til utvalg",
-    "toggleElementLock": "Lås/lås opp utvalg"
+    "toggleElementLock": "Lås/lås opp utvalg",
+    "movePageUpDown": "Flytt side opp/ned",
+    "movePageLeftRight": "Flytt siden til venstre/høyre"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Tøm lerret"
     "title": "Tøm lerret"
@@ -391,7 +394,8 @@
     "fileSaved": "Fil lagret.",
     "fileSaved": "Fil lagret.",
     "fileSavedToFilename": "Lagret til {filename}",
     "fileSavedToFilename": "Lagret til {filename}",
     "canvas": "lerret",
     "canvas": "lerret",
-    "selection": "utvalg"
+    "selection": "utvalg",
+    "pasteAsSingleElement": "Bruk {{shortcut}} for å lime inn som ett enkelt element,\neller lim inn i en eksisterende tekstbehandler"
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Hvit",
     "ffffff": "Hvit",
@@ -439,5 +443,12 @@
     "5c940d": "Limegrønn 9",
     "5c940d": "Limegrønn 9",
     "e67700": "Gul 9",
     "e67700": "Gul 9",
     "d9480f": "Oransje 9"
     "d9480f": "Oransje 9"
+  },
+  "welcomeScreen": {
+    "data": "Alle dine data lagres lokalt i din nettleser.",
+    "switchToPlusApp": "Ønsker du å gå til Excalidraw+ i stedet?",
+    "menuHints": "Eksporter, innstillinger, språk, ...",
+    "toolbarHints": "Velg et verktøy og start å tegne!",
+    "helpHints": "Snarveier & hjelp"
   }
   }
 }
 }

+ 56 - 45
src/locales/nl-NL.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Plakken",
     "paste": "Plakken",
+    "pasteAsPlaintext": "Plakken als platte tekst",
     "pasteCharts": "Plak grafieken",
     "pasteCharts": "Plak grafieken",
     "selectAll": "Alles selecteren",
     "selectAll": "Alles selecteren",
     "multiSelect": "Voeg element toe aan selectie",
     "multiSelect": "Voeg element toe aan selectie",
@@ -9,14 +10,14 @@
     "copy": "Kopiëren",
     "copy": "Kopiëren",
     "copyAsPng": "Kopieer als PNG",
     "copyAsPng": "Kopieer als PNG",
     "copyAsSvg": "Kopieer naar klembord als SVG",
     "copyAsSvg": "Kopieer naar klembord als SVG",
-    "copyText": "Kopiëren naar klembord als tekst",
+    "copyText": "Kopieer naar klembord als tekst",
     "bringForward": "Breng naar voren",
     "bringForward": "Breng naar voren",
     "sendToBack": "Stuur naar achtergrond",
     "sendToBack": "Stuur naar achtergrond",
     "bringToFront": "Breng naar voorgrond",
     "bringToFront": "Breng naar voorgrond",
     "sendBackward": "Breng naar achter",
     "sendBackward": "Breng naar achter",
     "delete": "Verwijderen",
     "delete": "Verwijderen",
-    "copyStyles": "Opmaak kopiëren",
-    "pasteStyles": "Opmaak plakken",
+    "copyStyles": "Kopieer opmaak",
+    "pasteStyles": "Plak opmaak",
     "stroke": "Lijn",
     "stroke": "Lijn",
     "background": "Achtergrond",
     "background": "Achtergrond",
     "fill": "Invulling",
     "fill": "Invulling",
@@ -71,7 +72,7 @@
     "layers": "Lagen",
     "layers": "Lagen",
     "actions": "Acties",
     "actions": "Acties",
     "language": "Taal",
     "language": "Taal",
-    "liveCollaboration": "Live Samenwerking",
+    "liveCollaboration": "Live Samenwerking...",
     "duplicateSelection": "Dupliceer",
     "duplicateSelection": "Dupliceer",
     "untitled": "Naamloos",
     "untitled": "Naamloos",
     "name": "Naam",
     "name": "Naam",
@@ -105,38 +106,38 @@
     "toggleTheme": "Thema aan/uit",
     "toggleTheme": "Thema aan/uit",
     "personalLib": "Persoonlijke bibliotheek",
     "personalLib": "Persoonlijke bibliotheek",
     "excalidrawLib": "Excalidraw bibliotheek",
     "excalidrawLib": "Excalidraw bibliotheek",
-    "decreaseFontSize": "",
-    "increaseFontSize": "",
+    "decreaseFontSize": "Letters verkleinen",
+    "increaseFontSize": "Letters vergroten",
     "unbindText": "Ontkoppel tekst",
     "unbindText": "Ontkoppel tekst",
-    "bindText": "",
+    "bindText": "Koppel tekst aan de container",
     "link": {
     "link": {
-      "edit": "",
-      "create": "",
-      "label": ""
+      "edit": "Wijzig link",
+      "create": "Maak link",
+      "label": "Link"
     },
     },
     "lineEditor": {
     "lineEditor": {
       "edit": "Bewerk regel",
       "edit": "Bewerk regel",
       "exit": "Verlaat regel-editor"
       "exit": "Verlaat regel-editor"
     },
     },
     "elementLock": {
     "elementLock": {
-      "lock": "",
-      "unlock": "",
-      "lockAll": "",
-      "unlockAll": ""
+      "lock": "Vergrendel",
+      "unlock": "Ontgrendel",
+      "lockAll": "Vergrendel alles",
+      "unlockAll": "Ontgrendel alles"
     },
     },
-    "statusPublished": "",
-    "sidebarLock": ""
+    "statusPublished": "Gepubliceerd",
+    "sidebarLock": "Zijbalk open houden"
   },
   },
   "library": {
   "library": {
-    "noItems": "",
-    "hint_emptyLibrary": "",
-    "hint_emptyPrivateLibrary": ""
+    "noItems": "Nog geen items toegevoegd...",
+    "hint_emptyLibrary": "Selecteer een item op het canvas om het hier toe te voegen of installeer een bibliotheek uit de openbare repository, hieronder.",
+    "hint_emptyPrivateLibrary": "Selecteer een item op het canvas om het hier toe te voegen."
   },
   },
   "buttons": {
   "buttons": {
     "clearReset": "Canvas opnieuw instellen",
     "clearReset": "Canvas opnieuw instellen",
     "exportJSON": "Exporteren naar bestand",
     "exportJSON": "Exporteren naar bestand",
-    "exportImage": "Als afbeelding opslaan",
-    "export": "Exporteren",
+    "exportImage": "Exporteer afbeelding...",
+    "export": "Sla op...",
     "exportToPng": "Exporteren naar PNG",
     "exportToPng": "Exporteren naar PNG",
     "exportToSvg": "Exporteren naar SVG",
     "exportToSvg": "Exporteren naar SVG",
     "copyToClipboard": "Kopieer",
     "copyToClipboard": "Kopieer",
@@ -181,11 +182,11 @@
     "couldNotCopyToClipboard": "Kon niet naar klembord kopiëren.",
     "couldNotCopyToClipboard": "Kon niet naar klembord kopiëren.",
     "decryptFailed": "Kan gegevens niet decoderen.",
     "decryptFailed": "Kan gegevens niet decoderen.",
     "uploadedSecurly": "De upload is beveiligd met end-to-end encryptie, wat betekent dat de Excalidraw server en derden de inhoud niet kunnen lezen.",
     "uploadedSecurly": "De upload is beveiligd met end-to-end encryptie, wat betekent dat de Excalidraw server en derden de inhoud niet kunnen lezen.",
-    "loadSceneOverridePrompt": "Het laden van externe tekening zal uw bestaande inhoud vervangen. Wil je doorgaan?",
+    "loadSceneOverridePrompt": "Het inladen van een externe tekening zal je bestaande inhoud vervangen. Wil je verdergaan?",
     "collabStopOverridePrompt": "Wanneer de sessie wordt gestopt, overschrijft u de eerdere, lokaal opgeslagen tekening. Weet je het zeker?\n\n(Als je de lokale tekening wilt behouden, sluit je in plaats daarvan het browsertabblad)",
     "collabStopOverridePrompt": "Wanneer de sessie wordt gestopt, overschrijft u de eerdere, lokaal opgeslagen tekening. Weet je het zeker?\n\n(Als je de lokale tekening wilt behouden, sluit je in plaats daarvan het browsertabblad)",
     "errorAddingToLibrary": "Kan item niet toevoegen aan de bibliotheek",
     "errorAddingToLibrary": "Kan item niet toevoegen aan de bibliotheek",
     "errorRemovingFromLibrary": "Kan item niet uit de bibliotheek verwijderen",
     "errorRemovingFromLibrary": "Kan item niet uit de bibliotheek verwijderen",
-    "confirmAddLibrary": "Hiermee worden {{numShapes}} vorm(n) aan uw bibliotheek toegevoegd. Ben je het zeker?",
+    "confirmAddLibrary": "Dit zal {{numShapes}} vorm(en) toevoegen aan je bibliotheek. Weet je het zeker?",
     "imageDoesNotContainScene": "Deze afbeelding lijkt geen scène gegevens te bevatten. Heb je scène embedding tijdens het exporteren ingeschakeld?",
     "imageDoesNotContainScene": "Deze afbeelding lijkt geen scène gegevens te bevatten. Heb je scène embedding tijdens het exporteren ingeschakeld?",
     "cannotRestoreFromImage": "Scène kan niet worden hersteld vanuit dit afbeeldingsbestand",
     "cannotRestoreFromImage": "Scène kan niet worden hersteld vanuit dit afbeeldingsbestand",
     "invalidSceneUrl": "Kan scène niet importeren vanuit de opgegeven URL. Het is onjuist of bevat geen geldige Excalidraw JSON-gegevens.",
     "invalidSceneUrl": "Kan scène niet importeren vanuit de opgegeven URL. Het is onjuist of bevat geen geldige Excalidraw JSON-gegevens.",
@@ -197,26 +198,26 @@
     "unsupportedFileType": "Niet-ondersteund bestandstype.",
     "unsupportedFileType": "Niet-ondersteund bestandstype.",
     "imageInsertError": "Afbeelding invoegen mislukt. Probeer het later opnieuw...",
     "imageInsertError": "Afbeelding invoegen mislukt. Probeer het later opnieuw...",
     "fileTooBig": "Bestand is te groot. Maximale grootte is {{maxSize}}.",
     "fileTooBig": "Bestand is te groot. Maximale grootte is {{maxSize}}.",
-    "svgImageInsertError": "",
+    "svgImageInsertError": "Kon geen SVG-afbeelding invoegen. De SVG-opmaak ziet er niet geldig uit.",
     "invalidSVGString": "Ongeldige SVG.",
     "invalidSVGString": "Ongeldige SVG.",
-    "cannotResolveCollabServer": "",
-    "importLibraryError": ""
+    "cannotResolveCollabServer": "Kan geen verbinding maken met de collab server. Herlaad de pagina en probeer het opnieuw.",
+    "importLibraryError": "Kon bibliotheek niet laden"
   },
   },
   "toolBar": {
   "toolBar": {
     "selection": "Selectie",
     "selection": "Selectie",
-    "image": "",
+    "image": "Voeg afbeelding in",
     "rectangle": "Rechthoek",
     "rectangle": "Rechthoek",
     "diamond": "Ruit",
     "diamond": "Ruit",
     "ellipse": "Ovaal",
     "ellipse": "Ovaal",
     "arrow": "Pijl",
     "arrow": "Pijl",
     "line": "Lijn",
     "line": "Lijn",
-    "freedraw": "Tekenen",
+    "freedraw": "Teken",
     "text": "Tekst",
     "text": "Tekst",
     "library": "Bibliotheek",
     "library": "Bibliotheek",
     "lock": "Geselecteerde tool actief houden na tekenen",
     "lock": "Geselecteerde tool actief houden na tekenen",
-    "penMode": "Voorkom pinch-zoom en accepteer freedraw invoer alleen van pen",
+    "penMode": "Pen modus - Blokkeer aanraken",
     "link": "",
     "link": "",
-    "eraser": ""
+    "eraser": "Gum"
   },
   },
   "headings": {
   "headings": {
     "canvasActions": "Canvasacties",
     "canvasActions": "Canvasacties",
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "",
     "resizeImage": "",
     "rotate": "Je kan hoeken beperken door SHIFT ingedrukt te houden wanneer je draait",
     "rotate": "Je kan hoeken beperken door SHIFT ingedrukt te houden wanneer je draait",
-    "lineEditor_info": "Dubbelklik of druk op Enter om punten te bewerken",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "",
     "lineEditor_pointSelected": "",
     "lineEditor_nothingSelected": "",
     "lineEditor_nothingSelected": "",
     "placeImage": "",
     "placeImage": "",
@@ -258,15 +259,15 @@
     "trackedToSentry_pre": "De fout met ID ",
     "trackedToSentry_pre": "De fout met ID ",
     "trackedToSentry_post": " was gevolgd op ons systeem.",
     "trackedToSentry_post": " was gevolgd op ons systeem.",
     "openIssueMessage_pre": "We waren voorzichtig om je scène-informatie niet in de fout toe te voegen. Als je scène niet privé is, overweeg dan alstublieft het opvolgen op onze ",
     "openIssueMessage_pre": "We waren voorzichtig om je scène-informatie niet in de fout toe te voegen. Als je scène niet privé is, overweeg dan alstublieft het opvolgen op onze ",
-    "openIssueMessage_button": "bug tracker.",
+    "openIssueMessage_button": "bugtracker.",
     "openIssueMessage_post": " Kopieer de informatie hieronder naar de GitHub issue.",
     "openIssueMessage_post": " Kopieer de informatie hieronder naar de GitHub issue.",
     "sceneContent": "Scène-inhoud:"
     "sceneContent": "Scène-inhoud:"
   },
   },
   "roomDialog": {
   "roomDialog": {
     "desc_intro": "Je kunt mensen uitnodigen om met je samen te werken.",
     "desc_intro": "Je kunt mensen uitnodigen om met je samen te werken.",
     "desc_privacy": "Geen zorgen, de sessie gebruikt end-to-end encryptie, dus wat je tekent blijft privé. Zelfs onze server zal niet kunnen zien wat je tekent.",
     "desc_privacy": "Geen zorgen, de sessie gebruikt end-to-end encryptie, dus wat je tekent blijft privé. Zelfs onze server zal niet kunnen zien wat je tekent.",
-    "button_startSession": "Sessie starten",
-    "button_stopSession": "Sessie afbreken",
+    "button_startSession": "Start sessie",
+    "button_stopSession": "Stop sessie",
     "desc_inProgressIntro": "De live-samenwerkingssessie is nu gestart.",
     "desc_inProgressIntro": "De live-samenwerkingssessie is nu gestart.",
     "desc_shareLink": "Deel deze link met iedereen waarmee je wil samenwerken:",
     "desc_shareLink": "Deel deze link met iedereen waarmee je wil samenwerken:",
     "desc_exitSession": "Het stoppen van de sessie zal je loskoppelen van de kamer, maar je kunt lokaal doorwerken met de scène.\nPas op: dit heeft geen invloed op andere mensen en dat zij nog steeds in staat zullen zijn om samen te werken aan hun versie.",
     "desc_exitSession": "Het stoppen van de sessie zal je loskoppelen van de kamer, maar je kunt lokaal doorwerken met de scène.\nPas op: dit heeft geen invloed op andere mensen en dat zij nog steeds in staat zullen zijn om samen te werken aan hun versie.",
@@ -283,7 +284,7 @@
     "link_details": "Exporteren als een alleen-lezen link.",
     "link_details": "Exporteren als een alleen-lezen link.",
     "link_button": "Exporteer naar link",
     "link_button": "Exporteer naar link",
     "excalidrawplus_description": "Sla de scène op in je Excalidraw+ werkruimte.",
     "excalidrawplus_description": "Sla de scène op in je Excalidraw+ werkruimte.",
-    "excalidrawplus_button": "Exporteren",
+    "excalidrawplus_button": "Exporteer",
     "excalidrawplus_exportError": "Kan op dit moment niet exporteren naar Excalidraw+..."
     "excalidrawplus_exportError": "Kan op dit moment niet exporteren naar Excalidraw+..."
   },
   },
   "helpDialog": {
   "helpDialog": {
@@ -302,7 +303,7 @@
     "howto": "Volg onze handleidingen",
     "howto": "Volg onze handleidingen",
     "or": "of",
     "or": "of",
     "preventBinding": "Pijlbinding voorkomen",
     "preventBinding": "Pijlbinding voorkomen",
-    "tools": "",
+    "tools": "Tools",
     "shortcuts": "Sneltoetsen",
     "shortcuts": "Sneltoetsen",
     "textFinish": "Voltooi het bewerken (teksteditor)",
     "textFinish": "Voltooi het bewerken (teksteditor)",
     "textNewLine": "Nieuwe regel toevoegen (teksteditor)",
     "textNewLine": "Nieuwe regel toevoegen (teksteditor)",
@@ -310,10 +311,12 @@
     "view": "Weergave",
     "view": "Weergave",
     "zoomToFit": "Zoom in op alle elementen",
     "zoomToFit": "Zoom in op alle elementen",
     "zoomToSelection": "Inzoomen op selectie",
     "zoomToSelection": "Inzoomen op selectie",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "Pagina omhoog/omlaag",
+    "movePageLeftRight": "Verplaats pagina links/rechts"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
-    "title": ""
+    "title": "Wis canvas"
   },
   },
   "publishDialog": {
   "publishDialog": {
     "title": "Publiceer bibliotheek",
     "title": "Publiceer bibliotheek",
@@ -321,13 +324,13 @@
     "authorName": "Naam auteur",
     "authorName": "Naam auteur",
     "githubUsername": "GitHub gebruikersnaam",
     "githubUsername": "GitHub gebruikersnaam",
     "twitterUsername": "Twitter gebruikersnaam",
     "twitterUsername": "Twitter gebruikersnaam",
-    "libraryName": "Bibliotheek naam",
-    "libraryDesc": "Bibliotheek beschrijving",
+    "libraryName": "Naam bibliotheek",
+    "libraryDesc": "Beschrijving van de bibliotheek",
     "website": "Website",
     "website": "Website",
     "placeholder": {
     "placeholder": {
-      "authorName": "Uw naam of gebruikersnaam:",
+      "authorName": "Je naam of gebruikersnaam",
       "libraryName": "Naam van je bibliotheek",
       "libraryName": "Naam van je bibliotheek",
-      "libraryDesc": "Beschrijving van uw bibliotheek om mensen te helpen het gebruik ervan te begrijpen",
+      "libraryDesc": "Beschrijving van je bibliotheek om mensen te helpen het gebruik ervan te begrijpen",
       "githubHandle": "",
       "githubHandle": "",
       "twitterHandle": "",
       "twitterHandle": "",
       "website": "Link naar je persoonlijke website of elders (optioneel)"
       "website": "Link naar je persoonlijke website of elders (optioneel)"
@@ -343,12 +346,12 @@
     },
     },
     "noteGuidelines": {
     "noteGuidelines": {
       "pre": "",
       "pre": "",
-      "link": "",
+      "link": "richtlijnen",
       "post": ""
       "post": ""
     },
     },
     "noteLicense": {
     "noteLicense": {
       "pre": "",
       "pre": "",
-      "link": "",
+      "link": "MIT-licentie, ",
       "post": ""
       "post": ""
     },
     },
     "noteItems": "",
     "noteItems": "",
@@ -391,7 +394,8 @@
     "fileSaved": "Bestand opgeslagen.",
     "fileSaved": "Bestand opgeslagen.",
     "fileSavedToFilename": "Opgeslagen als {filename}",
     "fileSavedToFilename": "Opgeslagen als {filename}",
     "canvas": "canvas",
     "canvas": "canvas",
-    "selection": "selectie"
+    "selection": "selectie",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Wit",
     "ffffff": "Wit",
@@ -439,5 +443,12 @@
     "5c940d": "Limoen 9",
     "5c940d": "Limoen 9",
     "e67700": "Geel 9",
     "e67700": "Geel 9",
     "d9480f": "Oranje 9"
     "d9480f": "Oranje 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/nn-NO.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Lim inn",
     "paste": "Lim inn",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Lim inn diagram",
     "pasteCharts": "Lim inn diagram",
     "selectAll": "Vel alt",
     "selectAll": "Vel alt",
     "multiSelect": "Legg til element i utval",
     "multiSelect": "Legg til element i utval",
@@ -71,7 +72,7 @@
     "layers": "Lag",
     "layers": "Lag",
     "actions": "Handlingar",
     "actions": "Handlingar",
     "language": "Språk",
     "language": "Språk",
-    "liveCollaboration": "Sanntids-samarbeid",
+    "liveCollaboration": "",
     "duplicateSelection": "Dupliser",
     "duplicateSelection": "Dupliser",
     "untitled": "Utan namn",
     "untitled": "Utan namn",
     "name": "Namn",
     "name": "Namn",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Tilbakestill lerretet",
     "clearReset": "Tilbakestill lerretet",
     "exportJSON": "Eksporter til fil",
     "exportJSON": "Eksporter til fil",
-    "exportImage": "Lagre som bilete",
-    "export": "Eksporter",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "Eksporter til PNG",
     "exportToPng": "Eksporter til PNG",
     "exportToSvg": "Eksporter til SVG",
     "exportToSvg": "Eksporter til SVG",
     "copyToClipboard": "Kopier til utklippstavla",
     "copyToClipboard": "Kopier til utklippstavla",
@@ -144,7 +145,7 @@
     "scale": "Skaler",
     "scale": "Skaler",
     "save": "Lagre til noverande fil",
     "save": "Lagre til noverande fil",
     "saveAs": "Lagre som",
     "saveAs": "Lagre som",
-    "load": "Opne",
+    "load": "",
     "getShareableLink": "Hent delingslenke",
     "getShareableLink": "Hent delingslenke",
     "close": "Lukk",
     "close": "Lukk",
     "selectLanguage": "Vel språk",
     "selectLanguage": "Vel språk",
@@ -214,7 +215,7 @@
     "text": "Tekst",
     "text": "Tekst",
     "library": "Bibliotek",
     "library": "Bibliotek",
     "lock": "Hald fram med valt verktøy",
     "lock": "Hald fram med valt verktøy",
-    "penMode": "Forhindre zoom ved kniping og godta frihandsteikning kun frå penn",
+    "penMode": "",
     "link": "Legg til/ oppdater lenke til valt figur",
     "link": "Legg til/ oppdater lenke til valt figur",
     "eraser": "Viskelêr"
     "eraser": "Viskelêr"
   },
   },
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Du kan endre storleiken fritt ved å halde inne SHIFT,\nhald ALT for å endre storleik frå sentrum",
     "resizeImage": "Du kan endre storleiken fritt ved å halde inne SHIFT,\nhald ALT for å endre storleik frå sentrum",
     "rotate": "Du kan låse vinklane ved å halde SHIFT medan du roterer",
     "rotate": "Du kan låse vinklane ved å halde SHIFT medan du roterer",
-    "lineEditor_info": "Dobbeltklikk eller trykk Enter for å redigere punkt",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Trykk på Slett for å fjerne punkt(a),\nCtrl / Cmd+D for å duplisere, eller drag for å flytte",
     "lineEditor_pointSelected": "Trykk på Slett for å fjerne punkt(a),\nCtrl / Cmd+D for å duplisere, eller drag for å flytte",
     "lineEditor_nothingSelected": "Vel eit punkt å redigere (hald inne SHIFT for å velje fleire),\neller hald inne Alt og klikk for å legge til nye punkt",
     "lineEditor_nothingSelected": "Vel eit punkt å redigere (hald inne SHIFT for å velje fleire),\neller hald inne Alt og klikk for å legge til nye punkt",
     "placeImage": "Klikk for å plassere biletet, eller klikk og drag for å velje storleik manuelt",
     "placeImage": "Klikk for å plassere biletet, eller klikk og drag for å velje storleik manuelt",
@@ -310,7 +311,9 @@
     "view": "Vising",
     "view": "Vising",
     "zoomToFit": "Zoom for å sjå alle elementa",
     "zoomToFit": "Zoom for å sjå alle elementa",
     "zoomToSelection": "Zoom til utval",
     "zoomToSelection": "Zoom til utval",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Tøm lerretet"
     "title": "Tøm lerretet"
@@ -391,7 +394,8 @@
     "fileSaved": "Fila er lagra.",
     "fileSaved": "Fila er lagra.",
     "fileSavedToFilename": "Lagra som {filename}",
     "fileSavedToFilename": "Lagra som {filename}",
     "canvas": "lerret",
     "canvas": "lerret",
-    "selection": "val"
+    "selection": "val",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Kvit",
     "ffffff": "Kvit",
@@ -439,5 +443,12 @@
     "5c940d": "Limegrøn 9",
     "5c940d": "Limegrøn 9",
     "e67700": "Gul 9",
     "e67700": "Gul 9",
     "d9480f": "Oransj 9"
     "d9480f": "Oransj 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 22 - 11
src/locales/oc-FR.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Pegar",
     "paste": "Pegar",
+    "pasteAsPlaintext": "Pegar en tèxt brut",
     "pasteCharts": "Pegar los grafics",
     "pasteCharts": "Pegar los grafics",
     "selectAll": "Tot seleccionar",
     "selectAll": "Tot seleccionar",
     "multiSelect": "Apondre un element a la seleccion",
     "multiSelect": "Apondre un element a la seleccion",
@@ -71,7 +72,7 @@
     "layers": "Calques",
     "layers": "Calques",
     "actions": "Accions",
     "actions": "Accions",
     "language": "Lenga",
     "language": "Lenga",
-    "liveCollaboration": "Collaboracion en dirèct",
+    "liveCollaboration": "Collaboracion en dirèct...",
     "duplicateSelection": "Duplicar",
     "duplicateSelection": "Duplicar",
     "untitled": "Sens títol",
     "untitled": "Sens títol",
     "name": "Nom",
     "name": "Nom",
@@ -129,14 +130,14 @@
   },
   },
   "library": {
   "library": {
     "noItems": "Cap d’element pas encara apondut...",
     "noItems": "Cap d’element pas encara apondut...",
-    "hint_emptyLibrary": "",
-    "hint_emptyPrivateLibrary": ""
+    "hint_emptyLibrary": "Seleccionatz un element d’apondre aquí, o installatz una bibliotèca del depaus public, çai-jos.",
+    "hint_emptyPrivateLibrary": "Seleccionatz un element d’apondre aquí pel canabàs."
   },
   },
   "buttons": {
   "buttons": {
     "clearReset": "Reïnicializar lo canabàs",
     "clearReset": "Reïnicializar lo canabàs",
     "exportJSON": "Exportar en fichièr",
     "exportJSON": "Exportar en fichièr",
-    "exportImage": "Salvar coma imatge",
-    "export": "Exportar",
+    "exportImage": "Exportar imatges...",
+    "export": "Enregistrar dins...",
     "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",
@@ -144,7 +145,7 @@
     "scale": "Escala",
     "scale": "Escala",
     "save": "Salvar al fichièr actual",
     "save": "Salvar al fichièr actual",
     "saveAs": "Enregistrar jos",
     "saveAs": "Enregistrar jos",
-    "load": "Cargar",
+    "load": "Dobrir",
     "getShareableLink": "Obténer lo ligam de partatge",
     "getShareableLink": "Obténer lo ligam de partatge",
     "close": "Tampar",
     "close": "Tampar",
     "selectLanguage": "Causir una lenga",
     "selectLanguage": "Causir una lenga",
@@ -214,7 +215,7 @@
     "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",
-    "penMode": "Empachar l’agradiment tactil e acceptar la picada liura solament amb un estilò",
+    "penMode": "Mòde estilo - empachar lo contact",
     "link": "Apondre/Actualizar lo ligam per una fòrma seleccionada",
     "link": "Apondre/Actualizar lo ligam per una fòrma seleccionada",
     "eraser": "Goma"
     "eraser": "Goma"
   },
   },
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Podètz retalhar liurament en quichant CTRL,\nquichatz ALT per retalhar a partir del centre",
     "resizeImage": "Podètz retalhar liurament en quichant CTRL,\nquichatz ALT per retalhar a partir del centre",
     "rotate": "Podètz restrénger los angles en mantenent MAJ pendent la rotacion",
     "rotate": "Podètz restrénger los angles en mantenent MAJ pendent la rotacion",
-    "lineEditor_info": "Doble-clicatz o quichatz Entrada per modificar los punts",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Quichar Suprimir per tirar lo(s) punt(s),\nCtrlOCmd+D per duplicar, o lisatz per desplaçar",
     "lineEditor_pointSelected": "Quichar Suprimir per tirar lo(s) punt(s),\nCtrlOCmd+D per duplicar, o lisatz per desplaçar",
     "lineEditor_nothingSelected": "Seleccionar un punt d’editar (manténer Maj. per ne seleccionar mantun),\no manténer Alt e clicar per n’apondre de novèls",
     "lineEditor_nothingSelected": "Seleccionar un punt d’editar (manténer Maj. per ne seleccionar mantun),\no manténer Alt e clicar per n’apondre de novèls",
     "placeImage": "Clicatz per plaçar l’imatge, o clicatz e lisatz per definir sa talha manualament",
     "placeImage": "Clicatz per plaçar l’imatge, o clicatz e lisatz per definir sa talha manualament",
@@ -310,7 +311,9 @@
     "view": "Vista",
     "view": "Vista",
     "zoomToFit": "Zoomar per veire totes los elements",
     "zoomToFit": "Zoomar per veire totes los elements",
     "zoomToSelection": "Zoomar la seleccion",
     "zoomToSelection": "Zoomar la seleccion",
-    "toggleElementLock": "Verrolhar/Desverrolhar la seleccion"
+    "toggleElementLock": "Verrolhar/Desverrolhar la seleccion",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Escafar canabàs"
     "title": "Escafar canabàs"
@@ -353,7 +356,7 @@
     },
     },
     "noteItems": "Cada element de bibliotèca deu aver un nom pròpri per èsser filtrable. Los elements de bibliotèca seguentas seràn incluses :",
     "noteItems": "Cada element de bibliotèca deu aver un nom pròpri per èsser filtrable. Los elements de bibliotèca seguentas seràn incluses :",
     "atleastOneLibItem": "Volgatz seleccionar almens un element de bibliotèca per començar",
     "atleastOneLibItem": "Volgatz seleccionar almens un element de bibliotèca per començar",
-    "republishWarning": ""
+    "republishWarning": "Nòta : d’unes elements seleccionats son marcats ja coma publicats/enviats. Deuriatz sonque tornar enviar los elements pendent l’actualizacion d’una bibliotèca existenta o un mandadís."
   },
   },
   "publishSuccessDialog": {
   "publishSuccessDialog": {
     "title": "Bibliotèca somesa",
     "title": "Bibliotèca somesa",
@@ -391,7 +394,8 @@
     "fileSaved": "Fichièr enregistrat.",
     "fileSaved": "Fichièr enregistrat.",
     "fileSavedToFilename": "Enregistrat jos {filename}",
     "fileSavedToFilename": "Enregistrat jos {filename}",
     "canvas": "canabàs",
     "canvas": "canabàs",
-    "selection": "seleccion"
+    "selection": "seleccion",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Blanc",
     "ffffff": "Blanc",
@@ -439,5 +443,12 @@
     "5c940d": "Verd citron 9",
     "5c940d": "Verd citron 9",
     "e67700": "Jaune 9",
     "e67700": "Jaune 9",
     "d9480f": "Irange 9"
     "d9480f": "Irange 9"
+  },
+  "welcomeScreen": {
+    "data": "Totas las donadas son enregistradas dins vòstre navegador.",
+    "switchToPlusApp": "Volètz puslèu utilizar Excalidraw+ ?",
+    "menuHints": "Exportar, preferéncias, lengas, ...",
+    "toolbarHints": "Prenètz un esplech e començatz de dessenhar !",
+    "helpHints": "Acorchis e ajuda"
   }
   }
 }
 }

+ 18 - 7
src/locales/pa-IN.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "ਪੇਸਟ ਕਰੋ",
     "paste": "ਪੇਸਟ ਕਰੋ",
+    "pasteAsPlaintext": "",
     "pasteCharts": "ਚਾਰਟ ਪੇਸਟ ਕਰੋ",
     "pasteCharts": "ਚਾਰਟ ਪੇਸਟ ਕਰੋ",
     "selectAll": "ਸਾਰੇ ਚੁਣੋ",
     "selectAll": "ਸਾਰੇ ਚੁਣੋ",
     "multiSelect": "ਐਲੀਮੈਂਟ ਨੂੰ ਚੋਣ ਵਿੱਚ ਜੋੜੋ",
     "multiSelect": "ਐਲੀਮੈਂਟ ਨੂੰ ਚੋਣ ਵਿੱਚ ਜੋੜੋ",
@@ -71,7 +72,7 @@
     "layers": "ਪਰਤਾਂ",
     "layers": "ਪਰਤਾਂ",
     "actions": "ਕਾਰਵਾਈਆਂ",
     "actions": "ਕਾਰਵਾਈਆਂ",
     "language": "ਭਾਸ਼ਾ",
     "language": "ਭਾਸ਼ਾ",
-    "liveCollaboration": "ਲਾਇਵ ਸਹਿਯੋਗ",
+    "liveCollaboration": "",
     "duplicateSelection": "ਡੁਪਲੀਕੇਟ ਬਣਾਓ",
     "duplicateSelection": "ਡੁਪਲੀਕੇਟ ਬਣਾਓ",
     "untitled": "ਬੇ-ਸਿਰਨਾਵਾਂ",
     "untitled": "ਬੇ-ਸਿਰਨਾਵਾਂ",
     "name": "ਨਾਂ",
     "name": "ਨਾਂ",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "ਕੈਨਵਸ ਰੀਸੈੱਟ ਕਰੋ",
     "clearReset": "ਕੈਨਵਸ ਰੀਸੈੱਟ ਕਰੋ",
     "exportJSON": "ਫਾਈਲ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
     "exportJSON": "ਫਾਈਲ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
-    "exportImage": "ਤਸਵੀਰ ਵਜੋਂ ਸਾਂਭੋ",
-    "export": "ਨਿਰਯਾਤ",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "PNG ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
     "exportToPng": "PNG ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
     "exportToSvg": "SVG ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
     "exportToSvg": "SVG ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ",
     "copyToClipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
     "copyToClipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
@@ -144,7 +145,7 @@
     "scale": "ਪੈਮਾਇਸ਼",
     "scale": "ਪੈਮਾਇਸ਼",
     "save": "ਮੌਜੂਦਾ ਫਾਈਲ ਵਿੱਚ ਸਾਂਭੋ",
     "save": "ਮੌਜੂਦਾ ਫਾਈਲ ਵਿੱਚ ਸਾਂਭੋ",
     "saveAs": "ਇਸ ਵਜੋਂ ਸਾਂਭੋ",
     "saveAs": "ਇਸ ਵਜੋਂ ਸਾਂਭੋ",
-    "load": "ਲੋਡ ਕਰੋ",
+    "load": "",
     "getShareableLink": "ਸਾਂਝੀ ਕਰਨ ਵਾਲੀ ਲਿੰਕ ਲਵੋ",
     "getShareableLink": "ਸਾਂਝੀ ਕਰਨ ਵਾਲੀ ਲਿੰਕ ਲਵੋ",
     "close": "ਬੰਦ ਕਰੋ",
     "close": "ਬੰਦ ਕਰੋ",
     "selectLanguage": "ਭਾਸ਼ਾ ਚੁਣੋ",
     "selectLanguage": "ਭਾਸ਼ਾ ਚੁਣੋ",
@@ -235,7 +236,7 @@
     "resize": "ਤੁਸੀਂ ਅਕਾਰ ਬਦਲਦੇ ਸਮੇਂ SHIFT ਦਬਾਈ ਰੱਖ ਕੇ ਅਨੁਪਾਤ ਨੂੰ ਕਾਬੂ ਕਰ ਸਕਦੇ ਹੋ, ਵਿਚਕਾਰ ਤੋਂ ਅਕਾਰ ਬਦਲਣ ਲਈ ALT ਦਬਾਓ",
     "resize": "ਤੁਸੀਂ ਅਕਾਰ ਬਦਲਦੇ ਸਮੇਂ SHIFT ਦਬਾਈ ਰੱਖ ਕੇ ਅਨੁਪਾਤ ਨੂੰ ਕਾਬੂ ਕਰ ਸਕਦੇ ਹੋ, ਵਿਚਕਾਰ ਤੋਂ ਅਕਾਰ ਬਦਲਣ ਲਈ ALT ਦਬਾਓ",
     "resizeImage": "",
     "resizeImage": "",
     "rotate": "ਤੁਸੀਂ ਘੁਮਾਉਂਦੇ ਹੋਏ SHIFT ਦਬਾਈ ਰੱਖ ਕੇ ਕੋਣਾਂ ਨੂੰ ਕਾਬੂ ਕਰ ਸਕਦੇ ਹੋ",
     "rotate": "ਤੁਸੀਂ ਘੁਮਾਉਂਦੇ ਹੋਏ SHIFT ਦਬਾਈ ਰੱਖ ਕੇ ਕੋਣਾਂ ਨੂੰ ਕਾਬੂ ਕਰ ਸਕਦੇ ਹੋ",
-    "lineEditor_info": "ਬਿੰਦੂਆਂ ਨੂੰ ਸੋਧਣ ਲਈ ਡਬਲ-ਕਲਿੱਕ ਜਾਂ ਐਂਟਰ ਦਬਾਓ",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "",
     "lineEditor_pointSelected": "",
     "lineEditor_nothingSelected": "",
     "lineEditor_nothingSelected": "",
     "placeImage": "",
     "placeImage": "",
@@ -310,7 +311,9 @@
     "view": "ਦਿੱਖ",
     "view": "ਦਿੱਖ",
     "zoomToFit": "ਸਾਰੇ ਐਲੀਮੈਂਟਾਂ ਨੂੰ ਫਿੱਟ ਕਰਨ ਲਈ ਜ਼ੂਮ ਕਰੋ",
     "zoomToFit": "ਸਾਰੇ ਐਲੀਮੈਂਟਾਂ ਨੂੰ ਫਿੱਟ ਕਰਨ ਲਈ ਜ਼ੂਮ ਕਰੋ",
     "zoomToSelection": "ਚੋਣ ਤੱਕ ਜ਼ੂਮ ਕਰੋ",
     "zoomToSelection": "ਚੋਣ ਤੱਕ ਜ਼ੂਮ ਕਰੋ",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "ਕੈਨਵਸ ਨੂੰ ਸਾਫ਼ ਕਰੋ"
     "title": "ਕੈਨਵਸ ਨੂੰ ਸਾਫ਼ ਕਰੋ"
@@ -391,7 +394,8 @@
     "fileSaved": "ਫਾਈਲ ਸਾਂਭੀ ਗਈ।",
     "fileSaved": "ਫਾਈਲ ਸਾਂਭੀ ਗਈ।",
     "fileSavedToFilename": "{filename} ਵਿੱਚ ਸਾਂਭੀ",
     "fileSavedToFilename": "{filename} ਵਿੱਚ ਸਾਂਭੀ",
     "canvas": "ਕੈਨਵਸ",
     "canvas": "ਕੈਨਵਸ",
-    "selection": "ਚੋਣ"
+    "selection": "ਚੋਣ",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "ਚਿੱਟਾ",
     "ffffff": "ਚਿੱਟਾ",
@@ -439,5 +443,12 @@
     "5c940d": "ਲਾਇਮ 9",
     "5c940d": "ਲਾਇਮ 9",
     "e67700": "ਪੀਲਾ 9",
     "e67700": "ਪੀਲਾ 9",
     "d9480f": "ਸੰਤਰੀ 9"
     "d9480f": "ਸੰਤਰੀ 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 39 - 39
src/locales/percentages.json

@@ -1,52 +1,52 @@
 {
 {
-  "ar-SA": 90,
-  "bg-BG": 58,
-  "bn-BD": 64,
-  "ca-ES": 99,
-  "cs-CZ": 66,
-  "da-DK": 34,
-  "de-DE": 100,
-  "el-GR": 99,
+  "ar-SA": 87,
+  "bg-BG": 55,
+  "bn-BD": 61,
+  "ca-ES": 95,
+  "cs-CZ": 76,
+  "da-DK": 33,
+  "de-DE": 99,
+  "el-GR": 95,
   "en": 100,
   "en": 100,
-  "es-ES": 99,
-  "eu-ES": 99,
+  "es-ES": 100,
+  "eu-ES": 98,
   "fa-IR": 98,
   "fa-IR": 98,
-  "fi-FI": 97,
-  "fr-FR": 100,
-  "gl-ES": 45,
-  "he-IL": 94,
-  "hi-IN": 69,
-  "hu-HU": 94,
+  "fi-FI": 94,
+  "fr-FR": 98,
+  "gl-ES": 98,
+  "he-IL": 91,
+  "hi-IN": 70,
+  "hu-HU": 90,
   "id-ID": 100,
   "id-ID": 100,
   "it-IT": 100,
   "it-IT": 100,
-  "ja-JP": 99,
+  "ja-JP": 98,
   "kab-KAB": 95,
   "kab-KAB": 95,
-  "kk-KZ": 22,
-  "ko-KR": 100,
-  "ku-TR": 100,
-  "lt-LT": 23,
-  "lv-LV": 100,
-  "mr-IN": 100,
-  "my-MM": 44,
+  "kk-KZ": 21,
+  "ko-KR": 96,
+  "ku-TR": 98,
+  "lt-LT": 66,
+  "lv-LV": 98,
+  "mr-IN": 99,
+  "my-MM": 42,
   "nb-NO": 100,
   "nb-NO": 100,
-  "nl-NL": 86,
-  "nn-NO": 95,
-  "oc-FR": 99,
-  "pa-IN": 87,
-  "pl-PL": 89,
-  "pt-BR": 100,
-  "pt-PT": 99,
+  "nl-NL": 91,
+  "nn-NO": 91,
+  "oc-FR": 98,
+  "pa-IN": 84,
+  "pl-PL": 85,
+  "pt-BR": 97,
+  "pt-PT": 98,
   "ro-RO": 100,
   "ro-RO": 100,
-  "ru-RU": 99,
+  "ru-RU": 100,
   "si-LK": 8,
   "si-LK": 8,
   "sk-SK": 100,
   "sk-SK": 100,
   "sl-SI": 100,
   "sl-SI": 100,
-  "sv-SE": 99,
-  "ta-IN": 97,
-  "tr-TR": 100,
-  "uk-UA": 100,
-  "vi-VN": 16,
-  "zh-CN": 100,
-  "zh-HK": 27,
+  "sv-SE": 98,
+  "ta-IN": 94,
+  "tr-TR": 99,
+  "uk-UA": 98,
+  "vi-VN": 20,
+  "zh-CN": 98,
+  "zh-HK": 26,
   "zh-TW": 100
   "zh-TW": 100
 }
 }

+ 18 - 7
src/locales/pl-PL.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Wklej",
     "paste": "Wklej",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Wklej wykresy",
     "pasteCharts": "Wklej wykresy",
     "selectAll": "Zaznacz wszystko",
     "selectAll": "Zaznacz wszystko",
     "multiSelect": "Dodaj element do zaznaczenia",
     "multiSelect": "Dodaj element do zaznaczenia",
@@ -71,7 +72,7 @@
     "layers": "Warstwy",
     "layers": "Warstwy",
     "actions": "Akcje",
     "actions": "Akcje",
     "language": "Język",
     "language": "Język",
-    "liveCollaboration": "Współpraca na żywo",
+    "liveCollaboration": "",
     "duplicateSelection": "Powiel",
     "duplicateSelection": "Powiel",
     "untitled": "Bez tytułu",
     "untitled": "Bez tytułu",
     "name": "Nazwa",
     "name": "Nazwa",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Wyczyść dokument i zresetuj kolor dokumentu",
     "clearReset": "Wyczyść dokument i zresetuj kolor dokumentu",
     "exportJSON": "Eksportuj do pliku",
     "exportJSON": "Eksportuj do pliku",
-    "exportImage": "Zapisz jako obraz",
-    "export": "Zapisz jako",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "Zapisz jako PNG",
     "exportToPng": "Zapisz jako PNG",
     "exportToSvg": "Zapisz jako SVG",
     "exportToSvg": "Zapisz jako SVG",
     "copyToClipboard": "Skopiuj do schowka",
     "copyToClipboard": "Skopiuj do schowka",
@@ -144,7 +145,7 @@
     "scale": "Skala",
     "scale": "Skala",
     "save": "",
     "save": "",
     "saveAs": "Zapisz jako",
     "saveAs": "Zapisz jako",
-    "load": "Otwórz",
+    "load": "",
     "getShareableLink": "Udostępnij",
     "getShareableLink": "Udostępnij",
     "close": "Zamknij",
     "close": "Zamknij",
     "selectLanguage": "Wybierz język",
     "selectLanguage": "Wybierz język",
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Możesz zmienić rozmiar swobodnie trzymając SHIFT,\nprzytrzymaj ALT, aby przeskalować względem środka obiektu",
     "resizeImage": "Możesz zmienić rozmiar swobodnie trzymając SHIFT,\nprzytrzymaj ALT, aby przeskalować względem środka obiektu",
     "rotate": "Możesz obracać element w równych odstępach trzymając wciśnięty SHIFT",
     "rotate": "Możesz obracać element w równych odstępach trzymając wciśnięty SHIFT",
-    "lineEditor_info": "Kliknij dwukrotnie lub naciśnij Enter, aby edytować punkty",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "",
     "lineEditor_pointSelected": "",
     "lineEditor_nothingSelected": "",
     "lineEditor_nothingSelected": "",
     "placeImage": "Kliknij, aby umieścić obraz, lub kliknij i przeciągnij, aby ustawić jego rozmiar ręcznie",
     "placeImage": "Kliknij, aby umieścić obraz, lub kliknij i przeciągnij, aby ustawić jego rozmiar ręcznie",
@@ -310,7 +311,9 @@
     "view": "Widok",
     "view": "Widok",
     "zoomToFit": "Powiększ, aby wyświetlić wszystkie elementy",
     "zoomToFit": "Powiększ, aby wyświetlić wszystkie elementy",
     "zoomToSelection": "Przybliż do zaznaczenia",
     "zoomToSelection": "Przybliż do zaznaczenia",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Wyczyść płótno"
     "title": "Wyczyść płótno"
@@ -391,7 +394,8 @@
     "fileSaved": "Zapisano plik.",
     "fileSaved": "Zapisano plik.",
     "fileSavedToFilename": "Zapisano jako {filename}",
     "fileSavedToFilename": "Zapisano jako {filename}",
     "canvas": "płótno",
     "canvas": "płótno",
-    "selection": "zaznaczenie"
+    "selection": "zaznaczenie",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Biały",
     "ffffff": "Biały",
@@ -439,5 +443,12 @@
     "5c940d": "Limonkowy 9",
     "5c940d": "Limonkowy 9",
     "e67700": "Żółty 9",
     "e67700": "Żółty 9",
     "d9480f": "Pomarańczowy 9"
     "d9480f": "Pomarańczowy 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/pt-BR.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Colar",
     "paste": "Colar",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Colar gráficos",
     "pasteCharts": "Colar gráficos",
     "selectAll": "Selecionar tudo",
     "selectAll": "Selecionar tudo",
     "multiSelect": "Adicionar elemento à seleção",
     "multiSelect": "Adicionar elemento à seleção",
@@ -71,7 +72,7 @@
     "layers": "Camadas",
     "layers": "Camadas",
     "actions": "Ações",
     "actions": "Ações",
     "language": "Idioma",
     "language": "Idioma",
-    "liveCollaboration": "Colaboração ao vivo",
+    "liveCollaboration": "Colaboração ao vivo...",
     "duplicateSelection": "Duplicar",
     "duplicateSelection": "Duplicar",
     "untitled": "Sem título",
     "untitled": "Sem título",
     "name": "Nome",
     "name": "Nome",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Limpar o canvas e redefinir a cor de fundo",
     "clearReset": "Limpar o canvas e redefinir a cor de fundo",
     "exportJSON": "Exportar arquivo",
     "exportJSON": "Exportar arquivo",
-    "exportImage": "Salvar como imagem",
-    "export": "Exportar",
+    "exportImage": "Exportar imagem...",
+    "export": "Salvar como...",
     "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",
@@ -144,7 +145,7 @@
     "scale": "Escala",
     "scale": "Escala",
     "save": "Salvar para o arquivo atual",
     "save": "Salvar para o arquivo atual",
     "saveAs": "Salvar como",
     "saveAs": "Salvar como",
-    "load": "Carregar",
+    "load": "Abrir",
     "getShareableLink": "Obter um link de compartilhamento",
     "getShareableLink": "Obter um link de compartilhamento",
     "close": "Fechar",
     "close": "Fechar",
     "selectLanguage": "Selecionar idioma",
     "selectLanguage": "Selecionar idioma",
@@ -214,7 +215,7 @@
     "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",
-    "penMode": "Prevenir a ação de tocar-ampliar e permitir apenas interações da caneta",
+    "penMode": "",
     "link": "Adicionar/Atualizar link para uma forma selecionada",
     "link": "Adicionar/Atualizar link para uma forma selecionada",
     "eraser": "Borracha"
     "eraser": "Borracha"
   },
   },
@@ -235,7 +236,7 @@
     "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",
     "resizeImage": "Você pode redimensionar livremente segurando SHIFT,\nsegure ALT para redimensionar a partir do centro",
     "resizeImage": "Você pode redimensionar livremente segurando SHIFT,\nsegure ALT para redimensionar a partir do centro",
     "rotate": "Você pode restringir os ângulos segurando SHIFT enquanto gira",
     "rotate": "Você pode restringir os ângulos segurando SHIFT enquanto gira",
-    "lineEditor_info": "Clique duas vezes ou pressione Enter para editar os pontos",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Pressione Delete para remover o(s) ponto(s),\nCtrl/Cmd+D para duplicar ou arraste para mover",
     "lineEditor_pointSelected": "Pressione Delete para remover o(s) ponto(s),\nCtrl/Cmd+D para duplicar ou arraste para mover",
     "lineEditor_nothingSelected": "Selecione um ponto para editar (segure SHIFT para selecionar vários) ou segure Alt e clique para adicionar novos pontos",
     "lineEditor_nothingSelected": "Selecione um ponto para editar (segure SHIFT para selecionar vários) ou segure Alt e clique para adicionar novos pontos",
     "placeImage": "Clique para colocar a imagem, ou clique e arraste para definir manualmente o seu tamanho",
     "placeImage": "Clique para colocar a imagem, ou clique e arraste para definir manualmente o seu tamanho",
@@ -310,7 +311,9 @@
     "view": "Visualizar",
     "view": "Visualizar",
     "zoomToFit": "Ampliar para encaixar todos os elementos",
     "zoomToFit": "Ampliar para encaixar todos os elementos",
     "zoomToSelection": "Ampliar a seleção",
     "zoomToSelection": "Ampliar a seleção",
-    "toggleElementLock": "Bloquear/desbloquear seleção"
+    "toggleElementLock": "Bloquear/desbloquear seleção",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Limpar a tela"
     "title": "Limpar a tela"
@@ -391,7 +394,8 @@
     "fileSaved": "Arquivo salvo.",
     "fileSaved": "Arquivo salvo.",
     "fileSavedToFilename": "Salvo em {filename}",
     "fileSavedToFilename": "Salvo em {filename}",
     "canvas": "tela",
     "canvas": "tela",
-    "selection": "seleção"
+    "selection": "seleção",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Braco",
     "ffffff": "Braco",
@@ -439,5 +443,12 @@
     "5c940d": "Lima 9",
     "5c940d": "Lima 9",
     "e67700": "Amarelo 9",
     "e67700": "Amarelo 9",
     "d9480f": "Laranja 9"
     "d9480f": "Laranja 9"
+  },
+  "welcomeScreen": {
+    "data": "Todos os dados são salvos localmente no seu navegador.",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 21 - 10
src/locales/pt-PT.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Colar",
     "paste": "Colar",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Colar gráficos",
     "pasteCharts": "Colar gráficos",
     "selectAll": "Selecionar tudo",
     "selectAll": "Selecionar tudo",
     "multiSelect": "Adicionar elemento à seleção",
     "multiSelect": "Adicionar elemento à seleção",
@@ -71,7 +72,7 @@
     "layers": "Camadas",
     "layers": "Camadas",
     "actions": "Ações",
     "actions": "Ações",
     "language": "Idioma",
     "language": "Idioma",
-    "liveCollaboration": "Colaboração ao vivo",
+    "liveCollaboration": "Colaboração ao vivo...",
     "duplicateSelection": "Duplicar",
     "duplicateSelection": "Duplicar",
     "untitled": "Sem título",
     "untitled": "Sem título",
     "name": "Nome",
     "name": "Nome",
@@ -115,8 +116,8 @@
       "label": "Ligação"
       "label": "Ligação"
     },
     },
     "lineEditor": {
     "lineEditor": {
-      "edit": "",
-      "exit": ""
+      "edit": "Editar linha",
+      "exit": "Sair do editor de linha"
     },
     },
     "elementLock": {
     "elementLock": {
       "lock": "Bloquear",
       "lock": "Bloquear",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Limpar a área de desenho e redefinir a cor de fundo",
     "clearReset": "Limpar a área de desenho e redefinir a cor de fundo",
     "exportJSON": "Exportar para ficheiro",
     "exportJSON": "Exportar para ficheiro",
-    "exportImage": "Guardar como imagem",
-    "export": "Exportar",
+    "exportImage": "Exportar imagem...",
+    "export": "Guardar para...",
     "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",
@@ -144,7 +145,7 @@
     "scale": "Escala",
     "scale": "Escala",
     "save": "Guardar no ficheiro atual",
     "save": "Guardar no ficheiro atual",
     "saveAs": "Guardar como",
     "saveAs": "Guardar como",
-    "load": "Carregar",
+    "load": "Abrir",
     "getShareableLink": "Obter um link de partilha",
     "getShareableLink": "Obter um link de partilha",
     "close": "Fechar",
     "close": "Fechar",
     "selectLanguage": "Selecionar idioma",
     "selectLanguage": "Selecionar idioma",
@@ -214,7 +215,7 @@
     "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",
-    "penMode": "Impedir o <em>pinch-zoom</em> e aceitar desenho livre apenas da caneta",
+    "penMode": "Modo caneta - impedir toque",
     "link": "Acrescentar/ Adicionar ligação para uma forma seleccionada",
     "link": "Acrescentar/ Adicionar ligação para uma forma seleccionada",
     "eraser": "Borracha"
     "eraser": "Borracha"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Pode restringir as proporções mantendo a tecla SHIFT premida enquanto redimensiona,\nmantenha a tecla ALT premida para redimensionar a partir 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",
     "resizeImage": "Pode redimensionar livremente mantendo pressionada a tecla SHIFT,\nmantenha pressionada a tecla ALT para redimensionar do centro",
     "resizeImage": "Pode redimensionar livremente mantendo pressionada a tecla SHIFT,\nmantenha pressionada a tecla ALT para redimensionar do centro",
     "rotate": "Pode restringir os ângulos mantendo a tecla SHIFT premida enquanto roda",
     "rotate": "Pode restringir os ângulos mantendo a tecla SHIFT premida enquanto roda",
-    "lineEditor_info": "Clique duas vezes ou pressione a tecla Enter para editar os pontos",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Carregue na tecla Delete para remover o(s) ponto(s), CtrlOuCmd+D para duplicar, ou arraste para mover",
     "lineEditor_pointSelected": "Carregue na tecla Delete para remover o(s) ponto(s), CtrlOuCmd+D para duplicar, ou arraste para mover",
     "lineEditor_nothingSelected": "Seleccione um ponto para editar (carregue em SHIFT para seleccionar vários),\nou carregue em Alt e clique para acrescentar novos pontos",
     "lineEditor_nothingSelected": "Seleccione um ponto para editar (carregue em SHIFT para seleccionar vários),\nou carregue em Alt e clique para acrescentar novos pontos",
     "placeImage": "Clique para colocar a imagem ou clique e arraste para definir o seu tamanho manualmente",
     "placeImage": "Clique para colocar a imagem ou clique e arraste para definir o seu tamanho manualmente",
@@ -310,7 +311,9 @@
     "view": "Visualizar",
     "view": "Visualizar",
     "zoomToFit": "Ajustar para todos os elementos caberem",
     "zoomToFit": "Ajustar para todos os elementos caberem",
     "zoomToSelection": "Ampliar a seleção",
     "zoomToSelection": "Ampliar a seleção",
-    "toggleElementLock": "Trancar/destrancar selecção"
+    "toggleElementLock": "Trancar/destrancar selecção",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Apagar tela"
     "title": "Apagar tela"
@@ -391,7 +394,8 @@
     "fileSaved": "Ficheiro guardado.",
     "fileSaved": "Ficheiro guardado.",
     "fileSavedToFilename": "Guardado como {filename}",
     "fileSavedToFilename": "Guardado como {filename}",
     "canvas": "área de desenho",
     "canvas": "área de desenho",
-    "selection": "seleção"
+    "selection": "seleção",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Branco",
     "ffffff": "Branco",
@@ -439,5 +443,12 @@
     "5c940d": "Lima 9",
     "5c940d": "Lima 9",
     "e67700": "Amarelo 9",
     "e67700": "Amarelo 9",
     "d9480f": "Laranja 9"
     "d9480f": "Laranja 9"
+  },
+  "welcomeScreen": {
+    "data": "Todos os dados estão guardados no seu navegador local.",
+    "switchToPlusApp": "Queria antes ir para o Excalidraw+?",
+    "menuHints": "Exportar, preferências, idiomas...",
+    "toolbarHints": "Escolha uma ferramenta e comece a desenhar!",
+    "helpHints": "Atalhos e ajuda"
   }
   }
 }
 }

+ 19 - 8
src/locales/ro-RO.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Lipire",
     "paste": "Lipire",
+    "pasteAsPlaintext": "Inserare ca text simplu",
     "pasteCharts": "Lipire diagrame",
     "pasteCharts": "Lipire diagrame",
     "selectAll": "Selectare totală",
     "selectAll": "Selectare totală",
     "multiSelect": "Adaugă element la selecție",
     "multiSelect": "Adaugă element la selecție",
@@ -71,7 +72,7 @@
     "layers": "Straturi",
     "layers": "Straturi",
     "actions": "Acțiuni",
     "actions": "Acțiuni",
     "language": "Limbă",
     "language": "Limbă",
-    "liveCollaboration": "Colaborare în direct",
+    "liveCollaboration": "Colaborare în direct...",
     "duplicateSelection": "Duplicare",
     "duplicateSelection": "Duplicare",
     "untitled": "Nedenumit",
     "untitled": "Nedenumit",
     "name": "Nume",
     "name": "Nume",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Resetare pânză",
     "clearReset": "Resetare pânză",
     "exportJSON": "Exportare la fișiere",
     "exportJSON": "Exportare la fișiere",
-    "exportImage": "Salvare ca imagine",
-    "export": "Exportare",
+    "exportImage": "Exportare imagine...",
+    "export": "Salvare în...",
     "exportToPng": "Exportare ca PNG",
     "exportToPng": "Exportare ca PNG",
     "exportToSvg": "Exportare ca SVG",
     "exportToSvg": "Exportare ca SVG",
     "copyToClipboard": "Copiere în memoria temporară",
     "copyToClipboard": "Copiere în memoria temporară",
@@ -144,7 +145,7 @@
     "scale": "Scală",
     "scale": "Scală",
     "save": "Salvare în fișierul curent",
     "save": "Salvare în fișierul curent",
     "saveAs": "Salvare ca",
     "saveAs": "Salvare ca",
-    "load": "Încărcare",
+    "load": "Deschidere",
     "getShareableLink": "Obține URL partajabil",
     "getShareableLink": "Obține URL partajabil",
     "close": "Închidere",
     "close": "Închidere",
     "selectLanguage": "Selectare limbă",
     "selectLanguage": "Selectare limbă",
@@ -214,7 +215,7 @@
     "text": "Text",
     "text": "Text",
     "library": "Bibliotecă",
     "library": "Bibliotecă",
     "lock": "Menține activ instrumentul selectat după desenare",
     "lock": "Menține activ instrumentul selectat după desenare",
-    "penMode": "Împiedică mărirea prin ciupire și acceptă desenarea liberă doar de la stilou",
+    "penMode": "Mod stilou – împiedică atingerea",
     "link": "Adăugare/actualizare URL pentru forma selectată",
     "link": "Adăugare/actualizare URL pentru forma selectată",
     "eraser": "Radieră"
     "eraser": "Radieră"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Poți constrânge proporțiile, ținând apăsată tasta SHIFT în timp ce redimensionezi,\nține apăsată tasta ALT pentru a redimensiona de la centru",
     "resize": "Poți constrânge proporțiile, ținând apăsată tasta SHIFT în timp ce redimensionezi,\nține apăsată tasta ALT pentru a redimensiona de la centru",
     "resizeImage": "Poți redimensiona liber ținând apăsată tasta SHIFT,\nține apăsată tasta ALT pentru a redimensiona din centru",
     "resizeImage": "Poți redimensiona liber ținând apăsată tasta SHIFT,\nține apăsată tasta ALT pentru a redimensiona din centru",
     "rotate": "Poți constrânge unghiurile, ținând apăsată tasta SHIFT în timp ce rotești",
     "rotate": "Poți constrânge unghiurile, ținând apăsată tasta SHIFT în timp ce rotești",
-    "lineEditor_info": "Dă dublu clic sau apasă tasta Enter pentru a edita punctele",
+    "lineEditor_info": "Ține apăsată tasta Ctrl sau Cmd și dă dublu clic sau apasă tasta Ctrl sau Cmd + Enter pentru a edita puncte",
     "lineEditor_pointSelected": "Apasă tasta Delete pentru a elimina punctele,\ncombinația de taste Ctrl sau Cmd + D pentru a le duplica sau glisează-le pentru a le schimba poziția",
     "lineEditor_pointSelected": "Apasă tasta Delete pentru a elimina punctele,\ncombinația de taste Ctrl sau Cmd + D pentru a le duplica sau glisează-le pentru a le schimba poziția",
     "lineEditor_nothingSelected": "Selectează un punct pentru a-l edita (ține apăsată tasta SHIFT pentru a selecta mai multe),\nsau ține apăsată tasta Alt și dă clic pentru a adăuga puncte noi",
     "lineEditor_nothingSelected": "Selectează un punct pentru a-l edita (ține apăsată tasta SHIFT pentru a selecta mai multe),\nsau ține apăsată tasta Alt și dă clic pentru a adăuga puncte noi",
     "placeImage": "Dă clic pentru a poziționa imaginea sau dă clic și glisează pentru a seta manual dimensiunea imaginii",
     "placeImage": "Dă clic pentru a poziționa imaginea sau dă clic și glisează pentru a seta manual dimensiunea imaginii",
@@ -310,7 +311,9 @@
     "view": "Vizualizare",
     "view": "Vizualizare",
     "zoomToFit": "Transfocare pentru a cuprinde totul",
     "zoomToFit": "Transfocare pentru a cuprinde totul",
     "zoomToSelection": "Transfocare la selecție",
     "zoomToSelection": "Transfocare la selecție",
-    "toggleElementLock": "Blocare/deblocare selecție"
+    "toggleElementLock": "Blocare/deblocare selecție",
+    "movePageUpDown": "Deplasare pagină sus/jos",
+    "movePageLeftRight": "Deplasare pagină stânga/dreapta"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Ștergere pânză"
     "title": "Ștergere pânză"
@@ -391,7 +394,8 @@
     "fileSaved": "Fișier salvat.",
     "fileSaved": "Fișier salvat.",
     "fileSavedToFilename": "Salvat în {filename}",
     "fileSavedToFilename": "Salvat în {filename}",
     "canvas": "pânza",
     "canvas": "pânza",
-    "selection": "selecția"
+    "selection": "selecția",
+    "pasteAsSingleElement": "Folosește {{shortcut}} pentru a insera ca un singur element\nsau insera într-un editor de text existent"
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Alb",
     "ffffff": "Alb",
@@ -439,5 +443,12 @@
     "5c940d": "Verde-limetă 9",
     "5c940d": "Verde-limetă 9",
     "e67700": "Galben 9",
     "e67700": "Galben 9",
     "d9480f": "Portocaliu 9"
     "d9480f": "Portocaliu 9"
+  },
+  "welcomeScreen": {
+    "data": "Toate datele tale sunt salvate local în navigatorul tău.",
+    "switchToPlusApp": "Ai vrut să mergi în schimb la Excalidraw+?",
+    "menuHints": "Exportare, preferințe, limbi, ...",
+    "toolbarHints": "Alege un instrument și începe să desenezi!",
+    "helpHints": "Comenzi rapide și ajutor"
   }
   }
 }
 }

+ 21 - 10
src/locales/ru-RU.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Вставить",
     "paste": "Вставить",
+    "pasteAsPlaintext": "Вставить как обычный текст",
     "pasteCharts": "Вставить диаграммы",
     "pasteCharts": "Вставить диаграммы",
     "selectAll": "Выбрать всё",
     "selectAll": "Выбрать всё",
     "multiSelect": "Добавить элемент в выделенный фрагмент",
     "multiSelect": "Добавить элемент в выделенный фрагмент",
@@ -71,7 +72,7 @@
     "layers": "Слои",
     "layers": "Слои",
     "actions": "Действия",
     "actions": "Действия",
     "language": "Язык",
     "language": "Язык",
-    "liveCollaboration": "Совместное взаимодействие",
+    "liveCollaboration": "Онлайн взаимодействие...",
     "duplicateSelection": "Дубликат",
     "duplicateSelection": "Дубликат",
     "untitled": "Безымянный",
     "untitled": "Безымянный",
     "name": "Имя",
     "name": "Имя",
@@ -115,8 +116,8 @@
       "label": "Ссылка"
       "label": "Ссылка"
     },
     },
     "lineEditor": {
     "lineEditor": {
-      "edit": "",
-      "exit": ""
+      "edit": "Редактирование строки",
+      "exit": "Выход из редактора строки"
     },
     },
     "elementLock": {
     "elementLock": {
       "lock": "Блокировать",
       "lock": "Блокировать",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Очистить холст и сбросить цвет фона",
     "clearReset": "Очистить холст и сбросить цвет фона",
     "exportJSON": "Сохранить в",
     "exportJSON": "Сохранить в",
-    "exportImage": "Сохранить как изображение",
-    "export": "Экспортировать",
+    "exportImage": "Экспортировать изображение...",
+    "export": "Сохранить как...",
     "exportToPng": "Экспорт в PNG",
     "exportToPng": "Экспорт в PNG",
     "exportToSvg": "Экспорт в SVG",
     "exportToSvg": "Экспорт в SVG",
     "copyToClipboard": "Скопировать в буфер обмена",
     "copyToClipboard": "Скопировать в буфер обмена",
@@ -144,7 +145,7 @@
     "scale": "Масштаб",
     "scale": "Масштаб",
     "save": "Сохранить в текущий файл",
     "save": "Сохранить в текущий файл",
     "saveAs": "Сохранить как",
     "saveAs": "Сохранить как",
-    "load": "Загрузить",
+    "load": "Открыть",
     "getShareableLink": "Получить доступ по ссылке",
     "getShareableLink": "Получить доступ по ссылке",
     "close": "Закрыть",
     "close": "Закрыть",
     "selectLanguage": "Выбрать язык",
     "selectLanguage": "Выбрать язык",
@@ -214,7 +215,7 @@
     "text": "Текст",
     "text": "Текст",
     "library": "Библиотека",
     "library": "Библиотека",
     "lock": "Сохранять выбранный инструмент активным после рисования",
     "lock": "Сохранять выбранный инструмент активным после рисования",
-    "penMode": "Отключить масштабирование щипком и рисовать только с помощью пера",
+    "penMode": "Режим пера - предотвращение касания",
     "link": "Добавить/обновить ссылку для выбранной фигуры",
     "link": "Добавить/обновить ссылку для выбранной фигуры",
     "eraser": "Ластик"
     "eraser": "Ластик"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Вы можете ограничить пропорции, удерживая SHIFT во время изменения размеров,\nудерживайте ALT чтобы изменить размер из центра",
     "resize": "Вы можете ограничить пропорции, удерживая SHIFT во время изменения размеров,\nудерживайте ALT чтобы изменить размер из центра",
     "resizeImage": "Вы можете свободно изменять размеры, удерживая кнопку SHIFT,\nудерживайте кнопку ALT, чтобы изменять размер относительно центра",
     "resizeImage": "Вы можете свободно изменять размеры, удерживая кнопку SHIFT,\nудерживайте кнопку ALT, чтобы изменять размер относительно центра",
     "rotate": "Вы можете ограничить углы, удерживая SHIFT во время вращения",
     "rotate": "Вы можете ограничить углы, удерживая SHIFT во время вращения",
-    "lineEditor_info": "Дважды кликните или нажмите Enter, чтобы редактировать точки",
+    "lineEditor_info": "Удерживайте CtrlOrCmd и дважды кликните или нажмите CtrlOrCmd + Enter для редактирования точек",
     "lineEditor_pointSelected": "Нажмите Delete для удаления точки (точек),\nCtrl+D или Cmd+D для дублирования, перетащите для перемещения",
     "lineEditor_pointSelected": "Нажмите Delete для удаления точки (точек),\nCtrl+D или Cmd+D для дублирования, перетащите для перемещения",
     "lineEditor_nothingSelected": "Выберите точку для редактирования (удерживайте SHIFT выбора нескольких точек),\nили удерживайте Alt и кликните для добавления новых точек",
     "lineEditor_nothingSelected": "Выберите точку для редактирования (удерживайте SHIFT выбора нескольких точек),\nили удерживайте Alt и кликните для добавления новых точек",
     "placeImage": "Щелкните, чтобы разместить изображение, или нажмите и перетащите, чтобы установить его размер вручную",
     "placeImage": "Щелкните, чтобы разместить изображение, или нажмите и перетащите, чтобы установить его размер вручную",
@@ -310,7 +311,9 @@
     "view": "Просмотр",
     "view": "Просмотр",
     "zoomToFit": "Отмастштабировать, чтобы поместились все элементы",
     "zoomToFit": "Отмастштабировать, чтобы поместились все элементы",
     "zoomToSelection": "Увеличить до выделенного",
     "zoomToSelection": "Увеличить до выделенного",
-    "toggleElementLock": "Заблокировать/разблокировать выделение"
+    "toggleElementLock": "Заблокировать/разблокировать выделение",
+    "movePageUpDown": "Сдвинуть страницу вверх/вниз",
+    "movePageLeftRight": "Сдвинуть страницу вправо/влево"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Очистить холст"
     "title": "Очистить холст"
@@ -391,7 +394,8 @@
     "fileSaved": "Файл сохранён.",
     "fileSaved": "Файл сохранён.",
     "fileSavedToFilename": "Сохранено в {filename}",
     "fileSavedToFilename": "Сохранено в {filename}",
     "canvas": "холст",
     "canvas": "холст",
-    "selection": "выделение"
+    "selection": "выделение",
+    "pasteAsSingleElement": "Используйте {{shortcut}}, чтобы вставить один объект,\nили вставьте в существующий текстовый редактор"
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Белый",
     "ffffff": "Белый",
@@ -439,5 +443,12 @@
     "5c940d": "Лайм 9",
     "5c940d": "Лайм 9",
     "e67700": "Жёлтый 9",
     "e67700": "Жёлтый 9",
     "d9480f": "Оранжевый 9"
     "d9480f": "Оранжевый 9"
+  },
+  "welcomeScreen": {
+    "data": "Все ваши данные сохраняются локально в вашем браузере.",
+    "switchToPlusApp": "Хотите перейти на Excalidraw+?",
+    "menuHints": "Экспорт, настройки, языки, ...",
+    "toolbarHints": "Выберите инструмент и начните рисовать!",
+    "helpHints": "Сочетания клавиш и помощь"
   }
   }
 }
 }

+ 13 - 2
src/locales/si-LK.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "අලවන්න",
     "paste": "අලවන්න",
+    "pasteAsPlaintext": "",
     "pasteCharts": "ප්‍රස්ථාරය",
     "pasteCharts": "ප්‍රස්ථාරය",
     "selectAll": "සියල්ලම",
     "selectAll": "සියල්ලම",
     "multiSelect": "තෝරා ගැනීමට අංගය එකතු කරන්න",
     "multiSelect": "තෝරා ගැනීමට අංගය එකතු කරන්න",
@@ -310,7 +311,9 @@
     "view": "",
     "view": "",
     "zoomToFit": "",
     "zoomToFit": "",
     "zoomToSelection": "",
     "zoomToSelection": "",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": ""
     "title": ""
@@ -391,7 +394,8 @@
     "fileSaved": "",
     "fileSaved": "",
     "fileSavedToFilename": "",
     "fileSavedToFilename": "",
     "canvas": "",
     "canvas": "",
-    "selection": ""
+    "selection": "",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "",
     "ffffff": "",
@@ -439,5 +443,12 @@
     "5c940d": "",
     "5c940d": "",
     "e67700": "",
     "e67700": "",
     "d9480f": ""
     "d9480f": ""
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/sk-SK.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Vložiť",
     "paste": "Vložiť",
+    "pasteAsPlaintext": "Vložiť ako obyčajný text",
     "pasteCharts": "Vložiť grafy",
     "pasteCharts": "Vložiť grafy",
     "selectAll": "Vybrať všetko",
     "selectAll": "Vybrať všetko",
     "multiSelect": "Pridať prvok do výberu",
     "multiSelect": "Pridať prvok do výberu",
@@ -71,7 +72,7 @@
     "layers": "Vrstvy",
     "layers": "Vrstvy",
     "actions": "Akcie",
     "actions": "Akcie",
     "language": "Jazyk",
     "language": "Jazyk",
-    "liveCollaboration": "Živá spolupráca",
+    "liveCollaboration": "Živá spolupráca...",
     "duplicateSelection": "Duplikovať",
     "duplicateSelection": "Duplikovať",
     "untitled": "Bez názvu",
     "untitled": "Bez názvu",
     "name": "Meno",
     "name": "Meno",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Obnoviť plátno",
     "clearReset": "Obnoviť plátno",
     "exportJSON": "Exportovať do súboru",
     "exportJSON": "Exportovať do súboru",
-    "exportImage": "Uložiť ako obrázok",
-    "export": "Exportovať",
+    "exportImage": "Exportovať obrázok...",
+    "export": "Uložiť do...",
     "exportToPng": "Exportovať do PNG",
     "exportToPng": "Exportovať do PNG",
     "exportToSvg": "Exportovať do SVG",
     "exportToSvg": "Exportovať do SVG",
     "copyToClipboard": "Kopírovať do schránky",
     "copyToClipboard": "Kopírovať do schránky",
@@ -144,7 +145,7 @@
     "scale": "Mierka",
     "scale": "Mierka",
     "save": "Uložiť do aktuálneho súboru",
     "save": "Uložiť do aktuálneho súboru",
     "saveAs": "Uložiť ako",
     "saveAs": "Uložiť ako",
-    "load": "Nahrať",
+    "load": "Otvoriť",
     "getShareableLink": "Získať odkaz na zdieľanie",
     "getShareableLink": "Získať odkaz na zdieľanie",
     "close": "Zavrieť",
     "close": "Zavrieť",
     "selectLanguage": "Zvoliť jazyk",
     "selectLanguage": "Zvoliť jazyk",
@@ -214,7 +215,7 @@
     "text": "Text",
     "text": "Text",
     "library": "Knižnica",
     "library": "Knižnica",
     "lock": "Nechať zvolený nástroj aktívny po skončení kreslenia",
     "lock": "Nechať zvolený nástroj aktívny po skončení kreslenia",
-    "penMode": "Zabrániť priblíženiu potiahnutím a povoliť vstup voľnou rokou iba z pera",
+    "penMode": "Režim pera – zabrániť dotyku",
     "link": "Pridať/ Upraviť odkaz pre vybraný tvar",
     "link": "Pridať/ Upraviť odkaz pre vybraný tvar",
     "eraser": "Guma"
     "eraser": "Guma"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Počas zmeny veľkosti zachováte proporcie podržaním SHIFT,\\npodržaním ALT meníte veľkosť so zachovaním stredu",
     "resize": "Počas zmeny veľkosti zachováte proporcie podržaním SHIFT,\\npodržaním ALT meníte veľkosť so zachovaním stredu",
     "resizeImage": "Podržte SHIFT pre voľnú zmenu veľkosti, podržte ALT pre zmenu veľkosti od stredu",
     "resizeImage": "Podržte SHIFT pre voľnú zmenu veľkosti, podržte ALT pre zmenu veľkosti od stredu",
     "rotate": "Počas rotácie obmedzíte uhol podržaním SHIFT",
     "rotate": "Počas rotácie obmedzíte uhol podržaním SHIFT",
-    "lineEditor_info": "Použite dvojklik alebo stlačte Enter na editáciu bodov",
+    "lineEditor_info": "Podržte CtrlOrCmd a kliknite dva krát alebo stlačte CtrlOrCmd + Enter pre editáciu bodov",
     "lineEditor_pointSelected": "Stačte Delete na vymazanie bodu (bodov), CtrlOrCmd+D na duplikovanie, alebo potiahnite na presunutie",
     "lineEditor_pointSelected": "Stačte Delete na vymazanie bodu (bodov), CtrlOrCmd+D na duplikovanie, alebo potiahnite na presunutie",
     "lineEditor_nothingSelected": "Zvoľte bod na upravovanie (podržte SHIFT pre zvolenie viacerých bodov) alebo podržte Alt a kliknite na pridanie nového bodu",
     "lineEditor_nothingSelected": "Zvoľte bod na upravovanie (podržte SHIFT pre zvolenie viacerých bodov) alebo podržte Alt a kliknite na pridanie nového bodu",
     "placeImage": "Kliknite pre umiestnenie obrázka alebo kliknite a ťahajte pre zmenu jeho veľkosti",
     "placeImage": "Kliknite pre umiestnenie obrázka alebo kliknite a ťahajte pre zmenu jeho veľkosti",
@@ -310,7 +311,9 @@
     "view": "Zobrazenie",
     "view": "Zobrazenie",
     "zoomToFit": "Priblížiť aby boli zahrnuté všetky prvky",
     "zoomToFit": "Priblížiť aby boli zahrnuté všetky prvky",
     "zoomToSelection": "Priblížiť na výber",
     "zoomToSelection": "Priblížiť na výber",
-    "toggleElementLock": "Zamknúť/odomknúť vybrané"
+    "toggleElementLock": "Zamknúť/odomknúť vybrané",
+    "movePageUpDown": "Posunúť stranu hore/dole",
+    "movePageLeftRight": "Posunúť stranu doľava/doprava"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Vyčistiť plátno"
     "title": "Vyčistiť plátno"
@@ -391,7 +394,8 @@
     "fileSaved": "Súbor uložený.",
     "fileSaved": "Súbor uložený.",
     "fileSavedToFilename": "Uložený ako {filename}",
     "fileSavedToFilename": "Uložený ako {filename}",
     "canvas": "plátna",
     "canvas": "plátna",
-    "selection": "výberu"
+    "selection": "výberu",
+    "pasteAsSingleElement": "Použitím {{shortcut}} vložte ako samostatný prvok alebo vložte do existujúceho editovaného textu"
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Biela",
     "ffffff": "Biela",
@@ -439,5 +443,12 @@
     "5c940d": "Limetková 9",
     "5c940d": "Limetková 9",
     "e67700": "Žltá 9",
     "e67700": "Žltá 9",
     "d9480f": "Oranžová 9"
     "d9480f": "Oranžová 9"
+  },
+  "welcomeScreen": {
+    "data": "Všetky vaše dáta sú uložené lokálne vo vašom prehliadači.",
+    "switchToPlusApp": "Chceli ste namiesto toho prejsť do Excalidraw+?",
+    "menuHints": "Exportovanie, nastavenia, jazyky, ...",
+    "toolbarHints": "Zvoľte nástroj a začnite kresliť!",
+    "helpHints": "Klávesové skratky a pomocník"
   }
   }
 }
 }

+ 19 - 8
src/locales/sl-SI.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Prilepi",
     "paste": "Prilepi",
+    "pasteAsPlaintext": "Prilepi kot navadno besedilo",
     "pasteCharts": "Prilepi grafikone",
     "pasteCharts": "Prilepi grafikone",
     "selectAll": "Izberi vse",
     "selectAll": "Izberi vse",
     "multiSelect": "Dodaj element v izbor",
     "multiSelect": "Dodaj element v izbor",
@@ -71,7 +72,7 @@
     "layers": "Plasti",
     "layers": "Plasti",
     "actions": "Dejanja",
     "actions": "Dejanja",
     "language": "Jezik",
     "language": "Jezik",
-    "liveCollaboration": "Sodelovanje v živo",
+    "liveCollaboration": "Sodelovanje v živo...",
     "duplicateSelection": "Podvoji",
     "duplicateSelection": "Podvoji",
     "untitled": "Neimenovana",
     "untitled": "Neimenovana",
     "name": "Ime",
     "name": "Ime",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Ponastavi platno",
     "clearReset": "Ponastavi platno",
     "exportJSON": "Izvozi v datoteko",
     "exportJSON": "Izvozi v datoteko",
-    "exportImage": "Shrani kot sliko",
-    "export": "Izvoz",
+    "exportImage": "Izvozi sliko...",
+    "export": "Shrani v...",
     "exportToPng": "Izvozi v PNG",
     "exportToPng": "Izvozi v PNG",
     "exportToSvg": "Izvozi v SVG",
     "exportToSvg": "Izvozi v SVG",
     "copyToClipboard": "Kopiraj v odložišče",
     "copyToClipboard": "Kopiraj v odložišče",
@@ -144,7 +145,7 @@
     "scale": "Povečava",
     "scale": "Povečava",
     "save": "Shrani v trenutno datoteko",
     "save": "Shrani v trenutno datoteko",
     "saveAs": "Shrani kot",
     "saveAs": "Shrani kot",
-    "load": "Naloži",
+    "load": "Odpri",
     "getShareableLink": "Pridobi povezavo za deljenje",
     "getShareableLink": "Pridobi povezavo za deljenje",
     "close": "Zapri",
     "close": "Zapri",
     "selectLanguage": "Izberi jezik",
     "selectLanguage": "Izberi jezik",
@@ -214,7 +215,7 @@
     "text": "Besedilo",
     "text": "Besedilo",
     "library": "Knjižnica",
     "library": "Knjižnica",
     "lock": "Ohrani izbrano orodje aktivno po risanju",
     "lock": "Ohrani izbrano orodje aktivno po risanju",
-    "penMode": "Prepreči povečavo s prsti in dovoli samo risanje s peresom",
+    "penMode": "Način peresa - prepreči dotik",
     "link": "Dodaj/posodobi povezavo za izbrano obliko",
     "link": "Dodaj/posodobi povezavo za izbrano obliko",
     "eraser": "Radirka"
     "eraser": "Radirka"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Razmerja lahko omejite tako, da držite tipko Shift med spreminjanjem velikosti. Držite tipko Alt, da spremenite velikost od središča",
     "resize": "Razmerja lahko omejite tako, da držite tipko Shift med spreminjanjem velikosti. Držite tipko Alt, da spremenite velikost od središča",
     "resizeImage": "Velikost lahko prosto spreminjate tako, da držite tipko Shift. Držite tipko Alt, da spremenite velikost od središča",
     "resizeImage": "Velikost lahko prosto spreminjate tako, da držite tipko Shift. Držite tipko Alt, da spremenite velikost od središča",
     "rotate": "Kote lahko omejite tako, da med vrtenjem držite tipko Shift",
     "rotate": "Kote lahko omejite tako, da med vrtenjem držite tipko Shift",
-    "lineEditor_info": "Dvokliknite ali pritisnite tipko Enter, da uredite točke",
+    "lineEditor_info": "Držite CtrlOrCmd in dvokliknite ali pritisnite CtrlOrCmd + Enter za urejanje točk",
     "lineEditor_pointSelected": "Pritisnite tipko Delete, da odstranite točko(e), CtrlOrCmd+D za podvojitev ali povlecite za premikanje",
     "lineEditor_pointSelected": "Pritisnite tipko Delete, da odstranite točko(e), CtrlOrCmd+D za podvojitev ali povlecite za premikanje",
     "lineEditor_nothingSelected": "Izberite točko za urejanje (pridržite tipko Shift za izbiro več točk), ali držite tipko Alt in kliknite za dodajanje novih točk",
     "lineEditor_nothingSelected": "Izberite točko za urejanje (pridržite tipko Shift za izbiro več točk), ali držite tipko Alt in kliknite za dodajanje novih točk",
     "placeImage": "Kliknite, da postavite sliko, ali kliknite in povlecite, da ročno nastavite njeno velikost",
     "placeImage": "Kliknite, da postavite sliko, ali kliknite in povlecite, da ročno nastavite njeno velikost",
@@ -310,7 +311,9 @@
     "view": "Pogled",
     "view": "Pogled",
     "zoomToFit": "Približaj na vse elemente",
     "zoomToFit": "Približaj na vse elemente",
     "zoomToSelection": "Približaj na izbor",
     "zoomToSelection": "Približaj na izbor",
-    "toggleElementLock": "Zakleni/odkleni izbor"
+    "toggleElementLock": "Zakleni/odkleni izbor",
+    "movePageUpDown": "Premakni stran gor/dol",
+    "movePageLeftRight": "Premakni stran levo/desno"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Počisti platno"
     "title": "Počisti platno"
@@ -391,7 +394,8 @@
     "fileSaved": "Datoteka shranjena.",
     "fileSaved": "Datoteka shranjena.",
     "fileSavedToFilename": "Shranjeno v {filename}",
     "fileSavedToFilename": "Shranjeno v {filename}",
     "canvas": "platno",
     "canvas": "platno",
-    "selection": "izbor"
+    "selection": "izbor",
+    "pasteAsSingleElement": "Uporabite {{shortcut}}, da prilepite kot en element,\n ali prilepite v obstoječ urejevalnik besedil"
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Bela",
     "ffffff": "Bela",
@@ -439,5 +443,12 @@
     "5c940d": "Limeta 9",
     "5c940d": "Limeta 9",
     "e67700": "Rumena 9",
     "e67700": "Rumena 9",
     "d9480f": "Oranžna 9"
     "d9480f": "Oranžna 9"
+  },
+  "welcomeScreen": {
+    "data": "Vsi vaši podatki so shranjeni lokalno v vašem brskalniku.",
+    "switchToPlusApp": "Ste namesto tega želeli odpreti Excalidraw+?",
+    "menuHints": "Izvoz, nastavitve, jeziki, ...",
+    "toolbarHints": "Izberi orodje in začni z risanjem!",
+    "helpHints": "Bljižnice in pomoč"
   }
   }
 }
 }

+ 20 - 9
src/locales/sv-SE.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Klistra in",
     "paste": "Klistra in",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Klistra in diagram",
     "pasteCharts": "Klistra in diagram",
     "selectAll": "Markera alla",
     "selectAll": "Markera alla",
     "multiSelect": "Lägg till element till markering",
     "multiSelect": "Lägg till element till markering",
@@ -71,7 +72,7 @@
     "layers": "Lager",
     "layers": "Lager",
     "actions": "Åtgärder",
     "actions": "Åtgärder",
     "language": "Språk",
     "language": "Språk",
-    "liveCollaboration": "Samarbeta live",
+    "liveCollaboration": "Samarbeta live...",
     "duplicateSelection": "Duplicera",
     "duplicateSelection": "Duplicera",
     "untitled": "Namnlös",
     "untitled": "Namnlös",
     "name": "Namn",
     "name": "Namn",
@@ -115,8 +116,8 @@
       "label": "Länk"
       "label": "Länk"
     },
     },
     "lineEditor": {
     "lineEditor": {
-      "edit": "",
-      "exit": ""
+      "edit": "Redigera linje",
+      "exit": "Avsluta linjeredigerare"
     },
     },
     "elementLock": {
     "elementLock": {
       "lock": "Lås",
       "lock": "Lås",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Återställ canvasen",
     "clearReset": "Återställ canvasen",
     "exportJSON": "Exportera till fil",
     "exportJSON": "Exportera till fil",
-    "exportImage": "Spara som bild",
-    "export": "Exportera",
+    "exportImage": "Exportera bild...",
+    "export": "Spara till...",
     "exportToPng": "Exportera till PNG",
     "exportToPng": "Exportera till PNG",
     "exportToSvg": "Exportera till SVG",
     "exportToSvg": "Exportera till SVG",
     "copyToClipboard": "Kopiera till urklipp",
     "copyToClipboard": "Kopiera till urklipp",
@@ -214,7 +215,7 @@
     "text": "Text",
     "text": "Text",
     "library": "Bibliotek",
     "library": "Bibliotek",
     "lock": "Håll valt verktyg aktivt efter ritande",
     "lock": "Håll valt verktyg aktivt efter ritande",
-    "penMode": "Förhindra nypzoom och acceptera endast frihandsteckning från penna",
+    "penMode": "Pennläge - förhindra touch",
     "link": "Lägg till / Uppdatera länk för en vald form",
     "link": "Lägg till / Uppdatera länk för en vald form",
     "eraser": "Radergummi"
     "eraser": "Radergummi"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Du kan behålla proportioner genom att hålla SHIFT medan du ändrar storlek,\nhåller du ALT ändras storlek relativt mitten",
     "resize": "Du kan behålla proportioner genom att hålla SHIFT medan du ändrar storlek,\nhåller du ALT ändras storlek relativt mitten",
     "resizeImage": "Du kan ändra storlek fritt genom att hålla SHIFT,\nhåll ALT för att ändra storlek från mitten",
     "resizeImage": "Du kan ändra storlek fritt genom att hålla SHIFT,\nhåll ALT för att ändra storlek från mitten",
     "rotate": "Du kan begränsa vinklar genom att hålla SHIFT medan du roterar",
     "rotate": "Du kan begränsa vinklar genom att hålla SHIFT medan du roterar",
-    "lineEditor_info": "Dubbelklicka eller tryck på Enter för att redigera punkter",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Tryck på Ta bort för att ta bort punkt(er), Ctrl + D eller Cmd + D för att duplicera, eller dra för att flytta",
     "lineEditor_pointSelected": "Tryck på Ta bort för att ta bort punkt(er), Ctrl + D eller Cmd + D för att duplicera, eller dra för att flytta",
     "lineEditor_nothingSelected": "Välj en punkt att redigera (håll SHIFT för att välja flera),\neller håll ned Alt och klicka för att lägga till nya punkter",
     "lineEditor_nothingSelected": "Välj en punkt att redigera (håll SHIFT för att välja flera),\neller håll ned Alt och klicka för att lägga till nya punkter",
     "placeImage": "Klicka för att placera bilden, eller klicka och dra för att ställa in dess storlek manuellt",
     "placeImage": "Klicka för att placera bilden, eller klicka och dra för att ställa in dess storlek manuellt",
@@ -310,7 +311,9 @@
     "view": "Visa",
     "view": "Visa",
     "zoomToFit": "Zooma för att rymma alla element",
     "zoomToFit": "Zooma för att rymma alla element",
     "zoomToSelection": "Zooma till markering",
     "zoomToSelection": "Zooma till markering",
-    "toggleElementLock": "Lås/Lås upp valda"
+    "toggleElementLock": "Lås/Lås upp valda",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Rensa canvas"
     "title": "Rensa canvas"
@@ -391,7 +394,8 @@
     "fileSaved": "Fil sparad.",
     "fileSaved": "Fil sparad.",
     "fileSavedToFilename": "Sparad till {filename}",
     "fileSavedToFilename": "Sparad till {filename}",
     "canvas": "canvas",
     "canvas": "canvas",
-    "selection": "markering"
+    "selection": "markering",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Vit",
     "ffffff": "Vit",
@@ -439,5 +443,12 @@
     "5c940d": "Limegrön 9",
     "5c940d": "Limegrön 9",
     "e67700": "Gul 9",
     "e67700": "Gul 9",
     "d9480f": "Orange 9"
     "d9480f": "Orange 9"
+  },
+  "welcomeScreen": {
+    "data": "All din data sparas lokalt i din webbläsare.",
+    "switchToPlusApp": "Ville du gå till Excalidraw+ istället?",
+    "menuHints": "Export, inställningar, språk, ...",
+    "toolbarHints": "Välj ett verktyg och börja rita!",
+    "helpHints": "Genvägar och hjälp"
   }
   }
 }
 }

+ 19 - 8
src/locales/ta-IN.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "ஒட்டு",
     "paste": "ஒட்டு",
+    "pasteAsPlaintext": "",
     "pasteCharts": "விளக்கப்படங்களை ஒட்டு",
     "pasteCharts": "விளக்கப்படங்களை ஒட்டு",
     "selectAll": "எல்லாம் தேர்ந்தெடு",
     "selectAll": "எல்லாம் தேர்ந்தெடு",
     "multiSelect": "உறுப்பைத் தெரிவில் சேர்",
     "multiSelect": "உறுப்பைத் தெரிவில் சேர்",
@@ -71,7 +72,7 @@
     "layers": "அடுக்குகள்",
     "layers": "அடுக்குகள்",
     "actions": "செயல்கள்",
     "actions": "செயல்கள்",
     "language": "மொழி",
     "language": "மொழி",
-    "liveCollaboration": "நேரடி கூட்டுப்பணி",
+    "liveCollaboration": "",
     "duplicateSelection": "நகலாக்கு",
     "duplicateSelection": "நகலாக்கு",
     "untitled": "தலைப்பற்றது",
     "untitled": "தலைப்பற்றது",
     "name": "பெயர்",
     "name": "பெயர்",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "கித்தானை அகரமாக்கு",
     "clearReset": "கித்தானை அகரமாக்கு",
     "exportJSON": "கோப்புக்கு ஏற்றுமதிசெய்",
     "exportJSON": "கோப்புக்கு ஏற்றுமதிசெய்",
-    "exportImage": "படமாகச் சேமி",
-    "export": "ஏற்றுமதி",
+    "exportImage": "",
+    "export": "",
     "exportToPng": "PNGக்கு ஏற்றுமதிசெய்",
     "exportToPng": "PNGக்கு ஏற்றுமதிசெய்",
     "exportToSvg": "SVGக்கு ஏற்றுமதிசெய்",
     "exportToSvg": "SVGக்கு ஏற்றுமதிசெய்",
     "copyToClipboard": "நகலகத்திற்கு நகலெடு",
     "copyToClipboard": "நகலகத்திற்கு நகலெடு",
@@ -144,7 +145,7 @@
     "scale": "அளவு",
     "scale": "அளவு",
     "save": "தற்போதைய கோப்புக்குச் சேமி",
     "save": "தற்போதைய கோப்புக்குச் சேமி",
     "saveAs": "இப்படி சேமி",
     "saveAs": "இப்படி சேமி",
-    "load": "ஏற்று",
+    "load": "",
     "getShareableLink": "பகிரக்கூடிய தொடுப்பைப் பெறு",
     "getShareableLink": "பகிரக்கூடிய தொடுப்பைப் பெறு",
     "close": "மூடு",
     "close": "மூடு",
     "selectLanguage": "மொழியைத் தேர்ந்தெடு",
     "selectLanguage": "மொழியைத் தேர்ந்தெடு",
@@ -214,7 +215,7 @@
     "text": "உரை",
     "text": "உரை",
     "library": "நூலகம்",
     "library": "நூலகம்",
     "lock": "தேர்ந்த கருவியை வரைந்த பின்பும் வைத்திரு",
     "lock": "தேர்ந்த கருவியை வரைந்த பின்பும் வைத்திரு",
-    "penMode": "கிள்ளிப்பெரிதாக்குவதைத் தவிர் மற்றும் பேனாவிலிருந்து மட்டும் கட்டற்றவரைவை ஏல்",
+    "penMode": "",
     "link": "தேர்தெடுத்த வடிவத்திற்குத் தொடுப்பைச் சேர்/ புதுப்பி",
     "link": "தேர்தெடுத்த வடிவத்திற்குத் தொடுப்பைச் சேர்/ புதுப்பி",
     "eraser": "அழிப்பி"
     "eraser": "அழிப்பி"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "மறுஅளவிடுகையில் SHIFTஐ அழுத்திப்பிடித்து விகிதசமத்தை வற்புறுத்தலாம்,\nமையத்திலிருந்து மறுஅளவிட ALTஐ அழுத்திப்பிடி",
     "resize": "மறுஅளவிடுகையில் SHIFTஐ அழுத்திப்பிடித்து விகிதசமத்தை வற்புறுத்தலாம்,\nமையத்திலிருந்து மறுஅளவிட ALTஐ அழுத்திப்பிடி",
     "resizeImage": "SHIFTஐ நீண்டழுத்தி கட்டற்று அளவுமாற்றலாம்,\nமையத்திலிருந்து அளவுமாற்ற ALTஐ நீண்டழுத்துக",
     "resizeImage": "SHIFTஐ நீண்டழுத்தி கட்டற்று அளவுமாற்றலாம்,\nமையத்திலிருந்து அளவுமாற்ற ALTஐ நீண்டழுத்துக",
     "rotate": "சுழற்றுகையில் SHIFTஐ அழுத்திப்பிடித்து கோணங்களை வற்புறுத்தலாம்",
     "rotate": "சுழற்றுகையில் SHIFTஐ அழுத்திப்பிடித்து கோணங்களை வற்புறுத்தலாம்",
-    "lineEditor_info": "புள்ளிகளைத் திருத்த இரு-சொடுக்கு அ Enterஐ அழுத்து",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "புள்ளி(கள்)ஐ நீக்க Deleteஐ அழுத்து,\nநகலாக்க CtrlOrCmd+D, அ நகர்த்த பிடித்திழு",
     "lineEditor_pointSelected": "புள்ளி(கள்)ஐ நீக்க Deleteஐ அழுத்து,\nநகலாக்க CtrlOrCmd+D, அ நகர்த்த பிடித்திழு",
     "lineEditor_nothingSelected": "திருத்த புள்ளியைத் தேர்ந்தெடு (பலவற்றை தேர SHIFTஐ அழுத்திப்பிடி),\nஅ புதிய புள்ளிகளைச் சேர்க்க Altஐ அழுத்திப்பிடித்துச் சொடுக்கு",
     "lineEditor_nothingSelected": "திருத்த புள்ளியைத் தேர்ந்தெடு (பலவற்றை தேர SHIFTஐ அழுத்திப்பிடி),\nஅ புதிய புள்ளிகளைச் சேர்க்க Altஐ அழுத்திப்பிடித்துச் சொடுக்கு",
     "placeImage": "படத்தை வைக்கச் சொடுக்கு, அ கைமுறையாக அளவு அமைக்க சொடுக்கி பிடித்திழு",
     "placeImage": "படத்தை வைக்கச் சொடுக்கு, அ கைமுறையாக அளவு அமைக்க சொடுக்கி பிடித்திழு",
@@ -310,7 +311,9 @@
     "view": "பார்",
     "view": "பார்",
     "zoomToFit": "அனைத்துறுப்புகளும் பொருந்தும்படி விரிவாக்கு",
     "zoomToFit": "அனைத்துறுப்புகளும் பொருந்தும்படி விரிவாக்கு",
     "zoomToSelection": "தெரிவுக்கு விரிவாக்கு",
     "zoomToSelection": "தெரிவுக்கு விரிவாக்கு",
-    "toggleElementLock": "தேர்ந்தெடுப்பைப் பூட்டு/பூட்டவிழ்"
+    "toggleElementLock": "தேர்ந்தெடுப்பைப் பூட்டு/பூட்டவிழ்",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "கித்தானைத் துடை"
     "title": "கித்தானைத் துடை"
@@ -391,7 +394,8 @@
     "fileSaved": "கோப்பு சேமிக்கப்பட்டது.",
     "fileSaved": "கோப்பு சேமிக்கப்பட்டது.",
     "fileSavedToFilename": "{filename}-க்கு சேமிக்கப்பட்டது",
     "fileSavedToFilename": "{filename}-க்கு சேமிக்கப்பட்டது",
     "canvas": "கித்தான்",
     "canvas": "கித்தான்",
-    "selection": "தெரிவு"
+    "selection": "தெரிவு",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "வெள்ளை",
     "ffffff": "வெள்ளை",
@@ -439,5 +443,12 @@
     "5c940d": "தேசிக்காய்நிறம் 9",
     "5c940d": "தேசிக்காய்நிறம் 9",
     "e67700": "மஞ்சள் 9",
     "e67700": "மஞ்சள் 9",
     "d9480f": "ஆரஞ்சு 9"
     "d9480f": "ஆரஞ்சு 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/tr-TR.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Yapıştır",
     "paste": "Yapıştır",
+    "pasteAsPlaintext": "Düz metin olarak yapıştır",
     "pasteCharts": "Grafikleri yapıştır",
     "pasteCharts": "Grafikleri yapıştır",
     "selectAll": "Tümünü seç",
     "selectAll": "Tümünü seç",
     "multiSelect": "Seçime öge ekle",
     "multiSelect": "Seçime öge ekle",
@@ -71,7 +72,7 @@
     "layers": "Katmanlar",
     "layers": "Katmanlar",
     "actions": "Eylemler",
     "actions": "Eylemler",
     "language": "Dil",
     "language": "Dil",
-    "liveCollaboration": "Canlı ortak çalışma alanı",
+    "liveCollaboration": "Canlı ortak çalışma alanı...",
     "duplicateSelection": "Çoğalt",
     "duplicateSelection": "Çoğalt",
     "untitled": "Adsız",
     "untitled": "Adsız",
     "name": "İsim",
     "name": "İsim",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Tuvali sıfırla",
     "clearReset": "Tuvali sıfırla",
     "exportJSON": "Dosyaya aktar",
     "exportJSON": "Dosyaya aktar",
-    "exportImage": "Görüntü olarak kaydet",
-    "export": "Dışa aktar",
+    "exportImage": "Resimleri dışa aktar...",
+    "export": "Şuraya kaydet...",
     "exportToPng": "PNG olarak dışa aktar",
     "exportToPng": "PNG olarak dışa aktar",
     "exportToSvg": "SVG olarak dışa aktar",
     "exportToSvg": "SVG olarak dışa aktar",
     "copyToClipboard": "Panoya kopyala",
     "copyToClipboard": "Panoya kopyala",
@@ -144,7 +145,7 @@
     "scale": "Ölçek",
     "scale": "Ölçek",
     "save": "Geçerli dosyaya kaydet",
     "save": "Geçerli dosyaya kaydet",
     "saveAs": "Farklı kaydet",
     "saveAs": "Farklı kaydet",
-    "load": "Yükle",
+    "load": "",
     "getShareableLink": "Paylaşılabilir bağlantı al",
     "getShareableLink": "Paylaşılabilir bağlantı al",
     "close": "Kapat",
     "close": "Kapat",
     "selectLanguage": "Dil seçin",
     "selectLanguage": "Dil seçin",
@@ -214,7 +215,7 @@
     "text": "Yazı",
     "text": "Yazı",
     "library": "Kütüphane",
     "library": "Kütüphane",
     "lock": "Seçilen aracı çizimden sonra aktif tut",
     "lock": "Seçilen aracı çizimden sonra aktif tut",
-    "penMode": "Çift parmak sıkıştırmayı önle ve serbest çizimi yalnızca kalemle yap",
+    "penMode": "Kalem modu - dokunmayı engelle",
     "link": "Seçilen şekil için bağlantı Ekle/Güncelle",
     "link": "Seçilen şekil için bağlantı Ekle/Güncelle",
     "eraser": "Silgi"
     "eraser": "Silgi"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Yeniden boyutlandırırken SHIFT tuşunu basılı tutarak oranları sınırlayabilirsiniz,\nmerkezden yeniden boyutlandırmak için ALT tuşunu basılı tutun",
     "resize": "Yeniden boyutlandırırken SHIFT tuşunu basılı tutarak oranları sınırlayabilirsiniz,\nmerkezden yeniden boyutlandırmak için ALT tuşunu basılı tutun",
     "resizeImage": "SHIFT'e basılı tutarak serbestçe yeniden boyutlandırabilirsiniz, merkezden yeniden boyutlandırmak için ALT tuşunu basılı tutun",
     "resizeImage": "SHIFT'e basılı tutarak serbestçe yeniden boyutlandırabilirsiniz, merkezden yeniden boyutlandırmak için ALT tuşunu basılı tutun",
     "rotate": "Döndürürken SHIFT tuşuna basılı tutarak açıları koruyabilirsiniz",
     "rotate": "Döndürürken SHIFT tuşuna basılı tutarak açıları koruyabilirsiniz",
-    "lineEditor_info": "Noktaları düzenlemek için çift-tıklayın veya Enter'a basın",
+    "lineEditor_info": "Puanları düzenlemek için ctrl veya cmd tuşuna basılı tutup çift tıklayın veya enter tuşuna basın",
     "lineEditor_pointSelected": "Sil tuşuna basarak noktaları silin,\nCtrl/Cmd + D ile çoğaltın, ya da sürükleyerek taşıyın",
     "lineEditor_pointSelected": "Sil tuşuna basarak noktaları silin,\nCtrl/Cmd + D ile çoğaltın, ya da sürükleyerek taşıyın",
     "lineEditor_nothingSelected": "Düzenlemek için bir nokta seçin (birden fazla seçmek için SHIFT tuşunu basılı tutun),\nveya Alt tuşunu basılı tutun ve yeni noktalar eklemek için tıklayın",
     "lineEditor_nothingSelected": "Düzenlemek için bir nokta seçin (birden fazla seçmek için SHIFT tuşunu basılı tutun),\nveya Alt tuşunu basılı tutun ve yeni noktalar eklemek için tıklayın",
     "placeImage": "Resmi yerleştirmek için tıklayın ya da boyutunu manuel olarak ayarlamak için tıklayıp sürükleyin",
     "placeImage": "Resmi yerleştirmek için tıklayın ya da boyutunu manuel olarak ayarlamak için tıklayıp sürükleyin",
@@ -310,7 +311,9 @@
     "view": "Görünüm",
     "view": "Görünüm",
     "zoomToFit": "Tüm öğeleri sığdırmak için yakınlaştır",
     "zoomToFit": "Tüm öğeleri sığdırmak için yakınlaştır",
     "zoomToSelection": "Seçime yakınlaş",
     "zoomToSelection": "Seçime yakınlaş",
-    "toggleElementLock": "Seçimi Kilitle/çöz"
+    "toggleElementLock": "Seçimi Kilitle/çöz",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Tuvali temizle"
     "title": "Tuvali temizle"
@@ -391,7 +394,8 @@
     "fileSaved": "Dosya kaydedildi.",
     "fileSaved": "Dosya kaydedildi.",
     "fileSavedToFilename": "{filename} kaydedildi",
     "fileSavedToFilename": "{filename} kaydedildi",
     "canvas": "tuval",
     "canvas": "tuval",
-    "selection": "seçim"
+    "selection": "seçim",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Beyaz",
     "ffffff": "Beyaz",
@@ -439,5 +443,12 @@
     "5c940d": "Yeşil 9",
     "5c940d": "Yeşil 9",
     "e67700": "Sarı 9",
     "e67700": "Sarı 9",
     "d9480f": "Turuncu 9"
     "d9480f": "Turuncu 9"
+  },
+  "welcomeScreen": {
+    "data": "Tüm veri internet gezgininize yerel olarak kaydedildi.",
+    "switchToPlusApp": "Excalidraw+ kullanmak ister miydiniz?",
+    "menuHints": "Dışa aktar, seçenkeler, diller, ...",
+    "toolbarHints": "Bir araç seçin & Çizime başlayın!",
+    "helpHints": "Kısayollar & yardım"
   }
   }
 }
 }

+ 19 - 8
src/locales/uk-UA.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Вставити",
     "paste": "Вставити",
+    "pasteAsPlaintext": "Вставити як простий текст",
     "pasteCharts": "Вставити діаграми",
     "pasteCharts": "Вставити діаграми",
     "selectAll": "Вибрати все",
     "selectAll": "Вибрати все",
     "multiSelect": "Додати елемент до вибраного",
     "multiSelect": "Додати елемент до вибраного",
@@ -71,7 +72,7 @@
     "layers": "Шари",
     "layers": "Шари",
     "actions": "Дії",
     "actions": "Дії",
     "language": "Мова",
     "language": "Мова",
-    "liveCollaboration": "Спільна робота",
+    "liveCollaboration": "",
     "duplicateSelection": "Дублювати",
     "duplicateSelection": "Дублювати",
     "untitled": "Без назви",
     "untitled": "Без назви",
     "name": "Ім’я",
     "name": "Ім’я",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "Очистити полотно",
     "clearReset": "Очистити полотно",
     "exportJSON": "Експорт у файл",
     "exportJSON": "Експорт у файл",
-    "exportImage": "Зберегти як зображення",
-    "export": "Експортувати",
+    "exportImage": "Експорт зображення...",
+    "export": "Зберегти як...",
     "exportToPng": "Експортувати в PNG",
     "exportToPng": "Експортувати в PNG",
     "exportToSvg": "Експортувати в SVG",
     "exportToSvg": "Експортувати в SVG",
     "copyToClipboard": "Скопіювати до буферу обміну",
     "copyToClipboard": "Скопіювати до буферу обміну",
@@ -144,7 +145,7 @@
     "scale": "Масштаб",
     "scale": "Масштаб",
     "save": "Зберегти до поточного файлу",
     "save": "Зберегти до поточного файлу",
     "saveAs": "Зберегти як",
     "saveAs": "Зберегти як",
-    "load": "Завантажити",
+    "load": "Відкрити",
     "getShareableLink": "Отримати посилання",
     "getShareableLink": "Отримати посилання",
     "close": "Закрити",
     "close": "Закрити",
     "selectLanguage": "Обрати мову",
     "selectLanguage": "Обрати мову",
@@ -214,7 +215,7 @@
     "text": "Текст",
     "text": "Текст",
     "library": "Бібліотека",
     "library": "Бібліотека",
     "lock": "Залишити обраний інструмент після креслення",
     "lock": "Залишити обраний інструмент після креслення",
-    "penMode": "Вимкнути масштабування через мультитач та малювати тільки з допомогою пера",
+    "penMode": "Режим пера - запобігання дотику",
     "link": "Додати/Оновити посилання для вибраної форми",
     "link": "Додати/Оновити посилання для вибраної форми",
     "eraser": "Очищувач"
     "eraser": "Очищувач"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "Ви можете зберегти пропорції, утримуючи SHIFT під час зміни розміру,\nутримуйте ALT для змінення розміру від центру",
     "resize": "Ви можете зберегти пропорції, утримуючи SHIFT під час зміни розміру,\nутримуйте ALT для змінення розміру від центру",
     "resizeImage": "Ви можете змінювати розміри утримуючи клавішу SHIFT, втримуйте клавішу ALT щоб змінювати розмір відносно центру",
     "resizeImage": "Ви можете змінювати розміри утримуючи клавішу SHIFT, втримуйте клавішу ALT щоб змінювати розмір відносно центру",
     "rotate": "Ви можете обмежити кути, утримуючи SHIFT під час обертання",
     "rotate": "Ви можете обмежити кути, утримуючи SHIFT під час обертання",
-    "lineEditor_info": "Двічі клацніть або натисніть Enter щоб редагувати точки",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "Натисніть Delete для видалення точку (точок), або Ctrl/Cmd+D для дублювання, перетаскування працює як звично",
     "lineEditor_pointSelected": "Натисніть Delete для видалення точку (точок), або Ctrl/Cmd+D для дублювання, перетаскування працює як звично",
     "lineEditor_nothingSelected": "Виберіть точку для редагування (втримуйте клавішу SHIFT для вибору кількох точок), або клавішу Alt для додавання нових точок",
     "lineEditor_nothingSelected": "Виберіть точку для редагування (втримуйте клавішу SHIFT для вибору кількох точок), або клавішу Alt для додавання нових точок",
     "placeImage": "Клацніть, щоб розмістити зображення, або натисніть та потягніть щоб змінити його розмір",
     "placeImage": "Клацніть, щоб розмістити зображення, або натисніть та потягніть щоб змінити його розмір",
@@ -310,7 +311,9 @@
     "view": "Вигляд",
     "view": "Вигляд",
     "zoomToFit": "Збільшити щоб умістити всі елементи",
     "zoomToFit": "Збільшити щоб умістити всі елементи",
     "zoomToSelection": "Наблизити вибране",
     "zoomToSelection": "Наблизити вибране",
-    "toggleElementLock": "Заблокувати/розблокувати вибране"
+    "toggleElementLock": "Заблокувати/розблокувати вибране",
+    "movePageUpDown": "Пересунути сторінку вгору/вниз",
+    "movePageLeftRight": "Пересунути сторінку вліво/вправо"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "Очистити полотно"
     "title": "Очистити полотно"
@@ -391,7 +394,8 @@
     "fileSaved": "Файл збережено.",
     "fileSaved": "Файл збережено.",
     "fileSavedToFilename": "Збережено в {filename}",
     "fileSavedToFilename": "Збережено в {filename}",
     "canvas": "полотно",
     "canvas": "полотно",
-    "selection": "виділення"
+    "selection": "виділення",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "Білий",
     "ffffff": "Білий",
@@ -439,5 +443,12 @@
     "5c940d": "Лаймовий 9",
     "5c940d": "Лаймовий 9",
     "e67700": "Жовтий 9",
     "e67700": "Жовтий 9",
     "d9480f": "Помаранчевий 9"
     "d9480f": "Помаранчевий 9"
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "Оберіть інструмент і почніть малювати!",
+    "helpHints": "Комбінації клавіш і допомога"
   }
   }
 }
 }

+ 28 - 17
src/locales/vi-VN.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "Dán",
     "paste": "Dán",
+    "pasteAsPlaintext": "",
     "pasteCharts": "Dán biểu đồ",
     "pasteCharts": "Dán biểu đồ",
     "selectAll": "Chọn tất cả",
     "selectAll": "Chọn tất cả",
     "multiSelect": "Thêm mới vào Select",
     "multiSelect": "Thêm mới vào Select",
@@ -44,7 +45,7 @@
     "exportEmbedScene": "",
     "exportEmbedScene": "",
     "exportEmbedScene_details": "",
     "exportEmbedScene_details": "",
     "addWatermark": "Làm với Excalidraw\"",
     "addWatermark": "Làm với Excalidraw\"",
-    "handDrawn": "",
+    "handDrawn": "Vẽ tay",
     "normal": "Bình thường",
     "normal": "Bình thường",
     "code": "Mã",
     "code": "Mã",
     "small": "Nhỏ",
     "small": "Nhỏ",
@@ -52,34 +53,34 @@
     "large": "Lớn",
     "large": "Lớn",
     "veryLarge": "Rất lớn",
     "veryLarge": "Rất lớn",
     "solid": "Đặc",
     "solid": "Đặc",
-    "hachure": "",
-    "crossHatch": "",
+    "hachure": "Nét gạch gạch",
+    "crossHatch": "Nét gạch chéo",
     "thin": "Mỏng",
     "thin": "Mỏng",
     "bold": "In đậm",
     "bold": "In đậm",
     "left": "Trái",
     "left": "Trái",
     "center": "Giữa",
     "center": "Giữa",
     "right": "Phải",
     "right": "Phải",
     "extraBold": "",
     "extraBold": "",
-    "architect": "",
-    "artist": "",
-    "cartoonist": "",
+    "architect": "Kiến trúc sư",
+    "artist": "Nghệ sỹ",
+    "cartoonist": "Hoạt hình",
     "fileTitle": "",
     "fileTitle": "",
-    "colorPicker": "",
+    "colorPicker": "Chọn màu",
     "canvasColors": "",
     "canvasColors": "",
     "canvasBackground": "",
     "canvasBackground": "",
     "drawingCanvas": "",
     "drawingCanvas": "",
-    "layers": "",
-    "actions": "",
-    "language": "",
+    "layers": "Lớp",
+    "actions": "Chức năng",
+    "language": "Ngôn ngữ",
     "liveCollaboration": "",
     "liveCollaboration": "",
-    "duplicateSelection": "",
-    "untitled": "",
-    "name": "",
-    "yourName": "",
+    "duplicateSelection": "Tạo bản sao",
+    "untitled": "Không có tiêu đề",
+    "name": "Tên",
+    "yourName": "Tên của bạn",
     "madeWithExcalidraw": "Làm với Excalidraw",
     "madeWithExcalidraw": "Làm với Excalidraw",
     "group": "",
     "group": "",
     "ungroup": "",
     "ungroup": "",
-    "collaborators": "",
+    "collaborators": "Cộng tác viên",
     "showGrid": "",
     "showGrid": "",
     "addToLibrary": "",
     "addToLibrary": "",
     "removeFromLibrary": "",
     "removeFromLibrary": "",
@@ -310,7 +311,9 @@
     "view": "",
     "view": "",
     "zoomToFit": "",
     "zoomToFit": "",
     "zoomToSelection": "",
     "zoomToSelection": "",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": ""
     "title": ""
@@ -391,7 +394,8 @@
     "fileSaved": "",
     "fileSaved": "",
     "fileSavedToFilename": "",
     "fileSavedToFilename": "",
     "canvas": "",
     "canvas": "",
-    "selection": ""
+    "selection": "",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "",
     "ffffff": "",
@@ -439,5 +443,12 @@
     "5c940d": "",
     "5c940d": "",
     "e67700": "",
     "e67700": "",
     "d9480f": ""
     "d9480f": ""
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 24 - 13
src/locales/zh-CN.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "粘贴",
     "paste": "粘贴",
+    "pasteAsPlaintext": "",
     "pasteCharts": "粘贴图表",
     "pasteCharts": "粘贴图表",
     "selectAll": "全部选中",
     "selectAll": "全部选中",
     "multiSelect": "添加元素到选区",
     "multiSelect": "添加元素到选区",
@@ -45,12 +46,12 @@
     "exportEmbedScene_details": "画布数据将被保存到导出的 PNG/SVG 文件,以便恢复。\n将会增加导出的文件大小。",
     "exportEmbedScene_details": "画布数据将被保存到导出的 PNG/SVG 文件,以便恢复。\n将会增加导出的文件大小。",
     "addWatermark": "添加 “使用 Excalidraw 创建” 水印",
     "addWatermark": "添加 “使用 Excalidraw 创建” 水印",
     "handDrawn": "手写",
     "handDrawn": "手写",
-    "normal": "正常",
+    "normal": "普通",
     "code": "代码",
     "code": "代码",
-    "small": "小",
-    "medium": "中",
-    "large": "大",
-    "veryLarge": "大",
+    "small": "小",
+    "medium": "中",
+    "large": "大",
+    "veryLarge": "大",
     "solid": "实心",
     "solid": "实心",
     "hachure": "线条",
     "hachure": "线条",
     "crossHatch": "交叉线条",
     "crossHatch": "交叉线条",
@@ -71,7 +72,7 @@
     "layers": "图层",
     "layers": "图层",
     "actions": "操作",
     "actions": "操作",
     "language": "语言",
     "language": "语言",
-    "liveCollaboration": "实时协作",
+    "liveCollaboration": "实时协作...",
     "duplicateSelection": "复制",
     "duplicateSelection": "复制",
     "untitled": "无标题",
     "untitled": "无标题",
     "name": "名字",
     "name": "名字",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "重置画布",
     "clearReset": "重置画布",
     "exportJSON": "导出为文件",
     "exportJSON": "导出为文件",
-    "exportImage": "保存为图像",
-    "export": "导出",
+    "exportImage": "导出图片...",
+    "export": "保存到...",
     "exportToPng": "导出为 PNG",
     "exportToPng": "导出为 PNG",
     "exportToSvg": "导出为 SVG",
     "exportToSvg": "导出为 SVG",
     "copyToClipboard": "复制到剪贴板",
     "copyToClipboard": "复制到剪贴板",
@@ -144,7 +145,7 @@
     "scale": "缩放",
     "scale": "缩放",
     "save": "保存至当前文件",
     "save": "保存至当前文件",
     "saveAs": "保存为",
     "saveAs": "保存为",
-    "load": "载入文件",
+    "load": "打开",
     "getShareableLink": "获取共享链接",
     "getShareableLink": "获取共享链接",
     "close": "关闭",
     "close": "关闭",
     "selectLanguage": "选择语言",
     "selectLanguage": "选择语言",
@@ -214,7 +215,7 @@
     "text": "文字",
     "text": "文字",
     "library": "素材库",
     "library": "素材库",
     "lock": "绘制后保持所选的工具栏状态",
     "lock": "绘制后保持所选的工具栏状态",
-    "penMode": "禁用手势缩放并只接收来自触控笔的输入",
+    "penMode": "笔模式 – 避免误触",
     "link": "为选中的形状添加/更新链接",
     "link": "为选中的形状添加/更新链接",
     "eraser": "橡皮"
     "eraser": "橡皮"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "您可以按住SHIFT来限制比例大小,\n按住ALT来调整中心大小",
     "resize": "您可以按住SHIFT来限制比例大小,\n按住ALT来调整中心大小",
     "resizeImage": "按住SHIFT可以自由缩放,\n按住ALT可以从中间缩放",
     "resizeImage": "按住SHIFT可以自由缩放,\n按住ALT可以从中间缩放",
     "rotate": "旋转时可以按住 Shift 来约束角度",
     "rotate": "旋转时可以按住 Shift 来约束角度",
-    "lineEditor_info": "双击或按回车键编辑",
+    "lineEditor_info": "",
     "lineEditor_pointSelected": "按下 Delete 移除点,Ctrl 或 Cmd+D 以复制,拖动以移动",
     "lineEditor_pointSelected": "按下 Delete 移除点,Ctrl 或 Cmd+D 以复制,拖动以移动",
     "lineEditor_nothingSelected": "选择要编辑的点 (按住 SHIFT 选择多个),\n或按住 Alt 并点击以添加新点",
     "lineEditor_nothingSelected": "选择要编辑的点 (按住 SHIFT 选择多个),\n或按住 Alt 并点击以添加新点",
     "placeImage": "点击放置图像,或者点击并拖动以手动设置图像大小",
     "placeImage": "点击放置图像,或者点击并拖动以手动设置图像大小",
@@ -310,7 +311,9 @@
     "view": "视图",
     "view": "视图",
     "zoomToFit": "缩放以适应所有元素",
     "zoomToFit": "缩放以适应所有元素",
     "zoomToSelection": "缩放到选区",
     "zoomToSelection": "缩放到选区",
-    "toggleElementLock": "锁定/解锁"
+    "toggleElementLock": "锁定/解锁",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "清除画布"
     "title": "清除画布"
@@ -391,7 +394,8 @@
     "fileSaved": "文件已保存。",
     "fileSaved": "文件已保存。",
     "fileSavedToFilename": "保存到 {filename}",
     "fileSavedToFilename": "保存到 {filename}",
     "canvas": "画布",
     "canvas": "画布",
-    "selection": "选择项"
+    "selection": "选择项",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "白",
     "ffffff": "白",
@@ -439,5 +443,12 @@
     "5c940d": "柠檬绿 9",
     "5c940d": "柠檬绿 9",
     "e67700": "黄 9",
     "e67700": "黄 9",
     "d9480f": "橙 9"
     "d9480f": "橙 9"
+  },
+  "welcomeScreen": {
+    "data": "您的所有数据都储存在浏览器本地。",
+    "switchToPlusApp": "是否前往 Excalidraw+ ?",
+    "menuHints": "导出、首选项、语言...",
+    "toolbarHints": "选择工具并开始绘图!",
+    "helpHints": "快捷键和帮助"
   }
   }
 }
 }

+ 14 - 3
src/locales/zh-HK.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "貼上",
     "paste": "貼上",
+    "pasteAsPlaintext": "",
     "pasteCharts": "貼上圖表",
     "pasteCharts": "貼上圖表",
     "selectAll": "全選",
     "selectAll": "全選",
     "multiSelect": "多重選取",
     "multiSelect": "多重選取",
@@ -71,7 +72,7 @@
     "layers": "圖層",
     "layers": "圖層",
     "actions": "動作",
     "actions": "動作",
     "language": "🌏 語言",
     "language": "🌏 語言",
-    "liveCollaboration": "多人連線",
+    "liveCollaboration": "",
     "duplicateSelection": "製作副本",
     "duplicateSelection": "製作副本",
     "untitled": "未命名的作品",
     "untitled": "未命名的作品",
     "name": "",
     "name": "",
@@ -310,7 +311,9 @@
     "view": "",
     "view": "",
     "zoomToFit": "",
     "zoomToFit": "",
     "zoomToSelection": "",
     "zoomToSelection": "",
-    "toggleElementLock": ""
+    "toggleElementLock": "",
+    "movePageUpDown": "",
+    "movePageLeftRight": ""
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": ""
     "title": ""
@@ -391,7 +394,8 @@
     "fileSaved": "",
     "fileSaved": "",
     "fileSavedToFilename": "",
     "fileSavedToFilename": "",
     "canvas": "畫布",
     "canvas": "畫布",
-    "selection": ""
+    "selection": "",
+    "pasteAsSingleElement": ""
   },
   },
   "colors": {
   "colors": {
     "ffffff": "",
     "ffffff": "",
@@ -439,5 +443,12 @@
     "5c940d": "",
     "5c940d": "",
     "e67700": "",
     "e67700": "",
     "d9480f": ""
     "d9480f": ""
+  },
+  "welcomeScreen": {
+    "data": "",
+    "switchToPlusApp": "",
+    "menuHints": "",
+    "toolbarHints": "",
+    "helpHints": ""
   }
   }
 }
 }

+ 19 - 8
src/locales/zh-TW.json

@@ -1,6 +1,7 @@
 {
 {
   "labels": {
   "labels": {
     "paste": "貼上",
     "paste": "貼上",
+    "pasteAsPlaintext": "以純文字貼上",
     "pasteCharts": "貼上圖表",
     "pasteCharts": "貼上圖表",
     "selectAll": "全選",
     "selectAll": "全選",
     "multiSelect": "將物件加入選取範圍",
     "multiSelect": "將物件加入選取範圍",
@@ -71,7 +72,7 @@
     "layers": "圖層",
     "layers": "圖層",
     "actions": "動作",
     "actions": "動作",
     "language": "語言",
     "language": "語言",
-    "liveCollaboration": "即時協作",
+    "liveCollaboration": "即時協作...",
     "duplicateSelection": "複製",
     "duplicateSelection": "複製",
     "untitled": "無標題",
     "untitled": "無標題",
     "name": "名稱",
     "name": "名稱",
@@ -135,8 +136,8 @@
   "buttons": {
   "buttons": {
     "clearReset": "重置 canvas",
     "clearReset": "重置 canvas",
     "exportJSON": "匯出至檔案",
     "exportJSON": "匯出至檔案",
-    "exportImage": "另存為圖片",
-    "export": "輸出",
+    "exportImage": "匯出圖片",
+    "export": "儲存至...",
     "exportToPng": "輸出成 PNG",
     "exportToPng": "輸出成 PNG",
     "exportToSvg": "輸出成 SVG",
     "exportToSvg": "輸出成 SVG",
     "copyToClipboard": "複製至剪貼簿",
     "copyToClipboard": "複製至剪貼簿",
@@ -144,7 +145,7 @@
     "scale": "縮放比例",
     "scale": "縮放比例",
     "save": "儲存目前檔案",
     "save": "儲存目前檔案",
     "saveAs": "儲存為",
     "saveAs": "儲存為",
-    "load": "載入",
+    "load": "開啟",
     "getShareableLink": "取得共享連結",
     "getShareableLink": "取得共享連結",
     "close": "關閉",
     "close": "關閉",
     "selectLanguage": "選擇語言",
     "selectLanguage": "選擇語言",
@@ -214,7 +215,7 @@
     "text": "文字",
     "text": "文字",
     "library": "資料庫",
     "library": "資料庫",
     "lock": "可連續使用選取的工具",
     "lock": "可連續使用選取的工具",
-    "penMode": "停止使用手勢縮放並接受以繪圖筆繪圖輸入",
+    "penMode": "筆模式 - 避免觸摸",
     "link": "為所選的形狀增加\b/更新連結",
     "link": "為所選的形狀增加\b/更新連結",
     "eraser": "橡皮擦"
     "eraser": "橡皮擦"
   },
   },
@@ -235,7 +236,7 @@
     "resize": "縮放時按住 Shift 可保持原比例縮放;\\n按住 Alt 可由中心點進行縮放",
     "resize": "縮放時按住 Shift 可保持原比例縮放;\\n按住 Alt 可由中心點進行縮放",
     "resizeImage": "按住 SHIFT 可任意縮放,按住 ALT 可由中央縮放。",
     "resizeImage": "按住 SHIFT 可任意縮放,按住 ALT 可由中央縮放。",
     "rotate": "旋轉時按住 Shift 可限制旋轉角度",
     "rotate": "旋轉時按住 Shift 可限制旋轉角度",
-    "lineEditor_info": "雙擊滑鼠左鍵或按 Enter 來編輯控制點",
+    "lineEditor_info": "按住 Ctrl 或 Cmd 並雙擊或按住 Ctrl 或 Cmd + Enter 來編輯控制點",
     "lineEditor_pointSelected": "按下 Delete 可移除錨點;Ctrl 或 Cmd + D 可複製;或可拖曳來移動",
     "lineEditor_pointSelected": "按下 Delete 可移除錨點;Ctrl 或 Cmd + D 可複製;或可拖曳來移動",
     "lineEditor_nothingSelected": "選擇要編輯的錨點(按住 SHIFT 可多選),\n或按住 Alt 並點擊以增加新錨點。",
     "lineEditor_nothingSelected": "選擇要編輯的錨點(按住 SHIFT 可多選),\n或按住 Alt 並點擊以增加新錨點。",
     "placeImage": "點擊以放置圖片,或點擊並拖曳以手動調整其尺寸。",
     "placeImage": "點擊以放置圖片,或點擊並拖曳以手動調整其尺寸。",
@@ -310,7 +311,9 @@
     "view": "檢視",
     "view": "檢視",
     "zoomToFit": "放大至填滿畫面",
     "zoomToFit": "放大至填滿畫面",
     "zoomToSelection": "縮放至選取區",
     "zoomToSelection": "縮放至選取區",
-    "toggleElementLock": "鎖定/解鎖已選的項目"
+    "toggleElementLock": "鎖定/解鎖已選的項目",
+    "movePageUpDown": "向上/下移動頁面",
+    "movePageLeftRight": "向左/右移動頁面"
   },
   },
   "clearCanvasDialog": {
   "clearCanvasDialog": {
     "title": "清除畫布"
     "title": "清除畫布"
@@ -391,7 +394,8 @@
     "fileSaved": "已儲存檔案。",
     "fileSaved": "已儲存檔案。",
     "fileSavedToFilename": "儲存為 {filename}",
     "fileSavedToFilename": "儲存為 {filename}",
     "canvas": "畫布",
     "canvas": "畫布",
-    "selection": "已選項目"
+    "selection": "已選項目",
+    "pasteAsSingleElement": "使用 {{shortcut}} 以做為單一物件貼上,\n或貼上至現有的文字編輯器"
   },
   },
   "colors": {
   "colors": {
     "ffffff": "白",
     "ffffff": "白",
@@ -439,5 +443,12 @@
     "5c940d": "黃綠 9",
     "5c940d": "黃綠 9",
     "e67700": "黃 9",
     "e67700": "黃 9",
     "d9480f": "橘 9"
     "d9480f": "橘 9"
+  },
+  "welcomeScreen": {
+    "data": "您的所有資料都儲存在本機瀏覽器。",
+    "switchToPlusApp": "您是否是要前往 Excalidraw+ ?",
+    "menuHints": "輸出、偏好設定、語言...",
+    "toolbarHints": "選個工具開始畫圖吧!",
+    "helpHints": "快速鍵與說明"
   }
   }
 }
 }

+ 2 - 0
src/packages/excalidraw/CHANGELOG.md

@@ -15,6 +15,8 @@ Please add the latest change on the top under the correct section.
 
 
 ### Features
 ### Features
 
 
+- Expose component API for the Excalidraw main menu [#6034](https://github.com/excalidraw/excalidraw/pull/6034), You can read more about its usage [here](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#MainMenu)
+
 - Render Footer as a component instead of render prop [#5970](https://github.com/excalidraw/excalidraw/pull/5970). You can read more about its usage [here](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#Footer)
 - Render Footer as a component instead of render prop [#5970](https://github.com/excalidraw/excalidraw/pull/5970). You can read more about its usage [here](https://github.com/excalidraw/excalidraw/blob/master/src/packages/excalidraw/README.md#Footer)
 
 
 #### BREAKING CHANGE
 #### BREAKING CHANGE

+ 236 - 0
src/packages/excalidraw/README.md

@@ -405,6 +405,195 @@ const App = () => {
 };
 };
 ```
 ```
 
 
+This will only for `Desktop` devices.
+
+For `mobile` you will need to render it inside the [MainMenu](#mainmenu). You can use the [`useDevice`](#useDevice) hook to check the type of device, this will be available only inside the `children` of `Excalidraw` component.
+
+```js
+import { useDevice, Footer } from "@excalidraw/excalidraw";
+
+const MobileFooter = ({
+}) => {
+  const device = useDevice();
+  if (device.isMobile) {
+    return (
+      <Footer>
+       <button
+        className="custom-footer"
+        onClick={() => alert("This is custom footer in mobile menu")}
+      >
+        {" "}
+        custom footer{" "}
+      </button>
+      </Footer>
+    );
+  }
+  return null;
+
+};
+const App = () => {
+  <Excalidraw>
+    <MainMenu>
+      <MainMenu.Item onSelect={() => window.alert("Item1")}> Item1 </MainMenu.Item>
+      <MainMenu.Item onSelect={() => window.alert("Item2")}> Item 2 </>
+      <MobileFooter/>
+    </MainMenu>
+  </Excalidraw>
+}
+
+```
+
+You can visit the[ example](https://ehlz3.csb.app/) for working demo.
+
+#### MainMenu
+
+By default Excalidraw will render the `MainMenu` with default options. If you want to customise the `MainMenu`, you can pass the `MainMenu` component with the list options. You can visit [codesandbox example](https://ehlz3.csb.app/) for a working demo.
+
+**Usage**
+
+```js
+import { MainMenu } from "@excalidraw/excalidraw";
+const App = () => {
+  <Excalidraw>
+    <MainMenu>
+      <MainMenu.Item onSelect={() => window.alert("Item1")}> Item1 </MainMenu.Item>
+      <MainMenu.Item onSelect={() => window.alert("Item2")}> Item 2 </>
+    </MainMenu>
+  </Excalidraw>
+}
+```
+
+**MainMenu**
+
+This is the `MainMenu` component which you need to import to render the menu with custom options.
+
+**MainMenu.Item**
+
+To render an item, its recommended to use `MainMenu.Item`.
+
+| Prop | Type | Required | Default | Description |
+| --- | --- | --- | --- | --- |
+| `onSelect` | `Function` | Yes | `undefined` | The handler is triggered when the item is selected. |
+| `children` | `React.ReactNode` | Yes | `undefined` | The content of the menu item |
+| `icon` | `JSX.Element` | No | `undefined` | The icon used in the menu item |
+| `shortcut` | `string` | No | `undefined` | The shortcut to be shown for the menu item |
+| `className` | `string` | No | "" | The class names to be added to the menu item |
+| `style` | `React.CSSProperties` | No | `undefined` | The inline styles to be added to the menu item |
+| `ariaLabel` | `string` | `undefined` | No | The `aria-label` to be added to the item for accessibility |
+| `dataTestId` | `string` | `undefined` | No | The `data-testid` to be added to the item. |
+
+**MainMenu.ItemLink**
+
+To render an item as a link, its recommended to use `MainMenu.ItemLink`.
+
+**Usage**
+
+```js
+import { MainMenu } from "@excalidraw/excalidraw";
+const App = () => {
+  <Excalidraw>
+    <MainMenu>
+      <MainMenu.ItemLink href="https://google.com">Google</MainMenu.ItemLink>
+      <MainMenu.ItemLink href="https://excalidraw.com">
+        Excalidraw
+      </MainMenu.ItemLink>
+    </MainMenu>
+  </Excalidraw>;
+};
+```
+
+| Prop | Type | Required | Default | Description |
+| --- | --- | --- | --- | --- |
+| `href` | `string` | Yes | `undefined` | The `href` attribute to be added to the `anchor` element. |
+| `children` | `React.ReactNode` | Yes | `undefined` | The content of the menu item |
+| `icon` | `JSX.Element` | No | `undefined` | The icon used in the menu item |
+| `shortcut` | `string` | No | `undefined` | The shortcut to be shown for the menu item |
+| `className` | `string` | No | "" | The class names to be added to the menu item |
+| `style` | `React.CSSProperties` | No | `undefined` | The inline styles to be added to the menu item |
+| `ariaLabel` | `string` | No | `undefined` | The `aria-label` to be added to the item for accessibility |
+| `dataTestId` | `string` | No | `undefined` | The `data-testid` to be added to the item. |
+
+**MainMenu.ItemCustom**
+
+To render a custom item, you can use `MainMenu.ItemCustom`.
+
+**Usage**
+
+```js
+import { MainMenu } from "@excalidraw/excalidraw";
+const App = () => {
+  <Excalidraw>
+    <MainMenu>
+      <MainMenu.ItemCustom>
+        <button
+          style={{ height: "2rem" }}
+          onClick={() => window.alert("custom menu item")}
+        >
+          {" "}
+          custom item
+        </button>
+      </MainMenu.ItemCustom>
+    </MainMenu>
+  </Excalidraw>;
+};
+```
+
+| Prop | Type | Required | Default | Description |
+| --- | --- | --- | --- | --- |
+| `children` | `React.ReactNode` | Yes | `undefined` | The content of the menu item |
+| `className` | `string` | No | "" | The class names to be added to the menu item |
+| `style` | `React.CSSProperties` | No | `undefined` | The inline styles to be added to the menu item |
+| `dataTestId` | `string` | No | `undefined` | The `data-testid` to be added to the item. |
+
+**MainMenu.DefaultItems**
+
+For the items which are shown in the menu in [excalidraw.com](https://excalidraw.com), you can use `MainMenu.DefaultItems`
+
+```js
+import { MainMenu } from "@excalidraw/excalidraw";
+const App = () => {
+  <Excalidraw>
+    <MainMenu>
+      <MainMenu.DefaultItems.Socials/>
+      <MainMenu.DefaultItems.Export/>
+      <MainMenu.Item onSelect={() => window.alert("Item1")}> Item1 </MainMenu.Item>
+      <MainMenu.Item onSelect={() => window.alert("Item2")}> Item 2 </>
+    </MainMenu>
+  </Excalidraw>
+}
+```
+
+Here is a [complete list](https://github.com/excalidraw/excalidraw/blob/master/src/components/mainMenu/DefaultItems.tsx) of the default items.
+
+**MainMenu.Group**
+
+To Group item in the main menu, you can use `MainMenu.Group`
+
+```js
+import { MainMenu } from "@excalidraw/excalidraw";
+const App = () => {
+  <Excalidraw>
+    <MainMenu>
+      <MainMenu.Group title="Excalidraw items">
+        <MainMenu.DefaultItems.Socials/>
+        <MainMenu.DefaultItems.Export/>
+      </MainMenu.Group>
+      <MainMenu.Group title="custom items">
+        <MainMenu.Item onSelect={() => window.alert("Item1")}> Item1 </MainMenu.Item>
+        <MainMenu.Item onSelect={() => window.alert("Item2")}> Item 2 </>
+      </MainMenu.Group>
+    </MainMenu>
+  </Excalidraw>
+}
+```
+
+| Prop | Type | Required | Default | Description |
+| --- | --- | --- | --- | --- |
+| `children ` | `React.ReactNode` | Yes | `undefined` | The content of the `Menu Group` |
+| `title` | `string` | No | `undefined` | The `title` for the grouped items |
+| `className` | `string` | No | "" | The `classname` to be added to the group |
+| `style` | `React.CSsSProperties` | No | `undefined` | The inline `styles` to be added to the group |
+
 ### Props
 ### Props
 
 
 | Name | Type | Default | Description |
 | Name | Type | Default | Description |
@@ -1369,6 +1558,53 @@ viewportCoordsToSceneCoords({clientX: number, clientY: number}, appState: <a hre
 
 
 This function returns equivalent scene coords for the provided viewport coords in params.
 This function returns equivalent scene coords for the provided viewport coords in params.
 
 
+#### useDevice
+
+This hook can be used to check the type of device which is being used. It can only be used inside the `children` of `Excalidraw` component
+
+```js
+import { useDevice, Footer } from "@excalidraw/excalidraw";
+
+const MobileFooter = ({
+}) => {
+  const device = useDevice();
+  if (device.isMobile) {
+    return (
+      <Footer>
+       <button
+        className="custom-footer"
+        onClick={() => alert("This is custom footer in mobile menu")}
+      >
+        {" "}
+        custom footer{" "}
+      </button>
+      </Footer>
+    );
+  }
+  return null;
+
+};
+const App = () => {
+  <Excalidraw>
+    <MainMenu>
+      <MainMenu.Item> Item1 </MainMenu.Item>
+      <MainMenu.Item> Item 2 </>
+      <MobileFooter/>
+    </MainMenu>
+  </Excalidraw>
+}
+
+```
+
+The `device` has the following `attributes`
+
+| Name | Type | Description |
+| --- | --- | --- |
+| `isSmScreen` | `boolean` | Set to `true` when the device small screen is small (Width < `640px` ) |
+| `isMobile` | `boolean` | Set to `true` when the device is `mobile` |
+| `isTouchScreen` | `boolean` | Set to `true` for `touch` devices |
+| `canDeviceFitSidebar` | `boolean` | Implies whether there is enough space to fit the `sidebar` |
+
 ### Exported constants
 ### Exported constants
 
 
 #### `FONT_FAMILY`
 #### `FONT_FAMILY`

+ 0 - 5
src/packages/excalidraw/example/App.scss

@@ -73,9 +73,4 @@
   .custom-element {
   .custom-element {
     padding: 0.1rem;
     padding: 0.1rem;
   }
   }
-
-  &.excalidraw-container .layer-ui__wrapper .layer-ui__wrapper__footer-center {
-    // Remove once we stop importing langauge list from excalidraw app
-    justify-content: flex-start;
-  }
 }
 }

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