Explorar el Código

i18n(ru): 100% complete (#8155)

* i18n(ru): 100% complete

* make fix-all

* i18n(ru): 100% complete

* make fix-all

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
McFev hace 5 meses
padre
commit
11863fa00e
Se han modificado 9 ficheros con 176 adiciones y 176 borrados
  1. 1 1
      README.fr.md
  2. 1 1
      README.md
  3. 8 8
      app/i18n/ru/admin.php
  4. 11 11
      app/i18n/ru/api.php
  5. 43 43
      app/i18n/ru/conf.php
  6. 4 4
      app/i18n/ru/feedback.php
  7. 40 40
      app/i18n/ru/gen.php
  8. 28 28
      app/i18n/ru/index.php
  9. 40 40
      app/i18n/ru/sub.php

+ 1 - 1
README.fr.md

@@ -247,7 +247,7 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio
 | Polski (pl) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Português (Brasil) (pt-BR) | ■■■■■■■■・・ 85% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Português (Portugal) (pt-PT) | ■■■■■■■■・・ 85% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Русский (ru) | ■■■■■■■■・・ 85% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Русский (ru) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Slovenčina (sk) | ■■■■■■■■・・ 85% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Türkçe (tr) | ■■■■■■■■■・ 93% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Українська (uk) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) |

+ 1 - 1
README.md

@@ -143,7 +143,7 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E
 | Polski (pl) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Português (Brasil) (pt-BR) | ■■■■■■■■・・ 85% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Português (Portugal) (pt-PT) | ■■■■■■■■・・ 85% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) |
-| Русский (ru) | ■■■■■■■■・・ 85% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Русский (ru) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Slovenčina (sk) | ■■■■■■■■・・ 85% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Türkçe (tr) | ■■■■■■■■■・ 93% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Українська (uk) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) |

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

@@ -16,7 +16,7 @@ return array(
 		'allow_anonymous_refresh' => 'Разрешить анонимное обновление статей',
 		'api_enabled' => 'Позволить <abbr>API</abbr> доступ <small>(необходимо для мобильных приложений and sharing user queries)</small>',
 		'form' => 'Веб-форма (традиционный, необходим JavaScript)',
-		'http' => 'HTTP (advanced: managed by Web server, OIDC, SSO…)',	// TODO
+		'http' => 'HTTP (продвинутый: управляется веб-сервером, OIDC, SSO…)',
 		'none' => 'Без аутентификации (небезопасно)',
 		'title' => 'Аутентификации',
 		'token' => 'Главный токен аутентификации',
@@ -116,9 +116,9 @@ return array(
 		'description' => 'Описание',
 		'disabled' => 'Отключены',
 		'empty_list' => 'Нет установленных расширений',
-		'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.',	// TODO
+		'empty_list_help' => 'Проверьте логи, чтобы определить причину пустого списка расширений.',
 		'enabled' => 'Включены',
-		'is_compatible' => 'Is compatible',	// TODO
+		'is_compatible' => 'Совместимо',
 		'latest' => 'Установлено',
 		'name' => 'Название',
 		'no_configure_view' => 'Это расширение не требует настройки.',
@@ -135,8 +135,8 @@ return array(
 		'_' => 'Статистика',
 		'all_feeds' => 'Все подписки',
 		'category' => 'Категория',
-		'date_published' => 'Publication date',	// TODO
-		'date_received' => 'Received date',	// TODO
+		'date_published' => 'Дата публикации',
+		'date_received' => 'Дата получения',
 		'entry_count' => 'Количество статей',
 		'entry_per_category' => 'Статей в категории',
 		'entry_per_day' => 'Статей за день (за последние 30 дней)',
@@ -149,10 +149,10 @@ return array(
 		'idle' => 'Неактивные ленты',
 		'main' => 'Основная статистика',
 		'main_stream' => 'Основной поток',
-		'nb_unreads' => 'Number of unread articles',	// TODO
+		'nb_unreads' => 'Количество непрочитанных статей',
 		'no_idle' => 'Нет неактивных лент!',
 		'number_entries' => 'статей: %d',
-		'overview' => 'Overview',	// TODO
+		'overview' => 'Обзор',
 		'percent_of_total' => '% от всего',
 		'repartition' => 'Распределение статей: %s',
 		'status_favorites' => 'В избранном',
@@ -161,7 +161,7 @@ return array(
 		'status_unread' => 'Не прочитано',
 		'title' => 'Статистика',
 		'top_feed' => '10 лучших лент',
-		'unread_dates' => 'Dates with most unread articles',	// TODO
+		'unread_dates' => 'Даты с наибольшим количеством непрочитанных статей',
 	),
 	'system' => array(
 		'_' => 'Системные настройки',

+ 11 - 11
app/i18n/ru/api.php

@@ -12,22 +12,22 @@
 
 return array(
 	'information' => array(
-		'address' => 'Your API address:',	// TODO
+		'address' => 'Ваш адрес API:',
 		'output' => array(
-			'encoding-support' => '⚠️ WARN: no <code>%2F</code> support, some clients might not work!',	// TODO
-			'invalid-configuration' => '⚠️ WARN: Probable invalid base URL in ./data/config.php',	// TODO
-			'pass' => '✔️ PASS',	// TODO
-			'unknown-error' => '❌ ',	// TODO
+			'encoding-support' => '⚠️ ПРЕДУПРЕЖДЕНИЕ: нет поддержки <code>%2F</code>, некоторые клиенты могут не работать!',
+			'invalid-configuration' => '⚠️ ПРЕДУПРЕЖДЕНИЕ: Вероятно, неверный базовый URL в ./data/config.php',
+			'pass' => '✔️ УСПЕШНО',
+			'unknown-error' => '❌ ',	// IGNORE
 		),
 		'test' => array(
-			'fever' => 'Fever API configuration test:',	// TODO
-			'greader' => 'Google Reader API configuration test:',	// TODO
+			'fever' => 'Тест конфигурации API Fever:',
+			'greader' => 'Тест конфигурации API Google Reader:',
 		),
 		'title' => array(
-			'_' => 'FreshRSS API endpoints',	// TODO
-			'extension' => 'API for extensions',	// TODO
-			'fever' => 'Fever compatible API',	// TODO
-			'greader' => 'Google Reader compatible API',	// TODO
+			'_' => 'API-точки FreshRSS',
+			'extension' => 'API для расширений',
+			'fever' => 'API, совместимый с Fever',
+			'greader' => 'API, совместимый с Google Reader',
 		),
 	),
 );

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

@@ -17,7 +17,7 @@ return array(
 		'help' => 'В индивидуальных настройках лент есть больше опций',
 		'keep_favourites' => 'Никогда не удалять избранное',
 		'keep_labels' => 'Никогда не удалять метки',
-		'keep_max' => 'Максимальное количество статей',	// DIRTY
+		'keep_max' => 'Максимальное количество статей',
 		'keep_min_by_feed' => 'Минимальное количество статей в ленте',
 		'keep_period' => 'Максимальный возраст статей',
 		'keep_unreads' => 'Никогда не удалять непрочитанные статьи',
@@ -35,7 +35,7 @@ return array(
 		'darkMode' => array(
 			'_' => 'Автоматический темный режим',
 			'auto' => 'Авто',
-			'help' => 'For compatible themes only',	// TODO
+			'help' => 'Только для совместимых тем',
 			'no' => 'Нет',
 		),
 		'icon' => array(
@@ -61,7 +61,7 @@ return array(
 				'description' => 'Эта тема устарела и будет недоступна в FreshRSS <a href="https://freshrss.github.io/FreshRSS/en/users/05_Configuration.html#theme" target="_blank">в будущем релизе</a>',
 			),
 		),
-		'theme_not_available' => 'Тема “%s” больше не доступна. Пожалуйста выберите другю тему.',
+		'theme_not_available' => 'Тема “%s” больше не доступна. Пожалуйста выберите другую тему.',
 		'thumbnail' => array(
 			'label' => 'Эскиз',
 			'landscape' => 'Горизонтальный',
@@ -100,45 +100,45 @@ return array(
 		),
 	),
 	'mark_read_button' => array(
-		'_' => '«отметить всё прочитанным» button',	// DIRTY
-		'big' => 'Big',	// TODO
-		'none' => 'None',	// TODO
-		'small' => 'Small',	// TODO
+		'_' => 'Кнопка «отметить всё прочитанным»',
+		'big' => 'Большая',
+		'none' => 'Отсутствует',
+		'small' => 'Маленькая',
 	),
 	'notification_timeout' => array(
 		'bad' => array(
-			'label' => 'Show warning banner',	// TODO
-			'seconds' => 'seconds (at least 1)',	// TODO
+			'label' => 'Показывать баннер предупреждения',
+			'seconds' => 'секунд (не менее 1)',
 		),
 		'good' => array(
-			'label' => 'Show acknowledgement banner',	// TODO
-			'seconds' => 'seconds (0 means not shown)',	// TODO
+			'label' => 'Показывать баннер подтверждения',
+			'seconds' => 'секунд (0 означает не показывать)',
 		),
 	),
 	'privacy' => array(
-		'_' => 'Privacy',	// TODO
-		'retrieve_extension_list' => 'Retrieve extension list',	// TODO
+		'_' => 'Конфиденциальность',
+		'retrieve_extension_list' => 'Получить список расширений',
 	),
 	'profile' => array(
 		'_' => 'Настройки профиля',
 		'api' => array(
 			'_' => 'Настройки API',
-			'api_not_set' => 'API password not set',	// TODO
-			'api_set' => 'API password set',	// TODO
-			'check_link' => 'Check API status via: <kbd><a href="../api/" target="_blank">%s</a></kbd>',	// TODO
-			'disabled' => 'The API access is disabled.',	// TODO
-			'documentation_link' => 'See the <a href="https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target="_blank">documentation and list of known apps</a>',	// TODO
-			'help' => 'See <a href="http://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target=_blank>documentation</a>',	// TODO
+			'api_not_set' => 'Пароль API не установлен',
+			'api_set' => 'Пароль API установлен',
+			'check_link' => 'Проверить статус API через: <kbd><a href="../api/" target="_blank">%s</a></kbd>',
+			'disabled' => 'Доступ к API отключен.',
+			'documentation_link' => 'См. <a href="https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target="_blank">документацию и список известных приложений</a>',
+			'help' => 'См. <a href="http://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target="_blank">документацию</a>',
 		),
-		'change_password' => 'Change password',	// TODO
-		'confirm_new_password' => 'Confirm new password',	// TODO
-		'current_password' => 'Current password<br /><small>(for the Web-form login method)</small>',	// TODO
+		'change_password' => 'Изменить пароль',
+		'confirm_new_password' => 'Подтвердить новый пароль',
+		'current_password' => 'Текущий пароль<br /><small>(для метода входа через веб-форму)</small>',
 		'delete' => array(
 			'_' => 'Удаление аккаунта',
 			'warn' => 'Ваш аккаунт и вся связанная с ним информация будут удалены.',
 		),
 		'email' => 'Адрес электронной почты',
-		'new_password' => 'New password',	// TODO
+		'new_password' => 'Новый пароль',
 		'password_api' => 'Пароль API<br /><small>(например, для мобильных приложений)</small>',
 		'password_format' => 'Не менее 7 символов',
 		'title' => 'Профиль',
@@ -146,13 +146,13 @@ return array(
 	'query' => array(
 		'_' => 'Пользовательские запросы',
 		'deprecated' => 'Этот запрос больше не действителен. Связанная категория или лента была удалена.',
-		'description' => 'Description',	// TODO
+		'description' => 'Описание',
 		'filter' => array(
 			'_' => 'Применённые фильтры:',
 			'categories' => 'Отображение по категории',
 			'feeds' => 'Отображение по ленте',
 			'order' => 'Сортировать по дате',
-			'publish_labels_instead_of_tags' => 'Replace <i>feed tags</i> by <i>user labels</i> in the shared RSS',	// TODO
+			'publish_labels_instead_of_tags' => 'Заменить <i>теги ленты</i> на <i>пользовательские метки</i> в общей RSS-ленте',
 			'search' => 'Выражение',
 			'shareOpml' => 'Включить общий доступ с помощью OPML к соответствующим категориям и лентам',
 			'shareRss' => 'Включить общий доступ с помощью HTML &amp; RSS',
@@ -160,8 +160,8 @@ return array(
 			'tags' => 'Отображение по метке',
 			'type' => 'Тип',
 		),
-		'get_A' => 'Show all feeds, also those shown in their category',	// TODO
-		'get_Z' => 'Show all feeds, also archived ones',	// TODO
+		'get_A' => 'Показать все ленты, включая те, что отображаются в их категории',
+		'get_Z' => 'Показать все ленты, включая архивные',
 		'get_all' => 'Показать все статьи',
 		'get_all_labels' => 'Показать все статьи с любыми метками',
 		'get_category' => 'Показать категорию “%s”',
@@ -170,12 +170,12 @@ return array(
 		'get_important' => 'Отображать статьи из важных лент',
 		'get_label' => 'Показать статьи с “%s” меткой',
 		'help' => 'Смотрите <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">документацию по пользовательским запросам и повторному обмену данными с помощью HTML / RSS / OPML</a>.',
-		'image_url' => 'Image URL',	// TODO
+		'image_url' => 'URL изображения',
 		'name' => 'Название',
 		'no_filter' => 'Нет фильтров',
 		'no_queries' => array(
-			'_' => 'No user queries are saved yet.',	// TODO
-			'help' => 'See <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">documentation</a>',	// TODO
+			'_' => 'Пользовательские запросы ещё не сохранены.',
+			'help' => 'См. <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">документацию</a>',
 		),
 		'number' => 'Запрос №%d',
 		'order_asc' => 'Показывать сначала старые статьи',
@@ -184,10 +184,10 @@ return array(
 		'share' => array(
 			'_' => 'Поделиться запросом по ссылке',
 			'disabled' => array(
-				'_' => 'disabled',	// TODO
-				'title' => 'Sharing',	// TODO
+				'_' => 'отключено',
+				'title' => 'Обмен',
 			),
-			'greader' => 'Shareable link to the GReader JSON',	// TODO
+			'greader' => 'Общая ссылка на JSON GReader',
 			'help' => 'Дайте эту ссылку, если хотите поделиться этим запросом с кем-либо',
 			'html' => 'Ссылка доступа на HTML-страницу',
 			'opml' => 'Ссылка доступа на список лент в формате OPML',
@@ -215,7 +215,7 @@ return array(
 		'_' => 'Чтение',
 		'after_onread' => 'После «отметить всё прочитанным»',
 		'always_show_favorites' => 'Показывать все статьи в избранном по умолчанию',
-		'apply_to_individual_feed' => 'Applies to feeds individually',	// TODO
+		'apply_to_individual_feed' => 'Применяется к лентам индивидуально',
 		'article' => array(
 			'authors_date' => array(
 				'_' => 'Авторы и дата',
@@ -231,9 +231,9 @@ return array(
 			),
 			'feed_title' => 'Титул ленты',
 			'icons' => array(
-				'_' => 'Article icons position<br /><small>(Reading view only)</small>',	// TODO
-				'above_title' => 'Above title',	// TODO
-				'with_authors' => 'In authors and date row',	// TODO
+				'_' => 'Позиция иконок статьи<br /><small>(только в виде для чтения)</small>',
+				'above_title' => 'Над заголовком',
+				'with_authors' => 'В строке с авторами и датой',
 			),
 			'tags' => array(
 				'_' => 'Метки',
@@ -250,7 +250,7 @@ return array(
 		'articles_per_page' => 'Количество статей на странице',
 		'auto_load_more' => 'Загружать больше статей при достижении низа страницы',
 		'auto_remove_article' => 'Скрывать статьи по прочтении',
-		'confirm_enabled' => 'Показывать диалог подтверждения при выпыполнении действия «отметить всё прочитанным»',
+		'confirm_enabled' => 'Показывать диалог подтверждения при выполнении действия «отметить всё прочитанным»',
 		'display_articles_unfolded' => 'Показывать статьи развёрнутыми по умолчанию',
 		'display_categories_unfolded' => 'Какие категории развёртывать',
 		'headline' => array(
@@ -275,19 +275,19 @@ return array(
 			'upon_gone' => 'когда это больше не в новостной ленте',
 			'upon_reception' => 'по получении статьи',
 			'when' => 'Отмечать статью прочитанной…',
-			'when_same_title_in_category' => 'if an identical title already exists in the top <i>n</i> newest articles of the category',	// TODO
-			'when_same_title_in_feed' => 'если идентичный заголовок уже существует в верхних <i>n</i> новейших статьях (of the feed)',	// DIRTY
+			'when_same_title_in_category' => 'если идентичный заголовок уже существует среди <i>n</i> новейших статей категории',
+			'when_same_title_in_feed' => 'если идентичный заголовок уже существует среди <i>n</i> новейших статей ленты',
 		),
 		'show' => array(
 			'_' => 'Какие статьи отображать',
 			'active_category' => 'Активную категорию',
-			'adaptive' => 'Show unreads if any, all articles otherwise',	// TODO
+			'adaptive' => 'Показывать непрочитанные, если они есть, иначе все статьи',
 			'all_articles' => 'Показывать все статьи',
 			'all_categories' => 'Все категории',
 			'no_category' => 'Никакие категории',
 			'remember_categories' => 'Запоминать открытые категории',
 			'unread' => 'Только непрочитанные',
-			'unread_or_favorite' => 'Show unreads and favourites',	// TODO
+			'unread_or_favorite' => 'Показывать непрочитанные и избранные',
 		),
 		'show_fav_unread_help' => 'Также относится к меткам',
 		'sides_close_article' => 'Нажатия мышью за пределами текста статьи закрывают статью',
@@ -297,7 +297,7 @@ return array(
 			'older_first' => 'Сначала старые',
 		),
 		'star' => array(
-			'when' => 'Mark an article as favourite…',	// TODO
+			'when' => 'Отмечать статью избранной…',
 		),
 		'sticky_post' => 'Прикрепить статью к верху при открытии',
 		'title' => 'Чтение',

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

@@ -50,7 +50,7 @@ return array(
 			'ko' => '%s не может быть включено. <a href="%s">Проверьте логи FreshRSS</a> для подробностей.',
 			'ok' => '%s теперь включено',
 		),
-		'invalid_view_mode' => 'Invalid view mode “%s”! Fall back to “Normal view”.',	// TODO
+		'invalid_view_mode' => 'Недопустимый режим просмотра “%s”! Возвращение к “Обычному виду”.',
 		'no_access' => 'У вас нет доступа к %s',
 		'not_enabled' => '%s не включено',
 		'not_found' => '%s не существует',
@@ -66,7 +66,7 @@ return array(
 	),
 	'profile' => array(
 		'error' => 'Ваш профиль не может быть изменён',
-		'passwords_dont_match' => 'Passwords don’t match',	// TODO
+		'passwords_dont_match' => 'Пароли не совпадают',
 		'updated' => 'Ваш профиль изменён',
 	),
 	'sub' => array(
@@ -97,8 +97,8 @@ return array(
 			'deleted' => 'Лента удалена',
 			'error' => 'Лента не может быть изменена',
 			'favicon' => array(
-				'too_large' => 'Uploaded icon is too large. The maximum file size is <em>%s</em>.',	// TODO
-				'unsupported_format' => 'Unsupported image file format!',	// TODO
+				'too_large' => 'Загруженный значок слишком большой. Максимальный размер файла: <em>%s</em>.',
+				'unsupported_format' => 'Формат файла изображения не поддерживается!',
 			),
 			'internal_problem' => 'Новостная лента не может быть добавлена. <a href="%s">Проверьте логи FreshRSS</a> для подробностей. Вы можете попробовать принудительно добавить ленту, добавив <code>#force_feed</code> к URL.',
 			'invalid_url' => 'URL <em>%s</em> неверный',

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

@@ -16,14 +16,14 @@ return array(
 		'add' => 'Добавить',
 		'back_to_rss_feeds' => '← Вернуться к вашим RSS-лентам',
 		'cancel' => 'Отменить',
-		'close' => 'Close',	// TODO
+		'close' => 'Закрыть',
 		'create' => 'Создать',
-		'delete_all_feeds' => 'Delete all feeds',	// TODO
-		'delete_errored_feeds' => 'Delete feeds with errors',	// TODO
+		'delete_all_feeds' => 'Удалить все ленты',
+		'delete_errored_feeds' => 'Удалить ленты с ошибками',
 		'delete_muted_feeds' => 'Удалить заглушенные ленты',
 		'demote' => 'Понизить',
 		'disable' => 'Отключить',
-		'download' => 'Download',	// TODO
+		'download' => 'Скачать',
 		'empty' => 'Опустошить',
 		'enable' => 'Включить',
 		'export' => 'Экспортировать',
@@ -33,12 +33,12 @@ return array(
 		'manage' => 'Настроить',
 		'mark_read' => 'Отметить прочитанным',
 		'menu' => array(
-			'open' => 'Open menu',	// TODO
+			'open' => 'Открыть меню',
 		),
 		'nav_buttons' => array(
-			'next' => 'Next article',	// TODO
-			'prev' => 'Previous article',	// TODO
-			'up' => 'Go up',	// TODO
+			'next' => 'Следующая статья',
+			'prev' => 'Предыдущая статья',
+			'up' => 'Вверх',
 		),
 		'open_url' => 'Открыть URL',
 		'promote' => 'Продвинуть',
@@ -62,9 +62,9 @@ return array(
 			'format' => '<small>Не менее 7 символов</small>',
 		),
 		'reauth' => array(
-			'header' => 'Reauthentication is required',	// TODO
-			'tip' => 'You won’t be asked to sign in again for <u>%d minutes</u>',	// TODO
-			'title' => 'Reauthentication',	// TODO
+			'header' => 'Требуется повторная аутентификация',
+			'tip' => 'Вам не придется снова входить в течение <u>%d минут</u>',
+			'title' => 'Повторная аутентификация',
 		),
 		'registration' => array(
 			'_' => 'Новый аккаунт',
@@ -144,7 +144,7 @@ return array(
 		'category_empty' => 'Пустая категория',
 		'confirm_action' => 'Вы уверены, что хотите выполнить это действие? Это нельзя отменить!',
 		'confirm_action_feed_cat' => 'Вы уверены, что хотите выполнить это действие? Вы потеряете связанные избранные статьи и пользовательские запросы. Это нельзя отменить!',
-		'confirm_exit_slider' => 'Are you sure you want to discard unsaved settings?',	// TODO
+		'confirm_exit_slider' => 'Вы уверены, что хотите отменить несохраненные настройки?',
 		'feedback' => array(
 			'body_new_articles' => '%%d новых статей в FreshRSS.',
 			'body_unread_articles' => '(Непрочитанные: %%d)',
@@ -154,7 +154,7 @@ return array(
 		'labels_empty' => 'Нет меток',
 		'new_article' => 'Появились новые статьи. Нажмите, чтобы обновить страницу.',
 		'should_be_activated' => 'JavaScript должен быть включён',
-		'unsafe_csp_header' => 'The CSP header in use is unsafe and FreshRSS may be vulnerable to XSS attacks. <a target="_blank" href="https://freshrss.github.io/FreshRSS/en/admins/10_ServerConfig.html#security">See documentation</a>',	// TODO
+		'unsafe_csp_header' => 'Используемый заголовок CSP небезопасен, и FreshRSS может быть уязвим для XSS-атак. <a target="_blank" href="https://freshrss.github.io/FreshRSS/en/admins/10_ServerConfig.html#security">См. документацию</a>',
 	),
 	'lang' => array(
 		'cs' => 'Čeština',	// IGNORE
@@ -189,7 +189,7 @@ return array(
 		'about' => 'О проекте',
 		'account' => 'Аккаунт',
 		'admin' => 'Администрирование',
-		'advanced_search' => 'Advanced Search',	// TODO
+		'advanced_search' => 'Расширенный поиск',
 		'archiving' => 'Архивирование',
 		'authentication' => 'Аутентификация',
 		'check_install' => 'Проверка установки',
@@ -197,7 +197,7 @@ return array(
 		'display' => 'Отображение',
 		'extensions' => 'Расширения',
 		'logs' => 'Журнал',
-		'privacy' => 'Privacy',	// TODO
+		'privacy' => 'Конфиденциальность',
 		'queries' => 'Пользовательские запросы',
 		'reading' => 'Чтение',
 		'search' => 'Искать слова или #теги',
@@ -223,31 +223,31 @@ return array(
 		'translated' => 'Progress',	// IGNORE
 	),
 	'search' => array(
-		'advanced_search_help' => 'This form helps construct search queries, but manual queries are even more powerful.',	// TODO
-		'authors' => 'Authors',	// TODO
-		'categories' => 'Categories',	// TODO
-		'content' => 'Content',	// TODO
-		'date_from' => 'From',	// TODO
-		'date_past' => 'In the past',	// TODO
-		'date_published' => 'Publication Date',	// TODO
-		'date_range' => 'Date Range',	// TODO
-		'date_received' => 'Received Date',	// TODO
-		'date_to' => 'To',	// TODO
-		'date_user' => 'User Modification Date',	// TODO
-		'feeds' => 'Feeds',	// TODO
-		'free_text' => 'Free Text',	// TODO
-		'free_text_help' => 'Search both in title and content',	// TODO
-		'full_documentation' => 'View <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">full search documentation</a>',	// TODO
-		'labels' => 'My Labels',	// TODO
-		'multiple_help' => 'Select one or more (hold <kbd>Ctrl</kbd> or <kbd>Cmd</kbd>)',	// TODO
-		'sources' => 'Sources',	// TODO
-		'tags' => 'Article Tags',	// TODO
-		'text' => 'Text Search',	// TODO
-		'text_help' => 'Multiple lines are combined by a logical <i>or</i>. Also supports <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">regular expressions</a>.',	// TODO
-		'text_placeholder' => 'Keyword',	// TODO
-		'title' => 'Title',	// TODO
-		'url' => 'URL',	// TODO
-		'user_queries' => 'User Queries',	// TODO
+		'advanced_search_help' => 'Эта форма помогает создавать поисковые запросы, но ручные запросы ещё мощнее.',
+		'authors' => 'Авторы',
+		'categories' => 'Категории',
+		'content' => 'Содержимое',
+		'date_from' => 'С',
+		'date_past' => 'За прошедший период',
+		'date_published' => 'Дата публикации',
+		'date_range' => 'Диапазон дат',
+		'date_received' => 'Дата получения',
+		'date_to' => 'По',
+		'date_user' => 'Дата изменения пользователем',
+		'feeds' => 'Ленты',
+		'free_text' => 'Свободный текст',
+		'free_text_help' => 'Поиск по заголовку и содержимому',
+		'full_documentation' => 'См. <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">полную документацию по поиску</a>',
+		'labels' => 'Мои метки',
+		'multiple_help' => 'Выберите один или несколько элементов (удерживайте <kbd>Ctrl</kbd> или <kbd>Cmd</kbd>)',
+		'sources' => 'Источники',
+		'tags' => 'Теги статьи',
+		'text' => 'Текстовый поиск',
+		'text_help' => 'Несколько строк объединяются логическим <i>или</i>. Также поддерживаются <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#regex" target="_blank">регулярные выражения</a>.',
+		'text_placeholder' => 'Ключевое слово',
+		'title' => 'Заголовок',
+		'url' => 'URL',	// IGNORE
+		'user_queries' => 'Пользовательские запросы',
 	),
 	'share' => array(
 		'Known' => 'Сайты на Known',

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

@@ -16,13 +16,13 @@ return array(
 		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// IGNORE
 		'bug_reports' => array(
 			'environment_information' => array(
-				'_' => 'System information',	// TODO
-				'browser' => 'Browser',	// TODO
-				'database' => 'Database',	// TODO
-				'server_software' => 'Server software',	// TODO
-				'version_curl' => 'cURL version',	// TODO
-				'version_frss' => 'FreshRSS version',	// TODO
-				'version_php' => 'PHP version',	// TODO
+				'_' => 'Информация о системе',
+				'browser' => 'Браузер',
+				'database' => 'База данных',
+				'server_software' => 'ПО сервера',
+				'version_curl' => 'Версия cURL',
+				'version_frss' => 'Версия FreshRSS',
+				'version_php' => 'Версия PHP',
 			),
 		),
 		'bugs_reports' => 'Баг репорты',
@@ -37,9 +37,9 @@ return array(
 	'feed' => array(
 		'empty' => 'Нет статей для отображения.',
 		'received' => array(
-			'before_yesterday' => 'Received before yesterday',	// TODO
-			'today' => 'Received today',	// TODO
-			'yesterday' => 'Received yesterday',	// TODO
+			'before_yesterday' => 'Получено раньше, чем вчера',
+			'today' => 'Получено сегодня',
+			'yesterday' => 'Получено вчера',
 		),
 		'rss_of' => 'RSS-лента %s',
 		'title' => 'Основной поток',
@@ -76,28 +76,28 @@ return array(
 		'rss_view' => 'RSS-лента',
 		'search_short' => 'Поиск',
 		'sort' => array(
-			'_' => 'Sorting criteria',	// TODO
+			'_' => 'Критерии сортировки',
 			'c' => array(
-				'name_asc' => 'Category, feed titles A→Z',	// TODO
-				'name_desc' => 'Category, feed titles Z→A',	// TODO
+				'name_asc' => 'Категории, названия лент А→Я',
+				'name_desc' => 'Категории, названия лент Я→А',
 			),
-			'date_asc' => 'Publication date 1→9',	// TODO
-			'date_desc' => 'Publication date 9→1',	// TODO
+			'date_asc' => 'Дата публикации 1→9',
+			'date_desc' => 'Дата публикации 9→1',
 			'f' => array(
-				'name_asc' => 'Feed title A→Z',	// TODO
-				'name_desc' => 'Feed title Z→A',	// TODO
+				'name_asc' => 'Названия лент А→Я',
+				'name_desc' => 'Названия лент Я→А',
 			),
-			'id_asc' => 'Freshly received last',	// TODO
-			'id_desc' => 'Freshly received first',	// TODO
-			'length_asc' => 'Content length 1→9',	// TODO
-			'length_desc' => 'Content length 9→1',	// TODO
-			'link_asc' => 'Link A→Z',	// TODO
-			'link_desc' => 'Link Z→A',	// TODO
-			'rand' => 'Random order',	// TODO
-			'title_asc' => 'Title A→Z',	// TODO
-			'title_desc' => 'Title Z→A',	// TODO
-			'user_modified_asc' => 'User modified 1→9',	// TODO
-			'user_modified_desc' => 'User modified 9→1',	// TODO
+			'id_asc' => 'Недавно полученные последними',
+			'id_desc' => 'Недавно полученные первыми',
+			'length_asc' => 'Длина контента 1→9',
+			'length_desc' => 'Длина контента 9→1',
+			'link_asc' => 'Ссылка А→Я',
+			'link_desc' => 'Ссылка Я→А',
+			'rand' => 'Случайный порядок',
+			'title_asc' => 'Заголовок А→Я',
+			'title_desc' => 'Заголовок Я→А',
+			'user_modified_asc' => 'Изменено пользователем 1→9',
+			'user_modified_desc' => 'Изменено пользователем 9→1',
 		),
 		'starred' => 'Показать избранное',
 		'stats' => 'Статистика',

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

@@ -22,16 +22,16 @@ return array(
 	),
 	'category' => array(
 		'_' => 'Категория',
-		'add' => 'Добавить категория',
+		'add' => 'Добавить категорию',
 		'archiving' => 'Архивирование',
 		'dynamic_opml' => array(
 			'_' => 'Динамичный OPML',
 			'help' => 'Предоставьте ссылку на <a href="http://opml.org/" target="_blank">OPML файл</a> чтобы динамично заполнять эту категорию лентами',
 		),
 		'empty' => 'Пустая категория',
-		'expand' => 'Expand category',	// TODO
+		'expand' => 'Развернуть категорию',
 		'information' => 'Информация',
-		'open' => 'Open category',	// TODO
+		'open' => 'Открыть категорию',
 		'opml_url' => 'OPML ссылка',
 		'position' => 'Положение отображения',
 		'position_help' => 'Влияет на порядок отображения категорий',
@@ -50,7 +50,7 @@ return array(
 			'password' => 'Пароль HTTP',
 			'username' => 'Имя пользователя HTTP',
 		),
-		'change_favicon' => 'Change…',	// TODO
+		'change_favicon' => 'Изменить…',
 		'clear_cache' => 'Всегда очищать кэш',
 		'content_action' => array(
 			'_' => 'Действие с содержимым, когда извлекается содержимое статьи',
@@ -58,7 +58,7 @@ return array(
 			'prepend' => 'Добавить перед существующим содержимым',
 			'replace' => 'Заменить существующее содержимое',
 		),
-		'content_retrieval' => 'Content retrieval',	// TODO
+		'content_retrieval' => 'Получение содержимого',
 		'css_cookie' => 'Использовать куки при извлечении содержимого статьи',
 		'css_cookie_help' => 'Пример: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>',
 		'css_help' => 'Получает усечённые RSS-ленты (осторожно, требует больше времени!)',
@@ -69,31 +69,31 @@ return array(
 		),
 		'description' => 'Описание',
 		'empty' => 'Лента пустая. Пожалуйста, убедитесь, что её до сих пор обслуживают.',
-		'error' => 'С этой лентой возникла проблема. Пожалуйста, убедитесь, что она всегда досягаема.',	// DIRTY
+		'error' => 'С этой лентой возникла проблема. Пожалуйста, убедитесь, что она доступна.',
 		'export-as-opml' => array(
 			'download' => 'Скачать',
-			'help' => 'XML файл (data subset. <a href="https://freshrss.github.io/FreshRSS/en/developers/OPML.html" target="_blank">See documentation</a>)',	// DIRTY
+			'help' => 'XML файл (подмножество данных. <a href="https://freshrss.github.io/FreshRSS/en/developers/OPML.html" target="_blank">См. документацию</a>)',
 			'label' => 'Экспортировать как OPML',
 		),
-		'ext_favicon' => 'Set automatically',	// TODO
-		'favicon_changed_by_ext' => 'The icon has been set by the <b>%s</b> extension.',	// TODO
+		'ext_favicon' => 'Установить автоматически',
+		'favicon_changed_by_ext' => 'Иконка была установлена расширением <b>%s</b>.',
 		'filteractions' => array(
 			'_' => 'Действия фильтрации',
 			'help' => 'Введите по одному поисковому фильтру в строке. См. <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">документацию</a>.',
-			'view_filter' => 'Preview filters on existing articles (new window)',	// TODO
+			'view_filter' => 'Предпросмотр фильтров на существующих статьях (новое окно)',
 		),
-		'http_headers' => 'HTTP Headers',	// TODO
-		'http_headers_help' => 'Headers are separated by a newline, and the name and value of a header are separated by a colon (e.g: <kbd><code>Accept: application/atom+xml<br />Authorization: Bearer some-token</code></kbd>).',	// TODO
-		'icon' => 'Icon',	// TODO
+		'http_headers' => 'HTTP-заголовки',
+		'http_headers_help' => 'Заголовки разделяются новой строкой, имя и значение заголовка разделяются двоеточием (например: <kbd><code>Accept: application/atom+xml<br />Authorization: Bearer some-token</code></kbd>).',
+		'icon' => 'Иконка',
 		'information' => 'Информация',
 		'keep_min' => 'Оставлять статей не менее',
 		'kind' => array(
 			'_' => 'Тип источника ленты',
 			'html_json' => array(
-				'_' => 'HTML + XPath + JSON dot notation (JSON in HTML)',	// TODO
+				'_' => 'HTML + XPath + JSON точечная нотация (JSON в HTML)',
 				'xpath' => array(
-					'_' => 'XPath for JSON in HTML',	// TODO
-					'help' => 'Example: <code>normalize-space(//script[@type="application/json"])</code> (single JSON)<br />or: <code>//script[@type="application/ld+json"]</code> (one JSON object per article)',	// TODO
+					'_' => 'XPath для JSON в HTML',
+					'help' => 'Пример: <code>normalize-space(//script[@type="application/json"])</code> (один JSON)<br />или: <code>//script[@type="application/ld+json"]</code> (один JSON-объект на статью)',
 				),
 			),
 			'html_xpath' => array(
@@ -152,7 +152,7 @@ return array(
 				'help' => 'JSON с точечной нотацией использует точки между объектами и квадратные скобки для массивов (например: <code>data.items[0].title</code>)',
 				'item' => array(
 					'_' => 'Найти новые <strong>элементы</strong><br /><small>(самое важное)</small>',
-					'help' => 'JSON-путь к массиву, содержащему элементы, например: <code>$</code> or <code>newsItems</code>',	// DIRTY
+					'help' => 'JSON-путь к массиву, содержащему элементы, например: <code>$</code> или <code>newsItems</code>',
 				),
 				'item_author' => 'автор элемента',
 				'item_categories' => 'теги элемента',
@@ -202,23 +202,23 @@ return array(
 		'moved_category_deleted' => 'Когда вы удаляете категорию, ленты категории автоматически попадают в категорию <em>%s</em>.',
 		'mute' => array(
 			'_' => 'заглушить',
-			'state_is_muted' => 'This feed is muted',	// TODO
+			'state_is_muted' => 'Эта лента заглушена',
 		),
 		'no_selected' => 'Ленты не выбраны.',
 		'number_entries' => '%d статей',
-		'open_feed' => 'Open feed %s',	// TODO
-		'path_entries_conditions' => 'Conditions for content retrieval',	// TODO
+		'open_feed' => 'Открыть ленту %s',
+		'path_entries_conditions' => 'Условия для получения содержимого',
 		'priority' => array(
 			'_' => 'Видимость',
 			'category' => 'Показывать в категории ленты',
-			'feed' => 'Show in its feed',	// TODO
+			'feed' => 'Показывать в своей ленте',
 			'hidden' => 'Не показывать',
 			'important' => 'Показывать в важных лентах',
 			'main_stream' => 'Показывать в основном потоке',
 		),
 		'proxy' => 'Указать прокси для извлечения этой ленты',
-		'proxy_help' => 'Выберите протокол (например, SOCKS5) и введите адрес прокси (например, <kbd>127.0.0.1:1080</kbd> или <kbd>username:password@127.0.0.1:1080</kbd>)',	// DIRTY
-		'reset_favicon' => 'Reset to default',	// TODO
+		'proxy_help' => 'Выберите протокол (например, SOCKS5) и введите адрес прокси (например, <kbd>127.0.0.1:1080</kbd> или <kbd>username:password@127.0.0.1:1080</kbd>)',
+		'reset_favicon' => 'Сбросить на значение по умолчанию',
 		'selector_preview' => array(
 			'show_raw' => 'Показать исходный код',
 			'show_rendered' => 'Показать содержимое',
@@ -238,20 +238,20 @@ return array(
 		'title_add' => 'Добавить RSS-ленту',
 		'ttl' => 'Не обновлять автоматически чаще, чем каждые',
 		'unicityCriteria' => array(
-			'_' => 'Article unicity criteria',	// TODO
-			'forced' => '<span title="Block the unicity criteria, even when the feed has duplicate articles">forced</span>',	// TODO
-			'help' => 'Relevant for invalid feeds.<br />⚠️ Changing the policy will create duplicates.',	// TODO
-			'id' => 'Standard ID (default)',	// TODO
-			'link' => 'Link',	// TODO
-			'sha1:content' => 'Content',	// TODO
-			'sha1:content_published' => 'Content + Date',	// TODO
-			'sha1:link_published' => 'Link + Date',	// TODO
-			'sha1:link_published_title' => 'Link + Date + Title',	// TODO
-			'sha1:link_published_title_content' => 'Link + Date + Title + Content',	// TODO
-			'sha1:published' => 'Date',	// TODO
-			'sha1:title' => 'Title',	// TODO
-			'sha1:title_published' => 'Title + Date',	// TODO
-			'sha1:title_published_content' => 'Title + Date + Content',	// TODO
+			'_' => 'Критерии уникальности статьи',
+			'forced' => '<span title="Блокировать критерии уникальности, даже когда в ленте есть дубликаты статей">принудительно</span>',
+			'help' => 'Актуально для некорректных лент.<br />⚠️ Изменение политики создаст дубликаты.',
+			'id' => 'Стандартный ID (по умолчанию)',
+			'link' => 'Ссылка',
+			'sha1:content' => 'Содержимое',
+			'sha1:content_published' => 'Содержимое + Дата',
+			'sha1:link_published' => 'Ссылка + Дата',
+			'sha1:link_published_title' => 'Ссылка + Дата + Заголовок',
+			'sha1:link_published_title_content' => 'Ссылка + Дата + Заголовок + Содержимое',
+			'sha1:published' => 'Дата',
+			'sha1:title' => 'Заголовок',
+			'sha1:title_published' => 'Заголовок + Дата',
+			'sha1:title_published_content' => 'Заголовок + Дата + Содержимое',
 		),
 		'url' => 'URL ленты',
 		'useragent' => 'Указать юзерагент для извлечения лент',
@@ -263,7 +263,7 @@ return array(
 	'import_export' => array(
 		'export' => array(
 			'_' => 'Экспорт',
-			'sqlite' => 'Download user database as SQLite',	// TODO
+			'sqlite' => 'Скачать базу данных пользователя в формате SQLite',
 		),
 		'export_labelled' => 'Экспортировать ваши помеченные статьи',
 		'export_opml' => 'Экспортировать список лент (OPML)',
@@ -283,7 +283,7 @@ return array(
 			'idle' => 'Неактивные ленты',
 			'main' => 'Основная статистика',
 			'repartition' => 'Расределение статей',
-			'unread_dates' => 'Unread dates',	// TODO
+			'unread_dates' => 'Даты непрочтённых',
 		),
 		'subscription_management' => 'Управление подписками',
 		'subscription_tools' => 'Инструменты подписки',
@@ -301,7 +301,7 @@ return array(
 		'add_dynamic_opml' => 'Добавить динамичный OPML',
 		'add_feed' => 'Добавить ленту',
 		'add_label' => 'Добавить метку',
-		'add_opml_category' => 'OPML category name',	// TODO
+		'add_opml_category' => 'Название категории OPML',
 		'delete_label' => 'Удалить метку',
 		'feed_management' => 'Управление RSS-лентами',
 		'subscription_tools' => 'Инструменты подписки',