mirror of
https://github.com/penpot/penpot.git
synced 2025-07-15 06:55:15 +02:00
✨ Improve i18n module.
This commit is contained in:
parent
76e19a4b41
commit
595cdd66c7
10 changed files with 150 additions and 141 deletions
|
@ -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))
|
||||
|
|
|
@ -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]))
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}]]]))
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue