diff --git a/src/lib/i18n.js b/src/lib/i18n.js index ea605369..e7b4067f 100644 --- a/src/lib/i18n.js +++ b/src/lib/i18n.js @@ -533,6 +533,60 @@ function getDisplayCurrency(value, currencyCode, notConvertValue, translateFn) { } } +function getLocalizedError(error) { + if (error.errorCode === apiNotFoundErrorCode && specifiedApiNotFoundErrors[error.path]) { + return { + message: `${specifiedApiNotFoundErrors[error.path].message}` + }; + } + + if (error.errorCode !== validatorErrorCode) { + return { + message: `error.${error.errorMessage}` + }; + } + + for (let i = 0; i < parameterizedErrors.length; i++) { + const errorInfo = parameterizedErrors[i]; + const matches = error.errorMessage.match(errorInfo.regex); + + if (matches && matches.length === errorInfo.parameters.length + 1) { + return { + message: `parameterizedError.${errorInfo.localeKey}`, + parameters: errorInfo.parameters.map((param, index) => { + return { + key: param.field, + localized: param.localized, + value: matches[index + 1] + } + }) + }; + } + } + + return { + message: `error.${error.errorMessage}` + }; +} + +function getLocalizedErrorParameters(parameters, i18nFunc) { + let localizedParameters = {}; + + if (parameters) { + for (let i = 0; i < parameters.length; i++) { + const parameter = parameters[i]; + + if (parameter.localized) { + localizedParameters[parameter.key] = i18nFunc(`parameter.${parameter.value}`); + } else { + localizedParameters[parameter.key] = parameter.value; + } + } + } + + return localizedParameters; +} + function setLanguage(i18nGlobal, locale, force) { if (!locale) { locale = getDefaultLanguage(); @@ -636,7 +690,7 @@ export function getI18nOptions() { }; } -export function transateIf(text, isTranslate, translateFn) { +export function translateIf(text, isTranslate, translateFn) { if (isTranslate) { return translateFn(text); } @@ -644,58 +698,16 @@ export function transateIf(text, isTranslate, translateFn) { return text; } -export function getLocalizedError(error) { - if (error.errorCode === apiNotFoundErrorCode && specifiedApiNotFoundErrors[error.path]) { - return { - message: `${specifiedApiNotFoundErrors[error.path].message}` - }; +export function translateError(message, translateFn) { + let parameters = {}; + + if (message && message.error) { + const localizedError = getLocalizedError(message.error); + message = localizedError.message; + parameters = getLocalizedErrorParameters(localizedError.parameters, translateFn); } - if (error.errorCode !== validatorErrorCode) { - return { - message: `error.${error.errorMessage}` - }; - } - - for (let i = 0; i < parameterizedErrors.length; i++) { - const errorInfo = parameterizedErrors[i]; - const matches = error.errorMessage.match(errorInfo.regex); - - if (matches && matches.length === errorInfo.parameters.length + 1) { - return { - message: `parameterizedError.${errorInfo.localeKey}`, - parameters: errorInfo.parameters.map((param, index) => { - return { - key: param.field, - localized: param.localized, - value: matches[index + 1] - } - }) - }; - } - } - - return { - message: `error.${error.errorMessage}` - }; -} - -export function getLocalizedErrorParameters(parameters, i18nFunc) { - let localizedParameters = {}; - - if (parameters) { - for (let i = 0; i < parameters.length; i++) { - const parameter = parameters[i]; - - if (parameter.localized) { - localizedParameters[parameter.key] = i18nFunc(`parameter.${parameter.value}`); - } else { - localizedParameters[parameter.key] = parameter.value; - } - } - } - - return localizedParameters; + return translateFn(message, parameters); } export function i18nFunctions(i18nGlobal) { diff --git a/src/lib/ui.mobile.js b/src/lib/ui.mobile.js index df6d1f8f..c16b81a4 100644 --- a/src/lib/ui.mobile.js +++ b/src/lib/ui.mobile.js @@ -2,24 +2,13 @@ import { f7, f7ready } from 'framework7-vue'; import fontConstants from '@/consts/font.js'; import settings from './settings.js'; -import { - getLocalizedError, - getLocalizedErrorParameters -} from './i18n.js'; +import { translateError } from './i18n.js'; export function showAlert(message, confirmCallback, translateFn) { - let parameters = {}; - - if (message && message.error) { - const localizedError = getLocalizedError(message.error); - message = localizedError.message; - parameters = getLocalizedErrorParameters(localizedError.parameters, s => translateFn(s)); - } - f7ready((f7) => { f7.dialog.create({ title: translateFn('global.app.title'), - text: translateFn(message, parameters), + text: translateError(message, translateFn), animate: settings.isEnableAnimate(), buttons: [ { @@ -52,17 +41,9 @@ export function showConfirm(message, confirmCallback, cancelCallback, translateF } export function showToast(message, timeout, translateFn) { - let parameters = {}; - - if (message && message.error) { - const localizedError = getLocalizedError(message.error); - message = localizedError.message; - parameters = getLocalizedErrorParameters(localizedError.parameters, s => translateFn(s)); - } - f7ready((f7) => { f7.toast.create({ - text: translateFn(message, parameters), + text: translateError(message, translateFn), position: 'center', closeTimeout: timeout || 1500 }).open(); diff --git a/src/mobile-main.js b/src/mobile-main.js index b0981793..88977ade 100644 --- a/src/mobile-main.js +++ b/src/mobile-main.js @@ -78,7 +78,7 @@ import settings from '@/lib/settings.js'; import userstate from '@/lib/userstate.js'; import { getI18nOptions, - transateIf, + translateIf, i18nFunctions } from '@/lib/i18n.js'; import { @@ -188,7 +188,7 @@ app.config.globalProperties.$buildTime = version.getBuildTime(); app.config.globalProperties.$settings = settings; app.config.globalProperties.$locale = i18nFunctions(i18n.global); -app.config.globalProperties.$tIf = (text, isTranslate) => transateIf(text, isTranslate, i18n.global.t); +app.config.globalProperties.$tIf = (text, isTranslate) => translateIf(text, isTranslate, i18n.global.t); app.config.globalProperties.$alert = (message, confirmCallback) => showAlert(message, confirmCallback, i18n.global.t); app.config.globalProperties.$confirm = (message, confirmCallback, cancelCallback) => showConfirm(message, confirmCallback, cancelCallback, i18n.global.t);