diff --git a/frontend/src/uxbox/util/i18n.cljs b/frontend/src/uxbox/util/i18n.cljs index 099cdf803..560c30027 100644 --- a/frontend/src/uxbox/util/i18n.cljs +++ b/frontend/src/uxbox/util/i18n.cljs @@ -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)) diff --git a/frontend/src/uxbox/util/storage.cljs b/frontend/src/uxbox/util/storage.cljs index 466fc6c68..adfbe76a5 100644 --- a/frontend/src/uxbox/util/storage.cljs +++ b/frontend/src/uxbox/util/storage.cljs @@ -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"))