mirror of
https://github.com/logseq/logseq.git
synced 2026-04-24 22:25:01 +00:00
First pass
This commit is contained in:
10
bb.edn
Normal file
10
bb.edn
Normal file
@@ -0,0 +1,10 @@
|
||||
{:paths ["scripts/src"]
|
||||
:tasks
|
||||
{lang:list
|
||||
logseq.tasks.lang/lang-list
|
||||
|
||||
lang:missing
|
||||
logseq.tasks.lang/lang-missing
|
||||
|
||||
lang:invalid
|
||||
logseq.tasks.lang/lang-invalid}}
|
||||
15
scripts/src/logseq/rewrite_clj.clj
Normal file
15
scripts/src/logseq/rewrite_clj.clj
Normal file
@@ -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))))
|
||||
70
scripts/src/logseq/tasks/lang.clj
Normal file
70
scripts/src/logseq/tasks/lang.clj
Normal file
@@ -0,0 +1,70 @@
|
||||
(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 lang-list
|
||||
"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 lang-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 get-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)}))
|
||||
task-util/print-table))))
|
||||
|
||||
(defn lang-invalid
|
||||
"Lists translation keys that are invalid"
|
||||
[]
|
||||
(let [dicts (get-dicts)
|
||||
;; For now defined as :en but clj-kondo analysis would be more thorough
|
||||
valid-keys (set (keys (dicts :en)))]
|
||||
(->> (dissoc dicts :en)
|
||||
(mapcat (fn [[lang get-dicts]]
|
||||
(map
|
||||
#(hash-map :language lang :invalid-key %)
|
||||
(set/difference (set (keys get-dicts))
|
||||
valid-keys))))
|
||||
task-util/print-table)))
|
||||
15
scripts/src/logseq/tasks/util.clj
Normal file
15
scripts/src/logseq/tasks/util.clj
Normal file
@@ -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)))
|
||||
Reference in New Issue
Block a user