Skip to content

Commit 632bbf3

Browse files
committed
[perf] Move translation to node_modules in release build
1 parent 4f125ae commit 632bbf3

13 files changed

Lines changed: 312 additions & 251 deletions

File tree

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,7 @@ conan.cmake
162162

163163
# nix
164164
/.ran-setup
165-
/.nix-gcroots/
165+
/.nix-gcroots/
166+
167+
#modules
168+
status-modules/translations

Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,23 +65,31 @@ release: release-android release-ios ##@build build release for Android and iOS
6565
release-android: export TARGET_OS ?= android
6666
release-android: ##@build build release for Android
6767
@$(MAKE) prod-build-android && \
68+
cp -R translations status-modules/translations && \
69+
cp -R status-modules node_modules/status-modules && \
6870
react-native run-android --variant=release
6971

7072
release-ios: export TARGET_OS ?= ios
7173
release-ios: ##@build build release for iOS release
7274
# Open XCode inside the Nix context
7375
@$(MAKE) prod-build-ios && \
7476
echo "Build in XCode, see https://status.im/build_status/ for instructions" && \
77+
cp -R translations status-modules/translations && \
78+
cp -R status-modules node_modules/status-modules && \
7579
open ios/StatusIm.xcworkspace
7680

7781
release-desktop: export TARGET_OS ?= $(HOST_OS)
7882
release-desktop: ##@build build release for desktop release
7983
@$(MAKE) prod-build-desktop && \
84+
cp -R translations status-modules/translations && \
85+
cp -R status-modules node_modules/status-modules && \
8086
scripts/build-desktop.sh
8187

8288
release-windows-desktop: export TARGET_OS ?= windows
8389
release-windows-desktop: ##@build build release for desktop release
8490
@$(MAKE) prod-build-desktop && \
91+
cp -R translations status-modules/translations && \
92+
cp -R status-modules node_modules/status-modules && \
8593
scripts/build-desktop.sh
8694

8795
prod-build: export TARGET_OS ?= all

build.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@
234234

235235
(defn hawk-handler-translations
236236
[ctx e]
237-
(let [path "src/status_im/i18n.cljs"
237+
(let [path "dev/status_im/i18n_resources.cljs"
238238
i18n (slurp path)]
239239
(spit path (str i18n " ;;"))
240240
(spit path i18n))

ci/common.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def prep(type = 'nightly') {
7171
}
7272
/* node deps, pods, and status-go download */
7373
utils.nix.shell("scripts/prepare-for-platform.sh ${prepareTarget}", pure: false)
74+
sh("cp -R translations status-modules/translations && cp -R status-modules node_modules/status-modules")
7475
}
7576

7677
return this

clj-rn.conf.edn

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,23 +98,23 @@
9898
"cider.piggieback/wrap-cljs-repl"]}
9999

100100
:builds [{:id :desktop
101-
:source-paths ["react-native/src/desktop" "src" "env/dev" "components/src"]
101+
:source-paths ["react-native/src/desktop" "src" "env/dev" "components/src" "dev"]
102102
:compiler {:output-to "target/desktop/app.js"
103103
:main "env.desktop.main"
104104
:output-dir "target/desktop"
105105
:npm-deps false
106106
:optimizations :none}
107107
:figwheel true}
108108
{:id :ios
109-
:source-paths ["react-native/src/mobile" "src" "env/dev" "components/src"]
109+
:source-paths ["react-native/src/mobile" "src" "env/dev" "components/src" "dev"]
110110
:compiler {:output-to "target/ios/app.js"
111111
:main "env.ios.main"
112112
:output-dir "target/ios"
113113
:npm-deps false
114114
:optimizations :none}
115115
:figwheel true}
116116
{:id :android
117-
:source-paths ["react-native/src/mobile" "src" "env/dev" "components/src"]
117+
:source-paths ["react-native/src/mobile" "src" "env/dev" "components/src" "dev"]
118118
:compiler {:output-to "target/android/app.js"
119119
:main "env.android.main"
120120
:output-dir "target/android"

dev/status_im/i18n_resources.cljs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
(ns status-im.i18n-resources
2+
(:require-macros [status-im.i18n :as i18n])
3+
(:require [status-im.react-native.js-dependencies :as rn-dependencies]
4+
[status-im.utils.types :as types]
5+
[clojure.string :as string]))
6+
7+
(def default-device-language
8+
(keyword (.-language rn-dependencies/react-native-languages)))
9+
10+
;; translations
11+
(def translations-by-locale
12+
(->> (i18n/translations [:en :es_419 :fa :ko :ms :pl :ru :zh_Hans_CN])
13+
(map (fn [[k t]]
14+
(let [k' (-> (name k)
15+
(string/replace "_" "-")
16+
keyword)]
17+
[k' (types/json->clj t)])))
18+
(into {})))
19+
20+
;; API compatibility
21+
(defn load-language [lang])

prod/status_im/i18n_resources.cljs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
(ns status-im.i18n-resources
2+
(:require-macros [status-im.utils.js-require :as js-require])
3+
(:require [status-im.react-native.js-dependencies :as rn-dependencies]))
4+
5+
(def default-device-language
6+
(keyword (.-language rn-dependencies/react-native-languages)))
7+
8+
(def languages [:en :es_419 :fa :ko :ms :pl :ru :zh_Hans_CN])
9+
10+
(defonce loaded-languages
11+
(atom
12+
(conj #{:en} default-device-language)))
13+
14+
(def prod-translations
15+
{:en (js-require/js-require "status-modules/translations/en.json")
16+
:es_419 (js-require/js-require "status-modules/translations/es_419.json")
17+
:fa (js-require/js-require "status-modules/translations/fa.json")
18+
:ko (js-require/js-require "status-modules/translations/ko.json")
19+
:ms (js-require/js-require "status-modules/translations/ms.json")
20+
:pl (js-require/js-require "status-modules/translations/pl.json")
21+
:ru (js-require/js-require "status-modules/translations/ru.json")
22+
:zh_Hans_CN (js-require/js-require "status-modules/translations/zh_Hans_CN.json")})
23+
24+
(defn valid-language [lang]
25+
(if (contains? prod-translations lang)
26+
lang
27+
(let [short-lang (keyword (subs (name lang) 0 2))]
28+
(when (contains? prod-translations short-lang)
29+
short-lang))))
30+
31+
(defn require-translation [lang-key]
32+
(when-let [lang (valid-language lang-key)]
33+
((get prod-translations lang))))
34+
35+
;; translations
36+
(def translations-by-locale
37+
(cond->
38+
{:en (require-translation :en)}
39+
(not= :en default-device-language)
40+
(assoc default-device-language
41+
(require-translation default-device-language))))
42+
43+
(defn load-language [lang]
44+
(let [lang-key (valid-language (keyword lang))]
45+
(when-not (contains? @loaded-languages lang-key)
46+
(aset (.-translations rn-dependencies/i18n)
47+
lang
48+
(require-translation lang-key))
49+
(swap! loaded-languages conj lang-key))))

project.clj

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,20 @@
5050
:profiles {:dev {:dependencies [[cider/piggieback "0.4.0"]]
5151
:cljsbuild {:builds
5252
{:ios
53-
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/mobile" "src"]
53+
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/mobile" "src" "dev"]
5454
:compiler {:output-to "target/ios/app.js"
5555
:main "env.ios.main"
5656
:output-dir "target/ios"
5757
:optimizations :none}}
5858
:android
59-
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/mobile" "src"]
59+
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/mobile" "src" "dev"]
6060
:compiler {:output-to "target/android/app.js"
6161
:main "env.android.main"
6262
:output-dir "target/android"
6363
:optimizations :none}
6464
:warning-handlers [status-im.utils.build/warning-handler]}
6565
:desktop
66-
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/desktop" "src"]
66+
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/desktop" "src" "dev"]
6767
:compiler {:output-to "target/desktop/app.js"
6868
:main "env.desktop.main"
6969
:output-dir "target/desktop"
@@ -76,36 +76,36 @@
7676
[re-frisk-sidecar "0.5.7"]
7777
[day8.re-frame/tracing "0.5.0"]
7878
[hawk "0.2.11"]]
79-
:source-paths ["src" "env/dev" "react-native/src/cljsjs" "components/src"]}]
79+
:source-paths ["src" "env/dev" "react-native/src/cljsjs" "components/src" "dev"]}]
8080
:test {:dependencies [[day8.re-frame/test "0.1.5"]]
8181
:plugins [[lein-doo "0.1.9"]]
8282
:cljsbuild {:builds
8383
[{:id "test"
84-
:source-paths ["components/src" "src" "test/cljs"]
84+
:source-paths ["components/src" "src" "test/cljs" "dev"]
8585
:compiler {:main status-im.test.runner
8686
:output-to "target/test/test.js"
8787
:output-dir "target/test"
8888
:optimizations :none
8989
:preamble ["js/hook-require.js"]
9090
:target :nodejs}}
9191
{:id "protocol"
92-
:source-paths ["components/src" "src" "test/cljs"]
92+
:source-paths ["components/src" "src" "test/cljs" "dev"]
9393
:compiler {:main status-im.test.protocol.runner
9494
:output-to "target/test/test.js"
9595
:output-dir "target/test"
9696
:optimizations :none
9797
:preamble ["js/hook-require.js"]
9898
:target :nodejs}}
9999
{:id "env-dev-utils"
100-
:source-paths ["env/dev/env/utils.cljs" "test/env/dev"]
100+
:source-paths ["env/dev/env/utils.cljs" "test/env/dev" "dev"]
101101
:compiler {:main env.test.runner
102102
:output-to "target/test/test.js"
103103
:output-dir "target/test"
104104
:optimizations :none
105105
:target :nodejs}}]}}
106106
:prod {:cljsbuild {:builds
107107
{:ios
108-
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/mobile" "src" "env/prod"]
108+
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/mobile" "src" "env/prod" "prod"]
109109
:compiler {:output-to "index.ios.js"
110110
:main "env.ios.main"
111111
:output-dir "target/ios-prod"
@@ -122,7 +122,7 @@
122122
:language-in :ecmascript5}
123123
:warning-handlers [status-im.utils.build/warning-handler]}
124124
:android
125-
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/mobile" "src" "env/prod"]
125+
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/mobile" "src" "env/prod" "prod"]
126126
:compiler {:output-to "index.android.js"
127127
:main "env.android.main"
128128
:output-dir "target/android-prod"
@@ -139,7 +139,7 @@
139139
:language-in :ecmascript5}
140140
:warning-handlers [status-im.utils.build/warning-handler]}
141141
:desktop
142-
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/desktop" "src" "env/prod"]
142+
{:source-paths ["components/src" "react-native/src/cljsjs" "react-native/src/desktop" "src" "env/prod" "prod"]
143143
:compiler {:output-to "index.desktop.js"
144144
:main "env.desktop.main"
145145
:output-dir "target/desktop-prod"

src/status_im/android/core.cljs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,16 @@
99
[status-im.ui.screens.views :as views]
1010
[status-im.ui.components.react :as react]
1111
[status-im.native-module.core :as status]
12-
[status-im.notifications.core :as notifications]
1312
[status-im.core :as core]
1413
[status-im.react-native.js-dependencies :as rn-dependencies]
1514
[status-im.utils.snoopy :as snoopy]
16-
[taoensso.timbre :as log]))
15+
[status-im.i18n :as i18n]))
1716

1817
(defn app-state-change-handler [state]
1918
(dispatch [:app-state-change state]))
2019

2120
(defn on-languages-change [event]
22-
(set! (.-locale rn-dependencies/i18n) (.-language event)))
21+
(i18n/set-language (.-language event)))
2322

2423
(defn on-shake []
2524
(dispatch [:shake-event]))

0 commit comments

Comments
 (0)