Skip to content

Commit

Permalink
Make dictionary namespaces bb compatible
Browse files Browse the repository at this point in the history
Now that translations are just data no excuse for them not being bb
compatible. Also gets rid of needless sexp parsing
  • Loading branch information
logseq-cldwalker committed Mar 28, 2022
1 parent 5635469 commit f4839da
Showing 9 changed files with 71 additions and 128 deletions.
4 changes: 3 additions & 1 deletion bb.edn
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
{:paths ["scripts/src"]
{:paths ["scripts/src" "src/main"]
:deps
{medley/medley {:mvn/version "1.3.0"}}
:tasks
{dev:watch
logseq.tasks.dev/watch
7 changes: 2 additions & 5 deletions docs/contributing-to-translations.md
Original file line number Diff line number Diff line change
@@ -16,10 +16,7 @@ In order to run the commands in this doc, you will need to install
Language translations are in two files,
[frontend/dicts.cljs](https://github.com/logseq/logseq/blob/master/src/main/frontend/dicts.cljs)
and
[shortcut/dict.cljs](https://github.com/logseq/logseq/blob/master/src/main/frontend/modules/shortcut/dict.cljs).
When translating `shortcut/dict.cljs` you will want to refer to
https://github.com/logseq/logseq/blob/master/src/main/frontend/modules/shortcut/config.cljs
for the English equivalent.
[shortcut/dict.cljs](https://github.com/logseq/logseq/blob/master/src/main/frontend/modules/shortcut/dicts.cljs).

## Language Overview

@@ -88,4 +85,4 @@ detect this error and helpfully show you what was typoed.

To add a new language, add an entry to `frontend.dicts/languages`. Then add a
new locale keyword to `frontend.dicts/dicts` and to
`frontend.modules.shortcut.dict/dict` and start translating as described above.
`frontend.modules.shortcut.dicts/dicts` and start translating as described above.
52 changes: 11 additions & 41 deletions scripts/src/logseq/tasks/lang.clj
Original file line number Diff line number Diff line change
@@ -1,58 +1,28 @@
(ns logseq.tasks.lang
"Tasks related to language translations"
(:require [logseq.tasks.rewrite-clj :as rewrite-clj]
[clojure.set :as set]
(:require [clojure.set :as set]
[frontend.dicts :as dicts]
[frontend.modules.shortcut.dicts :as shortcut-dicts]
[logseq.tasks.util :as task-util]))

(defn- get-dicts
[]
(dissoc (rewrite-clj/metadata-var-sexp "src/main/frontend/dicts.cljs" "dicts")
:tongue/fallback))
(dissoc dicts/dicts :tongue/fallback))

(defn- get-non-en-shortcuts
(defn- get-all-dicts
[]
(nth (rewrite-clj/metadata-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/metadata-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/metadata-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)))
(merge-with merge (get-dicts) shortcut-dicts/dicts))

(defn- get-languages
[]
(->> (rewrite-clj/var-sexp "src/main/frontend/dicts.cljs" "languages")
(->> dicts/languages
(map (juxt :value :label))
(into {})))

(defn list-langs
"List translated langagues with their number of translations"
[]
(let [dicts (merge-with merge (get-dicts) (get-shortcuts))
(let [dicts (get-all-dicts)
en-count (count (dicts :en))
langs (get-languages)]
(->> dicts
@@ -79,7 +49,7 @@
(println "Language" lang "does not have an entry in dicts.cljs")
(System/exit 1))
all-dicts [[(get-dicts) "frontend/dicts.cljs"]
[(get-shortcuts) "shortcut/dict.cljs"]]
[shortcut-dicts/dicts "shortcut/dicts.cljs"]]
all-missing (map (fn [[dicts file]]
[(select-keys (dicts :en)
(set/difference (set (keys (dicts :en)))
@@ -102,7 +72,7 @@
(defn invalid-translations
"Lists translation that don't exist in English"
[]
(let [dicts (merge-with merge (get-dicts) (get-shortcuts))
(let [dicts (get-all-dicts)
;; For now defined as :en but clj-kondo analysis could be more thorough
valid-keys (set (keys (dicts :en)))
invalid-dicts
@@ -122,7 +92,7 @@
(defn list-duplicates
"Lists translations that are the same as the one in English"
[& args]
(let [dicts (merge-with merge (get-dicts) (get-shortcuts))
(let [dicts (get-all-dicts)
en-dicts (dicts :en)
lang (or (keyword (first args))
(task-util/print-usage "LOCALE"))
27 changes: 0 additions & 27 deletions scripts/src/logseq/tasks/rewrite_clj.clj

This file was deleted.

5 changes: 4 additions & 1 deletion src/main/frontend/components/search.cljs
Original file line number Diff line number Diff line change
@@ -339,6 +339,9 @@
(search-result-item "Page" original-name))
nil))}))])

(def default-placeholder
(if config/publishing? (t :search/publishing) (t :search)))

(rum/defcs search-modal < rum/reactive
(shortcut/disable-all-shortcuts)
(mixins/event-mixin
@@ -366,7 +369,7 @@
(t :graph-search)
:page
(t :page-search)
(t :search))
default-placeholder)
:auto-complete (if (util/chrome?) "chrome-off" "off") ; off not working here
:value search-q
:on-change (fn [e]
10 changes: 7 additions & 3 deletions src/main/frontend/context/i18n.cljs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
(ns frontend.context.i18n
(:require [frontend.dicts :as dicts]
[frontend.modules.shortcut.dict :as shortcut-dict]
[frontend.modules.shortcut.dicts :as shortcut-dicts]
[medley.core :refer [deep-merge]]
[tongue.core :as tongue]
[frontend.state :as state]))

;; TODO
@@ -16,14 +17,17 @@

(defonce translate-dicts (atom {}))

(defn- translate [dicts]
(tongue/build-translate dicts))

(defn t
[& args]
(let [preferred-language (keyword (state/sub :preferred-language))
_ (when (nil? preferred-language)
(state/set-preferred-language! (fetch-local-language)))
dicts (or (get @translate-dicts preferred-language)
(let [result (some-> (deep-merge dicts/dicts shortcut-dict/dicts)
dicts/translate)]
(let [result (some-> (deep-merge dicts/dicts shortcut-dicts/dicts)
translate)]
(swap! translate-dicts assoc preferred-language result)
result))]
(apply (partial dicts preferred-language) args)))
66 changes: 26 additions & 40 deletions src/main/frontend/dicts.cljs → src/main/frontend/dicts.cljc
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
(ns frontend.dicts
(ns ^:bb-compatible frontend.dicts
"Provides dictionary entries for most of the application"
(:require [frontend.config :as config]
[shadow.resource :as rc]
[tongue.core :as tongue]))
#?(:cljs (:require [shadow.resource :as rc])))

(def ^:large-vars/data-var dicts
{:en {:tutorial/text (rc/inline "tutorial-en.md")
:tutorial/dummy-notes (rc/inline "dummy-notes-en.md")
{:en {:tutorial/text #?(:cljs (rc/inline "tutorial-en.md")
:default "tutorial-en.md")
:tutorial/dummy-notes #?(:cljs (rc/inline "dummy-notes-en.md")
:default "dummy-notes-en.md")
:on-boarding/title "Hi, welcome to Logseq!"
:on-boarding/sharing "sharing"
:on-boarding/is-a " is a "
@@ -296,9 +296,8 @@
:sync-from-local-changes-detected "Refresh detects and processes files modified on your disk and diverged from the actual Logseq page content. Continue?"

:unlink "unlink"
:search (if config/publishing?
"Search"
"Search or create page")
:search/publishing "Search"
:search "Search or create page"
:page-search "Search in the current page"
:graph-search "Search graph"
:new-page "New page"
@@ -596,9 +595,8 @@
:re-index "Neu indizieren"
:export-json "Als JSON exportieren"
:unlink "Verknüpfung aufheben"
:search (if config/publishing?
"Suchen"
"Suchen oder Seite erstellen")
:search/publishing "Suchen"
:search "Suchen oder Seite erstellen"
:new-page "Neue Seite"
:new-file "Neue Datei"
:graph "Graph"
@@ -881,9 +879,8 @@
:re-index "Ré-indexer"
:export-json "Exporter au format JSON"
:unlink "délier"
:search (if config/publishing?
"Rechercher"
"Rechercher ou Créer la Page")
:search/publishing "Rechercher"
:search "Rechercher ou Créer la Page"
:new-page "Nouvelle page"
:new-file "Nouveau fichier"
:graph "Graphe"
@@ -1197,9 +1194,8 @@
:export-opml "以 OPML 格式导出"
:convert-markdown "转换 Markdown 格式(Unordered list 或 Heading)"
:unlink "解除绑定"
:search (if config/publishing?
"搜索"
"搜索或者创建新页面")
:search/publishing "搜索"
:search "搜索或者创建新页面"
:page-search "在当前页面搜索"
:graph-search "搜索图谱"
:new-page "新页面"
@@ -1526,9 +1522,8 @@
:export-opml "以 OPML 格式導出"
:convert-markdown "轉換 Markdown 格式(Unordered list 或 Heading)"
:unlink "解除綁定"
:search (if config/publishing?
"搜索"
"搜索或者創建新頁面")
:search/publishing "搜索"
:search "搜索或者創建新頁面"
:new-page "新頁面"
:graph "圖譜"
:publishing "發布/下載 HTML 文件"
@@ -2019,9 +2014,8 @@
:close "Cerrar"
:re-index "Reindexar"
:unlink "desenlazar"
:search (if config/publishing?
"Buscar"
"Buscar o Crear Página")
:search/publishing "Buscar"
:search "Buscar o Crear Página"
:page-search "Buscar en la página actual"
:new-page "Nueva página"
:new-file "Nuevo archivo"
@@ -2358,9 +2352,8 @@
:sync-from-local-files "Oppfrisk"
:sync-from-local-files-detail "Importer endringer fra lokale filer"
:unlink "koble fra"
:search (if config/publishing?
"Søk"
"Søk eller Opprett Side")
:search/publishing "Søk"
:search "Søk eller Opprett Side"
:page-search "Søk i denne siden"
:graph-search "Søk graf"
:new-page "Ny side"
@@ -2731,9 +2724,8 @@
:delete "Apagar"
:re-index "Re-indexar"
:unlink "remover ligação"
:search (if config/publishing?
"Pesquisar"
"Pesquisar ou Criar Página")
:search/publishing "Pesquisar"
:search "Pesquisar ou Criar Página"
:page-search "Pesquisar na página atual"
:graph-search "Pesquisar grafo"
:new-page "Nova página"
@@ -3132,9 +3124,8 @@
:sync-from-local-files "Atualizar"
:sync-from-local-files-detail "Importar alterações de ficheiros locais"
:unlink "remover ligação"
:search (if config/publishing?
"Pesquisar"
"Pesquisar ou Criar Página")
:search/publishing "Pesquisar"
:search "Pesquisar ou Criar Página"
:page-search "Pesquisar na página atual"
:graph-search "Pesquisar grafo"
:new-page "Nova página"
@@ -3515,9 +3506,8 @@
:re-index "Переиндексировать (перестроить граф)"
:sync-from-local-files "Обновить (импортировать изменния из локальных файлов)"
:unlink "отвязать"
:search (if config/publishing?
"Искать"
"Искать или создать страницу")
:search/publishing "Искать"
:search "Искать или создать страницу"
:page-search "Искать на текущей странице"
:graph-search "Искать граф"
:new-page "Новая страница"
@@ -3614,7 +3604,6 @@

:tongue/fallback :en})


(def languages [{:label "English" :value :en}
{:label "Français" :value :fr}
{:label "Deutsch" :value :de}
@@ -3626,6 +3615,3 @@
{:label "Português (Brasileiro)" :value :pt-BR}
{:label "Português (Europeu)" :value :pt-PT}
{:label "Русский" :value :ru}])

(defn translate [dicts]
(tongue/build-translate dicts))
Loading

0 comments on commit f4839da

Please sign in to comment.