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 {
root = path;
include = [
"mobile/js_files.*" "resources/.*"
"mobile/js_files.*" "resources/.*" "translations/.*"
"modules/react-native-status/android.*"
envFileName "VERSION" ".watchmanconfig"
"status-go-version.json" "react-native.config.js"

View File

@ -1,4 +1,5 @@
(ns mocks.js-dependencies
(:require-macros [status-im.utils.slurp :refer [slurp]])
(:require [status-im.default-fleet :refer (default-fleets)]))
(def action-button #js {:default #js {:Item #js {}}})
@ -190,4 +191,17 @@
"react-native-mail" react-native-mail
"react-native-image-resizer" image-resizer
"./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))

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]]
[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]]
[status-im.utils.gfycat.core :as gfycat]
[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
(:require-macros [status-im.i18n :as i18n])
(:require [status-im.utils.types :as types]
[clojure.string :as string]
(:require [clojure.string :as string]
["i18n-js" :as i18n-js]
["react-native-languages" :default react-native-languages]))
(def default-device-language
(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
(def translations-by-locale
(->> (i18n/translations [:ar :en :es :es_419 :fil :fr :it :ko :ru :in :id :tr :zh :zh_Hant :zh_TW])
(map (fn [[k t]]
(let [k' (-> (name k)
(string/replace "_" "-")
keyword)]
[k' (types/json->clj t)])))
(into {})))
(cond->
{:en (require-translation :en)}
(not= :en default-device-language)
(assoc default-device-language
(require-translation (-> (name default-device-language)
(string/replace "-" "_")
keyword)))))
;; API compatibility
(defn load-language [_])
(defn load-language [lang]
(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]))
;; 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 ::labels (spec/coll-of ::label :kind set? :into #{}))
(defn labels-for-all-locales []
(->> i18n-resources/translations-by-locale
(mapcat #(-> % val keys))
(mapcat #(-> % val (js->clj :keywordize-keys true) keys))
set))
;; checkpoints
@ -1030,7 +1031,7 @@
(spec/def ::locales (spec/coll-of ::locale :kind set? :into #{}))
(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]
(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
[{: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
flow has been changed. Such changes should be reflected in both these tests
and documents which describe the whole \"sign in\" flow."
(:require [cljs.test :refer-macros [deftest is testing]]
[status-im.ethereum.core :as ethereum]
[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]))
(deftest on-password-input-submitted