Browse Source

Update lang tasks to also read shortcuts

- Updated docs with more accurate picture of translation state
- invalid task found keys that were no longer used from 2 commands
- Cleaned up rewrite-clj
Gabriel Horner 3 years ago
parent
commit
0fcdb498d8

+ 2 - 2
.github/workflows/build.yml

@@ -103,8 +103,8 @@ 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
+      - name: Lint invalid translation entries
+        run: bb lang:invalid-translations
 
 
   e2e-test:
   e2e-test:
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest

+ 2 - 2
bb.edn

@@ -23,5 +23,5 @@
   lang:duplicates
   lang:duplicates
   logseq.tasks.lang/list-duplicates
   logseq.tasks.lang/list-duplicates
 
 
-  lang:invalid-dicts
-  logseq.tasks.lang/invalid-dicts}}
+  lang:invalid-translations
+  logseq.tasks.lang/invalid-translations}}

+ 12 - 15
docs/contributing-to-translations.md

@@ -29,24 +29,23 @@ language has compared to others:
 ```sh
 ```sh
 $ bb lang:list
 $ bb lang:list
 
 
+
 |  :locale | :percent-translated | :translation-count |              :language |
 |  :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 |
+|      :en |                 100 |                494 |                English |
+|   :nb-NO |                  90 |                445 |         Norsk (bokmål) |
+|   :zh-CN |                  87 |                432 |                   简体中文 |
+|      :ru |                  85 |                422 |                Русский |
+|   :pt-BR |                  77 |                382 | Português (Brasileiro) |
+|   :pt-PT |                  76 |                373 |    Português (Europeu) |
+|      :es |                  71 |                349 |                Español |
+| :zh-Hant |                  55 |                272 |                   繁體中文 |
+|      :af |                  51 |                253 |              Afrikaans |
+|      :de |                  48 |                238 |                Deutsch |
+|      :fr |                  39 |                195 |               Français |
 Total: 11
 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!
 Let's try to get your language translated as close to 100% as you can!
 
 
 ## Edit a Language
 ## Edit a Language
@@ -66,8 +65,6 @@ $ bb lang:missing
 ...
 ...
 ```
 ```
 
 
-_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
 Now, add keys for your language, save and rerun the above command. Over time
 you're hoping to have this list drop to zero.
 you're hoping to have this list drop to zero.
 
 

+ 73 - 31
scripts/src/logseq/tasks/lang.clj

@@ -1,33 +1,68 @@
 (ns logseq.tasks.lang
 (ns logseq.tasks.lang
   "Tasks related to language translations"
   "Tasks related to language translations"
-  (:require [logseq.rewrite-clj :as rewrite-clj]
+  (:require [logseq.tasks.rewrite-clj :as rewrite-clj]
             [clojure.set :as set]
             [clojure.set :as set]
             [logseq.tasks.util :as task-util]))
             [logseq.tasks.util :as task-util]))
 
 
 (defn- get-dicts
 (defn- get-dicts
   []
   []
-  (dissoc (rewrite-clj/var-sexp ["dicts" "src/main/frontend/dicts.cljs"])
+  (dissoc (rewrite-clj/var-sexp "src/main/frontend/dicts.cljs" "dicts")
           :tongue/fallback))
           :tongue/fallback))
 
 
+(defn- get-non-en-shortcuts
+  []
+  (nth (rewrite-clj/var-sexp "src/main/frontend/modules/shortcut/dict.cljs" "dict")
+       3))
+
+;; unnecessary complexity :(
+(defn- decorate-namespace [k]
+  (let [n (name k)
+        ns (namespace k)]
+    (keyword (str "command." ns) n)))
+
+(defn- get-en-shortcut-dicts
+  []
+  (->> (rewrite-clj/var-sexp
+        "src/main/frontend/modules/shortcut/config.cljs"
+        "all-default-keyboard-shortcuts")
+       (map (fn [[k v]] (vector (decorate-namespace k) (:desc v))))
+       (into {})))
+
+(defn- get-en-categories
+  []
+  (->> (rewrite-clj/var-sexp
+        "src/main/frontend/modules/shortcut/config.cljs"
+        "category")
+       (map (fn [[k v]] (vector k (:doc (meta v)))))
+       (into {})))
+
+(defn- get-shortcuts
+  []
+  (merge {:en (merge (get-en-categories)
+                     (get-en-shortcut-dicts))}
+         (get-non-en-shortcuts)))
+
 (defn- get-languages
 (defn- get-languages
   []
   []
-  (rewrite-clj/var-sexp ["languages" "src/main/frontend/dicts.cljs"]))
+  (->> (rewrite-clj/var-sexp "src/main/frontend/dicts.cljs" "languages")
+       (map (juxt :value :label))
+       (into {})))
 
 
 (defn list-langs
 (defn list-langs
   "List translated langagues with their number of translations"
   "List translated langagues with their number of translations"
   []
   []
-  (let [dicts (get-dicts)
+  (let [dicts (merge-with merge (get-dicts) (get-shortcuts))
         en-count (count (dicts :en))
         en-count (count (dicts :en))
-        langs (into {} (map (juxt :value :label) (get-languages)))]
+        langs (get-languages)]
     (->> dicts
     (->> 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)))
+           (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]
 (defn- shorten [s length]
   (if (< (count s) length)
   (if (< (count s) length)
@@ -39,27 +74,34 @@
   [& args]
   [& args]
   (let [lang (or (keyword (first args))
   (let [lang (or (keyword (first args))
                  (task-util/print-usage "LOCALE"))
                  (task-util/print-usage "LOCALE"))
-        dicts (get-dicts)
-        translated-language (dicts lang)
-        _ (when-not translated-language
+        _ (when-not (contains? (get-languages) lang)
             (println "Language" lang "does not have an entry in dicts.cljs")
             (println "Language" lang "does not have an entry in dicts.cljs")
             (System/exit 1))
             (System/exit 1))
-        missing (set/difference (set (keys (dicts :en)))
-                                (set (keys translated-language)))]
-    (if (zero? (count missing))
+        all-dicts [[(get-dicts) "frontend/dicts.cljs"]
+                   [(get-shortcuts) "shortcut/dict.cljs"]]
+        all-missing (map (fn [[dicts file]]
+                           [(select-keys (dicts :en)
+                                         (set/difference (set (keys (dicts :en)))
+                                                         (set (keys (dicts lang)))))
+                            file])
+                         all-dicts)]
+    (if (every? (comp zero? count first) all-missing)
       (println "Language" lang "is fully translated!")
       (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)
+      (->> all-missing
+           (mapcat (fn [[m file]]
+                     (map (fn [[k v]]
+                            {:translation-key k
+                             ;; Shorten values
+                             :string-to-translate (shorten v 50)
+                             :file file})
+                          m)))
+           (sort-by (juxt :file :translation-key))
            task-util/print-table))))
            task-util/print-table))))
 
 
-(defn invalid-dicts
-  "Lists translation keys that don't exist in English"
+(defn invalid-translations
+  "Lists translation that don't exist in English"
   []
   []
-  (let [dicts (get-dicts)
+  (let [dicts (merge-with merge (get-dicts) (get-shortcuts))
         ;; For now defined as :en but clj-kondo analysis could be more thorough
         ;; For now defined as :en but clj-kondo analysis could be more thorough
         valid-keys (set (keys (dicts :en)))
         valid-keys (set (keys (dicts :en)))
         invalid-dicts
         invalid-dicts
@@ -70,16 +112,16 @@
                         (set/difference (set (keys get-dicts))
                         (set/difference (set (keys get-dicts))
                                         valid-keys)))))]
                                         valid-keys)))))]
     (if (empty? invalid-dicts)
     (if (empty? invalid-dicts)
-      (println "All dicts have valid keys!")
+      (println "All translations have valid keys!")
       (do
       (do
-        (println "Invalid dict keys found:")
+        (println "Invalid translation keys found:")
         (task-util/print-table invalid-dicts)
         (task-util/print-table invalid-dicts)
         (System/exit 1)))))
         (System/exit 1)))))
 
 
 (defn list-duplicates
 (defn list-duplicates
   "Lists translations that are the same as the one in English"
   "Lists translations that are the same as the one in English"
   [& args]
   [& args]
-  (let [dicts (get-dicts)
+  (let [dicts (merge-with merge (get-dicts) (get-shortcuts))
         en-dicts (dicts :en)
         en-dicts (dicts :en)
         lang (or (keyword (first args))
         lang (or (keyword (first args))
                  (task-util/print-usage "LOCALE"))
                  (task-util/print-usage "LOCALE"))

+ 2 - 2
scripts/src/logseq/rewrite_clj.clj → scripts/src/logseq/tasks/rewrite_clj.clj

@@ -1,4 +1,4 @@
-(ns logseq.rewrite-clj
+(ns logseq.tasks.rewrite-clj
   "Rewrite-clj fns"
   "Rewrite-clj fns"
   (:require [rewrite-clj.zip :as z]))
   (:require [rewrite-clj.zip :as z]))
 
 
@@ -10,6 +10,6 @@
       z/sexpr))
       z/sexpr))
 
 
 (defn var-sexp
 (defn var-sexp
-  [[string-var file]]
+  [file string-var]
   (let [zloc (z/of-string (slurp file))]
   (let [zloc (z/of-string (slurp file))]
     (find-symbol-first-right-sexpr zloc (symbol string-var))))
     (find-symbol-first-right-sexpr zloc (symbol string-var))))

+ 1 - 17
src/main/frontend/modules/shortcut/dict.cljs

@@ -41,12 +41,10 @@
      :command.ui/toggle-theme                "在暗色/亮色主题之间切换"
      :command.ui/toggle-theme                "在暗色/亮色主题之间切换"
      :command.ui/toggle-right-sidebar        "启用/关闭右侧栏"
      :command.ui/toggle-right-sidebar        "启用/关闭右侧栏"
      :command.ui/toggle-settings             "显示/关闭设置"
      :command.ui/toggle-settings             "显示/关闭设置"
-     :command.ui/toggle-new-block            "切换 Enter/Shift+Enter 以插入新块"
      :command.go/journals                    "跳转到日记"
      :command.go/journals                    "跳转到日记"
      :command.ui/toggle-wide-mode            "切换宽屏模式"
      :command.ui/toggle-wide-mode            "切换宽屏模式"
      :command.ui/toggle-brackets             "切换是否显示括号"
      :command.ui/toggle-brackets             "切换是否显示括号"
      :command.search/re-index                "重新建立搜索索引"
      :command.search/re-index                "重新建立搜索索引"
-     :command.graph/re-index                 "重新建立图库索引"
      :command.editor/bold                    "粗体"
      :command.editor/bold                    "粗体"
      :command.editor/italics                 "斜体"
      :command.editor/italics                 "斜体"
      :command.editor/insert-link             "Html 链接"
      :command.editor/insert-link             "Html 链接"
@@ -96,7 +94,6 @@
      :command.ui/toggle-document-mode        "切換文檔模式"
      :command.ui/toggle-document-mode        "切換文檔模式"
      :command.ui/toggle-theme                "“在暗色/亮色主題之間切換”"
      :command.ui/toggle-theme                "“在暗色/亮色主題之間切換”"
      :command.ui/toggle-right-sidebar        "啟用/關閉右側欄"
      :command.ui/toggle-right-sidebar        "啟用/關閉右側欄"
-     :command.ui/toggle-new-block            "切換 Enter/Shift+Enter 以插入新塊"
      :command.go/journals                    "跳轉到日記"}
      :command.go/journals                    "跳轉到日記"}
     :de
     :de
     {:shortcut.category/formatting            "Formatierung"
     {:shortcut.category/formatting            "Formatierung"
@@ -118,7 +115,6 @@
      :command.ui/toggle-document-mode        "Dokumentenmodus umschalten"
      :command.ui/toggle-document-mode        "Dokumentenmodus umschalten"
      :command.ui/toggle-theme                "Umschalten zwischen dunklem/hellem Thema"
      :command.ui/toggle-theme                "Umschalten zwischen dunklem/hellem Thema"
      :command.ui/toggle-right-sidebar        "Rechte Seitenleiste umschalten"
      :command.ui/toggle-right-sidebar        "Rechte Seitenleiste umschalten"
-     :command.ui/toggle-new-block            "Umschalten von Enter/Shift+Enter zum Einfügen eines neuen Blocks"
      :command.go/journals                    "Zu Journalen springen"
      :command.go/journals                    "Zu Journalen springen"
      :command.git/commit                     "Git Commit-Nachricht"
      :command.git/commit                     "Git Commit-Nachricht"
      :command.editor/select-block-down       "Block unterhalb auswählen"
      :command.editor/select-block-down       "Block unterhalb auswählen"
@@ -146,7 +142,6 @@
      :command.ui/toggle-document-mode        "Intervertir le mode document"
      :command.ui/toggle-document-mode        "Intervertir le mode document"
      :command.ui/toggle-theme                "Intervertir le thème foncé/clair"
      :command.ui/toggle-theme                "Intervertir le thème foncé/clair"
      :command.ui/toggle-right-sidebar        "Afficher/cacher la barre latérale"
      :command.ui/toggle-right-sidebar        "Afficher/cacher la barre latérale"
-     :command.ui/toggle-new-block            "Activer Entreée ou Shift+Enter pour insérer un bloc"
      :command.go/journals                    "Aller au Journal"}
      :command.go/journals                    "Aller au Journal"}
     :af
     :af
     {:shortcut.category/formatting            "Formatering"
     {:shortcut.category/formatting            "Formatering"
@@ -171,8 +166,7 @@
      :command.ui/toggle-document-mode        "Wissel dokument modus"
      :command.ui/toggle-document-mode        "Wissel dokument modus"
      :command.go/journals                    "Spring na joernale"
      :command.go/journals                    "Spring na joernale"
      :command.ui/toggle-theme                "Wissel tussen donker/lig temas"
      :command.ui/toggle-theme                "Wissel tussen donker/lig temas"
-     :command.ui/toggle-right-sidebar        "Wissel regter sybalk"
-     :command.ui/toggle-new-block            "Wissel Enter/Shift+enter vir die byvoeging van nuwe blokke"}
+     :command.ui/toggle-right-sidebar        "Wissel regter sybalk"}
     :es
     :es
     {:shortcut.category/formatting            "Formato"
     {:shortcut.category/formatting            "Formato"
      :shortcut.category/basics                "Básico"
      :shortcut.category/basics                "Básico"
@@ -206,12 +200,10 @@
      :command.ui/toggle-theme                "Alternar entre tema claro/oscuro"
      :command.ui/toggle-theme                "Alternar entre tema claro/oscuro"
      :command.ui/toggle-right-sidebar        "Alternar barra lateral"
      :command.ui/toggle-right-sidebar        "Alternar barra lateral"
      :command.ui/toggle-settings             "Alternar Opciones"
      :command.ui/toggle-settings             "Alternar Opciones"
-     :command.ui/toggle-new-block            "Alternar Enter/Shift+Enter para crear nuevas lineas"
      :command.go/journals                    "Ir a los diarios"
      :command.go/journals                    "Ir a los diarios"
      :command.ui/toggle-wide-mode            "Alternar modo ancho"
      :command.ui/toggle-wide-mode            "Alternar modo ancho"
      :command.ui/toggle-brackets             "Alternar corchetes"
      :command.ui/toggle-brackets             "Alternar corchetes"
      :command.search/re-index                "Reconstruir índice de búsqueda"
      :command.search/re-index                "Reconstruir índice de búsqueda"
-     :command.graph/re-index                 "Reindexar el grafo completo"
      :command.editor/bold                    "Negrita"
      :command.editor/bold                    "Negrita"
      :command.editor/italics                 "Cursiva"
      :command.editor/italics                 "Cursiva"
      :command.editor/insert-link             "Enlace html"
      :command.editor/insert-link             "Enlace html"
@@ -272,12 +264,10 @@
      :command.ui/toggle-theme                 "Переключение между светлой / темной темой"
      :command.ui/toggle-theme                 "Переключение между светлой / темной темой"
      :command.ui/toggle-right-sidebar         "Переключить боковую панель"
      :command.ui/toggle-right-sidebar         "Переключить боковую панель"
      :command.ui/toggle-settings              "Переключить параметры"
      :command.ui/toggle-settings              "Переключить параметры"
-     :command.ui/toggle-new-block             "Переключение Enter/Shift+Enter для перехода на новую строку"
      :command.go/journals                     "Перейти в Дневники"
      :command.go/journals                     "Перейти в Дневники"
      :command.ui/toggle-wide-mode             "Переключить широкоформатный режим"
      :command.ui/toggle-wide-mode             "Переключить широкоформатный режим"
      :command.ui/toggle-brackets              "Переключить скобки"
      :command.ui/toggle-brackets              "Переключить скобки"
      :command.search/re-index                 "Восстановить индекс поиска"
      :command.search/re-index                 "Восстановить индекс поиска"
-     :command.graph/re-index                  "Переиндексировать весь граф"
      :command.editor/bold                     "Жирный"
      :command.editor/bold                     "Жирный"
      :command.editor/italics                  "Курсив"
      :command.editor/italics                  "Курсив"
      :command.editor/insert-link              "HTML ссылка"
      :command.editor/insert-link              "HTML ссылка"
@@ -339,12 +329,10 @@
      :command.ui/toggle-left-sidebar         "Aktiver venstre sidestolpe"
      :command.ui/toggle-left-sidebar         "Aktiver venstre sidestolpe"
      :command.ui/toggle-right-sidebar        "Aktiver høyre sidestolpe"
      :command.ui/toggle-right-sidebar        "Aktiver høyre sidestolpe"
      :command.ui/toggle-settings             "Åpne innstillinger"
      :command.ui/toggle-settings             "Åpne innstillinger"
-     :command.ui/toggle-new-block            "Veksle mellom Enter og Shift+Enter for ny linje"
      :command.go/journals                    "Gå til dagbok"
      :command.go/journals                    "Gå til dagbok"
      :command.ui/toggle-wide-mode            "Aktiver vid-modus"
      :command.ui/toggle-wide-mode            "Aktiver vid-modus"
      :command.ui/toggle-brackets             "Aktiver vising av klammer"
      :command.ui/toggle-brackets             "Aktiver vising av klammer"
      :command.search/re-index                "Gjenoppbygg søkeindeks"
      :command.search/re-index                "Gjenoppbygg søkeindeks"
-     :command.graph/re-index                 "Reindekser hele diagrammet"
      :command.editor/bold                    "Fet"
      :command.editor/bold                    "Fet"
      :command.editor/italics                 "Kursiv"
      :command.editor/italics                 "Kursiv"
      :command.editor/insert-link             "HTML lenke"
      :command.editor/insert-link             "HTML lenke"
@@ -405,12 +393,10 @@
      :command.ui/toggle-theme                "Alternar entre tema claro/escuro"
      :command.ui/toggle-theme                "Alternar entre tema claro/escuro"
      :command.ui/toggle-right-sidebar        "Alternar barra lateral"
      :command.ui/toggle-right-sidebar        "Alternar barra lateral"
      :command.ui/toggle-settings             "Alternar Opções"
      :command.ui/toggle-settings             "Alternar Opções"
-     :command.ui/toggle-new-block            "Alternar Enter/Shift+Enter para criar novas linhas"
      :command.go/journals                    "Ir para diários"
      :command.go/journals                    "Ir para diários"
      :command.ui/toggle-wide-mode            "Alternar modo de ecrã amplo"
      :command.ui/toggle-wide-mode            "Alternar modo de ecrã amplo"
      :command.ui/toggle-brackets             "Alternar parênteses rectos"
      :command.ui/toggle-brackets             "Alternar parênteses rectos"
      :command.search/re-index                "Reconstruir índice de pesquisa"
      :command.search/re-index                "Reconstruir índice de pesquisa"
-     :command.graph/re-index                 "Reindexar o grafo completo"
      :command.editor/bold                    "Negrito"
      :command.editor/bold                    "Negrito"
      :command.editor/italics                 "Itálico"
      :command.editor/italics                 "Itálico"
      :command.editor/insert-link             "Inserir ligação html"
      :command.editor/insert-link             "Inserir ligação html"
@@ -471,12 +457,10 @@
      :command.ui/toggle-theme                "Alternar entre tema claro/escuro"
      :command.ui/toggle-theme                "Alternar entre tema claro/escuro"
      :command.ui/toggle-right-sidebar        "Alternar barra lateral"
      :command.ui/toggle-right-sidebar        "Alternar barra lateral"
      :command.ui/toggle-settings             "Alternar Opções"
      :command.ui/toggle-settings             "Alternar Opções"
-     :command.ui/toggle-new-block            "Alternar Enter/Shift+Enter para criar novas linhas"
      :command.go/journals                    "Ir para diários"
      :command.go/journals                    "Ir para diários"
      :command.ui/toggle-wide-mode            "Alternar largura extendida"
      :command.ui/toggle-wide-mode            "Alternar largura extendida"
      :command.ui/toggle-brackets             "Alternar colchetes"
      :command.ui/toggle-brackets             "Alternar colchetes"
      :command.search/re-index                "Reconstruir índice de pesquisa"
      :command.search/re-index                "Reconstruir índice de pesquisa"
-     :command.graph/re-index                 "Reindexar o grafo completo"
      :command.editor/bold                    "Negrito"
      :command.editor/bold                    "Negrito"
      :command.editor/italics                 "Itálico"
      :command.editor/italics                 "Itálico"
      :command.editor/insert-link             "Inserir vínculo"
      :command.editor/insert-link             "Inserir vínculo"