diff --git a/framework/yii/messages/config.php b/framework/yii/messages/config.php
index b707abb..40cd538 100644
--- a/framework/yii/messages/config.php
+++ b/framework/yii/messages/config.php
@@ -7,7 +7,7 @@ return [
'messagePath' => __DIR__,
// array, required, list of language codes that the extracted messages
// should be translated to. For example, ['zh-CN', 'de'].
- 'languages' => ['de'],
+ 'languages' => ['de', 'ru'],
// string, the name of the function for translating messages.
// Defaults to 'Yii::t'. This is used as a mark to find the messages to be
// translated. You may use a string for single function name or an array for
diff --git a/framework/yii/messages/ru/yii.php b/framework/yii/messages/ru/yii.php
new file mode 100644
index 0000000..461f774
--- /dev/null
+++ b/framework/yii/messages/ru/yii.php
@@ -0,0 +1,105 @@
+ 'Главная',
+ 'Invalid data received for parameter "{param}".' => 'Неправильное значение параметра "{param}".',
+ 'Login Required' => 'Требуется вход.',
+ 'Missing required arguments: {params}' => 'Отсутствуют обязательные аргументы: {params}',
+ 'Missing required parameters: {params}' => 'Отсутствуют обязательные параметры: {params}',
+ 'No help for unknown command "{command}".' => 'Справка недоступна для неизвестной команды "{command}".',
+ 'No help for unknown sub-command "{command}".' => 'Справка недоступна для неизвестной субкоманды "{command}".',
+ 'Showing {begin, number}-{end, number} of {totalCount, number} {totalCount, plural, one{item} other{items}}.' => 'Показаны записи {begin, number}-{end, number} из {totalCount, number}.',
+ 'Total {count, number} {count, plural, one{item} other{items}}.' => 'Всего {count, number} {count, plural, one{# запись} few{# записи} many{# записей} other{# записи}}.',
+ 'Unable to verify your data submission.' => 'Не удалось проверить переданные данные.',
+ 'Unknown command "{command}".' => 'Неизвестная команда "{command}".',
+ 'Unknown option: --{name}' => 'Неизвестная опция : --{name}',
+ 'View' => '',
+ 'the input value' => 'введённое значение',
+ '(not set)' => '(не задано)',
+ 'An internal server error occurred.' => 'Возникла внутренняя ошибка сервера.',
+ 'Are you sure to delete this item?' => 'Вы уверены, ',
+ 'Compile Error' => 'Compile Error',
+ 'Compile Warning' => 'Compile Warning',
+ 'Core Error' => 'Core Error',
+ 'Core Warning' => 'Core Warning',
+ 'Database Exception' => 'Database Exception',
+ 'Delete' => 'Удалить',
+ 'Deprecated' => 'Deprecated',
+ 'Error' => 'Error',
+ 'Exception' => 'Exception',
+ 'Fatal Error' => 'Fatal Error',
+ 'File upload failed.' => 'Загрузка файла не удалась.',
+ 'Invalid Call' => 'Invalid Call',
+ 'Invalid Configuration' => 'Invalid Configuration',
+ 'Invalid Parameter' => 'Invalid Parameter',
+ 'Invalid Route' => 'Invalid Route',
+ 'No' => 'Нет',
+ 'No results found.' => 'Ничего не найдено.',
+ 'Not Supported' => 'Not Supported',
+ 'Notice' => 'Notice',
+ 'Only files with these extensions are allowed: {extensions}.' => 'Разрешена загрузка файлов только со следующими расширениями: {extensions}.',
+ 'Only files with these mimeTypes are allowed: {mimeTypes}.' => 'Разрешена загрузка файлов только со следующими MIME-типами: {mimeTypes}.',
+ 'Page not found.' => 'Страница не найдена.',
+ 'Parse Error' => 'Parse Error',
+ 'Please fix the following errors:' => 'Исправьте следующие ошибки:',
+ 'Please upload a file.' => 'Загрузите файл.',
+ 'Recoverable Error' => 'Recoverable Error',
+ 'Stale Object Exception' => 'Stale Object Exception',
+ 'Strict' => 'Strict',
+ 'The file "{file}" is not an image.' => 'Файл «{file}» не является изображением.',
+ 'The file "{file}" is too big. Its size cannot exceed {limit, number} {limit, plural, one{byte} other{bytes}}.' => 'Файл «{file}» слишком большой. Размер не должен превышать {limit, number} {limit, plural, one{# байт} few{# байта} many{# байт} other{# байта}}.',
+ 'The file "{file}" is too large. The height cannot be larger than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Файл «{file}» слишком большой. Высота не должна превышать {limit, number} {limit, plural, one{# пиксель} few{# пикселя} many{# пикселей} other{# пикселя}}.',
+ 'The file "{file}" is too large. The width cannot be larger than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Файл «{file}» слишком большой. Ширина не должна превышать {limit, number} {limit, plural, one{# пиксель} few{# пикселя} many{# пикселей} other{# пикселя}}.',
+ 'The file "{file}" is too small. Its size cannot be smaller than {limit, number} {limit, plural, one{byte} other{bytes}}.' => 'Файл «{file}» слишком маленький. Размер должен быть более {limit, number} {limit, plural, one{# байт} few{# байта} many{# байт} other{# байта}}.',
+ 'The file "{file}" is too small. The height cannot be smaller than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Файл «{file}» слишком маленький. Высота должна быть более {limit, number} {limit, plural, one{# пиксель} few{# пикселя} many{# пикселей} other{# пикселя}}.',
+ 'The file "{file}" is too small. The width cannot be smaller than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Файл «{file}» слишком маленький. Ширина должна быть более {limit, number} {limit, plural, one{# пиксель} few{# пикселя} many{# пикселей} other{# пикселя}}.',
+ 'The format of {attribute} is invalid.' => 'Неверный формат значения «{attribute}».',
+ 'The verification code is incorrect.' => 'Неправильный проверочный код.',
+ 'Unknown Class' => 'Unknown Class',
+ 'Unknown Method' => 'Unknown Method',
+ 'Unknown Property' => 'Unknown Property',
+ 'Update' => 'Редактировать',
+ 'User Error' => 'User Error',
+ 'User Warning' => 'User Warning',
+ 'Warning' => 'Warning',
+ 'Yes' => 'Да',
+ 'You are not allowed to perform this action.' => 'Вам не разрешено производить данное действие.',
+ 'You can upload at most {limit, number} {limit, plural, one{file} other{files}}.' => 'Вы не можете загружать более {limit, number} {limit, plural, one{# файла} few{# файлов} many{# файлов} other{# файла}}.',
+ '{attribute} "{value}" has already been taken.' => '{attribute} «{value}» уже занят.',
+ '{attribute} cannot be blank.' => 'Необходимо заполнить «{attribute}».',
+ '{attribute} is invalid.' => 'Значение «{attribute}» не верно.',
+ '{attribute} is not a valid URL.' => 'Значение «{attribute}» не является правильным URL.',
+ '{attribute} is not a valid email address.' => 'Значение «{attribute}» не является правильным email адресом.',
+ '{attribute} must be "{requiredValue}".' => 'Значение «{attribute}» должно быть равно «{requiredValue}».',
+ '{attribute} must be a number.' => 'Значение «{attribute}» должно быть числом.',
+ '{attribute} must be a string.' => 'Значение «{attribute}» должно быть строкой.',
+ '{attribute} must be an integer.' => 'Значение «{attribute}» должно быть целым числом.',
+ '{attribute} must be either "{true}" or "{false}".' => 'Значение «{attribute}» должно быть равно «{true}» или «{false}».',
+ '{attribute} must be greater than "{compareValue}".' => 'Значение «{attribute}» должно быть больше значения «{compareValue}».',
+ '{attribute} must be greater than or equal to "{compareValue}".' => 'Значение «{attribute}» должно быть больше или равно значения «{compareValue}».',
+ '{attribute} must be less than "{compareValue}".' => 'Значение «{attribute}» должно быть меньше значения «{compareValue}».',
+ '{attribute} must be less than or equal to "{compareValue}".' => 'Значение «{attribute}» должно быть меньше или равно значения «{compareValue}».',
+ '{attribute} must be no greater than {max}.' => 'Значение «{attribute}» не должно превышать {max}.',
+ '{attribute} must be no less than {min}.' => 'Значение «{attribute}» должно быль больше {min}.',
+ '{attribute} must be repeated exactly.' => 'Значение «{attribute}» должно быть повторено в точности.',
+ '{attribute} must not be equal to "{compareValue}".' => 'Значение «{attribute}» не должно быть равно «compareValue».',
+ '{attribute} should contain at least {min, number} {min, plural, one{character} other{characters}}.' => 'Значение «{attribute}» должно содержать минимум {min, number} {min, plural, one{# символ} few{# символа} many{# символов} other{# символа}}.',
+ '{attribute} should contain at most {max, number} {max, plural, one{character} other{characters}}.' => 'Значение «{attribute}» должно содержать максимум {max, number} {max, plural, one{# символ} few{# символа} many{# символов} other{# символа}}.',
+ '{attribute} should contain {length, number} {length, plural, one{character} other{characters}}.' => 'Значение «{attribute}» должно содержать {length, number} {length, plural, one{# символ} few{# символа} many{# символов} other{# символа}}.',
+);