Refactor and simplify dicts

- frontend.dicts encapsulates dicts behavior for all other namespaces
- Each dict ns only has one var which prepares us
- No longer need shortcut.dicts
- Fix remaining lints that were broken
- Also bring back frontend.dicts
- Update guide
- Add a false binding to :editor/toggle-undo-redo-mode which throws a
  needless warning
This commit is contained in:
Gabriel Horner
2023-05-18 18:13:50 -04:00
parent 0434a2b7f8
commit 514b5faf6e
28 changed files with 383 additions and 446 deletions

View File

@@ -2,19 +2,14 @@
"Tasks related to language translations"
(:require [clojure.set :as set]
[clojure.string :as string]
[frontend.dicts.core :as dicts]
[frontend.modules.shortcut.dicts :as shortcut-dicts]
[frontend.dicts :as dicts]
[logseq.tasks.util :as task-util]
[babashka.cli :as cli]
[babashka.process :refer [shell]]))
(defn- get-dicts
[]
(dissoc dicts/dicts :tongue/fallback))
(defn- get-all-dicts
[]
(merge-with merge (get-dicts) shortcut-dicts/dicts))
dicts/dicts)
(defn- get-languages
[]
@@ -25,7 +20,7 @@
(defn list-langs
"List translated langagues with their number of translations"
[]
(let [dicts (get-all-dicts)
(let [dicts (get-dicts)
en-count (count (dicts :en))
langs (get-languages)]
(->> dicts
@@ -52,24 +47,20 @@
_ (when-not (contains? (get-languages) lang)
(println "Language" lang "does not have an entry in dicts/core.cljs")
(System/exit 1))
all-dicts [[(get-dicts) "frontend/dicts/core.cljs"]
[shortcut-dicts/dicts "shortcut/dicts.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)
dicts (get-dicts)
all-missing (select-keys (dicts :en)
(set/difference (set (keys (dicts :en)))
(set (keys (dicts lang)))))]
(if (-> all-missing count zero?)
(println "Language" lang "is fully translated!")
(let [sorted-missing (->> all-missing
(mapcat (fn [[m file]]
(map (fn [[k v]]
{:translation-key k
(map (fn [[k v]]
{:translation-key k
;; Shorten values
:string-to-translate (shorten v 50)
:file file})
m)))
:string-to-translate (shorten v 50)
:file (str "dicts/"
(-> lang name (string/replace "-" "_") string/lower-case)
".cljc")}))
(sort-by (juxt :file :translation-key)))]
(if (:copy options)
(doseq [[file missing-for-file] (group-by :file sorted-missing)]
@@ -84,7 +75,7 @@
language. This catches mistakes where another language has accidentally typoed
keys or added ones without updating :en"
[]
(let [dicts (get-all-dicts)
(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
@@ -137,7 +128,8 @@
(map #(keyword (subs % 4)))
(concat (mapcat val manual-ui-dicts))
set)
expected-dicts (set (keys (:en (get-dicts))))
expected-dicts (set (remove #(re-find #"^(command|shortcut)\." (str (namespace %)))
(keys (:en (get-dicts)))))
actual-only (set/difference actual-dicts expected-dicts)
expected-only (set/difference expected-dicts actual-dicts)]
(if (and (empty? actual-only) (empty? expected-only))
@@ -160,7 +152,7 @@
(defn list-duplicates
"Lists translations that are the same as the one in English"
[& args]
(let [dicts (get-all-dicts)
(let [dicts (get-dicts)
en-dicts (dicts :en)
lang (or (keyword (first args))
(task-util/print-usage "LOCALE"))