Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Azerbaijani language #72

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/locales.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

import ar from './locales/ar'

import az from './locales/az'

import ca from './locales/ca'

import cs from './locales/cs'
Expand Down Expand Up @@ -58,4 +60,4 @@ import zh from './locales/zh'
/**
* ✏️ Then add it to the list here:
*/
export { ar, ca, cs, da, de, en, es, fr, he, hu, it, ja, ko, nb, nl, lt, ru, pl, pt, sk, sr, sv, th, tr, vi, zh }
export { ar, az, ca, cs, da, de, en, es, fr, he, hu, it, ja, ko, nb, nl, lt, ru, pl, pt, sk, sr, sv, th, tr, vi, zh }
233 changes: 233 additions & 0 deletions src/locales/az.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
/**
* Here we can import additional helper functions to assist in formatting our
* language. Feel free to add additional helper methods to libs/formats if it
* assists in creating good validation messages for your locale.
*/
import { sentence as s } from '../libs/formats'

/**
* This is the ISO 639-1 and (optionally) ISO 639-2 language "tag".
* Some valid examples:
* zh
* zh-CN
* zh-HK
* en
* en-GB
*/
const locale = 'az'

/**
* This is an object of functions that each produce valid responses. There's no
* need for these to be 1-1 with english, feel free to change the wording or
* use/not use any of the variables available in the object or the
* arguments for the message to make the most sense in your language and culture.
*
* The validation context object includes the following properties:
* {
* args // Array of rule arguments: between:5,10 (args are ['5', '10'])
* name: // The validation name to be used
* value: // The value of the field (do not mutate!),
* vm: the // FormulateInput instance this belongs to,
* formValues: // If wrapped in a FormulateForm, the value of other form fields.
* }
*/
const localizedValidationMessages = {

/**
* Valid accepted value.
*/
accepted: function ({ name }) {
return `Xahiş olunur, ${name} qəbul edin.`
},

/**
* The date is not after.
*/
after: function ({ name, args }) {
if (Array.isArray(args) && args.length) {
return `${s(name)} ${args[0]} tarixindən sonra olmalıdır.`
}
return `${s(name)} daha gec tarix olmalıdır.`
},

/**
* The value is not a letter.
*/
alpha: function ({ name }) {
return `${s(name)} yalnız hərflərdən ibarət ola bilər.`
},

/**
* Rule: checks if the value is alpha numeric
*/
alphanumeric: function ({ name }) {
return `${s(name)} yalnız hərf və rəqəmlərdən ibarət ola bilər.`
},

/**
* The date is not before.
*/
before: function ({ name, args }) {
if (Array.isArray(args) && args.length) {
return `${s(name)} tarixindən əvvəl olmalıdır ${args[0]}.`
}
return `${s(name)} daha erkən tarix olmalıdır.`
},

/**
* The value is not between two numbers or lengths
*/
between: function ({ name, value, args }) {
const force = Array.isArray(args) && args[2] ? args[2] : false
if ((!isNaN(value) && force !== 'length') || force === 'value') {
return `${s(name)} ${args[0]} və ${args[1]} arasında olmalıdır.`
}
return `${s(name)} ${args[0]} və ${args[1]} simvol uzunluğu arasında olmalıdır.`
},

/**
* The confirmation field does not match
*/
confirm: function ({ name, args }) {
return `${s(name)} uyğun gəlmir.`
},

/**
* Is not a valid date.
*/
date: function ({ name, args }) {
if (Array.isArray(args) && args.length) {
return `${s(name)} düzgün tarix deyil, xahiş olunur ${args[0]} formatını istifadə edin`
}
return `${s(name)} düzgün tarix deyil.`
},

/**
* The default render method for error messages.
*/
default: function ({ name }) {
return `Xana düzgün deyil.`
},

/**
* Is not a valid email address.
*/
email: function ({ name, value }) {
if (!value) {
return 'Xahiş olunur, düzgün e-poçt ünvanı daxil edin.'
}
return `“${value}” düzgün e-poçt ünvanı deyil.`
},

/**
* Ends with specified value
*/
endsWith: function ({ name, value }) {
if (!value) {
return `Xana düzgün dəyərlə bitmir.`
}
return `“${value}” düzgün dəyərlə bitmir.`
},

/**
* Value is an allowed value.
*/
in: function ({ name, value }) {
if (typeof value === 'string' && value) {
return `“${s(value)}” icazə verilən ${name} deyil.`
}
return `Bu icazə verilən ${name} deyil.`
},

/**
* Value is not a match.
*/
matches: function ({ name }) {
return `${s(name)} icazə verilən dəyər deyil.`
},

/**
* The maximum value allowed.
*/
max: function ({ name, value, args }) {
if (Array.isArray(value)) {
return `Maksimum ${args[0]} ${name} seçə bilərsiniz.`
}
const force = Array.isArray(args) && args[1] ? args[1] : false
if ((!isNaN(value) && force !== 'length') || force === 'value') {
return `${s(name)} maksimum ${args[0]} olmalıdır.`
}
return `${s(name)} maksimum ${args[0]} simvol olmalıdır.`
},

/**
* The (field-level) error message for mime errors.
*/
mime: function ({ name, args }) {
return `${s(name)} ${args[0] || 'Heç bir fayl formatına icazə verilmir.'} tipində olmalıdır`
},

/**
* The maximum value allowed.
*/
min: function ({ name, value, args }) {
if (Array.isArray(value)) {
return `Ən azı ${args[0]} ${name} seçə bilərsiniz.`
}
const force = Array.isArray(args) && args[1] ? args[1] : false
if ((!isNaN(value) && force !== 'length') || force === 'value') {
return `${s(name)} minimum ${args[0]} olmalıdır.`
}
return `${s(name)} minimum ${args[0]} simvol olmalıdır.`
},

/**
* The field is not an allowed value
*/
not: function ({ name, value }) {
return `“${value}” icazə verilən ${name} dəyəri deyil.`
},

/**
* The field is not a number
*/
number: function ({ name }) {
return `${s(name)} rəqəm olmalıdır.`
},

/**
* Required field.
*/
required: function ({ name }) {
return `${s(name)} tələb edilir.`
},

/**
* Starts with specified value
*/
startsWith: function ({ name, value }) {
if (!value) {
return `Xana düzgün dəyərlə başlamır.`
}
return `“${value}” düzgün dəyərlə başlamır.`
},

/**
* Value is not a url.
*/
url: function ({ name }) {
return `Xahiş olunur, düzgün url daxil edin.`
}
}

/**
* This creates a vue-formulate plugin that can be imported and used on each
* project.
*/
export default function (instance) {
instance.extend({
locales: {
[locale]: localizedValidationMessages
}
})
}
26 changes: 26 additions & 0 deletions test/unit/az.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import * as locales from '@/locales'

// ✏️ Edit these to be the localized language
const locale = 'az'

// ✏️ Edit your locale's name
describe('Azerbaijani translation', () => {
it('exports a function', () => {
expect(typeof locales[locale]).toBe('function')
})

it('calls extend on the formulate instance', () => {
const instance = { extend: jest.fn() }
locales[locale](instance)
expect(instance.extend.mock.calls.length).toBe(1)
})

it('includes all the validation results that english does', () => {
const instance = { extend: jest.fn() }
locales.en(instance)
locales[locale](instance)
const englishMessages = Object.keys(instance.extend.mock.calls[0][0].locales.en)
const localizedMessages = Object.keys(instance.extend.mock.calls[1][0].locales[locale])
expect(englishMessages).toEqual(localizedMessages)
})
})