requiring translations inline

Signed-off-by: yenda <eric@status.im>
This commit is contained in:
yenda 2020-05-07 14:28:24 +02:00
parent 86b89ebb5c
commit abfe0869f3
No known key found for this signature in database
GPG Key ID: 0095623C0069DCE6
9 changed files with 78 additions and 42 deletions

View File

@ -59,7 +59,7 @@ in stdenv.mkDerivation rec {
filter = lib.mkFilter { filter = lib.mkFilter {
root = path; root = path;
include = [ include = [
"mobile/js_files.*" "resources/.*" "mobile/js_files.*" "resources/.*" "translations/.*"
"modules/react-native-status/android.*" "modules/react-native-status/android.*"
envFileName "VERSION" ".watchmanconfig" envFileName "VERSION" ".watchmanconfig"
"status-go-version.json" "react-native.config.js" "status-go-version.json" "react-native.config.js"

View File

@ -1,4 +1,5 @@
(ns mocks.js-dependencies (ns mocks.js-dependencies
(:require-macros [status-im.utils.slurp :refer [slurp]])
(:require [status-im.default-fleet :refer (default-fleets)])) (:require [status-im.default-fleet :refer (default-fleets)]))
(def action-button #js {:default #js {:Item #js {}}}) (def action-button #js {:default #js {:Item #js {}}})
@ -190,4 +191,17 @@
"react-native-mail" react-native-mail "react-native-mail" react-native-mail
"react-native-image-resizer" image-resizer "react-native-image-resizer" image-resizer
"./fleets.js" default-fleets "./fleets.js" default-fleets
"../translations/ar.json" (js/JSON.parse (slurp "./translations/ar.json"))
"../translations/en.json" (js/JSON.parse (slurp "./translations/en.json"))
"../translations/es.json" (js/JSON.parse (slurp "./translations/es.json"))
"../translations/es_419.json" (js/JSON.parse (slurp "./translations/es_419.json"))
"../translations/fil.json" (js/JSON.parse (slurp "./translations/fil.json"))
"../translations/fr.json" (js/JSON.parse (slurp "./translations/fr.json"))
"../translations/id.json" (js/JSON.parse (slurp "./translations/id.json"))
"../translations/it.json" (js/JSON.parse (slurp "./translations/it.json"))
"../translations/ko.json" (js/JSON.parse (slurp "./translations/ko.json"))
"../translations/ru.json" (js/JSON.parse (slurp "./translations/ru.json"))
"../translations/zh.json" (js/JSON.parse (slurp "./translations/zh.json"))
"../translations/zh_hant.json" (js/JSON.parse (slurp "./translations/zh_hant.json"))
"../translations/zh_TW.json" (js/JSON.parse (slurp "./translations/zh_TW.json"))
nil)) nil))

View File

@ -1,4 +1,4 @@
(ns status-im.bootnode.core-test (ns status-im.bootnodes.core-test
(:require [cljs.test :refer-macros [deftest is testing]] (:require [cljs.test :refer-macros [deftest is testing]]
[status-im.bootnodes.core :as model])) [status-im.bootnodes.core :as model]))

View File

@ -1,4 +1,4 @@
(ns status-im.contacts.db-test (ns status-im.contact.db-test
(:require [cljs.test :refer-macros [deftest is testing]] (:require [cljs.test :refer-macros [deftest is testing]]
[status-im.utils.gfycat.core :as gfycat] [status-im.utils.gfycat.core :as gfycat]
[status-im.utils.identicon :as identicon] [status-im.utils.identicon :as identicon]

View File

@ -1,21 +0,0 @@
(ns status-im.i18n
(:require [clojure.string :as string]))
(defn read-file [f]
(when (.isFile f)
(let [locale (-> f
.getName
(string/split #"\.")
first)
content (slurp f)]
[(keyword locale) content])))
(defn read-translations []
(->>
(java.io.File. "translations")
file-seq
(keep read-file)
vec))
(defmacro translations [languages]
(select-keys (into {} (read-translations)) languages))

View File

@ -1,21 +1,63 @@
(ns status-im.i18n-resources (ns status-im.i18n-resources
(:require-macros [status-im.i18n :as i18n]) (:require [clojure.string :as string]
(:require [status-im.utils.types :as types] ["i18n-js" :as i18n-js]
[clojure.string :as string]
["react-native-languages" :default react-native-languages])) ["react-native-languages" :default react-native-languages]))
(def default-device-language (def default-device-language
(keyword (.-language react-native-languages))) (keyword (.-language react-native-languages)))
(def languages [:ar :en :es :es_419 :fil :fr :id :in :it :ko :ru :zh :zh_Hant :zh_TW])
(defonce loaded-languages
(atom
(conj #{:en} default-device-language)))
(def translations
{
:ar (js/require "../translations/ar.json")
:en (js/require "../translations/en.json")
:es (js/require "../translations/es.json")
:es_419 (js/require "../translations/es_419.json")
:fil (js/require "../translations/fil.json")
:fr (js/require "../translations/fr.json")
:id (js/require "../translations/id.json")
:in (js/require "../translations/id.json")
:it (js/require "../translations/it.json")
:ko (js/require "../translations/ko.json")
:ru (js/require "../translations/ru.json")
:zh (js/require "../translations/zh.json")
:zh_Hant (js/require "../translations/zh_hant.json")
:zh_TW (js/require "../translations/zh_TW.json")})
(defn valid-language [lang]
(if (contains? translations 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? translations short-lang))
short-lang
(when (contains? translations shortest-lang)
shortest-lang)))))
(defn require-translation [lang-key]
(when-let [lang (valid-language (keyword lang-key))]
(get translations lang)))
;; translations ;; translations
(def translations-by-locale (def translations-by-locale
(->> (i18n/translations [:ar :en :es :es_419 :fil :fr :it :ko :ru :in :id :tr :zh :zh_Hant :zh_TW]) (cond->
(map (fn [[k t]] {:en (require-translation :en)}
(let [k' (-> (name k) (not= :en default-device-language)
(string/replace "_" "-") (assoc default-device-language
keyword)] (require-translation (-> (name default-device-language)
[k' (types/json->clj t)]))) (string/replace "-" "_")
(into {}))) keyword)))))
;; API compatibility (defn load-language [lang]
(defn load-language [_]) (when-let [lang-key (valid-language (keyword lang))]
(when-not (contains? @loaded-languages lang-key)
(aset (.-translations i18n-js)
lang
(require-translation lang-key))
(swap! loaded-languages conj lang-key))))

View File

@ -7,14 +7,15 @@
[clojure.string :as string])) [clojure.string :as string]))
;; english as source of truth ;; english as source of truth
(def labels (set (keys (:en i18n-resources/translations-by-locale)))) (def labels (set (keys (js->clj (:en i18n-resources/translations-by-locale)
:keywordize-keys true))))
(spec/def ::label labels) (spec/def ::label labels)
(spec/def ::labels (spec/coll-of ::label :kind set? :into #{})) (spec/def ::labels (spec/coll-of ::label :kind set? :into #{}))
(defn labels-for-all-locales [] (defn labels-for-all-locales []
(->> i18n-resources/translations-by-locale (->> i18n-resources/translations-by-locale
(mapcat #(-> % val keys)) (mapcat #(-> % val (js->clj :keywordize-keys true) keys))
set)) set))
;; checkpoints ;; checkpoints
@ -1030,7 +1031,7 @@
(spec/def ::locales (spec/coll-of ::locale :kind set? :into #{})) (spec/def ::locales (spec/coll-of ::locale :kind set? :into #{}))
(defn locale->labels [locale] (defn locale->labels [locale]
(-> i18n-resources/translations-by-locale (get locale) keys set)) (-> i18n-resources/translations-by-locale (get locale) (js->clj :keywordize-keys true) keys set))
(defn locale->checkpoint [locale] (defn locale->checkpoint [locale]
(let [locale-labels (locale->labels locale) (let [locale-labels (locale->labels locale)

View File

@ -1,4 +1,4 @@
(ns status-im.multiaccount.login.data-test) (ns status-im.multiaccounts.login.data-test)
(def all-contacts (def all-contacts
[{:last-updated 1547185503000 [{:last-updated 1547185503000

View File

@ -1,11 +1,11 @@
(ns status-im.multiaccount.login.flow-test (ns status-im.multiaccounts.login.flow-test
"The main purpose of these tests is to signal that some steps of the sign in "The main purpose of these tests is to signal that some steps of the sign in
flow has been changed. Such changes should be reflected in both these tests flow has been changed. Such changes should be reflected in both these tests
and documents which describe the whole \"sign in\" flow." and documents which describe the whole \"sign in\" flow."
(:require [cljs.test :refer-macros [deftest is testing]] (:require [cljs.test :refer-macros [deftest is testing]]
[status-im.ethereum.core :as ethereum] [status-im.ethereum.core :as ethereum]
[status-im.ethereum.json-rpc :as json-rpc] [status-im.ethereum.json-rpc :as json-rpc]
[status-im.multiaccount.login.data-test :as data] [status-im.multiaccounts.login.data-test :as data]
[status-im.multiaccounts.login.core :as login.core])) [status-im.multiaccounts.login.core :as login.core]))
(deftest on-password-input-submitted (deftest on-password-input-submitted