First pass

This commit is contained in:
Gabriel Horner
2022-01-27 16:38:30 -05:00
parent f02c6d3605
commit 115b0266f5
4 changed files with 110 additions and 0 deletions

10
bb.edn Normal file
View 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}}

View 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))))

View 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)))

View 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)))