diff --git a/src/i18n/i18n.cljs b/src/i18n/i18n.cljs index 2b3b1a6668..6eb7ef6c51 100644 --- a/src/i18n/i18n.cljs +++ b/src/i18n/i18n.cljs @@ -1,78 +1,14 @@ (ns i18n.i18n (:require ["i18n-js" :as i18n] [clojure.string :as string] - [status-im.goog.i18n :as goog.i18n] - [react-native.languages :as react-native-languages])) + [status-im.goog.i18n :as goog.i18n])) -(def default-device-language (react-native-languages/get-lang-keyword)) - -(def languages - #{:ar :bn :de :el :en :es :es_419 :es_AR :fil :fr :hi :id :in :it :ja :ko :ms :nl :pl :pt :pt_BR :ru - :tr :vi :zh :zh_Hant :zh_TW}) - -(defn valid-language - [lang] - (if (contains? languages lang) - (keyword lang) - (let [parts (string/split (name lang) #"[\-\_]") - short-lang (keyword (str (first parts) "_" (second parts))) - shortest-lang (keyword (first parts))] - (if (and (> (count parts) 2) (contains? languages short-lang)) - short-lang - (when (contains? languages shortest-lang) - shortest-lang))))) - -(defn require-translation - [lang-key] - (when-let [lang (valid-language (keyword lang-key))] - (case lang - :ar (js/require "../translations/ar.json") - :bn (js/require "../translations/bn.json") - :de (js/require "../translations/de.json") - :el (js/require "../translations/el.json") - :en (js/require "../translations/en.json") - :es (js/require "../translations/es.json") - :es_419 (js/require "../translations/es_419.json") - :es_AR (js/require "../translations/es_AR.json") - :fil (js/require "../translations/fil.json") - :fr (js/require "../translations/fr.json") - :hi (js/require "../translations/hi.json") - :id (js/require "../translations/id.json") - :in (js/require "../translations/id.json") - :it (js/require "../translations/it.json") - :ja (js/require "../translations/ja.json") - :ko (js/require "../translations/ko.json") - :ms (js/require "../translations/ms.json") - :nl (js/require "../translations/nl.json") - :pl (js/require "../translations/pl.json") - :pt (js/require "../translations/pt.json") - :pt_BR (js/require "../translations/pt_BR.json") - :ru (js/require "../translations/ru.json") - :tr (js/require "../translations/tr.json") - :vi (js/require "../translations/vi.json") - :zh (js/require "../translations/zh.json") - :zh_Hant (js/require "../translations/zh_hant.json") - :zh_TW (js/require "../translations/zh_TW.json")))) - -(def translations-by-locale - (cond-> {:en (require-translation :en)} - (not= :en default-device-language) - (assoc default-device-language - (require-translation (-> (name default-device-language) - (string/replace "-" "_") - keyword))))) - -(set! (.-fallbacks i18n) true) -(set! (.-defaultSeparator i18n) "/") -(set! (.-locale i18n) (name default-device-language)) -(set! (.-translations i18n) (clj->js translations-by-locale)) - -(defn init - [] +(defn setup + [default-device-language translations-by-locale] (set! (.-fallbacks i18n) true) (set! (.-defaultSeparator i18n) "/") - (set! (.-locale i18n) (name default-device-language)) - (set! (.-translations i18n) (clj->js translations-by-locale))) + (set! (.-locale i18n) default-device-language) + (set! (.-translations i18n) translations-by-locale)) (defn get-translations [] @@ -134,12 +70,3 @@ (.-locale i18n)) (def format-currency goog.i18n/format-currency) - -(defn load-language - [lang loaded-languages] - (when-let [lang-key (valid-language (keyword lang))] - (when-not (contains? @loaded-languages lang-key) - (aset (i18n/get-translations) - lang - (require-translation lang-key)) - (swap! loaded-languages conj lang-key)))) diff --git a/src/status_im/test_runner.cljs b/src/status_im/test_runner.cljs index d38df34e48..7d8b0225f3 100644 --- a/src/status_im/test_runner.cljs +++ b/src/status_im/test_runner.cljs @@ -5,9 +5,7 @@ [shadow.test :as st] [shadow.test.env :as env] [utils.re-frame :as rf] - [i18n.i18n :as i18n])) - -(i18n/init) + status-im2.setup.i18n-resources)) (defonce repl? (atom false)) diff --git a/src/status_im/ui/screens/add_new/new_public_chat/view.cljs b/src/status_im/ui/screens/add_new/new_public_chat/view.cljs index 3ace37e704..5e20412aa2 100644 --- a/src/status_im/ui/screens/add_new/new_public_chat/view.cljs +++ b/src/status_im/ui/screens/add_new/new_public_chat/view.cljs @@ -4,10 +4,11 @@ [re-frame.core :as re-frame] [status-im.add-new.db :as db] [status-im.chat.models :as chat.models] - [i18n.i18n :as i18n] [status-im.react-native.resources :as resources] [status-im.ui.components.icons.icons :as icons] - [status-im.ui.components.react :as react]) + [status-im.ui.components.react :as react] + [status-im2.setup.i18n-resources :as i18n-resources] + [i18n.i18n :as i18n]) (:require-macros [status-im.utils.views :as views])) (defn- start-chat @@ -73,8 +74,8 @@ (defn get-language-topic [] - (let [lang (subs (name i18n/default-device-language) 0 2) - lang3 (subs (name i18n/default-device-language) 0 3) + (let [lang (subs (name i18n-resources/default-device-language) 0 2) + lang3 (subs (name i18n-resources/default-device-language) 0 3) lang-name (or (get lang-names lang3) (get lang-names lang))] (when-not (= lang "en") (or lang-name (str "status-" lang))))) diff --git a/src/status_im/ui2/screens/chat/pin_limit_popover/view.cljs b/src/status_im/ui2/screens/chat/pin_limit_popover/view.cljs index a92584dad3..8ccd5def5f 100644 --- a/src/status_im/ui2/screens/chat/pin_limit_popover/view.cljs +++ b/src/status_im/ui2/screens/chat/pin_limit_popover/view.cljs @@ -5,7 +5,7 @@ [quo2.foundations.colors :as colors] [react-native.core :as rn] [react-native.reanimated :as reanimated] - [status-im.ui2.screens.chat.pin-limit-popover.style :as style] ;; TODO move to status-im2 + [status-im.ui2.screens.chat.pin-limit-popover.style :as style] [utils.re-frame :as rf])) ;; TODO (flexsurfer) this should be an in-app notification component in quo2 @@ -56,6 +56,6 @@ :right 16}} [quo/icon :i/close {:color (colors/theme-colors colors/white colors/neutral-100) - :size 8}]]]))]) + :size 12}]]]))]) diff --git a/src/status_im2/navigation/core.cljs b/src/status_im2/navigation/core.cljs index 45de9c55bc..30fb5ec1d3 100644 --- a/src/status_im2/navigation/core.cljs +++ b/src/status_im2/navigation/core.cljs @@ -10,8 +10,7 @@ [status-im2.navigation.state :as state] [status-im2.navigation.view :as views] [taoensso.timbre :as log] - [utils.re-frame :as rf] ;; TODO (14/11/22 flexsurfer) move to status-im2 namespace - )) + [utils.re-frame :as rf])) ;; REGISTER COMPONENT (LAZY) (defn reg-comp diff --git a/src/status_im2/navigation/view.cljs b/src/status_im2/navigation/view.cljs index 2fd4236628..9504286b11 100644 --- a/src/status_im2/navigation/view.cljs +++ b/src/status_im2/navigation/view.cljs @@ -12,8 +12,7 @@ [status-im.ui.screens.signing.views :as signing] [status-im.ui.screens.wallet-connect.session-proposal.views :as wallet-connect] [status-im.ui.screens.wallet.send.views :as wallet.send.views] - [status-im2.common.toasts.view :as toasts] ;; TODO (14/11/22 flexsurfer) move to status-im2 - ;; namespace + [status-im2.common.toasts.view :as toasts] [status-im2.navigation.screens :as screens] [status-im2.setup.config :as config] [status-im2.setup.hot-reload :as reloader])) diff --git a/src/status_im2/setup/config.cljs b/src/status_im2/setup/config.cljs index e2ae2d95d7..85b5996727 100644 --- a/src/status_im2/setup/config.cljs +++ b/src/status_im2/setup/config.cljs @@ -1,7 +1,6 @@ (ns status-im2.setup.config (:require [clojure.string :as string] - [react-native.config :as react-native-config] ;; TODO (14/11/22 flexsurfer move to status-im2 - ;; namespace + [react-native.config :as react-native-config] [status-im.ethereum.core :as ethereum] [status-im.ethereum.ens :as ens])) diff --git a/src/status_im2/setup/core.cljs b/src/status_im2/setup/core.cljs index b3ea685494..2b79e501b8 100644 --- a/src/status_im2/setup/core.cljs +++ b/src/status_im2/setup/core.cljs @@ -1,6 +1,7 @@ (ns status-im2.setup.core (:require [i18n.i18n :as i18n] + [status-im2.setup.i18n-resources :as i18n-resources] [re-frame.core :as re-frame] [re-frame.interop :as interop] [react-native.core :as rn] @@ -13,8 +14,7 @@ [status-im.native-module.core :as status] [status-im.notifications.local :as notifications] [status-im.utils.universal-links.core :as utils.universal-links] - [status-im2.contexts.shell.animation :as animation] ;; TODO (14/11/22 flexsurfer move to - ;; status-im2 namespace + [status-im2.contexts.shell.animation :as animation] status-im2.contexts.syncing.events status-im2.navigation.core [status-im2.setup.config :as config] @@ -22,7 +22,6 @@ status-im2.setup.events status-im2.setup.datetime [status-im2.setup.global-error :as global-error] - [status-im2.setup.i18n-resources :as i18n-resources] [status-im2.setup.log :as log] status-im2.subs.root)) @@ -32,19 +31,15 @@ (defn init [] - (log/setup config/log-level) (global-error/register-handler) (when platform/android? (status/set-soft-input-mode status/adjust-resize)) (notifications/listen-notifications) (.addEventListener rn/app-state "change" #(re-frame/dispatch [:app-state-change %])) - (i18n/init) - - (react-native-languages/add-change-listener - #(fn [lang] - (i18n/load-language lang i18n-resources/loaded-languages) - (i18n/set-language lang))) + (react-native-languages/add-change-listener #(fn [lang] + (i18n/set-language lang) + (i18n-resources/load-language lang))) (react-native-shake/add-shake-listener #(re-frame/dispatch [:shake-event])) (utils.universal-links/initialize) diff --git a/src/status_im2/setup/db.cljs b/src/status_im2/setup/db.cljs index 057da1d820..0a9fbd2458 100644 --- a/src/status_im2/setup/db.cljs +++ b/src/status_im2/setup/db.cljs @@ -1,5 +1,5 @@ (ns status-im2.setup.db - (:require [react-native.core :as rn] ;; TODO (14/11/22 flexsurfer move to status-im2 namespace + (:require [react-native.core :as rn] [status-im.fleet.core :as fleet] [status-im.wallet.db :as wallet.db] [status-im2.contexts.activity-center.events :as activity-center])) diff --git a/src/status_im2/setup/events.cljs b/src/status_im2/setup/events.cljs index 1692f6e3f9..4ff6c961d4 100644 --- a/src/status_im2/setup/events.cljs +++ b/src/status_im2/setup/events.cljs @@ -2,7 +2,7 @@ (:require [clojure.string :as string] [quo.theme :as quo.theme] [quo2.theme :as quo2.theme] - [re-frame.core :as re-frame] ;; TODO (14/11/22 flexsurfer move to status-im2 namespace + [re-frame.core :as re-frame] [status-im.multiaccounts.login.core :as multiaccounts.login] [status-im.native-module.core :as status] [status-im.utils.keychain.core :as keychain] diff --git a/src/status_im2/setup/i18n_resources.cljs b/src/status_im2/setup/i18n_resources.cljs index eb75414db9..164912116c 100644 --- a/src/status_im2/setup/i18n_resources.cljs +++ b/src/status_im2/setup/i18n_resources.cljs @@ -1,6 +1,78 @@ (ns status-im2.setup.i18n-resources - (:require [i18n.i18n :as i18n])) + (:require [clojure.string :as string] + [i18n.i18n :as i18n] + [react-native.languages :as react-native-languages])) + +(def default-device-language (react-native-languages/get-lang-keyword)) + +(def languages + #{:ar :bn :de :el :en :es :es_419 :es_AR :fil :fr :hi :id :in :it :ja :ko :ms :nl :pl :pt :pt_BR :ru + :tr :vi :zh :zh_Hant :zh_TW}) (defonce loaded-languages (atom - (conj #{:en} i18n/default-device-language))) + (conj #{:en} default-device-language))) + +(defn valid-language + [lang] + (if (contains? languages lang) + (keyword lang) + (let [parts (string/split (name lang) #"[\-\_]") + short-lang (keyword (str (first parts) "_" (second parts))) + shortest-lang (keyword (first parts))] + (if (and (> (count parts) 2) (contains? languages short-lang)) + short-lang + (when (contains? languages shortest-lang) + shortest-lang))))) + +(defn require-translation + [lang-key] + (when-let [lang (valid-language (keyword lang-key))] + (case lang + :ar (js/require "../translations/ar.json") + :bn (js/require "../translations/bn.json") + :de (js/require "../translations/de.json") + :el (js/require "../translations/el.json") + :en (js/require "../translations/en.json") + :es (js/require "../translations/es.json") + :es_419 (js/require "../translations/es_419.json") + :es_AR (js/require "../translations/es_AR.json") + :fil (js/require "../translations/fil.json") + :fr (js/require "../translations/fr.json") + :hi (js/require "../translations/hi.json") + :id (js/require "../translations/id.json") + :in (js/require "../translations/id.json") + :it (js/require "../translations/it.json") + :ja (js/require "../translations/ja.json") + :ko (js/require "../translations/ko.json") + :ms (js/require "../translations/ms.json") + :nl (js/require "../translations/nl.json") + :pl (js/require "../translations/pl.json") + :pt (js/require "../translations/pt.json") + :pt_BR (js/require "../translations/pt_BR.json") + :ru (js/require "../translations/ru.json") + :tr (js/require "../translations/tr.json") + :vi (js/require "../translations/vi.json") + :zh (js/require "../translations/zh.json") + :zh_Hant (js/require "../translations/zh_hant.json") + :zh_TW (js/require "../translations/zh_TW.json")))) + +;; translations +(def translations-by-locale + (cond-> {:en (require-translation :en)} + (not= :en default-device-language) + (assoc default-device-language + (require-translation (-> (name default-device-language) + (string/replace "-" "_") + keyword))))) + +(i18n/setup (name default-device-language) (clj->js translations-by-locale)) + +(defn load-language + [lang] + (when-let [lang-key (valid-language (keyword lang))] + (when-not (contains? @loaded-languages lang-key) + (aset (i18n/get-translations) + lang + (require-translation lang-key)) + (swap! loaded-languages conj lang-key)))) diff --git a/src/status_im2/setup/i18n_test.cljs b/src/status_im2/setup/i18n_test.cljs index 298d6fd63f..3671c02660 100644 --- a/src/status_im2/setup/i18n_test.cljs +++ b/src/status_im2/setup/i18n_test.cljs @@ -3,11 +3,12 @@ [cljs.test :refer-macros [deftest is]] [clojure.set :as set] [clojure.string :as string] - [i18n.i18n :as i18n])) + [i18n.i18n :as i18n] + [status-im2.setup.i18n-resources :as i18n-resources])) ;; english as source of truth (def labels - (set (keys (js->clj (:en i18n/translations-by-locale) + (set (keys (js->clj (:en i18n-resources/translations-by-locale) :keywordize-keys true)))) @@ -16,7 +17,7 @@ (defn labels-for-all-locales [] - (->> i18n/translations-by-locale + (->> i18n-resources/translations-by-locale (mapcat #(-> % val (js->clj :keywordize-keys true) keys)) set)) @@ -1024,14 +1025,14 @@ ;; locales -(def locales (set (keys i18n/translations-by-locale))) +(def locales (set (keys i18n-resources/translations-by-locale))) (spec/def ::locale locales) (spec/def ::locales (spec/coll-of ::locale :kind set? :into #{})) (defn locale->labels [locale] - (-> i18n/translations-by-locale (get locale) (js->clj :keywordize-keys true) keys set)) + (-> i18n-resources/translations-by-locale (get locale) (js->clj :keywordize-keys true) keys set)) (defn locale->checkpoint [locale] diff --git a/src/status_im2/subs/chat/chats.cljs b/src/status_im2/subs/chat/chats.cljs index 74287f8c1e..0ec0a7a72f 100644 --- a/src/status_im2/subs/chat/chats.cljs +++ b/src/status_im2/subs/chat/chats.cljs @@ -147,10 +147,9 @@ (re-frame/reg-sub :chats/sending-image - :<- [:chats/current-chat-id] - :<- [:chat/inputs] - (fn [[chat-id inputs]] - (get-in inputs [chat-id :metadata :sending-image]))) + :<- [:chats/current-chat-inputs] + (fn [{:keys [metadata]}] + (:sending-image metadata))) (re-frame/reg-sub :chats/timeline-chat-input-text @@ -290,12 +289,6 @@ (fn [{:keys [metadata]}] (:sending-contact-request metadata))) -(re-frame/reg-sub - :chats/sending-image - :<- [:chats/current-chat-inputs] - (fn [{:keys [metadata]}] - (:sending-image metadata))) - (re-frame/reg-sub :chats/timeline-sending-image :<- [:chats/timeline-chat-input]