Merge branch 'master' into feat/worker-sync

This commit is contained in:
Tienson Qin
2026-01-30 17:37:29 +08:00
18 changed files with 752 additions and 79 deletions

3
.gitattributes vendored Normal file
View File

@@ -0,0 +1,3 @@
* text=auto eol=lf
*.bat text eol=crlf

View File

@@ -1,15 +1,15 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
'use strict'
module.exports = {
singleQuote: true,
trailingComma: 'es5',
semi: false,
}
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
'use strict'
module.exports = {
singleQuote: true,
trailingComma: 'es5',
semi: false,
}

View File

@@ -50,16 +50,15 @@
(deftest block-properties-test
(testing "block properties related apis"
(page/new-page "test-block-properties-apis")
(let [ret (ls-api-call! :editor.appendBlockInPage "test-block-properties-apis" "block-in-page-0" {:properties {:p1 1}})
(let [ret (ls-api-call! :editor.appendBlockInPage "test-block-properties-apis" "block-in-page-0" {:properties {:new-p1 1}})
uuid' (assert-api-ls-block! ret)
prop1 (ls-api-call! :editor.getBlockProperty uuid' "p1")
props1 (ls-api-call! :editor.getBlockProperties uuid' "p1")
prop1 (ls-api-call! :editor.getBlockProperty uuid' "new-p1")
props1 (ls-api-call! :editor.getBlockProperties uuid' "new-p1")
props2 (ls-api-call! :editor.getPageProperties "test-block-properties-apis")]
(w/wait-for ".property-k:text('p1')")
;; FIXME: Assertions below fail
;; (is (= 1 (get prop1 "value")))
;; (is (= (get prop1 "ident") ":plugin.property._test_plugin/p1"))
;; (is (= 1 (get props1 ":plugin.property._test_plugin/p1")))
(w/wait-for ".property-k:text('new-p1')")
(is (= 1 (get prop1 "value")))
(is (= (get prop1 "ident") ":plugin.property._test_plugin/new-p1"))
(is (= 1 (get props1 ":plugin.property._test_plugin/new-p1")))
(is (= ["Page"] (get props2 ":block/tags")))
(ls-api-call! :editor.upsertBlockProperty uuid' "p2" "p2")
(ls-api-call! :editor.upsertBlockProperty uuid' "p3" true)

View File

@@ -606,6 +606,7 @@
(def get-all-properties db-db/get-all-properties)
(def get-class-extends db-class/get-class-extends)
(def get-classes-parents db-db/get-classes-parents)
(def get-page-parents db-db/get-page-parents)
(def get-title-with-parents db-db/get-title-with-parents)
(def class-instance? db-db/class-instance?)
(def inline-tag? db-db/inline-tag?)

View File

@@ -226,6 +226,7 @@
(subs (str k) 1)
k)
k (-> (string/lower-case k)
(string/replace "/" "-")
(string/replace " " "-")
(string/replace "_" "-"))]
(if (gp-property/valid-property-name? (str ":" k))
@@ -644,7 +645,7 @@
properties))
(defn- construct-block
[block properties* timestamps body encoded-content format pos-meta {:keys [block-pattern db date-formatter remove-properties? db-graph-mode? export-to-db-graph?]}]
[block properties* timestamps body encoded-content format pos-meta {:keys [block-pattern db date-formatter remove-properties? remove-logbook? remove-deadline-scheduled? db-graph-mode? export-to-db-graph?]}]
(let [id (get-custom-id-or-new-id properties*)
block-tags (and export-to-db-graph? (get-in properties* [:properties :tags]))
;; For export, remove tags from properties as they are being converted to classes
@@ -686,7 +687,11 @@
block)
title (cond->> (get-block-content encoded-content block format pos-meta block-pattern)
remove-properties?
(gp-property/remove-properties (get block :format :markdown)))
(gp-property/remove-properties (get block :format :markdown))
remove-logbook?
(gp-property/remove-logbook)
remove-deadline-scheduled?
(gp-property/remove-deadline-scheduled))
block (assoc block :block/title title)
block (if (seq timestamps)
(merge block (timestamps->scheduled-and-deadline timestamps))
@@ -756,28 +761,23 @@
block-idx 0
timestamps {}
properties {}
body []]
body []
prev-block-num 0]
(if (seq ast-blocks)
(let [[ast-block pos-meta] (first ast-blocks)]
(cond
(paragraph-timestamp-block? ast-block)
(let [timestamps (extract-timestamps ast-block)
timestamps' (merge timestamps timestamps)]
(recur headings (rest ast-blocks) (inc block-idx) timestamps' properties body))
(let [ts (extract-timestamps ast-block)
timestamps' (merge timestamps ts)]
(recur headings (rest ast-blocks) (inc block-idx) timestamps' properties body (inc prev-block-num)))
(gp-property/properties-ast? ast-block)
(let [properties (extract-properties (second ast-block) (assoc user-config :format format))]
(recur headings (rest ast-blocks) (inc block-idx) timestamps properties body))
(recur headings (rest ast-blocks) (inc block-idx) timestamps properties body (inc prev-block-num)))
(heading-block? ast-block)
;; for db-graphs cut multi-line when there is property, deadline/scheduled or logbook text in :block/title
(let [cut-multiline? (and export-to-db-graph?
(when-let [prev-block (first (get all-blocks (dec block-idx)))]
(or (and (gp-property/properties-ast? prev-block)
(not= "Custom" (ffirst (get all-blocks (- block-idx 2)))))
(= ["Drawer" "logbook"] (take 2 prev-block))
(and (= "Paragraph" (first prev-block))
(seq (set/intersection (set (flatten prev-block)) #{"Deadline" "Scheduled"}))))))
(let [cut-multiline? (and export-to-db-graph? (= prev-block-num 0))
prev-blocks (map first (subvec all-blocks (max 0 (- block-idx prev-block-num)) block-idx))
pos-meta' (if cut-multiline?
pos-meta
;; fix start_pos
@@ -785,12 +785,14 @@
(if (seq headings)
(get-in (last headings) [:meta :start_pos])
nil)))
;; Remove properties text from custom queries in db graphs
;; Remove properties, deadline/scheduled and logbook text from title in db graphs
options' (assoc options
:remove-properties?
(and export-to-db-graph?
(and (gp-property/properties-ast? (first (get all-blocks (dec block-idx))))
(= "Custom" (ffirst (get all-blocks (- block-idx 2)))))))
(and export-to-db-graph? (some gp-property/properties-ast? prev-blocks))
:remove-logbook?
(and export-to-db-graph? (some #(= ["Drawer" "logbook"] (take 2 %)) prev-blocks))
:remove-deadline-scheduled?
(and export-to-db-graph? (some #(seq (set/intersection (set (flatten %)) #{"Deadline" "Scheduled"})) prev-blocks)))
block' (construct-block ast-block properties timestamps body encoded-content format pos-meta' options')
block'' (cond
db-graph-mode?
@@ -799,11 +801,10 @@
(assoc block' :block.temp/ast-blocks (cons ast-block body))
:else
(assoc block' :macros (extract-macros-from-ast (cons ast-block body))))]
(recur (conj headings block'') (rest ast-blocks) (inc block-idx) {} {} []))
(recur (conj headings block'') (rest ast-blocks) (inc block-idx) {} {} [] 0))
:else
(recur headings (rest ast-blocks) (inc block-idx) timestamps properties (conj body ast-block))))
(recur headings (rest ast-blocks) (inc block-idx) timestamps properties (conj body ast-block) (inc prev-block-num))))
[(-> (reverse headings)
sanity-blocks-data)
body

View File

@@ -133,9 +133,12 @@
db
(ns-util/get-last-part full-name))
(map #(d/entity db %))
(some #(let [parents (->> (ldb/get-class-extends %)
(remove (fn [e] (= :logseq.class/Root (:db/ident e))))
vec)]
(some #(let [parent (->> (ldb/get-class-extends %)
(remove (fn [e] (= :logseq.class/Root (:db/ident e))))
first)
parent-ancestors (when parent (ldb/get-page-parents parent))
parents (cond-> (or parent-ancestors [])
parent (conj parent))]
(when (= full-name (string/join ns-util/namespace-char (map :block/name (conj parents %))))
(:block/uuid %)))))
(first
@@ -563,6 +566,12 @@
(translate-linked-ref-filters prop-value page-names-to-uuids)
:ls-type
[[:logseq.property/ls-type (keyword prop-value)]]
:hl-color
(let [color-text-idents
(->> (get-in db-property/built-in-properties [:logseq.property.pdf/hl-color :closed-values])
(map (juxt :value :db-ident))
(into {}))]
[[:logseq.property.pdf/hl-color (get color-text-idents prop-value)]])
;; else
[[(built-in-property-file-to-db-idents prop) prop-value]]))))
(into {}))]
@@ -1220,9 +1229,10 @@
(defn- build-pdf-annotations-tx
"Builds tx for pdf annotations when a pdf has an annotations EDN file under assets/"
[parent-asset-path assets parent-asset pdf-annotation-pages opts]
(let [asset-edn-path (node-path/join common-config/local-assets-dir
(safe-sanitize-file-name
(node-path/basename (string/replace-first parent-asset-path #"(?i)\.pdf$" ".edn"))))
(let [asset-edn-path (path/path-normalize
(node-path/join common-config/local-assets-dir
(safe-sanitize-file-name
(node-path/basename (string/replace-first parent-asset-path #"(?i)\.pdf$" ".edn")))))
asset-md-name (str "hls__" (safe-sanitize-file-name
(node-path/basename (string/replace-first parent-asset-path #"(?i)\.pdf$" ".md"))))]
(when-let [asset-edn-map (get @assets asset-edn-path)]
@@ -2159,8 +2169,10 @@
(-> (select-keys options [:notify-user :default-config :<save-config-file])
(set/rename-keys {:<save-config-file :<save-file})))]
(let [files (common-config/remove-hidden-files *files config rpath-key)
logseq-file? #(string/starts-with? (get % rpath-key) "logseq/")
asset-file? #(string/starts-with? (get % rpath-key) "assets/")
normalized-rpath (fn [f]
(some-> (get f rpath-key) path/path-normalize))
logseq-file? #(string/starts-with? (normalized-rpath %) "logseq/")
asset-file? #(string/starts-with? (normalized-rpath %) "assets/")
doc-files (->> files
(remove #(or (logseq-file? %) (asset-file? %)))
(filter #(contains? #{"md" "org" "markdown" "edn"} (path/file-ext (:path %)))))

View File

@@ -175,4 +175,47 @@
(string/join "\n" lines))
:else
content))
content))
(defn remove-logbook
[content]
(when (string? content)
(let [lines (string/split-lines content)
[result _in-logbook?]
(reduce (fn [[acc in-logbook?] line]
(let [trimmed (string/trim line)
upper (string/upper-case trimmed)]
(cond
(string/starts-with? upper ":LOGBOOK:")
[acc true]
(and in-logbook? (string/starts-with? upper ":END:"))
[acc false]
in-logbook?
[acc true]
:else
[(conj acc line) in-logbook?])))
[[] false]
lines)]
(string/join "\n" result))))
(defn remove-deadline-scheduled
[content]
(when (string? content)
(let [lines (string/split-lines content)]
(if (= 1 (count lines))
content
(let [first-line (first lines)
rest-lines (rest lines)
rest-lines (keep (fn [line]
(let [upper (string/upper-case (string/triml line))]
(if (or (string/starts-with? upper "DEADLINE: ")
(string/starts-with? upper "SCHEDULED: "))
(let [cleaned (-> line (string/replace #"(?i)(?:^|\s)(DEADLINE|SCHEDULED):\s+<[^>]*>" "") string/trim)]
(when-not (string/blank? cleaned)
cleaned))
line)))
rest-lines)]
(string/join "\n" (cons first-line rest-lines)))))))

View File

@@ -210,17 +210,17 @@
;; Counts
;; Includes journals as property values e.g. :logseq.property/deadline
(is (= 31 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Journal]] @conn))))
(is (= 32 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Journal]] @conn))))
(is (= 5 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Asset]] @conn))))
(is (= 4 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Task]] @conn))))
(is (= 5 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Task]] @conn))))
(is (= 4 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Query]] @conn))))
(is (= 2 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Card]] @conn))))
(is (= 5 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Quote-block]] @conn))))
(is (= 2 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Pdf-annotation]] @conn))))
;; Properties and tags aren't included in this count as they aren't a Page
(is (= 10
(is (= 11
(->> (d/q '[:find [?b ...]
:where
[?b :block/title]
@@ -231,7 +231,7 @@
#_(map #(select-keys % [:block/title :block/tags]))
count))
"Correct number of pages with block content")
(is (= 14 (->> @conn
(is (= 15 (->> @conn
(d/q '[:find [?ident ...]
:where [?b :block/tags :logseq.class/Tag] [?b :db/ident ?ident] (not [?b :logseq.property/built-in?])])
count))
@@ -589,8 +589,36 @@
(testing "multiline blocks"
(is (= "|markdown| table|\n|some|thing|" (:block/title (db-test/find-block-by-content @conn #"markdown.*table"))))
(is (= "multiline block\na 2nd\nand a 3rd" (:block/title (db-test/find-block-by-content @conn #"multiline block"))))
(is (= "logbook block" (:block/title (db-test/find-block-by-content @conn #"logbook block")))))
(is (= "normal multiline block\na 2nd\nand a 3rd" (:block/title (db-test/find-block-by-content @conn #"normal multiline block"))))
(is (= "colored multiline block\nlast line" (:block/title (db-test/find-block-by-content @conn #"colored multiline block"))))
(let [block (db-test/find-block-by-content @conn #"multiline block with prop and deadline")]
(is (= "multiline block with prop and deadline\nlast line" (:block/title block)))
(is (= 20221126
(-> (db-test/readable-properties block)
:logseq.property/deadline
date-time-util/ms->journal-day))
"multiline block has correct journal as property value")
(is (= "red"
(-> (db-test/readable-properties block)
:logseq.property/background-color))
"multiline block has correct background color as property value"))
(let [block (db-test/find-block-by-content @conn #"multiline block with deadline and scheduled in 1 line and sth else")]
(is (= "multiline block with deadline and scheduled in 1 line and sth else\nsomething else\nlast line" (:block/title block)))
(is (= 20221126
(-> (db-test/readable-properties block)
:logseq.property/deadline
date-time-util/ms->journal-day))
"multiline block with deadline and scheduled has correct deadline journal as property value")
(is (= 20221126
(-> (db-test/readable-properties block)
:logseq.property/scheduled
date-time-util/ms->journal-day))
"multiline block with deadline and scheduled has correct scheduled journal as property value"))
(is (= "logbook block" (:block/title (db-test/find-block-by-content @conn #"^logbook block"))))
(is (= "multiline logbook block\nlast line" (:block/title (db-test/find-block-by-content @conn #"multiline logbook block")))))
(testing ":block/refs"
(let [page (db-test/find-page-by-title @conn "chat-gpt")]
@@ -623,7 +651,7 @@
count))
"Correct number of user classes")
(is (= 4 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Task]] @conn))))
(is (= 5 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Task]] @conn))))
(is (= 4 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Query]] @conn))))
(is (= 2 (count (d/q '[:find ?b :where [?b :block/tags :logseq.class/Card]] @conn))))

View File

@@ -5,9 +5,25 @@
|some|thing|
- block with props
prop-num:: 10
- multiline block
- normal multiline block
a 2nd
and a 3rd
- colored multiline block
background-color:: red
last line
- multiline block with prop and deadline
background-color:: red
DEADLINE: <2022-11-26 Sat>
last line
- multiline block with deadline and scheduled in 1 line and sth else
DEADLINE: <2022-11-26 Sat> SCHEDULED: <2022-11-26 Sat> something else
last line
- DONE multiline logbook block
:LOGBOOK:
CLOCK: [2024-08-07 Wed 11:47:50]
CLOCK: [2024-08-07 Wed 11:47:53]
:END:
last line
- DOING logbook block
:LOGBOOK:
CLOCK: [2024-08-07 Wed 11:47:50]
@@ -56,4 +72,4 @@
#+BEGIN_EXAMPLE
{{query (and [[tag2]] (not [[tag1]]))}}
#+END_EXAMPLE
#+END_EXAMPLE

View File

@@ -1,4 +1,5 @@
tags:: #diary
- This journal has a tag to test journals with tags
- Block tags #p1
tags:: ai, #block-tag
tags:: ai, #block-tag
- block w/ longer ns tag #n1/n2/n3

View File

@@ -0,0 +1 @@
- 2nd instance of block w/ longer ns tag #n1/n2/n3

View File

@@ -0,0 +1,6 @@
- This is a highlights page that doesn't start with 'hls__' and isn't linked to a specific asset file
- blarg blarg
ls-type:: annotation
hl-page:: 110
hl-color:: purple
id:: 654bafc6-f7e8-4633-b6a6-810dc41cc559

View File

@@ -259,16 +259,17 @@
(or (get name->uuid name)
(get name->uuid (common-util/page-name-sanity-lc name))))
(defn entity->link-node
[entity ctx]
(defn- entity->link-node
[entity ctx prop-key]
(let [title (publish-model/entity->title entity)
uuid (:block/uuid entity)
graph-uuid (:graph-uuid ctx)]
(cond
(and uuid graph-uuid (publish-model/page-entity? entity))
[[:a.page-ref {:href (str "/page/" graph-uuid "/" uuid)} title]]
[[:a.page-ref {:href (str "/page/" graph-uuid "/" uuid)}
(str (when (= prop-key :block/tags) "#") title)]]
(common-util/url? title)
[:a {:href title} title]
[[:a {:href title} title]]
:else
[title])))
@@ -313,7 +314,7 @@
(and ref-type? (get entities value))
(let [entity (get entities value)]
(with-icon (:logseq.property/icon entity)
(entity->link-node entity ctx)))
(entity->link-node entity ctx prop-key)))
:else
[(str value)])

View File

@@ -26,11 +26,10 @@
[frontend.util :as util]
[frontend.util.page :as page-util]
[frontend.util.text :as text-util]
[frontend.util.ref :as ref]
[goog.functions :as gfun]
[goog.object :as gobj]
[goog.userAgent]
[logseq.common.util :as common-util]
[logseq.common.util.block-ref :as block-ref]
[logseq.db :as ldb]
[logseq.shui.hooks :as hooks]
[logseq.shui.ui :as shui]
@@ -427,7 +426,7 @@
(defn- copy-block-ref [state]
(when-let [block-uuid (some-> state state->highlighted-item :source-block :block/uuid)]
(editor-handler/copy-block-ref! block-uuid block-ref/->block-ref)
(editor-handler/copy-block-ref! block-uuid ref/->block-ref)
(shui/dialog-close! :ls-dialog-cmdk)))
(defmulti handle-action (fn [action _state _event] action))
@@ -916,7 +915,7 @@
(for [key shortcut]
[:div.ui__button-shortcut-key
(case key
"cmd" [:div (if goog.userAgent/MAC "⌘" "Ctrl")]
"cmd" [:div (if util/mac? "⌘" "Ctrl")]
"shift" [:div "⇧"]
"return" [:div "⏎"]
"esc" [:div.tracking-tightest {:style {:transform "scaleX(0.8) scaleY(1.2) "
@@ -944,7 +943,7 @@
[:<>
(button-fn "Open" ["return"])
(button-fn "Open in sidebar" ["shift" "return"] {:open-sidebar? true})
(when (:source-block @(::highlighted-item state)) (button-fn "Copy ref" ["" "c"]))]
(when (:source-block @(::highlighted-item state)) (button-fn "Copy ref" ["cmd" "c"]))]
:search
[:<>

View File

@@ -84,7 +84,7 @@
(when (state/enable-flashcards?)
(shui/dropdown-menu-item
{:key "Make a Card"
:on-click (fsrs/batch-make-cards!)}
:on-click #(fsrs/batch-make-cards!)}
(t :context-menu/make-a-flashcard)))
(shui/dropdown-menu-item

View File

@@ -62,7 +62,8 @@
:uk (edn-resource "dicts/uk.edn")
:fa (edn-resource "dicts/fa.edn")
:id (edn-resource "dicts/id.edn")
:cs (edn-resource "dicts/cs.edn")})
:cs (edn-resource "dicts/cs.edn")
:ar (edn-resource "dicts/ar.edn")})
(def languages
"List of languages presented to user"
@@ -88,7 +89,8 @@
{:label "Slovenčina" :value :sk}
{:label "فارسی" :value :fa}
{:label "Bahasa Indonesia" :value :id}
{:label "Čeština" :value :cs}])
{:label "Čeština" :value :cs}
{:label "العربية" :value :ar}])
(assert (= (set (keys dicts)) (set (map :value languages)))
"List of user-facing languages must match list of dictionaries")

View File

@@ -257,7 +257,7 @@
(when-let [^js dt (and id (.-dataTransfer e))]
(reset! block/*dragging? true)
(pdf-assets/ensure-ref-block! (state/get-current-pdf) hl nil)
(.setData dt "text/plain" (str "((" id "))"))))]
(.setData dt "text/plain" (str "[[" id "]]"))))]
[:div.extensions__pdf-hls-text-region
{:id (str "hl_" id)
@@ -291,7 +291,7 @@
dragstart-handle! (fn [^js e]
(when-let [^js dt (and id (.-dataTransfer e))]
(.setData dt "text/plain" (str "((" id "))"))))
(.setData dt "text/plain" (str "[[" id "]]"))))
update-hl! (fn [hl] (some-> (rum/deref *ops-ref) (:upd-hl!) (apply [hl])))]
(hooks/use-effect!

560
src/resources/dicts/ar.edn Normal file
View File

@@ -0,0 +1,560 @@
{:accessibility/skip-to-main-content "تخطى إلى المحتوى الرئيسي"
:handbook/title "المساعدة"
:handbook/topics "المواضيع"
:handbook/popular-topics "المواضيع الشائعة"
:handbook/help-categories "قائمة المساعدة"
:handbook/search "البحث"
:handbook/home "الصفحة الرئيسية"
:handbook/settings "الإعدادات"
:handbook/close "إغلاق"
:on-boarding/importing-main-title "استيراد الملاحظات الحالية"
:on-boarding/importing-main-desc "يمكنك القيام بهذا لاحقاً في التطبيق."
:on-boarding/importing-title "هل لديك ملاحظات لاستيرادها؟"
:on-boarding/importing-desc "إذا كانت بتنسيق EDN أو Markdown، فإن Logseq يقبلها."
:on-boarding/importing-sqlite-desc "استيراد ملف SQLite مٌصدر من مخططك في Logseq إلى قاعدة بيانات مخطط جديدة"
:on-boarding/main-title (fn [] ["مرحباً بك في " [:strong "Logseq!"]])
:on-boarding/main-desc "أولاً، عليك اختيار مجلد حيث يخزن logseq أفكارك، ملاحظاتك، وخواطرك."
:bug-report/main-title "التبليغ عن خطأ"
:bug-report/clipboard-inspector-title "فاحص بيانات الحافظة"
:bug-report/main-desc "هل يمكنك مساعدتنا بالتبليغ عن خطأ؟ سنقوم بحله في أسرع ما نقدر عليه."
:bug-report/section-clipboard-title "هل الخطأ الذي واجهته مرتبط بهذه الميزات؟"
:bug-report/section-clipboard-desc "يمكنك استخدام هذه الأدوات المفيدة لتزويدنا بمعلومات إضافية."
:bug-report/section-clipboard-btn-title "مساعد الحافظة"
:bug-report/section-clipboard-btn-desc "فحص وجمع بيانات الحافظة"
:bug-report/section-issues-title "أو..."
:bug-report/section-issues-desc "إذا لم تتوفر لديك أدوات لجمع معلومات إضافية، فيرجى الإبلاغ عن الخطأ مباشرة."
:bug-report/section-issues-btn-title "إرسال التقرير عن الخطأ"
:bug-report/section-issues-btn-desc "ساعد في تحسين Logseq!"
:bug-report/inspector-page-desc-1 "اضغط Ctrl+V / ⌘+V لفحص بيانات حافظتك"
:bug-report/inspector-page-desc-2 "أو انقر هنا للصق إذا كنت تستخدم نسخة الهاتف"
:bug-report/inspector-page-placeholder "اضغط مطولاً هنا للصق إذا كنت تستخدم نسخة الهاتف"
:bug-report/inspector-page-tip "هل هناك خطأ؟ لا مشكلة، انقر هنا للعودة إلى الخطوة السابقة."
:bug-report/inspector-page-btn-back "عد للخلف"
:bug-report/inspector-page-btn-copy "انسخ النتيجة"
:bug-report/inspector-page-copy-notif "تم النسخ إلى الحافظة!"
:bug-report/inspector-page-btn-create-issue "إنشاء قضية"
:bug-report/inspector-page-desc-clipboard "هذه هي البيانات المقروءة من الحافظة"
:bug-report/inspector-page-desc-copy "إذا كان هذا مناسباً للمشاركة، فانقر على زر النسخ."
:bug-report/inspector-page-desc-create-issue "يمكنك الآن عن النتيجة التي تم نسخها في الحافظة. يرجى لصق النتيجة في قسم 'Additional Context' وتحديد مصدر المحتوى الأصلي. شكراً!"
:help/title-usage "الاستخدام"
:help/title-community "المجتمع"
:help/title-development "التطور"
:help/title-about "حول"
:help/title-terms "الشروط والأحكام"
:help/start "البدأ"
:help/about "حول Logseq"
:help/roadmap "جدولة"
:help/bug "تقرير عن خطأ"
:help/feature "طلب ميزة"
:help/changelog "سجل التغييرات"
:help/blog "مدونة Logesq"
:help/docs "الوثائق"
:help/privacy "سياسة الخصوصية"
:help/terms "الشروط والأحكام"
:help/forum-community "منتدى المجتمع"
:help/awesome-logseq "Logseq الرائع"
:help/shortcuts "اختصارات لوحة المفاتيح"
:help/shortcuts-triggers "المحفزات"
:help/shortcut "الاختصارات"
:help/search "البحث في الصفحات/الكتل/الأوامر"
:help/slash-autocomplete "إكمال تلقائي للشرطة المائلة"
:help/reference-autocomplete "مرجع الصفحة للإكمال التلقائي"
:help/block-reference "مرجع الكتلة"
:help/open-link-in-sidebar "افتح الرابط في النافذة الجانبية"
:search-item/page "صفحة"
:search-item/no-result "لا توجد نتيجة متطابقة"
:help/context-menu "قائمة سياق الكتلة"
:help/markdown-syntax "بناءالجملة في Markdown"
:bold "عريض"
:italics "مائل"
:highlight "نص مظلل"
:strikethrough "خط في المنتصف"
:code "كود"
:untitled "بدون عنوان"
:right-side-bar/help "مساعدة"
:right-side-bar/switch-theme "وضع السمة"
:right-side-bar/contents "المحتويات"
:right-side-bar/page-graph "مخطط الصفحة"
:right-side-bar/block-ref "مرجع الكتلة"
:right-side-bar/graph-view "عرض المخطط"
:right-side-bar/all-pages "الصفحات"
:right-side-bar/flashcards "بطاقات تعليمية"
:right-side-bar/show-journals "عرض اليوميات"
:right-side-bar/separator "معالج تغيير حجم النافذة الجانبية اليمنى"
:right-side-bar/toggle-right-sidebar "تبديل النافذة الجانبية اليمنى"
:right-side-bar/pane-close "إغلاق"
:right-side-bar/pane-close-others "إغلاق نوافذ آخرى"
:right-side-bar/pane-close-all "إغلاق الكل"
:right-side-bar/pane-collapse "طي"
:right-side-bar/pane-collapse-others "طي النوافذ الأخرى"
:right-side-bar/pane-collapse-all "طي الجميع"
:right-side-bar/pane-expand "توسيع"
:right-side-bar/pane-expand-all "توسيع الكل"
:right-side-bar/pane-open-as-page "افتح كصفحة"
:right-side-bar/pane-more "المزيد"
:left-side-bar/switch "التبديل إلى:"
:left-side-bar/journals "اليوميات"
:left-side-bar/assets "الأصول"
:left-side-bar/tasks "المهام"
:left-side-bar/nav-favorites "المفضلة"
:left-side-bar/nav-recent-pages "حديث"
:page/something-went-wrong "حدث خطأ ما"
:page/logseq-is-having-a-problem "Logseq يواجه مشكلة. لمحاولة إعادته إلى حالة العمل، يرجى اتباع الخطوات الآمنة التالية بالترتيب:"
:page/step "الخطوة {1}"
:page/try "حاول"
:page/delete-confirmation "هل أنت متأكد من رغبتك في حذف هذه الصفحة؟"
:page/db-delete-confirmation "هل أنت متأكد من رغبتك في حذف هذه الصفحة؟"
:page/make-public "اجعلها متاحة للنشر"
:page/make-private "اجعله خاصاً"
:page/delete "حذف الصفحة"
:page/add-to-favorites "أضف إلى المفضلة"
:page/unfavorite "إزالة من المفضلة"
:block/name "اسم الصفحة"
:page/copy-page-url "انسخ رابط الصفحة"
:page/convert-to-tag "التحويل إلى وسم"
:page/convert-tag-to-page "تحويل الوسم إلى صفحة"
:file/name "اسم الملف"
:file/last-modified-at "آخر تعديل في"
:file/no-data "لا توجد بيانات"
:file/format-not-supported "التنسيق .{1} ليس مدعوماً."
:page/created-at "تم إنشاؤه في"
:page/updated-at "تم التحديث في"
:page/backlinks "الروابط الخلفية"
:linked-references/filter-search "ابحث في الصفحات المرتبطة"
:linked-references/filter-heading "مرشح"
:linked-references/filter-directions "انقر للإضافة، وانقر على مفتاح shift لاستبعاده. انقر مرة أخرى لإزالته."
:linked-references/filter-includes "يتضمن: "
:linked-references/filter-excludes "المستبعد: "
:editor/block-search "ابحث عن كتلة"
:text/image "صورة"
:asset/show-in-folder "عرض الصورة في المجلد"
:asset/open-in-browser "افتح الصورة في المتصفح"
:asset/delete "احذف الصورة"
:asset/copy "انسخ الصورة"
:asset/maximize "تكبير الصورة"
:asset/ref-block "كتلة مرجع للمرفق"
:asset/confirm-delete "هل أنت متأكد من رغبتك في حذف {1}؟"
:asset/physical-delete "قم بإزالة الملف أيضاً (لا يمكن استعادته)"
:color/gray "رمادي"
:color/red "أحمر"
:color/yellow "أصفر"
:color/green "أخضر"
:color/blue "أزرق"
:color/purple "أرجواني"
:color/pink "وردي"
:editor/copy "نسخ"
:editor/cut "قص"
:editor/expand-block-children "توسيع الجميع"
:editor/collapse-block-children "طي الجميع"
:editor/delete-selection "احذف الكتل المحددة"
:editor/cycle-todo "تدوير حالة TODO"
:dev/show-page-data "(للمطورين) إظهار بيانات الصفحة"
:dev/show-block-data "(للمطورين) إظهار بيانات الكتلة"
:dev/show-block-ast "(للمطورين) إظهار شجرة البناء النحوي (AST) للكتلة"
:content/copy-export-as "نسخ / تصدير باسم"
:content/copy-block-url "نسخ رابط الكتلة"
:content/copy-block-ref "نسخ مرجع الكتلة"
:content/copy-ref "انسخ هذا المرجع"
:content/delete-ref "احذف هذا المرجع"
:content/replace-with-text "الاستبدال كنص"
:content/replace-with-embed "الاستبدال بتضمين"
:content/open-in-sidebar "افتح في النافذة الجانبية"
:content/click-to-edit "انقر للتعديل"
:context-menu/make-a-flashcard "اصنع بطاقة تعليمية"
:context-menu/toggle-number-list "إظهار/إخفاء قائمة الأرقام"
:settings-page/ai "الذكاء الاصطناعي"
:settings-page/tab-ai "الذكاء الاصطناعي"
:settings-page/enable-mcp-server "خادم برتوكول سياق النموذج (MCP)"
:settings-page/enable-mcp-server-desc "تفعيل خادم برتوكول سياق النموذج (MCP) للسماح بالاتصال مع تطبيقات الذكاء الاصطناعي. يعتمد خادم برتوكول سياق النموذج (MCP) على واجهة برمجة تطبيقات HTTP (HTTP API)"
:settings-page/edit-config-edn "تعديل ملف config.edn"
:settings-page/edit-global-config-edn "تعديل ملف التكوين العام config.edn"
:settings-page/edit-custom-css "تحرير ملف custom.css"
:settings-page/edit-export-css "تحرير ملف export.css"
:settings-page/custom-configuration "تكوين مخصص"
:settings-page/custom-global-configuration "تكوين عام مخصص"
:settings-page/theme-light "فاتح"
:settings-page/theme-dark "داكن"
:settings-page/theme-system "النظام"
:settings-page/custom-theme "تخصيص السمة"
:settings-page/export-theme "تصدير السمة"
:settings-page/show-brackets "إظهار الأقواس المربعة"
:settings-page/wide-mode "الوضع الواسع"
:settings-page/editor-font "الخط"
:settings-page/accent-color "لون التمييز"
:settings-page/accent-color-alert "اختيار لون تمييز قد يؤدي إلى إلغاء أي سمة قمت باختيارها."
:settings-page/spell-checker "المدقق الإملائي"
:settings-page/auto-updater "تحديث تلقائي"
:settings-page/disable-sentry "إرسال بيانات الاستخدام والتشخيصات إلى Logseq"
:settings-page/disable-sentry-desc "لن يقوم برنامج Logseq أبداً بجمع قاعدة بيانات المخطط المحلية الخاصة بك أو يبيع بياناتك."
:settings-page/preferred-outdenting "رفع الرتبة"
:settings-page/preferred-outdenting-tip "يظهر الجانب الأيسر إزاحة المسافة البادئة بالإعدادات الافتراضية، ويظهر الجانب الأيمن إزاحة المسافة البادئة المنطقية، رفع/وخفض الرتبة."
:settings-page/preferred-outdenting-tip-more "→ افهم أكثر"
:settings-page/show-full-blocks "عرض جميع أسطر مرجع الكتلة"
:settings-page/auto-expand-block-refs "توسيع مرجع الكتلة تلقائياً عند التكبير"
:settings-page/auto-expand-block-refs-tip "يتحكم هذا الخيار في توسيع مرجع الكتلة تلقائياً عند التكبير"
:settings-page/custom-date-format "تنسيق التاريخ المفضل"
:settings-page/preferred-pasting-file-hint "عند التفعيل، سيتم تنزيل الصورة وإدراجها عند نسخها من الإنترنت. وعند التعطيل، سيتم لصق رابط الصورة."
:settings-page/preferred-pasting-file "تفضيل لصق الملف"
:settings-page/enable-shortcut-tooltip "تفعيل تلميحات الاختصارات"
:settings-page/enable-tooltip "تلميحات الأدوات"
:settings-page/enable-journals "اليوميات"
:settings-page/enable-all-pages-public "جميع الصفحات عامة عند النشر"
:settings-page/home-default-page "تعيين الصفحة الرئيسية الافتراضية"
:settings-page/clear-cache "مسح ذاكرة التخزين المؤقت"
:settings-page/clear "مسح"
:settings-page/clear-cache-warning "سيؤدي مسح ذاكرة التخزين المؤقت إلى حذف المخططات البيانية المفتوحة. ستفقد التغييرات غير المحفوظة."
:settings-page/developer-mode "وضع المطور"
:settings-page/developer-mode-desc "يساعد وضع المطورين المساهمين ومطوري الإضافات على اختبار عمليات التكامل الخاصة بهم مع Logseq بكفاءة أكبر."
:settings-page/current-version "الإصدار الحالي"
:settings-page/tab-general "عام"
:settings-page/tab-editor "المحرر"
:settings-page/tab-keymap "مخطط المفاتيح"
:settings-page/tab-account "الحساب"
:settings-page/tab-advanced "الإعدادات المتقدمة"
:settings-page/tab-features "الخصائص"
:settings-page/tab-collaboration "التعاون"
:settings-page/tab-encryption "التشفير"
:settings-page/plugin-system "الإضافات"
:settings-page/enable-flashcards "البطائق التعليمية"
:settings-page/network-proxy "وكيل الشبكة (proxy)"
:settings-page/login-prompt "للوصول إلى الميزات الجديدة قبل الجميع، يجب أن تكون راعياً أو داعماً لـ Logseq عبر منصة Open Collective، وبالتالي يجب عليك تسجيل الدخول أولاً."
:settings-page/native-titlebar "شريط عنوان النافذة"
:settings-page/native-titlebar-desc "تفعيل شريط عنوان النافذة الخاص بالنظام على Windows و Linux."
:settings-page/check-for-updates "تحقق من وجود تحديثات"
:settings-page/checking "جار التحقق..."
:settings-page/revision "مراجعة: "
:settings-page/changelog "ما الجديد؟"
:settings-page/app-updated "التطبيق محدث 🎉"
:settings-page/update-available "تم العثور على إصدار جديد "
:settings-page/update-error-1 "⚠️ عفواً، حدث خطأ ما!"
:settings-page/update-error-2 " الرجاء التحقق من "
:settings-page/auto-chmod "تغيير صلاحيات الملفات تلقائياً"
:settings-page/auto-chmod-desc "عطل هذا الخيار للسماح للمستخدمين بالتحرير بناء على صلاحيات عضوية المجموعة."
:yes "نعم"
:cancel "إلغاء"
:close "إغلاق"
:delete "حذف"
:save "حفظ"
:type "النوع"
:host "المضيف"
:port "المنفذ"
:flashcards/modal-welcome-title "حان وقت إنشاء بطاقتك التعليمية الأولى!"
:flashcards/modal-welcome-desc-1 "يمكنك إضافة \"{1}\" إلى أي كتلة لتحويلها إلى بطاقة أو تشغيل \"/cloze\" لإضافة بعض الفراغات."
:flashcards/modal-finished "تهانينا، لقد راجعت جميع البطاقات التعليمية لهذا الاستعلام، نراك في المرة القادمة! 💯"
:flashcards/modal-btn-show-answers "عرض الإجابات"
:flashcards/modal-btn-hide-answers "إخفاء الإجابات"
:flashcards/modal-btn-show-clozes "عرض ما في الفراغات"
:home "الصفحة الرئيسية"
:new-page "صفحة جديدة: "
:new-tag "وسم جديد: "
:graph "مخطط بياني"
:graph/all-graphs "جميع المخططات البيانية"
:graph/local-graphs "المخططات البيانية المحلية:"
:graph/remote-graphs "المخططات البيانية البعيدة:"
:graph/shared-graphs "شاركها الآخرين:"
:export "تصدير"
:export-graph "تصدير المخطط البياني"
:export-page "تصدير الصفحة"
:export-markdown "تصدير كملف Markdown قياسي (بدون خصائص الكتلة)"
:export-public-pages "تصدير الصفحات العام"
:export-db-edn "تصدير ملف EDN"
:export-sqlite-db "تصدير قاعدة بيانات SQlite"
:export-zip "تصدير قاعدة بيانات SQLite و الأصول"
:export-transparent-background "خلفية شفافة"
:export-copy-to-clipboard "نسخ إلى الحافظة"
:export-copied-to-clipboard "تم النسخ إلى الحافظة!"
:export-save-to-file "حفظ في ملف"
:all-graphs "جميع المخططات البيانية"
:all-pages "الصفحات"
;; E.g. 1 Page or 2 Pages
:all-pages/table-title (fn [total] (str total (if (= total 1) " صفحة" " صفحات")))
:all-pages/failed-to-delete-pages "تعذر حذف محتوى هذه الصفحات {1}. راجع وحدة تحكم جافا سكريبت لمزيد من التفاصيل."
:all-files "جميع الملفات"
:all-journals "جميع اليوميات"
:settings "الإعدادات"
:settings-of-plugins "الإضافات"
:plugins "الإضافات"
:themes "السمات"
:appearance "المظهر"
:relaunch-confirm-to-work "يجب إعادة تشغيل التطبيق لكي يعمل. هل تريد إعادة تشغيله الآن؟"
:import-notes "استيراد الملاحظات الحالية"
:import "استيراد"
:importing "الاستيراد"
:help-shortcut-title "انقر للاطلاع على الاختصارات والنصائح الأخرى"
:loading "تحميل..."
:login "تسجيل الدخول"
:logout "تسجيل الخروج"
:download "تنزيل"
:language "اللغة"
:remove-background "إزالة الخلفية"
:remove-heading "إزالة العنوان"
:heading "العنوان {1}"
:auto-heading "عنوان تلقائي"
:toggle-theme "تبديل المظهر"
:help/shortcut-page-title "اختصارات لوحة المفاتيح"
:plugin/installed "المثبت"
:plugin/installed-plugin "الإضافات المثبتة: {1}"
:plugin/not-installed "غير المثبتة"
:plugin/installing "يتم التثبيت"
:plugin/install "تثبيت"
:plugin/reload "إعادة تحميل"
:plugin/update "تحديث"
:plugin/update-plugin "تحديث الإضافة: {1} - {2}"
:plugin/check-update "تحقق من وجود التحديثات"
:plugin/check-all-updates "تحقق من جميع التحديثات"
:plugin/found-updates "تحديثات جديدة"
:plugin/found-n-updates "تم العثور على {1} تحديثات"
:plugin/update-all-selected "تحديث جميع العناصر المحددة"
:plugin/all-updated "تم التحديث بالكامل!"
:plugin/updates-downloading "جار تنزيل التحديثات"
:plugin/refresh-lists "تحديث القوائم"
:plugin/enabled "تفعيل"
:plugin/disabled "تعطيل"
:plugin/update-available "يتوفر تحديث"
:plugin/updating "جار التحديث"
:plugin/uninstall "إلغاء التثبيت"
:plugin/marketplace "المتجر"
:plugin/downloads "التنزيلات"
:plugin/date-added "تمت إضافته حديثاً"
:plugin/supports-db "يدعم مخططات قواعد البيانات"
:plugin/popular "رائج"
:plugin/stars "النجوم"
:plugin/title "العنوان ({1})"
:plugin/all "الجميع"
:plugin/unpacked "غير مضغوطة"
:plugin/delete-alert "هل أنت متأكد من رغبتك في إلغاء تثبيت الإضافة [{1}]؟"
:plugin/open-settings "افتح الإعدادات"
:plugin/open-package "افتح الحزمة"
:plugin/report-security "الإبلاغ عن إضافة"
:plugin/load-unpacked "تحميل الإضافة غير المضغوطة"
:plugin/restart "إعادة تشغيل التطبيق"
:plugin/unpacked-tips "حدد مسار الإضافة"
:plugin/contribute "✨ برمجة وتقديم إضافة جديدة"
:plugin/up-to-date "محدث {1}"
:plugin/custom-js-alert "تم العثور على ملف custom.js، هل تسمح بتشغيله؟ (إذا كنت لا تفهم محتوى هذا الملف، نوصي بعدم السماح بالتشغيل، لما قد ينطوي عليه من مخاطر أمنية)."
:plugin/security-warning "يمكن للإضافات الوصول إلى مخططك وملفاتك المحلية، وإجراء طلبات عبر الشبكة.
كما يمكنها أن تتسبب في تلف البيانات أو فقدانها. نحن نعمل حالياً على وضع قواعد وصول مناسبة لمخططاتك.
في هذه الأثناء، تأكد من امتلاكك لنسخ احتياطية منتظمة لمخططاتك، ولا تقم بتثبيت الإضافات إلا عندما يمكنك قراءة وفهم شفرة المصدر."
:plugin/search-plugin "البحث في الإضافات"
:plugin/open-preferences "فتح التفضيلات"
:plugin/open-logseq-dir "فتح"
:plugin/remote-error "خطأ في الاتصال الخارجي: "
:plugin/checking-for-updates "جار التحقق من تحديثات الإضافات..."
:plugin/list-of-updates "تحديثات الإضافة: "
:plugin/auto-check-for-updates "التحقق التلقائي من وجود تحديثات"
:plugin/load-from-web-url "تحميل الإضافة من رابط من الإنترنت (URL)"
:plugin.install-from-file/menu-title "التثبيت من ملف plugins.edn"
:plugin.install-from-file/title "تثبيت الإضافات من ملف plugins.edn"
:plugin.install-from-file/notice "ستحل الإضافات التالية محل إضافاتك الحالية:"
:plugin.install-from-file/success "تم تثبيت جميع الإضافات!"
:pdf/copy-ref "نسخ المرجع"
:pdf/copy-text "نسخ النص"
:pdf/linked-ref "مرجع مرتبط"
:pdf/toggle-dashed "نمط التظليل المتقطع لمنطقة"
:pdf/hl-block-colored "عنوان ملون لكتلة التظليل"
:pdf/auto-open-context-menu "إظهار قائمة الخيارات تلقائياً عند التحديد"
:pdf/doc-metadata "بيانات المستند الوصفية"
:updater/new-version-install "تم تنزيل نسخة جديدة."
:updater/quit-and-install "أعد تشغيل البرنامج للتثبيت"
:tips/all-done "كل شيء جاهز!"
:select/default-prompt "اختر واحداً"
:select/default-select-multiple "اختر واحداً أو أكثر"
:select.graph/prompt "اختر مخطط"
:select.graph/empty-placeholder-description "لا توجد مخططات مطابقة. هل تريد إضافة مخطط جديد؟"
:select.graph/add-graph "نعم، أضف مخطط جديد"
:notification/clear-all "مسح الجميع"
:shortcut.category/basics "الأساسيات"
:shortcut.category/formatting "التنسيق"
:shortcut.category/navigating "التنقل"
:shortcut.category/block-editing "تحرير الكتل (عام)"
:shortcut.category/block-command-editing "تحرير أوامر الكتل"
:shortcut.category/block-selection "تحديد الكتل (اضغط Esc للخروج من التحديد)"
:shortcut.category/toggle "مفاتيح التبديل"
:shortcut.category/others "أخرى"
:shortcut.category/plugins "الإضافات"
:keymap/all "الجميع"
:keymap/disabled "المعطلة"
:keymap/unset "غير المعينة"
:keymap/custom "مخصصة"
:keymap/search "البحث"
:keymap/total "إجمالي الاختصارات"
:keymap/keystroke-filter "ترشيح ضغطات المفاتيح"
:keymap/keystroke-record-desc "اضغط على أي تسلسل من المفاتيح لترشيح الاختصارات"
:keymap/keystroke-record-setup-label "اضغط على أي تسلسل من المفاتيح لتعيين اختصار"
:keymap/restore-to-default "إستعادة الإعدادات الافتراضية"
:keymap/customize-for-label "تخصيص الاختصارات"
:keymap/conflicts-for-label "تعارضات في الاختصارات لـ"
:window/minimize "تصغير"
:window/maximize "تكبير"
:window/restore "استعادة"
:window/close "إغلاق"
:window/exit-fullscreen "الخروج من وضع ملء الشاشة"
:header/toggle-left-sidebar "إظهار/إخفاء الشريط الجانبي الأيسر"
:header/search "البحث"
:header/more "المزيد"
:header/go-back "ارجع"
:header/go-forward "امض"
;; E.g. 1 node or 2 nodes
:views.table/live-query-title (fn [total] (str "استعلام مباشر (" total ")"))
:views.table/default-title (fn [total] (str total (if (<= total 1) " عقدة" " عقد")))
;; Commands are nested for now to stay in sync with the shortcuts system.
;; Other languages should not nest keys under :commands
:command.pdf/previous-page "Pdf: الصفحة السابقة في المستند الحالي"
:command.pdf/next-page "Pdf: الصفحة التالية في المستند الحالي"
:command.pdf/close "Pdf: إغلاق المستند الحالي"
:command.pdf/find "Pdf: بحث في النصوص في المستند الحالي"
:command.auto-complete/complete "الإكمال-التلقائي: اختيار العنصر المحدد"
:command.auto-complete/prev "الإكمال-التلقائي: اختيار العنصر السابق"
:command.auto-complete/next "الإكمال-التلقائي: اختيار العنصر التالي"
:command.auto-complete/shift-complete "الإكمال-التلقائي: فتح العنصر المحدد في النافذة الجانبية"
:command.auto-complete/meta-complete "الإكمال-التلقائي: اضغط Cmd + Enter لاختيار العنصر المحدد"
:command.cards/toggle-answers "البطاقات: إظهار/إخفاء الإجابات/الفراغات"
:command.cards/again "البطاقات مجدداً"
:command.cards/hard "البطاقات: صعبة"
:command.cards/good "البطاقات: جيدة"
:command.cards/easy "البطاقات: سهلة"
:command.editor/escape-editing "الخروج من المحرر"
:command.editor/backspace "مسح/حذف للخلف (Backspace)"
:command.editor/delete "حذف / حذف للأمام"
:command.editor/new-block "إنشاء كتلة جديدة"
:command.editor/new-line "إنشاء سطر جديد في الكتلة الحالية"
:command.editor/follow-link "اتبع الرابط تحت المؤشر"
:command.editor/open-link-in-sidebar "افتح الرابط في النافذة الجانبية"
:command.editor/bold "عريض"
:command.editor/italics "مائل"
:command.editor/highlight "مظلل"
:command.editor/strike-through "خط في المنتصف"
:command.editor/clear-block "حذف محتوى الكتلة بالكامل"
:command.editor/kill-line-before "حذف السطر قبل موقع المؤشر"
:command.editor/copy-embed "نسخ رابط تضمين يشير إلى الكتلة الحالية"
:command.editor/kill-line-after "حذف السطر بعد موقع المؤشر"
:command.editor/beginning-of-block "نقل المؤشر إلى بداية الكتلة"
:command.editor/end-of-block "نقل المؤشر إلى نهاية الكتلة"
:command.editor/forward-word "نقل المؤشر كلمة للأمام"
:command.editor/backward-word "نقل المؤشر كلمة للخلف"
:command.editor/forward-kill-word "حذف كلمة للأمام"
:command.editor/backward-kill-word "حذف كلمة للخلف"
:command.editor/paste-text-in-one-block-at-point "لصق النص في كتلة واحدة عند نقطة المؤشر"
:command.editor/insert-youtube-timestamp "إدراج الطابع الزمني ليوتيوب"
:command.editor/cycle-todo "تبديل حالة قائمة المهام (TODO)"
:command.editor/up "نقل المؤشر للأعلى / تحديد للأعلى"
:command.editor/down "نقل المؤشر للأسفل / تحديد للأسفل"
:command.editor/left "نقل المؤشر لليسار / فتح الكتلة المحددة من بدايتها"
:command.editor/right "نقل المؤشر لليمين / فتح الكتلة المحددة من نهايتها"
:command.editor/select-up "تحديد المحتوى أعلاه"
:command.editor/select-down "تحديد المحتوى أدناه"
:command.editor/move-block-up "نقل الكتلة للأعلى"
:command.editor/move-block-down "نقل الكتلة للأسفل"
:command.editor/move-blocks "نقل الكتل إلى"
:command.editor/open-edit "تحرير الكتلة المحددة"
:command.editor/open-selected-blocks-in-sidebar "فتح الكتل/ة المحددة في النافذة الجانبية"
:command.editor/select-block-up "تحديد الكتلة أعلاه"
:command.editor/select-block-down "تحديد الكتلة أدناه"
:command.editor/delete-selection "حذف الكتل المحددة"
:command.editor/expand-block-children "توسيع"
:command.editor/collapse-block-children "طي"
:command.editor/toggle-block-children "تبديل التوسيع/الطي"
:command.editor/indent "رفع رتبة الكتلة"
:command.editor/outdent "خفض رتبة الكتلة"
:command.editor/copy "نسخ (ينسخ النص المحدد أو مرجع الكتلة)"
:command.editor/copy-text "نسخ المحدد كنص"
:command.editor/cut "قص"
:command.editor/undo "تراجع"
:command.editor/redo "إعادة"
:command.editor/quick-add "إضافة سريعة"
:command.editor/insert-link "رابط HTML"
:command.editor/select-all-blocks "تحديد جميع الكتل"
:command.editor/select-parent "تحديد الكتلة الأم"
:command.editor/zoom-in "التركيز على الكتلة المحررة / أو الانتقال للأمام"
:command.editor/zoom-out "الخروج من تركيز الكتلة / أو الرجوع للخلف"
:command.editor/toggle-number-list "تبديل حالة قائمة الأرقام"
:command.editor/add-property "إضافة ميزة"
:command.editor/set-tags "تعيين الوسوم للكتل/ة المحددة"
:command.editor/add-property-deadline "إضافة موعد نهائي للمهمة في الكتلة المحددة"
:command.editor/add-property-status "إضافة حالة للمهمة في الكتلة المحددة"
:command.editor/add-property-priority "إضافة أولوية للمهمة في الكتلة المحددة"
:command.editor/add-property-icon "إضافة أيقونة"
:command.editor/jump "الانتقال إلى مفتاح أو قيمة خاصية"
:command.ui/toggle-brackets "تبديل إظهار/إخفاء الأقواس"
:command.go/electron-find-in-page "البحث عن نص في الصفحة"
:command.go/electron-jump-to-the-next "الانتقال إلى النتيجة التالية في شريط البحث"
:command.go/electron-jump-to-the-previous "الانتقال إلى النتيجة السابقة في شريط البحث"
:command.go/search "البحث في الصفحات والكتل"
:command.go/search-themes "البحث عن السمات"
:command.go/search-in-page "البحث عن الكتل في الصفحة"
:command.command-palette/toggle "بحث عن الأوامر"
:command.go/journals "الذهاب إلى اليوميات"
:command.go/backward "للخلف"
:command.go/forward "للأمام"
:command.search/re-index "إعادة بناء فهرس البحث"
:command.sidebar/open-today-page "فتح صفحة اليوم في النافذة الجانبية اليمنى"
:command.sidebar/close-top "إغلاق العنصر الأعلى في النافذة الجانبية اليمنى"
:command.sidebar/clear "مسح كافة العناصر في النافذة الجانبية اليمنى"
:command.misc/copy "نسخ"
:command.publish/open-dialog "فتح نافذة النشر للصفحة الحالية"
:command.graph/export-as-html "تصدير صفحات المخطط العامة بصيغة HTML"
:command.graph/open "اختر مخطط لفتحه"
:command.graph/remove "إزالة مخطط"
:command.graph/add "إضافة مخطط"
:command.graph/db-add "إضافة مخطط قاعدة بيانات"
:command.graph/db-save "حفظ قاعدة البيانات الحلية على القرص (~/logseq/graphs/your-current-graph)"
:command.command/run "تشغيل أمر git"
:command.go/home "الانتقال إلى الصفحة الرئيسية"
:command.go/all-graphs "الانتقال إلى كافة المخططات"
:command.go/all-pages "الانتقال إلى كافة الصفحات"
:command.go/graph-view "الانتقال إلى عرض المخطط"
:command.go/keyboard-shortcuts "الانتقال إلى اختصارات لوحة المفاتيح"
:command.go/tomorrow "الانتقال إلى تاريخ الغد"
:command.go/next-journal "الانتقال إلى اليومية التالية"
:command.go/prev-journal "الانتقال إلى اليومية السابقة"
:command.go/flashcards "تبديل عرض البطاقات التعليمية"
:command.ui/toggle-document-mode "تبديل وضع المستند"
:command.ui/toggle-settings "تبديل إظهار الإعدادات"
:command.ui/toggle-right-sidebar "إظهار/إخفاء النافذة الجانبية اليمنى"
:command.ui/toggle-left-sidebar "إظهار/إخفاء النافذة الجانبية اليسرى"
:command.ui/toggle-help "تبديل (مساعدة)"
:command.ui/toggle-theme "التبديل في المظهر فاتح/داكن"
:command.ui/toggle-contents "تبديل عرض المحتويات في النافذة الجانبية"
:command.ui/customize-appearance "تخصيص المظهر"
;; :ui/open-new-window "Open another window"
:command.command/toggle-favorite "إضافة إلى/إزالة من المفضلة"
:command.editor/copy-page-url "نسخ رابط الصفحة"
:command.ui/toggle-wide-mode "تبديل الوضع العريض"
:command.ui/highlight-recent-blocks "تبديل تظليل الكتل الحديثة"
:command.editor/toggle-display-hidden-properties "تبديل عرض الخصائص المخفية"
:command.ui/select-theme-color "اختيار ألوان السمات المتاحة"
:command.ui/goto-plugins "الانتقال إلى لوحة الإضافات"
:command.ui/install-plugins-from-file "تثبيت الإضافات من ملف plugins.edn"
:command.ui/install-plugin-from-github "تثبيت إضافة من إصدارات GitHub"
:command.editor/toggle-open-blocks "تبديل فتح الكتل (طي أو توسيع كافة الكتل)"
:command.ui/clear-all-notifications "مسح كافة الإشعارات"
:command.misc/export-block-data "تصدير بيانات EDN للكتلة"
:command.misc/export-page-data "تصدير بيانات EDN للصفحة"
:command.misc/export-graph-ontology-data "تصدير بيانات EDN لوسوم وخصائص المخطط"
:command.misc/import-edn-data "استيراد بيانات EDN"
:command.dev/show-block-data "(للمطورين) عرض بيانات الكتلة"
:command.dev/show-block-ast "(للمطورين) عرض بنية الكتلة (AST)"
:command.dev/show-page-data "(للمطورين) عرض بيانات الصفحة"
:command.dev/replace-graph-with-db-file "(للمطورين) استبدال المخطط بملف قاعدة البيانات الخاص به db.sqlite"
:command.dev/validate-db "(للمطورين) التحقق من صحة بيانات المخطط الحالي"
:command.dev/gc-graph "(للمطورين) تنظيف المخطط (إزالة البيانات غير المستخدمة من SQLite)"
:command.dev/rtc-stop "(للمطورين) إيقاف ساعة الوقت الحقيقي RTC"
:command.dev/rtc-start "(للمطورين) تشغيل ساعة الوقت الحقيقي RTC"
:command.window/close "إغلاق النافذة"}