mirror of
https://github.com/penpot/penpot.git
synced 2025-03-15 17:21:17 -05:00
♻️ Refactor storage and i18n internals.
This commit is contained in:
parent
51c39d169f
commit
e9d5eccd16
2 changed files with 30 additions and 29 deletions
|
@ -8,16 +8,17 @@
|
|||
(ns uxbox.util.i18n
|
||||
"A i18n foundation."
|
||||
(:require
|
||||
[cuerdas.core :as str]
|
||||
[rumext.alpha :as mf]
|
||||
[beicon.core :as rx]
|
||||
[cuerdas.core :as str]
|
||||
[goog.object :as gobj]
|
||||
[okulary.core :as l]
|
||||
[rumext.alpha :as mf]
|
||||
[uxbox.config :as cfg]
|
||||
[uxbox.util.transit :as t]
|
||||
[uxbox.util.storage :refer [storage]]))
|
||||
[uxbox.util.storage :refer [storage]]
|
||||
[uxbox.util.transit :as t]))
|
||||
|
||||
(defonce locale (get storage ::locale cfg/default-language))
|
||||
(defonce locale-sub (rx/subject))
|
||||
(defonce locale (l/atom (or (get storage ::locale)
|
||||
cfg/default-language)))
|
||||
(defonce translations #js {})
|
||||
|
||||
;; The traslations `data` is a javascript object and should be treated
|
||||
|
@ -33,8 +34,7 @@
|
|||
(defn set-current-locale!
|
||||
[v]
|
||||
(swap! storage assoc ::locale v)
|
||||
(set! locale v)
|
||||
(rx/push! locale-sub v))
|
||||
(reset! locale v))
|
||||
|
||||
(defn set-default-locale!
|
||||
[]
|
||||
|
@ -76,15 +76,12 @@
|
|||
(apply str/format value (map #(if (c? %) @% %) args)))))
|
||||
|
||||
(defn tr
|
||||
([code] (t locale code))
|
||||
([code & args] (apply t locale code args)))
|
||||
([code] (t @locale code))
|
||||
([code & args] (apply t @locale code args)))
|
||||
|
||||
|
||||
;; DEPRECATED
|
||||
(defn use-locale
|
||||
[]
|
||||
(let [[locale set-locale] (mf/useState locale)]
|
||||
(mf/useEffect (fn []
|
||||
(let [sub (rx/sub! locale-sub #(set-locale %))]
|
||||
#(rx/dispose! sub)))
|
||||
#js [])
|
||||
locale))
|
||||
(mf/deref locale))
|
||||
|
||||
|
|
|
@ -9,24 +9,27 @@
|
|||
|
||||
(defn- persist
|
||||
[alias value]
|
||||
(let [key (name alias)
|
||||
value (t/encode value)]
|
||||
(.setItem js/localStorage key value)))
|
||||
(when-not (or (= *target* "nodejs")
|
||||
(not (exists? js/window)))
|
||||
(let [key (name alias)
|
||||
value (t/encode value)]
|
||||
(.setItem js/localStorage key value))))
|
||||
|
||||
(defn- load
|
||||
[alias]
|
||||
(if (or (= *target* "nodejs") (not (exists? js/window)))
|
||||
{}
|
||||
(when-not (or (= *target* "nodejs")
|
||||
(not (exists? js/window)))
|
||||
(let [data (.getItem js/localStorage (name alias))]
|
||||
(if data
|
||||
(try
|
||||
(t/decode data)
|
||||
{}))))
|
||||
(catch :default e
|
||||
(js/console.error "Error on loading data from local storage." e)
|
||||
nil)))))
|
||||
|
||||
(defn make-storage
|
||||
(defn- make-storage
|
||||
[alias]
|
||||
(let [data (atom (load alias))]
|
||||
(when (not= *target* "nodejs")
|
||||
(add-watch data :sub #(persist alias %4)))
|
||||
(add-watch data :sub #(persist alias %4))
|
||||
(reify
|
||||
Object
|
||||
(toString [_]
|
||||
|
@ -56,8 +59,9 @@
|
|||
|
||||
ILookup
|
||||
(-lookup [_ key]
|
||||
(-lookup @data key nil))
|
||||
(get @data key nil))
|
||||
(-lookup [_ key not-found]
|
||||
(-lookup @data key not-found)))))
|
||||
(get @data key not-found)))))
|
||||
|
||||
(def storage (make-storage "uxbox"))
|
||||
(def storage
|
||||
(make-storage "uxbox"))
|
||||
|
|
Loading…
Add table
Reference in a new issue