generated from PEZ/rn-rf-shadow
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathi18n_resources.cljs
87 lines (78 loc) · 3.52 KB
/
i18n_resources.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
(ns gurps.setup.i18n-resources
(:require [clojure.string :as string]
[cljs-bean.core :refer [->js]]
[gurps.utils.i18n :as i18n]))
;; original code from
;; https://github.com/status-im/status-mobile/blob/4469717cc13b5c23ba687e085319e36e640e8b2d/src/status_im/setup/i18n_resources.cljs
;; FIXME: that should be replaced with `(react-native-languages/get-lang-keyword)`
;; in order for languages/translations to work
;; see https://github.com/status-im/status-mobile/issues/16058 for details
(def default-device-language :en)
(def languages
;; TODO: add all 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
:en})
(defonce loaded-languages
(atom
(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) (->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))))