Skip to content

Commit

Permalink
Update lang tasks to also read shortcuts
Browse files Browse the repository at this point in the history
- 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
  • Loading branch information
logseq-cldwalker committed Feb 2, 2022
1 parent f9e39eb commit 0fcdb49
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 69 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Expand Up @@ -103,8 +103,8 @@ jobs:
- name: Carve lint for unused vars
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:
runs-on: ubuntu-latest
Expand Down
4 changes: 2 additions & 2 deletions bb.edn
Expand Up @@ -23,5 +23,5 @@
lang:duplicates
logseq.tasks.lang/list-duplicates

lang:invalid-dicts
logseq.tasks.lang/invalid-dicts}}
lang:invalid-translations
logseq.tasks.lang/invalid-translations}}
27 changes: 12 additions & 15 deletions docs/contributing-to-translations.md
Expand Up @@ -29,24 +29,23 @@ 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 |
| :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
```

_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
Expand All @@ -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
you're hoping to have this list drop to zero.

Expand Down
104 changes: 73 additions & 31 deletions scripts/src/logseq/tasks/lang.clj
@@ -1,33 +1,68 @@
(ns logseq.tasks.lang
"Tasks related to language translations"
(:require [logseq.rewrite-clj :as rewrite-clj]
(:require [logseq.tasks.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"])
(dissoc (rewrite-clj/var-sexp "src/main/frontend/dicts.cljs" "dicts")
: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
[]
(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
"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))
langs (into {} (map (juxt :value :label) (get-languages)))]
langs (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)))
(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)
Expand All @@ -39,27 +74,34 @@
[& args]
(let [lang (or (keyword (first args))
(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")
(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!")
(->> (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))))

(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
valid-keys (set (keys (dicts :en)))
invalid-dicts
Expand All @@ -70,16 +112,16 @@
(set/difference (set (keys get-dicts))
valid-keys)))))]
(if (empty? invalid-dicts)
(println "All dicts have valid keys!")
(println "All translations have valid keys!")
(do
(println "Invalid dict keys found:")
(println "Invalid translation 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)
(let [dicts (merge-with merge (get-dicts) (get-shortcuts))
en-dicts (dicts :en)
lang (or (keyword (first args))
(task-util/print-usage "LOCALE"))
Expand Down
@@ -1,4 +1,4 @@
(ns logseq.rewrite-clj
(ns logseq.tasks.rewrite-clj
"Rewrite-clj fns"
(:require [rewrite-clj.zip :as z]))

Expand All @@ -10,6 +10,6 @@
z/sexpr))

(defn var-sexp
[[string-var file]]
[file string-var]
(let [zloc (z/of-string (slurp file))]
(find-symbol-first-right-sexpr zloc (symbol string-var))))
18 changes: 1 addition & 17 deletions src/main/frontend/modules/shortcut/dict.cljs
Expand Up @@ -41,12 +41,10 @@
:command.ui/toggle-theme "在暗色/亮色主题之间切换"
:command.ui/toggle-right-sidebar "启用/关闭右侧栏"
:command.ui/toggle-settings "显示/关闭设置"
:command.ui/toggle-new-block "切换 Enter/Shift+Enter 以插入新块"
:command.go/journals "跳转到日记"
:command.ui/toggle-wide-mode "切换宽屏模式"
:command.ui/toggle-brackets "切换是否显示括号"
:command.search/re-index "重新建立搜索索引"
:command.graph/re-index "重新建立图库索引"
:command.editor/bold "粗体"
:command.editor/italics "斜体"
:command.editor/insert-link "Html 链接"
Expand Down Expand Up @@ -96,7 +94,6 @@
:command.ui/toggle-document-mode "切換文檔模式"
:command.ui/toggle-theme "“在暗色/亮色主題之間切換”"
:command.ui/toggle-right-sidebar "啟用/關閉右側欄"
:command.ui/toggle-new-block "切換 Enter/Shift+Enter 以插入新塊"
:command.go/journals "跳轉到日記"}
:de
{:shortcut.category/formatting "Formatierung"
Expand All @@ -118,7 +115,6 @@
:command.ui/toggle-document-mode "Dokumentenmodus umschalten"
:command.ui/toggle-theme "Umschalten zwischen dunklem/hellem Thema"
: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.git/commit "Git Commit-Nachricht"
:command.editor/select-block-down "Block unterhalb auswählen"
Expand Down Expand Up @@ -146,7 +142,6 @@
:command.ui/toggle-document-mode "Intervertir le mode document"
:command.ui/toggle-theme "Intervertir le thème foncé/clair"
: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"}
:af
{:shortcut.category/formatting "Formatering"
Expand All @@ -171,8 +166,7 @@
:command.ui/toggle-document-mode "Wissel dokument modus"
:command.go/journals "Spring na joernale"
: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
{:shortcut.category/formatting "Formato"
:shortcut.category/basics "Básico"
Expand Down Expand Up @@ -206,12 +200,10 @@
:command.ui/toggle-theme "Alternar entre tema claro/oscuro"
:command.ui/toggle-right-sidebar "Alternar barra lateral"
: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.ui/toggle-wide-mode "Alternar modo ancho"
:command.ui/toggle-brackets "Alternar corchetes"
:command.search/re-index "Reconstruir índice de búsqueda"
:command.graph/re-index "Reindexar el grafo completo"
:command.editor/bold "Negrita"
:command.editor/italics "Cursiva"
:command.editor/insert-link "Enlace html"
Expand Down Expand Up @@ -272,12 +264,10 @@
:command.ui/toggle-theme "Переключение между светлой / темной темой"
:command.ui/toggle-right-sidebar "Переключить боковую панель"
:command.ui/toggle-settings "Переключить параметры"
:command.ui/toggle-new-block "Переключение Enter/Shift+Enter для перехода на новую строку"
:command.go/journals "Перейти в Дневники"
:command.ui/toggle-wide-mode "Переключить широкоформатный режим"
:command.ui/toggle-brackets "Переключить скобки"
:command.search/re-index "Восстановить индекс поиска"
:command.graph/re-index "Переиндексировать весь граф"
:command.editor/bold "Жирный"
:command.editor/italics "Курсив"
:command.editor/insert-link "HTML ссылка"
Expand Down Expand Up @@ -339,12 +329,10 @@
:command.ui/toggle-left-sidebar "Aktiver venstre sidestolpe"
:command.ui/toggle-right-sidebar "Aktiver høyre sidestolpe"
: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.ui/toggle-wide-mode "Aktiver vid-modus"
:command.ui/toggle-brackets "Aktiver vising av klammer"
:command.search/re-index "Gjenoppbygg søkeindeks"
:command.graph/re-index "Reindekser hele diagrammet"
:command.editor/bold "Fet"
:command.editor/italics "Kursiv"
:command.editor/insert-link "HTML lenke"
Expand Down Expand Up @@ -405,12 +393,10 @@
:command.ui/toggle-theme "Alternar entre tema claro/escuro"
:command.ui/toggle-right-sidebar "Alternar barra lateral"
: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.ui/toggle-wide-mode "Alternar modo de ecrã amplo"
:command.ui/toggle-brackets "Alternar parênteses rectos"
:command.search/re-index "Reconstruir índice de pesquisa"
:command.graph/re-index "Reindexar o grafo completo"
:command.editor/bold "Negrito"
:command.editor/italics "Itálico"
:command.editor/insert-link "Inserir ligação html"
Expand Down Expand Up @@ -471,12 +457,10 @@
:command.ui/toggle-theme "Alternar entre tema claro/escuro"
:command.ui/toggle-right-sidebar "Alternar barra lateral"
: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.ui/toggle-wide-mode "Alternar largura extendida"
:command.ui/toggle-brackets "Alternar colchetes"
:command.search/re-index "Reconstruir índice de pesquisa"
:command.graph/re-index "Reindexar o grafo completo"
:command.editor/bold "Negrito"
:command.editor/italics "Itálico"
:command.editor/insert-link "Inserir vínculo"
Expand Down

0 comments on commit 0fcdb49

Please sign in to comment.