improve i18n

This commit is contained in:
Mega Yu
2026-04-10 14:39:29 +08:00
parent c8a13cb70a
commit 3ac92e7485
35 changed files with 990 additions and 64 deletions

View File

@@ -133,9 +133,10 @@
;; Matches files containing dynamic translation-call `if`/`or` forms, `i18n-key`
;; `if` forms, literal `:prompt-key`/`:title-key` options, `built-in-colors`,
;; `navs` vectors, date NLP labels, built-in property/class definitions, or
;; `:shortcut.category/*` keys for later exact extraction.
;; `:shortcut.category/*` keys, or supported dynamic `keyword` i18n patterns for
;; later exact extraction.
(def ^:private derived-ui-key-candidate-rg-pattern
"(?:[(](?:[[:alnum:]._-]+/)?tt?[[:space:]]+[(](?:if|or)\\b|:?i18n-key[[:space:]]+[(]if\\b|:prompt-key[[:space:]]+:|:title-key[[:space:]]+:|[(]def[[:space:]]+built-in-colors\\b|\\bnavs[[:space:]]+\\[|[(]def[[:space:]]+nlp-pages\\b|[(]def[[:space:]]+\\^:large-vars/data-var[[:space:]]+built-in-(?:properties|classes)\\b|:shortcut\\.category/)")
"(?:[(](?:[[:alnum:]._-]+/)?tt?[[:space:]]+[(](?:if|or)\\b|:?i18n-key[[:space:]]+[(]if\\b|:prompt-key[[:space:]]+:|:title-key[[:space:]]+:|[(]def[[:space:]]+built-in-colors\\b|\\bnavs[[:space:]]+\\[|[(]def[[:space:]]+nlp-pages\\b|[(]def[[:space:]]+\\^:large-vars/data-var[[:space:]]+built-in-(?:properties|classes)\\b|:shortcut\\.category/|[(]keyword[[:space:]]+\"flashcard\\.rating\")")
(def ^:private built-in-db-ident-candidate-rg-pattern
"[(]def[[:space:]]+\\^:large-vars/data-var[[:space:]]+built-in-(?:properties|classes)\\b")

View File

@@ -78,6 +78,14 @@
(def ^:private shortcut-category-key-pattern
#":shortcut\.category/[A-Za-z0-9._-]+")
;; Matches FSRS flashcard rating translation keys derived with
;; `(keyword "flashcard.rating" ...)`.
(def ^:private flashcard-rating-label-keyword-pattern
#"\(keyword\s+\"flashcard\.rating\"\s+\(name\s+[^\)]+\)\)")
(def ^:private flashcard-rating-desc-keyword-pattern
#"\(keyword\s+\"flashcard\.rating\"\s+\(str\s+\(name\s+[^\)]+\)\s+\"-desc\"\)\)")
;; Matches the start of `(comment ...)` forms.
(def ^:private comment-form-prefix-pattern
#"\(comment\b")
@@ -353,6 +361,18 @@
(map #(keyword (subs % 1)))
set))
(defn flashcard-rating-translation-keys
"Return `:flashcard.rating/*` keys derived from supported FSRS dynamic
keyword construction."
[content]
(let [ratings [:again :hard :good :easy]]
(into #{}
(concat
(when (re-find flashcard-rating-label-keyword-pattern content)
(map #(keyword "flashcard.rating" (name %)) ratings))
(when (re-find flashcard-rating-desc-keyword-pattern content)
(map #(keyword "flashcard.rating" (str (name %) "-desc")) ratings))))))
(defn derived-translation-keys
"Return translation keys derived from supported non-literal UI patterns.
@@ -366,7 +386,8 @@
(built-in-color-keys content)
(left-sidebar-translation-keys content)
(date-nlp-translation-keys content)
(shortcut-category-translation-keys content)]
(shortcut-category-translation-keys content)
(flashcard-rating-translation-keys content)]
(apply concat)
set))