更新翻译函数
This commit is contained in:
parent
4a51739f03
commit
47a4fd1c99
@ -12,6 +12,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"art-template": "^4.13.2",
|
||||
"dayjs": "^1.10.8",
|
||||
"deepmerge": "^4.2.2",
|
||||
"glob": "^7.2.0",
|
||||
"gulp": "^4.0.2",
|
||||
|
239
pnpm-lock.yaml
generated
239
pnpm-lock.yaml
generated
@ -4,6 +4,7 @@ specifiers:
|
||||
'@babel/cli': ^7.17.6
|
||||
'@babel/core': ^7.17.5
|
||||
art-template: ^4.13.2
|
||||
dayjs: ^1.10.8
|
||||
deepmerge: ^4.2.2
|
||||
glob: ^7.2.0
|
||||
gulp: ^4.0.2
|
||||
@ -15,6 +16,7 @@ specifiers:
|
||||
|
||||
dependencies:
|
||||
art-template: 4.13.2
|
||||
dayjs: registry.npmmirror.com/dayjs/1.10.8
|
||||
deepmerge: 4.2.2
|
||||
glob: 7.2.0
|
||||
gulp: 4.0.2
|
||||
@ -54,8 +56,8 @@ packages:
|
||||
slash: 2.0.0
|
||||
source-map: 0.5.7
|
||||
optionalDependencies:
|
||||
'@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3
|
||||
chokidar: 3.5.3
|
||||
'@nicolo-ribaudo/chokidar-2': registry.npmmirror.com/@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents.3
|
||||
chokidar: registry.npmmirror.com/chokidar/3.5.3
|
||||
dev: true
|
||||
|
||||
/@babel/code-frame/7.16.7:
|
||||
@ -529,7 +531,7 @@ packages:
|
||||
dependencies:
|
||||
callsites: 3.1.0
|
||||
graceful-fs: 4.2.9
|
||||
source-map: 0.6.1
|
||||
source-map: registry.npmmirror.com/source-map/0.6.1
|
||||
dev: true
|
||||
|
||||
/@jest/test-result/27.5.1:
|
||||
@ -604,12 +606,6 @@ packages:
|
||||
'@jridgewell/sourcemap-codec': 1.4.11
|
||||
dev: true
|
||||
|
||||
/@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents.3:
|
||||
resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==}
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@sinonjs/commons/1.8.3:
|
||||
resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==}
|
||||
dependencies:
|
||||
@ -1063,14 +1059,6 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/bindings/1.5.0:
|
||||
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
file-uri-to-path: 1.0.0
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/brace-expansion/1.1.11:
|
||||
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
|
||||
dependencies:
|
||||
@ -1205,42 +1193,6 @@ packages:
|
||||
engines: {node: '>=10'}
|
||||
dev: true
|
||||
|
||||
/chokidar/2.1.8:
|
||||
resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==}
|
||||
deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
|
||||
dependencies:
|
||||
anymatch: 2.0.0
|
||||
async-each: 1.0.3
|
||||
braces: 2.3.2
|
||||
glob-parent: 3.1.0
|
||||
inherits: 2.0.4
|
||||
is-binary-path: 1.0.1
|
||||
is-glob: 4.0.3
|
||||
normalize-path: 3.0.0
|
||||
path-is-absolute: 1.0.1
|
||||
readdirp: 2.2.1
|
||||
upath: 1.2.0
|
||||
optionalDependencies:
|
||||
fsevents: 1.2.13
|
||||
dev: false
|
||||
|
||||
/chokidar/3.5.3:
|
||||
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
|
||||
engines: {node: '>= 8.10.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
anymatch: 3.1.2
|
||||
braces: 3.0.2
|
||||
glob-parent: 5.1.2
|
||||
is-binary-path: 2.1.0
|
||||
is-glob: 4.0.3
|
||||
normalize-path: 3.0.0
|
||||
readdirp: 3.6.0
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/ci-info/3.3.0:
|
||||
resolution: {integrity: sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==}
|
||||
dev: true
|
||||
@ -1263,7 +1215,7 @@ packages:
|
||||
resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
|
||||
engines: {node: '>= 4.0'}
|
||||
dependencies:
|
||||
source-map: 0.6.1
|
||||
source-map: registry.npmmirror.com/source-map/0.6.1
|
||||
dev: false
|
||||
|
||||
/cliui/3.2.0:
|
||||
@ -1662,7 +1614,7 @@ packages:
|
||||
esutils: 2.0.3
|
||||
optionator: 0.8.3
|
||||
optionalDependencies:
|
||||
source-map: 0.6.1
|
||||
source-map: registry.npmmirror.com/source-map/0.6.1
|
||||
dev: false
|
||||
|
||||
/escodegen/2.0.0:
|
||||
@ -1675,7 +1627,7 @@ packages:
|
||||
esutils: 2.0.3
|
||||
optionator: 0.8.3
|
||||
optionalDependencies:
|
||||
source-map: 0.6.1
|
||||
source-map: registry.npmmirror.com/source-map/0.6.1
|
||||
dev: true
|
||||
|
||||
/esprima/4.0.1:
|
||||
@ -1813,12 +1765,6 @@ packages:
|
||||
bser: 2.1.1
|
||||
dev: true
|
||||
|
||||
/file-uri-to-path/1.0.0:
|
||||
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/fill-range/4.0.0:
|
||||
resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@ -1938,26 +1884,6 @@ packages:
|
||||
/fs.realpath/1.0.0:
|
||||
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
|
||||
|
||||
/fsevents/1.2.13:
|
||||
resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==}
|
||||
engines: {node: '>= 4.0'}
|
||||
os: [darwin]
|
||||
deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
bindings: 1.5.0
|
||||
nan: 2.15.0
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/fsevents/2.3.2:
|
||||
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/function-bind/1.1.1:
|
||||
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
|
||||
|
||||
@ -2035,7 +1961,7 @@ packages:
|
||||
dependencies:
|
||||
anymatch: 2.0.0
|
||||
async-done: 1.3.2
|
||||
chokidar: 2.1.8
|
||||
chokidar: registry.npmmirror.com/chokidar/2.1.8
|
||||
is-negated-glob: 1.0.0
|
||||
just-debounce: 1.1.0
|
||||
normalize-path: 3.0.0
|
||||
@ -2551,7 +2477,7 @@ packages:
|
||||
dependencies:
|
||||
debug: 4.3.3
|
||||
istanbul-lib-coverage: 3.2.0
|
||||
source-map: 0.6.1
|
||||
source-map: registry.npmmirror.com/source-map/0.6.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
@ -2750,7 +2676,7 @@ packages:
|
||||
micromatch: 4.0.4
|
||||
walker: 1.0.8
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
fsevents: registry.npmmirror.com/fsevents/2.3.2
|
||||
dev: true
|
||||
|
||||
/jest-jasmine2/27.5.1:
|
||||
@ -3378,12 +3304,6 @@ packages:
|
||||
engines: {node: '>= 0.10'}
|
||||
dev: false
|
||||
|
||||
/nan/2.15.0:
|
||||
resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==}
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/nanomatch/1.2.13:
|
||||
resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@ -4089,7 +4009,7 @@ packages:
|
||||
define-property: 0.2.5
|
||||
extend-shallow: 2.0.1
|
||||
map-cache: 0.2.2
|
||||
source-map: 0.5.7
|
||||
source-map: registry.npmmirror.com/source-map/0.5.7
|
||||
source-map-resolve: 0.5.3
|
||||
use: 3.1.1
|
||||
dev: false
|
||||
@ -4109,7 +4029,7 @@ packages:
|
||||
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
|
||||
dependencies:
|
||||
buffer-from: 1.1.2
|
||||
source-map: 0.6.1
|
||||
source-map: registry.npmmirror.com/source-map/0.6.1
|
||||
dev: true
|
||||
|
||||
/source-map-url/0.4.1:
|
||||
@ -4125,11 +4045,6 @@ packages:
|
||||
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
/source-map/0.7.3:
|
||||
resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==}
|
||||
engines: {node: '>= 8'}
|
||||
dev: true
|
||||
|
||||
/sparkles/1.0.1:
|
||||
resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==}
|
||||
engines: {node: '>= 0.10'}
|
||||
@ -4464,7 +4379,7 @@ packages:
|
||||
hasBin: true
|
||||
dependencies:
|
||||
commander: 2.19.0
|
||||
source-map: 0.6.1
|
||||
source-map: registry.npmmirror.com/source-map/0.6.1
|
||||
dev: false
|
||||
|
||||
/unc-path-regex/0.1.2:
|
||||
@ -4551,7 +4466,7 @@ packages:
|
||||
dependencies:
|
||||
'@types/istanbul-lib-coverage': 2.0.4
|
||||
convert-source-map: 1.8.0
|
||||
source-map: 0.7.3
|
||||
source-map: registry.npmmirror.com/source-map/0.7.3
|
||||
dev: true
|
||||
|
||||
/v8flags/3.2.0:
|
||||
@ -4812,12 +4727,70 @@ packages:
|
||||
regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.9
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents.3:
|
||||
resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz}
|
||||
name: '@nicolo-ribaudo/chokidar-2'
|
||||
version: 2.1.8-no-fsevents.3
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/ansicolor/1.1.100:
|
||||
resolution: {integrity: sha512-Jl0pxRfa9WaQVUX57AB8/V2my6FJxrOR1Pp2qqFbig20QB4HzUoQ48THTKAgHlUCJeQm/s2WoOPcoIDhyCL/kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansicolor/-/ansicolor-1.1.100.tgz}
|
||||
name: ansicolor
|
||||
version: 1.1.100
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/bindings/1.5.0:
|
||||
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz}
|
||||
name: bindings
|
||||
version: 1.5.0
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
file-uri-to-path: registry.npmmirror.com/file-uri-to-path/1.0.0
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/chokidar/2.1.8:
|
||||
resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz}
|
||||
name: chokidar
|
||||
version: 2.1.8
|
||||
deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
|
||||
dependencies:
|
||||
anymatch: 2.0.0
|
||||
async-each: 1.0.3
|
||||
braces: 2.3.2
|
||||
glob-parent: 3.1.0
|
||||
inherits: 2.0.4
|
||||
is-binary-path: 1.0.1
|
||||
is-glob: 4.0.3
|
||||
normalize-path: 3.0.0
|
||||
path-is-absolute: 1.0.1
|
||||
readdirp: 2.2.1
|
||||
upath: 1.2.0
|
||||
optionalDependencies:
|
||||
fsevents: registry.npmmirror.com/fsevents/1.2.13
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/chokidar/3.5.3:
|
||||
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz}
|
||||
name: chokidar
|
||||
version: 3.5.3
|
||||
engines: {node: '>= 8.10.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
anymatch: 3.1.2
|
||||
braces: 3.0.2
|
||||
glob-parent: 5.1.2
|
||||
is-binary-path: 2.1.0
|
||||
is-glob: 4.0.3
|
||||
normalize-path: 3.0.0
|
||||
readdirp: 3.6.0
|
||||
optionalDependencies:
|
||||
fsevents: registry.npmmirror.com/fsevents/2.3.2
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/core-js-pure/3.21.1:
|
||||
resolution: {integrity: sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.21.1.tgz}
|
||||
name: core-js-pure
|
||||
@ -4832,6 +4805,12 @@ packages:
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/dayjs/1.10.8:
|
||||
resolution: {integrity: sha512-wbNwDfBHHur9UOzNUjeKUOJ0fCb0a52Wx0xInmQ7Y8FstyajiV1NmK1e00cxsr9YrE9r7yAChE0VvpuY5Rnlow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.10.8.tgz}
|
||||
name: dayjs
|
||||
version: 1.10.8
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/deepmerge/4.2.2:
|
||||
resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/deepmerge/-/deepmerge-4.2.2.tgz}
|
||||
name: deepmerge
|
||||
@ -4839,12 +4818,52 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/file-uri-to-path/1.0.0:
|
||||
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz}
|
||||
name: file-uri-to-path
|
||||
version: 1.0.0
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/fsevents/1.2.13:
|
||||
resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz}
|
||||
name: fsevents
|
||||
version: 1.2.13
|
||||
engines: {node: '>= 4.0'}
|
||||
os: [darwin]
|
||||
deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
bindings: registry.npmmirror.com/bindings/1.5.0
|
||||
nan: registry.npmmirror.com/nan/2.15.0
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/fsevents/2.3.2:
|
||||
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
|
||||
name: fsevents
|
||||
version: 2.3.2
|
||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/jju/1.4.0:
|
||||
resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jju/-/jju-1.4.0.tgz}
|
||||
name: jju
|
||||
version: 1.4.0
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/nan/2.15.0:
|
||||
resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nan/-/nan-2.15.0.tgz}
|
||||
name: nan
|
||||
version: 2.15.0
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
registry.npmmirror.com/readjson/2.2.2:
|
||||
resolution: {integrity: sha512-PdeC9tsmLWBiL8vMhJvocq+OezQ3HhsH2HrN7YkhfYcTjQSa/iraB15A7Qvt7Xpr0Yd2rDNt6GbFwVQDg3HcAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readjson/-/readjson-2.2.2.tgz}
|
||||
name: readjson
|
||||
@ -4861,6 +4880,26 @@ packages:
|
||||
version: 0.13.9
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/source-map/0.5.7:
|
||||
resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz}
|
||||
name: source-map
|
||||
version: 0.5.7
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/source-map/0.6.1:
|
||||
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz}
|
||||
name: source-map
|
||||
version: 0.6.1
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
registry.npmmirror.com/source-map/0.7.3:
|
||||
resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.7.3.tgz}
|
||||
name: source-map
|
||||
version: 0.7.3
|
||||
engines: {node: '>= 8'}
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/try-catch/3.0.0:
|
||||
resolution: {integrity: sha512-3uAqUnoemzca1ENvZ72EVimR+E8lqBbzwZ9v4CEbLjkaV3Q+FtdmPUt7jRtoSoTiYjyIMxEkf6YgUpe/voJ1ng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/try-catch/-/try-catch-3.0.0.tgz}
|
||||
name: try-catch
|
||||
|
@ -13,12 +13,14 @@
|
||||
*
|
||||
*
|
||||
*/
|
||||
export default {
|
||||
const dayjs = require("dayjs");
|
||||
|
||||
module.exports = {
|
||||
cn:{
|
||||
Date:{
|
||||
default:(value)=>dayjs(value).format("YYYY年MM年DD日"), // 默认的变量格式化器
|
||||
default:(value)=>dayjs(value).format("YYYY年MM年DD日"), // 默认的格式化器
|
||||
time:(value)=>dayjs(value).format("HH:mm:ss"),
|
||||
short:(value)=>dayjs(value).format("YYYY/MM/DD"),
|
||||
date:(value)=>dayjs(value).format("YYYY/MM/DD")
|
||||
},
|
||||
Number:{
|
||||
|
||||
|
59
src/index.js
59
src/index.js
@ -1,4 +1,5 @@
|
||||
import deepMerge from "deepmerge"
|
||||
const deepMerge = require("deepmerge")
|
||||
const formatters = require("./formatters")
|
||||
|
||||
|
||||
// 用来提取字符里面的插值变量参数 , 支持管道符 { var | formatter | formatter }
|
||||
@ -46,18 +47,21 @@ function getDataTypeName(v){
|
||||
* @param {*} str
|
||||
* @returns {Array} [[变量名称,[]],[变量名称,[formatter,formatter,...]],...]
|
||||
*/
|
||||
function getInterpolatedVars(str){
|
||||
let result = []
|
||||
module.exports.getInterpolatedVars = function(str){
|
||||
let results = []
|
||||
let match
|
||||
while ((match = varWidthPipeRegexp.exec(str)) !== null) {
|
||||
if (match.index === varWidthPipeRegexp.lastIndex) {
|
||||
varWidthPipeRegexp.lastIndex++;
|
||||
}
|
||||
if(match.groups.varname) {
|
||||
result.push(match.groups.formatters ? [match.groups.varname,match.groups.formatters.trim().split("|")] : [match.groups.varname,[]])
|
||||
const varname = match.groups.varname
|
||||
const formatters = match.groups.formatters ? match.groups.formatters.trim().substr(1).trim().split("|").map(r=>r.trim()) : []
|
||||
if(varname) {
|
||||
const varDefine = formatters ? [varname,formatters] : [varname,[]]
|
||||
if(results.findIndex(item=>item[0]===varDefine[0] && item[1].join()===varDefine[1].join()) === -1) results.push(varDefine)
|
||||
}
|
||||
}
|
||||
return result
|
||||
return results
|
||||
}
|
||||
/**
|
||||
* 将要翻译内容提供了一个非文本内容时进行默认的转换
|
||||
@ -97,31 +101,39 @@ function transformVarValue(value){
|
||||
* @param {*} template
|
||||
* @returns
|
||||
*/
|
||||
function replaceInterpolateVars(template,...args) {
|
||||
module.exports.replaceInterpolateVars = function(template,...args) {
|
||||
const scope = this
|
||||
const activeLanguage = scope.activeLanguage
|
||||
let result=template
|
||||
if(!hasInterpolation(template)) return template
|
||||
|
||||
if(args.length===1 && typeof(args[0]) === "object" && !Array.isArray(args[0])){ // 变量插值
|
||||
// 取得里面的插值变量
|
||||
let varNames = getInterpolatedVars(template)
|
||||
// 变量插值
|
||||
if(args.length===1 && typeof(args[0]) === "object" && !Array.isArray(args[0])){
|
||||
// 格式化器只能用在字典变量中
|
||||
// {var1:[formatter,formatter,...],var2:[formatter,formatter,...],...}
|
||||
let varNames = getInterpolatedVars(template)
|
||||
let varValues = args[0]
|
||||
if(varNames.length===0) return template
|
||||
for(let [name,formatters] of varNames){
|
||||
// 计算出变量值
|
||||
let value = (name in varValues) ? varValues[name] : ''
|
||||
if(formatters.length >0 ){
|
||||
// 针对每种数据类型的默认格式化器
|
||||
let dataType= getDataTypeName(value)
|
||||
if(dataType in scope.formatters[activeLanguage]){
|
||||
const formatter = scope.formatters[activeLanguage][dataType]
|
||||
formatters.splice(0,0,formatter)
|
||||
}
|
||||
if(formatters.length > 0 ){
|
||||
formatters.reduce((v,formatter)=>{
|
||||
if(formatter in scope.formatters){
|
||||
return scope.formatters[formatter](v)
|
||||
}else{
|
||||
return v
|
||||
}
|
||||
},"")
|
||||
}
|
||||
},value)
|
||||
}
|
||||
// 如果变量中包括|管道符,则需要进行转换以适配更宽松的写法,比如data|time能匹配"data |time","data | time"等
|
||||
let nameRegexp = name.includes("|") ? name.split("|").join("\\s*\\|\\s*") : name
|
||||
result=result.replaceAll(new RegExp(varReplaceRegexp.replaceAll("{varname}",nameRegexp),"g"),transformVarValue(args[0][name]))
|
||||
let nameRegexp =new RegExp(`${name}\\s*\\|\\s*${formatters.join("\\s*\\|\\s*")}`,"g")
|
||||
result=result.replaceAll(nameRegexp,"gm"),transformVarValue(value))
|
||||
}
|
||||
}else{ // 位置插值
|
||||
const params=(args.length===1 && Array.isArray(args[0])) ? [...args[0]] : args
|
||||
@ -138,13 +150,14 @@ function replaceInterpolateVars(template,...args) {
|
||||
}
|
||||
|
||||
// 默认语言配置
|
||||
export const defaultLanguageSettings = {
|
||||
module.exports.defaultLanguageSettings = {
|
||||
defaultLanguage: "cn",
|
||||
activeLanguage: "cn",
|
||||
languages:{
|
||||
cn:{name:"cn",title:"中文",default:true},
|
||||
en:{name:"en",title:"英文"},
|
||||
}
|
||||
},
|
||||
formatters
|
||||
}
|
||||
|
||||
function isMessageId(content){
|
||||
@ -165,7 +178,7 @@ function isMessageId(content){
|
||||
* this===scope 当前绑定的scope
|
||||
*
|
||||
*/
|
||||
export function translate(message) {
|
||||
module.exports.translate = function(message) {
|
||||
const scope = this
|
||||
const activeLanguage = scope.settings.activeLanguage
|
||||
let vars={} // 插值变量
|
||||
@ -175,7 +188,11 @@ export function translate(message) {
|
||||
Object.assign(vars,arguments[1])
|
||||
Object.entries(vars).forEach(([key,value])=>{
|
||||
if(typeof(value)==="function"){
|
||||
vars[key] =try{value()}catch(e){value}
|
||||
try{
|
||||
vars[key] = value()
|
||||
}catch(e){
|
||||
vars[key] = value
|
||||
}
|
||||
}
|
||||
if(key.startsWith("$")) pluralVars.push(key) // 复数变量
|
||||
})
|
||||
@ -226,7 +243,7 @@ export function translate(message) {
|
||||
* VoerkaI18n.off("change",(language)=>{})
|
||||
*
|
||||
* */
|
||||
export class I18n{
|
||||
module.exports.i18n = class I18n{
|
||||
static instance = null; // 单例引用
|
||||
callbacks = [] // 当切换语言时的回调事件
|
||||
constructor(settings={}){
|
||||
|
@ -0,0 +1,31 @@
|
||||
const { getInterpolatedVars, replaceInterpolateVars} = require('../src/index.js')
|
||||
|
||||
|
||||
test("获取表达式中的插值变量",done=>{
|
||||
const results = getInterpolatedVars("中华人民共和国成立于{date | year | time }年,首都是{city}市");
|
||||
expect(results.map(r=>r[0]).join(",")).toBe("date,city");
|
||||
expect(results[0][0]).toEqual("date");
|
||||
expect(results[0][1]).toEqual(["year","time"]);
|
||||
expect(results[1][0]).toEqual("city");
|
||||
expect(results[1][1]).toEqual([]);
|
||||
done()
|
||||
})
|
||||
test("表达式中定义了重复的插值变量",done=>{
|
||||
const results = getInterpolatedVars("{a}{a}{a|x}{a|x}{a|x|y}{a|x|y}");
|
||||
expect(results.length).toEqual(3);
|
||||
expect(results[0][0]).toEqual("a");
|
||||
expect(results[0][1]).toEqual([]);
|
||||
expect(results[1][0]).toEqual("a");
|
||||
expect(results[1][1]).toEqual(["x"]);
|
||||
expect(results[2][0]).toEqual("a");
|
||||
expect(results[2][1]).toEqual(["x","y"]);
|
||||
done()
|
||||
})
|
||||
// test("替代表达式中的插值变量",done=>{
|
||||
// const results = replaceInterpolateVars("中华人民共和国成立于{date}年,首都是{city}市",{
|
||||
// date:1949,
|
||||
// city:"北京"
|
||||
// });
|
||||
// expect(results).toBe("中华人民共和国成立于1949年,首都是北京市");
|
||||
// done()
|
||||
// }
|
@ -33,7 +33,6 @@ test("启用名称空间后扫描提取翻译文本",(done)=>{
|
||||
"core":"a/b", // 名称空间
|
||||
}
|
||||
}))
|
||||
expect("core" in texts).toBeFalsy()
|
||||
expect("core" in texts).toBeTruthy()
|
||||
expect(Object.keys(texts.core).join()).toBe("a,b,c,d")
|
||||
Object.entries(texts.core).forEach(([text,langs])=>{
|
||||
|
@ -3,16 +3,16 @@ import { translate } from "../src/index.js"
|
||||
|
||||
|
||||
test("默认语言翻译",done=>{
|
||||
|
||||
done()
|
||||
})
|
||||
|
||||
|
||||
test("启用位置插值变量翻译",done=>{
|
||||
|
||||
done()
|
||||
})
|
||||
|
||||
|
||||
|
||||
test("启用字典插值变量翻译",done=>{
|
||||
|
||||
done()
|
||||
})
|
Loading…
x
Reference in New Issue
Block a user