Procházet zdrojové kódy

Add Belarusian (be) translation (#9351)

Complete interface translation under app/i18n/be/. The locale is
registered in all app/i18n/*/gen.php, .typos.toml, docs and READMEs.
Pavel Miniutka před 1 dnem
rodič
revize
fcc41b6ea0

+ 1 - 0
.typos.toml

@@ -17,6 +17,7 @@ extend-exclude = [
 	"*.rtl.css",
 	".git/",
 	"app/i18n/az/",
+	"app/i18n/be/",
 	"app/i18n/cs/",
 	"app/i18n/de/",
 	"app/i18n/el/",

+ 1 - 0
CREDITS.md

@@ -260,6 +260,7 @@ People are sorted by name so please keep this order.
 * [papaschloss](https://github.com/papaschloss): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:papaschloss)
 * [Patrick Crandol](https://github.com/pattems): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:pattems)
 * [Paulius Šukys](https://github.com/psukys): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:psukys), [Web](https://www.sukys.eu/)
+* [Pavel Miniutka](https://github.com/pavel-miniutka): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:pavel-miniutka)
 * [Paweł Kalemba](https://github.com/pkalemba): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:pkalemba)
 * [payaci](https://github.com/payaci): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is%3Apr+author%3Apayaci)
 * [pe1uca](https://github.com/pe1uca): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:pe1uca)

+ 1 - 0
README.fr.md

@@ -237,6 +237,7 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio
 | Langage | Progression | |
 | - | - | - |
 | Azərbaycanca (az) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Faz+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Беларуская (be) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fbe+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Čeština (cs) | ■■■■■■■■・・ 81% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Deutsch (de) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Ελληνικά (el) | ■■■■■■■・・・ 75% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) |

+ 1 - 0
README.md

@@ -133,6 +133,7 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E
 | Language | Progress | |
 | - | - | - |
 | Azərbaycanca (az) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Faz+%2F%28TODO%7CDIRTY%29%24%2F) |
+| Беларуская (be) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fbe+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Čeština (cs) | ■■■■■■■■・・ 81% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Deutsch (de) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) |
 | Ελληνικά (el) | ■■■■■■■・・・ 75% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) |

+ 1 - 0
app/i18n/az/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 165 - 0
app/i18n/be/admin.php

@@ -0,0 +1,165 @@
+<?php
+
+/******************************************************************************
+ * Each entry of that file can be associated with a comment to indicate its   *
+ * state. When there is no comment, it means the entry is fully translated.   *
+ * The recognized comments are (comment matching is case-insensitive):        *
+ *   + TODO: the entry has never been translated.                             *
+ *   + DIRTY: the entry has been translated but needs to be updated.          *
+ *   + IGNORE: the entry does not need to be translated.                      *
+ * When a comment is not recognized, it is discarded.                         *
+ ******************************************************************************/
+
+return array(
+	'auth' => array(
+		'allow_anonymous' => 'Дазволіць ананімнае чытанне артыкулаў прадвызначанага карыстальніка (%s)',
+		'allow_anonymous_refresh' => 'Дазволіць ананімнае абнаўленне артыкулаў',
+		'api_enabled' => 'Дазволіць доступ да <abbr>API</abbr> <small>(патрабуецца для мабільных праграм і абагульвання карыстальніцкіх запытаў)</small>',
+		'form' => 'Вэб-форма (традыцыйны спосаб, патрабуе JavaScript)',
+		'http' => 'HTTP (для дасведчаных: кіруецца вэб-серверам, OIDC, SSO…)',
+		'none' => 'Няма (небяспечна)',
+		'title' => 'Аўтэнтыфікацыя',
+		'token' => 'Галоўны токен аўтэнтыфікацыі',
+		'token_help' => 'Дазваляе доступ да ўсіх RSS-вывадаў карыстальніка, а таксама абнаўленне стужак без аўтэнтыфікацыі:',
+		'type' => 'Спосаб аўтэнтыфікацыі',
+	),
+	'extensions' => array(
+		'author' => 'Аўтар',
+		'community' => 'Даступныя пашырэнні супольнасці',
+		'description' => 'Апісанне',
+		'disabled' => 'Адключана',
+		'empty_list' => 'Усталяваных пашырэнняў няма',
+		'empty_list_help' => 'Праверце журналы, каб вызначыць прычыну пустога спісу пашырэнняў.',
+		'enabled' => 'Уключана',
+		'is_compatible' => 'Сумяшчальнасць',
+		'latest' => 'Усталявана',
+		'name' => 'Назва',
+		'no_configure_view' => 'Гэта пашырэнне нельга сканфігураваць.',
+		'system' => array(
+			'_' => 'Сістэмныя пашырэнні',
+			'no_rights' => 'Сістэмнае пашырэнне (у вас няма неабходных дазволаў)',
+		),
+		'title' => 'Пашырэнні',
+		'update' => 'Даступна абнаўленне',
+		'user' => 'Карыстальніцкія пашырэнні',
+		'version' => 'Версія',
+	),
+	'stats' => array(
+		'_' => 'Статыстыка',
+		'all_feeds' => 'Усе стужкі',
+		'category' => 'Катэгорыя',
+		'date_published' => 'Дата публікацыі',
+		'date_received' => 'Дата атрымання',
+		'entry_count' => 'Колькасць артыкулаў',
+		'entry_per_category' => 'Артыкулы па катэгорыях',
+		'entry_per_day' => 'Колькасць артыкулаў за дзень (апошнія 30 дзён)',
+		'entry_per_day_of_week' => 'За дзень тыдня (у сярэднім: %.2f артыкулаў)',
+		'entry_per_hour' => 'За гадзіну (у сярэднім: %.2f артыкулаў)',
+		'entry_per_month' => 'За месяц (у сярэднім: %.2f артыкулаў)',
+		'entry_repartition' => 'Размеркаванне артыкулаў',
+		'feed' => 'Стужка',
+		'feed_per_category' => 'Стужкі па катэгорыях',
+		'idle' => 'Неактыўныя стужкі',
+		'main' => 'Асноўная статыстыка',
+		'main_stream' => 'Асноўная стужка',
+		'nb_unreads' => 'Колькасць непрачытаных артыкулаў',
+		'no_idle' => 'Неактыўных стужак няма!',
+		'number_entries' => '%d артыкулаў',
+		'overview' => 'Агляд',
+		'percent_of_total' => '% ад агульнай колькасці',
+		'repartition' => 'Размеркаванне артыкулаў: %s',
+		'status_favorites' => 'Абранае',
+		'status_read' => 'Прачытанае',
+		'status_total' => 'Усяго',
+		'status_unread' => 'Непрачытанае',
+		'title' => 'Статыстыка',
+		'top_feed' => 'Дзесяць найлепшых стужак',
+		'unread_dates' => 'Даты з найбольшай колькасцю непрачытаных артыкулаў',
+	),
+	'system' => array(
+		'_' => 'Канфігурацыя сістэмы',
+		'auto-update-url' => 'URL-адрас сервера аўтаматычнага абнаўлення',
+		'base-url' => array(
+			'_' => 'Базавы URL-адрас',
+			'recommendation' => 'Аўтаматычная рэкамендацыя: <kbd>%s</kbd>',
+		),
+		'closed_registration_message' => 'Паведамленне пры закрытай рэгістрацыі',
+		'cookie-duration' => array(
+			'help' => 'у секундах',
+			'number' => 'Працягласць сеансу',
+		),
+		'default_closed_registration_message' => 'У дадзены момант гэты сервер не прымае новых рэгістрацый.',
+		'force_email_validation' => 'Прымусова правяраць адрас электроннай пошты',
+		'instance-name' => 'Назва сервера',
+		'internal-host-allowlist' => array(
+			'_' => 'Спіс дазволеных унутраных вузлоў',
+			'help' => 'Дадайце адзін запіс у кожным радку:<ul><li><code>host:port</code>. Напрыклад, <code>127.0.0.1:8080</code> або <code>rss-bridge:80</code></li><li>Запіс у фармаце CIDR. Напрыклад, <code>0.0.0.0/0</code>, каб дазволіць любы IPv4, або <code>::/0</code>, каб дазволіць любы IPv6</li><li><code>*</code>, каб дазволіць любы вузел (небяспечна)</li></ul>',
+		),
+		'max-categories' => 'Максімальная колькасць катэгорый для карыстальніка',
+		'max-feeds' => 'Максімальная колькасць стужак для карыстальніка',
+		'override-by-env-var' => 'Гэта налада задаецца пераменнай асяроддзя <kbd>%s</kbd>.',
+		'registration' => array(
+			'number' => 'Максімальная колькасць уліковых запісаў',
+			'select' => array(
+				'label' => 'Форма рэгістрацыі',
+				'option' => array(
+					'noform' => 'Адключана: без формы рэгістрацыі',
+					'nolimit' => 'Уключана: без абмежавання колькасці ўліковых запісаў',
+					'setaccountsnumber' => 'Задаць максімальную колькасць уліковых запісаў',
+				),
+			),
+			'status' => array(
+				'disabled' => 'Форма адключана',
+				'enabled' => 'Форма ўключана',
+			),
+			'title' => 'Форма рэгістрацыі карыстальнікаў',
+		),
+		'sensitive-parameter' => 'Адчувальны параметр. Рэдагуйце ўручную ў <kbd>./data/config.php</kbd>',
+		'tos' => array(
+			'disabled' => 'не зададзена',
+			'enabled' => '<a href="./?a=tos">уключана</a>',
+			'help' => 'Як <a href="https://freshrss.github.io/FreshRSS/en/admins/12_User_management.html#enable-terms-of-service-tos" target="_blank">уключыць умовы выкарыстання</a>',
+		),
+		'websub' => array(
+			'help' => 'Пра <a href="https://freshrss.github.io/FreshRSS/en/users/WebSub.html" target="_blank">WebSub</a>',
+		),
+	),
+	'update' => array(
+		'_' => 'Абнаўленне FreshRSS',
+		'apply' => 'Пачаць абнаўленне',
+		'changelog' => 'Журнал змяненняў',
+		'check' => 'Праверыць наяўнасць абнаўленняў',
+		'copiedFromURL' => 'update.php скапіраваны з %s у ./data',
+		'current_version' => 'Бягучая ўсталяваная версія',
+		'last' => 'Апошняя праверка',
+		'loading' => 'Абнаўленне…',
+		'none' => 'Абнаўленняў няма',
+		'releaseChannel' => array(
+			'_' => 'Канал выпускаў',
+			'edge' => 'Бесперапынны выпуск («edge»)',
+			'latest' => 'Стабільны выпуск («latest»)',
+		),
+		'title' => 'Абнаўленне FreshRSS',
+		'viaGit' => 'Запушчана абнаўленне праз git і GitHub.com',
+	),
+	'user' => array(
+		'admin' => 'Адміністратар',
+		'article_count' => 'Артыкулаў',
+		'back_to_manage' => '← Вярнуцца да спісу карыстальнікаў',
+		'create' => 'Стварэнне новага карыстальніка',
+		'database_size' => 'Памер базы даных',
+		'email' => 'Адрас электроннай пошты',
+		'enabled' => 'Уключаны',
+		'feed_count' => 'Стужак',
+		'is_admin' => 'Адміністратар',
+		'language' => 'Мова',
+		'last_user_activity' => 'Апошняя актыўнасць',
+		'list' => 'Спіс карыстальнікаў',
+		'number' => 'Створаны %d уліковы запіс',
+		'numbers' => 'Створана %d уліковых запісаў',
+		'password_form' => 'Пароль<br /><small>(для ўваходу праз вэб-форму)</small>',
+		'password_format' => 'Не менш за 7 сімвалаў',
+		'title' => 'Кіраванне карыстальнікамі',
+		'username' => 'Імя карыстальніка',
+	),
+);

+ 33 - 0
app/i18n/be/api.php

@@ -0,0 +1,33 @@
+<?php
+
+/******************************************************************************
+ * Each entry of that file can be associated with a comment to indicate its   *
+ * state. When there is no comment, it means the entry is fully translated.   *
+ * The recognized comments are (comment matching is case-insensitive):        *
+ *   + TODO: the entry has never been translated.                             *
+ *   + DIRTY: the entry has been translated but needs to be updated.          *
+ *   + IGNORE: the entry does not need to be translated.                      *
+ * When a comment is not recognized, it is discarded.                         *
+ ******************************************************************************/
+
+return array(
+	'information' => array(
+		'address' => 'Адрас API:',
+		'output' => array(
+			'encoding-support' => '⚠️ УВАГА: няма падтрымкі <code>%2F</code>, некаторыя кліенты могуць не працаваць!',
+			'invalid-configuration' => '⚠️ УВАГА: верагодна, няправільны базавы URL-адрас у ./data/config.php',
+			'pass' => '✔️ ПРАЙШОЎ',
+			'unknown-error' => '❌',
+		),
+		'test' => array(
+			'fever' => 'Праверка канфігурацыі Fever API:',
+			'greader' => 'Праверка канфігурацыі Google Reader API:',
+		),
+		'title' => array(
+			'_' => 'Кропкі доступу FreshRSS API',
+			'extension' => 'API для пашырэнняў',
+			'fever' => 'API, сумяшчальны з Fever',
+			'greader' => 'API, сумяшчальны з Google Reader',
+		),
+	),
+);

+ 384 - 0
app/i18n/be/conf.php

@@ -0,0 +1,384 @@
+<?php
+
+/******************************************************************************
+ * Each entry of that file can be associated with a comment to indicate its   *
+ * state. When there is no comment, it means the entry is fully translated.   *
+ * The recognized comments are (comment matching is case-insensitive):        *
+ *   + TODO: the entry has never been translated.                             *
+ *   + DIRTY: the entry has been translated but needs to be updated.          *
+ *   + IGNORE: the entry does not need to be translated.                      *
+ * When a comment is not recognized, it is discarded.                         *
+ ******************************************************************************/
+
+return array(
+	'archiving' => array(
+		'_' => 'Архіваванне',
+		'exception' => 'Выключэнне з ачысткі',
+		'help' => 'Дадатковыя параметры даступныя ў наладах асобнай стужкі',
+		'keep_favourites' => 'Ніколі не выдаляць абранае',
+		'keep_labels' => 'Ніколі не выдаляць меткі',
+		'keep_max' => 'Максімальная колькасць артыкулаў для захавання ў стужцы',
+		'keep_min_by_feed' => 'Мінімальная колькасць артыкулаў для захавання ў стужцы',
+		'keep_period' => 'Максімальны ўзрост артыкулаў для захавання',
+		'keep_unreads' => 'Ніколі не выдаляць непрачытаныя артыкулы',
+		'maintenance' => 'Абслугоўванне',
+		'optimize' => 'Аптымізаваць базу даных',
+		'optimize_help' => 'Запускайце перыядычна, каб паменшыць памер базы даных',
+		'policy' => 'Палітыка ачысткі',
+		'policy_warning' => 'Калі палітыка ачысткі не выбрана, усе артыкулы будуць захоўвацца.',
+		'purge_now' => 'Ачысціць зараз',
+		'title' => 'Архіваванне',
+		'ttl' => 'Мінімальны інтэрвал аўтаматычнага абнаўлення',
+	),
+	'display' => array(
+		'_' => 'Выгляд',
+		'article' => array(
+			'authors_date' => array(
+				'_' => 'Аўтары і дата',
+				'both' => 'У загалоўку і падвале',
+				'footer' => 'У падвале',
+				'header' => 'У загалоўку',
+				'none' => 'Няма',
+			),
+			'feed_name' => array(
+				'above_title' => 'Над назвай/тэгамі',
+				'none' => 'Няма',
+				'with_authors' => 'У радку аўтараў і даты',
+			),
+			'feed_title' => 'Назва стужкі',
+			'icons' => array(
+				'_' => 'Пазіцыя значкоў артыкула<br /><small>(толькі ў выглядзе чытання)</small>',
+				'above_title' => 'Над назвай',
+				'with_authors' => 'У радку аўтараў і даты',
+			),
+			'tags' => array(
+				'_' => 'Тэгі',
+				'both' => 'У загалоўку і падвале',
+				'footer' => 'У падвале',
+				'header' => 'У загалоўку',
+				'none' => 'Няма',
+			),
+			'tags_max' => array(
+				'_' => 'Максімум тэгаў на артыкул',
+				'help' => '0 азначае: паказваць усе тэгі і не згортваць іх',
+			),
+		),
+		'darkMode' => array(
+			'_' => 'Аўтаматычны цёмны рэжым',
+			'auto' => 'Аўта',
+			'help' => 'Толькі для сумяшчальных тэм',
+			'no' => 'Не',
+		),
+		'display_enclosures' => 'Паказваць укладанні',
+		'headline' => array(
+			'articles_header_footer' => 'Артыкулы: загаловак/падвал',
+		),
+		'icon' => array(
+			'bottom_line' => 'Ніжняя лінія',
+			'display_authors' => 'Аўтары',
+			'entry' => 'Значкі артыкула',
+			'publication_date' => 'Дата публікацыі',
+			'related_tags' => 'Тэгі артыкула',
+			'sharing' => 'Абагульванне',
+			'summary' => 'Кароткі змест',
+			'top_line' => 'Верхняя лінія',
+		),
+		'language' => 'Мова',
+		'notif_html5' => array(
+			'seconds' => 'Секунд (0 азначае адсутнасць тайм-аўту)',
+			'timeout' => 'Тайм-аўт апавяшчэння HTML5',
+		),
+		'show_nav_buttons' => 'Паказваць кнопкі навігацыі',
+		'show_title_unread' => 'Паказваць колькасць непрачытаных артыкулаў у назве',
+		'show_unread_count' => array(
+			'_' => 'Паказваць колькасць непрачытаных на бакавой панэлі',
+			'all' => 'Для ўсіх катэгорый і стужак',
+			'important' => 'Толькі для важных стужак',
+			'important_locked' => 'Важныя стужкі заўсёды паказваюць колькасць непрачытаных.',
+			'none' => 'Ніколі',
+		),
+		'sidebar_hidden_by_default' => 'Хаваць бакавую панэль прадвызначана',
+		'theme' => array(
+			'_' => 'Тэма',
+			'deprecated' => array(
+				'_' => 'Састарэлая',
+				'description' => 'Гэта тэма больш не з\'яўляецца тэмай, што падтрымліваецца, і больш не будзе даступная ў <a href="https://freshrss.github.io/FreshRSS/en/users/05_Configuration.html#theme" target="_blank">будучым выпуску FreshRSS</a>',
+			),
+		),
+		'theme_not_available' => 'Тэма «%s» больш не даступная. Выберыце іншую тэму.',
+		'thumbnail' => array(
+			'label' => 'Мініяцюра',
+			'landscape' => 'Альбомная',
+			'none' => 'Няма',
+			'portrait' => 'Кніжная',
+			'square' => 'Квадратная',
+		),
+		'timezone' => 'Часавы пояс',
+		'title' => 'Выгляд',
+		'website' => array(
+			'full' => 'Значок і назва',
+			'icon' => 'Толькі значок',
+			'label' => 'Вэб-сайт',
+			'name' => 'Толькі назва',
+			'none' => 'Няма',
+		),
+		'width' => array(
+			'content' => 'Шырыня змесціва',
+			'large' => 'Шырокая',
+			'medium' => 'Сярэдняя',
+			'no_limit' => 'На ўсю шырыню',
+			'thin' => 'Вузкая',
+		),
+	),
+	'logs' => array(
+		'loglist' => array(
+			'level' => 'Узровень журнала',
+			'message' => 'Паведамленне журнала',
+			'timestamp' => 'Пазнака часу',
+		),
+		'pagination' => array(
+			'first' => 'Першая',
+			'last' => 'Апошняя',
+			'next' => 'Наступная',
+			'previous' => 'Папярэдняя',
+		),
+	),
+	'mark_read_button' => array(
+		'_' => 'Кнопка «Пазначыць усё як прачытанае»',
+		'big' => 'Вялікая',
+		'none' => 'Няма',
+		'small' => 'Малая',
+	),
+	'notification' => array(
+		'html5_enable_notif' => 'Уключыць апавяшчэнні',
+	),
+	'notification_timeout' => array(
+		'bad' => array(
+			'label' => 'Паказваць банер папярэджання',
+			'seconds' => 'секунд (не менш за 1)',
+		),
+		'good' => array(
+			'label' => 'Паказваць банер пацвярджэння',
+			'seconds' => 'секунд (0 азначае, што банер не паказваецца)',
+		),
+	),
+	'privacy' => array(
+		'_' => 'Прыватнасць',
+		'retrieve_extension_list' => 'Атрымліваць спіс пашырэнняў',
+		'send_referrer_allowlist' => 'Сайты, якім дазволена бачыць адрас сервера (%s)',
+	),
+	'profile' => array(
+		'_' => 'Кіраванне профілем',
+		'api' => array(
+			'_' => 'Знешні доступ праз API',
+			'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="https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#access-via-mobile-app" target=_blank>дакументацыю</a>',
+			'security_warning' => 'Выкарыстоўвайце HTTPS. Пароль API перадаецца ў адкрытым выглядзе і можа з\'явіцца ў журналах сервера, калі яго перадаць праз GET.',
+		),
+		'change_password' => 'Змяніць пароль',
+		'confirm_new_password' => 'Пацвердзіце новы пароль',
+		'current_password' => 'Бягучы пароль<br /><small>(для спосабу ўваходу праз вэб-форму)</small>',
+		'delete' => array(
+			'_' => 'Выдаленне ўліковага запісу',
+			'warn' => 'Уліковы запіс і ўсе звязаныя даныя будуць выдалены.',
+		),
+		'email' => 'Адрас электроннай пошты',
+		'new_password' => 'Новы пароль',
+		'password_api' => 'Пароль API<br /><small>(напрыклад, для мабільных праграм)</small>',
+		'password_format' => 'Не менш за 7 сімвалаў',
+		'title' => 'Профіль',
+	),
+	'query' => array(
+		'_' => 'Карыстальніцкія запыты',
+		'create' => 'Стварыць новы карыстальніцкі запыт',
+		'deprecated' => 'Гэты запыт больш не сапраўдны. Звязаная катэгорыя або стужка была выдалена.',
+		'description' => 'Апісанне',
+		'filter' => array(
+			'_' => 'Ужыты фільтр:',
+			'categories' => 'Паказваць па катэгорыі',
+			'feeds' => 'Паказваць па стужцы',
+			'include_article_tags_label' => 'Уключаць меткі артыкулаў са стужак',
+			'include_user_labels_label' => 'Уключаць меткі карыстальнікаў з прэфіксам:',
+			'order' => 'Сартаванне па даце',
+			'search' => 'Выраз',
+			'shareOpml' => 'Уключаць абагульванне праз OPML адпаведных катэгорый і стужак',
+			'shareRss' => 'Уключаць абагульванне праз HTML &amp; RSS',
+			'state' => 'Стан',
+			'tags' => 'Паказваць па метцы',
+			'type' => 'Тып',
+		),
+		'get_A' => 'Усе стужкі, у тым ліку паказаныя ў сваёй катэгорыі',
+		'get_Z' => 'Усе стужкі, у тым ліку архіўныя',
+		'get_all' => 'Паказваць усе артыкулы',
+		'get_all_labels' => 'Паказваць артыкулы з любой меткай',
+		'get_category' => 'Паказваць катэгорыю «%s»',
+		'get_favorite' => 'Паказваць абраныя артыкулы',
+		'get_feed' => 'Паказваць стужку «%s»',
+		'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' => 'URL-адрас відарыса',
+		'name' => 'Назва',
+		'no_filter' => 'Без фільтра',
+		'no_queries' => array(
+			'_' => 'Пакуль няма захаваных карыстальніцкіх запытаў.',
+			'help' => 'Глядзіце <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">дакументацыю</a>',
+		),
+		'number' => 'Запыт №%d',
+		'order_asc' => 'Спачатку паказваць найстарэйшыя артыкулы',
+		'order_desc' => 'Спачатку паказваць найноўшыя артыкулы',
+		'search' => 'Шукаць «%s»',
+		'share' => array(
+			'_' => 'Абагульваць гэты запыт па спасылцы',
+			'disabled' => array(
+				'_' => 'адключана',
+				'title' => 'Абагульванне',
+			),
+			'greader' => 'Спасылка для абагульвання JSON GReader',
+			'help' => 'Дайце гэту спасылку, калі хочаце абагуліць гэты запыт з кім-небудзь',
+			'html' => 'Спасылка для абагульвання HTML-старонкі',
+			'opml' => 'Спасылка для абагульвання спісу стужак OPML',
+			'rss' => 'Спасылка для абагульвання RSS-стужкі',
+		),
+		'state_all' => 'Паказваць усе артыкулы',
+		'state_favorite' => 'Паказваць абраныя артыкулы',
+		'state_not_favorite' => 'Паказваць не абраныя артыкулы',
+		'state_read' => 'Паказваць прачытаныя артыкулы',
+		'state_read_favorite' => 'Паказваць прачытаныя абраныя артыкулы',
+		'state_read_not_favorite' => 'Паказваць прачытаныя не абраныя артыкулы',
+		'state_unread' => 'Паказваць непрачытаныя артыкулы',
+		'state_unread_favorite' => 'Паказваць непрачытаныя абраныя артыкулы',
+		'state_unread_not_favorite' => 'Паказваць непрачытаныя артыкулы, якія не ў абраным',
+		'title' => 'Карыстальніцкія запыты',
+	),
+	'reading' => array(
+		'_' => 'Чытанне',
+		'after_onread' => 'Пасля «Пазначыць усё як прачытанае»,',
+		'always_show_favorites' => 'Прадвызначана паказваць усе артыкулы ў абраным',
+		'apply_to_individual_feed' => 'Ужываецца да стужак асобна',
+		'articles_per_page' => 'Колькасць артыкулаў на старонцы',
+		'auto_load_more' => 'Загружаць больш артыкулаў унізе старонкі',
+		'auto_remove_article' => 'Хаваць артыкулы пасля прачытання',
+		'confirm_enabled' => 'Паказваць дыялогавае акно пацвярджэння пры дзеяннях «Пазначыць усё як прачытанае»',
+		'display_articles_unfolded' => 'Прадвызначана паказваць артыкулы разгорнутымі',
+		'display_categories_unfolded' => 'Разгортваць катэгорыі',
+		'headline' => array(
+			'articles' => 'Артыкулы: адкрыць/закрыць',
+			'categories' => 'Бакавая панэль: катэгорыі',
+			'mark_as_read' => 'Пазначыць артыкул як прачытаны',
+			'misc' => 'Рознае',
+			'view' => 'Выгляд',
+		),
+		'hide_read_feeds' => 'Хаваць катэгорыі і стужкі без непрачытаных артыкулаў (не працуе з канфігурацыяй «Паказваць усе артыкулы»)',
+		'img_with_lazyload' => 'Выкарыстоўваць рэжым <em>адкладзенай загрузкі</em> для загрузкі відарысаў',
+		'jump_next' => 'Перайсці да наступнага непрачытанага суседняга артыкула',
+		'mark_updated_article_unread' => 'Пазначаць абноўленыя артыкулы як непрачытаныя',
+		'number_divided_when_reader' => 'Дзяліць на 2 у рэжыме чытання',
+		'read' => array(
+			'article_open_on_website' => 'калі артыкул адкрыты на зыходным вэб-сайце',
+			'article_viewed' => 'калі артыкул прагледжаны',
+			'focus' => 'пры фокусе (за выключэннем важных стужак)',
+			'keep_max_n_unread' => 'Максімальная колькасць артыкулаў, якія трэба пакідаць непрачытанымі',
+			'scroll' => 'пры пракручванні (за выключэннем важных стужак)',
+			'upon_gone' => 'калі яго больш няма ў зыходнай стужцы навін',
+			'upon_reception' => 'пры атрыманні артыкула',
+			'when' => 'Пазначаць артыкул як прачытаны…',
+			'when_same_guid_in_category' => 'калі ідэнтычны GUID ужо існуе сярод <i>n</i> найноўшых артыкулаў катэгорыі',
+			'when_same_title_in_category' => 'калі ідэнтычны загаловак ужо існуе сярод <i>n</i> найноўшых артыкулаў катэгорыі',
+			'when_same_title_in_feed' => 'калі ідэнтычны загаловак ужо існуе сярод <i>n</i> найноўшых артыкулаў стужкі',
+		),
+		'show' => array(
+			'_' => 'Артыкулы для паказу',
+			'active_category' => 'Актыўная катэгорыя',
+			'adaptive' => 'Паказваць непрачытаныя, калі яны ёсць, інакш — усе артыкулы',
+			'all_articles' => 'Паказваць усе артыкулы',
+			'all_categories' => 'Усе катэгорыі',
+			'no_category' => 'Без катэгорыі',
+			'remember_categories' => 'Запамінаць адкрытыя катэгорыі',
+			'unread' => 'Паказваць непрачытаныя',
+			'unread_or_favorite' => 'Паказваць непрачытаныя і абранае',
+		),
+		'show_fav_unread_help' => 'Ужываецца таксама да метак',
+		'sides_close_article' => 'Закрываць артыкул пры націсканні па-за вобласцю тэксту',
+		'star' => array(
+			'when' => 'Пазначаць артыкул як абраны…',
+		),
+		'sticky_post' => 'Замацоўваць артыкул уверсе пры адкрыцці',
+		'sticky_sort' => 'Захоўваць карыстальніцкі парадак сартавання падчас навігацыі',
+		'sticky_sort_help' => 'Вызначае, ці захоўваецца апошні карыстальніцкі парадак сартавання, ці кожная катэгорыя або стужка заўсёды выкарыстоўвае ўласную прадвызначаную або глабальную наладу.',
+		'title' => 'Чытанне',
+		'view' => array(
+			'default' => 'Прадвызначаны выгляд',
+			'global' => 'Глабальны выгляд',
+			'normal' => 'Звычайны выгляд',
+			'reader' => 'Рэжым чытання',
+		),
+	),
+	'sharing' => array(
+		'_' => 'Абагульванне',
+		'add' => 'Дадаць спосаб абагульвання',
+		'bluesky' => 'Bluesky',	// IGNORE
+		'deprecated' => 'Гэты сэрвіс састарэў і будзе выдалены з FreshRSS у <a href="https://freshrss.github.io/FreshRSS/en/users/08_sharing_services.html" title="Open documentation for more information" target="_blank">будучым выпуску</a>.',
+		'diaspora' => 'Diaspora*',	// IGNORE
+		'email' => 'Электронная пошта',
+		'facebook' => 'Facebook',	// IGNORE
+		'more_information' => 'Дадатковыя звесткі',
+		'print' => 'Друк',
+		'raindrop' => 'Raindrop.io',	// IGNORE
+		'remove' => 'Выдаліць спосаб абагульвання',
+		'shaarli' => 'Shaarli',	// IGNORE
+		'share_name' => 'Назва абагульвання для паказу',
+		'share_url' => 'URL-адрас абагульвання',
+		'title' => 'Абагульванне',
+		'twitter' => 'Twitter',	// IGNORE
+		'wallabag' => 'wallabag',	// IGNORE
+	),
+	'shortcut' => array(
+		'_' => 'Спалучэнні клавіш',
+		'article_action' => 'Дзеянні з артыкулам',
+		'auto_share' => 'Абагуліць',
+		'auto_share_help' => 'Калі ёсць толькі адзін спосаб абагульвання, выкарыстоўваецца ён. У іншым выпадку спосабы выбіраюцца па іх нумарах.',
+		'close_menus' => 'Закрыць меню',
+		'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' => 'Адкрыць наступны артыкул',
+		'next_unread_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_aside' => 'Пераключыць бакавую панэль',
+		'toggle_media' => 'Прайграць/прыпыніць медыя',
+		'user_filter' => 'Атрымаць доступ да карыстальніцкіх запытаў',
+		'user_filter_help' => 'Калі ёсць толькі адзін карыстальніцкі запыт, выкарыстоўваецца ён. У іншым выпадку запыты выбіраюцца па іх нумарах.',
+		'views' => 'Прагляды',
+	),
+	'user' => array(
+		'articles_and_size' => '%s артыкулаў (%s)',
+		'current' => 'Бягучы карыстальнік',
+		'is_admin' => 'Адміністратар',
+		'users' => 'Карыстальнікі',
+	),
+);

+ 152 - 0
app/i18n/be/feedback.php

@@ -0,0 +1,152 @@
+<?php
+
+/******************************************************************************
+ * Each entry of that file can be associated with a comment to indicate its   *
+ * state. When there is no comment, it means the entry is fully translated.   *
+ * The recognized comments are (comment matching is case-insensitive):        *
+ *   + TODO: the entry has never been translated.                             *
+ *   + DIRTY: the entry has been translated but needs to be updated.          *
+ *   + IGNORE: the entry does not need to be translated.                      *
+ * When a comment is not recognized, it is discarded.                         *
+ ******************************************************************************/
+
+return array(
+	'access' => array(
+		'denied' => 'У вас няма дазволу на доступ да гэтай старонкі',
+		'not_found' => 'Вы шукаеце старонку, якой не існуе',
+	),
+	'admin' => array(
+		'optimization_complete' => 'Аптымізацыя завершана',
+	),
+	'api' => array(
+		'password' => array(
+			'failed' => 'Немагчыма змяніць пароль',
+			'updated' => 'Пароль зменены',
+		),
+	),
+	'auth' => array(
+		'login' => array(
+			'invalid' => 'Няправільны лагін',
+			'success' => 'Вы падключаныя',
+		),
+		'logout' => array(
+			'success' => 'Вы адключаныя',
+		),
+	),
+	'conf' => array(
+		'error' => 'Падчас захавання канфігурацыі адбылася памылка',
+		'query_created' => 'Запыт «%s» створаны.',
+		'shortcuts_updated' => 'Спалучэнні клавіш абноўлены',
+		'updated' => 'Канфігурацыя абноўлена',
+	),
+	'extensions' => array(
+		'already_enabled' => '%s ужо ўключана',
+		'cannot_remove' => '%s нельга выдаліць',
+		'disable' => array(
+			'ko' => '%s нельга адключыць. <a href="%s">Праверце журналы FreshRSS</a>, каб даведацца падрабязнасці.',
+			'ok' => '%s цяпер адключана',
+		),
+		'enable' => array(
+			'ko' => '%s нельга ўключыць. <a href="%s">Праверце журналы FreshRSS</a>, каб даведацца падрабязнасці.',
+			'ok' => '%s цяпер уключана',
+		),
+		'invalid_view_mode' => 'Няправільны рэжым выгляду «%s»! Вяртанне да «Звычайнага выгляду».',
+		'no_access' => 'У вас няма доступу да %s',
+		'not_enabled' => '%s не ўключана',
+		'not_found' => '%s не існуе',
+		'removed' => '%s выдалена',
+	),
+	'import_export' => array(
+		'export_no_zip_extension' => 'На серверы адсутнічае пашырэнне ZIP. Паспрабуйце экспартаваць файлы па адным.',
+		'feeds_imported' => 'Стужкі імпартаваны. Калі імпарт завершаны, можна націснуць кнопку <i>Абнавіць стужкі</i>.',
+		'feeds_imported_with_errors' => 'Стужкі імпартаваны, але ўзніклі некаторыя памылкі. Калі імпарт завершаны, можна націснуць кнопку <i>Абнавіць стужкі</i>.',
+		'file_cannot_be_uploaded' => 'Не ўдалося запампаваць файл!',
+		'no_zip_extension' => 'На серверы адсутнічае пашырэнне ZIP.',
+		'zip_error' => 'Падчас апрацоўкі ZIP узнікла памылка.',
+	),
+	'profile' => array(
+		'error' => 'Немагчыма змяніць профіль',
+		'passwords_dont_match' => 'Паролі не супадаюць',
+		'updated' => 'Профіль зменены',
+	),
+	'sub' => array(
+		'actualize' => 'Абнаўленне',
+		'articles' => array(
+			'marked_read' => 'Выбраныя артыкулы пазначаны як прачытаныя.',
+			'marked_unread' => 'Артыкулы пазначаны як непрачытаныя.',
+		),
+		'category' => array(
+			'created' => 'Катэгорыя %s створана.',
+			'deleted' => 'Катэгорыя выдалена.',
+			'emptied' => 'Катэгорыя ачышчана',
+			'error' => 'Немагчыма абнавіць катэгорыю',
+			'name_exists' => 'Назва катэгорыі ўжо існуе.',
+			'no_id' => 'Трэба ўказаць ідэнтыфікатар катэгорыі.',
+			'no_name' => 'Назва катэгорыі не можа быць пустой.',
+			'not_delete_default' => 'Нельга выдаліць прадвызначаную катэгорыю!',
+			'not_exist' => 'Катэгорыя не існуе!',
+			'over_max' => 'Вы дасягнулі ліміту катэгорый (%d)',
+			'updated' => 'Катэгорыя абноўлена.',
+		),
+		'feed' => array(
+			'actualized' => '<em>%s</em> абноўлена',
+			'actualizeds' => 'RSS-стужкі абноўлены',
+			'added' => 'RSS-стужка <em>%s</em> дададзена',
+			'already_subscribed' => 'Вы ўжо падпісаліся на <em>%s</em>',
+			'cache_cleared' => 'Кэш <em>%s</em> ачышчаны',
+			'deleted' => 'Стужка выдалена',
+			'error' => 'Немагчыма абнавіць стужку',
+			'favicon' => array(
+				'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>',
+			'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' => 'Не ўдалося загрузіць змесціва сайта.',
+				'no_entries' => 'У гэтай стужцы няма артыкулаў. Для стварэння перадпрагляду патрэбны як мінімум адзін артыкул.',
+				'no_feed' => 'Унутраная памылка (стужка не знойдзена).',
+				'no_result' => 'Селектар не адпавядае ніводнаму элементу. Замест гэтага будзе паказаны зыходны тэкст стужкі.',
+				'selector_empty' => 'Селектар пусты. Для стварэння перадпрагляду трэба задаць селектар.',
+			),
+			'updated' => 'Стужка абноўлена',
+		),
+		'purge_completed' => 'Ачыстка завершана (%d артыкулаў выдалена)',
+	),
+	'tag' => array(
+		'created' => 'Метка «%s» створана.',
+		'error' => 'Не ўдалося абнавіць метку!',
+		'name_exists' => 'Назва меткі ўжо існуе.',
+		'renamed' => 'Метка «%s» перайменавана ў «%s».',
+		'updated' => 'Метка абноўлена.',
+	),
+	'update' => array(
+		'can_apply' => 'Даступна абнаўленне FreshRSS: <strong>версія %s</strong>.',
+		'error' => 'Падчас абнаўлення ўзнікла памылка: %s',
+		'file_is_nok' => 'Даступна абнаўленне FreshRSS (<strong>версія %s</strong>), але праверце правы доступу да каталога <em>%s</em>. HTTP-сервер павінен мець права на запіс.',
+		'finished' => 'Абнаўленне завершана!',
+		'none' => 'Абнаўленняў няма',
+		'server_not_found' => 'Сервер абнаўленняў не знойдзены. [%s]',
+	),
+	'user' => array(
+		'created' => array(
+			'_' => 'Карыстальнік %s створаны',
+			'error' => 'Немагчыма стварыць карыстальніка %s',
+		),
+		'deleted' => array(
+			'_' => 'Карыстальнік %s выдалены',
+			'error' => 'Немагчыма выдаліць карыстальніка %s',
+		),
+		'updated' => array(
+			'_' => 'Карыстальнік %s абноўлены',
+			'error' => 'Карыстальнік %s не абноўлены',
+		),
+	),
+);

+ 351 - 0
app/i18n/be/gen.php

@@ -0,0 +1,351 @@
+<?php
+
+/******************************************************************************
+ * Each entry of that file can be associated with a comment to indicate its   *
+ * state. When there is no comment, it means the entry is fully translated.   *
+ * The recognized comments are (comment matching is case-insensitive):        *
+ *   + TODO: the entry has never been translated.                             *
+ *   + DIRTY: the entry has been translated but needs to be updated.          *
+ *   + IGNORE: the entry does not need to be translated.                      *
+ * When a comment is not recognized, it is discarded.                         *
+ ******************************************************************************/
+
+return array(
+	'action' => array(
+		'actualize' => 'Абнавіць стужкі',
+		'add' => 'Дадаць',
+		'back_to_rss_feeds' => '← Вярнуцца да RSS-стужак',
+		'cancel' => 'Скасаваць',
+		'close' => 'Закрыць',
+		'create' => 'Стварыць',
+		'delete_all_feeds' => 'Выдаліць усе стужкі',
+		'delete_errored_feeds' => 'Выдаліць стужкі з памылкамі',
+		'delete_muted_feeds' => 'Выдаліць прыглушаныя стужкі',
+		'demote' => 'Панізіць',
+		'disable' => 'Адключыць',
+		'download' => 'Спампаваць',
+		'empty' => 'Апаражніць',
+		'enable' => 'Уключыць',
+		'export' => 'Экспартаваць',
+		'filter' => 'Фільтр',
+		'import' => 'Імпартаваць',
+		'load_default_shortcuts' => 'Загрузіць прадвызначаныя спалучэнні клавіш',
+		'manage' => 'Наладзіць',
+		'mark_read' => 'Пазначыць як прачытанае',
+		'menu' => array(
+			'open' => 'Адкрыць меню',
+		),
+		'nav_buttons' => array(
+			'next' => 'Перайсці да наступнага артыкула',
+			'prev' => 'Перайсці да папярэдняга артыкула',
+			'up' => 'Перайсці ўверх',
+		),
+		'open_url' => 'Адкрыць URL-адрас',
+		'promote' => 'Павысіць',
+		'purge' => 'Ачысціць',
+		'refresh_opml' => 'Абнавіць OPML',
+		'remove' => 'Выдаліць',
+		'rename' => 'Перайменаваць',
+		'see_website' => 'Праглядзець сайт',
+		'submit' => 'Адправіць',
+		'truncate' => 'Выдаліць усе артыкулы',
+		'update' => 'Абнавіць',
+	),
+	'auth' => array(
+		'accept_tos' => 'Я прымаю <a href="%s">ўмовы выкарыстання</a>.',
+		'email' => 'Адрас электроннай пошты',
+		'keep_logged_in' => 'Не выходзіць з уліковага запісу <small>(%s сут)</small>',
+		'login' => 'Увайсці',
+		'logout' => 'Выйсці',
+		'password' => array(
+			'_' => 'Пароль',
+			'format' => '<small>Не менш за 7 сімвалаў</small>',
+		),
+		'reauth' => array(
+			'header' => 'Патрабуецца паўторная аўтэнтыфікацыя',
+			'tip' => 'Паўторны ўваход не спатрэбіцца на працягу <u>%d хв</u>',
+			'title' => 'Паўторная аўтэнтыфікацыя',
+		),
+		'registration' => array(
+			'_' => 'Новы ўліковы запіс',
+			'ask' => 'Стварыць уліковы запіс?',
+			'title' => 'Стварэнне ўліковага запісу',
+		),
+		'username' => array(
+			'_' => 'Імя карыстальніка',
+			'format' => '<small>1-39 сімвалаў: літары, лічбы і <code>. _ @ -</code></small>',
+		),
+	),
+	'date' => array(
+		'Apr' => '\\к\\р\\а\\с\\а\\в\\і\\к\\а',
+		'Aug' => '\\ж\\н\\і\\ў\\н\\я',
+		'Dec' => '\\с\\н\\е\\ж\\н\\я',
+		'Feb' => '\\л\\ю\\т\\а\\г\\а',
+		'Jan' => '\\с\\т\\у\\д\\з\\е\\н\\я',
+		'Jul' => '\\л\\і\\п\\е\\н\\я',
+		'Jun' => '\\ч\\э\\р\\в\\е\\н\\я',
+		'Mar' => '\\с\\а\\к\\а\\в\\і\\к\\а',
+		'May' => '\\м\\а\\я',
+		'Nov' => '\\л\\і\\с\\т\\а\\п\\а\\д\\а',
+		'Oct' => '\\к\\а\\с\\т\\р\\ы\\ч\\н\\і\\к\\а',
+		'Sep' => '\\в\\е\\р\\а\\с\\н\\я',
+		'apr' => 'кра',
+		'april' => 'Красавік',
+		'aug' => 'жні',
+		'august' => 'Жнівень',
+		'before_yesterday' => 'Пазаўчора',
+		'dec' => 'сне',
+		'december' => 'Снежань',
+		'feb' => 'лют',
+		'february' => 'Люты',
+		'format_date' => 'j %s Y',	// IGNORE
+		'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',	// IGNORE
+	'freshrss' => array(
+		'_' => 'FreshRSS',	// IGNORE
+		'about' => 'Пра FreshRSS',
+	),
+	'interval' => array(
+		'day' => array(
+			0 => '%d дзень таму',
+			1 => '%d дні таму',
+			2 => '%d дзён таму',
+		),
+		'hour' => array(
+			0 => '%d гадзіну таму',
+			1 => '%d гадзіны таму',
+			2 => '%d гадзін таму',
+		),
+		'justnow' => 'толькі што',
+		'minute' => array(
+			0 => '%d хвіліну таму',
+			1 => '%d хвіліны таму',
+			2 => '%d хвілін таму',
+		),
+		'month' => array(
+			0 => '%d месяц таму',
+			1 => '%d месяцы таму',
+			2 => '%d месяцаў таму',
+		),
+		'second' => array(
+			0 => '%d секунду таму',
+			1 => '%d секунды таму',
+			2 => '%d секунд таму',
+		),
+		'year' => array(
+			0 => '%d год таму',
+			1 => '%d гады таму',
+			2 => '%d гадоў таму',
+		),
+	),
+	'js' => array(
+		'category_empty' => 'Пустая катэгорыя',
+		'confirm_action' => 'Вы ўпэўненыя, што хочаце выканаць гэта дзеянне? Яго нельга скасаваць!',
+		'confirm_action_feed_cat' => 'Вы ўпэўненыя, што хочаце выканаць гэта дзеянне? Вы страціце звязанае абранае і карыстальніцкія запыты. Яго нельга скасаваць!',
+		'confirm_exit_slider' => 'Вы ўпэўненыя, што хочаце скасаваць незахаваныя налады?',
+		'feedback' => array(
+			'body_new_articles' => array(
+				0 => 'На FreshRSS ёсць %d новы артыкул для чытання.',
+				1 => 'На FreshRSS ёсць %d новыя артыкулы для чытання.',
+				2 => 'На FreshRSS ёсць %d новых артыкулаў для чытання.',
+			),
+			'body_unread_articles' => array(
+				0 => '(непрачытана: %d)',
+				1 => '(непрачытана: %d)',
+				2 => '(непрачытана: %d)',
+			),
+			'request_failed' => 'Запыт не атрымаўся; магчыма, прычынай былі праблемы з падключэннем да інтэрнэту.',
+			'title_new_articles' => 'FreshRSS: новыя артыкулы!',
+		),
+		'labels_empty' => 'Няма метак',
+		'new_article' => 'Даступныя новыя артыкулы, націсніце, каб абнавіць старонку.',
+		'should_be_activated' => 'Неабходна ўключыць JavaScript',
+		'unsafe_csp_header' => 'Загаловак CSP, які выкарыстоўваецца, небяспечны, і FreshRSS можа быць уразлівай да атак XSS. <a target="_blank" href="https://freshrss.github.io/FreshRSS/en/admins/10_ServerConfig.html#security">Паглядзіце дакументацыю</a>',
+	),
+	'lang' => array(
+		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
+		'cs' => 'Čeština',	// IGNORE
+		'de' => 'Deutsch',	// IGNORE
+		'el' => 'Ελληνικά',	// IGNORE
+		'en' => 'English',	// IGNORE
+		'en-US' => 'English (United States)',	// IGNORE
+		'es' => 'Español',	// IGNORE
+		'fa' => 'فارسی',	// IGNORE
+		'fi' => 'Suomi',	// IGNORE
+		'fr' => 'Français',	// IGNORE
+		'he' => 'עברית',	// IGNORE
+		'hu' => 'Magyar',	// IGNORE
+		'id' => 'Bahasa Indonesia',	// IGNORE
+		'it' => 'Italiano',	// IGNORE
+		'ja' => '日本語',	// IGNORE
+		'ko' => '한국어',	// IGNORE
+		'lt' => 'Lietuvių',	// IGNORE
+		'lv' => 'Latviešu',	// IGNORE
+		'nl' => 'Nederlands',	// IGNORE
+		'oc' => 'Occitan',	// IGNORE
+		'pl' => 'Polski',	// IGNORE
+		'pt-BR' => 'Português (Brasil)',	// IGNORE
+		'pt-PT' => 'Português (Portugal)',	// IGNORE
+		'ru' => 'Русский',	// IGNORE
+		'sk' => 'Slovenčina',	// IGNORE
+		'tr' => 'Türkçe',	// IGNORE
+		'uk' => 'Українська',	// IGNORE
+		'zh-CN' => '简体中文',	// IGNORE
+		'zh-TW' => '正體中文',	// IGNORE
+	),
+	'menu' => array(
+		'about' => 'Пра праграму',
+		'account' => 'Уліковы запіс',
+		'admin' => 'Адміністраванне',
+		'advanced_search' => 'Пашыраны пошук',
+		'archiving' => 'Архіваванне',
+		'authentication' => 'Аўтэнтыфікацыя',
+		'check_install' => 'Праверка ўсталявання',
+		'configuration' => 'Канфігурацыя',
+		'display' => 'Выгляд',
+		'extensions' => 'Пашырэнні',
+		'logs' => 'Журнал',
+		'privacy' => 'Прыватнасць',
+		'queries' => 'Карыстальніцкія запыты',
+		'reading' => 'Чытанне',
+		'search' => 'Пошук слоў або #тэгаў',
+		'search_help' => 'Глядзіце дакументацыю па пашыраных <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">параметрах пошуку</a>',
+		'sharing' => 'Абагульванне',
+		'shortcuts' => 'Спалучэнні клавіш',
+		'stats' => 'Статыстыка',
+		'system' => 'Канфігурацыя сістэмы',
+		'update' => 'Абнаўленне',
+		'user_management' => 'Кіраванне карыстальнікамі',
+		'user_profile' => 'Профіль',
+	),
+	'period' => array(
+		'days' => 'сут',
+		'hours' => 'гадз',
+		'months' => 'мес',
+		'weeks' => 'тыд',
+		'years' => 'г',
+	),
+	'readme' => array(
+		'contribute' => 'Унесці ўклад',
+		'language' => 'Мова',
+		'translated' => 'Прагрэс',
+	),
+	'search' => array(
+		'advanced_search_help' => 'Гэта форма дапамагае ствараць пошукавыя запыты, але ручныя запыты яшчэ больш магутныя.',
+		'authors' => 'Аўтары',
+		'categories' => 'Катэгорыі',
+		'content' => 'Змесціва',
+		'date_from' => 'Ад',
+		'date_modified' => 'Дата змянення на серверы',
+		'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-адрас',
+		'user_queries' => 'Карыстальніцкія запыты',
+	),
+	'share' => array(
+		'Known' => 'Вядомыя сайты',
+		'archiveIS' => 'archive.is',	// IGNORE
+		'archiveORG' => 'archive.org',	// IGNORE
+		'archivePH' => 'archive.ph',	// IGNORE
+		'bluesky' => 'Bluesky',	// IGNORE
+		'buffer' => 'Buffer',	// IGNORE
+		'clipboard' => 'Буфер абмену',
+		'diaspora' => 'Diaspora*',	// IGNORE
+		'email' => 'Электронная пошта',
+		'email-webmail-firefox-fix' => 'Пошта (вэб-пошта — выпраўленне для Firefox)',
+		'facebook' => 'Facebook',	// IGNORE
+		'gnusocial' => 'GNU social',	// IGNORE
+		'jdh' => 'Journal du hacker',	// IGNORE
+		'lemmy' => 'Lemmy',	// IGNORE
+		'linkace' => 'LinkAce',	// IGNORE
+		'linkding' => 'Linkding',	// IGNORE
+		'linkedin' => 'LinkedIn',	// IGNORE
+		'mastodon' => 'Mastodon',	// IGNORE
+		'movim' => 'Movim',	// IGNORE
+		'nextcloud-bookmarks' => 'Nextcloud Bookmarks',	// IGNORE
+		'omnivore' => 'Omnivore',	// IGNORE
+		'pinboard' => 'Pinboard',	// IGNORE
+		'pinterest' => 'Pinterest',	// IGNORE
+		'print' => 'Друк',
+		'raindrop' => 'Raindrop.io',	// IGNORE
+		'reddit' => 'Reddit',	// IGNORE
+		'shaarli' => 'Shaarli',	// IGNORE
+		'telegram' => 'Telegram',	// IGNORE
+		'twitter' => 'Twitter',	// IGNORE
+		'wallabag' => 'wallabag v1',	// IGNORE
+		'wallabagv2' => 'wallabag v2',	// IGNORE
+		'web-sharing-api' => 'Сістэмнае абагульванне',
+		'whatsapp' => 'Whatsapp',	// IGNORE
+		'xing' => 'Xing',	// IGNORE
+	),
+	'short' => array(
+		'attention' => 'Увага!',
+		'blank_to_disable' => 'Пакіньце пустым, каб адключыць',
+		'by_author' => 'Аўтар:',
+		'by_default' => 'Прадвызначана',
+		'damn' => 'Трасца!',
+		'default_category' => 'Без катэгорыі',
+		'no' => 'Не',
+		'not_applicable' => 'Недаступна',
+		'ok' => 'Добра!',
+		'or' => 'або',
+		'yes' => 'Так',
+	),
+	'stream' => array(
+		'load_more' => 'Паказаць яшчэ артыкулы',
+		'mark_all_read' => 'Пазначыць усё як прачытанае',
+		'nothing_to_load' => 'Больш няма артыкулаў',
+	),
+);

+ 132 - 0
app/i18n/be/index.php

@@ -0,0 +1,132 @@
+<?php
+
+/******************************************************************************
+ * Each entry of that file can be associated with a comment to indicate its   *
+ * state. When there is no comment, it means the entry is fully translated.   *
+ * The recognized comments are (comment matching is case-insensitive):        *
+ *   + TODO: the entry has never been translated.                             *
+ *   + DIRTY: the entry has been translated but needs to be updated.          *
+ *   + IGNORE: the entry does not need to be translated.                      *
+ * When a comment is not recognized, it is discarded.                         *
+ ******************************************************************************/
+
+return array(
+	'about' => array(
+		'_' => 'Пра праграму',
+		'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',	// IGNORE
+		'bug_reports' => array(
+			'environment_information' => array(
+				'_' => 'Сістэмная інфармацыя',
+				'browser' => 'Браўзер',
+				'database' => 'База даных',
+				'server_software' => 'Сервернае праграмнае забеспячэнне',
+				'version_curl' => 'Версія cURL',
+				'version_frss' => 'Версія FreshRSS',
+				'version_php' => 'Версія PHP',
+			),
+		),
+		'bugs_reports' => 'Паведамленні пра памылкі',
+		'documentation' => 'Дакументацыя',
+		'freshrss_description' => 'FreshRSS — гэта агрэгатар і чытальнік RSS, які можна ўсталяваць на ўласным серверы. Ён дазваляе чытаць і сачыць за некалькімі навінавымі сайтамі адначасова, не пераходзячы з аднаго на іншы. FreshRSS — лёгкая праграма, простая ў выкарыстанні і наладжванні.',
+		'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">на GitHub</a>',
+		'license' => 'Ліцэнзія',
+		'project_website' => 'Вэб-сайт праекта',
+		'title' => 'Пра праграму',
+		'version' => 'Версія',
+	),
+	'feed' => array(
+		'empty' => 'Няма артыкулаў для паказу.',
+		'published' => array(
+			'_' => 'Апублікавана',
+			'future' => 'Апублікавана ў будучыні',
+			'today' => 'Апублікавана сёння',
+			'yesterday' => 'Апублікавана ўчора',
+		),
+		'received' => array(
+			'_' => 'Атрымана',
+			'today' => 'Атрымана сёння',
+			'yesterday' => 'Атрымана ўчора',
+		),
+		'rss_of' => 'RSS-стужка %s',
+		'title' => 'Асноўная стужка',
+		'title_fav' => 'Абранае',
+		'title_global' => 'Глабальны выгляд',
+		'userModified' => array(
+			'_' => 'Зменена карыстальнікам',
+			'today' => 'Зменена карыстальнікам сёння',
+			'yesterday' => 'Зменена карыстальнікам учора',
+		),
+	),
+	'log' => array(
+		'_' => 'Журнал',
+		'clear' => 'Ачысціць журнал',
+		'empty' => 'Файл журнала пусты',
+		'title' => 'Журнал',
+	),
+	'menu' => array(
+		'about' => 'Пра FreshRSS',
+		'before_one_day' => 'Старэйшыя за адзін дзень',
+		'before_one_week' => 'Старэйшыя за адзін тыдзень',
+		'bookmark_query' => 'Дадаць бягучы запыт у закладкі',
+		'favorites' => 'Абранае (%s)',
+		'global_view' => 'Глабальны выгляд',
+		'important' => 'Важныя стужкі',
+		'main_stream' => 'Асноўная стужка',
+		'mark_all_read' => 'Пазначыць усё як прачытанае',
+		'mark_cat_read' => 'Пазначыць катэгорыю як прачытаную',
+		'mark_feed_read' => 'Пазначыць стужку як прачытаную',
+		'mark_selection_unread' => 'Пазначыць выбранае як непрачытанае',
+		'mylabels' => 'Мае меткі',
+		'non-starred' => 'Паказваць неабранае',
+		'normal_view' => 'Звычайны выгляд',
+		'queries' => 'Карыстальніцкія запыты',
+		'read' => 'Паказваць прачытанае',
+		'reader_view' => 'Рэжым чытання',
+		'rss_view' => 'RSS-стужка',
+		'search_short' => 'Пошук',
+		'sort' => array(
+			'asc' => 'Па ўзрастанні',
+			'c' => array(
+				'name_asc' => 'Катэгорыя, назвы стужак A→Z',
+				'name_desc' => 'Катэгорыя, назвы стужак Z→A',
+			),
+			'date_asc' => 'Дата публікацыі 1→9',
+			'date_desc' => 'Дата публікацыі 9→1',
+			'desc' => 'Па ўбыванні',
+			'f' => array(
+				'name_asc' => 'Назва стужкі A→Z',
+				'name_desc' => 'Назва стужкі Z→A',
+			),
+			'id_asc' => 'Апошнія атрыманыя — у канцы',
+			'id_desc' => 'Апошнія атрыманыя — спачатку',
+			'length_asc' => 'Даўжыня змесціва 1→9',
+			'length_desc' => 'Даўжыня змесціва 9→1',
+			'link_asc' => 'Спасылка A→Z',
+			'link_desc' => 'Спасылка Z→A',
+			'primary' => array(
+				'_' => 'Крытэрый сартавання',
+				'help' => 'Сартаванне па даце <em>атрымання</em> рэкамендуецца ў большасці выпадкаў для ўзгодненасці і прадукцыйнасці',
+			),
+			'rand' => 'Выпадковы парадак',
+			'secondary' => array(
+				'_' => 'Другасны крытэрый сартавання',
+				'help' => 'Мае значэнне толькі тады, калі асноўным крытэрыем сартавання з\'яўляюцца катэгорыі або назвы стужак',
+			),
+			'title_asc' => 'Назва A→Z',
+			'title_desc' => 'Назва Z→A',
+			'user_modified_asc' => 'Зменены карыстальнікам 1→9',
+			'user_modified_desc' => 'Зменены карыстальнікам 9→1',
+		),
+		'starred' => 'Паказваць абранае',
+		'stats' => 'Статыстыка',
+		'subscription' => 'Кіраванне падпіскамі',
+		'unread' => 'Паказваць непрачытанае',
+	),
+	'share' => 'Абагуліць',
+	'tag' => array(
+		'related' => 'Тэгі артыкула',
+	),
+	'tos' => array(
+		'title' => 'Умовы выкарыстання',
+	),
+);

+ 173 - 0
app/i18n/be/install.php

@@ -0,0 +1,173 @@
+<?php
+
+/******************************************************************************
+ * Each entry of that file can be associated with a comment to indicate its   *
+ * state. When there is no comment, it means the entry is fully translated.   *
+ * The recognized comments are (comment matching is case-insensitive):        *
+ *   + TODO: the entry has never been translated.                             *
+ *   + DIRTY: the entry has been translated but needs to be updated.          *
+ *   + IGNORE: the entry does not need to be translated.                      *
+ * When a comment is not recognized, it is discarded.                         *
+ ******************************************************************************/
+
+return array(
+	'action' => array(
+		'finish' => 'Завяршыць усталяванне',
+		'fix_errors_before' => 'Перад пераходам да наступнага кроку выпраўце ўсе памылкі.',
+		'keep_install' => 'Захаваць папярэднюю канфігурацыю',
+		'next_step' => 'Перайсці да наступнага кроку',
+		'reinstall' => 'Пераўсталяваць FreshRSS',
+	),
+	'bdd' => array(
+		'_' => 'База даных',
+		'conf' => array(
+			'_' => 'Канфігурацыя базы даных',
+			'ko' => 'Праверце канфігурацыю базы даных.',
+			'ok' => 'Канфігурацыя базы даных захавана.',
+		),
+		'host' => 'Хост',
+		'password' => 'Пароль базы даных',
+		'prefix' => 'Прэфікс табліц',
+		'type' => 'Тып базы даных',
+		'username' => 'Імя карыстальніка базы даных',
+	),
+	'check' => array(
+		'_' => 'Праверкі',
+		'already_installed' => 'Выяўлена, што FreshRSS ужо ўсталяваны!',
+		'cache' => array(
+			'nok' => 'Праверце правы доступу да каталога <em>%1$s</em> для карыстальніка <em>%2$s</em>. HTTP-сервер павінен мець права на запіс.',
+			'ok' => 'Правы доступу да каталога кэшу ў парадку.',
+		),
+		'ctype' => array(
+			'nok' => 'Не ўдаецца знайсці неабходную бібліятэку для праверкі тыпаў сімвалаў (php-ctype).',
+			'ok' => 'У вас ёсць неабходная бібліятэка для праверкі тыпаў сімвалаў (ctype).',
+		),
+		'curl' => array(
+			'nok' => 'Не ўдаецца знайсці неабходную бібліятэку cURL (пакет php-curl).',
+			'ok' => 'У вас ёсць неабходная бібліятэка cURL.',
+		),
+		'data' => array(
+			'nok' => 'Праверце правы доступу да каталога <em>%1$s</em> для карыстальніка <em>%2$s</em>. HTTP-сервер павінен мець права на запіс.',
+			'ok' => 'Правы доступу да каталога даных у парадку.',
+		),
+		'database-connection' => array(
+			'nok' => 'Памылка злучэння з базай даных.',
+			'ok' => 'Злучэнне з базай даных наладжана.',
+		),
+		'database-table' => array(
+			'nok' => 'Табліца базы даных «%s» няпоўная.',
+			'ok' => 'Табліца базы даных «%s» у парадку.',
+		),
+		'database-tables' => array(
+			'nok' => 'Некаторыя табліцы базы даных адсутнічаюць.',
+			'ok' => 'Усе табліцы базы даных існуюць.',
+		),
+		'database-title' => 'База даных',
+		'docroot' => array(
+			'nok' => 'Каранёвы каталог дакументаў вэб-сервера, здаецца, не паказвае на папку <code>./p/</code>. Іншыя папкі, такія як <code>./data/</code>, могуць быць агульнадаступнымі.',
+			'ok' => 'Каранёвы каталог вэб-сервера правільна паказвае на папку <code>./p/</code>.',
+		),
+		'dom' => array(
+			'nok' => 'Немагчыма знайсці патрэбную бібліятэку для прагляду DOM.',
+			'ok' => 'У вас ёсць патрэбная бібліятэка для прагляду DOM.',
+		),
+		'favicons' => array(
+			'nok' => 'Праверце правы доступу да каталога <em>%1$s</em> для карыстальніка <em>%2$s</em>. HTTP-сервер павінен мець права на запіс.',
+			'ok' => 'Правы доступу да каталога значкоў у парадку.',
+		),
+		'fileinfo' => array(
+			'nok' => 'Немагчыма знайсці рэкамендаваную бібліятэку PHP fileinfo (пакет fileinfo).',
+			'ok' => 'У вас ёсць рэкамендаваная бібліятэка PHP fileinfo (пакет fileinfo).',
+		),
+		'files' => 'Усталяванне файлаў',
+		'gmp' => array(
+			'nok' => 'Немагчыма знайсці патрэбнае пашырэнне GMP для 32-разраднага PHP (пакет php-gmp).',
+			'ok' => 'У вас ёсць патрэбнае пашырэнне GMP для 32-разраднага PHP.',
+		),
+		'intl' => array(
+			'nok' => 'Немагчыма знайсці рэкамендаваную бібліятэку php-intl для інтэрнацыяналізацыі.',
+			'ok' => 'У вас ёсць рэкамендаваная бібліятэка php-intl для інтэрнацыяналізацыі.',
+		),
+		'json' => array(
+			'nok' => 'Немагчыма знайсці патрэбную бібліятэку для разбору JSON.',
+			'ok' => 'У вас ёсць патрэбная бібліятэка для разбору JSON.',
+		),
+		'mbstring' => array(
+			'nok' => 'Немагчыма знайсці рэкамендаваную бібліятэку mbstring для Unicode.',
+			'ok' => 'У вас ёсць рэкамендаваная бібліятэка mbstring для Unicode.',
+		),
+		'pcre' => array(
+			'nok' => 'Немагчыма знайсці патрэбную бібліятэку для рэгулярных выразаў (php-pcre).',
+			'ok' => 'У вас ёсць патрэбная бібліятэка для рэгулярных выразаў (PCRE).',
+		),
+		'pdo-mysql' => array(
+			'nok' => 'Немагчыма знайсці патрэбны драйвер PDO для MySQL/MariaDB.',
+		),
+		'pdo-pgsql' => array(
+			'nok' => 'Немагчыма знайсці патрэбны драйвер PDO для PostgreSQL.',
+		),
+		'pdo-sqlite' => array(
+			'nok' => 'Немагчыма знайсці драйвер PDO для SQLite.',
+			'ok' => 'У вас ёсць драйвер PDO для SQLite.',
+		),
+		'pdo' => array(
+			'nok' => 'Немагчыма знайсці PDO або адзін з драйвераў, што падтрымліваюцца (pdo_sqlite, pdo_pgsql, pdo_mysql).',
+			'ok' => 'У вас ёсць PDO і прынамсі адзін з драйвераў, што падтрымліваюцца (pdo_sqlite, pdo_pgsql, pdo_mysql).',
+		),
+		'php' => array(
+			'_' => 'Усталяванне PHP',
+			'nok' => 'Версія PHP — %s, але для FreshRSS патрабуецца версія не ніжэйшая за %s.',
+			'ok' => 'Версія PHP (%s) сумяшчальная з FreshRSS.',
+		),
+		'reload' => 'Праверыць яшчэ раз',
+		'tmp' => array(
+			'nok' => 'Праверце правы доступу да каталога <em>%1$s</em> для карыстальніка <em>%2$s</em>. HTTP-сервер павінен мець правы на запіс.',
+			'ok' => 'Правы доступу да часовага каталога ў парадку.',
+		),
+		'tokens' => array(
+			'nok' => 'Праверце правы доступу да каталога <em>./data/tokens</em>. HTTP-сервер павінен мець права на запіс.',
+			'ok' => 'Правы доступу да каталога токенаў у парадку.',
+		),
+		'unknown_process_username' => 'невядома',
+		'users' => array(
+			'nok' => 'Праверце правы доступу да каталога <em>%1$s</em> для карыстальніка <em>%2$s</em>. HTTP-сервер павінен мець правы на запіс.',
+			'ok' => 'Правы доступу да каталога карыстальнікаў у парадку.',
+		),
+		'xml' => array(
+			'nok' => 'Немагчыма знайсці патрэбную бібліятэку для разбору XML.',
+			'ok' => 'У вас ёсць патрэбная бібліятэка для разбору XML.',
+		),
+		'zip' => array(
+			'nok' => 'Немагчыма знайсці рэкамендаванае пашырэнне для ZIP (пакет php-zip).',
+			'ok' => 'У вас ёсць рэкамендаванае пашырэнне для ZIP (пакет php-zip).',
+		),
+	),
+	'conf' => array(
+		'_' => 'Агульныя параметры',
+		'ok' => 'Агульныя параметры захаваны.',
+	),
+	'congratulations' => 'Віншуем!',
+	'default_user' => array(
+		'_' => 'Імя прадвызначанага карыстальніка',
+		'max_char' => '1-39 сімвалаў: літары, лічбы і <code>. _ @ -</code>',
+	),
+	'fix_errors_before' => 'Выпраўце памылкі перад пераходам да наступнага кроку.',
+	'javascript_is_better' => 'FreshRSS прыемней выкарыстоўваць з уключаным JavaScript',
+	'js' => array(
+		'confirm_reinstall' => 'Пераўсталяванне FreshRSS прывядзе да страты папярэдняй канфігурацыі. Вы ўпэўнены, што хочаце працягнуць?',
+	),
+	'language' => array(
+		'_' => 'Мова',
+		'choose' => 'Выберыце мову для FreshRSS',
+		'defined' => 'Мова вызначана.',
+	),
+	'missing_applied_migrations' => 'Нешта пайшло не так; стварыце ўручную пусты файл <em>%s</em>.',
+	'ok' => 'Працэс усталявання паспяхова завершаны.',
+	'session' => array(
+		'nok' => 'Здаецца, вэб-сервер няправільна сканфігураваны для выкарыстання кукі, неабходных для сеансаў PHP!',
+	),
+	'step' => 'крок %d',
+	'steps' => 'Крокі',
+	'this_is_the_end' => 'Гатова',
+	'title' => 'Усталяванне · FreshRSS',
+);

+ 10 - 0
app/i18n/be/plurals.php

@@ -0,0 +1,10 @@
+<?php
+
+// Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
+// This file is generated by cli/compile.plurals.php.
+// Edit the formula comment and run `make fix-all`.
+
+return array(
+	'nplurals' => 3,
+	'plural' => static fn (int $n): int => ($n % 10 === 1 && $n % 100 !== 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2)),
+);

+ 316 - 0
app/i18n/be/sub.php

@@ -0,0 +1,316 @@
+<?php
+
+/******************************************************************************
+ * Each entry of that file can be associated with a comment to indicate its   *
+ * state. When there is no comment, it means the entry is fully translated.   *
+ * The recognized comments are (comment matching is case-insensitive):        *
+ *   + TODO: the entry has never been translated.                             *
+ *   + DIRTY: the entry has been translated but needs to be updated.          *
+ *   + IGNORE: the entry does not need to be translated.                      *
+ * When a comment is not recognized, it is discarded.                         *
+ ******************************************************************************/
+
+return array(
+	'api' => array(
+		'documentation' => 'Скапіруйце наступны URL-адрас, каб выкарыстоўваць яго ў знешнім інструменце.',
+		'title' => 'API',	// IGNORE
+	),
+	'bookmarklet' => array(
+		'documentation' => 'Перацягніце гэту кнопку на панэль закладак або націсніце на яе правай кнопкай мышы і выберыце «Дадаць спасылку ў закладкі». Затым націсніце кнопку «Падпісацца» на любой старонцы, на якую хочаце падпісацца.',
+		'label' => 'Падпісацца',
+		'title' => 'Закладка-скрыпт',
+	),
+	'category' => array(
+		'_' => 'Катэгорыя',
+		'add' => 'Дадаць катэгорыю',
+		'archiving' => 'Архіваванне',
+		'dynamic_opml' => array(
+			'_' => 'Дынамічны OPML',
+			'help' => 'Укажыце URL-адрас <a href="https://opml.org/" target="_blank">файла OPML</a>, каб дынамічна напоўніць гэту катэгорыю стужкамі',
+		),
+		'empty' => 'Пустая катэгорыя',
+		'error' => 'У гэтай дынамічнай катэгорыі OPML узнікла праблема. Праверце, ці па-ранейшаму даступны URL-адрас OPML і ці не перавышана максімальная колькасць стужак на карыстальніка.',
+		'expand' => 'Разгарнуць катэгорыю',
+		'information' => 'Інфармацыя',
+		'open' => 'Адкрыць катэгорыю',
+		'opml_url' => 'URL-адрас OPML',
+		'position' => 'Пазіцыя паказу',
+		'position_help' => 'Для кіравання парадкам сартавання катэгорый',
+		'title' => 'Назва',
+	),
+	'feed' => array(
+		'accept_cookies' => 'Прымаць кукі',
+		'accept_cookies_help' => 'Дазваляе серверу стужкі ўсталёўваць кукі (захоўваюцца ў памяці толькі на час запыту)',
+		'add' => 'Дадаць стужку',
+		'advanced' => 'Дадатковыя',
+		'archiving' => 'Архіваванне',
+		'auth' => array(
+			'configuration' => 'Уваход',
+			'help' => 'Забяспечвае доступ да абароненых праз HTTP RSS-стужак',
+			'http' => 'Аўтэнтыфікацыя HTTP',
+			'password' => 'Пароль HTTP',
+			'username' => 'Імя карыстальніка HTTP',
+		),
+		'change_favicon' => 'Змяніць…',
+		'clear_cache' => 'Заўсёды ачышчаць кэш',
+		'content_action' => array(
+			'_' => 'Дзеянне са змесцівам пры атрыманні змесціва артыкула',
+			'append' => 'Дадаць пасля наяўнага змесціва',
+			'prepend' => 'Дадаць перад наяўным змесцівам',
+			'replace' => 'Замяніць наяўнае змесціва',
+		),
+		'content_retrieval' => 'Атрыманне змесціва',
+		'css_cookie' => 'Кукі пры атрыманні змесціва артыкула',
+		'css_cookie_help' => 'Прыклад: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>',
+		'css_help' => 'Атрымлівае скарочаныя RSS-стужкі (увага, патрабуе больш часу!)',
+		'css_path' => 'CSS-селектар артыкула на арыгінальным вэб-сайце',
+		'css_path_filter' => array(
+			'_' => 'CSS-селектар элементаў для выдалення',
+			'help' => 'CSS-селектар можа быць спісам, напрыклад: <kbd>footer, aside, p[data-sanitized-class~="menu"]</kbd>',
+		),
+		'description' => 'Апісанне',
+		'empty' => 'Гэта стужка пустая. Праверце, ці па-ранейшаму падтрымліваецца яна.',
+		'error' => 'У гэтай стужцы ўзнікла праблема. Калі сітуацыя не зменіцца, праверце, ці па-ранейшаму даступная яна.',
+		'export-as-opml' => array(
+			'download' => 'Спампаваць',
+			'help' => 'Файл XML (падмноства даных. <a href="https://freshrss.github.io/FreshRSS/en/developers/OPML.html" target="_blank">Глядзіце дакументацыю</a>)',
+			'label' => 'Экспартаваць у OPML',
+		),
+		'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' => 'Перадпрагляд фільтраў на наяўных артыкулах (новае акно)',
+		),
+		'global_hint' => 'Выкарыстоўвайце <a href="%s">глабальны выгляд</a>, каб убачыць, колькі артыкулаў у кожнай стужцы адпавядае стану або пошукаваму выразу',
+		'http_headers' => 'Загалоўкі HTTP',
+		'http_headers_help' => 'Загалоўкі аддзяляюцца сімвалам новага радка, а назва і значэнне загалоўка — двукроп\'ем (напрыклад: <kbd><code>Accept: application/atom+xml<br />Authorization: Bearer some-token</code></kbd>).',
+		'icon' => 'Значок',
+		'information' => 'Інфармацыя',
+		'keep_adding_feed' => 'Дадаць потым яшчэ стужкі',
+		'keep_min' => 'Мінімальная колькасць артыкулаў для захавання',
+		'kind' => array(
+			'_' => 'Тып крыніцы стужкі',
+			'html_json' => array(
+				'_' => 'HTML + XPath + кропкавая натацыя JSON (JSON у HTML)',
+				'xpath' => array(
+					'_' => '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(
+				'_' => 'HTML + XPath (вэб-скрэйпінг)',
+				'feed_title' => array(
+					'_' => 'Назва стужкі',
+					'help' => 'Прыклад: <code>//title</code> або статычны радок: <code>"My custom feed"</code>',
+				),
+				'help' => '<dfn><a href="https://www.w3.org/TR/xpath-10/" target="_blank">XPath 1.0</a></dfn> — стандартная мова запытаў для дасведчаных карыстальнікаў, якую FreshRSS падтрымлівае для вэб-скрэйпінгу.',
+				'item' => array(
+					'_' => 'Пошук <strong>элементаў</strong> навін<br /><small>(найважнейшае)</small>',
+					'help' => 'Прыклад: <code>//div[@class="news-item"]</code>',
+				),
+				'item_author' => array(
+					'_' => 'Аўтар элемента',
+					'help' => 'Можа быць і статычным радком. Прыклад: <code>"Anonymous"</code>',
+				),
+				'item_categories' => 'Тэгі элемента',
+				'item_content' => array(
+					'_' => 'Змесціва элемента',
+					'help' => 'Прыклад атрымання элемента цалкам: <code>.</code>',
+				),
+				'item_thumbnail' => array(
+					'_' => 'Мініяцюра элемента',
+					'help' => 'Прыклад: <code>descendant::img/@src</code>',
+				),
+				'item_timeFormat' => array(
+					'_' => 'Карыстальніцкі фармат даты і часу',
+					'help' => 'Неабавязкова. Фармат, што падтрымліваецца <a href="https://www.php.net/datetime.createfromformat" target="_blank"><code>DateTime::createFromFormat()</code></a>, напрыклад <code>d-m-Y H:i:s</code>',
+				),
+				'item_timestamp' => array(
+					'_' => 'Дата элемента',
+					'help' => 'Вынік будзе разабраны з дапамогай <a href="https://www.php.net/strtotime" target="_blank"><code>strtotime()</code></a>',
+				),
+				'item_title' => array(
+					'_' => 'Назва элемента',
+					'help' => 'Ужывайце, у прыватнасці, <a href="https://developer.mozilla.org/docs/Web/XML/XPath/Reference/Axes" target="_blank">вось XPath</a> <code>descendant::</code>, напрыклад <code>descendant::h2</code>',
+				),
+				'item_uid' => array(
+					'_' => 'Унікальны ідэнтыфікатар элемента',
+					'help' => 'Неабавязкова. Прыклад: <code>descendant::div/@data-uri</code>',
+				),
+				'item_uri' => array(
+					'_' => 'Спасылка элемента (URL)',
+					'help' => 'Прыклад: <code>descendant::a/@href</code>',
+				),
+				'relative' => 'XPath (адносна элемента) для:',
+				'xpath' => 'XPath для:',
+			),
+			'json_dotnotation' => array(
+				'_' => 'JSON з кропкавай натацыяй',
+				'feed_title' => array(
+					'_' => 'Назва стужкі',
+					'help' => 'Прыклад: <code>meta.title</code> або статычны радок: <code>"My custom feed"</code>',
+				),
+				'help' => 'У кропкавай натацыі JSON кропкі выкарыстоўваюцца паміж аб\'ектамі, а квадратныя дужкі — для масіваў (напрыклад, <code>data.items[0].title</code>)',
+				'item' => array(
+					'_' => 'Пошук <strong>элементаў</strong> навін<br /><small>(найважнейшае)</small>',
+					'help' => 'Шлях JSON да масіву, які змяшчае элементы, напрыклад <code>$</code> або <code>newsItems</code>',
+				),
+				'item_author' => 'Аўтар элемента',
+				'item_categories' => 'Тэгі элемента',
+				'item_content' => array(
+					'_' => 'Змесціва элемента',
+					'help' => 'Ключ, пад якім знаходзіцца змесціва, напрыклад <code>content</code>',
+				),
+				'item_thumbnail' => array(
+					'_' => 'Мініяцюра элемента',
+					'help' => 'Прыклад: <code>image</code>',
+				),
+				'item_timeFormat' => array(
+					'_' => 'Карыстальніцкі фармат даты і часу',
+					'help' => 'Неабавязкова. Фармат, што падтрымліваецца <a href="https://www.php.net/datetime.createfromformat" target="_blank"><code>DateTime::createFromFormat()</code></a>, напрыклад <code>d-m-Y H:i:s</code>',
+				),
+				'item_timestamp' => array(
+					'_' => 'Дата элемента',
+					'help' => 'Вынік будзе разабраны з дапамогай <a href="https://www.php.net/strtotime" target="_blank"><code>strtotime()</code></a>',
+				),
+				'item_title' => 'Назва элемента',
+				'item_uid' => 'Унікальны ідэнтыфікатар элемента',
+				'item_uri' => array(
+					'_' => 'Спасылка элемента (URL)',
+					'help' => 'Прыклад: <code>permalink</code>',
+				),
+				'json' => 'кропкавая натацыя для:',
+				'relative' => 'шлях у кропкавай натацыі (адносна элемента) для:',
+			),
+			'jsonfeed' => 'JSON Feed',	// IGNORE
+			'rss' => 'RSS / Atom (прадвызначаны)',
+			'xml_xpath' => 'XML + XPath',	// IGNORE
+		),
+		'last-entry-publication-date' => 'Апошні апублікаваны артыкул <time datetime="%1$s" title="%1$s">%2$s</time>.',
+		'last-entry-received-date' => 'Апошні атрыманы артыкул <time datetime="%1$s" title="%1$s">%2$s</time>.',
+		'last-error-date' => 'Апошняе памылковае абнаўленне <time datetime="%1$s" title="%1$s">%2$s</time>.',
+		'last-update' => 'Апошняе паспяховае абнаўленне <time datetime="%1$s" title="%1$s">%2$s</time>.',
+		'maintenance' => array(
+			'clear_cache' => 'Ачысціць кэш',
+			'clear_cache_help' => 'Ачышчае кэш гэтай стужкі.',
+			'reload_articles' => 'Перазагрузіць артыкулы',
+			'reload_articles_help' => 'Перазагружае зададзеную колькасць артыкулаў і атрымлівае поўнае змесціва, калі вызначаны селектар.',
+			'title' => 'Абслугоўванне',
+		),
+		'max_http_redir' => 'Максімальная колькасць перанакіраванняў HTTP',
+		'max_http_redir_help' => 'Задайце 0 або пакіньце поле пустым, каб адключыць перанакіраванні; -1 — для безліміту перанакіраванняў',
+		'method' => array(
+			'_' => 'Метад HTTP',
+		),
+		'method_help' => 'Цела запыту POST аўтаматычна падтрымлівае <code>application/x-www-form-urlencoded</code> і <code>application/json</code>',
+		'method_postparams' => 'Цела запыту POST',
+		'moved_category_deleted' => 'Пасля выдалення катэгорыі яе стужкі аўтаматычна класіфікуюцца ў <em>%s</em>.',
+		'mute' => array(
+			'_' => 'заглушыць',
+			'state_is_muted' => 'Гэта стужка заглушана',
+		),
+		'no_selected' => 'Стужка не выбрана.',
+		'number_entries' => '%d артыкулаў',
+		'open_feed' => 'Адкрыць стужку %s',
+		'path_entries_conditions' => 'Умовы атрымання змесціва',
+		'priority' => array(
+			'_' => 'Бачнасць',
+			'category' => 'Паказваць у катэгорыі',
+			'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>)',
+		'reset_favicon' => 'Скінуць да прадвызначанага',
+		'selector_preview' => array(
+			'show_raw' => 'Паказаць зыходны код',
+			'show_rendered' => 'Паказваць змесціва',
+		),
+		'show' => array(
+			'all' => 'Усе стужкі',
+			'error' => 'Паказаць толькі стужкі з памылкамі',
+		),
+		'showing' => array(
+			'error' => 'Паказваюцца толькі стужкі з памылкамі',
+		),
+		'ssl_verify' => 'Правяраць бяспеку SSL',
+		'stats' => 'Статыстыка',
+		'think_to_add' => 'Дадайце некалькі стужак.',
+		'timeout' => 'Час чакання ў секундах',
+		'title' => 'Назва',
+		'title_add' => 'Дадаць RSS-стужку',
+		'ttl' => 'Мінімальны інтэрвал аўтаматычнага абнаўлення',
+		'unicityCriteria' => array(
+			'_' => 'Крытэрый унікальнасці артыкулаў',
+			'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' => 'User agent для атрымання гэтай стужкі',
+		'useragent_help' => 'Прыклад: <kbd>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)</kbd>',
+		'validator' => 'Праверыць сапраўднасць стужкі',
+		'website' => 'URL-адрас вэб-сайта',
+		'websub' => 'Імгненныя апавяшчэнні праз WebSub',
+	),
+	'import_export' => array(
+		'export' => array(
+			'_' => 'Экспарт',
+			'sqlite' => 'Спампаваць базу даных карыстальніка як SQLite',
+		),
+		'export_labelled' => 'Экспартаваць пазначаныя артыкулы',
+		'export_opml' => 'Экспартаваць спіс стужак (OPML)',
+		'export_starred' => 'Экспартаваць абраныя',
+		'feed_list' => 'Спіс артыкулаў %s',
+		'file_to_import' => 'Файл для імпарту<br />(OPML, JSON або ZIP)',
+		'file_to_import_no_zip' => 'Файл для імпарту<br />(OPML або JSON)',
+		'import' => 'Імпарт',
+		'starred_list' => 'Спіс абраных артыкулаў',
+		'title' => 'Імпарт / экспарт',
+	),
+	'menu' => array(
+		'add' => 'Дадаць стужку або катэгорыю',
+		'import_export' => 'Імпарт / экспарт',
+		'label_management' => 'Меткі',
+		'stats' => array(
+			'idle' => 'Неактыўныя стужкі',
+			'main' => 'Асноўная статыстыка',
+			'repartition' => 'Размеркаванне артыкулаў',
+			'unread_dates' => 'Даты непрачытаных',
+		),
+		'subscription_management' => 'Падпіскі',
+		'subscription_tools' => 'Інструменты падпіскі',
+	),
+	'tag' => array(
+		'auto_label' => 'Дадаваць гэту метку да новых артыкулаў',
+		'name' => 'Назва',
+		'new_name' => 'Новая назва',
+		'old_name' => 'Старая назва',
+	),
+	'title' => array(
+		'_' => 'Падпіскі',
+		'add' => 'Дадаць стужку або катэгорыю',
+		'add_category' => 'Дадаць катэгорыю',
+		'add_dynamic_opml' => 'Дадаць дынамічны OPML',
+		'add_feed' => 'Дадаць стужку',
+		'add_label' => 'Дадаць метку',
+		'add_opml_category' => 'Назва катэгорыі OPML',
+		'delete_label' => 'Выдаліць гэту метку',
+		'feed_management' => 'Падпіскі',
+		'subscription_tools' => 'Інструменты падпіскі',
+	),
+);

+ 54 - 0
app/i18n/be/user.php

@@ -0,0 +1,54 @@
+<?php
+
+/******************************************************************************
+ * Each entry of that file can be associated with a comment to indicate its   *
+ * state. When there is no comment, it means the entry is fully translated.   *
+ * The recognized comments are (comment matching is case-insensitive):        *
+ *   + TODO: the entry has never been translated.                             *
+ *   + DIRTY: the entry has been translated but needs to be updated.          *
+ *   + IGNORE: the entry does not need to be translated.                      *
+ * When a comment is not recognized, it is discarded.                         *
+ ******************************************************************************/
+
+return array(
+	'email' => array(
+		'feedback' => array(
+			'invalid' => 'Няправільны адрас электроннай пошты.',
+			'required' => 'Патрабуецца адрас электроннай пошты.',
+		),
+		'validation' => array(
+			'change_email' => 'Вы можаце змяніць адрас электроннай пошты <a href="%s">на старонцы профілю</a>.',
+			'email_sent_to' => 'Мы даслалі вам электронны ліст на адрас <strong>%s</strong>. Выканайце інструкцыі з яго, каб пацвердзіць адрас.',
+			'feedback' => array(
+				'email_failed' => 'Не ўдалося адправіць вам электронны ліст праз памылку канфігурацыі сервера.',
+				'email_sent' => 'На адрас адпраўлены электронны ліст.',
+				'error' => 'Не ўдалося пацвердзіць адрас электроннай пошты.',
+				'ok' => 'Гэты адрас электроннай пошты пацверджаны.',
+				'unnecessary' => 'Гэты адрас электроннай пошты ўжо быў пацверджаны.',
+				'wrong_token' => 'Не ўдалося пацвердзіць гэты адрас электроннай пошты праз няправільны токен.',
+			),
+			'need_to' => 'Вам трэба пацвердзіць адрас электроннай пошты, перш чым вы зможаце выкарыстоўваць %s.',
+			'resend_email' => 'Паўторна адправіць электронны ліст',
+			'title' => 'Праверка адраса электроннай пошты',
+		),
+	),
+	'mailer' => array(
+		'email_need_validation' => array(
+			'body' => 'Вы толькі што зарэгістраваліся на %s, але вам усё яшчэ трэба пацвердзіць адрас электроннай пошты. Для гэтага проста перайдзіце па спасылцы:',
+			'title' => 'Вам трэба пацвердзіць уліковы запіс',
+			'welcome' => 'Вітаем, %s,',
+		),
+	),
+	'password' => array(
+		'invalid' => 'Няправільны пароль.',
+	),
+	'tos' => array(
+		'feedback' => array(
+			'invalid' => 'Вы павінны прыняць умовы выкарыстання, каб зарэгістравацца.',
+		),
+	),
+	'username' => array(
+		'invalid' => 'Няправільнае імя карыстальніка.',
+		'taken' => 'Гэта імя карыстальніка, %s, ужо занята.',
+	),
+);

+ 1 - 0
app/i18n/cs/gen.php

@@ -199,6 +199,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/de/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/el/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/en-US/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/en/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',
+		'be' => 'Беларуская',
 		'cs' => 'Čeština',
 		'de' => 'Deutsch',
 		'el' => 'Ελληνικά',

+ 1 - 0
app/i18n/es/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/fa/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/fi/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/fr/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/he/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/hu/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/id/gen.php

@@ -183,6 +183,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/it/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/ja/gen.php

@@ -183,6 +183,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/ko/gen.php

@@ -183,6 +183,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/lt/gen.php

@@ -199,6 +199,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/lv/gen.php

@@ -199,6 +199,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/nl/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/oc/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/pl/gen.php

@@ -199,6 +199,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/pt-BR/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/pt-PT/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/ru/gen.php

@@ -199,6 +199,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/sk/gen.php

@@ -199,6 +199,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/tr/gen.php

@@ -191,6 +191,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/uk/gen.php

@@ -199,6 +199,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/zh-CN/gen.php

@@ -183,6 +183,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
app/i18n/zh-TW/gen.php

@@ -185,6 +185,7 @@ return array(
 	),
 	'lang' => array(
 		'az' => 'Azərbaycanca',	// IGNORE
+		'be' => 'Беларуская',	// IGNORE
 		'cs' => 'Čeština',	// IGNORE
 		'de' => 'Deutsch',	// IGNORE
 		'el' => 'Ελληνικά',	// IGNORE

+ 1 - 0
docs/en/users/05_Configuration.md

@@ -15,6 +15,7 @@ Available languages are:
 
 | Language (English name) | Language (Endonym) | Ordered by language code (ISO-639-1) |
 |:------------------------|:-----------------------|:-------------------------------------|
+| Belarusian              | Беларуская             | be                                   |
 | Czech                   | Čeština                | cs                                   |
 | German                  | Deutsch                | de                                   |
 | Greek                   | Ελληνικά               | el                                   |

+ 1 - 0
docs/fr/users/05_Configuration.md

@@ -21,6 +21,7 @@ Les langues disponibles sont:
 
 | Langue (nom français)   | Langue (endonyme)      | Classé par code de langue (ISO-639-1) |
 |:------------------------|:-----------------------|:-------------------------------------|
+| Biélorusse              | Беларуская             | be                                   |
 | Tchèque                 | Čeština                | cs                                   |
 | Allemand                | Deutsch                | de                                   |
 | Grec                    | Ελληνικά               | el                                   |