Browse Source

i18n Update for Russian language (#3579)

ibiruai 5 years ago
parent
commit
27372b5bb7
8 changed files with 669 additions and 669 deletions
  1. 59 59
      app/i18n/ru/admin.php
  2. 167 167
      app/i18n/ru/conf.php
  3. 85 85
      app/i18n/ru/feedback.php
  4. 150 150
      app/i18n/ru/gen.php
  5. 49 49
      app/i18n/ru/index.php
  6. 37 37
      app/i18n/ru/install.php
  7. 102 102
      app/i18n/ru/sub.php
  8. 20 20
      app/i18n/ru/user.php

+ 59 - 59
app/i18n/ru/admin.php

@@ -2,22 +2,22 @@
 
 return array(
 	'auth' => array(
-		'allow_anonymous' => 'Разрешить анонимное чтение статей для пользователя по умолчанию (%s)',
-		'allow_anonymous_refresh' => 'Разрешить анонимное обновление статей',
-		'api_enabled' => 'Включить доступ к <abbr>API</abbr> <small>(необходимо для мобильных приложений)</small>',
-		'form' => 'На основе веб-формы (традиционный, необходим JavaScript)',
-		'http' => 'HTTP (для продвинутых пользователей - по HTTPS)',
-		'none' => 'Без аутентификации (небезопасный)',
+		'allow_anonymous' => 'Разрешить анонимное чтение статей пользователя по умолчанию (%s)',
+		'allow_anonymous_refresh' => 'Разрешить анонимную актуализацию статей',
+		'api_enabled' => 'Позволить <abbr>API</abbr> доступ <small>(необходимо для мобильных приложений)</small>',
+		'form' => 'Веб-форма (традиционный, необходим JavaScript)',
+		'http' => 'HTTP (для опытных пользователей с HTTPS)',
+		'none' => 'Без аутентификации (небезопасно)',
 		'title' => 'Аутентификации',
 		'title_reset' => 'Сброс аутентицикации',
 		'token' => 'Токен аутентификации',
-		'token_help' => 'Разрешает доступ к RSS ленте пользователя по умолчанию без аутентификации:',
-		'type' => 'Метод аутентификации',
+		'token_help' => 'Разрешает доступ к RSS-лентам пользователя по умолчанию без аутентификации:',
+		'type' => 'Способ аутентификации',
 		'unsafe_autologin' => 'Разрешить небезопасный автоматический вход с использованием следующего формата: ',
 	),
 	'check_install' => array(
 		'cache' => array(
-			'nok' => 'Проверьте права доступа к папке <em>./data/cache</em>. Сервер HTTP должен иметь права на запись в эту папку',
+			'nok' => 'Проверьте права доступа к папке <em>./data/cache</em>. Веб-сервер должен иметь право на запись в эту папку',
 			'ok' => 'Права на <em>./data/cache</em> в порядке.',
 		),
 		'categories' => array(
@@ -37,7 +37,7 @@ return array(
 			'ok' => 'У вас установлено расширение cURL.',
 		),
 		'data' => array(
-			'nok' => 'Проверьте права доступа к папке <em>./data</em> . Сервер HTTP должен иметь права на запись в эту папку.',
+			'nok' => 'Проверьте права доступа к папке <em>./data</em> . Веб-сервер должен иметь право на запись в эту папку.',
 			'ok' => 'Права на <em>./data/</em> в порядке.',
 		),
 		'database' => 'Установка базы данных',
@@ -50,7 +50,7 @@ return array(
 			'ok' => 'Таблица статей (entry) настроена правильно.',
 		),
 		'favicons' => array(
-			'nok' => 'Проверьте права доступа к папке <em>./data/favicons</em> . Сервер HTTP должен иметь права на запись в эту папку.',
+			'nok' => 'Проверьте права доступа к папке <em>./data/favicons</em> . Веб-сервер должен иметь право на запись в эту папку.',
 			'ok' => 'Права на папку значков в порядке.',
 		),
 		'feeds' => array(
@@ -67,8 +67,8 @@ return array(
 			'ok' => 'У вас установлена библиотека для работы с JSON.',
 		),
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended mbstring library for Unicode.',	// TODO - Translation
-			'ok' => 'You have the recommended mbstring library for Unicode.',	// TODO - Translation
+			'nok' => 'У вас не установлена рекомендуемая библиотека mbstring для Unicode.',
+			'ok' => 'У вас установлена рекомендуемая библиотека mbstring для Unicode.',
 		),
 		'pcre' => array(
 			'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).',
@@ -79,7 +79,7 @@ return array(
 			'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite, pdo_pgsql).',
 		),
 		'php' => array(
-			'_' => 'PHP installation',	// TODO - Translation
+			'_' => 'Инсталляция PHP',
 			'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.',
 			'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.',
 		),
@@ -89,36 +89,36 @@ return array(
 		),
 		'title' => 'Проверка установки и настройки',
 		'tokens' => array(
-			'nok' => 'Проверьте права доступа к папке <em>./data/tokens</em> . Сервер HTTP должен иметь права на запись в эту папку.',
+			'nok' => 'Проверьте права доступа к папке <em>./data/tokens</em> . Веб-сервер должен иметь право на запись в эту папку.',
 			'ok' => 'Права на папку tokens в порядке.',
 		),
 		'users' => array(
-			'nok' => 'Проверьте права доступа к папке <em>./data/users</em> . Сервер HTTP должен иметь права на запись в эту папку.',
+			'nok' => 'Проверьте права доступа к папке <em>./data/users</em> . Веб-сервер должен иметь право на запись в эту папку.',
 			'ok' => 'Права на папку users в порядке.',
 		),
 		'zip' => array(
-			'nok' => 'You lack ZIP extension (php-zip package).',
-			'ok' => 'You have the ZIP extension.',	// TODO - Translation
+			'nok' => 'У вас не установлено расширение ZIP (пакет php-zip).',
+			'ok' => 'У вас установлено расширение ZIP.',
 		),
 	),
 	'extensions' => array(
-		'author' => 'Author',	// TODO - Translation
-		'community' => 'Available community extensions',	// TODO - Translation
-		'description' => 'Description',	// TODO - Translation
+		'author' => 'Автор',
+		'community' => 'Доступные расширения сообщества',
+		'description' => 'Описание',
 		'disabled' => 'Отключены',
-		'empty_list' => 'Расширения не установлены',
+		'empty_list' => 'Нет установленных расширений',
 		'enabled' => 'Включены',
-		'latest' => 'Installed',	// TODO - Translation
-		'name' => 'Name',	// TODO - Translation
-		'no_configure_view' => 'Это расширение нельзя настроить.',
+		'latest' => 'Установлено',
+		'name' => 'Название',
+		'no_configure_view' => 'Это расширение не требует настройки.',
 		'system' => array(
 			'_' => 'Системные расширения',
-			'no_rights' => 'Системные расширения (у вас нет к ним доступа)',
+			'no_rights' => 'Системное расширение (у вас нет необходимых разрешений)',
 		),
 		'title' => 'Расширения',
-		'update' => 'Update available',	// TODO - Translation
+		'update' => 'Доступно обновление',
 		'user' => 'Расширения пользователя',
-		'version' => 'Version',	// TODO - Translation
+		'version' => 'Версия',
 	),
 	'stats' => array(
 		'_' => 'Статистика',
@@ -131,17 +131,17 @@ return array(
 		'entry_per_hour' => 'За час (в среднем - %.2f сообщений)',
 		'entry_per_month' => 'За месяц (в среднем - %.2f сообщений)',
 		'entry_repartition' => 'Перерасределение статей',
-		'feed' => 'Подписка',
-		'feed_per_category' => 'Подписок в категории',
-		'idle' => 'Неактивные подписки',
+		'feed' => 'Лента',
+		'feed_per_category' => 'Лент в категории',
+		'idle' => 'Неактивные ленты',
 		'main' => 'Основная статистика',
 		'main_stream' => 'Основной поток',
 		'menu' => array(
-			'idle' => 'Неактивные подписки',
+			'idle' => 'Неактивные ленты',
 			'main' => 'Основная статистика',
 			'repartition' => 'Перерасределение статей',
 		),
-		'no_idle' => 'Нет неактивных подписок!',
+		'no_idle' => 'Нет неактивных лент!',
 		'number_entries' => 'статей: %d',
 		'percent_of_total' => '%% от всего',
 		'repartition' => 'Перераспределение статей',
@@ -150,19 +150,19 @@ return array(
 		'status_total' => 'Всего',
 		'status_unread' => 'Не прочитано',
 		'title' => 'Статистика',
-		'top_feed' => '10 лучших подписок',
+		'top_feed' => '10 лучших лент',
 	),
 	'system' => array(
 		'_' => 'Системные настройки',
-		'auto-update-url' => 'Адрес сервера для автоматического обновления',
+		'auto-update-url' => 'URL сервера для автоматического обновления',
 		'cookie-duration' => array(
-			'help' => 'in seconds',	// TODO - Translation
-			'number' => 'Duration to keep logged in',	// TODO - Translation
+			'help' => 'в секундах',
+			'number' => 'Оставаться в системе на протяжении',
 		),
-		'force_email_validation' => 'Force email address validation',	// TODO - Translation
-		'instance-name' => 'Название этого сервера',
-		'max-categories' => 'Количество категорий на пользователя',
-		'max-feeds' => 'Количество статей на пользователя',
+		'force_email_validation' => 'Обязать подтверждать адрес электронной почты',
+		'instance-name' => 'Название экземпляра',
+		'max-categories' => 'Максимальное количество категорий на пользователя',
+		'max-feeds' => 'Максимальное количество лент на пользователя',
 		'registration' => array(
 			'help' => '0 означает неограниченное количество пользователей',
 			'number' => 'Максимальное количество пользователей',
@@ -174,31 +174,31 @@ return array(
 		'check' => 'Проверить обновления',
 		'current_version' => 'Ваша текущая версия FreshRSS: %s.',
 		'last' => 'Последняя проверка: %s',
-		'none' => 'Нечего обновлять',
+		'none' => 'Нет обновлений',
 		'title' => 'Обновить систему',
 	),
 	'user' => array(
-		'admin' => 'Administrator',	// TODO - Translation
-		'article_count' => 'Articles',	// TODO - Translation
+		'admin' => 'Администратор',
+		'article_count' => 'Статей',
 		'articles_and_size' => '%s статей (%s)',
-		'back_to_manage' => '← Return to user list',	// TODO - Translation
+		'back_to_manage' => '← Вернуться к списку пользователей',
 		'create' => 'Создать нового пользователя',
-		'database_size' => 'Database size',	// TODO - Translation
-		'delete_users' => 'Delete user',	// TODO - Translation
-		'email' => 'Email address',	// TODO - Translation
-		'enabled' => 'Enabled',	// TODO - Translation
-		'feed_count' => 'Feeds',	// TODO - Translation
-		'is_admin' => 'Is admin',	// TODO - Translation
+		'database_size' => 'Размер базы данных',
+		'delete_users' => 'Удалить пользователя',
+		'email' => 'Адрес электронной почты',
+		'enabled' => 'Включён',
+		'feed_count' => 'Лент',
+		'is_admin' => 'Является администратором',
 		'language' => 'Язык',
-		'last_user_activity' => 'Last user activity',	// TODO - Translation
-		'list' => 'User list',	// TODO - Translation
-		'number' => 'На данный момент создан %d аккаунт',
-		'numbers' => 'На данный момент аккаунтов создано:	%d',
-		'password_form' => 'Пароль<br /><small>(для входа через Веб-форму)</small>',
-		'password_format' => 'Минимум 7 символов',
-		'selected' => 'Selected user',	// TODO - Translation
+		'last_user_activity' => 'Последняя активность',
+		'list' => 'Список пользователей',
+		'number' => 'Имеется %d созданный аккаунт',
+		'numbers' => 'Имеется %d созданных аккаунтов',
+		'password_form' => 'Пароль<br /><small>(для входа через веб-форму)</small>',
+		'password_format' => 'Не менее 7 символов',
+		'selected' => 'Выбранный пользователь',
 		'title' => 'Управление пользователями',
-		'update_users' => 'Update user',	// TODO - Translation
+		'update_users' => 'Изменить пользователя',
 		'user_list' => 'Список пользователей',
 		'username' => 'Имя пользователя',
 		'users' => 'Пользователи',

+ 167 - 167
app/i18n/ru/conf.php

@@ -2,215 +2,215 @@
 
 return array(
 	'archiving' => array(
-		'_' => 'Архивация',
+		'_' => 'Архивирование',
 		'delete_after' => 'Удалять статьи после',
-		'exception' => 'Purge exception',	// TODO - Translation
-		'help' => 'Каждую подписку можно настроить более гибко',
-		'keep_favourites' => 'Never delete favourites',	// TODO - Translation
-		'keep_labels' => 'Never delete labels',	// TODO - Translation
-		'keep_max' => 'Maximum number of articles to keep',	// TODO - Translation
-		'keep_min_by_feed' => 'Minimum number of articles to keep per feed',	// TODO - Translation
-		'keep_period' => 'Maximum age of articles to keep',	// TODO - Translation
-		'keep_unreads' => 'Never delete unread articles',	// TODO - Translation
-		'maintenance' => 'Maintenance',	// TODO - Translation
+		'exception' => 'Исключения при очистке',
+		'help' => 'В индивидуальных настройках лент есть больше опций',
+		'keep_favourites' => 'Никогда не удалять избранное',
+		'keep_labels' => 'Никогда не удалять метки',
+		'keep_max' => 'Максимальное количество статей',
+		'keep_min_by_feed' => 'Минимальное количество статей в ленте',
+		'keep_period' => 'Максимальный возраст статей',
+		'keep_unreads' => 'Никогда не удалять непрочитанные статьи',
+		'maintenance' => 'Обслуживание',
 		'optimize' => 'Оптимизировать базу данных',
-		'optimize_help' => 'To do occasionally to reduce the size of the database',
-		'policy' => 'Purge policy',	// TODO - Translation
-		'policy_warning' => 'If no purge policy is selected, every article will be kept.',	// TODO - Translation
-		'purge_now' => 'Очистить сейчас',
-		'title' => 'Архивация',
-		'ttl' => 'Не обновлять чаще чем',
+		'optimize_help' => 'Выполняйте время от времени, чтобы уменьшить размер базы данных',
+		'policy' => 'Политика очистки',
+		'policy_warning' => 'Если ни одна политика очистки не выбрана, все статьи будут оставлены.',
+		'purge_now' => 'Запустить очистку сейчас',
+		'title' => 'Архивирование',
+		'ttl' => 'Не актуализировать автоматически чаще чем',
 	),
 	'display' => array(
-		'_' => 'Display',	// TODO - Translation
+		'_' => 'Отображение',
 		'icon' => array(
-			'bottom_line' => 'Bottom line',	// TODO - Translation
-			'display_authors' => 'Authors',	// TODO - Translation
-			'entry' => 'Article icons',	// TODO - Translation
-			'publication_date' => 'Date of publication',	// TODO - Translation
-			'related_tags' => 'Related tags',
-			'sharing' => 'Sharing',	// TODO - Translation
-			'top_line' => 'Top line',	// TODO - Translation
+			'bottom_line' => 'Нижняя линия',
+			'display_authors' => 'Авторы',
+			'entry' => 'Иконки статей',
+			'publication_date' => 'Дата публикации',
+			'related_tags' => 'Связанные метки',
+			'sharing' => 'Поделиться',
+			'top_line' => 'Верхняя линия',
 		),
 		'language' => 'Язык',
 		'notif_html5' => array(
-			'seconds' => 'seconds (0 means no timeout)',	// TODO - Translation
-			'timeout' => 'HTML5 notification timeout',	// TODO - Translation
+			'seconds' => 'секунд (0 - нет таймаута)',
+			'timeout' => 'Таймаут уведомлений HTML5',
 		),
-		'show_nav_buttons' => 'Show the navigation buttons',	// TODO - Translation
+		'show_nav_buttons' => 'Показать кнопки навигации',
 		'theme' => 'Тема',
-		'title' => 'Display',	// TODO - Translation
+		'title' => 'Отображение',
 		'width' => array(
-			'content' => 'Content width',	// TODO - Translation
-			'large' => 'Wide',	// TODO - Translation
-			'medium' => 'Medium',	// TODO - Translation
-			'no_limit' => 'Full Width',	// TODO - Translation
-			'thin' => 'Narrow',	// TODO - Translation
+			'content' => 'Ширина содержимого',
+			'large' => 'Широкое',
+			'medium' => 'Среднее',
+			'no_limit' => 'Во всю ширину',
+			'thin' => 'Узкое',
 		),
 	),
 	'profile' => array(
-		'_' => 'Profile management',	// TODO - Translation
-		'api' => 'API management',	// TODO - Translation
+		'_' => 'Настройки профиля',
+		'api' => 'Настройки API',
 		'delete' => array(
-			'_' => 'Account deletion',	// TODO - Translation
-			'warn' => 'Your account and all the related data will be deleted.',
+			'_' => 'Удаление аккаунта',
+			'warn' => 'Ваш аккаунт и вся связанная с ним информация будут удалены.',
 		),
-		'email' => 'Email address',	// TODO - Translation
-		'password_api' => 'Password API<br /><small>(e.g., for mobile apps)</small>',
-		'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',	// TODO - Translation
-		'password_format' => 'At least 7 characters',	// TODO - Translation
-		'title' => 'Profile',	// TODO - Translation
+		'email' => 'Адрес электронной почты',
+		'password_api' => 'Пароль API<br /><small>(например, для мобильных приложений)</small>',
+		'password_form' => 'Пароль<br /><small>(для входа через веб-форму)</small>',
+		'password_format' => 'Не менее 7 символов',
+		'title' => 'Профиль',
 	),
 	'query' => array(
-		'_' => 'User queries',	// TODO - Translation
-		'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.',	// TODO - Translation
-		'display' => 'Display user query results',	// TODO - Translation
+		'_' => 'Пользовательские запросы',
+		'deprecated' => 'Этот запрос больше не действителен. Связанная категория или лента была удалена.',
+		'display' => 'Показать результаты пользовательского запроса',
 		'filter' => array(
-			'_' => 'Filter applied:',	// TODO - Translation
-			'categories' => 'Display by category',	// TODO - Translation
-			'feeds' => 'Display by feed',	// TODO - Translation
-			'order' => 'Sort by date',	// TODO - Translation
-			'search' => 'Expression',	// TODO - Translation
-			'state' => 'State',	// TODO - Translation
-			'tags' => 'Display by tag',	// TODO - Translation
-			'type' => 'Type',	// TODO - Translation
+			'_' => 'Применённые фильтры:',
+			'categories' => 'Отображение по категории',
+			'feeds' => 'Отображение по ленте',
+			'order' => 'Сортировать по дате',
+			'search' => 'Выражение',
+			'state' => 'Состояние',
+			'tags' => 'Отображение по метке',
+			'type' => 'Тип',
 		),
-		'get_all' => 'Display all articles',	// TODO - Translation
-		'get_category' => 'Display "%s" category',	// TODO - Translation
-		'get_favorite' => 'Display favorite articles',
-		'get_feed' => 'Display "%s" feed',	// TODO - Translation
-		'get_tag' => 'Display "%s" label',	// TODO - Translation
-		'name' => 'Name',	// TODO - Translation
-		'no_filter' => 'No filter',	// TODO - Translation
-		'none' => 'You haven’t created any user query yet.',
-		'number' => 'Query n°%d',	// TODO - Translation
-		'order_asc' => 'Display oldest articles first',	// TODO - Translation
-		'order_desc' => 'Display newest articles first',	// TODO - Translation
-		'remove' => 'Remove user query',	// TODO - Translation
-		'search' => 'Search for "%s"',	// TODO - Translation
-		'state_0' => 'Display all articles',	// TODO - Translation
-		'state_1' => 'Display read articles',	// TODO - Translation
-		'state_2' => 'Display unread articles',	// TODO - Translation
-		'state_3' => 'Display all articles',	// TODO - Translation
-		'state_4' => 'Display favorite articles',
-		'state_5' => 'Display read favorite articles',
-		'state_6' => 'Display unread favorite articles',
-		'state_7' => 'Display favorite articles',
-		'state_8' => 'Display not favorite articles',
-		'state_9' => 'Display read not favorite articles',
-		'state_10' => 'Display unread not favorite articles',
-		'state_11' => 'Display not favorite articles',
-		'state_12' => 'Display all articles',	// TODO - Translation
-		'state_13' => 'Display read articles',	// TODO - Translation
-		'state_14' => 'Display unread articles',	// TODO - Translation
-		'state_15' => 'Display all articles',	// TODO - Translation
-		'title' => 'User queries',	// TODO - Translation
+		'get_all' => 'Показать все статьи',
+		'get_category' => 'Показать категорию "%s"',
+		'get_favorite' => 'Показать избранные статьи',
+		'get_feed' => 'Показать ленту "%s"',
+		'get_tag' => 'Показать метку "%s"',
+		'name' => 'Название',
+		'no_filter' => 'Нет фильтров',
+		'none' => 'Вы ещё не создавали пользовательские запросы.',
+		'number' => 'Запрос №%d',
+		'order_asc' => 'Показывать сначала старые статьи',
+		'order_desc' => 'Показывать сначала новые статьи',
+		'remove' => 'Удалить пользовательский запрос',
+		'search' => 'Искать "%s"',
+		'state_0' => 'Показать все статьи',
+		'state_1' => 'Показать прочитанные статьи',
+		'state_2' => 'Показать непрочитанные статьи',
+		'state_3' => 'Показать все статьи',
+		'state_4' => 'Показать избранные статьи',
+		'state_5' => 'Показать прочитанные избранные статьи',
+		'state_6' => 'Показать непрочитанные избранные статьи',
+		'state_7' => 'Показать избранные статьи',
+		'state_8' => 'Показать неизбранные статьи',
+		'state_9' => 'Показать прочитанные неизбранные статьи',
+		'state_10' => 'Показать непрочитанные неизбранные статьи',
+		'state_11' => 'Показать неизбранные статьи',
+		'state_12' => 'Показать все статьи',
+		'state_13' => 'Показать прочитанные статьи',
+		'state_14' => 'Показать непрочитанные статьи',
+		'state_15' => 'Показать все статьи',
+		'title' => 'Пользовательские запросы',
 	),
 	'reading' => array(
-		'_' => 'Reading',	// TODO - Translation
-		'after_onread' => 'After “mark all as read”,',	// TODO - Translation
-		'always_show_favorites' => 'Show all articles in favourites by default',	// TODO - Translation
-		'articles_per_page' => 'Number of articles per page',	// TODO - Translation
-		'auto_load_more' => 'Load next articles at the page bottom',
-		'auto_remove_article' => 'Hide articles after reading',	// TODO - Translation
-		'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions',	// TODO - Translation
-		'display_articles_unfolded' => 'Show articles unfolded by default',	// TODO - Translation
-		'display_categories_unfolded' => 'Categories to unfold',	// TODO - Translation
-		'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)',
-		'img_with_lazyload' => 'Use "lazy load" mode to load pictures',	// TODO - Translation
-		'jump_next' => 'jump to next unread sibling (feed or category)',	// TODO - Translation
-		'mark_updated_article_unread' => 'Mark updated articles as unread',	// TODO - Translation
-		'number_divided_when_reader' => 'Divide by 2 in the reading view.',	// TODO - Translation
+		'_' => 'Чтение',
+		'after_onread' => 'После «отметить всё прочитанным»',
+		'always_show_favorites' => 'Показывать все статьи в избранном по умолчанию',
+		'articles_per_page' => 'Количество статей на странице',
+		'auto_load_more' => 'Загружать больше статей при достижении низа страницы',
+		'auto_remove_article' => 'Скрывать статьи по прочтении',
+		'confirm_enabled' => 'Показывать диалог подтверждения при выпыполнении действия «отметить всё прочитанным»',
+		'display_articles_unfolded' => 'Показывать статьи развёрнутыми по умолчанию',
+		'display_categories_unfolded' => 'Какие категории развёртывать',
+		'hide_read_feeds' => 'Скрывать категории и ленты без непрочитанных статей (не работает с «Показывать все статьи»)',
+		'img_with_lazyload' => 'Использовать режим "ленивой загрузки" для загрузки картинок',
+		'jump_next' => 'перейти к следующей ленте или категории',
+		'mark_updated_article_unread' => 'Отмечать обновлённые статьи непрочитанными',
+		'number_divided_when_reader' => 'Делится на 2 в виде для чтения.',
 		'read' => array(
-			'article_open_on_website' => 'when the article is opened on its original website',	// TODO - Translation
-			'article_viewed' => 'when the article is viewed',	// TODO - Translation
-			'scroll' => 'while scrolling',	// TODO - Translation
-			'upon_reception' => 'upon reception of the article',
-			'when' => 'Mark an article as read…',	// TODO - Translation
+			'article_open_on_website' => 'когда статья открывается на её сайте',
+			'article_viewed' => 'когда статья просматривается',
+			'scroll' => 'во время прокрутки',
+			'upon_reception' => 'по получении статьи',
+			'when' => 'Отмечать статью прочитанной…',
 		),
 		'show' => array(
-			'_' => 'Articles to display',	// TODO - Translation
-			'active_category' => 'Active category',	// TODO - Translation
-			'adaptive' => 'Adjust showing',	// TODO - Translation
-			'all_articles' => 'Show all articles',	// TODO - Translation
-			'all_categories' => 'All categories',	// TODO - Translation
-			'no_category' => 'No category',	// TODO - Translation
-			'remember_categories' => 'Remember open categories',	// TODO - Translation
-			'unread' => 'Show only unread',	// TODO - Translation
+			'_' => 'Какие статьи отображать',
+			'active_category' => 'Активная категория',
+			'adaptive' => 'Адаптивно',
+			'all_articles' => 'Показывать все статьи',
+			'all_categories' => 'Все категории',
+			'no_category' => 'Никаких категорий',
+			'remember_categories' => 'Запоминать открытые категории',
+			'unread' => 'Только непрочитанные',
 		),
-		'show_fav_unread_help' => 'Applies also on labels',	// TODO - Translation
-		'sides_close_article' => 'Clicking outside of article text area closes the article',	// TODO - Translation
+		'show_fav_unread_help' => 'Также относится к меткам',
+		'sides_close_article' => 'Нажатия мышью за пределами текста статьи закрывают статью',
 		'sort' => array(
-			'_' => 'Sort order',	// TODO - Translation
-			'newer_first' => 'Newer first',
-			'older_first' => 'Oldest first',	// TODO - Translation
+			'_' => 'Порядок сортировки',
+			'newer_first' => 'Сначала новые',
+			'older_first' => 'Сначала старые',
 		),
-		'sticky_post' => 'Stick the article to the top when opened',	// TODO - Translation
-		'title' => 'Reading',	// TODO - Translation
+		'sticky_post' => 'Прикрепить статью к верху при открытии',
+		'title' => 'Чтение',
 		'view' => array(
-			'default' => 'Default view',	// TODO - Translation
-			'global' => 'Global view',	// TODO - Translation
-			'normal' => 'Normal view',	// TODO - Translation
-			'reader' => 'Reading view',	// TODO - Translation
+			'default' => 'Вид по умолчанию',
+			'global' => 'Глобальный вид',
+			'normal' => 'Обычный вид',
+			'reader' => 'Вид для чтения',
 		),
 	),
 	'sharing' => array(
-		'_' => 'Sharing',	// TODO - Translation
-		'add' => 'Add a sharing method',	// TODO - Translation
+		'_' => 'Поделиться',
+		'add' => 'Добавить способ поделиться',
 		'blogotext' => 'Blogotext',	// TODO - Translation
 		'diaspora' => 'Diaspora*',	// TODO - Translation
-		'email' => 'Email',	// TODO - Translation
+		'email' => 'Электронная почта',
 		'facebook' => 'Facebook',	// TODO - Translation
-		'more_information' => 'More information',	// TODO - Translation
-		'print' => 'Print',	// TODO - Translation
-		'remove' => 'Remove sharing method',	// TODO - Translation
+		'more_information' => 'Больше информации',
+		'print' => 'Распечатать',
+		'remove' => 'Удалить способ поделиться',
 		'shaarli' => 'Shaarli',	// TODO - Translation
-		'share_name' => 'Share name to display',	// TODO - Translation
-		'share_url' => 'Share URL to use',	// TODO - Translation
+		'share_name' => 'Отображаемое имя',
+		'share_url' => 'Используемый URL',
 		'title' => 'Sharing',	// TODO - Translation
 		'twitter' => 'Twitter',	// TODO - Translation
 		'wallabag' => 'wallabag',	// TODO - Translation
 	),
 	'shortcut' => array(
-		'_' => 'Shortcuts',	// TODO - Translation
-		'article_action' => 'Article actions',	// TODO - Translation
-		'auto_share' => 'Share',	// TODO - Translation
-		'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.',
-		'close_dropdown' => 'Close menus',	// TODO - Translation
-		'collapse_article' => 'Collapse',	// TODO - Translation
-		'first_article' => 'Skip to the first article',
-		'focus_search' => 'Access search box',	// TODO - Translation
-		'global_view' => 'Switch to global view',	// TODO - Translation
-		'help' => 'Display documentation',	// TODO - Translation
-		'javascript' => 'JavaScript must be enabled in order to use shortcuts',	// TODO - Translation
-		'last_article' => 'Skip to the last article',
-		'load_more' => 'Load more articles',	// TODO - Translation
-		'mark_favorite' => 'Mark as favourite',
-		'mark_read' => 'Mark as read',
-		'navigation' => 'Navigation',	// TODO - Translation
-		'navigation_help' => 'With the <kbd>⇧ Shift</kbd> modifier, navigation shortcuts apply on feeds.<br/>With the <kbd>Alt ⎇</kbd> modifier, navigation shortcuts apply on categories.',	// TODO - Translation
-		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
-		'next_article' => 'Skip to the next article',
-		'non_standard' => 'Some keys (<kbd>%s</kbd>) may not work as shortcuts.',	// TODO - Translation
-		'normal_view' => 'Switch to normal view',	// TODO - Translation
-		'other_action' => 'Other actions',	// TODO - Translation
-		'previous_article' => 'Skip to the previous article',
-		'reading_view' => 'Switch to reading view',	// TODO - Translation
-		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
-		'see_on_website' => 'See on original website',	// TODO - Translation
-		'shift_for_all_read' => '+ <kbd>Alt ⎇</kbd> to mark previous articles as read<br />+ <kbd>⇧ Shift</kbd> to mark all articles as read',	// TODO - Translation
-		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
-		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
-		'title' => 'Shortcuts',	// TODO - Translation
-		'toggle_media' => 'Play/pause media',	// TODO - Translation
-		'user_filter' => 'Access user filters',
-		'user_filter_help' => 'If there is only one user filter, it is used. Else filters are accessible by their number.',
-		'views' => 'Views',	// TODO - Translation
+		'_' => 'Горячие клавиши',
+		'article_action' => 'Действия со статьями',
+		'auto_share' => 'Поделиться',
+		'auto_share_help' => 'Если способ единственный, он будет вызван. Иначе способы доступны по их номеру.',
+		'close_dropdown' => 'Закрыть меню',
+		'collapse_article' => 'Схлопнуть',
+		'first_article' => 'Открыть первую статью',
+		'focus_search' => 'К строке поиска',
+		'global_view' => 'Переключиться на глобальный вид',
+		'help' => 'Показать документацию',
+		'javascript' => 'JavaScript должен быть включён для использования горячих клавиш',
+		'last_article' => 'Открыть последнюю статью',
+		'load_more' => 'Загрузить больше статей',
+		'mark_favorite' => 'Отметить избранной',
+		'mark_read' => 'Отметить прочитанной',
+		'navigation' => 'Навигация',
+		'navigation_help' => 'С модификатором <kbd>⇧ Shift</kbd> навигационные горячие клавиши применяются к лентам.<br/>С модификатором <kbd>Alt ⎇</kbd> навигационные горячие клавиши применяются к категориям.',
+		'navigation_no_mod_help' => 'Следующие навигационные горячие клавиши не поддерживают модификаторы.',
+		'next_article' => 'Открыть следующую статью',
+		'non_standard' => 'Некоторые клавиши (<kbd>%s</kbd>) не могут быть использованы как горячие клавиши.',
+		'normal_view' => 'Переключиться на обычный вид',
+		'other_action' => 'Другие действия',
+		'previous_article' => 'Открыть предыдущую статью',
+		'reading_view' => 'Переключиться на вид для чтения',
+		'rss_view' => 'Открыть вид RSS в новой вкладке',
+		'see_on_website' => 'Посмотреть на сайте',
+		'shift_for_all_read' => '+ <kbd>Alt ⎇</kbd>, чтобы отметить предыдущие статьи прочитанными<br />+ <kbd>⇧ Shift</kbd>, чтобы отметить все статьи прочитанными',
+		'skip_next_article' => 'Перейти к следующей, не раскрывая',
+		'skip_previous_article' => 'Перейти к предыдущей, не раскрывая',
+		'title' => 'Горячие клавиши',
+		'toggle_media' => 'Играть/приостановить медиаконтент',
+		'user_filter' => 'К пользовательским запросам',
+		'user_filter_help' => 'Если запрос единственный, он будет вызван. Иначе запросы доступны по их номеру.',
+		'views' => 'Виды',
 	),
 	'user' => array(
-		'articles_and_size' => '%s articles (%s)',	// TODO - Translation
-		'current' => 'Current user',	// TODO - Translation
-		'is_admin' => 'is administrator',	// TODO - Translation
-		'users' => 'Users',	// TODO - Translation
+		'articles_and_size' => '%s статей (%s)',
+		'current' => 'Текущий пользователь',
+		'is_admin' => 'является администратором',
+		'users' => 'Пользователи',
 	),
 );

+ 85 - 85
app/i18n/ru/feedback.php

@@ -2,138 +2,138 @@
 
 return array(
 	'access' => array(
-		'denied' => 'You don’t have permission to access this page',	// TODO - Translation
-		'not_found' => 'You are looking for a page that doesn’t exist',	// TODO - Translation
+		'denied' => 'У вас нет разрешения на доступ к этой странице',
+		'not_found' => 'Данной страницы не существует',
 	),
 	'admin' => array(
-		'optimization_complete' => 'Optimisation complete',
+		'optimization_complete' => 'Оптимизация завершена',
 	),
 	'api' => array(
 		'password' => array(
-			'failed' => 'Your password cannot be modified',	// TODO - Translation
-			'updated' => 'Your password has been modified',	// TODO - Translation
+			'failed' => 'Ваш пароль не может быть изменён',
+			'updated' => 'Ваш пароль изменён',
 		),
 	),
 	'auth' => array(
 		'form' => array(
-			'not_set' => 'A problem occurred during authentication system configuration. Please try again later.',	// TODO - Translation
-			'set' => 'Form is now your default authentication system.',	// TODO - Translation
+			'not_set' => 'Во время конфигурации системы аутентификации возникла проблема. Пожалуйста, попробуйте позже.',
+			'set' => 'Форма теперь является вашей системой аутентификации по умолчанию.',
 		),
 		'login' => array(
-			'invalid' => 'Login is invalid',	// TODO - Translation
-			'success' => 'You are connected',	// TODO - Translation
+			'invalid' => 'Неверный логин',
+			'success' => 'Вы вошли',
 		),
 		'logout' => array(
-			'success' => 'You are disconnected',	// TODO - Translation
+			'success' => 'Вы вышли',
 		),
-		'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.',	// TODO - Translation
+		'no_password_set' => 'Не установлен пароль администратора. Эта функция недоступна.',
 	),
 	'conf' => array(
-		'error' => 'An error occurred while saving configuration',	// TODO - Translation
-		'query_created' => 'Query "%s" has been created.',	// TODO - Translation
-		'shortcuts_updated' => 'Shortcuts have been updated',	// TODO - Translation
-		'updated' => 'Configuration has been updated',	// TODO - Translation
+		'error' => 'Во время сохранения конфигурации возникла ошибка',
+		'query_created' => 'Запрос "%s" создан.',
+		'shortcuts_updated' => 'Горячие клавиши изменены',
+		'updated' => 'Конфигурация изменена',
 	),
 	'extensions' => array(
-		'already_enabled' => '%s is already enabled',	// TODO - Translation
-		'cannot_remove' => '%s cannot be removed',	// TODO - Translation
+		'already_enabled' => '%s уже включено',
+		'cannot_remove' => '%s не может быть удалено',
 		'disable' => array(
-			'ko' => '%s cannot be disabled. <a href="%s">Check FreshRSS logs</a> for details.',	// TODO - Translation
-			'ok' => '%s is now disabled',	// TODO - Translation
+			'ko' => '%s не может быть отключено. <a href="%s">Проверьте логи FreshRSS</a> для подробностей.',
+			'ok' => '%s теперь отключено',
 		),
 		'enable' => array(
-			'ko' => '%s cannot be enabled. <a href="%s">Check FreshRSS logs</a> for details.',	// TODO - Translation
-			'ok' => '%s is now enabled',	// TODO - Translation
+			'ko' => '%s не может быть включено. <a href="%s">Проверьте логи FreshRSS</a> для подробностей.',
+			'ok' => '%s теперь включено',
 		),
-		'no_access' => 'You have no access on %s',	// TODO - Translation
-		'not_enabled' => '%s is not enabled yet',
-		'not_found' => '%s does not exist',	// TODO - Translation
-		'removed' => '%s removed',	// TODO - Translation
+		'no_access' => 'У вас нет доступа к %s',
+		'not_enabled' => '%s не включено',
+		'not_found' => '%s не существует',
+		'removed' => '%s удалено',
 	),
 	'import_export' => array(
-		'export_no_zip_extension' => 'The ZIP extension is not present on your server. Please try to export files one by one.',	// TODO - Translation
-		'feeds_imported' => 'Your feeds have been imported and will now be updated',	// TODO - Translation
-		'feeds_imported_with_errors' => 'Your feeds have been imported but some errors occurred',
-		'file_cannot_be_uploaded' => 'File cannot be uploaded!',	// TODO - Translation
-		'no_zip_extension' => 'The ZIP extension is not present on your server.',	// TODO - Translation
-		'zip_error' => 'An error occurred during ZIP import.',	// TODO - Translation
+		'export_no_zip_extension' => 'На вашем сервере нет расширения ZIP. Пожалуйста, попробуйте экспортировать файлы один за другим.',
+		'feeds_imported' => 'Ваши ленты импортированы и теперь будут обновлены',
+		'feeds_imported_with_errors' => 'Ваши ленты импортированы, но возникли ошибки',
+		'file_cannot_be_uploaded' => 'Файл не может быть загружен!',
+		'no_zip_extension' => 'На вашем сервере нет расширения ZIP.',
+		'zip_error' => 'Ошибка возникла при импорте ZIP.',
 	),
 	'profile' => array(
-		'error' => 'Your profile cannot be modified',	// TODO - Translation
-		'updated' => 'Your profile has been modified',	// TODO - Translation
+		'error' => 'Ваш профиль не может быть изменён',
+		'updated' => 'Ваш профиль изменён',
 	),
 	'sub' => array(
-		'actualize' => 'Actualise',
+		'actualize' => 'Актуализируется',
 		'articles' => array(
-			'marked_read' => 'The selected articles have been marked as read.',	// TODO - Translation
-			'marked_unread' => 'The articles have been marked as unread.',	// TODO - Translation
+			'marked_read' => 'Выбранные статьи отмечены прочитанными.',
+			'marked_unread' => 'Статьи отмечены непрочитанными.',
 		),
 		'category' => array(
-			'created' => 'Category %s has been created.',	// TODO - Translation
-			'deleted' => 'Category has been deleted.',	// TODO - Translation
-			'emptied' => 'Category has been emptied',	// TODO - Translation
-			'error' => 'Category cannot be updated',	// TODO - Translation
-			'name_exists' => 'Category name already exists.',	// TODO - Translation
-			'no_id' => 'You must precise the id of the category.',
-			'no_name' => 'Category name cannot be empty.',	// TODO - Translation
-			'not_delete_default' => 'You cannot delete the default category!',	// TODO - Translation
-			'not_exist' => 'The category does not exist!',	// TODO - Translation
-			'over_max' => 'You have reached your limit of categories (%d)',	// TODO - Translation
-			'updated' => 'Category has been updated.',	// TODO - Translation
+			'created' => 'Категория %s создана.',
+			'deleted' => 'Категория удалена.',
+			'emptied' => 'Категория очищена',
+			'error' => 'Категория не может быть изменена',
+			'name_exists' => 'Категория с таким названием уже существует.',
+			'no_id' => 'Вы должны задать id категории.',
+			'no_name' => 'Название категории не может быть пустым.',
+			'not_delete_default' => 'Вы не можете удалить стандартную категорию!',
+			'not_exist' => 'Категории не существует!',
+			'over_max' => 'Вы достигли вашего лимита категорий (%d)',
+			'updated' => 'Категория изменена.',
 		),
 		'feed' => array(
-			'actualized' => '<em>%s</em> has been updated',	// TODO - Translation
-			'actualizeds' => 'RSS feeds have been updated',	// TODO - Translation
-			'added' => 'RSS feed <em>%s</em> has been added',	// TODO - Translation
-			'already_subscribed' => 'You have already subscribed to <em>%s</em>',	// TODO - Translation
-			'cache_cleared' => '<em>%s</em> cache has been cleared',	// TODO - Translation
-			'deleted' => 'Feed has been deleted',	// TODO - Translation
-			'error' => 'Feed cannot be updated',	// TODO - Translation
-			'internal_problem' => 'The newsfeed could not be added. <a href="%s">Check FreshRSS logs</a> for details. You can try force adding by appending <code>#force_feed</code> to the URL.',	// TODO - Translation
-			'invalid_url' => 'URL <em>%s</em> is invalid',	// TODO - Translation
-			'n_actualized' => '%d feeds have been updated',	// TODO - Translation
-			'n_entries_deleted' => '%d articles have been deleted',	// TODO - Translation
-			'no_refresh' => 'There are no feeds to refresh',	// TODO - Translation
-			'not_added' => '<em>%s</em> could not be added',	// TODO - Translation
-			'not_found' => 'Feed cannot be found',	// TODO - Translation
-			'over_max' => 'You have reached your limit of feeds (%d)',	// TODO - Translation
-			'reloaded' => '<em>%s</em> has been reloaded',	// TODO - Translation
+			'actualized' => '<em>%s</em> актуализирована',
+			'actualizeds' => 'RSS-ленты актуализированы',
+			'added' => 'RSS-лента <em>%s</em> добавлена',
+			'already_subscribed' => 'Вы уже подписаны на <em>%s</em>',
+			'cache_cleared' => 'Кэш <em>%s</em> очищен',
+			'deleted' => 'Лента удалена',
+			'error' => 'Лента не может быть изменена',
+			'internal_problem' => 'Новостная лента не может быть добавлена. <a href="%s">Проверьте логи FreshRSS</a> для подробностей. Вы можете попробовать принудительно добавить ленту, добавив <code>#force_feed</code> к URL.',
+			'invalid_url' => 'URL <em>%s</em> неверный',
+			'n_actualized' => '%d лент актуализировано',
+			'n_entries_deleted' => '%d лент удалено',
+			'no_refresh' => 'Нечего актуализировать',
+			'not_added' => '<em>%s</em> не может быть добавлена',
+			'not_found' => 'Лента не найдена',
+			'over_max' => 'Вы достигли ограничения на количество лент (%d)',
+			'reloaded' => '<em>%s</em> перезагружена',
 			'selector_preview' => array(
-				'http_error' => 'Failed to load website content.',	// TODO - Translation
-				'no_entries' => 'There are no articles in this feed. You need at least one article to create a preview.',	// TODO - Translation
-				'no_feed' => 'Internal error (feed cannot be found).',	// TODO - Translation
-				'no_result' => 'The selector didn\'t match anything. As a fallback the original feed text will be displayed instead.',	// TODO - Translation
-				'selector_empty' => 'The selector is empty. You need to define one to create a preview.',	// TODO - Translation
+				'http_error' => 'Не удалось загрузить содержимое сайта.',
+				'no_entries' => 'В этой ленте нет статей. Требуется хотя бы одна статья, чтобы создать предпросмотр.',
+				'no_feed' => 'Внутренняя ошибка (лента не найдена).',
+				'no_result' => 'Нет совпадений с селектором. В качестве запасного варианта, вместо этого отображается оригинальный текст ленты.',
+				'selector_empty' => 'Селектор пуст. Необходимо задать селектор, чтобы создать предпросмотр.',
 			),
-			'updated' => 'Feed has been updated',	// TODO - Translation
+			'updated' => 'Лента изменена',
 		),
-		'purge_completed' => 'Purge completed (%d articles deleted)',	// TODO - Translation
+		'purge_completed' => 'Очистка выполнена (%d статей удалено)',
 	),
 	'tag' => array(
-		'created' => 'Tag "%s" has been created.',	// TODO - Translation
-		'name_exists' => 'Tag name already exists.',	// TODO - Translation
-		'renamed' => 'Tag "%s" has been renamed to "%s".',	// TODO - Translation
+		'created' => 'Метка "%s" создана.',
+		'name_exists' => 'Метка с таким названием уже существует.',
+		'renamed' => 'Метка "%s" переименована в "%s".',
 	),
 	'update' => array(
-		'can_apply' => 'FreshRSS will now be updated to the <strong>version %s</strong>.',	// TODO - Translation
-		'error' => 'The update process has encountered an error: %s',	// TODO - Translation
-		'file_is_nok' => 'New <strong>version %s</strong> available, but check permissions on <em>%s</em> directory. HTTP server must have have write permission',	// TODO - Translation
-		'finished' => 'Update complete!',	// TODO - Translation
-		'none' => 'No update to apply',	// TODO - Translation
-		'server_not_found' => 'Update server cannot be found. [%s]',	// TODO - Translation
+		'can_apply' => 'FreshRSS будет обновлён до <strong>версии %s</strong>.',
+		'error' => 'Процесс обновления столкнулся с ошибкой: %s',
+		'file_is_nok' => 'Новая <strong>версия %s</strong> доступна, но проверьте права к директории <em>%s</em>. У веб-сервера должно быть право на запись',
+		'finished' => 'Обновление завершено!',
+		'none' => 'Нет обновлений',
+		'server_not_found' => 'Сервер обновлений не найден. [%s]',
 	),
 	'user' => array(
 		'created' => array(
-			'_' => 'User %s has been created',	// TODO - Translation
-			'error' => 'User %s cannot be created',	// TODO - Translation
+			'_' => 'Пользователь %s создан',
+			'error' => 'Пользователь %s не может быть создан',
 		),
 		'deleted' => array(
-			'_' => 'User %s has been deleted',	// TODO - Translation
-			'error' => 'User %s cannot be deleted',	// TODO - Translation
+			'_' => 'Пользователь %s удалён',
+			'error' => 'Пользователь %s не может быть удалён',
 		),
 		'updated' => array(
-			'_' => 'User %s has been updated',	// TODO - Translation
-			'error' => 'User %s has not been updated',	// TODO - Translation
+			'_' => 'Пользователь %s изменён',
+			'error' => 'Пользователь %s не был изменён',
 		),
 	),
 );

+ 150 - 150
app/i18n/ru/gen.php

@@ -2,129 +2,129 @@
 
 return array(
 	'action' => array(
-		'actualize' => 'Update',	// TODO - Translation
-		'add' => 'Add',	// TODO - Translation
-		'back' => '← Go back',	// TODO - Translation
-		'back_to_rss_feeds' => '← Go back to your RSS feeds',	// TODO - Translation
-		'cancel' => 'Cancel',	// TODO - Translation
-		'create' => 'Create',	// TODO - Translation
-		'demote' => 'Demote',	// TODO - Translation
-		'disable' => 'Disable',	// TODO - Translation
-		'empty' => 'Empty',	// TODO - Translation
-		'enable' => 'Enable',	// TODO - Translation
-		'export' => 'Export',	// TODO - Translation
-		'filter' => 'Filter',	// TODO - Translation
-		'import' => 'Import',	// TODO - Translation
-		'load_default_shortcuts' => 'Load default shortcuts',	// TODO - Translation
-		'manage' => 'Manage',	// TODO - Translation
-		'mark_favorite' => 'Mark as favourite',	// TODO - Translation
-		'mark_read' => 'Mark as read',	// TODO - Translation
-		'promote' => 'Promote',	// TODO - Translation
-		'purge' => 'Purge',	// TODO - Translation
-		'remove' => 'Remove',	// TODO - Translation
-		'rename' => 'Rename',	// TODO - Translation
-		'see_website' => 'See website',	// TODO - Translation
-		'submit' => 'Submit',	// TODO - Translation
-		'truncate' => 'Delete all articles',	// TODO - Translation
-		'update' => 'Update',	// TODO - Translation
+		'actualize' => 'Актуализировать',
+		'add' => 'Добавить',
+		'back' => '← Вернуться',
+		'back_to_rss_feeds' => '← Вернуться к вашим RSS-лентам',
+		'cancel' => 'Отменить',
+		'create' => 'Создать',
+		'demote' => 'Понизить',
+		'disable' => 'Отключить',
+		'empty' => 'Пусто',
+		'enable' => 'Включить',
+		'export' => 'Экспортировать',
+		'filter' => 'Фильтровать',
+		'import' => 'Импортировать',
+		'load_default_shortcuts' => 'Загрузить горячие клавиши по умолчанию',
+		'manage' => 'Настроить',
+		'mark_favorite' => 'Отметить избранным',
+		'mark_read' => 'Отметить прочитанным',
+		'promote' => 'Продвинуть',
+		'purge' => 'Запустить очистку',
+		'remove' => 'Удалить',
+		'rename' => 'Переименовать',
+		'see_website' => 'Посмотреть на сайте',
+		'submit' => 'Отправить',
+		'truncate' => 'Удалить все статьи',
+		'update' => 'Изменить',
 	),
 	'auth' => array(
-		'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.',	// TODO - Translation
-		'email' => 'Email address',	// TODO - Translation
-		'keep_logged_in' => 'Keep me logged in <small>(%s дней)</small>',
-		'login' => 'Login',	// TODO - Translation
-		'logout' => 'Logout',	// TODO - Translation
+		'accept_tos' => 'Я принимаю <a href="%s">Условия предоставления услуг</a>.',
+		'email' => 'Адрес электронной почты',
+		'keep_logged_in' => 'Не выходить из системы <small>(%s дней)</small>',
+		'login' => 'Войти',
+		'logout' => 'Выйти',
 		'password' => array(
-			'_' => 'Password',	// TODO - Translation
-			'format' => '<small>At least 7 characters</small>',	// TODO - Translation
+			'_' => 'Пароль',
+			'format' => '<small>Не менее 7 символов</small>',
 		),
 		'registration' => array(
-			'_' => 'New account',	// TODO - Translation
-			'ask' => 'Create an account?',	// TODO - Translation
-			'title' => 'Account creation',	// TODO - Translation
+			'_' => 'Новый аккаунт',
+			'ask' => 'Создать аккаунт?',
+			'title' => 'Создание аккаунта',
 		),
-		'reset' => 'Authentication reset',	// TODO - Translation
+		'reset' => 'Сброс аутентификации',
 		'username' => array(
-			'_' => 'Username',	// TODO - Translation
-			'admin' => 'Administrator username',	// TODO - Translation
-			'format' => '<small>Maximum 16 alphanumeric characters</small>',	// TODO - Translation
+			'_' => 'Имя пользователя',
+			'admin' => 'Имя пользователя администратора',
+			'format' => '<small>Не более 16 буквенно-цифровых символов</small>',
 		),
 	),
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\i\\l',	// TODO - Translation
-		'Aug' => '\\A\\u\\g\\u\\s\\t',	// TODO - Translation
-		'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r',	// TODO - Translation
-		'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y',	// TODO - Translation
-		'Jan' => '\\J\\a\\n\\u\\a\\r\\y',	// TODO - Translation
-		'Jul' => '\\J\\u\\l\\y',	// TODO - Translation
-		'Jun' => '\\J\\u\\n\\e',	// TODO - Translation
-		'Mar' => '\\M\\a\\r\\c\\h',	// TODO - Translation
-		'May' => '\\M\\a\\y',	// TODO - Translation
-		'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r',	// TODO - Translation
-		'Oct' => '\\O\\c\\t\\o\\b\\e\\r',	// TODO - Translation
-		'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r',	// TODO - Translation
-		'apr' => 'apr',
-		'april' => 'Apr',
-		'aug' => 'aug',
-		'august' => 'Aug',
-		'before_yesterday' => 'Before yesterday',	// TODO - Translation
-		'dec' => 'dec',
-		'december' => 'Dec',
-		'feb' => 'feb',
-		'february' => 'Feb',
+		'Apr' => '\\а\\п\\р\\е\\л\\я',
+		'Aug' => '\\а\\в\\г\\у\\с\\т\\а',
+		'Dec' => '\\д\\е\\к\\а\\б\\р\\я',
+		'Feb' => '\\ф\\е\\в\\р\\а\\л\\я',
+		'Jan' => '\\я\\н\\в\\а\\р\\я\\y',
+		'Jul' => '\\и\\ю\\л\\я',
+		'Jun' => '\\и\\ю\\н\\я',
+		'Mar' => '\\м\\а\\р\\т\\а',
+		'May' => '\\м\\а\\я',
+		'Nov' => '\\н\\о\\я\\б\\р\\я',
+		'Oct' => '\\о\\к\\т\\я\\б\\р\\я',
+		'Sep' => '\\с\\е\\н\\т\\я\\б\\р\\я',
+		'apr' => 'апр',
+		'april' => 'апреля',
+		'aug' => 'авг',
+		'august' => 'августа',
+		'before_yesterday' => 'До вчерашнего дня',
+		'dec' => 'дек',
+		'december' => 'декабря',
+		'feb' => 'фев',
+		'february' => 'февраля',
 		'format_date' => 'j %s Y',
-		'format_date_hour' => 'j %s Y \\a\\t H\\:i',
-		'fri' => 'Fri',	// TODO - Translation
-		'jan' => 'jan',
-		'january' => 'Jan',
-		'jul' => 'jul',
-		'july' => 'Jul',
-		'jun' => 'jun',
-		'june' => 'Jun',
-		'last_2_year' => 'Last two years',	// TODO - Translation
-		'last_3_month' => 'Last three months',	// TODO - Translation
-		'last_3_year' => 'Last three years',	// TODO - Translation
-		'last_5_year' => 'Last five years',	// TODO - Translation
-		'last_6_month' => 'Last six months',	// TODO - Translation
-		'last_month' => 'Last month',	// TODO - Translation
-		'last_week' => 'Last week',	// TODO - Translation
-		'last_year' => 'Last year',	// TODO - Translation
-		'mar' => 'mar',
-		'march' => 'Mar',
-		'may' => 'May',	// TODO - Translation
-		'may_' => 'May',	// TODO - Translation
-		'mon' => 'Mon',	// TODO - Translation
-		'month' => 'months',	// TODO - Translation
-		'nov' => 'nov',
-		'november' => 'Nov',
-		'oct' => 'oct',
-		'october' => 'Oct',
-		'sat' => 'Sat',	// TODO - Translation
-		'sep' => 'sep',
-		'september' => 'Sep',
-		'sun' => 'Sun',	// TODO - Translation
-		'thu' => 'Thu',	// TODO - Translation
-		'today' => 'Today',	// TODO - Translation
-		'tue' => 'Tue',	// TODO - Translation
-		'wed' => 'Wed',	// TODO - Translation
-		'yesterday' => 'Yesterday',	// TODO - Translation
+		'format_date_hour' => 'j %s Y \\в H\\:i',
+		'fri' => 'Пт',
+		'jan' => 'янв',
+		'january' => 'января',
+		'jul' => 'июл',
+		'july' => 'июля',
+		'jun' => 'июн',
+		'june' => 'июня',
+		'last_2_year' => 'Последние два года',
+		'last_3_month' => 'Последние три месяца',
+		'last_3_year' => 'Последние три года',
+		'last_5_year' => 'Последние пять лет',
+		'last_6_month' => 'Последние шесть месяцев',
+		'last_month' => 'Последний месяц',
+		'last_week' => 'Последняя неделя',
+		'last_year' => 'Последний год',
+		'mar' => 'мар',
+		'march' => 'марта',
+		'may' => 'май',
+		'may_' => 'мая',
+		'mon' => 'Пн',
+		'month' => 'месяцы',
+		'nov' => 'ноя',
+		'november' => 'ноября',
+		'oct' => 'окт',
+		'october' => 'октября',
+		'sat' => 'Сб',
+		'sep' => 'сен',
+		'september' => 'сентября',
+		'sun' => 'Вс',
+		'thu' => 'Чт',
+		'today' => 'Сегодня',
+		'tue' => 'Вт',
+		'wed' => 'Ср',
+		'yesterday' => 'Вчера',
 	),
 	'dir' => 'ltr',
 	'freshrss' => array(
 		'_' => 'FreshRSS',	// TODO - Translation
-		'about' => 'About FreshRSS',	// TODO - Translation
+		'about' => 'О FreshRSS',
 	),
 	'js' => array(
-		'category_empty' => 'Empty category',	// TODO - Translation
-		'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!',	// TODO - Translation
-		'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!',
+		'category_empty' => 'Пустая категория',
+		'confirm_action' => 'Вы уверены, что хотите выполнить это действие? Это нельзя отменить!',
+		'confirm_action_feed_cat' => 'Вы уверены, что хотите выполнить это действие? Вы потеряете связанные избранные статьи и пользовательские запросы. Это нельзя отменить!',
 		'feedback' => array(
-			'body_new_articles' => 'There are %%d new articles to read on FreshRSS.',	// TODO - Translation
-			'request_failed' => 'A request has failed, it may have been caused by internet connection problems.',	// TODO - Translation
-			'title_new_articles' => 'FreshRSS: new articles!',	// TODO - Translation
+			'body_new_articles' => '%%d новых статей в FreshRSS.',
+			'request_failed' => 'Запрос не удался. Возможно, это вызвано проблемами с подключением к Интернет.',
+			'title_new_articles' => 'FreshRSS: новые статьи!',
 		),
-		'new_article' => 'There are new articles available, click to refresh the page.',	// TODO - Translation
-		'should_be_activated' => 'JavaScript must be enabled',	// TODO - Translation
+		'new_article' => 'Появились новые статьи. Нажмите, чтобы обновить страницу.',
+		'should_be_activated' => 'JavaScript должен быть включён',
 	),
 	'lang' => array(
 		'cz' => 'Čeština',
@@ -146,48 +146,48 @@ return array(
 		'zh-cn' => '简体中文',
 	),
 	'menu' => array(
-		'about' => 'About',	// TODO - Translation
-		'admin' => 'Administration',	// TODO - Translation
-		'archiving' => 'Archiving',	// TODO - Translation
-		'authentication' => 'Authentication',	// TODO - Translation
-		'check_install' => 'Installation check',	// TODO - Translation
-		'configuration' => 'Configuration',	// TODO - Translation
-		'display' => 'Display',	// TODO - Translation
-		'extensions' => 'Extensions',	// TODO - Translation
-		'logs' => 'Logs',	// TODO - Translation
-		'queries' => 'User queries',	// TODO - Translation
-		'reading' => 'Reading',	// TODO - Translation
-		'search' => 'Search words or #tags',	// TODO - Translation
-		'sharing' => 'Sharing',	// TODO - Translation
-		'shortcuts' => 'Shortcuts',	// TODO - Translation
-		'stats' => 'Statistics',	// TODO - Translation
-		'system' => 'System configuration',	// TODO - Translation
-		'update' => 'Update',	// TODO - Translation
-		'user_management' => 'Manage users',	// TODO - Translation
-		'user_profile' => 'Profile',	// TODO - Translation
+		'about' => 'О проекте',
+		'admin' => 'Администрирование',
+		'archiving' => 'Архивирование',
+		'authentication' => 'Аутентификация',
+		'check_install' => 'Проверка установки',
+		'configuration' => 'Конфигурация',
+		'display' => 'Отображение',
+		'extensions' => 'Расширения',
+		'logs' => 'Логи',
+		'queries' => 'Пользовательские запросы',
+		'reading' => 'Чтение',
+		'search' => 'Искать слова или #теги',
+		'sharing' => 'Поделиться',
+		'shortcuts' => 'Горячие клавиши',
+		'stats' => 'Статистика',
+		'system' => 'Системные настройки',
+		'update' => 'Обновление системы',
+		'user_management' => 'Управление пользователями',
+		'user_profile' => 'Профиль',
 	),
 	'pagination' => array(
-		'first' => 'First',	// TODO - Translation
-		'last' => 'Last',	// TODO - Translation
-		'load_more' => 'Load more articles',	// TODO - Translation
-		'mark_all_read' => 'Mark all as read',	// TODO - Translation
-		'next' => 'Next',	// TODO - Translation
-		'nothing_to_load' => 'There are no more articles',	// TODO - Translation
-		'previous' => 'Previous',	// TODO - Translation
+		'first' => 'Первая',
+		'last' => 'Последняя',
+		'load_more' => 'Загрузить больше статей',
+		'mark_all_read' => 'Отметить всё прочитанным',
+		'next' => 'Следующая',
+		'nothing_to_load' => 'Больше нет статей',
+		'previous' => 'Предыдущая',
 	),
 	'period' => array(
-		'days' => 'days',	// TODO - Translation
-		'hours' => 'hours',	// TODO - Translation
-		'months' => 'months',	// TODO - Translation
-		'weeks' => 'weeks',	// TODO - Translation
-		'years' => 'years',	// TODO - Translation
+		'days' => 'дней',
+		'hours' => 'часов',
+		'months' => 'месяцев',
+		'weeks' => 'недель',
+		'years' => 'лет',
 	),
 	'share' => array(
-		'Known' => 'Known based sites',	// TODO - Translation
+		'Known' => 'Сайты на Known',
 		'blogotext' => 'Blogotext',	// TODO - Translation
-		'clipboard' => 'Clipboard',	// TODO - Translation
+		'clipboard' => 'Буфер обмена',
 		'diaspora' => 'Diaspora*',	// TODO - Translation
-		'email' => 'Email',	// TODO - Translation
+		'email' => 'Электронная почта',
 		'facebook' => 'Facebook',	// TODO - Translation
 		'gnusocial' => 'GNU social',	// TODO - Translation
 		'jdh' => 'Journal du hacker',	// TODO - Translation
@@ -197,23 +197,23 @@ return array(
 		'movim' => 'Movim',	// TODO - Translation
 		'pinboard' => 'Pinboard',	// TODO - Translation
 		'pocket' => 'Pocket',	// TODO - Translation
-		'print' => 'Print',	// TODO - Translation
+		'print' => 'Распечатать',
 		'shaarli' => 'Shaarli',	// TODO - Translation
 		'twitter' => 'Twitter',	// TODO - Translation
 		'wallabag' => 'wallabag v1',	// TODO - Translation
 		'wallabagv2' => 'wallabag v2',	// TODO - Translation
 	),
 	'short' => array(
-		'attention' => 'Warning!',	// TODO - Translation
-		'blank_to_disable' => 'Leave blank to disable',	// TODO - Translation
-		'by_author' => 'By:',	// TODO - Translation
-		'by_default' => 'By default',	// TODO - Translation
-		'damn' => 'Damn!',
-		'default_category' => 'Uncategorized',	// TODO - Translation
-		'no' => 'No',	// TODO - Translation
-		'not_applicable' => 'Not available',	// TODO - Translation
-		'ok' => 'Okay!',	// TODO - Translation
-		'or' => 'or',	// TODO - Translation
-		'yes' => 'Yes',	// TODO - Translation
+		'attention' => 'Предупреждение!',
+		'blank_to_disable' => 'Оставьте поле пустым, чтобы отключить',
+		'by_author' => 'От:',
+		'by_default' => 'По умолчанию',
+		'damn' => 'О нет!',
+		'default_category' => 'Без категории',
+		'no' => 'Нет',
+		'not_applicable' => 'Недоступно',
+		'ok' => 'Отлично!',
+		'or' => 'или',
+		'yes' => 'Да',
 	),
 );

+ 49 - 49
app/i18n/ru/index.php

@@ -2,65 +2,65 @@
 
 return array(
 	'about' => array(
-		'_' => 'About',	// TODO - Translation
+		'_' => 'О проекте',
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// TODO - Translation
-		'bugs_reports' => 'Bug reports',	// TODO - Translation
-		'credits' => 'Credits',	// TODO - Translation
-		'credits_content' => 'Some design elements come from <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> although FreshRSS doesn’t use this framework. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Icons</a> come from <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> font police has been created by <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS is based on <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, a PHP framework.',	// TODO - Translation
-		'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> or <a href="https://github.com/LeedRSS/Leed">Leed</a>. It is light and easy to take in hand while being powerful and configurable tool.',	// TODO - Translation
-		'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">on Github</a>',	// TODO - Translation
-		'license' => 'License',	// TODO - Translation
-		'project_website' => 'Project website',	// TODO - Translation
-		'title' => 'About',	// TODO - Translation
-		'version' => 'Version',	// TODO - Translation
-		'website' => 'Website',	// TODO - Translation
+		'bugs_reports' => 'Баг репорты',
+		'credits' => 'Авторство',
+		'credits_content' => 'Некоторые элементы дизайна взяты из <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>, хотя FreshRSS не использует этот фреймворк. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Иконки</a> взяты из <a href="https://www.gnome.org/">проекта GNOME</a>. Шрифт <em>Open Sans</em> создан <a href="https://fonts.google.com/specimen/Open+Sans">Стивом Мэттесоном</a>. FreshRSS основан на <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, PHP-фреймворке.',
+		'freshrss_description' => 'FreshRSS &mdash; агрегатор RSS-лент для размещения на своём сервере подобно <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> или <a href="https://github.com/LeedRSS/Leed">Leed</a>. Лёгкий и простой в использовании, будучи при этом мощным и настраиваемым инструментом.',
+		'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">в Github</a>',
+		'license' => 'Лицензия',
+		'project_website' => 'Сайт проекта',
+		'title' => 'О проекте',
+		'version' => 'Версия',
+		'website' => 'Сайт',
 	),
 	'feed' => array(
-		'add' => 'Please add some feeds.',	// TODO - Translation
-		'empty' => 'There are no articles to show.',	// TODO - Translation
-		'rss_of' => 'RSS feed of %s',	// TODO - Translation
-		'title' => 'Main stream',	// TODO - Translation
-		'title_fav' => 'Favourites',	// TODO - Translation
-		'title_global' => 'Global view',	// TODO - Translation
+		'add' => 'Вы можете добавить ленты.',
+		'empty' => 'Нет статей для отображения.',
+		'rss_of' => 'RSS-лента %s',
+		'title' => 'Основной поток',
+		'title_fav' => 'Избранное',
+		'title_global' => 'Глобальный вид',
 	),
 	'log' => array(
-		'_' => 'Logs',	// TODO - Translation
-		'clear' => 'Clear the logs',	// TODO - Translation
-		'empty' => 'Log file is empty',	// TODO - Translation
-		'title' => 'Logs',	// TODO - Translation
+		'_' => 'Логи',
+		'clear' => 'Очистить логи',
+		'empty' => 'Файл лога пуст',
+		'title' => 'Логи',
 	),
 	'menu' => array(
-		'about' => 'About FreshRSS',	// TODO - Translation
-		'before_one_day' => 'Older than one day',	// TODO - Translation
-		'before_one_week' => 'Older than one week',	// TODO - Translation
-		'bookmark_query' => 'Bookmark current query',	// TODO - Translation
-		'favorites' => 'Favourites (%s)',	// TODO - Translation
-		'global_view' => 'Global view',	// TODO - Translation
-		'main_stream' => 'Main stream',	// TODO - Translation
-		'mark_all_read' => 'Mark all as read',	// TODO - Translation
-		'mark_cat_read' => 'Mark category as read',	// TODO - Translation
-		'mark_feed_read' => 'Mark feed as read',	// TODO - Translation
-		'mark_selection_unread' => 'Mark selection as unread',	// TODO - Translation
-		'newer_first' => 'Newer first',	// TODO - Translation
-		'non-starred' => 'Show all but favorites',
-		'normal_view' => 'Normal view',	// TODO - Translation
-		'older_first' => 'Oldest first',	// TODO - Translation
-		'queries' => 'User queries',	// TODO - Translation
-		'read' => 'Show only read',
-		'reader_view' => 'Reading view',	// TODO - Translation
-		'rss_view' => 'RSS feed',	// TODO - Translation
-		'search_short' => 'Search',	// TODO - Translation
-		'starred' => 'Show only favorites',
-		'stats' => 'Statistics',	// TODO - Translation
-		'subscription' => 'Subscription management',	// TODO - Translation
-		'tags' => 'My labels',	// TODO - Translation
-		'unread' => 'Show only unread',
+		'about' => 'О FreshRSS',
+		'before_one_day' => 'Старше одного дня',
+		'before_one_week' => 'Старше одной недели',
+		'bookmark_query' => 'Сохранить текущий запрос',
+		'favorites' => 'Избранное (%s)',
+		'global_view' => 'Глобальный вид',
+		'main_stream' => 'Основной поток',
+		'mark_all_read' => 'Отметить всё прочитанным',
+		'mark_cat_read' => 'Отметить категорию прочитанной',
+		'mark_feed_read' => 'Отметить ленту прочитанной',
+		'mark_selection_unread' => 'Отметить выделение прочитанным',
+		'newer_first' => 'Сначала новые',
+		'non-starred' => 'Показать неизбранное',
+		'normal_view' => 'Обычный вид',
+		'older_first' => 'Сначала старые',
+		'queries' => 'Запросы',
+		'read' => 'Показать прочитанное',
+		'reader_view' => 'Вид для чтения',
+		'rss_view' => 'RSS-лента',
+		'search_short' => 'Поиск',
+		'starred' => 'Показать избранное',
+		'stats' => 'Статистика',
+		'subscription' => 'Управление подписками',
+		'tags' => 'Мои метки',
+		'unread' => 'Показать непрочитанное',
 	),
-	'share' => 'Share',	// TODO - Translation
+	'share' => 'Поделиться',
 	'tag' => array(
-		'related' => 'Article tags',	// TODO - Translation
+		'related' => 'Теги статьи',
 	),
 	'tos' => array(
-		'title' => 'Terms of Service',	// TODO - Translation
+		'title' => 'Условия предоставления услуг',
 	),
 );

+ 37 - 37
app/i18n/ru/install.php

@@ -3,25 +3,25 @@
 return array(
 	'action' => array(
 		'finish' => 'Завершить установку',
-		'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить	к следующему этапу.',
-		'keep_install' => 'Сохранить предыдущую установку',
-		'next_step' => 'Перейти к следующему этапу',
+		'fix_errors_before' => 'Пожалуйста, исправьте все ошибки, прежде чем перейти к следующему шагу.',
+		'keep_install' => 'Сохранить предыдущую конфигурацию',
+		'next_step' => 'Перейти к следующему шагу',
 		'reinstall' => 'Переустановить FreshRSS',
 	),
 	'auth' => array(
-		'form' => 'Вэб-форма (традиционный, необходим JavaScript)',
-		'http' => 'HTTP (для продвинутых пользователей с HTTPS)',
-		'none' => 'Никакого (опасно)',
-		'password_form' => 'Пароль<br /><small>(для метода аутентификации на Вэб-формах)</small>',
-		'password_format' => 'Как минимум 7 букв',
-		'type' => 'Метод аутентификации',
+		'form' => 'Веб-форма (традиционный, необходим JavaScript)',
+		'http' => 'HTTP (для опытных пользователей с HTTPS)',
+		'none' => 'Без аутентификации (небезопасно)',
+		'password_form' => 'Пароль<br /><small>(для входа через веб-форму)</small>',
+		'password_format' => 'Не менее 7 символов',
+		'type' => 'Способ аутентификации',
 	),
 	'bdd' => array(
 		'_' => 'База данных',
 		'conf' => array(
-			'_' => 'Конфигурация базы данныхDatabase configuration',
-			'ko' => 'Проверьте конфигурацию базы данных.',
-			'ok' => 'Конфигурация базы данных сохранена.',
+			'_' => 'Настройки базы данных',
+			'ko' => 'Проверьте настройки базы данных.',
+			'ok' => 'Настройки базы данных сохранены.',
 		),
 		'host' => 'Хост',
 		'password' => 'Пароль базы данных',
@@ -31,9 +31,9 @@ return array(
 	),
 	'check' => array(
 		'_' => 'Проверки',
-		'already_installed' => 'Обнаружена предыдущая установка FreshRSS!',
+		'already_installed' => 'Мы обнаружили, что FreshRSS уже установлен!',
 		'cache' => array(
-			'nok' => 'Проверьте права доступа к папке <em>%s</em> . Сервер HTTP должен иметь права на запись в эту папку.',
+			'nok' => 'Проверьте права доступа к папке <em>%s</em> . Веб-сервер должен иметь право на запись в эту папку.',
 			'ok' => 'Права на папку кэша в порядке.',
 		),
 		'ctype' => array(
@@ -45,7 +45,7 @@ return array(
 			'ok' => 'У вас установлено расширение cURL.',
 		),
 		'data' => array(
-			'nok' => 'Проверьте права доступа к папке <em>%s</em> . Сервер HTTP должен иметь права на запись в эту папку.',
+			'nok' => 'Проверьте права доступа к папке <em>%s</em> . Веб-сервер должен иметь право на запись в эту папку.',
 			'ok' => 'Права на <em>./data/</em> в порядке.',
 		),
 		'dom' => array(
@@ -53,7 +53,7 @@ return array(
 			'ok' => 'У вас установлена необходимая библиотека для просмотра DOM.',
 		),
 		'favicons' => array(
-			'nok' => 'Проверьте права доступа к папке <em>%s</em> . Сервер HTTP должен иметь права на запись в эту папку.',
+			'nok' => 'Проверьте права доступа к папке <em>%s</em> . Веб-сервер должен иметь право на запись в эту папку.',
 			'ok' => 'Права на папку значков в порядке.',
 		),
 		'fileinfo' => array(
@@ -61,12 +61,12 @@ return array(
 			'ok' => 'У вас установлено расширение fileinfo.',
 		),
 		'json' => array(
-			'nok' => 'Cannot find the recommended library to parse JSON.',	// TODO - Translation
-			'ok' => 'You have the recommended library to parse JSON.',	// TODO - Translation
+			'nok' => 'У вас нет рекомендуемой библиотеки для разбора JSON.',
+			'ok' => 'У вас установлена необходимая библиотека для разбора JSON.',
 		),
 		'mbstring' => array(
-			'nok' => 'Cannot find the recommended library mbstring for Unicode.',	// TODO - Translation
-			'ok' => 'You have the recommended library mbstring for Unicode.',	// TODO - Translation
+			'nok' => 'У вас не установлена рекомендуемая библиотека mbstring для Unicode.',
+			'ok' => 'У вас установлена рекомендуемая библиотека mbstring для Unicode.',
 		),
 		'pcre' => array(
 			'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).',
@@ -81,43 +81,43 @@ return array(
 			'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.',
 		),
 		'tmp' => array(
-			'nok' => 'Проверьте права доступа к папке <em>%s</em> . Сервер HTTP должен иметь права на запись в эту папку.',
-			'ok' => 'Permissions on the temp directory are good.',	// TODO - Translation
+			'nok' => 'Проверьте права доступа к папке <em>%s</em> . Веб-сервер должен иметь право на запись в эту папку.',
+			'ok' => 'Права на папку temp в порядке.',
 		),
-		'unknown_process_username' => 'unknown',	// TODO - Translation
+		'unknown_process_username' => 'неизвестно',
 		'users' => array(
-			'nok' => 'Проверьте права доступа к папке <em>%s</em> . Сервер HTTP должен иметь права на запись в эту папку.',
+			'nok' => 'Проверьте права доступа к папке <em>%s</em> . Веб-сервер должен иметь право на запись в эту папку.',
 			'ok' => 'Права на папку users в порядке.',
 		),
 		'xml' => array(
-			'nok' => 'Cannot find the required library to parse XML.',	// TODO - Translation
-			'ok' => 'You have the required library to parse XML.',	// TODO - Translation
+			'nok' => 'У вас нет необходимой библиотеки для разбора XML.',
+			'ok' => 'У вас установлена необходимая библиотека для разбора XML.',
 		),
 	),
 	'conf' => array(
 		'_' => 'Общие настройки',
-		'ok' => 'Общие настройки были сохранены.',
+		'ok' => 'Общие настройки сохранены.',
 	),
 	'congratulations' => 'Поздравляем!',
-	'default_user' => 'Имя пользователя по умолчанию <small>(максимум 16 латинских букв и/или цифр)</small>',
+	'default_user' => 'Имя пользователя по умолчанию <small>(не более 16 буквенно-цифровых символов)</small>',
 	'delete_articles_after' => 'Удалять статьи после',
-	'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить	к следующему этапу..',
-	'javascript_is_better' => 'FreshRSS принесёт больше удовольствия, если включить JavaScript',
+	'fix_errors_before' => 'Пожалуйста, исправьте ошибки, прежде чем перейти к следующему шагу.',
+	'javascript_is_better' => 'Пользоваться FreshRSS приятнее с включённым JavaScript',
 	'js' => array(
-		'confirm_reinstall' => 'Переустанавливая FreshRSS, вы потеряете предыдущую конфигурацию. Вы хотите продолжить?',
+		'confirm_reinstall' => 'Переустанавливая FreshRSS, вы потеряете предыдущую конфигурацию. Вы уверены, что хотите продолжить?',
 	),
 	'language' => array(
 		'_' => 'Язык',
 		'choose' => 'Выберите язык для FreshRSS',
 		'defined' => 'Язык выбран.',
 	),
-	'missing_applied_migrations' => 'Something went wrong; you should create an empty file <em>%s</em> manually.',	// TODO - Translation
-	'ok' => 'Установка успешна.',
+	'missing_applied_migrations' => 'Что-то пошло не так; вам следует создать пустой файл <em>%s</em> вручную.',
+	'ok' => 'Установка успешно завершена.',
 	'session' => array(
-		'nok' => 'The web server seems to be incorrectly configured for cookies required for PHP sessions!',	// TODO - Translation
+		'nok' => 'Похоже, веб-сервер имеет неправильные настройки кук! Куки нужны для сессий PHP.',
 	),
-	'step' => '%d этап',
-	'steps' => 'Этапы',
-	'this_is_the_end' => 'Это конец',
+	'step' => 'шаг %d',
+	'steps' => 'Шаги',
+	'this_is_the_end' => 'Завершение',
 	'title' => 'Установка · FreshRSS',
 );

+ 102 - 102
app/i18n/ru/sub.php

@@ -1,141 +1,141 @@
 <?php
 
 return array(
-	'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.',	// TODO - Translation
+	'add' => 'Создание лент и категорий перемещено <a href=\'%s\'>сюда</a>. Оно также доступно из меню слева и по нажатию на иконку ✚ на главной странице.',
 	'api' => array(
-		'documentation' => 'Copy the following URL to use it within an external tool.',	// TODO - Translation
+		'documentation' => 'Скопируйте URL для использования во внешнем инструменте.',
 		'title' => 'API',	// TODO - Translation
 	),
 	'bookmarklet' => array(
-		'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click the "Subscribe" button in any page you want to subscribe to.',	// TODO - Translation
-		'label' => 'Subscribe',	// TODO - Translation
-		'title' => 'Bookmarklet',	// TODO - Translation
+		'documentation' => 'Перетяните эту кнопку на вашу панель закладок, или нажмите правой кнопкой мыши и выберите "Добавить ссылку в закладки". Нажимайте кнопку "Подписаться" на любой странице, на которую вы хотите подписаться.<br>',
+		'label' => 'Подписаться',
+		'title' => 'Букмарклет',
 	),
 	'category' => array(
-		'_' => 'Category',	// TODO - Translation
-		'add' => 'Add a category',	// TODO - Translation
-		'archiving' => 'Archivage',
-		'empty' => 'Empty category',	// TODO - Translation
-		'information' => 'Information',	// TODO - Translation
-		'position' => 'Display position',	// TODO - Translation
-		'position_help' => 'To control category sort order',	// TODO - Translation
-		'title' => 'Title',	// TODO - Translation
+		'_' => 'Категория',
+		'add' => 'Добавить категорию',
+		'archiving' => 'Архивирование',
+		'empty' => 'Пустая категория',
+		'information' => 'Информация',
+		'position' => 'Положение отображения',
+		'position_help' => 'Влияет на порядок отображения категорий',
+		'title' => 'Заголовок',
 	),
 	'feed' => array(
-		'add' => 'Add a RSS feed',	// TODO - Translation
-		'advanced' => 'Advanced',	// TODO - Translation
-		'archiving' => 'Archivage',
+		'add' => 'Добавить RSS-ленту',
+		'advanced' => 'Дополнительно',
+		'archiving' => 'Архивирование',
 		'auth' => array(
-			'configuration' => 'Login',	// TODO - Translation
-			'help' => 'Connection allows to access HTTP protected RSS feeds',
-			'http' => 'HTTP Authentication',	// TODO - Translation
-			'password' => 'HTTP password',	// TODO - Translation
-			'username' => 'HTTP username',	// TODO - Translation
+			'configuration' => 'Логин',
+			'help' => 'Разрешить доступ к HTTP защищённым RSS-лентам',
+			'http' => 'HTTP аутентификация',
+			'password' => 'Пароль HTTP',
+			'username' => 'Имя пользователя HTTP',
 		),
-		'clear_cache' => 'Always clear cache',	// TODO - Translation
+		'clear_cache' => 'Всегда очищать кэш',
 		'content_action' => array(
-			'_' => 'Content action when fetching the article content',	// TODO - Translation
-			'append' => 'Add after existing content',	// TODO - Translation
-			'prepend' => 'Add before existing content',	// TODO - Translation
-			'replace' => 'Replace existing content',	// TODO - Translation
+			'_' => 'Действие с содержимым, когда извлекается содержимое статьи',
+			'append' => 'Добавить после существующего содержимого',
+			'prepend' => 'Добавить перед существующим содержимым',
+			'replace' => 'Заменить существующее содержимое',
 		),
-		'css_cookie' => 'Use Cookies when fetching the article content',	// TODO - Translation
-		'css_cookie_help' => 'Example: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>',	// TODO - Translation
-		'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)',	// TODO - Translation
-		'css_path' => 'Article CSS selector on original website',	// TODO - Translation
-		'description' => 'Description',	// TODO - Translation
-		'empty' => 'This feed is empty. Please verify that it is still maintained.',	// TODO - Translation
-		'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.',
+		'css_cookie' => 'Использовать куки при извлечении содержимого статьи',
+		'css_cookie_help' => 'Пример: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>',
+		'css_help' => 'Получает усечённые RSS-ленты (осторожно, требует больше времени!)',
+		'css_path' => 'CSS селектор статьи на сайте',
+		'description' => 'Описание',
+		'empty' => 'Лента пустая. Пожалуйста, убедитесь, что её до сих пор обслуживают.',
+		'error' => 'С этой лентой возникла проблема. Пожалуйста, убедитесь, что она всегда досягаема. Затем снова актуализируйте её.',
 		'filteractions' => array(
-			'_' => 'Filter actions',	// TODO - Translation
-			'help' => 'Write one search filter per line.',	// TODO - Translation
+			'_' => 'Действия фильтрации',
+			'help' => 'Введите по одному поисковому фильтру в строке.',
 		),
-		'information' => 'Information',	// TODO - Translation
-		'keep_min' => 'Minimum number of articles to keep',	// TODO - Translation
+		'information' => 'Информация',
+		'keep_min' => 'Оставлять статей не менее',
 		'maintenance' => array(
-			'clear_cache' => 'Clear cache',	// TODO - Translation
-			'clear_cache_help' => 'Clear the cache for this feed.',	// TODO - Translation
-			'reload_articles' => 'Reload articles',	// TODO - Translation
-			'reload_articles_help' => 'Reload articles and fetch complete content if a selector is defined.',	// TODO - Translation
-			'title' => 'Maintenance',	// TODO - Translation
+			'clear_cache' => 'Очистить кэш',
+			'clear_cache_help' => 'Очистить кэш для этой ленты.',
+			'reload_articles' => 'Снова загрузить статьи',
+			'reload_articles_help' => 'Снова загрузить статьи и извлечь полное содержимое, если задан селектор.',
+			'title' => 'Обслуживание',
 		),
-		'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under <em>%s</em>.',	// TODO - Translation
-		'mute' => 'mute',	// TODO - Translation
-		'no_selected' => 'No feed selected.',	// TODO - Translation
-		'number_entries' => '%d articles',	// TODO - Translation
+		'moved_category_deleted' => 'Когда вы удаляете категорию, ленты категории автоматически попадают в категорию <em>%s</em>.',
+		'mute' => 'заглушить',
+		'no_selected' => 'Ленты не выбраны.',
+		'number_entries' => '%d статей',
 		'priority' => array(
-			'_' => 'Visibility',	// TODO - Translation
-			'archived' => 'Do not show (archived)',	// TODO - Translation
-			'main_stream' => 'Show in main stream',	// TODO - Translation
-			'normal' => 'Show in its category',	// TODO - Translation
+			'_' => 'Видимость',
+			'archived' => 'Не показывать (архивировано)',
+			'main_stream' => 'Показывать в основном потоке',
+			'normal' => 'Показывать в категории ленты',
 		),
-		'proxy' => 'Set a proxy for fetching this feed',	// TODO - Translation
-		'proxy_help' => 'Select a protocol (e.g: SOCKS5) and enter the proxy address (e.g: <kbd>127.0.0.1:1080</kbd>)',	// TODO - Translation
+		'proxy' => 'Указать прокси для извлечения этой ленты',
+		'proxy_help' => 'Выберите протокол (например, SOCKS5) и введите адрес прокси (например, <kbd>127.0.0.1:1080</kbd>)',
 		'selector_preview' => array(
-			'show_raw' => 'Show source code',	// TODO - Translation
-			'show_rendered' => 'Show content',	// TODO - Translation
+			'show_raw' => 'Показать исходный код',
+			'show_rendered' => 'Показать содержимое',
 		),
 		'show' => array(
-			'all' => 'Show all feeds',	// TODO - Translation
-			'error' => 'Show only feeds with errors',	// TODO - Translation
+			'all' => 'Показать все ленты',
+			'error' => 'Показать только ленты с ошибками',
 		),
 		'showing' => array(
-			'error' => 'Showing only feeds with errors',	// TODO - Translation
+			'error' => 'Показываются только ленты с ошибками',
 		),
-		'ssl_verify' => 'Verify SSL security',	// TODO - Translation
-		'stats' => 'Statistics',	// TODO - Translation
-		'think_to_add' => 'You may add some feeds.',	// TODO - Translation
-		'timeout' => 'Timeout in seconds',	// TODO - Translation
-		'title' => 'Title',	// TODO - Translation
-		'title_add' => 'Add an RSS feed',	// TODO - Translation
-		'ttl' => 'Do not automatically refresh more often than',	// TODO - Translation
-		'url' => 'Feed URL',	// TODO - Translation
-		'useragent' => 'Set the user agent for fetching this feed',	// TODO - Translation
-		'useragent_help' => 'Example: <kbd>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)</kbd>',	// TODO - Translation
-		'validator' => 'Check the validity of the feed',	// TODO - Translation
-		'website' => 'Website URL',	// TODO - Translation
-		'websub' => 'Instant notification with WebSub',	// TODO - Translation
+		'ssl_verify' => 'Проверять безопасность SSL',
+		'stats' => 'Статистика',
+		'think_to_add' => 'Вы можете добавить ленты.',
+		'timeout' => 'Таймаут в секундах',
+		'title' => 'Заголовок',
+		'title_add' => 'Добавить RSS-ленту',
+		'ttl' => 'Не актуализировать автоматически чаще чем',
+		'url' => 'URL ленты',
+		'useragent' => 'Указать юзерагент для извлечения лент',
+		'useragent_help' => 'Пример: <kbd>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)</kbd>',
+		'validator' => 'Проверить валидность ленты',
+		'website' => 'URL сайта',
+		'websub' => 'Моментальные оповещения посредством WebSub',
 	),
 	'firefox' => array(
-		'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.',	// TODO - Translation
-		'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.',	// TODO - Translation
-		'title' => 'Firefox feed reader',	// TODO - Translation
+		'documentation' => 'Выполните шаги, описанные <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">здесь</a>, чтобы добавить FreshRSS в список читалок лент Firefox.',
+		'obsolete_63' => 'Начиная с версии 63, Firefox убрал возможность добавлять собственные сервисы подписок, которые не являются отдельными программами.',
+		'title' => 'Читалка лент Firefox',
 	),
 	'import_export' => array(
-		'export' => 'Export',	// TODO - Translation
-		'export_labelled' => 'Export your labelled articles',	// TODO - Translation
-		'export_opml' => 'Export list of feeds (OPML)',	// TODO - Translation
-		'export_starred' => 'Export your favourites',	// TODO - Translation
-		'feed_list' => 'List of %s articles',	// TODO - Translation
-		'file_to_import' => 'File to import<br />(OPML, JSON or ZIP)',	// TODO - Translation
-		'file_to_import_no_zip' => 'File to import<br />(OPML or JSON)',	// TODO - Translation
-		'import' => 'Import',	// TODO - Translation
-		'starred_list' => 'List of favourite articles',	// TODO - Translation
-		'title' => 'Import / export',	// TODO - Translation
+		'export' => 'Экспорт',
+		'export_labelled' => 'Экспортировать ваши помеченные статьи',
+		'export_opml' => 'Экспортировать список лент (OPML)',
+		'export_starred' => 'Экспортировать ваше избранное',
+		'feed_list' => 'Список из %s статей',
+		'file_to_import' => 'Файл для импорта<br />(OPML, JSON or ZIP)',
+		'file_to_import_no_zip' => 'Файл для импорта<br />(OPML or JSON)',
+		'import' => 'Импорт',
+		'starred_list' => 'Список избранных статей',
+		'title' => 'Импорт / экспорт',
 	),
 	'menu' => array(
-		'add' => 'Add a feed or category',	// TODO - Translation
-		'add_feed' => 'Add a feed',	// TODO - Translation
-		'bookmark' => 'Subscribe (FreshRSS bookmark)',	// TODO - Translation
-		'import_export' => 'Import / export',	// TODO - Translation
-		'label_management' => 'Label management',	// TODO - Translation
-		'subscription_management' => 'Subscription management',	// TODO - Translation
-		'subscription_tools' => 'Subscription tools',	// TODO - Translation
+		'add' => 'Добавить ленту или категорию',
+		'add_feed' => 'Добавить ленту',
+		'bookmark' => 'Подписаться (закладка FreshRSS)',
+		'import_export' => 'Импорт / экспорт',
+		'label_management' => 'Управление метками',
+		'subscription_management' => 'Управление подписками',
+		'subscription_tools' => 'Инструменты подписки',
 	),
 	'tag' => array(
-		'name' => 'Name',	// TODO - Translation
-		'new_name' => 'New name',	// TODO - Translation
-		'old_name' => 'Old name',	// TODO - Translation
+		'name' => 'Название',
+		'new_name' => 'Новое название',
+		'old_name' => 'Старое название',
 	),
 	'title' => array(
-		'_' => 'Subscription management',	// TODO - Translation
-		'add' => 'Add a feed or category',	// TODO - Translation
-		'add_category' => 'Add a category',	// TODO - Translation
-		'add_feed' => 'Add a feed',	// TODO - Translation
-		'add_label' => 'Add a label',	// TODO - Translation
-		'delete_label' => 'Delete a label',	// TODO - Translation
-		'feed_management' => 'RSS feeds management',	// TODO - Translation
-		'rename_label' => 'Rename a label',	// TODO - Translation
-		'subscription_tools' => 'Subscription tools',	// TODO - Translation
+		'_' => 'Управление подписками',
+		'add' => 'Добавить ленту или категорию',
+		'add_category' => 'Добавить категорию',
+		'add_feed' => 'Добавить ленту',
+		'add_label' => 'Добавить метку',
+		'delete_label' => 'Удалить метку',
+		'feed_management' => 'Управление RSS-лентами',
+		'rename_label' => 'Переименовать метку',
+		'subscription_tools' => 'Инструменты подписки',
 	),
 );

+ 20 - 20
app/i18n/ru/user.php

@@ -3,42 +3,42 @@
 return array(
 	'email' => array(
 		'feedback' => array(
-			'invalid' => 'This email address is invalid.',	// TODO - Translation
-			'required' => 'An email address is required.',	// TODO - Translation
+			'invalid' => 'Этот адрес электронной почты неверный.',
+			'required' => 'Требуется адрес электронной почты.',
 		),
 		'validation' => array(
-			'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.',	// TODO - Translation
-			'email_sent_to' => 'We sent you an email at <strong>%s</strong>. Please follow its instructions to validate your address.',	// TODO - Translation
+			'change_email' => 'Вы можете изменить ваш адрес электронной почты <a href="%s">на странице профиля</a>.',
+			'email_sent_to' => 'Мы отправили вам письмо по адресу <strong>%s</strong>. Пожалуйста, следуйте инструкциям в нём, чтобы подтвердить ваш адрес электронной почты.',
 			'feedback' => array(
-				'email_failed' => 'We couldn’t send you an email because of a server configuration error.',	// TODO - Translation
-				'email_sent' => 'An email has been sent to your address.',	// TODO - Translation
-				'error' => 'Email address validation failed.',	// TODO - Translation
-				'ok' => 'This email address has been validated.',	// TODO - Translation
-				'unneccessary' => 'This email address was already validated.',	// TODO - Translation
-				'wrong_token' => 'This email address failed to be validated due to a wrong token.',	// TODO - Translation
+				'email_failed' => 'Мы не смогли отправить вам письмо из-за ошибки конфигурации сервера.',
+				'email_sent' => 'Письмо отправлено на ваш адрес электронной почты.',
+				'error' => 'Не удалось подтвердить адрес электронной почты.',
+				'ok' => 'Адрес электронной почты подтверждён.',
+				'unneccessary' => 'Этот адрес электронной почты уже подтверждён.',
+				'wrong_token' => 'Не удалось подтвердить этот адрес электронной почты из-за неверного токена.',
 			),
-			'need_to' => 'You need to validate your email address before being able to use %s.',	// TODO - Translation
-			'resend_email' => 'Resend the email',	// TODO - Translation
-			'title' => 'Email address validation',	// TODO - Translation
+			'need_to' => 'Вам необходимо подтвердить адрес электронной почты, прежде чем вы сможете пользоваться %s.',
+			'resend_email' => 'Отправить ещё раз',
+			'title' => 'Подтверждение адреса электронной почты',
 		),
 	),
 	'mailer' => array(
 		'email_need_validation' => array(
-			'body' => 'You’ve just registered on %s, but you still need to validate your email address. For that, just follow the link:',	// TODO - Translation
-			'title' => 'You need to validate your account',	// TODO - Translation
-			'welcome' => 'Welcome %s,',	// TODO - Translation
+			'body' => 'Вы зарегистрировались в %s, но вам всё ещё нужно подтвердить ваш адрес электронной почты. Для этого просто перейдите по ссылке:',
+			'title' => 'Вам нужно подтвердить ваш аккаунт',
+			'welcome' => 'Добро пожаловать, %s,',
 		),
 	),
 	'password' => array(
-		'invalid' => 'The password is invalid.',	// TODO - Translation
+		'invalid' => 'Неверный пароль.',
 	),
 	'tos' => array(
 		'feedback' => array(
-			'invalid' => 'You must accept the Terms of Service to be able to register.',	// TODO - Translation
+			'invalid' => 'Вы должны принять Условия предоставления услуг, чтобы зарегистрироваться.',
 		),
 	),
 	'username' => array(
-		'invalid' => 'This username is invalid.',	// TODO - Translation
-		'taken' => 'This username, %s, is taken.',	// TODO - Translation
+		'invalid' => 'Неверное имя пользователя.',
+		'taken' => 'Имя пользователя %s занято.',
 	),
 );