浏览代码

Merge pull request #4072 from logseq/feature/lang-tasks-and-ci

Add dicts CI job and dev tasks
Gabriel Horner 3 年之前
父节点
当前提交
4356f7202b

+ 3 - 0
.github/workflows/build.yml

@@ -103,6 +103,9 @@ jobs:
       - name: Carve lint for unused vars
       - name: Carve lint for unused vars
         run: scripts/carve.clj
         run: scripts/carve.clj
 
 
+      - name: Lint invalid dictionary keys
+        run: bb lang:invalid-dicts
+
   e2e-test:
   e2e-test:
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
 
 

+ 27 - 0
bb.edn

@@ -0,0 +1,27 @@
+{:paths ["scripts/src"]
+ :tasks
+ {dev:watch
+  logseq.tasks.dev/watch
+
+  dev:open-dev-electron-app
+  logseq.tasks.dev/open-dev-electron-app
+
+  -dev:electron-start
+  {:depends [dev:watch dev:open-dev-electron-app]}
+
+  dev:electron-start
+  {:doc "Start electron dev by watching assets and opening dev app"
+   ;; Parallel execution - https://book.babashka.org/#parallel
+   :task (run '-dev:electron-start {:parallel true})}
+
+  lang:list
+  logseq.tasks.lang/list-langs
+
+  lang:missing
+  logseq.tasks.lang/list-missing
+
+  lang:duplicates
+  logseq.tasks.lang/list-duplicates
+
+  lang:invalid-dicts
+  logseq.tasks.lang/invalid-dicts}}

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

@@ -0,0 +1,94 @@
+## Intro
+
+Thanks for your interest in improving our translations! This document provides
+details on how to contribute to a translation. This document assumes you can run
+commandline tools, know how to switch languages within Logseq and basic
+Clojurescript familiarity. We use [tongue](https://github.com/tonsky/tongue), a
+most excellent library, for our translations.
+
+## Setup
+
+In order to run the commands in this doc, you will need to install
+[Babashka](https://github.com/babashka/babashka#installation).
+
+## Where to Contribute
+
+Language translations are in two files,
+[frontend/dicts.cljs](https://github.com/logseq/logseq/blob/feature/lang-tasks-and-ci/src/main/frontend/dicts.cljs)
+and
+[shortcut/dict.cljs](https://github.com/logseq/logseq/blob/feature/lang-tasks-and-ci/src/main/frontend/modules/shortcut/dict.cljs).
+When translating `shortcut/dict.cljs` you will want to refer to
+https://github.com/logseq/logseq/blob/feature/lang-tasks-and-ci/src/main/frontend/modules/shortcut/config.cljs
+for the English equivalent.
+
+## Language Overview
+
+First, let's get an overview of Logseq's languages and how many translations your
+language has compared to others:
+
+```sh
+$ bb lang:list
+
+|  :locale | :percent-translated | :translation-count |              :language |
+|----------+---------------------+--------------------+------------------------|
+|      :en |                 100 |                383 |                English |
+|   :nb-NO |                  99 |                381 |         Norsk (bokmål) |
+|   :zh-CN |                  96 |                367 |                   简体中文 |
+|      :ru |                  94 |                359 |                Русский |
+|   :pt-BR |                  83 |                319 | Português (Brasileiro) |
+|   :pt-PT |                  81 |                310 |    Português (Europeu) |
+|      :es |                  75 |                286 |                Español |
+| :zh-Hant |                  65 |                250 |                   繁體中文 |
+|      :af |                  60 |                230 |              Afrikaans |
+|      :de |                  56 |                215 |                Deutsch |
+|      :fr |                  45 |                172 |               Français |
+Total: 11
+```
+
+_Note_: This is only showing `frontend/dicts.cljs` translations for now.
+
+Let's try to get your language translated as close to 100% as you can!
+
+## Edit a Language
+
+To see what translations are missing:
+
+```
+$ bb lang:missing
+|                       :translation-key |                                  :string-to-translate |
+|----------------------------------------+-------------------------------------------------------|
+|                            :cards-view |                                            View cards |
+|                                :delete |                                                Delete |
+|                          :export-graph |                                          Export graph |
+|                           :export-page |                                           Export page |
+|                          :graph-search |                                          Search graph |
+|                       :open-new-window |                                            New window |
+...
+```
+
+_Note_: This is only showing `frontend/dicts.cljs` translations for now.
+
+Now, add keys for your language, save and rerun the above command. Over time
+you're hoping to have this list drop to zero.
+
+There is a lot to translate and sometimes we make mistakes. For example, we may leave a string untranslated. To see what translation keys are still left in English:
+
+```
+$ bb lang:duplicates
+Keys with duplicate values found:
+
+|                  :translation-key | :duplicate-value |
+|-----------------------------------+------------------|
+|                          :general |          General |
+|                           :logseq |           Logseq |
+|                               :no |               No |
+```
+
+Sometimes, we typo the translation key. If that happens, the github CI job will
+detect this error and helpfully show you what was typoed.
+
+## Add a Language
+
+To add a new language, add an entry to `frontend.dicts/languages`. Then add a
+new locale keyword to `frontend.dicts/dicts` and to
+`frontend.modules.shortcut.dict/dict` and start translating as described above.

+ 15 - 0
scripts/src/logseq/rewrite_clj.clj

@@ -0,0 +1,15 @@
+(ns logseq.rewrite-clj
+  "Rewrite-clj fns"
+  (:require [rewrite-clj.zip :as z]))
+
+(defn- find-symbol-first-right-sexpr
+  [zloc sym]
+  ;; Returns first symbol found
+  (-> (z/find-value zloc z/next sym)
+      z/right
+      z/sexpr))
+
+(defn var-sexp
+  [[string-var file]]
+  (let [zloc (z/of-string (slurp file))]
+    (find-symbol-first-right-sexpr zloc (symbol string-var))))

+ 26 - 0
scripts/src/logseq/tasks/dev.clj

@@ -0,0 +1,26 @@
+(ns logseq.tasks.dev
+  "Tasks for development"
+  (:require [babashka.fs :as fs]
+            [babashka.tasks :refer [shell]]))
+
+(defn watch
+  "Watches environment to reload cljs, css and other assets"
+  []
+  (shell "yarn watch"))
+
+(defn- file-modified-later-than?
+  [file comparison-instant]
+  (pos? (.compareTo (fs/file-time->instant (fs/last-modified-time file))
+                    comparison-instant)))
+
+;; Works whether yarn clean has been run before or not
+(defn open-dev-electron-app
+  "Opens dev-electron-app when watch process has built main.js"
+  []
+  (let [start-time (java.time.Instant/now)]
+    (dotimes [_n 1000]
+             (if (and (fs/exists? "static/js/main.js")
+                      (file-modified-later-than? "static/js/main.js" start-time))
+               (shell "yarn dev-electron-app")
+               (println "Waiting for app to build..."))
+             (Thread/sleep 1000))))

+ 100 - 0
scripts/src/logseq/tasks/lang.clj

@@ -0,0 +1,100 @@
+(ns logseq.tasks.lang
+  "Tasks related to language translations"
+  (:require [logseq.rewrite-clj :as rewrite-clj]
+            [clojure.set :as set]
+            [logseq.tasks.util :as task-util]))
+
+(defn- get-dicts
+  []
+  (dissoc (rewrite-clj/var-sexp ["dicts" "src/main/frontend/dicts.cljs"])
+          :tongue/fallback))
+
+(defn- get-languages
+  []
+  (rewrite-clj/var-sexp ["languages" "src/main/frontend/dicts.cljs"]))
+
+(defn list-langs
+  "List translated langagues with their number of translations"
+  []
+  (let [dicts (get-dicts)
+        en-count (count (dicts :en))
+        langs (into {} (map (juxt :value :label) (get-languages)))]
+    (->> dicts
+         (map (fn [[locale dicts]]
+                [locale
+                 (Math/round (* 100.0 (/ (count dicts) en-count)))
+                 (count dicts)
+                 (langs locale)]))
+         (sort-by #(nth % 2) >)
+         (map #(zipmap [:locale :percent-translated :translation-count :language] %))
+         task-util/print-table)))
+
+(defn- shorten [s length]
+  (if (< (count s) length)
+    s
+    (str (subs s 0 length) "...")))
+
+(defn list-missing
+  "List missing translations for a given language"
+  [& args]
+  (let [lang (or (keyword (first args))
+                 (task-util/print-usage "LOCALE"))
+        dicts (get-dicts)
+        translated-language (dicts lang)
+        _ (when-not translated-language
+            (println "Language" lang "does not have an entry in dicts.cljs")
+            (System/exit 1))
+        missing (set/difference (set (keys (dicts :en)))
+                                (set (keys translated-language)))]
+    (if (zero? (count missing))
+      (println "Language" lang "is fully translated!")
+      (->> (select-keys (dicts :en) missing)
+           (map (fn [[k v]]
+                  {:translation-key k
+                   ;; Shorten values
+                   :string-to-translate (shorten v 50)}))
+           (sort-by :translation-key)
+           task-util/print-table))))
+
+(defn invalid-dicts
+  "Lists translation keys that don't exist in English"
+  []
+  (let [dicts (get-dicts)
+        ;; For now defined as :en but clj-kondo analysis could be more thorough
+        valid-keys (set (keys (dicts :en)))
+        invalid-dicts
+        (->> (dissoc dicts :en)
+             (mapcat (fn [[lang get-dicts]]
+                       (map
+                        #(hash-map :language lang :invalid-key %)
+                        (set/difference (set (keys get-dicts))
+                                        valid-keys)))))]
+    (if (empty? invalid-dicts)
+      (println "All dicts have valid keys!")
+      (do
+        (println "Invalid dict keys found:")
+        (task-util/print-table invalid-dicts)
+        (System/exit 1)))))
+
+(defn list-duplicates
+  "Lists translations that are the same as the one in English"
+  [& args]
+  (let [dicts (get-dicts)
+        en-dicts (dicts :en)
+        lang (or (keyword (first args))
+                 (task-util/print-usage "LOCALE"))
+        lang-dicts (dicts lang)
+        invalid-dicts
+        (sort-by
+         :translation-key
+         (keep
+          #(when (= (en-dicts %) (lang-dicts %))
+             {:translation-key %
+              :duplicate-value (shorten (lang-dicts %) 70)})
+          (keys lang-dicts)))]
+    (if (empty? invalid-dicts)
+      (println "No duplicated keys found!")
+      (do
+        (println "Keys with duplicate values found:")
+        (task-util/print-table invalid-dicts)
+        (System/exit 1)))))

+ 15 - 0
scripts/src/logseq/tasks/util.clj

@@ -0,0 +1,15 @@
+(ns logseq.tasks.util
+  "Utils for tasks"
+  (:require [clojure.pprint :as pprint]))
+
+(defn print-usage [arg-str]
+  (println (format
+            "Usage: bb %s %s"
+            (System/getProperty "babashka.task")
+            arg-str))
+  (System/exit 1))
+
+(defn print-table
+  [rows]
+  (pprint/print-table rows)
+  (println "Total:" (count rows)))

+ 1 - 3
src/main/frontend/components/header.cljs

@@ -42,9 +42,7 @@
        (fn [{:keys [toggle-fn]}]
        (fn [{:keys [toggle-fn]}]
          [:a.button.text-sm.font-medium.block {:on-click toggle-fn}
          [:a.button.text-sm.font-medium.block {:on-click toggle-fn}
           [:span (t :login)]])
           [:span (t :login)]])
-       (let [list [;; {:title (t :login-google)
-                   ;;  :url (str config/website "/login/google")}
-                   {:title (t :login-github)
+       (let [list [{:title (t :login-github)
                     :url (str config/website "/login/github")}]]
                     :url (str config/website "/login/github")}]]
          (mapv
          (mapv
           (fn [{:keys [title url]}]
           (fn [{:keys [title url]}]

+ 14 - 71
src/main/frontend/dicts.cljs

@@ -329,7 +329,6 @@
         :parsing-files "Parsing files"
         :parsing-files "Parsing files"
         :loading-files "Loading files"
         :loading-files "Loading files"
         :login-github "Login with GitHub"
         :login-github "Login with GitHub"
-        ;; :login-google "Login with Google"
         :login "Login"
         :login "Login"
         :go-to "Go to "
         :go-to "Go to "
         :or "or"
         :or "or"
@@ -432,6 +431,7 @@
         :help/fold-unfold "Blöcke ein-/ausklappen (wenn nicht im Bearbeitungsmodus)"
         :help/fold-unfold "Blöcke ein-/ausklappen (wenn nicht im Bearbeitungsmodus)"
         :help/markdown-syntax "Markdown-Syntax"
         :help/markdown-syntax "Markdown-Syntax"
         :help/org-mode-syntax "Org-Mode-Syntax"
         :help/org-mode-syntax "Org-Mode-Syntax"
+        :new-graph "Add new graph"
         :bold "Fett"
         :bold "Fett"
         :italics "Kursiv"
         :italics "Kursiv"
         :html-link "Html-Link"
         :html-link "Html-Link"
@@ -603,7 +603,6 @@
         :parsing-files "Dateien analysieren"
         :parsing-files "Dateien analysieren"
         :loading-files "Dateien laden"
         :loading-files "Dateien laden"
         :login-github "Einloggen mit GitHub"
         :login-github "Einloggen mit GitHub"
-        :login-google "Einloggen mit Google"
         :login "Einloggen"
         :login "Einloggen"
         :go-to "Gehe zu "
         :go-to "Gehe zu "
         :or "oder"
         :or "oder"
@@ -617,14 +616,6 @@
         :open-a-directory "Öffne ein lokales Verzeichnis"}
         :open-a-directory "Öffne ein lokales Verzeichnis"}
 
 
    :fr {:help/about "A propos de Logseq"
    :fr {:help/about "A propos de Logseq"
-        :on-boarding/demo-graph "This is a demo graph, changes will not be saved until you open a local folder."
-        :on-boarding/add-graph "Add a graph"
-        :on-boarding/open-local-dir "Open a local directory"
-        :on-boarding/new-graph-desc-1 "Logseq supports both Markdown and Org-mode. You can open an existing directory or create a new one on your device, a directory is also known simply as a folder. Your data will be stored only on this device."
-        :on-boarding/new-graph-desc-2 "After you have opened your directory, it will create three folders in that directory:"
-        :on-boarding/new-graph-desc-3 "/journals - store your journal pages"
-        :on-boarding/new-graph-desc-4 "/pages - store the other pages"
-        :on-boarding/new-graph-desc-5 "/logseq - store configuration, custom.css, and some metadata."
         :help/bug "Signaler une anomalie"
         :help/bug "Signaler une anomalie"
         :help/feature "Demander une fonctionnalité"
         :help/feature "Demander une fonctionnalité"
         :help/changelog "Journal des modifications"
         :help/changelog "Journal des modifications"
@@ -641,8 +632,6 @@
         :help/reference-autocomplete "Autocomplétion des références à une Page"
         :help/reference-autocomplete "Autocomplétion des références à une Page"
         :help/block-reference "Référence à un Bloc"
         :help/block-reference "Référence à un Bloc"
         :help/key-commands "Key Commands"
         :help/key-commands "Key Commands"
-        :help/working-with-lists " (working with lists)"
-        :help/select-nfs-browser "Please use another browser (like latest chrome) which support NFS features to open local directory."
         :undo "Annuler"
         :undo "Annuler"
         :redo "Redo"
         :redo "Redo"
         :general "Général"
         :general "Général"
@@ -665,9 +654,9 @@
         :right-side-bar/block-ref "Référence des blocs"
         :right-side-bar/block-ref "Référence des blocs"
         :right-side-bar/journals "Journals"
         :right-side-bar/journals "Journals"
         :right-side-bar/graph-view "Graph view"
         :right-side-bar/graph-view "Graph view"
-        :right-side-bar/all-pages "All pages"
+        :right-side-bar/all-pages "Toutes les pages"
         :right-side-bar/flashcards "Flashcards"
         :right-side-bar/flashcards "Flashcards"
-        :right-side-bar/new-page "New page"
+        :right-side-bar/new-page "Nouvelle page"
         :git/set-access-token "Définir un jeton d'accès personnel GitHub"
         :git/set-access-token "Définir un jeton d'accès personnel GitHub"
         :git/token-is-encrypted "Le jeton sera chiffré et gardé dans le stockage local du navigateur (local storage)"
         :git/token-is-encrypted "Le jeton sera chiffré et gardé dans le stockage local du navigateur (local storage)"
         :git/token-server "Le serveur ne le stockera jamais"
         :git/token-server "Le serveur ne le stockera jamais"
@@ -714,7 +703,6 @@
         :page/make-private "Rendre la page privée"
         :page/make-private "Rendre la page privée"
         :page/delete "Supprimer la page (supprime le fichier)"
         :page/delete "Supprimer la page (supprime le fichier)"
         :page/publish "Publier cette page sur Logseq"
         :page/publish "Publier cette page sur Logseq"
-        :page/cancel-publishing "Cancel publishing on Logseq"
         :page/publish-as-slide "Publier cette page en présentation sur Logseq"
         :page/publish-as-slide "Publier cette page en présentation sur Logseq"
         :page/unpublish "Dépublier cette page de Logseq"
         :page/unpublish "Dépublier cette page de Logseq"
         :page/show-journals "Afficher le Journal"
         :page/show-journals "Afficher le Journal"
@@ -724,13 +712,6 @@
         :page/last-modified "Dernières modifications à"
         :page/last-modified "Dernières modifications à"
         :page/new-title "Quel est le nouveau titre de la page ?"
         :page/new-title "Quel est le nouveau titre de la page ?"
         :publishing/pages "Pages"
         :publishing/pages "Pages"
-        :publishing/page-name "Page name"
-        :publishing/current-project "Current Project"
-        :publishing/delete-from-logseq "Delete From Logseq Server"
-        :publishing/edit "Edit"
-        :publishing/save "Save"
-        :publishing/cancel "Cancel"
-        :publishing/delete "Delete"
         :journal/multiple-files-with-different-formats "Il semble que vous avez plusieurs fichier de journal (sous différents formats) pour le même mois, veuillez ne conserver qu'un fichier par mois."
         :journal/multiple-files-with-different-formats "Il semble que vous avez plusieurs fichier de journal (sous différents formats) pour le même mois, veuillez ne conserver qu'un fichier par mois."
         :journal/go-to "Voir les fichiers"
         :journal/go-to "Voir les fichiers"
         :file/name "Nom de fichier"
         :file/name "Nom de fichier"
@@ -761,16 +742,12 @@
         :content/copy-as-json "Copier au format JSON"
         :content/copy-as-json "Copier au format JSON"
         :content/click-to-edit "Cliquer pour éditer"
         :content/click-to-edit "Cliquer pour éditer"
         :settings-page/edit-config-edn "Editer config.edn (pour le repo actuel)"
         :settings-page/edit-config-edn "Editer config.edn (pour le repo actuel)"
-        :settings-page/git-desc "is used for pages version control, you can click the vertical three dots menu to check the page's history."
-        :settings-page/git-confirm "You need to restart the app after updating the Git settings."
-        :settings-page/git-switcher-label "Enable Git auto commit"
-        :settings-page/git-commit-delay "Git auto commit seconds"
         :settings-page/preferred-file-format "Format de fichier préféré"
         :settings-page/preferred-file-format "Format de fichier préféré"
         :settings-page/preferred-workflow "Workflow préféré"
         :settings-page/preferred-workflow "Workflow préféré"
         :settings-page/enable-timetracking "Activer le suivi de temps des tâches"
         :settings-page/enable-timetracking "Activer le suivi de temps des tâches"
         :settings-page/dont-use-other-peoples-proxy-servers "N'utilisez pas de serveurs proxy que vous ne maîtrisez pas. Cela est très dangereux, vous pourriez vous faire voler vos jetons d'accès et vos notes. Logseq ne pourra être tenu responsable pour toute perte ou vol de données si vous utilisez des serveurs proxy. Vous pouvez également déployer Logseq vous-même, regardez "
         :settings-page/dont-use-other-peoples-proxy-servers "N'utilisez pas de serveurs proxy que vous ne maîtrisez pas. Cela est très dangereux, vous pourriez vous faire voler vos jetons d'accès et vos notes. Logseq ne pourra être tenu responsable pour toute perte ou vol de données si vous utilisez des serveurs proxy. Vous pouvez également déployer Logseq vous-même, regardez "
         :settings-page/custom-cors-proxy-server "CORS personnalisé pour Serveur Proxy"
         :settings-page/custom-cors-proxy-server "CORS personnalisé pour Serveur Proxy"
-        :settings-page/developer-mode "Developer mode"
+        :settings-page/developer-mode "Le mode développeur"
         :settings-page/enable-developer-mode "Activer le mode développeur"
         :settings-page/enable-developer-mode "Activer le mode développeur"
         :settings-page/disable-developer-mode "Désactiver le mode développeur"
         :settings-page/disable-developer-mode "Désactiver le mode développeur"
         :settings-page/developer-mode-desc "Le mode développeur aide les contributeurs et les développeurs d'extension à tester leur intégration avec Logseq."
         :settings-page/developer-mode-desc "Le mode développeur aide les contributeurs et les développeurs d'extension à tester leur intégration avec Logseq."
@@ -800,13 +777,11 @@
         :join-community "Rejoindre la communauté"
         :join-community "Rejoindre la communauté"
         :discord-title "Notre groupe Discord !"
         :discord-title "Notre groupe Discord !"
         :sign-out "Se déconnecter"
         :sign-out "Se déconnecter"
-        :help-shortcut-title "Click to check shortcuts and other tips"
         :loading "Chargement en cours"
         :loading "Chargement en cours"
         :cloning "Clonage en cours"
         :cloning "Clonage en cours"
         :parsing-files "Analyse des fichiers"
         :parsing-files "Analyse des fichiers"
         :loading-files "Chargement des fichiers"
         :loading-files "Chargement des fichiers"
         :login-github "S'authentifier avec GitHub"
         :login-github "S'authentifier avec GitHub"
-        :login-google "S'authentifier avec Google"
         :go-to "Aller à "
         :go-to "Aller à "
         :or "ou"
         :or "ou"
         :download "Télécharger"
         :download "Télécharger"
@@ -1130,7 +1105,6 @@
            :parsing-files "正在解析文件"
            :parsing-files "正在解析文件"
            :loading-files "正在加载文件"
            :loading-files "正在加载文件"
            :login-github "用 GitHub 登录"
            :login-github "用 GitHub 登录"
-           :login-google "用 Google 登录"
            :login "登录"
            :login "登录"
            :go-to "转到"
            :go-to "转到"
            :or "或"
            :or "或"
@@ -1345,7 +1319,7 @@
              :block/name "頁面名稱:"
              :block/name "頁面名稱:"
              :page/last-modified "最後更改於"
              :page/last-modified "最後更改於"
              :page/new-title "請輸入新頁面的名字:"
              :page/new-title "請輸入新頁面的名字:"
-             :page/load-more-journals "載入更多"
+             :page/earlier "之前"
              :page/no-more-journals "沒有更多了"
              :page/no-more-journals "沒有更多了"
              :publishing/pages "頁面"
              :publishing/pages "頁面"
              :publishing/page-name "頁面名稱"
              :publishing/page-name "頁面名稱"
@@ -1434,7 +1408,6 @@
              :parsing-files "正在解析文件"
              :parsing-files "正在解析文件"
              :loading-files "正在加載文件"
              :loading-files "正在加載文件"
              :login-github "用 GitHub 登錄"
              :login-github "用 GitHub 登錄"
-             :login-google "用 Google 登錄"
              :go-to "轉到"
              :go-to "轉到"
              :or "或"
              :or "或"
              :download "下載"
              :download "下載"
@@ -1671,7 +1644,6 @@
         :parsing-files "Lêer ontleding"
         :parsing-files "Lêer ontleding"
         :loading-files "Laai lêers"
         :loading-files "Laai lêers"
         :login-github "Aantekening deur GitHub"
         :login-github "Aantekening deur GitHub"
-        :login-google "Aantekening deur Google"
         :go-to "Gaan na "
         :go-to "Gaan na "
         :or "of"
         :or "of"
         :download "Laai af"
         :download "Laai af"
@@ -1724,14 +1696,7 @@
         :on-boarding/cuekeeper-desc " - Sistema de GTD (lista de tareas) basado en el navegador"
         :on-boarding/cuekeeper-desc " - Sistema de GTD (lista de tareas) basado en el navegador"
         :on-boarding/sci-desc " - Intérprete compacto de Clojure"
         :on-boarding/sci-desc " - Intérprete compacto de Clojure"
         :on-boarding/isomorphic-git-desc " - ¡Una implementación de git en JavaScript puro para node y navegadores!"
         :on-boarding/isomorphic-git-desc " - ¡Una implementación de git en JavaScript puro para node y navegadores!"
-        :on-boarding/demo-graph "This is a demo graph, changes will not be saved until you open a local folder."
-        :on-boarding/add-graph "Add a graph"
-        :on-boarding/open-local-dir "Open a local directory"
-        :on-boarding/new-graph-desc-1 "Logseq supports both Markdown and Org-mode. You can open an existing directory or create a new one on your device, a directory is also known simply as a folder. Your data will be stored only on this device."
-        :on-boarding/new-graph-desc-2 "After you have opened your directory, it will create three folders in that directory:"
-        :on-boarding/new-graph-desc-3 "/journals - store your journal pages"
-        :on-boarding/new-graph-desc-4 "/pages - store the other pages"
-        :on-boarding/new-graph-desc-5 "/logseq - store configuration, custom.css, and some metadata."
+        :on-boarding/add-graph "Añade un grafo"
         :help/about "Acerca de Logseq"
         :help/about "Acerca de Logseq"
         :help/roadmap "Hoja de ruta"
         :help/roadmap "Hoja de ruta"
         :help/bug "Reportar un error"
         :help/bug "Reportar un error"
@@ -1776,11 +1741,11 @@
         :right-side-bar/favorites "Favoritos"
         :right-side-bar/favorites "Favoritos"
         :right-side-bar/page-graph "Vista gráfica"
         :right-side-bar/page-graph "Vista gráfica"
         :right-side-bar/block-ref "Referencia de bloque"
         :right-side-bar/block-ref "Referencia de bloque"
-        :right-side-bar/journals "Journals"
+        :right-side-bar/journals "Diarios"
         :right-side-bar/graph-view "Graph view"
         :right-side-bar/graph-view "Graph view"
-        :right-side-bar/all-pages "All pages"
+        :right-side-bar/all-pages "Lista de páginas"
         :right-side-bar/flashcards "Flashcards"
         :right-side-bar/flashcards "Flashcards"
-        :right-side-bar/new-page "New page"
+        :right-side-bar/new-page "Nueva pagina"
         :git/set-access-token "Establece el token de acceso personal de GitHub"
         :git/set-access-token "Establece el token de acceso personal de GitHub"
         :git/token-is-encrypted "El token será encriptado y guardado en el almacenamiento local del navegador"
         :git/token-is-encrypted "El token será encriptado y guardado en el almacenamiento local del navegador"
         :git/token-server "El servidor nunca lo guardará"
         :git/token-server "El servidor nunca lo guardará"
@@ -1884,14 +1849,10 @@
         :content/copy-as-json "Copiar como JSON"
         :content/copy-as-json "Copiar como JSON"
         :content/click-to-edit "Clic para editar"
         :content/click-to-edit "Clic para editar"
         :settings-page/edit-config-edn "Editar config.edn (para este repositorio)"
         :settings-page/edit-config-edn "Editar config.edn (para este repositorio)"
-        :settings-page/git-desc "is used for pages version control, you can click the vertical three dots menu to check the page's history."
-        :settings-page/git-confirm "You need to restart the app after updating the Git settings."
-        :settings-page/git-switcher-label "Enable Git auto commit"
-        :settings-page/git-commit-delay "Git auto commit seconds"
         :settings-page/show-brackets "Mostrar corchetes"
         :settings-page/show-brackets "Mostrar corchetes"
         :settings-page/disable-sentry "Enviar datos de uso y diagnósticos a Logseq"
         :settings-page/disable-sentry "Enviar datos de uso y diagnósticos a Logseq"
         :settings-page/preferred-outdenting "Disminución lógica de sangría"
         :settings-page/preferred-outdenting "Disminución lógica de sangría"
-        :settings-page/custom-d+ate-format "Formato de diario preferido"
+        :settings-page/custom-date-format "Formato de diario preferido"
         :settings-page/preferred-file-format "Formato de archivo preferido"
         :settings-page/preferred-file-format "Formato de archivo preferido"
         :settings-page/preferred-workflow "Flujo de trabajo preferido"
         :settings-page/preferred-workflow "Flujo de trabajo preferido"
         :settings-page/enable-timetracking "Habilitar rastreo de tiempo"
         :settings-page/enable-timetracking "Habilitar rastreo de tiempo"
@@ -1959,7 +1920,6 @@
         :parsing-files "Analizando archivos"
         :parsing-files "Analizando archivos"
         :loading-files "Cargando archivos"
         :loading-files "Cargando archivos"
         :login-github "Iniciar sesión con GitHub"
         :login-github "Iniciar sesión con GitHub"
-        :login-google "Iniciar sesión con Google"
         :login "Iniciar sesión"
         :login "Iniciar sesión"
         :go-to "Ir a "
         :go-to "Ir a "
         :or "o"
         :or "o"
@@ -1977,7 +1937,7 @@
 
 
         :help/shortcut-page-title "Atajos personalizados"
         :help/shortcut-page-title "Atajos personalizados"
 
 
-        :select/prompt "Seleccione uno"
+        :select/default-prompt "Seleccione uno"
         :select.graph/prompt "Seleccione un grafo"
         :select.graph/prompt "Seleccione un grafo"
         :select.graph/empty-placeholder-description "No encontramos un grafo. Queries añadir otro?"
         :select.graph/empty-placeholder-description "No encontramos un grafo. Queries añadir otro?"
         :select.graph/add-graph "Si, añadame otro grafo"}
         :select.graph/add-graph "Si, añadame otro grafo"}
@@ -2305,7 +2265,6 @@
         :parsing-files "Analyserer filer"
         :parsing-files "Analyserer filer"
         :loading-files "Laster filer"
         :loading-files "Laster filer"
         :login-github "Logg inn med GitHub"
         :login-github "Logg inn med GitHub"
-        ;; :login-google "Logg inn med Google"
         :login "Logg inn"
         :login "Logg inn"
         :go-to "Gå til "
         :go-to "Gå til "
         :or "eller"
         :or "eller"
@@ -2478,11 +2437,9 @@
     :right-side-bar/favorites "Favoritos"
     :right-side-bar/favorites "Favoritos"
     :right-side-bar/page-graph "Grafo da página"
     :right-side-bar/page-graph "Grafo da página"
     :right-side-bar/block-ref "Referência de bloco"
     :right-side-bar/block-ref "Referência de bloco"
-    :right-side-bar/journals "Journals"
-    :right-side-bar/graph-view "Graph view"
-    :right-side-bar/all-pages "All pages"
+    :right-side-bar/journals "Diários"
     :right-side-bar/flashcards "Flashcards"
     :right-side-bar/flashcards "Flashcards"
-    :right-side-bar/new-page "New page"
+    :right-side-bar/new-page "Nova página"
     :git/set-access-token "Definir token de acesso pessoal do GitHub"
     :git/set-access-token "Definir token de acesso pessoal do GitHub"
     :git/token-is-encrypted "O token será criptografado e guardado no armazenamento local do navegador"
     :git/token-is-encrypted "O token será criptografado e guardado no armazenamento local do navegador"
     :git/token-server "Nunca será armazenado pelo servidor"
     :git/token-server "Nunca será armazenado pelo servidor"
@@ -2679,7 +2636,6 @@
     :parsing-files "Analisando arquivos"
     :parsing-files "Analisando arquivos"
     :loading-files "Carregando arquivos"
     :loading-files "Carregando arquivos"
     :login-github "Iniciar sessão com GitHub"
     :login-github "Iniciar sessão com GitHub"
-        ;; :login-google "Iniciar sessão com Google"
     :login "Iniciar sessão"
     :login "Iniciar sessão"
     :go-to "Ir para "
     :go-to "Ir para "
     :or "ou"
     :or "ou"
@@ -2751,14 +2707,7 @@
     :on-boarding/cuekeeper-desc " - Sistema de GTD (lista de tarefas) baseado no navegador."
     :on-boarding/cuekeeper-desc " - Sistema de GTD (lista de tarefas) baseado no navegador."
     :on-boarding/sci-desc " - Interpretador Compacto de Clojure"
     :on-boarding/sci-desc " - Interpretador Compacto de Clojure"
     :on-boarding/isomorphic-git-desc " - Uma implementação de git em JavaScript puro para node e navegadores!"
     :on-boarding/isomorphic-git-desc " - Uma implementação de git em JavaScript puro para node e navegadores!"
-    :on-boarding/demo-graph "This is a demo graph, changes will not be saved until you open a local folder."
-    :on-boarding/add-graph "Add a graph"
-    :on-boarding/open-local-dir "Open a local directory"
-    :on-boarding/new-graph-desc-1 "Logseq supports both Markdown and Org-mode. You can open an existing directory or create a new one on your device, a directory is also known simply as a folder. Your data will be stored only on this device."
-    :on-boarding/new-graph-desc-2 "After you have opened your directory, it will create three folders in that directory:"
-    :on-boarding/new-graph-desc-3 "/journals - store your journal pages"
-    :on-boarding/new-graph-desc-4 "/pages - store the other pages"
-    :on-boarding/new-graph-desc-5 "/logseq - store configuration, custom.css, and some metadata."
+    :on-boarding/add-graph "Adicionar grafo"
     :help/start "Começar a usar"
     :help/start "Começar a usar"
     :help/about "Sobre o Logseq"
     :help/about "Sobre o Logseq"
     :help/roadmap "Plano de implementação"
     :help/roadmap "Plano de implementação"
@@ -2918,10 +2867,6 @@
     :content/copy-as-json "Copiar como JSON"
     :content/copy-as-json "Copiar como JSON"
     :content/click-to-edit "Clicar para editar"
     :content/click-to-edit "Clicar para editar"
     :settings-page/edit-config-edn "Editar config.edn para o repositório atual"
     :settings-page/edit-config-edn "Editar config.edn para o repositório atual"
-    :settings-page/git-desc "is used for pages version control, you can click the vertical three dots menu to check the page's history."
-    :settings-page/git-confirm "You need to restart the app after updating the Git settings."
-    :settings-page/git-switcher-label "Enable Git auto commit"
-    :settings-page/git-commit-delay "Git auto commit seconds"
     :settings-page/show-brackets "Mostrar parênteses rectos"
     :settings-page/show-brackets "Mostrar parênteses rectos"
     :settings-page/spell-checker "Verificador ortográfico"
     :settings-page/spell-checker "Verificador ortográfico"
     :settings-page/disable-sentry "Enviar dados de utilização e diagnósticos para Logseq"
     :settings-page/disable-sentry "Enviar dados de utilização e diagnósticos para Logseq"
@@ -3007,7 +2952,6 @@
     :parsing-files "A analisar ficheiros"
     :parsing-files "A analisar ficheiros"
     :loading-files "A carregar ficheiros"
     :loading-files "A carregar ficheiros"
     :login-github "Iniciar sessão com GitHub"
     :login-github "Iniciar sessão com GitHub"
-        ;; :login-google "Iniciar sessão com Google"
     :login "Iniciar sessão"
     :login "Iniciar sessão"
     :go-to "Ir para "
     :go-to "Ir para "
     :or "ou"
     :or "ou"
@@ -3347,7 +3291,6 @@
         :parsing-files "Парсинг файлов"
         :parsing-files "Парсинг файлов"
         :loading-files "Загрузка файлов"
         :loading-files "Загрузка файлов"
         :login-github "Логин через GitHub"
         :login-github "Логин через GitHub"
-        ;; :login-google "Login with Google"
         :login "Логин"
         :login "Логин"
         :go-to "Go to "
         :go-to "Go to "
         :or "или"
         :or "или"