From 4f7f1d2273d4516077818e51fcfb3ea863d391c6 Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Sat, 30 Jul 2016 22:16:05 +0300 Subject: [PATCH] Keys rename detection for i18n command --- scripts/i18n-collect.js | 70 +++++++++++++++++++++++++++++++---------- src/i18n/be.json | 58 +++++++++++++++++----------------- src/i18n/en.json | 58 +++++++++++++++++----------------- src/i18n/ru.json | 58 +++++++++++++++++----------------- src/i18n/uk.json | 58 +++++++++++++++++----------------- 5 files changed, 169 insertions(+), 133 deletions(-) diff --git a/scripts/i18n-collect.js b/scripts/i18n-collect.js index 68cbd16..10c2e44 100644 --- a/scripts/i18n-collect.js +++ b/scripts/i18n-collect.js @@ -1,11 +1,12 @@ +/* eslint-disable no-console */ import fs from 'fs'; import {sync as globSync} from 'glob'; import {sync as mkdirpSync} from 'mkdirp'; import chalk from 'chalk'; import prompt from 'prompt'; -const MESSAGES_PATTERN = `../dist/messages/**/*.json`; -const LANG_DIR = `../src/i18n`; +const MESSAGES_PATTERN = '../dist/messages/**/*.json'; +const LANG_DIR = '../src/i18n'; const DEFAULT_LOCALE = 'en'; const SUPPORTED_LANGS = [DEFAULT_LOCALE].concat('ru', 'be', 'uk'); @@ -17,7 +18,7 @@ const SUPPORTED_LANGS = [DEFAULT_LOCALE].concat('ru', 'be', 'uk'); */ let idToFileMap = {}; let duplicateIds = []; -const defaultMessages = globSync(MESSAGES_PATTERN) +const collectedMessages = globSync(MESSAGES_PATTERN) .map((filename) => [filename, JSON.parse(fs.readFileSync(filename, 'utf8'))]) .reduce((collection, [file, descriptors]) => { descriptors.forEach(({id, defaultMessage}) => { @@ -49,19 +50,42 @@ const defaultMessagesPath = `${LANG_DIR}/${DEFAULT_LOCALE}.json`; let keysToUpdate = []; let keysToAdd = []; let keysToRemove = []; +const keysToRename = []; const isNotMarked = (value) => value.slice(0, 2) !== '--'; try { const prevMessages = JSON.parse(fs.readFileSync(defaultMessagesPath, 'utf8')); - keysToAdd = Object.keys(defaultMessages).filter((key) => !prevMessages[key]); - keysToRemove = Object.keys(prevMessages).filter((key) => !defaultMessages[key]).filter(isNotMarked); + const prevMessagesMap = Object.entries(prevMessages).reduce((acc, [key, value]) => { + if (acc[value]) { + acc[value].push(key); + } else { + acc[value] = [key]; + } + + return acc; + }, {}); + keysToAdd = Object.keys(collectedMessages).filter((key) => !prevMessages[key]); + keysToRemove = Object.keys(prevMessages).filter((key) => !collectedMessages[key]).filter(isNotMarked); keysToUpdate = Object.entries(prevMessages).reduce((acc, [key, message]) => - acc.concat(defaultMessages[key] && defaultMessages[key] !== message ? key : []) + acc.concat(collectedMessages[key] && collectedMessages[key] !== message ? key : []) , []); -} catch(err) { + + // detect keys to rename, mutating keysToAdd and keysToRemove + [].concat(keysToAdd).forEach((toKey) => { + const keys = prevMessagesMap[collectedMessages[toKey]] || []; + const fromKey = keys.find((fromKey) => keysToRemove.indexOf(fromKey) > -1); + + if (fromKey) { + keysToRename.push([fromKey, toKey]); + + keysToRemove.splice(keysToRemove.indexOf(fromKey), 1); + keysToAdd.splice(keysToAdd.indexOf(toKey), 1); + } + }); +} catch (err) { console.log(chalk.yellow(`Can not read ${defaultMessagesPath}. The new file will be created.`), err); } -if (!keysToAdd.length && !keysToRemove.length && !keysToUpdate.length) { +if (!keysToAdd.length && !keysToRemove.length && !keysToUpdate.length && !keysToRename.length) { return console.log(chalk.green('Everything is up to date!')); } @@ -69,17 +93,24 @@ console.log(chalk.magenta(`The diff relative to default locale (${DEFAULT_LOCALE if (keysToRemove.length) { console.log('The following keys will be removed:'); - console.log(chalk.red('\n - ') + keysToRemove.join(chalk.red('\n - ')) + '\n'); + console.log([chalk.red('\n - '), keysToRemove.join(chalk.red('\n - ')), '\n'].join('')); } if (keysToAdd.length) { console.log('The following keys will be added:'); - console.log(chalk.green('\n + ') + keysToAdd.join(chalk.green('\n + ')) + '\n'); + console.log([chalk.green('\n + '), keysToAdd.join(chalk.green('\n + ')), '\n'].join('')); } if (keysToUpdate.length) { console.log('The following keys will be updated:'); - console.log(chalk.yellow('\n @ ') + keysToUpdate.join(chalk.yellow('\n @ ')) + '\n'); + console.log([chalk.yellow('\n @ '), keysToUpdate.join(chalk.yellow('\n @ ')), '\n'].join('')); +} + +if (keysToRename.length) { + console.log('The following keys will be renamed:\n'); + console.log(keysToRename.reduce((str, pair) => + [str, pair[0], chalk.yellow(' -> '), pair[1], '\n'].join('') + , '')); } prompt.start(); @@ -119,21 +150,26 @@ function buildLocales() { console.log(chalk.yellow(`Can not read ${destPath}. The new file will be created.`), err); } + keysToRename.forEach(([fromKey, toKey]) => { + newMessages[toKey] = newMessages[fromKey]; + delete newMessages[fromKey]; + }); keysToRemove.forEach((key) => { delete newMessages[key]; }); keysToUpdate.forEach((key) => { newMessages[`--${key}`] = newMessages[key]; + newMessages[key] = collectedMessages[key]; }); - keysToAdd.concat(keysToUpdate).forEach((key) => { - newMessages[key] = defaultMessages[key]; + keysToAdd.forEach((key) => { + newMessages[key] = collectedMessages[key]; }); - const sortedKeys = Object.keys(newMessages).sort((a, b) => { - a = a.replace(/^\-+/, ''); - b = b.replace(/^\-+/, ''); + const sortedKeys = Object.keys(newMessages).sort((key1, key2) => { + key1 = key1.replace(/^\-+/, ''); + key2 = key2.replace(/^\-+/, ''); - return a < b || !isNotMarked(a) ? -1 : 1; + return key1 < key2 || !isNotMarked(key1) ? -1 : 1; }); const sortedNewMessages = sortedKeys.reduce((acc, key) => { diff --git a/src/i18n/be.json b/src/i18n/be.json index 7378765..681d142 100644 --- a/src/i18n/be.json +++ b/src/i18n/be.json @@ -146,33 +146,33 @@ "pages.rules.mainProvision4": "Рэгістрацыя карыстальніцкага акаўнта на сэрвісе бесплатна. Утварэнне акаўнта Ely.by магчыма толькі на старонцы {link}.", "pages.rules.mainProvisions": "Асноўныя палажэнні", "pages.rules.title": "Правілы сайта", - "services.accountAlreadyActivated": "Гэты акаўнт ужо актываваны", - "services.accountNotActivated": "Акаўнт не актываваны", - "services.doYouWantRequestKey": "Не жадаеце адаслаць новы код?", - "services.emailFrequency": "Калі ласка, супакойцеся, вы запытваеце E‑mail дужа часта. Новы ключ можна будзе заказать {time}.", - "services.emailInvalid": "Указаны няправільны E‑mail", - "services.emailIsTempmail": "Выкарыстанне сэрвісаў часовых E‑mail адрасаў забаронена", - "services.emailNotAvailable": "На указаны E‑mail адрас ужо зарэгістраваны акаўнт.", - "services.emailNotFound": "Не знойдзен акаўнт з указаным E‑mail адрасам", - "services.emailRequired": "Калі ласка , укажыце E‑mail", - "services.emailToLong": "E‑mail занадта доўгі", - "services.forgotYourPassword": "забыліся на свой пароль", - "services.invalidPassword": "Вы ўказали няправільны пароль ад акаўнта.", - "services.keyNotExists": "Указаны ключ не існуе ці састарэў.", - "services.keyRequired": "Калі ласка, увядзіце код актывацыі", - "services.loginNotExist": "Нажаль, на Ely няма карыстальніка з указаным логінам.", - "services.loginRequired": "Калі ласка, укажыце E‑mail ці нік", - "services.newPasswordRequired": "Калі ласка, запоўніце поле пароля", - "services.newRePasswordRequired": "Калі ласка, увядзіце паўтор пароля", - "services.passwordRequired": "Калі ласка, увядзіце пароль", - "services.passwordTooShort": "Пароль павінен быць не менш за 8 сімвалаў ў даўжыню", - "services.passwordsDoesNotMatch": "Паролі не супадаюць", - "services.rePasswordRequired": "Калі ласка, паўтарыце пароль", - "services.rulesAgreementRequired": "Для стварэння акаўнта вам неабходна прыняць правілы сэрвісу", - "services.suggestResetPassword": "Вы {link}?", - "services.usernameInvalid": "Нік змяшчае недапушчальныя сімвалы", - "services.usernameRequired": "Поле ніка абавязкова да запаўнення", - "services.usernameTooLong": "Занадта доўгі нік", - "services.usernameTooShort": "Нік занадта кароткі", - "services.usernameUnavailable": "Гэты нік ужо заняты" + "services.errorsDict.accountAlreadyActivated": "Гэты акаўнт ужо актываваны", + "services.errorsDict.accountNotActivated": "Акаўнт не актываваны", + "services.errorsDict.doYouWantRequestKey": "Не жадаеце адаслаць новы код?", + "services.errorsDict.emailFrequency": "Калі ласка, супакойцеся, вы запытваеце E‑mail дужа часта. Новы ключ можна будзе заказать {time}.", + "services.errorsDict.emailInvalid": "Указаны няправільны E‑mail", + "services.errorsDict.emailIsTempmail": "Выкарыстанне сэрвісаў часовых E‑mail адрасаў забаронена", + "services.errorsDict.emailNotAvailable": "На указаны E‑mail адрас ужо зарэгістраваны акаўнт.", + "services.errorsDict.emailNotFound": "Не знойдзен акаўнт з указаным E‑mail адрасам", + "services.errorsDict.emailRequired": "Калі ласка , укажыце E‑mail", + "services.errorsDict.emailToLong": "E‑mail занадта доўгі", + "services.errorsDict.forgotYourPassword": "забыліся на свой пароль", + "services.errorsDict.invalidPassword": "Вы ўказали няправільны пароль ад акаўнта.", + "services.errorsDict.keyNotExists": "Указаны ключ не існуе ці састарэў.", + "services.errorsDict.keyRequired": "Калі ласка, увядзіце код актывацыі", + "services.errorsDict.loginNotExist": "Нажаль, на Ely няма карыстальніка з указаным логінам.", + "services.errorsDict.loginRequired": "Калі ласка, укажыце E‑mail ці нік", + "services.errorsDict.newPasswordRequired": "Калі ласка, запоўніце поле пароля", + "services.errorsDict.newRePasswordRequired": "Калі ласка, увядзіце паўтор пароля", + "services.errorsDict.passwordRequired": "Калі ласка, увядзіце пароль", + "services.errorsDict.passwordTooShort": "Пароль павінен быць не менш за 8 сімвалаў ў даўжыню", + "services.errorsDict.passwordsDoesNotMatch": "Паролі не супадаюць", + "services.errorsDict.rePasswordRequired": "Калі ласка, паўтарыце пароль", + "services.errorsDict.rulesAgreementRequired": "Для стварэння акаўнта вам неабходна прыняць правілы сэрвісу", + "services.errorsDict.suggestResetPassword": "Вы {link}?", + "services.errorsDict.usernameInvalid": "Нік змяшчае недапушчальныя сімвалы", + "services.errorsDict.usernameRequired": "Поле ніка абавязкова да запаўнення", + "services.errorsDict.usernameTooLong": "Занадта доўгі нік", + "services.errorsDict.usernameTooShort": "Нік занадта кароткі", + "services.errorsDict.usernameUnavailable": "Гэты нік ужо заняты" } diff --git a/src/i18n/en.json b/src/i18n/en.json index b5c2466..1fcebb9 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -146,33 +146,33 @@ "pages.rules.mainProvision4": "The registration of the users account at server is free. Account creation Ely.by is only possible at that page {link}.", "pages.rules.mainProvisions": "Main provisions", "pages.rules.title": "Site rules", - "services.accountAlreadyActivated": "This account is already activated", - "services.accountNotActivated": "The account is not activated", - "services.doYouWantRequestKey": "Do you want to request a new key?", - "services.emailFrequency": "Please cool down, you are requesting E‑mails too often. New key can be retrieved {time}.", - "services.emailInvalid": "E‑mail is invalid", - "services.emailIsTempmail": "Tempmail E‑mail addresses is not allowed", - "services.emailNotAvailable": "This E‑mail is already registered.", - "services.emailNotFound": "Specified E‑mail is not found", - "services.emailRequired": "E‑mail is required", - "services.emailToLong": "E‑mail is too long", - "services.forgotYourPassword": "forgot your password", - "services.invalidPassword": "You have entered wrong account password.", - "services.keyNotExists": "The key is incorrect or has expired.", - "services.keyRequired": "Please, enter an activation key", - "services.loginNotExist": "Sorry, Ely doesn't recognise your login.", - "services.loginRequired": "Please enter E‑mail or username", - "services.newPasswordRequired": "Please enter new password", - "services.newRePasswordRequired": "Please repeat new password", - "services.passwordRequired": "Please enter password", - "services.passwordTooShort": "Your password should be at least 8 characters length", - "services.passwordsDoesNotMatch": "The passwords does not match", - "services.rePasswordRequired": "Please retype your password", - "services.rulesAgreementRequired": "You must accept rules in order to create an account", - "services.suggestResetPassword": "Are you have {link}?", - "services.usernameInvalid": "Username is invalid", - "services.usernameRequired": "Username is required", - "services.usernameTooLong": "Username is too long", - "services.usernameTooShort": "Username is too short", - "services.usernameUnavailable": "This username is already taken" + "services.errorsDict.accountAlreadyActivated": "This account is already activated", + "services.errorsDict.accountNotActivated": "The account is not activated", + "services.errorsDict.doYouWantRequestKey": "Do you want to request a new key?", + "services.errorsDict.emailFrequency": "Please cool down, you are requesting E‑mails too often. New key can be retrieved {time}.", + "services.errorsDict.emailInvalid": "E‑mail is invalid", + "services.errorsDict.emailIsTempmail": "Tempmail E‑mail addresses is not allowed", + "services.errorsDict.emailNotAvailable": "This E‑mail is already registered.", + "services.errorsDict.emailNotFound": "Specified E‑mail is not found", + "services.errorsDict.emailRequired": "E‑mail is required", + "services.errorsDict.emailToLong": "E‑mail is too long", + "services.errorsDict.forgotYourPassword": "forgot your password", + "services.errorsDict.invalidPassword": "You have entered wrong account password.", + "services.errorsDict.keyNotExists": "The key is incorrect or has expired.", + "services.errorsDict.keyRequired": "Please, enter an activation key", + "services.errorsDict.loginNotExist": "Sorry, Ely doesn't recognise your login.", + "services.errorsDict.loginRequired": "Please enter E‑mail or username", + "services.errorsDict.newPasswordRequired": "Please enter new password", + "services.errorsDict.newRePasswordRequired": "Please repeat new password", + "services.errorsDict.passwordRequired": "Please enter password", + "services.errorsDict.passwordTooShort": "Your password should be at least 8 characters length", + "services.errorsDict.passwordsDoesNotMatch": "The passwords does not match", + "services.errorsDict.rePasswordRequired": "Please retype your password", + "services.errorsDict.rulesAgreementRequired": "You must accept rules in order to create an account", + "services.errorsDict.suggestResetPassword": "Are you have {link}?", + "services.errorsDict.usernameInvalid": "Username is invalid", + "services.errorsDict.usernameRequired": "Username is required", + "services.errorsDict.usernameTooLong": "Username is too long", + "services.errorsDict.usernameTooShort": "Username is too short", + "services.errorsDict.usernameUnavailable": "This username is already taken" } diff --git a/src/i18n/ru.json b/src/i18n/ru.json index b642d93..5a5e2cf 100644 --- a/src/i18n/ru.json +++ b/src/i18n/ru.json @@ -146,33 +146,33 @@ "pages.rules.mainProvision4": "Регистрация пользовательского аккаунта на сервисе бесплатна. Создание аккаунта Ely.by возможно только на странице {link}.", "pages.rules.mainProvisions": "Основные положения", "pages.rules.title": "Правила сайта", - "services.accountAlreadyActivated": "Этот аккаунт уже активирован", - "services.accountNotActivated": "Аккаунт не активирован", - "services.doYouWantRequestKey": "Желаете отправить новый код?", - "services.emailFrequency": "Пожалуйста, успокойтесь, вы запрашиваете E‑mail слишком часто. Новый ключ можно будет заказать {time}.", - "services.emailInvalid": "Указан неправильный E‑mail", - "services.emailIsTempmail": "Использование сервисов временных E‑mail адресов запрещено", - "services.emailNotAvailable": "На указанный E‑mail адрес уже зарегистрирован аккаунт.", - "services.emailNotFound": "Не найдено аккаунта с указанным E‑mail адресом", - "services.emailRequired": "Пожалуйста, укажите E‑mail", - "services.emailToLong": "E‑mail слишком длинный", - "services.forgotYourPassword": "забыли свой пароль", - "services.invalidPassword": "Вы указали неверный пароль от аккаунта.", - "services.keyNotExists": "Указанный ключ не существует или устарел.", - "services.keyRequired": "Пожалуйста, введите код активации", - "services.loginNotExist": "К сожалению, на Ely нет пользователя с указанным логином.", - "services.loginRequired": "Пожалуйста, укажите E‑mail или ник", - "services.newPasswordRequired": "Пожалуйста, заполните поле пароля", - "services.newRePasswordRequired": "Пожалуйста, введите повтор пароля", - "services.passwordRequired": "Пожалуйста, введите пароль", - "services.passwordTooShort": "Пароль должен быть как минимум 8 символов в длинну", - "services.passwordsDoesNotMatch": "Пароли не совпадают", - "services.rePasswordRequired": "Пожалуйста, повторите пароль", - "services.rulesAgreementRequired": "Для создания аккаунта вам необходимо принять правила сервиса", - "services.suggestResetPassword": "Вы {link}?", - "services.usernameInvalid": "Ник содержит недопустимые символы", - "services.usernameRequired": "Поле ника обязательно к заполнению", - "services.usernameTooLong": "Слишком длинный ник", - "services.usernameTooShort": "Ник слишком короткий", - "services.usernameUnavailable": "Этот ник уже занят" + "services.errorsDict.accountAlreadyActivated": "Этот аккаунт уже активирован", + "services.errorsDict.accountNotActivated": "Аккаунт не активирован", + "services.errorsDict.doYouWantRequestKey": "Желаете отправить новый код?", + "services.errorsDict.emailFrequency": "Пожалуйста, успокойтесь, вы запрашиваете E‑mail слишком часто. Новый ключ можно будет заказать {time}.", + "services.errorsDict.emailInvalid": "Указан неправильный E‑mail", + "services.errorsDict.emailIsTempmail": "Использование сервисов временных E‑mail адресов запрещено", + "services.errorsDict.emailNotAvailable": "На указанный E‑mail адрес уже зарегистрирован аккаунт.", + "services.errorsDict.emailNotFound": "Не найдено аккаунта с указанным E‑mail адресом", + "services.errorsDict.emailRequired": "Пожалуйста, укажите E‑mail", + "services.errorsDict.emailToLong": "E‑mail слишком длинный", + "services.errorsDict.forgotYourPassword": "забыли свой пароль", + "services.errorsDict.invalidPassword": "Вы указали неверный пароль от аккаунта.", + "services.errorsDict.keyNotExists": "Указанный ключ не существует или устарел.", + "services.errorsDict.keyRequired": "Пожалуйста, введите код активации", + "services.errorsDict.loginNotExist": "К сожалению, на Ely нет пользователя с указанным логином.", + "services.errorsDict.loginRequired": "Пожалуйста, укажите E‑mail или ник", + "services.errorsDict.newPasswordRequired": "Пожалуйста, заполните поле пароля", + "services.errorsDict.newRePasswordRequired": "Пожалуйста, введите повтор пароля", + "services.errorsDict.passwordRequired": "Пожалуйста, введите пароль", + "services.errorsDict.passwordTooShort": "Пароль должен быть как минимум 8 символов в длинну", + "services.errorsDict.passwordsDoesNotMatch": "Пароли не совпадают", + "services.errorsDict.rePasswordRequired": "Пожалуйста, повторите пароль", + "services.errorsDict.rulesAgreementRequired": "Для создания аккаунта вам необходимо принять правила сервиса", + "services.errorsDict.suggestResetPassword": "Вы {link}?", + "services.errorsDict.usernameInvalid": "Ник содержит недопустимые символы", + "services.errorsDict.usernameRequired": "Поле ника обязательно к заполнению", + "services.errorsDict.usernameTooLong": "Слишком длинный ник", + "services.errorsDict.usernameTooShort": "Ник слишком короткий", + "services.errorsDict.usernameUnavailable": "Этот ник уже занят" } diff --git a/src/i18n/uk.json b/src/i18n/uk.json index 9a50243..bf8b79e 100644 --- a/src/i18n/uk.json +++ b/src/i18n/uk.json @@ -145,33 +145,33 @@ "pages.rules.mainProvision4": "Реєстрація на сервісі безкоштовна. Створення облікового запису Ely.by можливо тільки на сторінці {link}.", "pages.rules.mainProvisions": "Основні положення", "pages.rules.title": "Правила сайту", - "services.accountAlreadyActivated": "Цей обліковий запис вже активований", - "services.accountNotActivated": "Акаунт не активований", - "services.doYouWantRequestKey": "Бажаєте відправити новий код?", - "services.emailFrequency": "Будь ласка, заспокойтесь, ви запитуєте E-mail занадто часто. Новий ключ можна буде замовити {time}.", - "services.emailInvalid": "Вказано невірний E-mail", - "services.emailIsTempmail": "Використання сервісів тимчасових E-mail адрес заборонено", - "services.emailNotAvailable": "На вказану E-mail адресу вже зареєстровано обліковий запис", - "services.emailNotFound": "Аккаунта із зазначеною E-mail адресою не існує", - "services.emailRequired": "Будь ласка, вкажіть E-mail", - "services.emailToLong": "E‑mail занадто довгий", - "services.forgotYourPassword": "забули свій пароль", - "services.invalidPassword": "Ви вказали невірний пароль від акаунту.", - "services.keyNotExists": "Вказаний ключ не існує або застарів.", - "services.keyRequired": "Будь ласка, введіть код активації", - "services.loginNotExist": "На жаль, на Ely немає користувача з зазначеним логіном.", - "services.loginRequired": "Будь ласка, вкажіть E-mail або нік", - "services.newPasswordRequired": "Будь ласка, заповніть поле пароля", - "services.newRePasswordRequired": "Будь ласка, введіть повторення пароля", - "services.passwordRequired": "Будь ласка, введіть пароль", - "services.passwordTooShort": "Пароль повинен бути як мінімум 8 символів у довжину", - "services.passwordsDoesNotMatch": "Паролі не співпадають", - "services.rePasswordRequired": "Будь ласка, повторіть пароль", - "services.rulesAgreementRequired": "Для створення аккаунта вам необхідно прийняти правила сервісу", - "services.suggestResetPassword": "Ви {link}?", - "services.usernameInvalid": "Нік містить неприпустимі символи", - "services.usernameRequired": "Поле ніку обов'язково до заповнення", - "services.usernameTooLong": "Занадто довгий нік", - "services.usernameTooShort": "Нік занадто короткий", - "services.usernameUnavailable": "Цей нік вже занятий" + "services.errorsDict.accountAlreadyActivated": "Цей обліковий запис вже активований", + "services.errorsDict.accountNotActivated": "Акаунт не активований", + "services.errorsDict.doYouWantRequestKey": "Бажаєте відправити новий код?", + "services.errorsDict.emailFrequency": "Будь ласка, заспокойтесь, ви запитуєте E-mail занадто часто. Новий ключ можна буде замовити {time}.", + "services.errorsDict.emailInvalid": "Вказано невірний E-mail", + "services.errorsDict.emailIsTempmail": "Використання сервісів тимчасових E-mail адрес заборонено", + "services.errorsDict.emailNotAvailable": "На вказану E-mail адресу вже зареєстровано обліковий запис", + "services.errorsDict.emailNotFound": "Аккаунта із зазначеною E-mail адресою не існує", + "services.errorsDict.emailRequired": "Будь ласка, вкажіть E-mail", + "services.errorsDict.emailToLong": "E‑mail занадто довгий", + "services.errorsDict.forgotYourPassword": "забули свій пароль", + "services.errorsDict.invalidPassword": "Ви вказали невірний пароль від акаунту.", + "services.errorsDict.keyNotExists": "Вказаний ключ не існує або застарів.", + "services.errorsDict.keyRequired": "Будь ласка, введіть код активації", + "services.errorsDict.loginNotExist": "На жаль, на Ely немає користувача з зазначеним логіном.", + "services.errorsDict.loginRequired": "Будь ласка, вкажіть E-mail або нік", + "services.errorsDict.newPasswordRequired": "Будь ласка, заповніть поле пароля", + "services.errorsDict.newRePasswordRequired": "Будь ласка, введіть повторення пароля", + "services.errorsDict.passwordRequired": "Будь ласка, введіть пароль", + "services.errorsDict.passwordTooShort": "Пароль повинен бути як мінімум 8 символів у довжину", + "services.errorsDict.passwordsDoesNotMatch": "Паролі не співпадають", + "services.errorsDict.rePasswordRequired": "Будь ласка, повторіть пароль", + "services.errorsDict.rulesAgreementRequired": "Для створення аккаунта вам необхідно прийняти правила сервісу", + "services.errorsDict.suggestResetPassword": "Ви {link}?", + "services.errorsDict.usernameInvalid": "Нік містить неприпустимі символи", + "services.errorsDict.usernameRequired": "Поле ніку обов'язково до заповнення", + "services.errorsDict.usernameTooLong": "Занадто довгий нік", + "services.errorsDict.usernameTooShort": "Нік занадто короткий", + "services.errorsDict.usernameUnavailable": "Цей нік вже занятий" }