提交 25bd2558 编写于 作者: fxy060608's avatar fxy060608

fix(i18n): custom locale

上级 2d998b28
......@@ -17,6 +17,11 @@ if (process.env.UNI_VIEW !== 'true') {
commonjs: 'vue-router',
commonjs2: 'vue-router',
root: 'VueRouter'
}
externals['@dcloudio/uni-i18n'] = {
commonjs: '@dcloudio/uni-i18n',
commonjs2: '@dcloudio/uni-i18n',
root: '@dcloudio/uni-i18n'
}
}
......
......@@ -64,6 +64,7 @@ var serviceContext = (function () {
'chooseImage',
'chooseFile',
'previewImage',
'closePreviewImage',
'getImageInfo',
'getVideoInfo',
'saveImageToPhotosAlbum',
......@@ -234,6 +235,7 @@ var serviceContext = (function () {
'preLogin',
'closeAuthView',
'getCheckBoxState',
'getUniverifyManager',
'share',
'shareWithSystem',
'showShareMenu',
......@@ -253,7 +255,8 @@ var serviceContext = (function () {
'sendNativeEvent',
'preloadPage',
'unPreloadPage',
'loadSubPackage'
'loadSubPackage',
'sendHostEvent'
];
const ad = [
......@@ -1534,7 +1537,7 @@ var serviceContext = (function () {
"uni.chooseVideo.cancel": "Cancel",
"uni.chooseVideo.sourceType.album": "Album",
"uni.chooseVideo.sourceType.camera": "Camera",
"uni.previewImage.cancel": "Cancel",
"uni.chooseFile.notUserActivation": "File chooser dialog can only be shown with a user activation",
"uni.previewImage.button.save": "Save Image",
"uni.previewImage.save.success": "Saved successfully",
"uni.previewImage.save.fail": "Save failed",
......@@ -1569,6 +1572,7 @@ var serviceContext = (function () {
"uni.chooseVideo.cancel": "Cancelar",
"uni.chooseVideo.sourceType.album": "Álbum",
"uni.chooseVideo.sourceType.camera": "Cámara",
"uni.chooseFile.notUserActivation": "El cuadro de diálogo del selector de archivos solo se puede mostrar con la activación del usuario",
"uni.previewImage.cancel": "Cancelar",
"uni.previewImage.button.save": "Guardar imagen",
"uni.previewImage.save.success": "Guardado exitosamente",
......@@ -1604,6 +1608,7 @@ var serviceContext = (function () {
"uni.chooseVideo.cancel": "Annuler",
"uni.chooseVideo.sourceType.album": "Album",
"uni.chooseVideo.sourceType.camera": "Caméra",
"uni.chooseFile.notUserActivation": "La boîte de dialogue du sélecteur de fichier ne peut être affichée qu'avec une activation par l'utilisateur",
"uni.previewImage.cancel": "Annuler",
"uni.previewImage.button.save": "Guardar imagen",
"uni.previewImage.save.success": "Enregistré avec succès",
......@@ -1639,6 +1644,7 @@ var serviceContext = (function () {
"uni.chooseVideo.cancel": "取消",
"uni.chooseVideo.sourceType.album": "从相册选择",
"uni.chooseVideo.sourceType.camera": "拍摄",
"uni.chooseFile.notUserActivation": "文件选择器对话框只能在由用户激活时显示",
"uni.previewImage.cancel": "取消",
"uni.previewImage.button.save": "保存图像",
"uni.previewImage.save.success": "保存图像到相册成功",
......@@ -1674,6 +1680,7 @@ var serviceContext = (function () {
"uni.chooseVideo.cancel": "取消",
"uni.chooseVideo.sourceType.album": "從相冊選擇",
"uni.chooseVideo.sourceType.camera": "拍攝",
"uni.chooseFile.notUserActivation": "文件選擇器對話框只能在由用戶激活時顯示",
"uni.previewImage.cancel": "取消",
"uni.previewImage.button.save": "保存圖像",
"uni.previewImage.save.success": "保存圖像到相冊成功",
......@@ -1713,6 +1720,26 @@ var serviceContext = (function () {
}
}
function initI18nMessages () {
if (!isEnableLocale()) {
return
}
const localeKeys = Object.keys(__uniConfig.locales);
if (localeKeys.length) {
localeKeys.forEach((locale) => {
const curMessages = messages[locale];
const userMessages = __uniConfig.locales[locale];
if (curMessages) {
Object.assign(curMessages, userMessages);
} else {
messages[locale] = userMessages;
}
});
}
}
initI18nMessages();
const i18n = initVueI18n(
locale,
messages
......@@ -1808,7 +1835,7 @@ var serviceContext = (function () {
}
function isEnableLocale () {
return __uniConfig.locales && !!Object.keys(__uniConfig.locales).length
return typeof __uniConfig !== 'undefined' && __uniConfig.locales && !!Object.keys(__uniConfig.locales).length
}
function initNavigationBarI18n (navigationBar) {
......@@ -1820,21 +1847,30 @@ var serviceContext = (function () {
}
}
function initI18n () {
const localeKeys = Object.keys(__uniConfig.locales || {});
if (localeKeys.length) {
localeKeys.forEach((locale) =>
i18n.add(locale, __uniConfig.locales[locale])
);
}
}
// export function initI18n() {
// const localeKeys = Object.keys(__uniConfig.locales || {})
// if (localeKeys.length) {
// localeKeys.forEach((locale) =>
// i18n.add(locale, __uniConfig.locales[locale])
// )
// }
// }
const setClipboardData = {
beforeSuccess () {
data: {
type: String,
required: true
},
showToast: {
type: Boolean,
default: true
},
beforeSuccess (res, params) {
if (!params.showToast) return
const title = t('uni.setClipboardData.success');
if (title) {
uni.showToast({
title: t('uni.setClipboardData.success'),
title,
icon: 'success',
mask: false,
style: {
......@@ -2348,7 +2384,8 @@ var serviceContext = (function () {
PUT: 'PUT',
DELETE: 'DELETE',
TRACE: 'TRACE',
CONNECT: 'CONNECT'
CONNECT: 'CONNECT',
PATCH: 'PATCH'
};
const dataType = {
JSON: 'json'
......@@ -3604,7 +3641,7 @@ var serviceContext = (function () {
const errMsg = res.errMsg;
if (errMsg.indexOf(apiName + ':ok') === 0) {
isFn(beforeSuccess) && beforeSuccess(res);
isFn(beforeSuccess) && beforeSuccess(res, params);
hasSuccess && success(res);
......@@ -4325,13 +4362,15 @@ var serviceContext = (function () {
return array.length > 1 ? '.' + array[array.length - 1] : ''
}
const AUDIO_DEFAULT_CATEGORY = 'ambient';
const audios = {};
const evts = ['play', 'canplay', 'ended', 'stop', 'waiting', 'seeking', 'seeked', 'pause'];
const publishAudioStateChange = (state, res = {}) => publish('onAudioStateChange', Object.assign({
state
}, res));
}, res));
const initStateChage = audioId => {
const audio = audios[audioId];
......@@ -4370,7 +4409,8 @@ var serviceContext = (function () {
const audio = audios[audioId] = plus.audio.createPlayer('');
audio.src = '';
audio.volume = 1;
audio.startTime = 0;
audio.startTime = 0;
audio.setSessionCategory(AUDIO_DEFAULT_CATEGORY);
return {
errMsg: 'createAudioInstance:ok',
audioId
......@@ -4397,7 +4437,8 @@ var serviceContext = (function () {
autoplay = false,
loop = false,
obeyMuteSwitch,
volume
volume,
category = AUDIO_DEFAULT_CATEGORY
}) {
const audio = audios[audioId];
if (audio) {
......@@ -4414,7 +4455,10 @@ var serviceContext = (function () {
if (typeof volume === 'number') {
audio.volume = style.volume = volume;
}
audio.setStyles(style);
audio.setStyles(style);
if (category) {
audio.setSessionCategory(category);
}
initStateChage(audioId);
}
return {
......@@ -6293,7 +6337,7 @@ var serviceContext = (function () {
let deviceId;
function deviceId$1 () {
deviceId = deviceId || plus.runtime.getDCloudId();
deviceId = deviceId || plus.device.uuid;
return deviceId
}
......@@ -6710,7 +6754,8 @@ var serviceContext = (function () {
function getLocation$1 ({
type = 'wgs84',
geocode = false,
altitude = false
altitude = false,
highAccuracyExpireTime
} = {}, callbackId) {
const errorCallback = warpPlusErrorCallback(callbackId, 'getLocation');
plus.geolocation.getCurrentPosition(
......@@ -6726,7 +6771,8 @@ var serviceContext = (function () {
errorCallback(e);
}, {
geocode: geocode,
enableHighAccuracy: altitude
enableHighAccuracy: altitude,
timeout: highAccuracyExpireTime
}
);
}
......@@ -7204,6 +7250,19 @@ var serviceContext = (function () {
return {
errMsg: 'previewImage:ok'
}
}
function closePreviewImagePlus () {
try {
plus.nativeUI.closePreviewImage();
return {
errMsg: 'closePreviewImagePlus:ok'
}
} catch (error) {
return {
errMsg: 'closePreviewImagePlus:fail'
}
}
}
let recorder$1;
......@@ -7876,6 +7935,8 @@ var serviceContext = (function () {
}
}
let univerifyManager;
function getService (provider) {
return new Promise((resolve, reject) => {
plus.oauth.getServices(services => {
......@@ -7888,20 +7949,21 @@ var serviceContext = (function () {
/**
* 微信登录
*/
function login (params, callbackId) {
function login (params, callbackId, plus = true) {
const provider = params.provider || 'weixin';
const errorCallback = warpPlusErrorCallback(callbackId, 'login');
const errorCallback = warpErrorCallback(callbackId, 'login', plus);
const authOptions = provider === 'apple'
? { scope: 'email' }
: params.univerifyStyle
? { univerifyStyle: univerifyButtonsClickHandling(params.univerifyStyle, errorCallback) }
: {};
const _invoke = plus ? invoke$1 : callback.invoke;
getService(provider).then(service => {
function login () {
if (params.onlyAuthorize && provider === 'weixin') {
service.authorize(({ code }) => {
invoke$1(callbackId, {
_invoke(callbackId, {
code,
authResult: '',
errMsg: 'login:ok'
......@@ -7911,7 +7973,7 @@ var serviceContext = (function () {
}
service.login(res => {
const authResult = res.target.authResult;
invoke$1(callbackId, {
_invoke(callbackId, {
code: authResult.code,
authResult: authResult,
errMsg: 'login:ok'
......@@ -8006,9 +8068,9 @@ var serviceContext = (function () {
}
}
function preLogin$1 (params, callbackId) {
const successCallback = warpPlusSuccessCallback(callbackId, 'preLogin');
const errorCallback = warpPlusErrorCallback(callbackId, 'preLogin');
function preLogin$1 (params, callbackId, plus) {
const successCallback = warpSuccessCallback(callbackId, 'preLogin', plus);
const errorCallback = warpErrorCallback(callbackId, 'preLogin', plus);
getService(params.provider).then(service => service.preLogin(successCallback, errorCallback)).catch(errorCallback);
}
......@@ -8016,9 +8078,9 @@ var serviceContext = (function () {
return getService('univerify').then(service => service.closeAuthView())
}
function getCheckBoxState (params, callbackId) {
const successCallback = warpPlusSuccessCallback(callbackId, 'getCheckBoxState');
const errorCallback = warpPlusErrorCallback(callbackId, 'getCheckBoxState');
function getCheckBoxState (params, callbackId, plus) {
const successCallback = warpSuccessCallback(callbackId, 'getCheckBoxState', plus);
const errorCallback = warpErrorCallback(callbackId, 'getCheckBoxState', plus);
try {
getService('univerify').then(service => {
const state = service.getCheckBoxState();
......@@ -8033,24 +8095,94 @@ var serviceContext = (function () {
* 一键登录自定义登陆按钮点击处理
*/
function univerifyButtonsClickHandling (univerifyStyle, errorCallback) {
if (univerifyStyle && isPlainObject(univerifyStyle) && univerifyStyle.buttons &&
Object.prototype.toString.call(univerifyStyle.buttons.list) === '[object Array]' &&
univerifyStyle.buttons.list.length > 0
) {
if (isPlainObject(univerifyStyle) && isPlainObject(univerifyStyle.buttons) && toRawType(univerifyStyle.buttons.list) === 'Array') {
univerifyStyle.buttons.list.forEach((button, index) => {
univerifyStyle.buttons.list[index].onclick = function () {
closeAuthView().then(() => {
errorCallback({
code: '30008',
message: '用户点击了自定义按钮',
index,
provider: button.provider
const res = {
code: '30008',
message: '用户点击了自定义按钮',
index,
provider: button.provider
};
isPlainObject(univerifyManager)
? univerifyManager._triggerUniverifyButtonsClick(res)
: closeAuthView().then(() => {
errorCallback(res);
});
});
};
});
}
return univerifyStyle
}
class UniverifyManager {
constructor () {
this.provider = 'univerify';
this.eventName = 'api.univerifyButtonsClick';
}
close () {
closeAuthView();
}
login (options) {
this._warp((data, callbackId) => login(data, callbackId, false), this._getOptions(options));
}
getCheckBoxState (options) {
this._warp((_, callbackId) => getCheckBoxState(_, callbackId, false), options);
}
preLogin (options) {
this._warp((data, callbackId) => preLogin$1(data, callbackId, false), this._getOptions(options));
}
onButtonsClick (callback) {
UniServiceJSBridge.on(this.eventName, callback);
}
offButtonsClick (callback) {
UniServiceJSBridge.off(this.eventName, callback);
}
_triggerUniverifyButtonsClick (res) {
UniServiceJSBridge.emit(this.eventName, res);
}
_warp (fn, options) {
return callback.warp(fn)(this._getOptions(options))
}
_getOptions (options = {}) {
return Object.assign({}, options, { provider: this.provider })
}
}
function getUniverifyManager () {
return univerifyManager || (univerifyManager = new UniverifyManager())
}
function warpSuccessCallback (callbackId, name, plus = true) {
return plus
? warpPlusSuccessCallback(callbackId, name)
: (options) => {
callback.invoke(callbackId, Object.assign({}, options, {
errMsg: `${name}:ok`
}));
}
}
function warpErrorCallback (callbackId, name, plus = true) {
return plus
? warpPlusErrorCallback(callbackId, name)
: (error) => {
const { code = 0, message: errorMessage } = error;
callback.invoke(callbackId, {
errMsg: `${name}:fail ${errorMessage || ''}`,
errCode: code,
code
});
}
}
function requestPayment (params, callbackId) {
......@@ -8579,6 +8711,25 @@ var serviceContext = (function () {
});
}
const sendHostEvent = sendNativeEvent;
function navigateToMiniProgram (data, callbackId) {
sendHostEvent(
'navigateToUniMP',
data,
(res) => {
if (res.errMsg && res.errMsg.indexOf(':ok') === -1) {
return invoke$1(callbackId, {
errMsg: res.errMsg
})
}
invoke$1(callbackId, {
errMsg: 'navigateToMiniProgram:ok'
});
}
);
}
const VD_SYNC_VERSION = 2;
const PAGE_CREATE = 2;
......@@ -10630,7 +10781,6 @@ var serviceContext = (function () {
editable = false,
placeholderText = ''
} = {}, callbackId) {
// TODO 在 editable 为 true 时,content 应该是输入框中可修改内容。后续找客户端商量。
const buttons = showCancel ? [cancelText, confirmText] : [confirmText];
const tip = editable ? placeholderText : buttons;
......@@ -10751,6 +10901,11 @@ var serviceContext = (function () {
pagePath,
visible
}) {
if (!isTabBarPage()) {
return {
errMsg: 'setTabBarItem:fail not TabBar page'
}
}
tabBar$1.setTabBarItem(index, text, iconPath, selectedIconPath, visible);
const route = pagePath && __uniRoutes.find(({ path }) => path === pagePath);
if (route) {
......@@ -11654,6 +11809,7 @@ var serviceContext = (function () {
getImageInfo: getImageInfo$1,
getVideoInfo: getVideoInfo$1,
previewImagePlus: previewImagePlus,
closePreviewImagePlus: closePreviewImagePlus,
operateRecorder: operateRecorder,
saveImageToPhotosAlbum: saveImageToPhotosAlbum$1,
saveVideoToPhotosAlbum: saveVideoToPhotosAlbum,
......@@ -11675,6 +11831,7 @@ var serviceContext = (function () {
preLogin: preLogin$1,
closeAuthView: closeAuthView,
getCheckBoxState: getCheckBoxState,
getUniverifyManager: getUniverifyManager,
requestPayment: requestPayment,
subscribePush: subscribePush,
unsubscribePush: unsubscribePush,
......@@ -11690,6 +11847,8 @@ var serviceContext = (function () {
onNativeEventReceive: onNativeEventReceive,
sendNativeEvent: sendNativeEvent,
loadSubPackage: loadSubPackage$2,
sendHostEvent: sendHostEvent,
navigateToMiniProgram: navigateToMiniProgram,
navigateBack: navigateBack$1,
navigateTo: navigateTo$1,
reLaunch: reLaunch$1,
......@@ -20128,11 +20287,16 @@ var serviceContext = (function () {
}
return invokeMethod('previewImagePlus', args)
}
function closePreviewImage (args = {}) {
return invokeMethod('closePreviewImagePlus', args)
}
var require_context_module_1_15 = /*#__PURE__*/Object.freeze({
__proto__: null,
previewImage: previewImage$1
previewImage: previewImage$1,
closePreviewImage: closePreviewImage
});
const callbacks$8 = {
......@@ -22880,8 +23044,6 @@ var serviceContext = (function () {
}
};
initI18n();
// 挂靠在uni上,暂不做全局导出
uni$1.__$wx__ = wx;
......
......@@ -364,6 +364,10 @@
]
]
],
"closePreviewImage": [
"/platforms/h5/service/api/media/preview-image.js",
[]
],
"getImageInfo": [
"/platforms/h5/service/api/media/get-image-info.js",
[
......
......@@ -2,4 +2,4 @@ export const NAVBAR_HEIGHT = 44
export const TABBAR_HEIGHT = 50
// 576:landscape phones,768:tablets,992:desktops,1200:large desktops
export const RESPONSIVE_MIN_WIDTH = 768
export const DC_LOCALE = '__DC_LOCALE'
export const UNI_STORAGE_LOCALE = 'UNI_LOCALE'
......@@ -4,10 +4,10 @@ import {
} from '@dcloudio/uni-i18n'
import {
isStr
} from 'uni-shared'
import {
DC_LOCALE
} from 'uni-shared'
import {
UNI_STORAGE_LOCALE
} from '../constants'
import en from './en.json'
......@@ -27,7 +27,7 @@ const messages = {
let locale
if (__PLATFORM__ === 'h5') {
locale = (window.localStorage && localStorage[DC_LOCALE]) || __uniConfig.locale || navigator.language
locale = (window.localStorage && localStorage[UNI_STORAGE_LOCALE]) || __uniConfig.locale || navigator.language
} else if (__PLATFORM__ === 'app-plus') {
if (typeof weex === 'object') {
locale = weex.requireModule('plus').getLanguage()
......@@ -38,6 +38,26 @@ if (__PLATFORM__ === 'h5') {
locale = __GLOBAL__.getSystemInfoSync().language
}
function initI18nMessages () {
if (!isEnableLocale()) {
return
}
const localeKeys = Object.keys(__uniConfig.locales)
if (localeKeys.length) {
localeKeys.forEach((locale) => {
const curMessages = messages[locale]
const userMessages = __uniConfig.locales[locale]
if (curMessages) {
Object.assign(curMessages, userMessages)
} else {
messages[locale] = userMessages
}
})
}
}
initI18nMessages()
export const i18n = initVueI18n(
locale,
__PLATFORM__ === 'app-plus' || __PLATFORM__ === 'h5' ? messages : {}
......@@ -134,7 +154,7 @@ export function defineI18nProperty (obj, names) {
}
function isEnableLocale () {
return __uniConfig.locales && !!Object.keys(__uniConfig.locales).length
return typeof __uniConfig !== 'undefined' && __uniConfig.locales && !!Object.keys(__uniConfig.locales).length
}
export function initNavigationBarI18n (navigationBar) {
......@@ -166,11 +186,11 @@ export function initTabBarI18n (tabBar) {
return tabBar
}
export function initI18n () {
const localeKeys = Object.keys(__uniConfig.locales || {})
if (localeKeys.length) {
localeKeys.forEach((locale) =>
i18n.add(locale, __uniConfig.locales[locale])
)
}
}
// export function initI18n() {
// const localeKeys = Object.keys(__uniConfig.locales || {})
// if (localeKeys.length) {
// localeKeys.forEach((locale) =>
// i18n.add(locale, __uniConfig.locales[locale])
// )
// }
// }
......@@ -5,7 +5,7 @@ import {
i18n
} from 'uni-helpers/i18n'
import {
DC_LOCALE
UNI_STORAGE_LOCALE
} from 'uni-helpers/constants'
export function getLocale () {
......@@ -35,7 +35,7 @@ export function setLocale (locale) {
weex.requireModule('plus').setLanguage(locale)
}
if (__PLATFORM__ === 'h5') {
window.localStorage && (localStorage[DC_LOCALE] = locale)
window.localStorage && (localStorage[UNI_STORAGE_LOCALE] = locale)
}
callbacks.forEach(callbackId => {
invoke(callbackId, { locale })
......
......@@ -31,12 +31,6 @@ import {
import vuePlugin from './framework/plugins'
import {
initI18n
} from 'uni-helpers/i18n'
initI18n()
// 挂靠在uni上,暂不做全局导出
uni.__$wx__ = wx
......
......@@ -10,11 +10,6 @@ import {
getCurrentPages
}
from 'uni-core/service/plugins/app'
import {
initI18n
} from 'uni-helpers/i18n'
initI18n()
initOn(UniServiceJSBridge.on, {
getApp,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册