@@ -107,18 +151,21 @@ const { ipcRenderer } = require('electron')
const { Readable } = require('stream')
const RegexParser = require('@serialport/parser-regex')
const ReadlineParser = require('@serialport/parser-readline')
+const Store = require('electron-store');
+const store = new Store();
+
const delayMs = ms => new Promise(res => setTimeout(res, ms))
export default {
name: 'Home',
data() {
let rules = {
- required: value => !!value || "Required.",
- rangeWAN: value => (value >= 5 && value <=43200) || "Must between [5, 43200]",
- rangePP: value => (value >= 5 && value <=720) || "Must between [5, 720]",
- int: value => (/\.+/.test(value)) ? "Must be integer." : true,
- eui16: value => (/^\w{16}$/.test(value)) || "Invalid LoRaWAN EUI (16 chars)",
- eui32: value => (/^\w{32}$/.test(value)) || "Invalid LoRaPP EUI (32 chars)",
+ required: value => !!value || this.$t("Required."),
+ rangeWAN: value => (value >= 5 && value <=43200) || this.$t("Must between [5, 43200]"),
+ rangePP: value => (value >= 5 && value <=720) || this.$t("Must between [5, 720]"),
+ int: value => (/\.+/.test(value)) ? this.$t("Must be integer.") : true,
+ eui16: value => (/^\w{16}$/.test(value)) || this.$t("Invalid LoRaWAN EUI (16 chars)"),
+ eui32: value => (/^\w{32}$/.test(value)) || this.$t("Invalid LoRaPP EUI (32 chars)"),
}
return {
//rules
@@ -131,9 +178,9 @@ export default {
writeLoading: false,
updateFwLoading: false,
//
- connectBtnText: 'Connect',
- connectBtnColor: 'secondary',
- serialVSelectDisable: false,
+ // connectBtnText: this.$t('Connect'),
+ // connectBtnColor: 'secondary',
+ // serialVSelectDisable: false,
selectedSerialPort: null,
serialPorts: [],
serialOpened: false,
@@ -156,21 +203,12 @@ export default {
pauseParseLine: false,
//ota
currentVersion: '',
-
+ //i18n
+ selectedLocaleIso: 'us',
+ locale: 'en',
}
},
watch: {
- serialOpened(newVal, oldVal) {
- if (newVal) {
- this.connectBtnText = 'Disconnect'
- this.connectBtnColor = 'primary'
- this.serialVSelectDisable = true
- } else {
- this.connectBtnText = 'Connect'
- this.connectBtnColor = 'secondary'
- this.serialVSelectDisable = false
- }
- },
deviceType(newVal, oldVal) {
if (newVal === 'LoRaWAN') {
this.labelAppEUI = 'App EUI'
@@ -183,6 +221,29 @@ export default {
this.appEUIRules = [this.rules.required, this.rules.eui32]
this.dataIntervalRules = [this.rules.required, this.rules.int, this.rules.rangePP]
}
+ },
+ locale(newVal, oldVal) {
+ console.log('locale newVal:', newVal, ', oldVal:', oldVal)
+ if (newVal === oldVal || !newVal) return
+ if (newVal === 'en') this.selectedLocaleIso = 'us'
+ else if (newVal === 'zh') this.selectedLocaleIso = 'cn'
+ this.$root.$i18n.locale = newVal
+ store.set('chosenLocale', newVal)
+ ipcRenderer.send('locale-change', newVal)
+ }
+ },
+ computed: {
+ flagIconClass: function() {
+ return 'flag-icon-' + this.selectedLocaleIso.toLowerCase()
+ },
+ connectBtnText: function() {
+ return this.serialOpened ? this.$t('Disconnect') : this.$t('Connect')
+ },
+ connectBtnColor: function() {
+ return this.serialOpened ? 'primary' : 'secondary'
+ },
+ serialVSelectDisable: function() {
+ return this.serialOpened
}
},
methods: {
@@ -365,7 +426,10 @@ export default {
console.log('found Software firmware:', found[1])
this.swVer = found[1]
}
- }
+ },
+ },
+ created() {
+ this.locale = this.$i18n.locale
},
mounted() {
diff --git a/vue.config.js b/vue.config.js
index e2da5d5..8e456a9 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -2,6 +2,15 @@ module.exports = {
"transpileDependencies": [
"vuetify"
],
+ chainWebpack: config => {
+ config.module
+ .rule("i18n")
+ .resourceQuery(/blockType=i18n/)
+ .type('javascript/auto')
+ .use("i18n")
+ .loader("@kazupon/vue-i18n-loader")
+ .end();
+ },
pluginOptions: {
electronBuilder: {
// List native deps here if they don't work
diff --git a/yarn.lock b/yarn.lock
index 8697de2..9a30397 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -853,6 +853,14 @@
cssnano-preset-default "^4.0.0"
postcss "^7.0.0"
+"@kazupon/vue-i18n-loader@^0.5.0":
+ version "0.5.0"
+ resolved "https://registry.npm.taobao.org/@kazupon/vue-i18n-loader/download/@kazupon/vue-i18n-loader-0.5.0.tgz#64819fc9dbe21bac523e3436b7e15c32bcd33b92"
+ integrity sha1-ZIGfydviG6xSPjQ2t+FcMrzTO5I=
+ dependencies:
+ js-yaml "^3.13.1"
+ json5 "^2.1.1"
+
"@mdi/font@^3.6.95":
version "3.9.97"
resolved "https://registry.npm.taobao.org/@mdi/font/download/@mdi/font-3.9.97.tgz#b9f31e05574452e84f57e5b81d34ffd593bc9c29"
@@ -2722,6 +2730,22 @@ concat-stream@1.6.2, concat-stream@^1.5.0:
readable-stream "^2.2.2"
typedarray "^0.0.6"
+conf@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.npm.taobao.org/conf/download/conf-6.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconf%2Fdownload%2Fconf-6.2.1.tgz#b87ebc901945d43d32cd6855ba60d4ce66a5676d"
+ integrity sha1-uH68kBlF1D0yzWhVumDUzmalZ20=
+ dependencies:
+ ajv "^6.10.2"
+ debounce-fn "^3.0.1"
+ dot-prop "^5.0.0"
+ env-paths "^2.2.0"
+ json-schema-typed "^7.0.1"
+ make-dir "^3.0.0"
+ onetime "^5.1.0"
+ pkg-up "^3.0.1"
+ semver "^6.2.0"
+ write-file-atomic "^3.0.0"
+
configstore@^4.0.0:
version "4.0.0"
resolved "https://registry.npm.taobao.org/configstore/download/configstore-4.0.0.tgz?cache=0&sync_timestamp=1581616252924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconfigstore%2Fdownload%2Fconfigstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7"
@@ -3160,6 +3184,13 @@ de-indent@^1.0.2:
resolved "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
+debounce-fn@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npm.taobao.org/debounce-fn/download/debounce-fn-3.0.1.tgz#034afe8b904d985d1ec1aa589cd15f388741d680"
+ integrity sha1-A0r+i5BNmF0ewapYnNFfOIdB1oA=
+ dependencies:
+ mimic-fn "^2.1.0"
+
debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -3465,7 +3496,7 @@ dot-prop@^4.1.0:
dependencies:
is-obj "^1.0.0"
-dot-prop@^5.2.0:
+dot-prop@^5.0.0, dot-prop@^5.2.0:
version "5.2.0"
resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb"
integrity sha1-w07MKVVtxF8fTCJpe29JBODMT8s=
@@ -3603,6 +3634,14 @@ electron-publish@21.2.0:
lazy-val "^1.0.4"
mime "^2.4.4"
+electron-store@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npm.taobao.org/electron-store/download/electron-store-5.1.1.tgz?cache=0&sync_timestamp=1582365276673&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron-store%2Fdownload%2Felectron-store-5.1.1.tgz#3040e5b4ad25d2e4caea59d505646c1e7c94a09b"
+ integrity sha1-MEDltK0l0uTK6lnVBWRsHnyUoJs=
+ dependencies:
+ conf "^6.2.1"
+ type-fest "^0.7.1"
+
electron-to-chromium@^1.3.363:
version "1.3.374"
resolved "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.374.tgz#eb539bfcac8ec51de417038548c3bc93745134bb"
@@ -3700,6 +3739,11 @@ env-paths@^1.0.0:
resolved "https://registry.npm.taobao.org/env-paths/download/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0"
integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=
+env-paths@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43"
+ integrity sha1-zcpVfcAJFSkX1hZuL+vh8DloXkM=
+
errno@^0.1.3, errno@~0.1.7:
version "0.1.7"
resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
@@ -4274,6 +4318,11 @@ find-up@^4.0.0, find-up@^4.1.0:
locate-path "^5.0.0"
path-exists "^4.0.0"
+flag-icon-css@^3.4.6:
+ version "3.4.6"
+ resolved "https://registry.npm.taobao.org/flag-icon-css/download/flag-icon-css-3.4.6.tgz#7e51099c85648c65f86d9ebb9c0ec6f5d8826714"
+ integrity sha1-flEJnIVkjGX4bZ67nA7G9diCZxQ=
+
flat-cache@^2.0.1:
version "2.0.1"
resolved "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
@@ -5500,7 +5549,7 @@ is-symbol@^1.0.2:
dependencies:
has-symbols "^1.0.1"
-is-typedarray@~1.0.0:
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
@@ -5635,6 +5684,11 @@ json-schema-traverse@^0.4.1:
resolved "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA=
+json-schema-typed@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.npm.taobao.org/json-schema-typed/download/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9"
+ integrity sha1-I/9IG4tO680soSO0+gQJ5mRpotk=
+
json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
@@ -5667,7 +5721,7 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
-json5@^2.1.0:
+json5@^2.1.0, json5@^2.1.1:
version "2.1.1"
resolved "https://registry.npm.taobao.org/json5/download/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6"
integrity sha1-gbbLBOm6SW8ccAXQe0NoomOPkLY=
@@ -5985,7 +6039,7 @@ make-dir@^2.0.0:
pify "^4.0.1"
semver "^5.6.0"
-make-dir@^3.0.2:
+make-dir@^3.0.0, make-dir@^3.0.2:
version "3.0.2"
resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-3.0.2.tgz?cache=0&sync_timestamp=1581538804263&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392"
integrity sha1-BKGsvyIiHh1u9DVZ9D4FqQ27Q5I=
@@ -7079,6 +7133,13 @@ pkg-dir@^4.1.0:
dependencies:
find-up "^4.0.0"
+pkg-up@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.npm.taobao.org/pkg-up/download/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
+ integrity sha1-EA7CNcwVDk/UJRlBJZaihRKg3vU=
+ dependencies:
+ find-up "^3.0.0"
+
pnp-webpack-plugin@^1.6.0:
version "1.6.4"
resolved "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
@@ -9247,6 +9308,11 @@ type-fest@^0.6.0:
resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1583733678016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
integrity sha1-jSojcNPfiG61yQraHFv2GIrPg4s=
+type-fest@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.7.1.tgz?cache=0&sync_timestamp=1583733678016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
+ integrity sha1-jdpl/q8D7Xjwo/lnjxhpFH98XEg=
+
type-fest@^0.8.1:
version "0.8.1"
resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1582188531679&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
@@ -9260,6 +9326,13 @@ type-is@~1.6.17, type-is@~1.6.18:
media-typer "0.3.0"
mime-types "~2.1.24"
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.npm.taobao.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=
+ dependencies:
+ is-typedarray "^1.0.0"
+
typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
@@ -9590,6 +9663,11 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=
+vue-i18n@^8.15.5:
+ version "8.15.5"
+ resolved "https://registry.npm.taobao.org/vue-i18n/download/vue-i18n-8.15.5.tgz#e39e4724c88ec38ef72217de325e8b10a35718cf"
+ integrity sha1-455HJMiOw473IhfeMl6LEKNXGM8=
+
vue-loader@^15.8.3:
version "15.9.0"
resolved "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.0.tgz?cache=0&sync_timestamp=1581493732642&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.0.tgz#5d4b0378a4606188fc83e587ed23c94bc3a10998"
@@ -9956,6 +10034,16 @@ write-file-atomic@^2.0.0:
imurmurhash "^0.1.4"
signal-exit "^3.0.2"
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-3.0.3.tgz?cache=0&sync_timestamp=1582584103455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite-file-atomic%2Fdownload%2Fwrite-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha1-Vr1cWlxwSBzRnFcb05q5ZaXeVug=
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
write@1.0.3:
version "1.0.3"
resolved "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"