mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-18 08:44:25 +08:00
support parameterized errors
This commit is contained in:
+107
@@ -1,5 +1,82 @@
|
||||
import { defaultLanguage, allLanguages } from '../locales/index.js'
|
||||
|
||||
const validatorErrorCode = 200000;
|
||||
const parameterizedErrors = [
|
||||
{
|
||||
localeKey: 'parameter invalid',
|
||||
regex: /^parameter "(\w+)" is invalid$/,
|
||||
parameters: [{
|
||||
field: 'parameter',
|
||||
localized: true
|
||||
}]
|
||||
},
|
||||
{
|
||||
localeKey: 'parameter required',
|
||||
regex: /^parameter "(\w+)" is required$/,
|
||||
parameters: [{
|
||||
field: 'parameter',
|
||||
localized: true
|
||||
}]
|
||||
},
|
||||
{
|
||||
localeKey: 'parameter too long',
|
||||
regex: /^parameter "(\w+)" must be less than (\d+)$/,
|
||||
parameters: [{
|
||||
field: 'parameter',
|
||||
localized: true
|
||||
}, {
|
||||
field: 'length',
|
||||
localized: false
|
||||
}]
|
||||
},
|
||||
{
|
||||
localeKey: 'parameter too short',
|
||||
regex: /^parameter "(\w+)" must be more than (\d+)$/,
|
||||
parameters: [{
|
||||
field: 'parameter',
|
||||
localized: true
|
||||
}, {
|
||||
field: 'length',
|
||||
localized: false
|
||||
}]
|
||||
},
|
||||
{
|
||||
localeKey: 'parameter length not equal',
|
||||
regex: /^parameter "(\w+)" length is not equal to (\d+)$/,
|
||||
parameters: [{
|
||||
field: 'parameter',
|
||||
localized: true
|
||||
}, {
|
||||
field: 'length',
|
||||
localized: false
|
||||
}]
|
||||
},
|
||||
{
|
||||
localeKey: 'parameter cannot be blank',
|
||||
regex: /^parameter "(\w+)" cannot be blank$/,
|
||||
parameters: [{
|
||||
field: 'parameter',
|
||||
localized: true
|
||||
}]
|
||||
},
|
||||
{
|
||||
localeKey: 'parameter invalid username format',
|
||||
regex: /^parameter "(\w+)" is invalid username format$/,
|
||||
parameters: [{
|
||||
field: 'parameter',
|
||||
localized: true
|
||||
}]
|
||||
},
|
||||
{
|
||||
localeKey: 'parameter invalid email format',
|
||||
regex: /^parameter "(\w+)" is invalid email format$/,
|
||||
parameters: [{
|
||||
field: 'parameter',
|
||||
localized: true
|
||||
}]
|
||||
}
|
||||
];
|
||||
|
||||
export function getAllLanguages() {
|
||||
return allLanguages;
|
||||
}
|
||||
@@ -56,6 +133,36 @@ export function getI18nOptions() {
|
||||
};
|
||||
}
|
||||
|
||||
export function getLocalizedError(error) {
|
||||
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.errorMessage
|
||||
};
|
||||
}
|
||||
|
||||
function getLocaleFromLanguageAlias(alias) {
|
||||
for (let locale in allLanguages) {
|
||||
if (!Object.prototype.hasOwnProperty.call(allLanguages, locale)) {
|
||||
|
||||
Reference in New Issue
Block a user