Improve i18n module.

This commit is contained in:
Andrey Antukh 2020-01-16 19:28:19 +01:00
parent 76e19a4b41
commit 595cdd66c7
10 changed files with 150 additions and 141 deletions

View file

@ -30,15 +30,13 @@
;; --- i18n
(declare reinit)
(rx/sub! i18n/locale-sub #(reinit))
;; (rx/sub! i18n/locale-sub #(reinit))
;; --- Error Handling
(defn- on-navigate
[router path]
(let [match (rt/match router path)]
(prn "main$on-navigate" path)
(cond
(and (= path "") (:auth storage))
(st/emit! (rt/nav :dashboard-projects))

View file

@ -22,7 +22,7 @@
[uxbox.main.ui.dashboard.common :as common]
[uxbox.util.data :refer [read-string]]
[uxbox.util.dom :as dom]
[uxbox.util.i18n :as t :refer [tr]]
[uxbox.util.i18n :as i18n :refer [t tr]]
[uxbox.util.router :as rt]
[uxbox.util.time :as dt]))

View file

@ -5,8 +5,8 @@
;; This Source Code Form is "Incompatible With Secondary Licenses", as
;; defined by the Mozilla Public License, v. 2.0.
;;
;; Copyright (c) 2015-2017 Andrey Antukh <niwi@niwi.nz>
;; Copyright (c) 2015-2017 Juan de la Cruz <delacruzgarciajuan@gmail.com>
;; Copyright (c) 2015-2020 Andrey Antukh <niwi@niwi.nz>
;; Copyright (c) 2015-2020 Juan de la Cruz <delacruzgarciajuan@gmail.com>
(ns uxbox.main.ui.profile.recovery
(:require
@ -23,7 +23,7 @@
[uxbox.util.messages :as um]
[uxbox.util.dom :as dom]
[uxbox.util.forms :as fm]
[uxbox.util.i18n :as i18n]
[uxbox.util.i18n :as i18n :refer [t]]
[uxbox.util.router :as rt]))
(s/def ::token ::us/not-empty-string)
@ -33,16 +33,16 @@
(mf/defc recovery-form
[]
(let [{:keys [data] :as form} (fm/use-form ::recovery-form {})
tr (i18n/use-translations)
locale (i18n/use-locale)
on-success
(fn []
(st/emit! (um/info (tr "profile.recovery.password-changed"))
(st/emit! (um/info (t locale "profile.recovery.password-changed"))
(rt/nav :login)))
on-error
(fn []
(st/emit! (um/error (tr "profile.recovery.invalid-token"))))
(st/emit! (um/error (t locale "profile.recovery.invalid-token"))))
on-submit
(fn [event]
@ -58,7 +58,7 @@
:class (fm/error-class form :token)
:on-blur (fm/on-input-blur form :token)
:on-change (fm/on-input-change form :token)
:placeholder (tr "profile.recovery.token")
:placeholder (t locale "profile.recovery.token")
:auto-complete "off"
:type "text"}]
[:input.input-text
@ -67,18 +67,18 @@
:class (fm/error-class form :password)
:on-blur (fm/on-input-blur form :password)
:on-change (fm/on-input-change form :password)
:placeholder (tr "profile.recovery.password")
:placeholder (t locale "profile.recovery.password")
:type "password"}]
[:input.btn-primary
{:name "recover"
:class (when-not (:valid form) "btn-disabled")
:disabled (not (:valid form))
:value (tr "profile.recovery.submit-recover")
:value (t locale "profile.recovery.submit-recover")
:type "submit"}]
[:div.login-links
[:a {:on-click #(st/emit! (rt/nav :login))}
(tr "profile.recovery.go-to-login")]]]]))
(t locale "profile.recovery.go-to-login")]]]]))
;; --- Recovery Request Page

View file

@ -5,8 +5,8 @@
;; This Source Code Form is "Incompatible With Secondary Licenses", as
;; defined by the Mozilla Public License, v. 2.0.
;;
;; Copyright (c) 2015-2017 Andrey Antukh <niwi@niwi.nz>
;; Copyright (c) 2015-2017 Juan de la Cruz <delacruzgarciajuan@gmail.com>
;; Copyright (c) 2015-2020 Andrey Antukh <niwi@niwi.nz>
;; Copyright (c) 2015-2020 Juan de la Cruz <delacruzgarciajuan@gmail.com>
(ns uxbox.main.ui.profile.recovery-request
(:require
@ -23,7 +23,7 @@
[uxbox.util.messages :as um]
[uxbox.util.dom :as dom]
[uxbox.util.forms :as fm]
[uxbox.util.i18n :as i18n]
[uxbox.util.i18n :as i18n :refer [t]]
[uxbox.util.router :as rt]))
(s/def ::username ::us/not-empty-string)
@ -32,10 +32,11 @@
(mf/defc recovery-form
[]
(let [{:keys [data] :as form} (fm/use-form ::recovery-request-form {})
tr (i18n/use-translations)
locale (i18n/use-locale)
on-success
(fn []
(st/emit! (um/info (tr "profile.recovery.recovery-token-sent"))
(st/emit! (um/info (t locale "profile.recovery.recovery-token-sent"))
(rt/nav :profile-recovery)))
on-submit
@ -50,18 +51,18 @@
:class (fm/error-class form :username)
:on-blur (fm/on-input-blur form :username)
:on-change (fm/on-input-change form :username)
:placeholder (tr "profile.recovery.username-or-email")
:placeholder (t locale "profile.recovery.username-or-email")
:type "text"}]
[:input.btn-primary
{:name "login"
:class (when-not (:valid form) "btn-disabled")
:disabled (not (:valid form))
:value (tr "profile.recovery.submit-request")
:value (t locale "profile.recovery.submit-request")
:type "submit"}]
[:div.login-links
[:a {:on-click #(st/emit! (rt/nav :login))}
(tr "profile.recovery.go-to-login")]]]]))
(t locale "profile.recovery.go-to-login")]]]]))
;; --- Recovery Request Page

View file

@ -18,7 +18,7 @@
[uxbox.main.ui.workspace.sortable :refer [use-sortable]]
[uxbox.util.data :refer [classnames enumerate]]
[uxbox.util.dom :as dom]
[uxbox.util.i18n :as i18n]))
[uxbox.util.i18n :as i18n :refer [t]]))
(def ^:private shapes-iref
(-> (l/key :shapes)
@ -235,7 +235,7 @@
(mf/defc layers-toolbox
[{:keys [page] :as props}]
(let [tr (i18n/use-translations)
(let [locale (i18n/use-locale)
on-click #(st/emit! (dw/toggle-layout-flag :layers))
selected (mf/deref refs/selected-shapes)
@ -258,9 +258,8 @@
[:div#layers.tool-window
[:div.tool-window-bar
[:div.tool-window-icon i/layers]
[:span (tr "workspace.sidebar.layers")]
;; [:div.tool-window-close {:on-click on-click} i/close]
]
[:span (t locale "workspace.sidebar.layers")]
#_[:div.tool-window-close {:on-click on-click} i/close]]
[:div.tool-window-content
[:& canvas-list {:canvas canvas
:shapes all-shapes

View file

@ -21,7 +21,7 @@
[uxbox.main.ui.workspace.sortable :refer [use-sortable]]
[uxbox.util.data :refer [classnames enumerate]]
[uxbox.util.dom :as dom]
[uxbox.util.i18n :as i18n :refer [tr]]
[uxbox.util.i18n :as i18n :refer [t]]
[uxbox.util.router :as rt]))
;; --- Page Item
@ -129,10 +129,10 @@
(mf/defc sitemap-toolbox
[{:keys [file page] :as props}]
(let [on-create-click #(st/emit! dp/create-empty-page)
tr (i18n/use-translations)]
locale (i18n/use-locale)]
[:div.sitemap.tool-window
[:div.tool-window-bar
[:span (tr "workspace.sidebar.sitemap")]
[:span (t locale "workspace.sidebar.sitemap")]
[:div.add-page {:on-click on-create-click} i/close]]
[:div.tool-window-content
[:& pages-list {:file file :current-page page}]]]))

View file

@ -48,7 +48,16 @@
[r]
(instance? C r))
(defn- internal-tr
;; A main public api for translate strings.
;; A marker type that is used just for mark
;; a parameter that reprsentes the counter.
(defn c
[x]
(C. x))
(defn t
([locale code]
(let [code (name code)
value (gobj/getValueByKeys translations code locale)
@ -66,27 +75,16 @@
value)]
(apply str/format value (map #(if (c? %) @% %) args)))))
;; A main public api for translate strings.
;; A marker type that is used just for mark
;; a parameter that reprsentes the counter.
(defn c
[x]
(C. x))
(defn tr
([code] (internal-tr locale code))
([code & args] (apply internal-tr locale code args)))
([code] (t locale code))
([code & args] (apply t locale code args)))
(defn use-translations
(defn use-locale
[]
(let [[locale set-locale] (mf/useState locale)
tr-fn (mf/useMemo (fn [] (partial internal-tr locale))
#js [locale])]
(let [[locale set-locale] (mf/useState locale)]
(mf/useEffect (fn []
(let [sub (rx/sub! locale-sub #(set-locale %))]
#(rx/dispose! sub)))
#js [])
tr-fn))
locale))