Browse Source

Merge branch 'master' into feat/db

Tienson Qin 2 years ago
parent
commit
f811a5e18c

+ 1 - 0
docs/contributing-to-translations.md

@@ -84,6 +84,7 @@ Almost all translations are small. The only exceptions to this are the keys `:tu
 
 * Some translations may include punctuation like `:` or `!`. When translating them, please use the punctuation that makes the most sense for your language as you don't have to follow the English ones.
 * Some translations may include arguments/interpolations e.g. `{1}`. If you see them in a translation, be sure to include them. These arguments are substituted in the string and are usually used something the app needs to calculate e.g. a number. See [these docs](https://github.com/tonsky/tongue#interpolation) for more examples.
+* Rarely, a translation may need to translate formatted text by returning [hiccup-style HTML](https://github.com/weavejester/hiccup#syntax). In this case, a Clojure function is the recommended approach. For example, a function translation would look like `(fn [] [:div "FOO"])`. See `:on-boarding/main-title` for an example.
 ## Fix Mistakes
 
 There is a lint command to catch common translation mistakes - `bb

+ 78 - 1
e2e-tests/code-editing.spec.ts

@@ -1,6 +1,11 @@
 import { expect } from '@playwright/test'
 import { test } from './fixtures'
-import { createRandomPage, escapeToCodeEditor, escapeToBlockEditor } from './utils'
+import {
+  createRandomPage,
+  escapeToCodeEditor,
+  escapeToBlockEditor,
+  repeatKeyPress,
+} from './utils'
 
 /**
  * NOTE: CodeMirror is a complex library that requires a lot of setup to work.
@@ -241,3 +246,75 @@ test('multi properties with code', async ({ page }) => {
     '```'
   )
 })
+
+test('Select codeblock language', async ({ page }) => {
+  await createRandomPage(page)
+
+  // Open the slash command menu
+  await page.type('textarea >> nth=0', '/code block', { delay: 20 })
+
+  expect(
+    await page.waitForSelector('[data-modal-name="commands"]', {
+      state: 'visible',
+    })
+  ).toBeTruthy()
+
+  // Select `code block` command and open the language dropdown menu
+  await page.press('textarea >> nth=0', 'Enter', { delay: 10 })
+  // wait for the modal to open
+  expect(
+    await page.waitForSelector('[data-modal-name="select-code-block-mode"]', {
+      state: 'visible',
+    })
+  ).toBeTruthy()
+
+  // Select Clojure from the dropdown menu
+  await repeatKeyPress(page, 'ArrowDown', 6)
+  await page.press('textarea >> nth=0', 'Enter', { delay: 10 })
+  // expect the codeblock to be visible
+  expect(await page.waitForSelector('.CodeMirror', { state: 'visible' }))
+
+  // Exit codeblock and return to block edit mode
+  await page.press('.CodeMirror textarea >> nth=0', 'Escape', { delay: 10 })
+
+  expect(await page.inputValue('.block-editor textarea')).toBe(
+    '```clojure\n```'
+  )
+})
+
+test('Select codeblock language while surrounded by text', async ({ page }) => {
+  await createRandomPage(page)
+  await page.type('textarea >> nth=0', 'ABC XYZ', { delay: 20 })
+  await repeatKeyPress(page, 'ArrowLeft', 3)
+
+  // Open the slash command menu
+  await page.type('textarea >> nth=0', '/code block', { delay: 20 })
+
+  expect(
+    await page.waitForSelector('[data-modal-name="commands"]', {
+      state: 'visible',
+    })
+  ).toBeTruthy()
+
+  // Select `code block` command and open the language dropdown menu
+  await page.press('textarea >> nth=0', 'Enter', { delay: 10 })
+  // wait for the modal to open
+  expect(
+    await page.waitForSelector('[data-modal-name="select-code-block-mode"]', {
+      state: 'visible',
+    })
+  ).toBeTruthy()
+
+  // Select Clojure from the dropdown menu
+  await repeatKeyPress(page, 'ArrowDown', 6)
+  await page.press('textarea >> nth=0', 'Enter', { delay: 10 })
+  // expect the codeblock to be visible
+  expect(await page.waitForSelector('.CodeMirror', { state: 'visible' }))
+
+  // Exit codeblock and return to block edit mode
+  await page.press('.CodeMirror textarea >> nth=0', 'Escape', { delay: 10 })
+
+  expect(await page.inputValue('.block-editor textarea')).toBe(
+    'ABC \n```clojure\n```\nXYZ'
+  )
+})

+ 22 - 3
src/main/frontend/commands.cljs

@@ -299,7 +299,12 @@
      ["Embed Twitter tweet" [[:editor/input "{{tweet }}" {:last-pattern command-trigger
                                                           :backward-pos 2}]]]
      ["Add new property" [[:editor/clear-current-slash]
-                          [:editor/new-property]]]]
+                          [:editor/new-property]]]
+
+     ["Code block" [[:editor/input "```\n```\n" {:type            "block"
+                                                 :backward-pos    5
+                                                 :only-breakline? true}]
+                    [:editor/select-code-block-mode]] "Insert code block"]]
 
     @*extend-slash-commands
     ;; Allow user to modify or extend, should specify how to extend.
@@ -333,7 +338,7 @@
 
 (defn insert!
   [id value
-   {:keys [last-pattern postfix-fn backward-pos end-pattern backward-truncate-number command]
+   {:keys [last-pattern postfix-fn backward-pos end-pattern backward-truncate-number command only-breakline?]
     :as _option}]
   (when-let [input (gdom/getElement id)]
     (let [last-pattern (when-not (= last-pattern :skip-check)
@@ -367,7 +372,8 @@
                                     (and last-pattern
                                          (or (string/ends-with? last-pattern gp-property/colons)
                                              (string/starts-with? last-pattern gp-property/colons)))))))]
-                   (if (and space? (string/starts-with? last-pattern "#[["))
+                   (if (and space? (or (string/starts-with? last-pattern "#[[")
+                                       (string/starts-with? last-pattern "```")))
                      false
                      space?))
           prefix (cond
@@ -383,6 +389,10 @@
 
                    :else
                    (util/replace-last last-pattern orig-prefix value space?))
+          postfix (cond-> postfix
+                          (and only-breakline? postfix
+                               (= (get postfix 0) "\n"))
+                          (string/replace-first "\n" ""))
           new-value (cond
                       (string/blank? postfix)
                       prefix
@@ -695,6 +705,15 @@
       (state/set-timestamp-block! nil)
       (state/set-editor-action! :datepicker))))
 
+(defmethod handle-step :editor/select-code-block-mode [[_]]
+  (-> (p/delay 50)
+      (p/then
+        (fn []
+          (when-let [input (state/get-input)]
+            ;; update action cursor position
+            (state/set-editor-action-data! {:pos (cursor/get-caret-pos input)})
+            (state/set-editor-action! :select-code-block-mode))))))
+
 (defmethod handle-step :editor/click-hidden-file-input [[_ _input-id]]
   (when-let [input-file (gdom/getElement "upload-file")]
     (.click input-file)))

+ 15 - 14
src/main/frontend/components/block.cljs

@@ -878,7 +878,8 @@
             (let [title [:span.block-ref
                          (block-content (assoc config :block-ref? true :stop-events? stop-inner-events?)
                                         block nil (:block/uuid block)
-                                        (:slide? config))]
+                                        (:slide? config)
+                                        false)]
                   inner (if label
                           (->elem
                            :span.block-ref
@@ -892,7 +893,6 @@
                   (if (util/right-click? e)
                     (state/set-state! :block-ref/context {:block (:block config)
                                                           :block-ref block-id})
-
                     (when (and
                            (or (gobj/get e "shiftKey")
                                (not (.. e -target (closest ".blank"))))
@@ -2270,8 +2270,8 @@
                  (str uuid "-" idx)))))]))))
 
 (rum/defc block-content < rum/reactive
-  [config {:block/keys [uuid content children properties scheduled deadline format pre-block?] :as block} edit-input-id block-id slide?]
-  (let [content (property-edit/remove-built-in-properties-when-file-based (state/get-current-repo) format content)
+  [config {:block/keys [uuid content children properties scheduled deadline format pre-block?] :as block} edit-input-id block-id slide? selected?]
+  (let [content (property/remove-built-in-properties format content)
         {:block/keys [title body] :as block} (if (:block/title block) block
                                                  (merge block (block/parse-title-and-body uuid format pre-block? content)))
         collapsed? (util/collapsed? block)
@@ -2290,14 +2290,15 @@
                 :data-type (name block-type)
                 :style {:width "100%" :pointer-events (when stop-events? "none")}}
 
-               (not (string/blank? (:hl-color properties)))
-               (assoc :data-hl-color (:hl-color properties))
+                (not (string/blank? (:hl-color properties)))
+                (assoc :data-hl-color (:hl-color properties))
 
-               (not block-ref?)
-               (assoc mouse-down-key (fn [e]
-                                       (block-content-on-mouse-down e block block-id content edit-input-id))))]
+                (not block-ref?)
+                (assoc mouse-down-key (fn [e]
+                                        (block-content-on-mouse-down e block block-id content edit-input-id))))]
     [:div.block-content.inline
      (cond-> {:id (str "block-content-" uuid)
+              :class (when selected? "select-none")
               :on-mouse-up (fn [e]
                              (when (and
                                     (state/in-selection-mode?)
@@ -2397,7 +2398,7 @@
                                   (= (:block/uuid block) (:block/uuid (:block config))))
                  default-hide? (if (and current-block-page? (not embed-self?) (state/auto-expand-block-refs?)) false true)]
              (assoc state ::hide-block-refs? (atom default-hide?))))}
-  [state config {:block/keys [uuid format] :as block} edit-input-id block-id edit? hide-block-refs-count?]
+  [state config {:block/keys [uuid format] :as block} edit-input-id block-id edit? hide-block-refs-count? selected?]
   (let [*hide-block-refs? (get state ::hide-block-refs?)
         hide-block-refs? (rum/react *hide-block-refs?)
         editor-box (get config :editor-box)
@@ -2435,7 +2436,7 @@
                                            (editor-handler/clear-selection!)
                                            (editor-handler/unhighlight-blocks!)
                                            (state/set-editing! edit-input-id (:block/content block) block ""))}})
-            (block-content config block edit-input-id block-id slide?))]
+            (block-content config block edit-input-id block-id slide? selected?))]
 
           (when-not hide-block-refs-count?
             [:div.flex.flex-row.items-center
@@ -2489,7 +2490,7 @@
       [:div.single-block.ls-block
        {:class (str block-uuid)
         :id (str "ls-block-" blocks-container-id "-" block-uuid)}
-       (block-content-or-editor config block edit-input-id block-el-id edit? true)])))
+       (block-content-or-editor config block edit-input-id block-el-id edit? true false)])))
 
 (rum/defc single-block-cp
   [block-uuid]
@@ -2793,7 +2794,7 @@
        :class (str uuid
                    (when pre-block? " pre-block")
                    (when (and card? (not review-cards?)) " shadow-md")
-                   (when selected? " selected noselect")
+                   (when selected? " selected")
                    (when order-list? " is-order-list")
                    (when (string/blank? content) " is-blank"))
        :blockid (str uuid)
@@ -2848,7 +2849,7 @@
         (let [block (merge block (block/parse-title-and-body uuid (:block/format block) pre-block? content))
               hide-block-refs-count? (and (:embed? config)
                                           (= (:block/uuid block) (:embed-id config)))]
-          (block-content-or-editor config block edit-input-id block-id edit? hide-block-refs-count?)))
+          (block-content-or-editor config block edit-input-id block-id edit? hide-block-refs-count? selected?)))
 
       (when @*show-right-menu?
         (block-right-menu config block edit?))]

+ 47 - 5
src/main/frontend/components/editor.cljs

@@ -14,6 +14,7 @@
             [frontend.handler.editor.lifecycle :as lifecycle]
             [frontend.handler.page :as page-handler]
             [frontend.handler.paste :as paste-handler]
+            [frontend.search :refer [fuzzy-search]]
             [frontend.mixins :as mixins]
             [frontend.modules.shortcut.core :as shortcut]
             [frontend.state :as state]
@@ -291,12 +292,50 @@
           :item-render (fn [property-value] property-value)
           :class       "black"})))))
 
+(rum/defc code-block-mode-keyup-listener
+  [_q _edit-content last-pos current-pos]
+  (rum/use-effect!
+    (fn []
+      (when (< current-pos last-pos)
+        (state/clear-editor-action!)))
+    [last-pos current-pos])
+  [:<>])
+
+(rum/defc code-block-mode-picker < rum/reactive
+  [id format]
+  (when-let [modes (some->> js/window.CodeMirror (.-modes) (js/Object.keys) (js->clj) (remove #(= "null" %)))]
+    (when-let [input (gdom/getElement id)]
+      (let [pos          (state/get-editor-last-pos)
+            current-pos  (cursor/pos input)
+            edit-content (or (state/sub [:editor/content id]) "")
+            q            (or (editor-handler/get-selected-text)
+                             (gp-util/safe-subs edit-content pos current-pos)
+                             "")
+            matched      (seq (fuzzy-search modes q))
+            matched      (or matched (if (string/blank? q) modes [q]))]
+        [:div
+         (code-block-mode-keyup-listener q edit-content pos current-pos)
+         (ui/auto-complete matched
+                           {:on-chosen   (fn [chosen _click?]
+                                           (state/clear-editor-action!)
+                                           (let [prefix (str "```" chosen)
+                                                 last-pattern (str "```" q)]
+                                             (editor-handler/insert-command! id
+                                               prefix format {:last-pattern last-pattern})
+                                             (commands/handle-step [:codemirror/focus])))
+                            :on-enter    (fn []
+                                           (state/clear-editor-action!)
+                                           (commands/handle-step [:codemirror/focus]))
+                            :item-render (fn [mode _chosen?]
+                                           [:strong mode])
+                            :class       "code-block-mode-picker"})]))))
+
 (rum/defcs input < rum/reactive
-  (rum/local {} ::input-value)
-  (mixins/event-mixin
-   (fn [state]
-     (mixins/on-key-down
-      state
+                   (rum/local {} ::input-value)
+                   (mixins/event-mixin
+                     (fn [state]
+                       (mixins/on-key-down
+                         state
       {;; enter
        13 (fn [state e]
             (let [input-value (get state ::input-value)
@@ -579,6 +618,9 @@
       (= :datepicker action)
       (animated-modal "date-picker" (datetime-comp/date-picker id format nil) false)
 
+      (= :select-code-block-mode action)
+      (animated-modal "select-code-block-mode" (code-block-mode-picker id format) true)
+
       (= :input action)
       (animated-modal "input" (input id
                                      (fn [command m]

+ 16 - 15
src/main/frontend/components/editor.css

@@ -1,13 +1,13 @@
 #audio-record-toolbar {
-    position: fixed;
-    background-color: var(--ls-secondary-background-color);
-    width: 90px;
-    justify-content: left;
-    left: 5px;
-    transition: none;
-    z-index: 9999;
-    padding: 5px 5px 5px 8px;
-    border-radius: 5px;
+  position: fixed;
+  background-color: var(--ls-secondary-background-color);
+  width: 90px;
+  justify-content: left;
+  left: 5px;
+  transition: none;
+  z-index: 9999;
+  padding: 5px 5px 5px 8px;
+  border-radius: 5px;
 }
 
 .editor-wrapper {
@@ -41,7 +41,8 @@
     transform: translateY(calc(-100% - 2rem));
   }
 
-  &[data-modal-name="commands"] {
+  &[data-modal-name="commands"],
+  &[data-modal-name="select-code-block-mode"] {
     @screen sm {
       width: 380px !important;
       max-width: 90vw !important;
@@ -76,11 +77,11 @@ pre {
 }
 
 #time-repeater {
-    width: 135px;
-    
-    @screen sm {
-        min-width: 300px;
-    }
+  width: 135px;
+
+  @screen sm {
+    min-width: 300px;
+  }
 }
 
 

+ 3 - 3
src/main/frontend/components/onboarding/setups.cljs

@@ -19,7 +19,7 @@
             [clojure.string :as string]
             [goog.object :as gobj]))
 
-(defonce DEVICE (if (util/mobile?) "phone" "computer"))
+(def DEVICE (if (util/mobile?) (t :on-boarding/section-phone) (t :on-boarding/section-computer)))
 
 (rum/defc setups-container
   [flag content]
@@ -30,7 +30,7 @@
 
       [:h1.text-xl
        (if picker?
-         [:span [:strong (ui/icon "heart")] (t :on-boarding/main-title) [:strong "Logseq!"]]
+         [:span [:strong (ui/icon "heart")] (t :on-boarding/main-title)]
          [:span [:strong (ui/icon "file-import")] (t :on-boarding/importing-main-title)])]
 
       [:h2
@@ -106,7 +106,7 @@
          [:small.opacity-60 (t :on-boarding/section-desc)]]]
 
        [:p.text-sm.pt-5.tracking-wide
-        [:span (str (t :on-boarding/section-tip-1) DEVICE ".")]
+        [:span (str (t :on-boarding/section-tip-1 DEVICE))]
         [:br]
         [:span (t :on-boarding/section-tip-2)]]
 

+ 1 - 1
src/main/frontend/components/page.cljs

@@ -866,7 +866,7 @@
         has-next? (< current total-pages)
         prev-page (if (= 1 current) 1 (dec current))
         next-page (if (= total-pages current) total-pages (inc current))]
-    [:div.flex.items-center.noselect
+    [:div.flex.items-center.select-none
      (when has-prev?
        [[:a.fade-link.flex
          {:on-click #(on-change 1)}

+ 3 - 3
src/main/frontend/components/page_menu.cljs

@@ -89,7 +89,7 @@
                          (if favorited?
                            (page-handler/unfavorite-page! page-original-name)
                            (page-handler/favorite-page! page-original-name)))}})
-          
+
           (when (or (util/electron?) file-sync-graph-uuid)
             {:title   (t :page/version-history)
              :options {:on-click
@@ -117,12 +117,12 @@
 
           (when (and (not (mobile-util/native-platform?))
                      (state/get-current-page))
-            {:title (t :page/presentation-mode)
+            {:title (t :page/slide-view)
              :options {:on-click (fn []
                                    (state/sidebar-add-block!
                                     repo
                                     (:db/id page)
-                                    :page-presentation))}})
+                                    :page-slide-view))}})
 
           ;; TODO: In the future, we'd like to extract file-related actions
           ;; (such as open-in-finder & open-with-default-app) into a sub-menu of

+ 1 - 1
src/main/frontend/components/repo.cljs

@@ -242,7 +242,7 @@
                                            "origin-top-right.absolute.left-0.mt-2.rounded-md.shadow-lg")}
                            (> (count repos) 1)              ; show switch to if there are multiple repos
                            (assoc :links-header [:div.font-medium.text-sm.opacity-70.px-4.pt-2.pb-1.flex.flex-row.justify-between.items-center
-                                                 [:div "Switch to:"]
+                                                 [:div (t :left-side-bar/switch)]
                                                  (when (and (file-sync/enable-sync?) login?)
                                                    (if remotes-loading?
                                                      (ui/loading "")

+ 2 - 2
src/main/frontend/components/right_sidebar.cljs

@@ -16,7 +16,7 @@
             [frontend.handler.ui :as ui-handler]
             [frontend.state :as state]
             [frontend.ui :as ui]
-            [frontend.util :as util]            
+            [frontend.util :as util]
             [frontend.config :as config]
             [frontend.modules.editor.undo-redo :as undo-redo]
             [goog.object :as gobj]
@@ -159,7 +159,7 @@
        [:div.ml-2
         (page-cp repo page-name)]])
 
-    :page-presentation
+    :page-slide-view
     (let [page-name (:block/name (db/entity db-id))]
       [[:a.page-title {:href (rfe/href :page {:name page-name})}
         (db-model/get-page-original-name page-name)]

+ 3 - 3
src/main/frontend/components/settings.cljs

@@ -1048,7 +1048,7 @@
                [:editor "editor" (t :settings-page/tab-editor) (ui/icon "writing")]
 
                (when (util/electron?)
-                 [:git "git" (t :settings-page/tab-version-control) (ui/icon "history")])
+                 [:version-control "git" (t :settings-page/tab-version-control) (ui/icon "history")])
 
                ;; (when (util/electron?)
                ;;   [:assets "assets" (t :settings-page/tab-assets) (ui/icon "box")])
@@ -1072,7 +1072,7 @@
 
       [:article
        [:header.cp__settings-header
-        [:h1.cp__settings-category-title (name (first @*active))]]
+        [:h1.cp__settings-category-title (t (keyword (str "settings-page/tab-" (name (first @*active)))))]]
 
        (case (first @*active)
 
@@ -1091,7 +1091,7 @@
          :editor
          (settings-editor current-repo)
 
-         :git
+         :version-control
          (settings-git)
 
          :assets

+ 2 - 3
src/resources/dicts/af.edn

@@ -23,7 +23,6 @@
  :right-side-bar/switch-theme "Skakel oor na die {1} tema"
  :right-side-bar/contents "Inhoud"
  :right-side-bar/block-ref "Blok verwysing"
- :page/presentation-mode "Aanbiedings modus"
  :page/delete-confirmation "Is jy seker jy wil die bladsy uitvee?"
  :page/show-journals "Wys joernale"
  :file/name "Lêer naam"
@@ -60,7 +59,7 @@
  :language "Taal"
 
  :file-sync/other-user-graph "Huidige plaaslike grafiek is gebonde aan ander gebruiker se afgeleë grafiek. So kan nie begin om te sinkroniseer nie."
- :file-sync/graph-deleted "Huidige afstandgrafiek is geskrap" 
+ :file-sync/graph-deleted "Huidige afstandgrafiek is geskrap"
 
  :shortcut.category/formatting           "Formatering"
  :command.editor/indent                  "Ingekeepte blok oortjie"
@@ -84,4 +83,4 @@
  :command.ui/toggle-document-mode        "Wissel dokument modus"
  :command.go/journals                    "Spring na joernale"
  :command.ui/toggle-theme                "Wissel tussen donker/lig temas"
- :command.ui/toggle-right-sidebar        "Wissel regter sybalk"}
+ :command.ui/toggle-right-sidebar        "Wissel regter sybalk"}

+ 1 - 2
src/resources/dicts/de.edn

@@ -193,7 +193,6 @@
  :page/open-backup-directory "Verzeichnis für Seiten-Backups öffnen"
  :page/open-in-finder "Im Verzeichnis öffnen"
  :page/open-with-default-app "Mit Standard-Anwendung öffnen"
- :page/presentation-mode "Präsentationsmodus"
  :page/show-journals "Journal anzeigen"
  :page/show-whiteboards "Whiteboards anzeigen"
  :page/unfavorite "Seite aus Favoriten entfernen"
@@ -498,4 +497,4 @@
  :shortcut.category/formatting           "Formatierung"
  :shortcut.category/navigating           "Navigation"
  :shortcut.category/others               "Sonstiges"
- :shortcut.category/toggle               "Umschalten"}
+ :shortcut.category/toggle               "Umschalten"}

+ 8 - 5
src/resources/dicts/en.edn

@@ -44,17 +44,19 @@
  :on-boarding/importing-roam-desc "Import a JSON Export of your Roam graph"
  :on-boarding/importing-lsq-desc "Import an EDN or a JSON Export of your Logseq graph"
  :on-boarding/importing-opml-desc " Import OPML files"
- :on-boarding/main-title "Welcome to "
+ :on-boarding/main-title (fn [] ["Welcome to " [:strong "Logseq!"]])
  :on-boarding/main-desc "First you need to choose a folder where Logseq will store your thoughts, ideas, notes."
  :on-boarding/section-btn-title "Choose a folder"
  :on-boarding/section-btn-desc "Open existing directory or Create a new one"
  :on-boarding/section-title "How Logseq saves your work"
  :on-boarding/section-desc "Inside the directory you choose, Logseq will create 4 folders."
- :on-boarding/section-tip-1 "Each page is a file stored only on your "
+ :on-boarding/section-tip-1 "Each page is a file stored only on your {1}."
  :on-boarding/section-tip-2 "You may choose to sync it later."
  :on-boarding/section-assets "Graphics & Documents"
+ :on-boarding/section-computer "computer"
  :on-boarding/section-journals "Daily notes"
  :on-boarding/section-pages "PAGES"
+ :on-boarding/section-phone "phone"
  :on-boarding/section-app "APP Internal"
  :on-boarding/section-config "Config File"
  :bug-report/main-title "Bug report"
@@ -139,6 +141,7 @@
  :right-side-bar/show-journals "Show Journals"
  :right-side-bar/separator "Right sidebar resize handler"
  :right-side-bar/toggle-right-sidebar "Toggle right sidebar"
+ :left-side-bar/switch "Switch to:"
  :left-side-bar/journals "Journals"
  :left-side-bar/create "Create"
  :left-side-bar/new-page "New page"
@@ -149,7 +152,7 @@
  :page/logseq-is-having-a-problem "Logseq is having a problem. To try to get it back to a working state, please try the following safe steps in order:"
  :page/step "Step {1}"
  :page/try "Try"
- :page/presentation-mode "Presentation"
+ :page/slide-view "View as slides"
  :page/delete-confirmation "Are you sure you want to delete this page and its file?"
  :page/open-in-finder "Open in directory"
  :page/open-with-default-app "Open with default app"
@@ -416,7 +419,7 @@
  :whiteboard/circle "Circle"
  :whiteboard/triangle "Triangle"
  :whiteboard/shape "Shape"
- :whiteboard/open-page "Open page" 
+ :whiteboard/open-page "Open page"
  :whiteboard/open-page-in-sidebar "Open page in sidebar"
  :whiteboard/remove-link "Remove link"
  :whiteboard/link "Link"
@@ -446,7 +449,7 @@
  :flashcards/modal-btn-show-clozes "Show clozes"
  :flashcards/modal-btn-next-card "Next"
  :flashcards/modal-btn-reset "Reset"
- :flashcards/modal-btn-reset-tip "Reset this card so that you can review it immediately." 
+ :flashcards/modal-btn-reset-tip "Reset this card so that you can review it immediately."
  :flashcards/modal-btn-forgotten "Forgotten"
  :flashcards/modal-btn-remembered "Remembered"
  :flashcards/modal-btn-recall "Took a while to recall"

+ 0 - 1
src/resources/dicts/es.edn

@@ -53,7 +53,6 @@
  :left-side-bar/new-page "Nueva página"
  :left-side-bar/nav-favorites "Favoritos"
  :left-side-bar/nav-recent-pages "Recientes"
- :page/presentation-mode "Modo presentación"
  :page/delete-confirmation "¿Está seguro que desea eliminar esta página y su archivo?"
  :page/open-in-finder "Abrir ubicación del archivo"
  :page/open-with-default-app "Abrir con la aplicación predeterminada"

+ 1 - 2
src/resources/dicts/fr.edn

@@ -33,7 +33,6 @@
  :right-side-bar/flashcards "Cartes-mémoire"
  :right-side-bar/new-page "Nouvelle page"
  :left-side-bar/journals "Journaux"
- :page/presentation-mode "Mode présentation"
  :page/delete-confirmation "Etes-vous sûr de vouloir supprimer la page ?"
  :page/make-public "Rendre la page publique"
  :page/make-private "Rendre la page privée"
@@ -437,4 +436,4 @@
  :shortcut.category/others  "Autres"
  :shortcut.category/toggle  "Basculer"
  :command.editor/select-parent "Sélectionnez le bloc parent"
- :command.sidebar/close-top "Ferme l'élément supérieur dans la barre latérale droite"}
+ :command.sidebar/close-top "Ferme l'élément supérieur dans la barre latérale droite"}

+ 1 - 2
src/resources/dicts/it.edn

@@ -51,7 +51,6 @@
  :left-side-bar/new-page "Nuova pagina"
  :left-side-bar/nav-favorites "Preferiti"
  :left-side-bar/nav-recent-pages "Recenti"
- :page/presentation-mode "Presentazione"
  :page/delete-confirmation "Sei sicuro di voler eliminare questa pagina e i suoi dati?"
  :page/open-in-finder "Apri nella cartella"
  :page/open-with-default-app "Apri con l'app predefinita"
@@ -343,4 +342,4 @@
  :shortcut.category/others                "Altri"
  :command.editor/copy-embed               "Copia un incorporamento di blocco che punta al blocco corrente"
  :command.editor/copy-text                "Copia le selezioni come testo"
- :command.pdf/close                       "Chiudi anteprima PDF"}
+ :command.pdf/close                       "Chiudi anteprima PDF"}

+ 1 - 2
src/resources/dicts/ja.edn

@@ -49,7 +49,6 @@
  :left-side-bar/new-page "新規ページ"
  :left-side-bar/nav-favorites "お気に入り"
  :left-side-bar/nav-recent-pages "最新"
- :page/presentation-mode "プレゼンテーション"
  :page/delete-confirmation "このページとページのファイルを削除してもよいですか?"
  :page/open-in-finder "ディレクトリで開く"
  :page/open-with-default-app "デフォルトのアプリで開く"
@@ -362,4 +361,4 @@
  :command.editor/strike-through                   "打ち消し線"
  :command.misc/copy                               "コピー"
  :command.ui/goto-plugins                         "プラグインへ"
- :command.ui/select-theme-color                   "利用可能なテーマ色を選択"}
+ :command.ui/select-theme-color                   "利用可能なテーマ色を選択"}

+ 1 - 2
src/resources/dicts/ko.edn

@@ -51,7 +51,6 @@
  :left-side-bar/new-page "새 페이지"
  :left-side-bar/nav-favorites "즐겨찾기"
  :left-side-bar/nav-recent-pages "최근 페이지"
- :page/presentation-mode "프레젠테이션 모드"
  :page/delete-confirmation "이 페이지와 페이지의 파일들을 삭제하시겠습니까?"
  :page/open-in-finder "디렉토리에서 열기"
  :page/open-with-default-app "기본 앱으로 열기"
@@ -455,4 +454,4 @@
  :command.pdf/find                                "PDF: 현재 PDF 문서에서 검색"
  :command.sidebar/close-top                       "우축 사이드바의 최상단 항목 닫기"
  :command.ui/clear-all-notifications              "모든 알람 제거"
- :command.ui/install-plugins-from-file            "plugins.edn에서 플러그인 설치"}
+ :command.ui/install-plugins-from-file            "plugins.edn에서 플러그인 설치"}

+ 2 - 3
src/resources/dicts/nb-no.edn

@@ -53,7 +53,6 @@
  :left-side-bar/new-page "Ny side"
  :left-side-bar/nav-favorites "Favoritter"
  :left-side-bar/nav-recent-pages "Nylig"
- :page/presentation-mode "Presentasjonsmodus"
  :page/delete-confirmation "Er du sikker på at du vil slette denne siden og filen dens?"
  :page/open-in-finder "Åpne i mappe"
  :page/open-with-default-app "Åpne med forhåndsvalgt app"
@@ -504,7 +503,7 @@
  :command.whiteboard/zoom-out "Zoom ut"
  :command.whiteboard/zoom-to-fit "Zoom til tegning"
  :command.whiteboard/zoom-to-selection "Zoom for å passe seleksjonen"
- 
+
  :home "Hjem"
  :importing "Importerer"
  :port "Port"
@@ -634,4 +633,4 @@
  :window/exit-fullscreen "Gå ut av fullskjerm"
  :window/maximize "Maksimer"
  :window/minimize "Minimer"
- :window/restore "Gjenopprett"}
+ :window/restore "Gjenopprett"}

+ 1 - 2
src/resources/dicts/nl.edn

@@ -130,7 +130,6 @@
  :page/open-backup-directory "Open backups map pagina"
  :page/open-in-finder "Open in map"
  :page/open-with-default-app "Open met standaard app"
- :page/presentation-mode "Presentatiemodus"
  :page/show-journals "Toon Journaals"
  :page/unfavorite "Pagina uit favorieten verwijderen"
  :page/updated-at "Bijgewerkt op"
@@ -341,4 +340,4 @@
  :shortcut.category/block-selection      "Blokselectie (druk op Esc om selectie te beëindigen)"
  :shortcut.category/formatting           "Formatteren"
  :shortcut.category/navigating           "Navigatie"
- :shortcut.category/others               "Anderen"}
+ :shortcut.category/others               "Anderen"}

+ 1 - 2
src/resources/dicts/pl.edn

@@ -53,7 +53,6 @@
  :left-side-bar/new-page "Nowa strona"
  :left-side-bar/nav-favorites "Ulubione"
  :left-side-bar/nav-recent-pages "Ostatnio odwiedzane"
- :page/presentation-mode "Tryb prezentacji"
  :page/delete-confirmation "Czy jesteś pewien że chcesz usunąć tę stronę i jej plik?"
  :page/open-in-finder "Otwórz w przeglądarce plików"
  :page/open-with-default-app "Otwórz w domyślnej aplikacji"
@@ -343,4 +342,4 @@
  :command.ui/toggle-wide-mode                     "Włącz / wyłącz tryb szeroki"
  :command.ui/goto-plugins                         "Przejdź do dashboardu pluginów"
  :command.ui/toggle-cards                         "Pokaż / Ukryj karty"
- :command.git/commit                              "Wykonaj GIT COMMIT z wiadomością"}
+ :command.git/commit                              "Wykonaj GIT COMMIT z wiadomością"}

+ 2 - 3
src/resources/dicts/pt-br.edn

@@ -41,7 +41,6 @@
  :right-side-bar/block-ref "Referência de bloco"
  :right-side-bar/new-page "Nova página"
  :left-side-bar/journals "Diários"
- :page/presentation-mode "Modo de apresentação"
  :page/delete-confirmation "Tem certeza que quer apagar esta página e o arquivo associado?"
  :page/open-in-finder "Abrir em pasta"
  :page/open-with-default-app "Abrir com a aplicação por omissão"
@@ -451,7 +450,7 @@
  :command.pdf/find                        "PDF: Pesquisar no documento PDF atual"
  :command.sidebar/close-top               "Fechar item superior na barra lateral direita"
  :command.ui/install-plugins-from-file    "Instalar plugins de plugins.edn"
- 
+
  :home "Início"
  :toggle-theme "Trocar tema"
  :whiteboard "Quadro Branco"
@@ -650,7 +649,7 @@
  :plugins "Plugins"
  :right-side-bar/flashcards "Flashcards"
  :settings-page/enable-flashcards "Flashcards"
- :page/backlinks "Backlinks" 
+ :page/backlinks "Backlinks"
  :host "Host"
  :settings-page/tab-editor "Editor"
  :shortcut.category/plugins "Plugins"

+ 1 - 2
src/resources/dicts/pt-pt.edn

@@ -72,7 +72,6 @@
  :page/logseq-is-having-a-problem "Logseq está tendo um problema. Para tentar colocá-lo de volta em um estado de funcionamento, por favor tente os seguintes passos seguros em ordem:"
  :page/step "Passo {1}"
  :page/try "Tentar"
- :page/presentation-mode "Modo de apresentação"
  :page/delete-confirmation "Tem a certeza de que quer apagar esta página e o respetivo ficheiro?"
  :page/open-in-finder "Abrir em pasta"
  :page/open-with-default-app "Abrir com a aplicação predefinida"
@@ -455,4 +454,4 @@
  :command.graph/export-as-html            "Exportar páginas de gráficos públicos como html"
  :command.pdf/find                        "PDF: Pesquisar no documento PDF atual"
  :command.sidebar/close-top               "Fechar item superior na barra lateral direita"
- :command.ui/install-plugins-from-file    "Instalar plugins de plugins.edn"}
+ :command.ui/install-plugins-from-file    "Instalar plugins de plugins.edn"}

+ 5 - 6
src/resources/dicts/ru.edn

@@ -86,7 +86,6 @@
  :page/logseq-is-having-a-problem                      "У Logseq возникла проблема. Чтобы попытаться вернуть его в рабочее состояние, пожалуйста, попробуйте выполнить следующие безопасные шаги по порядку:"
  :page/step                                            "Шаг {1}"
  :page/try                                             "Попробовать"
- :page/presentation-mode                               "Презентация"
  :page/delete-confirmation                             "Вы уверены, что хотите удалить эту страницу и её файл(ы)?"
  :page/open-in-finder                                  "Открыть в каталоге"
  :page/open-with-default-app                           "Открыть в приложении по умолчанию"
@@ -267,7 +266,7 @@
  :sync-from-local-files                                "Обновить"
  :sync-from-local-files-detail                         "Импортировать изменения из локальных файлов"
  :sync-from-local-changes-detected                     "При обновлении будут найдены и обработаны файлы, изменённые на диске и отличающиеся от текущего содержимого страниц Logseq. Продолжить?"
- 
+
  :search/publishing                                    "Искать"
  :search                                               "Искать или создать страницу"
  :whiteboard/link-whiteboard-or-block                  "Ссылка на доску/страницу/блок"
@@ -339,7 +338,7 @@
  :whiteboard/circle                                    "Круг"
  :whiteboard/triangle                                  "Треугольник"
  :whiteboard/shape                                     "Фигура"
- :whiteboard/open-page                                 "Открыть страницу" 
+ :whiteboard/open-page                                 "Открыть страницу"
  :whiteboard/open-page-in-sidebar                      "Открыть страницу на боковой панели"
  :whiteboard/remove-link                               "Удалить ссылку"
  :whiteboard/link                                      "Ссылка"
@@ -487,9 +486,9 @@
  :file-sync/other-user-graph                           "Текущий локальный граф привязан к удаленному графу другого пользователя. Поэтому синхронизацию начать нельзя."
  :file-sync/graph-deleted                              "Текущий удаленный граф был удален"
  :file-sync/rsapi-cannot-upload-err                    "Не удалось начать синхронизацию, пожалуйста, проверьте, правильно ли установлено локальное время."
- 
+
  :notification/clear-all                               "Очистить всё"
- 
+
  :shortcut.category/basics                             "Базовые"
  :shortcut.category/formatting                         "Форматирование"
  :shortcut.category/navigating                         "Навигация"
@@ -663,4 +662,4 @@
  :command.dev/show-block-data                          "(Dev) Показать данные блока"
  :command.dev/show-block-ast                           "(Dev) Показать AST блока"
  :command.dev/show-page-data                           "(Dev) Показать данные страницы"
- :command.dev/show-page-ast                            "(Dev) Показать AST страницы"}
+ :command.dev/show-page-ast                            "(Dev) Показать AST страницы"}

+ 1 - 2
src/resources/dicts/sk.edn

@@ -68,7 +68,6 @@
  :left-side-bar/new-whiteboard                     "Nová tabuľa"
  :left-side-bar/nav-favorites                      "Obľúbené"
  :left-side-bar/nav-recent-pages                   "Posledné"
- :page/presentation-mode                           "Prezentácia"
  :page/delete-confirmation                         "Naozaj chcete odstrániť túto stránku a jej súbor?"
  :page/open-in-finder                              "Otvoriť v adresári"
  :page/open-with-default-app                       "Otvoriť pomocou predvolenej aplikácie"
@@ -443,4 +442,4 @@
  :command.ui/install-plugins-from-file                     "Inštalovať doplnky z plugins.edn"
  :command.editor/toggle-open-blocks                        "Prepnúť otvorené bloky (zbaliť alebo rozbaliť všetky bloky)"
  :command.ui/toggle-cards                                  "Zobraziť/Skryť karty"
- :command.git/commit                                       "Spusiť príkaz git commit so správou"}
+ :command.git/commit                                       "Spusiť príkaz git commit so správou"}

+ 114 - 7
src/resources/dicts/tr.edn

@@ -10,13 +10,76 @@
  :on-boarding/new-graph-desc-4 "/pages - diğer sayfalarınız saklanır"
  :on-boarding/new-graph-desc-5 "/logseq - yapılandırma, custom.css ve bazı meta veriler saklanır."
  :on-boarding/welcome-whiteboard-modal-title "Düşünceleriniz için yeni bir tuval."
- :on-boarding/welcome-whiteboard-modal-description "Beyaz tahtalar, fikir üretme ve düzenleme için harika bir araçtır. Şimdi bilgi tabanınızdaki düşüncelerinizi ya da yenilerini birbirleriyle yan yana getirerek, bağlantı kurabilir, ilişkilendirebilir ve yeni yöntemlerle anlayabilirsiniz."
+ :on-boarding/welcome-whiteboard-modal-description "Beyaz tahtalar, fikir üretmek ve düzenlemek için harika bir araçtır. Şimdi bilgi tabanınızdaki ya da yeni düşüncelerinizi birbirleriyle yan yana getirerek, bağlayabilir, ilişkilendirebilir ve yeni yöntemlerle anlayabilirsiniz."
  :on-boarding/welcome-whiteboard-modal-skip "Atla"
  :on-boarding/welcome-whiteboard-modal-start "Beyaz tahtaya başla"
  :on-boarding/tour-whiteboard-home "{1} Beyaz tahtalarınız için giriş sayfasıdır"
  :on-boarding/tour-whiteboard-home-description "Beyaz tahtalar uygulamada kendi bölümlerine sahiptir ve onları bir bakışta görebilir, kolayca yenilerini oluşturabilir veya silebilirsiniz."
  :on-boarding/tour-whiteboard-new "{1} Yeni beyaz tahta oluştur"
  :on-boarding/tour-whiteboard-new-description "Yeni bir beyaz tahta oluşturmanın birçok yolu vardır. Bunlardan biri her zaman tam burada bu panodadır."
+ :on-boarding/tour-whiteboard-btn-next "Sonraki"
+ :on-boarding/tour-whiteboard-btn-back "Önceki"
+ :on-boarding/tour-whiteboard-btn-finish "Son"
+ :on-boarding/quick-tour-btn-next "Sonraki"
+ :on-boarding/quick-tour-btn-back "Önceki"
+ :on-boarding/quick-tour-btn-finish "Son"
+ :on-boarding/quick-tour-btn-skip "Hızlı Turu Atla"
+ :on-boarding/quick-tour-steps "ADIM: "
+ :on-boarding/quick-tour-help-title "❓ Yardım"
+ :on-boarding/quick-tour-help-desc "Logseq ile ilgili yardım ve diğer bilgiler için her zaman buraya tıklayabilirsiniz."
+ :on-boarding/quick-tour-journal-page-title "📆 Günlük Sayfası"
+ :on-boarding/quick-tour-journal-page-desc-1 "Bu, bugünün günlük sayfasıdır. Buraya düşüncelerinizi, öğrendiklerinizi ve fikirlerinizi yazabilirsiniz. Organize olma konusunda endişelenmeyin."
+ :on-boarding/quick-tour-journal-page-desc-2 " Sadece düşüncelerinizi yazın ve"
+ :on-boarding/quick-tour-journal-page-desc-3 " birbirine [[bağlayın]]."
+ :on-boarding/quick-tour-left-sidebar-title "👀 Sol Kenar Çubuğu"
+ :on-boarding/quick-tour-left-sidebar-desc "Logseq uygulamasındaki önemli menü ögelerini keşfetmek için sol kenar çubuğunu açın."
+ :on-boarding/quick-tour-favorites-title "⭐️ Sık Kullanılanlar"
+ :on-boarding/quick-tour-favorites-desc-1 "En sevdiğiniz sayfaları herhangi bir sayfadaki `...` menüsü aracılığıyla sabitleyin."
+ :on-boarding/quick-tour-favorites-desc-2 "Başlamanıza yardımcı olmak için buraya bazı şablon sayfaları da ekledik. Kendi notlarınızı yazmaya başladıktan sonra bunları kaldırabilirsiniz."
+ :on-boarding/command-palette-quick-tour "Katılım için hızlı tur"
+ :on-boarding/importing-main-title "Mevcut notları içeri aktarın"
+ :on-boarding/importing-main-desc "Bunu daha sonra uygulamayı kullanırken de yapabilirsiniz."
+ :on-boarding/importing-title "Şu anda içeri aktarmak istediğiniz notlarınız var mı?"
+ :on-boarding/importing-desc "JSON, EDN veya Markdown biçimindelerse, Logseq onlarla çalışabilir."
+ :on-boarding/importing-roam-desc "Roam grafınızın JSON dosyasını içeri aktarın"
+ :on-boarding/importing-lsq-desc "Logseq grafınızın EDN veya JSON dosyasını içeri aktarın"
+ :on-boarding/importing-opml-desc " OPML dosyalarını içeri aktarın"
+ :on-boarding/main-title (fn [] [[:strong "Logseq'e"] " Hoş Geldiniz!"])
+ :on-boarding/main-desc "Öncelikle Logseq'in düşüncelerinizi, fikirlerinizi, notlarınızı saklayacağı bir klasör seçmeniz gerekir."
+ :on-boarding/section-btn-title "Bir klasör seçin"
+ :on-boarding/section-btn-desc "Mevcut dizini açın veya yeni bir dizin oluşturun"
+ :on-boarding/section-title "Logseq çalışmalarınızı nasıl kaydeder?"
+ :on-boarding/section-desc "Seçtiğiniz dizinin içinde Logseq 4 tane klasör oluşturacaktır."
+ :on-boarding/section-tip-1 "Her sayfa yalnızca {1} depolanan bir dosyadır."
+ :on-boarding/section-tip-2 "Daha sonra eşitlemeyi seçebilirsiniz."
+ :on-boarding/section-assets "Grafikler ve Belgeler"
+ :on-boarding/section-computer "bilgisayarınızda"
+ :on-boarding/section-journals "Günlük notlar"
+ :on-boarding/section-pages "Sayfalar"
+ :on-boarding/section-phone "telefonunuzda"
+ :on-boarding/section-app "Uygulama Dosyaları"
+ :on-boarding/section-config "Yapılandırma Dosyası"
+ :bug-report/main-title "Hata raporu"
+ :bug-report/main-desc "Bir hata raporu göndererek bize yardımcı olabilir misiniz? Mümkün olan en kısa sürede çözmeye çalışacağız."
+ :bug-report/section-clipboard-title "Karşılaştığınız hata bu özelliklerle mi ilgili?"
+ :bug-report/section-clipboard-desc "Bize ek bilgi vermek için bu kullanışlı araçları kullanabilirsiniz."
+ :bug-report/section-clipboard-btn-title "Pano yardımcısı"
+ :bug-report/section-clipboard-btn-desc "Pano verilerini inceleyin ve toplayın"
+ :bug-report/section-issues-title "Veya..."
+ :bug-report/section-issues-desc "Ek bilgi toplamak için kullanabileceğiniz herhangi bir araç yoksa, lütfen hatayı doğrudan bildirin."
+ :bug-report/section-issues-btn-title "Hata raporu gönderin"
+ :bug-report/section-issues-btn-desc "Logseq'i Daha İyi Hale Getirmeye Yardımcı Olun!"
+ :bug-report/inspector-page-desc-1 "Pano verilerinizi incelemek için Ctrl+V / ⌘+V tuşlarına basın"
+ :bug-report/inspector-page-desc-2 "veya mobil sürümü kullanıyorsanız yapıştırmak için buraya dokunun"
+ :bug-report/inspector-page-placeholder "Mobil cihazdaysanız yapıştırmak için buraya uzun basın"
+ :bug-report/inspector-page-tip "Ters giden birşey mi var? Sorun değil, önceki adıma geri gitmek için düğmeye basın."
+ :bug-report/inspector-page-btn-back "Geri git"
+ :bug-report/inspector-page-btn-copy "Sonucu kopyalayın"
+ :bug-report/inspector-page-copy-notif "Panoya kopyalandı!"
+ :bug-report/inspector-page-btn-create-issue "Hata raporu oluştur"
+ :bug-report/inspector-page-desc-clipboard "İşte panodan okunan veriler."
+ :bug-report/inspector-page-desc-copy "Bunu paylaşmak uygunsa, kopyala düğmesine basın."
+ :bug-report/inspector-page-desc-create-issue "Artık panonuza yapıştırılan sonucu bildirebilirsiniz. Lütfen sonucu 'Additional Context' bölümüne yapıştırın ve orijinal içeriği nereden kopyaladığınızı belirtin. Teşekkürler!"
  :help/title-usage "Kullanım"
  :help/title-community "Topluluk"
  :help/title-development "Geliştirme"
@@ -26,7 +89,7 @@
  :help/about "Logseq hakkında"
  :help/roadmap "Yol haritası"
  :help/bug "Hata raporu"
- :help/feature "Özellik talebi"
+ :help/feature "Özellik istekleri"
  :help/changelog "Değişiklik günlüğü"
  :help/blog "Logseq blogu"
  :help/docs "Belgeler"
@@ -48,6 +111,8 @@
  :search/page-names "Sayfa adlarında ara"
  :search/recent "Son arama:"
  :search/blocks-in-page "Blokları sayfada ara:"
+ :search/command-palette-tip-1 "İpucu: "
+ :search/command-palette-tip-2 " komut paletini açar"
  :search/cache-outdated "Önbellek eski. Lütfen grafın açılır menüsündeki 'Yeniden dizin oluştur' düğmesini tıklayın."
  :search-item/whiteboard "Beyaz tahta"
  :search-item/page "Sayfa"
@@ -76,6 +141,7 @@
  :right-side-bar/show-journals "Günlükleri Göster"
  :right-side-bar/separator "Sağ kenar çubuğu yeniden boyutlandırma işleyicisi"
  :right-side-bar/toggle-right-sidebar "Sağ kenar çubuğunu aç/kapat"
+ :left-side-bar/switch "Geçiş yap:"
  :left-side-bar/journals "Günlük"
  :left-side-bar/create "Oluştur"
  :left-side-bar/new-page "Yeni sayfa"
@@ -86,7 +152,6 @@
  :page/logseq-is-having-a-problem "Logseq'te bir sorun var. Tekrar çalışır duruma getirmek için lütfen aşağıdaki güvenli adımları sırayla deneyin:"
  :page/step "{1}. Adım"
  :page/try "Deneyin"
- :page/presentation-mode "Sunu"
  :page/delete-confirmation "Bu sayfayı ve dosyasını silmek istediğinizden emin misiniz?"
  :page/open-in-finder "Dizini aç"
  :page/open-with-default-app "Varsayılan uygulamayla aç"
@@ -125,7 +190,7 @@
  :file-rn/no-action "Tebrikler! Gereken başka işlem yok."
  :file-rn/confirm-proceed "Biçimi güncelle!"
  :file-rn/select-confirm-proceed "Geliştirici: biçimi yaz"
- :file-rn/unreachable-title "Uyarı! `title::` özelliği el ile ayarlanmadıkça, sayfa adı geçerli dosya adı biçiminde {1} olur."
+ :file-rn/unreachable-title "Uyarı! `title::` özelliğini kendiniz ayarlamadıkça, sayfa adı geçerli dosya adı olan {1} biçiminde olur."
  :file-rn/optional-rename "Öneri: "
  :file-rn/format-deprecated "Şu anda güncel olmayan bir biçim kullanıyorsunuz. En son biçime güncellemeniz kesinlikle önerilir. Lütfen işlemden önce verilerinizi yedekleyin ve Logseq istemcilerini diğer cihazlarda kapatın."
  :file-rn/filename-desc-1 "Bu ayar, bir sayfanın bir dosyaya nasıl saklanacağını yapılandırır. Logseq, aynı ada sahip bir dosyaya bir sayfa depolar."
@@ -182,9 +247,13 @@
  :context-menu/input-template-name "Şablonun adı nedir?"
  :context-menu/template-include-parent-block "Üst blok şablona dahil mi?"
  :context-menu/template-exists-warning "Şablon zaten var!"
- :settings-page/git-confirm "Git ayarlarını güncelledikten sonra uygulamayı yeniden başlatmanız gerekiyor."
+ :settings-page/git-tip "Logseq eşitleme özelliğini etkinleştirdiyseniz, bir sayfanın düzenleme geçmişini doğrudan görüntüleyebilirsiniz. Bu bölüm yalnızca teknoloji meraklıları içindir."
+ :settings-page/git-desc-1 "Sayfanın düzenleme geçmişini görüntülemek için sağ üst köşedeki üç yatay noktaya basın ve \"Sayfa geçmişini görüntüle\" ögesini seçin."
+ :settings-page/git-desc-2 "Profesyonel kullanıcılar için Logseq, sürüm kontrolü için "
+ :settings-page/git-desc-3 " kullanımını da destekler. Genel Git sorunları Logseq ekibi tarafından desteklenmediğinden Git'i kullanmanın riski size aittir."
  :settings-page/git-switcher-label "Otomatik git commit'i etkinleştir"
  :settings-page/git-commit-delay "Otomatik git commit saniyesi"
+ :settings-page/git-confirm "Git ayarlarını güncelledikten sonra uygulamayı yeniden başlatmanız gerekiyor."
  :settings-page/edit-config-edn "config.edn dosyasını düzenle"
  :settings-page/edit-global-config-edn "Genel config.edn dosyasını düzenle"
  :settings-page/edit-custom-css "custom.css dosyasını düzenle"
@@ -192,6 +261,9 @@
  :settings-page/edit-setting "Düzenle"
  :settings-page/custom-configuration "Özel yapılandırma"
  :settings-page/custom-global-configuration "Özel genel yapılandırma"
+ :settings-page/theme-light "açık"
+ :settings-page/theme-dark "koyu"
+ :settings-page/theme-system "sistem"
  :settings-page/custom-theme "Özel tema"
  :settings-page/export-theme "Temayı dışarı aktar"
  :settings-page/show-brackets "Köşeli ayraçları göster"
@@ -207,6 +279,7 @@
  :settings-page/auto-expand-block-refs-tip "Bu seçenek, yakınlaştırma yapıldığında blok referanslarının otomatik olarak genişletilip genişletilmeyeceğini kontrol eder."
  :settings-page/custom-date-format "Tercih edilen tarih biçimi"
  :settings-page/custom-date-format-warning "Yeniden dizin oluşturma gerekli! Mevcut günlük referansları bozulabilir!"
+ :settings-page/custom-date-format-notification "Bu değişikliğin etkili olması için grafınızın yeniden dizin olusturması gerekir"
  :settings-page/preferred-pasting-file-hint "Etkinleştirildiğinde, internetten bir resim yapıştırmak görüntüyü indirir ve ekler. Devre dışı bırakıldığında, bağlantıyı görüntüye yapıştırır."
  :settings-page/preferred-file-format "Tercih edilen dosya biçimi"
  :settings-page/preferred-workflow "Tercih edilen iş akışı"
@@ -241,6 +314,9 @@
  :settings-page/beta-features "Beta özellikleri"
  :settings-page/login-prompt "Yeni özelliklere herkesten önce erişmek için bir Open Collective Sponsoru veya Logseq'in Destekçisi olmanız ve oturum açmanız gerekir."
  :settings-page/sync "Eşitle"
+ :settings-page/sync-desc-1 "Eşitlemeyi nasıl ayarlayacağınıza ve kullanacağınıza ilişkin talimatlar için"
+ :settings-page/sync-desc-2 "buraya"
+ :settings-page/sync-desc-3 "basın."
  :settings-page/enable-whiteboards "Beyaz tahtalar"
  :settings-page/native-titlebar "Yerel başlık çubuğu"
  :settings-page/native-titlebar-desc "Windows ve Linux'ta yerel pencere başlık çubuğunu etkinleştirir."
@@ -249,6 +325,9 @@
  :settings-page/revision "Revizyon: "
  :settings-page/changelog "Yenilikler nelerdir?"
  :settings-page/app-updated "Uygulamanız güncel 🎉"
+ :settings-page/update-available "Yeni sürüm bulundu: "
+ :settings-page/update-error-1 "⚠️ Ne yazık ki bir sorun oluştu!"
+ :settings-page/update-error-2 " Lütfen bu bağlantıyı denetleyin: "
  :yes "Evet"
  
  :submit "Onayla"
@@ -327,7 +406,7 @@
  :whiteboard/text "Metin"
  :whiteboard/color "Renk"
  :whiteboard/select-custom-color "Özel renk seç"
- :whiteboard/opacity "Opaklık"
+ :whiteboard/opacity "Saydamlık"
  :whiteboard/extra-small "Çok Küçük"
  :whiteboard/small "Küçük"
  :whiteboard/medium "Orta"
@@ -339,7 +418,7 @@
  :whiteboard/circle "Daire"
  :whiteboard/triangle "Üçgen"
  :whiteboard/shape "Şekil"
- :whiteboard/open-page "Sayfayı aç" 
+ :whiteboard/open-page "Sayfayı aç"
  :whiteboard/open-page-in-sidebar "Sayfayı kenar çubuğunda aç"
  :whiteboard/remove-link "Bağlantıyı kaldır"
  :whiteboard/link "Bağlantı"
@@ -354,6 +433,33 @@
  :whiteboard/search-only-pages "Yalnızca sayfaları ara"
  :whiteboard/cache-outdated "Önbellek eski. Lütfen grafın açılır menüsündeki 'Yeniden dizin oluştur' düğmesini tıklayın."
  :whiteboard/shape-quick-links "Hızlı Bağlantıları Şekillendir"
+ :whiteboard/dashboard-card-new-whiteboard "Yeni beyaz tahta"
+ :whiteboard/dashboard-card-created "Oluşturuldu: "
+ :whiteboard/dashboard-card-edited "Düzenlendi: "
+ :whiteboard/toggle-grid "Kılavuzu aç/kapat"
+ :whiteboard/snap-to-grid "Kılavuzlara daya"
+ :flashcards/modal-welcome-title "Bir kart oluşturma zamanı!"
+ :flashcards/modal-welcome-desc-1 "Herhangi bir bloğu karta dönüştürmek için \"#card\" etiketini ekleyebilir veya cümle tamamlama eklemek için \"/cloze\" komutunu kullanabilirsiniz."
+ :flashcards/modal-welcome-desc-2 "Belgeleri kontrol etmek için "
+ :flashcards/modal-welcome-desc-3 "bu bağlantıya"
+ :flashcards/modal-welcome-desc-4 " basabilirsiniz."
+ :flashcards/modal-btn-show-answers "Yanıtları göster"
+ :flashcards/modal-btn-hide-answers "Yanıtları gizle"
+ :flashcards/modal-btn-show-clozes "Cümle tamamlamayı göster"
+ :flashcards/modal-btn-next-card "Sonraki"
+ :flashcards/modal-btn-reset "Sıfırla"
+ :flashcards/modal-btn-reset-tip "Hemen inceleyebilmek için bu kartı sıfırlayın."
+ :flashcards/modal-btn-forgotten "Unuttum"
+ :flashcards/modal-btn-remembered "Hatırladım"
+ :flashcards/modal-btn-recall "Hatırlamam biraz zaman aldı"
+ :flashcards/modal-finished "Tebrikler, bu sorgu için tüm kartları incelediniz, bir dahaki sefere görüşmek üzere! 💯"
+ :flashcards/modal-select-all "Tümü"
+ :flashcards/modal-select-switch "Geçiş yap"
+ :flashcards/modal-current-total "Mevcut/Toplam"
+ :flashcards/modal-overdue-total "Gecikmiş/Toplam"
+ :flashcards/modal-toggle-preview-mode "Önizleme modunu aç/kapat"
+ :flashcards/modal-toggle-random-mode "Rastgele modunu aç/kapat"
+
  :page-search "Geçerli sayfada ara"
  :graph-search "Grafta ara"
  :home "Başlangıç"
@@ -459,6 +565,7 @@
  :plugin/remote-error "Uzak hata: "
  :plugin/checking-for-updates "Eklenti güncellemeleri kontrol ediliyor ..."
  :plugin/list-of-updates "Eklenti güncellemeleri: "
+ :plugin/auto-check-for-updates "Güncellemeleri otomatik kontrol et"
  :plugin.install-from-file/menu-title "plugins.edn dosyasından yükle"
  :plugin.install-from-file/title "Eklentileri plugins.edn dosyasından yükle"
  :plugin.install-from-file/notice "Aşağıdaki eklentiler yüklü olan eklentilerinizin yerini alacak:"

+ 1 - 2
src/resources/dicts/uk.edn

@@ -77,7 +77,6 @@
  :page/logseq-is-having-a-problem "У Logseq виникла проблема. Щоб спробувати повернути його до робочого стану, виконайте такі безпечні кроки по порядку:"
  :page/step "Крок {1}"
  :page/try "Спробувати"
- :page/presentation-mode "Презентація"
  :page/delete-confirmation "Ви впевнені, що хочете видалити цю сторінку та її файл?"
  :page/open-in-finder "Відкрити у директорії"
  :page/open-with-default-app "Відкрити за допомогою програми за умовчанням"
@@ -520,4 +519,4 @@
  :command.dev/show-block-ast                               "(Dev) Показати блок AST"
  :command.dev/show-block-data                              "(Dev) Показати дані блоку"
  :command.dev/show-page-ast                                "(Dev) Показати сторінку AST"
- :command.dev/show-page-data                               "(Dev) Показати дані сторінки"}
+ :command.dev/show-page-data                               "(Dev) Показати дані сторінки"}

+ 15 - 2
src/resources/dicts/zh-cn.edn

@@ -75,13 +75,13 @@
  :right-side-bar/new-page "新页面"
  :right-side-bar/separator "调整右侧边栏大小"
  :right-side-bar/whiteboards "白板"
+ :left-side-bar/switch "切换为:"
  :left-side-bar/journals "日志"
  :left-side-bar/new-page "新页面"
  :left-side-bar/nav-favorites "收藏页面"
  :left-side-bar/nav-recent-pages "最近使用"
  :left-side-bar/new-whiteboard "新建白板"
  :left-side-bar/create "新建"
- :page/presentation-mode "打开幻灯片"
  :page/delete-confirmation "您确定要删除此页面和文件吗?"
  :page/open-in-finder "打开文件对应目录"
  :page/open-with-default-app "用默认应用打开文件"
@@ -129,8 +129,15 @@
  :page/backlinks "双向链接"
  :file/format-not-supported "格式 .{1} 目前不支持。"
  :editor/block-search "搜索块"
+ :editor/delete-selection "删除选定块"
  :editor/copy "复制"
  :editor/cut "剪切"
+ :editor/expand-block-children "展开所有子块"
+ :editor/collapse-block-children "折叠所有子块"
+ :editor/cycle-todo "切换当前事项的待办状态"
+ :content/copy-export-as "复制/导出为..."
+ :context-menu/toggle-number-list "切换编号列表"
+ :context-menu/make-a-template "创建为模板"
  :content/copy-block-ref "复制块引用"
  :content/open-in-sidebar "在侧边栏打开"
  :content/click-to-edit "点击以编辑"
@@ -167,6 +174,11 @@
  :settings-page/developer-mode "开发者模式"
  :settings-page/developer-mode-desc "开发者模式帮助贡献者和扩展开发者更有效地测试他们与 Logseq 的集成。"
  :settings-page/current-version "当前版本"
+ :settings-page/changelog "更新内容"
+ :settings-page/theme-light "浅色模式"
+ :settings-page/theme-dark "深色模式"
+ :settings-page/theme-system "跟随系统"
+ :settings-page/show-full-blocks "显示块引用的所有行"
  :settings-page/tab-general "常规"
  :settings-page/tab-editor "编辑器"
  :settings-page/tab-assets "附件设置"
@@ -231,6 +243,7 @@
  :type "类型"
  :host "主机"
  :port "端口"
+ :loading "加载中..."
  :parsing-files "正在解析文件"
  :loading-files "正在加载文件"
  :login "登录"
@@ -448,4 +461,4 @@
  :command.editor/backward-kill-word       "向前删除一个单词"
  :command.editor/open-edit                "编辑选中块"
  :command.editor/delete-selection         "删除选中块"
- :command.editor/toggle-open-blocks       "切换折叠/展开所有块(非编辑状态)"}
+ :command.editor/toggle-open-blocks       "切换折叠/展开所有块(非编辑状态)"}

+ 1 - 2
src/resources/dicts/zh-hant.edn

@@ -74,7 +74,6 @@
  :page/logseq-is-having-a-problem "Logseq 出了些問題。請按照以下安全步驟將其恢復到正常狀態:"
  :page/step "步驟 {1}"
  :page/try "嘗試"
- :page/presentation-mode "簡報模式"
  :page/delete-confirmation "你確定想刪除此頁面檔案嗎?"
  :page/open-in-finder "開啟資料夾"
  :page/open-with-default-app "使用預設應用程式開啟"
@@ -345,4 +344,4 @@
  :command.ui/toggle-document-mode        "切換文檔模式"
  :command.ui/toggle-theme                "“在暗色/亮色主題之間切換”"
  :command.ui/toggle-right-sidebar        "啟用/關閉右側欄"
- :command.go/journals                    "跳轉到日記"}
+ :command.go/journals                    "跳轉到日記"}

+ 5 - 4
tldraw/packages/core/src/lib/tools/TLBoxTool/states/CreatingState.tsx

@@ -69,17 +69,18 @@ export class CreatingState<
     if (!this.creatingShape) throw Error('Expected a creating shape.')
     const { initialBounds } = this
     const { currentPoint, originPoint, shiftKey } = this.app.inputs
+    const isAspectRatioLocked = shiftKey ||
+      this.creatingShape.props.isAspectRatioLocked ||
+      !this.creatingShape.canChangeAspectRatio
     let bounds = BoundsUtils.getTransformedBoundingBox(
       initialBounds,
       TLResizeCorner.BottomRight,
       Vec.sub(currentPoint, originPoint),
       0,
-      shiftKey ||
-        this.creatingShape.props.isAspectRatioLocked ||
-        !this.creatingShape.canChangeAspectRatio
+      isAspectRatioLocked
     )
 
-    if (this.app.settings.snapToGrid) {
+    if (this.app.settings.snapToGrid && !isAspectRatioLocked) {
       bounds = BoundsUtils.snapBoundsToGrid(bounds, GRID_SIZE)
     }
 

+ 1 - 1
tldraw/packages/core/src/lib/tools/TLSelectTool/states/ResizingState.ts

@@ -218,7 +218,7 @@ export class ResizingState<
       //   relativeBounds = BoundsUtils.centerBounds(relativeBounds, center)
       // }
 
-      if (this.app.settings.snapToGrid) {
+      if (this.app.settings.snapToGrid && !isAspectRatioLocked) {
         relativeBounds = BoundsUtils.snapBoundsToGrid(relativeBounds, GRID_SIZE)
       }