feat: yup locale.

This commit is contained in:
elforjani3
2021-06-12 18:13:49 +02:00
parent 7d5bb95e75
commit 3fe85c519d
4 changed files with 79 additions and 1 deletions

View File

@@ -1,5 +1,6 @@
import React from 'react';
import moment from 'moment';
import { setLocale } from 'yup';
import intl from 'react-intl-universal';
import { find } from 'lodash';
import rtlDetect from 'rtl-detect';
@@ -32,6 +33,10 @@ function loadLocales(currentLocale) {
return import(`../lang/${currentLocale}/index.json`);
}
function loadYupLocales(currentLocale) {
return import(`../lang/${currentLocale}/locale`);
}
/**
* Modifies the html document direction to RTl if it was rtl-language.
*/
@@ -74,6 +79,14 @@ export default function AppIntlLoader({ children }) {
});
}, [currentLocale, setIsLoading]);
React.useEffect(() => {
loadYupLocales(currentLocale)
.then(({ locale }) => {
setLocale(locale);
})
.then(() => {});
}, [currentLocale]);
return (
<DashboardLoadingIndicator isLoading={isLoading}>
{children}

View File

@@ -2,7 +2,7 @@ import React, { useCallback } from 'react';
import { Button, Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import WorkflowIcon from './WorkflowIcon';
import { FormattedMessage as T } from 'react-intl';
import { FormattedMessage as T } from 'components';
import withOrganizationActions from 'containers/Organization/withOrganizationActions';
import 'style/pages/Setup/Congrats.scss';

View File

@@ -0,0 +1,64 @@
// Based on https://github.com/jquense/yup/blob/2973d0a/src/locale.js
import printValue from '../printValue';
export const locale = {
mixed: {
default: '${path} غير صالح.',
required: '${path} هو حقل مطلوب',
oneOf: '${path} يجب أن تكون واحدة من القيم التالية: ${values}',
notOneOf: '${path} لا يجب أن تكون واحدة من القيم التالية: ${values}',
notType: ({ path, type, value, originalValue }) => {
const isCast = originalValue != null && originalValue !== value;
let msg =
`${path} يجب أن يكون \`${type}\` نوع, ` +
`ولكن القيمة النهائية كانت في: \`${printValue(value, true)}\`` +
(isCast
? ` (المدلى بها من قيمة \`${printValue(originalValue, true)}\`).`
: '.');
if (value === null) {
msg +=
`\n إذا كان المقصود "لاغية" كقيمة فارغة مما لا شك فيه للاحتفال مخطط كما` +
' `.nullable()`';
}
return msg;
},
},
string: {
length: '${path} يجب أن يكون بالضبط ${length} حرفا',
min: '${path} يجب أن تكون على الأقل ${min} حرفا',
max: '${path} يجب أن تكون على الأكثر ${max} حرفا',
matches: '${path} يجب أن يطابق ما يلي: "${regex}"',
email: '${path} يجب أن يكون عنوان بريد إلكتروني صالح',
url: '${path} يجب أن يكون عنوان URL صالحا',
trim: '${path} يجب أن تكون سلسلة قلص',
lowercase: '${path} يجب أن تكون سلسلة صغيرة',
uppercase: '${path} يجب أن تكون سلسلة الحالة العلوي',
},
number: {
min: '${path} يجب أن تكون أكبر من أو يساوي ${min}',
max: '${path} يجب أن يكون أقل من أو يساوي ${max}',
lessThan: '${path} يجب أن يكون أقل من ${less}',
moreThan: '${path} يجب أن تكون أكبر من ${more}',
positive: '${path} يجب أن يكون رقما موجبا',
negative: '${path} يجب أن يكون رقما سالبا',
integer: '${path} يجب أن يكون رقما',
},
date: {
min: '${path} يجب أن يكون حقل في وقت لاحق من ${min}',
max: '${path} يجب أن يكون حقل في وقت سابق من ${max}',
},
boolean: {},
object: {
noUnknown: '${path} حقل لا يمكن أن يكون مفاتيح غير محددة في شكل وجوه',
},
array: {
min: 'يجب أن يكون ${path} حقل على الأقل ${min} من العناصر',
max: '${path} يجب أن يكون الحقل أقل من أو يساوي إلى ${max} من العناصر',
},
};

View File

@@ -1,4 +1,5 @@
import printValue from '../printValue';
export const locale = {
mixed: {
default: '${path} is invalid',