From 12f614227c4c3b3fab056d6d92dcbb9d515bdb00 Mon Sep 17 00:00:00 2001 From: qiang Date: Thu, 19 Aug 2021 12:18:53 +0800 Subject: [PATCH] feat: getLanguage, setLanguage --- package.json | 2 +- packages/shims-uni-app.d.ts | 1 + packages/uni-api/src/index.ts | 1 + packages/uni-api/src/service/ui/language.ts | 19 + .../uni-app-plus/dist/uni-app-service.es.js | 48 +- .../uni-app-plus/dist/uni-app-view.umd.js | 2 +- .../uni-app-plus/src/service/api/index.ts | 2 + .../service/framework/webview/init/style.ts | 1 + .../service/framework/webview/style/index.ts | 1 + .../src/json/app/manifest/merge.ts | 1 + packages/uni-core/src/i18n/useI18n.ts | 42 +- packages/uni-h5-vite/lib/api.json | 2 + .../uni-h5-vite/src/plugins/manifestJson.ts | 4 + packages/uni-h5-vite/src/plugins/pagesJson.ts | 3 +- packages/uni-h5/dist/uni-h5.cjs.js | 4 +- packages/uni-h5/dist/uni-h5.es.js | 18 +- packages/uni-h5/src/service/api/index.ts | 2 + packages/uni-i18n/dist/uni-i18n.cjs.js | 12 +- packages/uni-i18n/dist/uni-i18n.es.js | 12 +- packages/uni-i18n/src/vue-i18n.ts | 16 +- packages/uni-stat/dist/uni-stat.cjs.js | 1938 ++++++++--------- packages/uni-stat/dist/uni-stat.es.js | 1938 ++++++++--------- yarn.lock | 8 +- 23 files changed, 2104 insertions(+), 1973 deletions(-) create mode 100644 packages/uni-api/src/service/ui/language.ts diff --git a/package.json b/package.json index cfe927139..a8a36aac6 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ }, "devDependencies": { "@babel/preset-env": "^7.14.7", - "@dcloudio/types": "^2.5.0", + "@dcloudio/types": "^2.5.1", "@jest/types": "^27.0.2", "@microsoft/api-extractor": "^7.13.2", "@rollup/plugin-alias": "^3.1.1", diff --git a/packages/shims-uni-app.d.ts b/packages/shims-uni-app.d.ts index 9ae13acbe..ad679010a 100644 --- a/packages/shims-uni-app.d.ts +++ b/packages/shims-uni-app.d.ts @@ -70,6 +70,7 @@ declare namespace UniApp { } onReady: (fn: Function) => void serviceReady: boolean + language: string } interface UniRoute { diff --git a/packages/uni-api/src/index.ts b/packages/uni-api/src/index.ts index e75dbbf14..3e513a1bf 100644 --- a/packages/uni-api/src/index.ts +++ b/packages/uni-api/src/index.ts @@ -14,6 +14,7 @@ export * from './service/ui/createSelectorQuery' export * from './service/ui/createAnimation' export * from './service/ui/tabBar' export * from './service/ui/window' +export * from './service/ui/language' export * from './service/keyboard/getSelectedTextRange' diff --git a/packages/uni-api/src/service/ui/language.ts b/packages/uni-api/src/service/ui/language.ts new file mode 100644 index 000000000..210a2f0ee --- /dev/null +++ b/packages/uni-api/src/service/ui/language.ts @@ -0,0 +1,19 @@ +import { defineSyncApi } from '../../helpers/api' +import { useI18n } from '@dcloudio/uni-core' +import { BuiltInLocale } from '@dcloudio/uni-i18n' + +export const getLanguage = defineSyncApi( + 'getLanguage', + () => { + const i18n = useI18n() + return i18n.getLocale() + } +) + +export const setLanguage = defineSyncApi( + 'setLanguage', + (locale) => { + const i18n = useI18n() + return i18n.setLocale(locale as BuiltInLocale) + } +) diff --git a/packages/uni-app-plus/dist/uni-app-service.es.js b/packages/uni-app-plus/dist/uni-app-service.es.js index 5772fd172..be8a1cda2 100644 --- a/packages/uni-app-plus/dist/uni-app-service.es.js +++ b/packages/uni-app-plus/dist/uni-app-service.es.js @@ -1432,13 +1432,16 @@ var serviceContext = (function (vue) { } } + const ignoreVueI18n = true; function initLocaleWatcher(appVm, i18n) { - appVm.$i18n && - appVm.$i18n.vm.$watch('locale', (newLocale) => { + if (appVm.$i18n) { + const vm = appVm.$i18n.vm ? appVm.$i18n.vm : appVm; + vm.$watch(appVm.$i18n.vm ? 'locale' : () => appVm.$i18n.locale, (newLocale) => { i18n.setLocale(newLocale); }, { immediate: true, }); + } } // function getDefaultLocale() { // if (typeof navigator !== 'undefined') { @@ -1450,7 +1453,7 @@ var serviceContext = (function (vue) { // } // return uni.getSystemInfoSync().language // } - function initVueI18n(locale = LOCALE_EN, messages = {}, fallbackLocale = LOCALE_EN) { + function initVueI18n(locale = LOCALE_EN, messages = {}, fallbackLocale = LOCALE_EN, watcher) { // 兼容旧版本入参 if (typeof locale !== 'string') { [locale, messages] = [messages, locale]; @@ -1462,6 +1465,7 @@ var serviceContext = (function (vue) { locale: locale || fallbackLocale, fallbackLocale, messages, + watcher, }); let t = (key, values) => { if (typeof getApp !== 'function') { @@ -1473,7 +1477,7 @@ var serviceContext = (function (vue) { } else { const appVm = getApp().$vm; - if (!appVm.$t || !appVm.$i18n) { + if (!appVm.$t || !appVm.$i18n || ignoreVueI18n) { // if (!locale) { // i18n.setLocale(getDefaultLocale()) // } @@ -1522,10 +1526,28 @@ var serviceContext = (function (vue) { if (!i18n) { let language; { - // TODO 需替换为新API - language = plus.os.language; + if (typeof getApp === 'function') { + language = weex.requireModule('plus').getLanguage(); + } + else { + language = plus.webview.currentWebview().getStyle().language; + } + } + const SET_LOCALE_API = 'i18n.setLocale'; + { + i18n = initVueI18n(language, undefined, undefined, typeof getApp === 'function' + ? (locale) => { + const pages = getCurrentPages(); + pages.forEach((page) => { + UniServiceJSBridge.publishHandler(SET_LOCALE_API, locale, page.$page.id); + }); + weex.requireModule('plus').setLanguage(locale); + } + : undefined); + } + if (typeof getApp !== 'function') { + UniViewJSBridge.subscribe(SET_LOCALE_API, i18n.setLocale); } - i18n = initVueI18n(language); } return i18n; } @@ -4076,6 +4098,15 @@ var serviceContext = (function (vue) { // window.removeEventListener('resize', onResize) }); + const getLanguage = defineSyncApi('getLanguage', () => { + const i18n = useI18n(); + return i18n.getLocale(); + }); + const setLanguage = defineSyncApi('setLanguage', (locale) => { + const i18n = useI18n(); + return i18n.setLocale(locale); + }); + const API_GET_SELECTED_TEXT_RANGE = 'getSelectedTextRange'; const getSelectedTextRange = defineAsyncApi(API_GET_SELECTED_TEXT_RANGE, (_, { resolve, reject }) => { @@ -10243,6 +10274,7 @@ var serviceContext = (function (vue) { // android 需要使用 webviewStyle.isTab = isTabBar; } + webviewStyle.language = weex.requireModule('plus').getLanguage(); if ((process.env.NODE_ENV !== 'production')) { console.log(formatLog('updateWebview', webviewStyle)); } @@ -12034,6 +12066,8 @@ var serviceContext = (function (vue) { canvasPutImageData: canvasPutImageData, canvasToTempFilePath: canvasToTempFilePath, getSelectedTextRange: getSelectedTextRange, + getLanguage: getLanguage, + setLanguage: setLanguage, $on: $on, $off: $off, $once: $once, diff --git a/packages/uni-app-plus/dist/uni-app-view.umd.js b/packages/uni-app-plus/dist/uni-app-view.umd.js index 542c1b7c7..01d2260a1 100644 --- a/packages/uni-app-plus/dist/uni-app-view.umd.js +++ b/packages/uni-app-plus/dist/uni-app-view.umd.js @@ -1 +1 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";var e={exports:{}},t={exports:{}},n={exports:{}},r=n.exports={version:"2.6.12"};"number"==typeof __e&&(__e=r);var i={exports:{}},a=i.exports=void 0!==a&&a.Math==Math?a:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a);var o=n.exports,s=i.exports,l="__core-js_shared__",u=s[l]||(s[l]={});(t.exports=function(e,t){return u[e]||(u[e]=void 0!==t?t:{})})("versions",[]).push({version:o.version,mode:"window",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"});var c=0,d=Math.random(),h=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++c+d).toString(36))},p=t.exports("wks"),f=h,v=i.exports.Symbol,g="function"==typeof v;(e.exports=function(e){return p[e]||(p[e]=g&&v[e]||(g?v:f)("Symbol."+e))}).store=p;var m={},y=function(e){return"object"==typeof e?null!==e:"function"==typeof e},_=y,b=function(e){if(!_(e))throw TypeError(e+" is not an object!");return e},w=function(e){try{return!!e()}catch(t){return!0}},x=!w((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})),S=y,T=i.exports.document,E=S(T)&&S(T.createElement),k=function(e){return E?T.createElement(e):{}},C=!x&&!w((function(){return 7!=Object.defineProperty(k("div"),"a",{get:function(){return 7}}).a})),M=y,O=b,I=C,L=function(e,t){if(!M(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!M(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!M(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!M(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},N=Object.defineProperty;m.f=x?Object.defineProperty:function(e,t,n){if(O(e),t=L(t,!0),O(n),I)try{return N(e,t,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e};var A=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},P=m,R=A,B=x?function(e,t,n){return P.f(e,t,R(1,n))}:function(e,t,n){return e[t]=n,e},$=e.exports("unscopables"),D=Array.prototype;null==D[$]&&B(D,$,{});var F={},W={}.toString,j=function(e){return W.call(e).slice(8,-1)},V=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},z=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==j(e)?e.split(""):Object(e)},H=V,q=function(e){return z(H(e))},U={exports:{}},Y={}.hasOwnProperty,X=function(e,t){return Y.call(e,t)},G=t.exports("native-function-to-string",Function.toString),J=i.exports,K=B,Z=X,Q=h("src"),ee=G,te="toString",ne=(""+ee).split(te);n.exports.inspectSource=function(e){return ee.call(e)},(U.exports=function(e,t,n,r){var i="function"==typeof n;i&&(Z(n,"name")||K(n,"name",t)),e[t]!==n&&(i&&(Z(n,Q)||K(n,Q,e[t]?""+e[t]:ne.join(String(t)))),e===J?e[t]=n:r?e[t]?e[t]=n:K(e,t,n):(delete e[t],K(e,t,n)))})(Function.prototype,te,(function(){return"function"==typeof this&&this[Q]||ee.call(this)}));var re=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},ie=re,ae=i.exports,oe=n.exports,se=B,le=U.exports,ue=function(e,t,n){if(ie(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}},ce=function(e,t,n){var r,i,a,o,s=e&ce.F,l=e&ce.G,u=e&ce.S,c=e&ce.P,d=e&ce.B,h=l?ae:u?ae[t]||(ae[t]={}):(ae[t]||{}).prototype,p=l?oe:oe[t]||(oe[t]={}),f=p.prototype||(p.prototype={});for(r in l&&(n=t),n)a=((i=!s&&h&&void 0!==h[r])?h:n)[r],o=d&&i?ue(a,ae):c&&"function"==typeof a?ue(Function.call,a):a,h&&le(h,r,a,e&ce.U),p[r]!=a&&se(p,r,o),c&&f[r]!=a&&(f[r]=a)};ae.core=oe,ce.F=1,ce.G=2,ce.S=4,ce.P=8,ce.B=16,ce.W=32,ce.U=64,ce.R=128;var de,he=ce,pe=Math.ceil,fe=Math.floor,ve=function(e){return isNaN(e=+e)?0:(e>0?fe:pe)(e)},ge=ve,me=Math.min,ye=ve,_e=Math.max,be=Math.min,we=q,xe=function(e){return e>0?me(ge(e),9007199254740991):0},Se=function(e,t){return(e=ye(e))<0?_e(e+t,0):be(e,t)},Te=t.exports("keys"),Ee=h,ke=function(e){return Te[e]||(Te[e]=Ee(e))},Ce=X,Me=q,Oe=(de=!1,function(e,t,n){var r,i=we(e),a=xe(i.length),o=Se(n,a);if(de&&t!=t){for(;a>o;)if((r=i[o++])!=r)return!0}else for(;a>o;o++)if((de||o in i)&&i[o]===t)return de||o||0;return!de&&-1}),Ie=ke("IE_PROTO"),Le="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),Ne=function(e,t){var n,r=Me(e),i=0,a=[];for(n in r)n!=Ie&&Ce(r,n)&&a.push(n);for(;t.length>i;)Ce(r,n=t[i++])&&(~Oe(a,n)||a.push(n));return a},Ae=Le,Pe=Object.keys||function(e){return Ne(e,Ae)},Re=m,Be=b,$e=Pe,De=x?Object.defineProperties:function(e,t){Be(e);for(var n,r=$e(t),i=r.length,a=0;i>a;)Re.f(e,n=r[a++],t[n]);return e},Fe=i.exports.document,We=Fe&&Fe.documentElement,je=b,Ve=De,ze=Le,He=ke("IE_PROTO"),qe=function(){},Ue=function(){var e,t=k("iframe"),n=ze.length;for(t.style.display="none",We.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("