From 04bb1d0022ac427192507052afc7579217825ab1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 21:09:29 +0000 Subject: [PATCH 01/10] build: (deps): bump share_plus from 12.0.0 to 12.0.1 Bumps [share_plus](https://github.com/fluttercommunity/plus_plugins/tree/main/packages/share_plus) from 12.0.0 to 12.0.1. - [Release notes](https://github.com/fluttercommunity/plus_plugins/releases) - [Commits](https://github.com/fluttercommunity/plus_plugins/commits/share_plus-v12.0.1/packages/share_plus) --- updated-dependencies: - dependency-name: share_plus dependency-version: 12.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pubspec.lock | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 8b865500d..f22d38ca6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1602,10 +1602,10 @@ packages: dependency: "direct main" description: name: share_plus - sha256: "3424e9d5c22fd7f7590254ba09465febd6f8827c8b19a44350de4ac31d92d3a6" + sha256: "14c8860d4de93d3a7e53af51bff479598c4e999605290756bbbe45cf65b37840" url: "https://pub.dev" source: hosted - version: "12.0.0" + version: "12.0.1" share_plus_platform_interface: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index d7aef9b12..fa42bec20 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -68,7 +68,7 @@ dependencies: receive_sharing_intent: ^1.8.1 record: ^6.1.1 scroll_to_index: ^3.0.1 - share_plus: ^12.0.0 + share_plus: ^12.0.1 shared_preferences: ^2.2.0 # Pinned because https://github.com/flutter/flutter/issues/118401 slugify: ^2.0.0 sqflite_common_ffi: ^2.3.6 From d5a4e8ae5d55999e1a0f03e15d19f7a6a8a60ae8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 21:09:37 +0000 Subject: [PATCH 02/10] build: (deps): bump qr_code_scanner_plus from 2.0.12 to 2.0.13 Bumps [qr_code_scanner_plus](https://github.com/vespr-wallet/qr_code_scanner_plus) from 2.0.12 to 2.0.13. - [Changelog](https://github.com/vespr-wallet/qr_code_scanner_plus/blob/master/CHANGELOG.md) - [Commits](https://github.com/vespr-wallet/qr_code_scanner_plus/compare/2.0.12...2.0.13) --- updated-dependencies: - dependency-name: qr_code_scanner_plus dependency-version: 2.0.13 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pubspec.lock | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 8b865500d..9c2d484ec 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1426,10 +1426,10 @@ packages: dependency: "direct main" description: name: qr_code_scanner_plus - sha256: a0f1ac8e13299b3db2646635f252fe2ec67222b848b24ed34d11052faf080bfa + sha256: "41f4a834a48d670d25e3917cb9f1dbb4742298a0b4ab60d82416b295b73931e1" url: "https://pub.dev" source: hosted - version: "2.0.12" + version: "2.0.13" qr_image: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index d7aef9b12..81976bb17 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -63,7 +63,7 @@ dependencies: pretty_qr_code: ^3.5.0 provider: ^6.0.2 punycode: ^1.0.0 - qr_code_scanner_plus: ^2.0.12 + qr_code_scanner_plus: ^2.0.13 qr_image: ^1.0.0 receive_sharing_intent: ^1.8.1 record: ^6.1.1 From f03130ddc1baeff693f50d509d13b5ce951162e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Wed, 22 Oct 2025 08:56:50 +0200 Subject: [PATCH 03/10] chore: Add better # links to privacy md --- PRIVACY.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/PRIVACY.md b/PRIVACY.md index 439899d0e..570c711a8 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -7,8 +7,9 @@ FluffyChat is available on Android, iOS, Linux and as a web version. Desktop ver * [Encryption](#encryption) * [App Permissions](#app-permissions) * [Push Notifications](#push-notifications) +* [PlayStore Safety Standards](#playstore-safety) -## Matrix +## # Matrix FluffyChat uses the Matrix protocol. This means that FluffyChat is just a client that can be connected to any compatible matrix server. The respective data protection agreement of the server selected by the user then applies. For convenience, one or more servers are set as default that the FluffyChat developers consider trustworthy. The developers of FluffyChat do not guarantee their trustworthiness. Before the first communication, users are informed which server they are connecting to. @@ -17,17 +18,17 @@ FluffyChat only communicates with the selected server and with [OpenStreetMap](h More information is available at: [https://matrix.org](https://matrix.org) -## Database +## # Database FluffyChat caches some data received from the server in a local sqflite database on the device of the user. On web indexedDB is used. FluffyChat always tries to encrypt the database by using SQLCipher and stores the encryption key in the [Secure Storage](https://pub.dev/packages/flutter_secure_storage) of the device. More information is available at: [https://pub.dev/packages/sqflite](https://pub.dev/packages/sqflite) and [https://pub.dev/packages/sqlcipher_flutter_libs](https://pub.dev/packages/sqlcipher_flutter_libs) -## Encryption +## # Encryption All communication of substantive content between Fluffychat and any server is done in secure way, using transport encryption to protect it. FluffyChat also uses End-To-End-Encryption by using [libolm](https://gitlab.matrix.org/matrix-org/olm) and enables it by default for private chats. -## App Permissions +## # App Permissions The permissions are the same on Android and iOS but may differ in the name. This are the Android Permissions: @@ -50,7 +51,7 @@ The user is able to send files from the device's file system. #### Location FluffyChat makes it possible to share the current location via the chat. When the user shares their location, FluffyChat uses the device location service and sends the geo-data via Matrix. -## Push Notifications +## # Push Notifications FluffyChat uses the Firebase Cloud Messaging service for push notifications on Android and iOS. This takes place in the following steps: 1. The matrix server sends the push notification to the FluffyChat Push Gateway 2. The FluffyChat Push Gateway forwards the message in a different format to Firebase Cloud Messaging @@ -94,7 +95,7 @@ A typical push notification could look like this: FluffyChat sets the `event_id_only` flag at the Matrix Server. This server is then responsible to send the correct data. -# Explanation of FluffyChat's Compliance with Google Play Store's Safety Standards +# # Explanation of FluffyChat's Compliance with Google Play Store's Safety Standards FluffyChat is committed to promoting a safe and respectful environment for all users. As a Matrix client, FluffyChat connects users to various Matrix servers. Please note that FluffyChat does not host or manage any servers directly, and as such, we do not have the capability to enforce content moderation or deletion within the app itself. From 116a1d24b557ab0b3b6a8bf41c172b00033a6c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Wed, 22 Oct 2025 10:26:48 +0200 Subject: [PATCH 04/10] chore: Update contributing.md --- CONTRIBUTING.md | 158 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 157 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f54a0fb85..6c192cc44 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,4 +13,160 @@ To improve the process please make sure that you read the following guidelines c 6. Format the commit message as [Conventional Commits](https://www.conventionalcommits.org). 7. Format (`flutter format lib`) and sort impots (`dart run import_sorter:main --no-comments`) in all code files. 8. For bigger or complex changes (more than a couple of code lines) write an issue or refer to an existing issue and ask for approval from the maintainers (@krille-chan) **before** starting to implement it. This way you reduce the risk that your Pull Request get's declined. -9. Prefer simple and easy to maintain solutions over complexity and fancy ones. \ No newline at end of file +9. Prefer simple and easy to maintain solutions over complexity and fancy ones. + +# Code Style + +FluffyChat tries to be as minimal as possible even in the code style. We try to keep the code clean, simple and easy to read. The source code of the app is under `/lib` with the main entry point `/lib/main.dart`. + + + + + + +**Table of Contents** + +- [Directory Structure:](#directory-structure) +- [Separation of Controllers and Views](#separation-of-controllers-and-views) +- [Formatting](#formatting) +- [Code Analyzis](#code-analyzis) + + + + + + +### Directory Structure: + + +- /lib + - /config + - app_config.dart + - ...Constants, styles and other configurations + - /utils + - handy_function.dart + - ...Helper functions and extensions + - /pages + - /chat + - chat.dart + - chat_view.dart + - /chat_list + - chat_list.dart + - chat_list_view.dart + - ...The pages of the app separated in Controllers and Views + - /widgets + - /layouts + - ...Custom widgets created for this project + - main.dart + + +Most of the business model is in the Famedly Matrix Dart SDK. We try to not keep a model inside of the source code but extend it under `/utils`. + +### Separation of Controllers and Views + +We split views and controller logic with stateful widgets as controller where the build method just builds a stateless widget which receives the state as the only parameter. A common controller would look like this: + +```dart +// /lib/controller/enter_name_controller.dart +import 'package:flutter/material.dart'; + +class EnterName extends StatefulWidget { + @override + EnterNameController createState() => EnterNameController(); +} + +class EnterNameController extends State { + final TextEditingController textEditingController = TextEditingController(); + String name = 'Unknown'; + + /// Changes the name with the content in the textfield. If the textfield is + /// empty, this breaks up and displays a SnackBar. + void setNameAction() { + if (textEditingController.text.isEmpty) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('You have not entered your name'), + ), + ); + return; + } + setState(() => name = textEditingController.text); + } + + @override + Widget build(BuildContext context) => EnterNameView(this); +} +``` + +So we have a controller for a `EnterName` view which as a `TextEditingController`, a state `name` and an action `void setNameAction()`. Actions must always be methods of a type, that we dont need to pass parameters in the corresponding view class and must have dartdoc comments. + +The view class could look like this: + +```dart +// /lib/views/enter_name_view.dart +import 'package:flutter/material.dart'; + +class EnterNameView extends StatelessWidget { + final EnterNameController controller; + + const EnterNameView(this.controller, {Key key}) : super(key: key); + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Your name: ${controller.name}'), + ), + body: Center( + child: TextField( + controller: controller.textEditingController, + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: controller.setNameAction, + child: Icon(Icons.save), + ), + ); + } +} +``` + +Views should just contain code which describes the view. All other parameters or logic should be in the controller. The job of the view class is just to take the current state and build the widget tree and pipe the callbacks back. If there is any calulation necessary which is not solveable as a simple if-else or switch statement, it should be done in an external helper function unter `/lib/utils/`. + +All file names must be lower_snake_case. All views must have a `View` suffix and all controller must have a `Controller` suffix. Widgets may have a controller too but they should pass the callbacks back to the view where possible. Calling one line methods directly in the view is only recommended if there is no need to pass a parameter. + +To perform an action on state initialization we use the initState method: +```dart +@override + void initState() { + // TODO: implement initState + super.initState(); + } +``` + +And the dispose method to perform an action on disposing: +```dart +@override + void dispose() { + // TODO: implement dispose + super.dispose(); + } +``` + +To run code after the widget was created first we use the WidgetBindings in the initState: +```dart +@override + void initState() { + WidgetsBinding.instance.addPostFrameCallback((_) { + // Do something when build is finished + }); + super.initState(); + } +``` + +### Formatting + +We do not allow code with wrong formatting. Please run `flutter format lib` if your IDE doesn't do this automatically. + +### Code Analyzis + +We do not allow codes with dart errors or warnings. We use the [flutter_lints](https://pub.dev/packages/flutter_lints) package for static code analysis with additional rules under `analysis_options.yaml`. From e10a1c27c4a3b93cdddf634af27eb55acb8b62c9 Mon Sep 17 00:00:00 2001 From: Alex Katon Date: Tue, 21 Oct 2025 22:15:03 +0200 Subject: [PATCH 05/10] chore(translations): Translated using Weblate (German) Currently translated at 100.0% (794 of 794 strings) Translation: FluffyChat/Translations Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/de/ --- lib/l10n/intl_de.arb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 78a846608..8e396e21a 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -3437,5 +3437,7 @@ } }, "donate": "Spenden", - "@donate": {} + "@donate": {}, + "resume": "Fortsetzen", + "@resume": {} } From 74573fcae94e84128dd18340473a8275f38a9fc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?jos=C3=A9=20m?= Date: Tue, 21 Oct 2025 15:15:42 +0200 Subject: [PATCH 06/10] chore(translations): Translated using Weblate (Galician) Currently translated at 99.7% (792 of 794 strings) Translation: FluffyChat/Translations Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/gl/ --- lib/l10n/intl_gl.arb | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index 9a047891d..dbb19083e 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -3393,5 +3393,26 @@ "pause": "Deter", "@pause": {}, "resume": "Continuar", - "@resume": {} + "@resume": {}, + "newSubSpace": "Novo sub espazo", + "@newSubSpace": {}, + "moveToDifferentSpace": "Mover a outro espazo", + "@moveToDifferentSpace": {}, + "moveUp": "Mover arriba", + "@moveUp": {}, + "moveDown": "Mover abaixo", + "@moveDown": {}, + "removeFromSpaceDescription": "Vaise quitar a conversa do espazo pero seguirá aparecendo na túa lista de conversas.", + "@removeFromSpaceDescription": {}, + "countChats": "{chats} conversas", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "donate": "Doar", + "@donate": {} } From 0ee4d1ceff5ed6e00bf4dffd91910a45ccdd5c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aindri=C3=BA=20Mac=20Giolla=20Eoin?= Date: Tue, 21 Oct 2025 11:01:37 +0200 Subject: [PATCH 07/10] chore(translations): Translated using Weblate (Irish) Currently translated at 100.0% (794 of 794 strings) Translation: FluffyChat/Translations Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/ga/ --- lib/l10n/intl_ga.arb | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index 4f2dc7fc2..f149ede7e 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -3398,5 +3398,44 @@ "pause": "Sos", "@pause": {}, "resume": "Atosú", - "@resume": {} + "@resume": {}, + "newSubSpace": "Fo-spás nua", + "@newSubSpace": {}, + "moveToDifferentSpace": "Bog go spás difriúil", + "@moveToDifferentSpace": {}, + "moveUp": "Bog suas", + "@moveUp": {}, + "moveDown": "Bog síos", + "@moveDown": {}, + "removeFromSpaceDescription": "Bainfear an comhrá as an spás ach beidh sé fós le feiceáil i do liosta comhrá.", + "@removeFromSpaceDescription": {}, + "countChats": "comhráite {chats}", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "spaceMemberOf": "Ball spáis de {spaces}", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "spaceMemberOfCanKnock": "Is féidir le ball spáis de {spaces} cnagadh", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "donate": "Tabhair Síntiús", + "@donate": {} } From 4dab18bbc8d45f7f79b8ae4f735b3ba89d3f7afc Mon Sep 17 00:00:00 2001 From: Edgars Andersons Date: Tue, 21 Oct 2025 10:20:00 +0200 Subject: [PATCH 08/10] chore(translations): Translated using Weblate (Latvian) Currently translated at 98.6% (783 of 794 strings) Translation: FluffyChat/Translations Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/lv/ --- lib/l10n/intl_lv.arb | 47 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index e90e3dec6..33820ae37 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -3370,5 +3370,50 @@ "declineInvitation": "Noraidīt uzaicinājumu", "@declineInvitation": {}, "noMessagesYet": "Vēl nav ziņu", - "@noMessagesYet": {} + "@noMessagesYet": {}, + "longPressToRecordVoiceMessage": "Ilga piespiešana, lai ierakstītu balss ziņu.", + "@longPressToRecordVoiceMessage": {}, + "pause": "Apturēt", + "@pause": {}, + "resume": "Atsākt", + "@resume": {}, + "newSubSpace": "Jauna apakšvieta", + "@newSubSpace": {}, + "moveToDifferentSpace": "Pārvietot uz citu vietu", + "@moveToDifferentSpace": {}, + "moveUp": "Pārvietot augšup", + "@moveUp": {}, + "moveDown": "Pārvietot lejup", + "@moveDown": {}, + "removeFromSpaceDescription": "Tērzēšana tiks noņemta no vietas, bet tā joprojām būs redzama tērzēšanu sarakstā.", + "@removeFromSpaceDescription": {}, + "countChats": "{chats} tērzēšanas", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "spaceMemberOf": "{spaces} dalībnieks", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "spaceMemberOfCanKnock": "{spaces} dalībnieks var pieklauvēt", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "donate": "Ziedot", + "@donate": {} } From b2bacf42f38c7f35e06382f2352d2a70e2b10970 Mon Sep 17 00:00:00 2001 From: Alex Katon Date: Tue, 21 Oct 2025 22:09:33 +0200 Subject: [PATCH 09/10] chore(translations): Translated using Weblate (Belarusian) Currently translated at 100.0% (794 of 794 strings) Translation: FluffyChat/Translations Translate-URL: https://hosted.weblate.org/projects/fluffychat/translations/be/ --- lib/l10n/intl_be.arb | 652 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 630 insertions(+), 22 deletions(-) diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index 8bdbf62d8..e93ecc838 100644 --- a/lib/l10n/intl_be.arb +++ b/lib/l10n/intl_be.arb @@ -117,7 +117,7 @@ "@commandHint_cuddle": {}, "commandHint_hug": "Даслаць абдымашкі", "@commandHint_hug": {}, - "googlyEyesContent": "{senderName} даслаў вам смешныя вочы", + "googlyEyesContent": "{senderName} даслаў(-ла) вам смешныя вочы", "@googlyEyesContent": { "type": "String", "placeholders": { @@ -163,7 +163,7 @@ "type": "String", "placeholders": {} }, - "appLockDescription": "Блакіруе праграму, пакуль вы не ўвядзеце пін-код", + "appLockDescription": "Блакіруе праграму, пакуль вы не ўвядзіце пін-код", "@appLockDescription": {}, "archive": "Архіў", "@archive": { @@ -185,7 +185,7 @@ "type": "String", "placeholders": {} }, - "askSSSSSign": "Каб увайсці як іншы чалавек, калі ласка, увядзіце ключавую фразу ці ключ аднаўлення.", + "askSSSSSign": "Каб спраўдзіць іншага чалавека, калі ласка, увядзіце фразу-пароль ці ключ аднаўлення.", "@askSSSSSign": { "type": "String", "placeholders": {} @@ -644,7 +644,7 @@ "type": "String", "placeholders": {} }, - "compareNumbersMatch": "Калі ьаска, параўнайце цыфры", + "compareNumbersMatch": "Калі ласка, параўнайце лічбы", "@compareNumbersMatch": { "type": "String", "placeholders": {} @@ -927,7 +927,7 @@ "type": "String", "placeholders": {} }, - "emoteWarnNeedToPick": "Вы павінны задауь скарачэнне эмодзі і выяву!", + "emoteWarnNeedToPick": "Вы павінны задаць скарачэнне эмодзі і выяву!", "@emoteWarnNeedToPick": { "type": "String", "placeholders": {} @@ -976,7 +976,7 @@ } } }, - "enableMultiAccounts": "(БЭТА) Уключыць некалькі ўліковых запісаў на гэтац прыладзе", + "enableMultiAccounts": "(БЭТА) Уключыць некалькі ўліковых запісаў на гэтай прыладзе", "@enableMultiAccounts": {}, "enterAnEmailAddress": "Увядзіце электроную пошту (email)", "@enterAnEmailAddress": { @@ -1138,7 +1138,7 @@ "type": "String", "placeholders": {} }, - "incorrectPassphraseOrKey": "Няслушны фраза-пароль ці ключ аднаўлення", + "incorrectPassphraseOrKey": "Няслушныя фраза-пароль ці ключ аднаўлення", "@incorrectPassphraseOrKey": { "type": "String", "placeholders": {} @@ -1201,7 +1201,7 @@ "type": "String", "placeholders": {} }, - "inviteText": "{username} запрасіў вас у FluffyChat.\n1. Перайдзіце на fluffychat.im і ўстанааіце праграму \n2. Зарэгестрыруйцесь альбо увайдзіце\n3. Перайдзіце па запрашальнай спасылке: \n {link}", + "inviteText": "{username} запрасіў вас у FluffyChat.\n1. Перайдзіце на fluffychat.im і ўстанавіце праграму\n2. Зарэгестрыруйцесь альбо ўвайдзіце\n3. Перайдзіце па запрашальнай спасылцы:\n{link}", "@inviteText": { "type": "String", "placeholders": { @@ -1303,13 +1303,13 @@ "@dehydrate": {}, "dehydrateWarning": "Гэта дзеянне не можа быць адменена. Пераканайцеся, што вы бяспечна захавалі файл рэзервовай копіі.", "@dehydrateWarning": {}, - "dehydrateTor": "Карвстальнікі TOR: Экспарт сэсіі", + "dehydrateTor": "Карыстальнікі TOR: Экспарт сесіі", "@dehydrateTor": {}, - "dehydrateTorLong": "Для карыстальнікаў TOR прапануем экспартаваць сэсію перад ьым, як закрывауь акно.", + "dehydrateTorLong": "Для карыстальнікаў TOR прапануем экспартаваць сесію перад тым, як закрыць акно.", "@dehydrateTorLong": {}, - "hydrateTor": "Карыстальнікі TOR: Імпарт экспарту сэсіі", + "hydrateTor": "Карыстальнікі TOR: Імпарт экспарту сесіі", "@hydrateTor": {}, - "hydrateTorLong": "Вы экспартавалі сэсію ў мінулы раз праз TOR? Хутка імпартуйце яе і працягніце размовы.", + "hydrateTorLong": "Вы экспартавалі сесію ў мінулы раз праз TOR? Хутка імпартуйце яе і працягніце размовы.", "@hydrateTorLong": {}, "hydrate": "Аднавіць з рэзервовай копіі", "@hydrate": {}, @@ -1424,7 +1424,7 @@ "type": "String", "placeholders": {} }, - "noGoogleServicesWarning": "Здаецца, на вашай прыладзе няма ці недаступны Firebase Cloud Messaging. Каб далей атрымліваць паведамленні, мы прапануем усталяваць ntfy ці іншы правайдэр паведамленняў, каб атрымлтваць іх бяспечна. Вы модацеспампаваць ntfy з PlayStore ці F-Droid.", + "noGoogleServicesWarning": "Здаецца, на вашай прыладзе няма ці недаступны Firebase Cloud Messaging. Каб далей атрымліваць паведамленні, мы прапануем усталяваць ntfy ці іншы правайдар паведамленняў, каб атрымліваць іх бяспечна. Вы можаце спампаваць ntfy з PlayStore ці F-Droid.", "@noGoogleServicesWarning": { "type": "String", "placeholders": {} @@ -1642,7 +1642,7 @@ "type": "String", "placeholders": {} }, - "waitingPartnerNumbers": "Чакаем, калі партнёр прыме цыфры…", + "waitingPartnerNumbers": "Чакаем, калі партнёр зацвердзіць лічбы…", "@waitingPartnerNumbers": { "type": "String", "placeholders": {} @@ -1733,7 +1733,7 @@ "@addToSpaceDescription": {}, "start": "Пачаць", "@start": {}, - "pleaseEnterRecoveryKeyDescription": "Каб разблакіраваць вашы мінулыя паведамленні, калі ласка, ўвядзіце ключ аднаўлення, што быў згенерыраваны ў мінулац сэсіі. Ключ аднаўлення гэта НЕ ваш пароль.", + "pleaseEnterRecoveryKeyDescription": "Каб разблакіраваць вашы мінулыя паведамленні, калі ласка, увядзіце ключ аднаўлення, што быў згенерыраваны ў мінулай сесіі. Ключ аднаўлення гэта НЕ ваш пароль.", "@pleaseEnterRecoveryKeyDescription": {}, "publish": "Апублікаваць", "@publish": {}, @@ -1780,9 +1780,9 @@ "@unsupportedAndroidVersion": {}, "unsupportedAndroidVersionLong": "Гэта функцыя патрабуе навейшай версіі Android. Калі ласка, праверце наяўнасць абнаўленняў ці падтрымку Linage OS.", "@unsupportedAndroidVersionLong": {}, - "videoCallsBetaWarning": "Звярніце ўвагу, што відэа-выклікі знаходзяцца ў бэце. Яны могуць працаваць некарэктна ці не на ўсіх платформах.", + "videoCallsBetaWarning": "Звярніце ўвагу, што відэа выклікі знаходзяцца ў бэце. Яны могуць працаваць некарэктна ці не на ўсіх платформах.", "@videoCallsBetaWarning": {}, - "experimentalVideoCalls": "Эксперыментальныя відэа-выклікі", + "experimentalVideoCalls": "Эксперыментальныя відэа выклікі", "@experimentalVideoCalls": {}, "emailOrUsername": "Email ці імя карыстальніка", "@emailOrUsername": {}, @@ -2177,7 +2177,7 @@ "type": "String", "placeholders": {} }, - "numUsersTyping": "{count} карвстальнікаў пішуць…", + "numUsersTyping": "{count} карыстальнікаў пішуць…", "@numUsersTyping": { "type": "String", "placeholders": { @@ -2753,7 +2753,7 @@ } } }, - "userAndOthersAreTyping": "{username} і {count} іншых удзельнікаў друкуюць…", + "userAndOthersAreTyping": "{username} і {count} іншых удзельнікаў пішуць…", "@userAndOthersAreTyping": { "type": "String", "placeholders": { @@ -2765,7 +2765,7 @@ } } }, - "userAndUserAreTyping": "{username} і {username2} друкуюць…", + "userAndUserAreTyping": "{username} і {username2} пішуць…", "@userAndUserAreTyping": { "type": "String", "placeholders": { @@ -2777,7 +2777,7 @@ } } }, - "userIsTyping": "{username} піша …", + "userIsTyping": "{username} піша…", "@userIsTyping": { "type": "String", "placeholders": { @@ -2811,5 +2811,613 @@ "type": "String" } } - } + }, + "unverified": "Не праверана", + "@unverified": {}, + "verified": "Праверана", + "@verified": { + "type": "String", + "placeholders": {} + }, + "verify": "Спраўдзіць", + "@verify": { + "type": "String", + "placeholders": {} + }, + "verifyStart": "Пачаць спраўджванне", + "@verifyStart": { + "type": "String", + "placeholders": {} + }, + "verifySuccess": "Вы паспяхова спраўджаны!", + "@verifySuccess": { + "type": "String", + "placeholders": {} + }, + "verifyTitle": "Спраўдзіць іншы ўліковы запіс", + "@verifyTitle": { + "type": "String", + "placeholders": {} + }, + "videoCall": "Відэа выклік", + "@videoCall": { + "type": "String", + "placeholders": {} + }, + "verifyOtherUserDescription": "Калі вы спраўдзілі іншага карыстальніка, вы можаце быць упэўненым з кім вы сапраўды перапісваецеся.💪\n\nКалі вы пачнеце спраўджванне, вы і іншы карыстальнік, убачыце ўсплывальнае акно ў праграме. У ім вы ўбачыце некалькі эмодзі ці лічб, якія вы павінны параўнаць адзін з адным.\n\nЛепшы метад зрабіць гэта - пачаць відэа выклік. 👭", + "@verifyOtherUserDescription": {}, + "pleaseEnterANumber": "Калі ласка, увядзіце лічбу большую за 0", + "@pleaseEnterANumber": {}, + "verifyOtherDeviceDescription": "Калі вы спраўдзіце другую прыладу, яны абмяняюцца ключамі, якія ўзмоцняць вашу бяспеку. 💪 Калі вы пачнеце спраўджванне, у праграмах прылад з'явіцца ўсплывальнае паведамленне. Потым, вы ўбачыце некалькі эмодзі ці лічбаў, якія вы павінны параўнаць паміж сабой. Прасцей за ўсё гэта зрабіць, маючы дзве прылады побач. 🤳", + "@verifyOtherDeviceDescription": {}, + "verifyOtherUser": "🔐 Спраўдзіць іншага карыстальніка", + "@verifyOtherUser": {}, + "verifyOtherDevice": "🔐 Спраўдзіць іншую прыладу", + "@verifyOtherDevice": {}, + "changeTheCanonicalRoomAlias": "Змяніць публічны адрас чату", + "@changeTheCanonicalRoomAlias": {}, + "wrongRecoveryKey": "Прабачце... гэта не выглядае як ключ аднаўлення.", + "@wrongRecoveryKey": {}, + "restoreSessionBody": "Праграма спрабуе аднавіць вашу сесію з рэзервовай копіі. Калі ласка, паведаміце пра памылку распрацоўшчыкам па спасылцы {url}. Паведамленне памылкі: {error}", + "@restoreSessionBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "homeserverDescription": "Вашыя даныя захоўваюцца на дамашнім серверы, як у правайдара электронай пошты. Вы можаце самастойна абраць дамашні сервер, захоўвая пры тым магчымасць размаўляць. Даведайцеся болей на https://matrix.org.", + "@homeserverDescription": {}, + "longPressToRecordVoiceMessage": "Доўга цісніце, каб запісаць галасавое паведамленне.", + "@longPressToRecordVoiceMessage": {}, + "visibilityOfTheChatHistory": "Бачнасць гісторыі чату", + "@visibilityOfTheChatHistory": { + "type": "String", + "placeholders": {} + }, + "visibleForAllParticipants": "Бачна для ўсіх удзельнікаў", + "@visibleForAllParticipants": { + "type": "String", + "placeholders": {} + }, + "pleaseTryAgainLaterOrChooseDifferentServer": "Калі ласка, паспрабуйце пазней ці абярыце іншы сервер.", + "@pleaseTryAgainLaterOrChooseDifferentServer": {}, + "signInWith": "Увайсці з {provider}", + "@signInWith": { + "type": "String", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "profileNotFound": "Карыстальнік не знойдзены на гэтым серверы. Гэта можа быць памылка сеткі ці карыстальніка не існуе.", + "@profileNotFound": {}, + "setTheme": "Тэма:", + "@setTheme": {}, + "setColorTheme": "Каляровая схема:", + "@setColorTheme": {}, + "invite": "Запрасіць", + "@invite": {}, + "inviteGroupChat": "📨 Запрашэнне ў групавы чат", + "@inviteGroupChat": {}, + "invitePrivateChat": "📨 Запрашэнне ў асобны чат", + "@invitePrivateChat": {}, + "invalidInput": "Недапушчальны ўвод!", + "@invalidInput": {}, + "wrongPinEntered": "Няверны пін-код! Паспрабуйце праз {seconds} секунд...", + "@wrongPinEntered": { + "type": "String", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "archiveRoomDescription": "Чат перамясціцца ў архіў. Іншыя карыстальнікі будуць бачыць гэта так, быццам вы выйшлі з чату.", + "@archiveRoomDescription": {}, + "roomUpgradeDescription": "Чат будзе пераствораны з новай версіяй пакою. Усе ўдзельнікі будуць паведамлены пра неабходнасць перайсці ў новы чат. Вы можаце даведацца пра версіі пакояў тут: https://spec.matrix.org/latest/rooms/", + "@roomUpgradeDescription": {}, + "removeDevicesDescription": "Вы выйдзеце з гэтай прылады і больш не будзеце атрымліваць паведамленні.", + "@removeDevicesDescription": {}, + "sendTypingNotificationsDescription": "Іншыя ўдзельнікі чату могуць бачыць, калі вы пішаце новае паведамленне.", + "@sendTypingNotificationsDescription": {}, + "continueText": "Працягнуць", + "@continueText": {}, + "banUserDescription": "Карыстальнік будзе заблакіраваны з чату і больш не зможа ўвайсці, пакуль вы яго не разблакіруеце.", + "@banUserDescription": {}, + "unbanUserDescription": "Карыстальнік зможа зноў далучыцца да чату.", + "@unbanUserDescription": {}, + "kickUserDescription": "Карыстальнік будзе выгнаны, але не заблакіраваны. У публічных чатах, ён зможа далучыцца зноў у любы час.", + "@kickUserDescription": {}, + "makeAdminDescription": "Калі вы зробіце карыстальніка адміністратарам, вы не зможаце адмяніць гэта дзеянне, бо ён будзе мець такія ж правы, як і вы.", + "@makeAdminDescription": {}, + "pushNotificationsNotAvailable": "Пуш-паведамленні недаступны", + "@pushNotificationsNotAvailable": {}, + "learnMore": "Даведацца больш", + "@learnMore": {}, + "yourGlobalUserIdIs": "Ваш глабальны ID-карыстальніка: ", + "@yourGlobalUserIdIs": {}, + "noUsersFoundWithQuery": "На жаль, мы не змаглі знайсці карыстальніка з імём \"{query}\". Калі ласка, праверце наяўнасць памылак.", + "@noUsersFoundWithQuery": { + "type": "String", + "placeholders": { + "query": { + "type": "String" + } + } + }, + "knocking": "Грукацца", + "@knocking": {}, + "knockRestricted": "Грук абмежаваны", + "@knockRestricted": {}, + "spaceMemberOfCanKnock": "Удзельнікі прасторы з {spaces} могуць грукацца", + "@spaceMemberOfCanKnock": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "chatCanBeDiscoveredViaSearchOnServer": "Чат можа быць знойдзены праз пошук у {server}", + "@chatCanBeDiscoveredViaSearchOnServer": { + "type": "String", + "placeholders": { + "server": { + "type": "String" + } + } + }, + "searchChatsRooms": "Пошук #чатаў, @карыстальнікаў...", + "@searchChatsRooms": {}, + "nothingFound": "Нічога не знойдзена...", + "@nothingFound": {}, + "groupName": "Назва групы", + "@groupName": {}, + "createGroupAndInviteUsers": "Стварыць групу і запрасіць карыстальнікаў", + "@createGroupAndInviteUsers": {}, + "groupCanBeFoundViaSearch": "Група можа быць знойдзена праз пошук", + "@groupCanBeFoundViaSearch": {}, + "startConversation": "Пачаць размову", + "@startConversation": {}, + "commandHint_sendraw": "Даслаць толькі json", + "@commandHint_sendraw": {}, + "databaseMigrationTitle": "База даных аптымізавана", + "@databaseMigrationTitle": {}, + "databaseMigrationBody": "Калі ласка, пачакайце. Гэта можа заняць некаторы час.", + "@databaseMigrationBody": {}, + "leaveEmptyToClearStatus": "Пакіньце пустым, каб ачысціць свой статус.", + "@leaveEmptyToClearStatus": {}, + "select": "Выбраць", + "@select": {}, + "searchForUsers": "Пошук @карыстальнікаў...", + "@searchForUsers": {}, + "pleaseEnterYourCurrentPassword": "Калі ласка, увядзіце свой бягучы пароль", + "@pleaseEnterYourCurrentPassword": {}, + "newPassword": "Новы пароль", + "@newPassword": {}, + "pleaseChooseAStrongPassword": "Калі ласка, падбярыце больш надзейны пароль", + "@pleaseChooseAStrongPassword": {}, + "passwordsDoNotMatch": "Паролі не супадаюць", + "@passwordsDoNotMatch": {}, + "passwordIsWrong": "Вы ўвялі няверны пароль", + "@passwordIsWrong": {}, + "publicLink": "Публічная спасылка", + "@publicLink": {}, + "publicChatAddresses": "Публічныя адрасы чату", + "@publicChatAddresses": {}, + "createNewAddress": "Стварыць новы адрас", + "@createNewAddress": {}, + "joinSpace": "Далучыцца да прасторы", + "@joinSpace": {}, + "publicSpaces": "Публічныя прасторы", + "@publicSpaces": {}, + "addChatOrSubSpace": "Дадаць чат ці пад-прастору", + "@addChatOrSubSpace": {}, + "subspace": "Пад-прастора", + "@subspace": {}, + "decline": "Адхіліць", + "@decline": {}, + "thisDevice": "Гэта прылада:", + "@thisDevice": {}, + "initAppError": "Адбылася памылка пры ініцыялізацыі праграмы", + "@initAppError": {}, + "userRole": "Роль карыстальніка", + "@userRole": {}, + "minimumPowerLevel": "{level} - мінімальны ўзровень дазволаў.", + "@minimumPowerLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "String" + } + } + }, + "searchIn": "Пошук у чаце \"{chat}\"...", + "@searchIn": { + "type": "String", + "placeholders": { + "chat": { + "type": "String" + } + } + }, + "searchMore": "Шукаць яшчэ...", + "@searchMore": {}, + "gallery": "Галерэя", + "@gallery": {}, + "files": "Файлы", + "@files": {}, + "databaseBuildErrorBody": "Немагчыма стварыць базу даных SQlite. Праграма спрабуе выкарыстоўваць састарэлую базу. Калі ласка, паведаміце распрацоўшчыкам пра гэта: {url}. Паведамленне памылкі: {error}", + "@databaseBuildErrorBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "sessionLostBody": "Ваш сеанс страчаны. Калі ласка, паведаміце пра гэта распрацоўшчыкам: {url}. Паведамленне памылкі: {error}", + "@sessionLostBody": { + "type": "String", + "placeholders": { + "url": { + "type": "String" + }, + "error": { + "type": "String" + } + } + }, + "forwardMessageTo": "Пераслаць паведамленне ў {roomName}?", + "@forwardMessageTo": { + "type": "String", + "placeholders": { + "roomName": { + "type": "String" + } + } + }, + "sendReadReceipts": "Дасылаць адзнаку аб чытанні", + "@sendReadReceipts": {}, + "sendReadReceiptsDescription": "Іншыя карыстальнікі чатаў будуць бачыць, калі вы прачыталі паведамленні.", + "@sendReadReceiptsDescription": {}, + "formattedMessages": "Фармаціраваныя паведамленні", + "@formattedMessages": {}, + "formattedMessagesDescription": "Адлюстроўваць пашыраныя паведамленні разметкай markdown.", + "@formattedMessagesDescription": {}, + "acceptedKeyVerification": "{sender} прыняў(-ла) спраўджванне ключэй", + "@acceptedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "canceledKeyVerification": "{sender} адхіліў(-ла) спраўджванне ключэй", + "@canceledKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "completedKeyVerification": "{sender} скочныў(-ла) спраўджванне ключэй", + "@completedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "isReadyForKeyVerification": "{sender} гатовы(-а) да спраўджвання ключэй", + "@isReadyForKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "requestedKeyVerification": "{sender} запрасіў(-ла) спраўджванне ключэй", + "@requestedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "startedKeyVerification": "{sender} пачаў(-ла) спраўджванне ключэй", + "@startedKeyVerification": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + } + } + }, + "transparent": "Празрысты", + "@transparent": {}, + "incomingMessages": "Уваходныя паведамленні", + "@incomingMessages": {}, + "stickers": "Стыкеры", + "@stickers": {}, + "discover": "Даследаваць", + "@discover": {}, + "commandHint_ignore": "Ігнараваць дадзены matrix ID", + "@commandHint_ignore": {}, + "commandHint_unignore": "Перастаць ігнараваць дадзены matrix ID", + "@commandHint_unignore": {}, + "unreadChatsInApp": "{appname}: {unread} непрачытаных чатаў", + "@unreadChatsInApp": { + "type": "String", + "placeholders": { + "appname": { + "type": "String" + }, + "unread": { + "type": "String" + } + } + }, + "noDatabaseEncryption": "Шыфраванне базы даных не падтрымліваецца гэтай платформай", + "@noDatabaseEncryption": {}, + "thereAreCountUsersBlocked": "На гэты момант, {count} карыстальнікаў заблакіравана.", + "@thereAreCountUsersBlocked": { + "type": "String", + "count": {} + }, + "restricted": "Абмежавана", + "@restricted": {}, + "goToSpace": "Перайсці да прасторы: {space}", + "@goToSpace": { + "type": "String", + "space": {} + }, + "markAsUnread": "Адзначыць як непрачытанае", + "@markAsUnread": {}, + "userLevel": "{level} - Карыстальнік", + "@userLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "moderatorLevel": "{level} - Мадэратар", + "@moderatorLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "adminLevel": "{level} - Адміністратар", + "@adminLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "changeGeneralChatSettings": "Змяніць агульныя налады чату", + "@changeGeneralChatSettings": {}, + "inviteOtherUsers": "Запрасіць іншых карыстальнікаў у гэты чат", + "@inviteOtherUsers": {}, + "changeTheChatPermissions": "Змяніць дазволы чату", + "@changeTheChatPermissions": {}, + "changeTheVisibilityOfChatHistory": "Змяніць бачнасць гісторыі чату", + "@changeTheVisibilityOfChatHistory": {}, + "sendRoomNotifications": "Дасылаць паведамленні @room", + "@sendRoomNotifications": {}, + "changeTheDescriptionOfTheGroup": "Змяніць апісанне чату", + "@changeTheDescriptionOfTheGroup": {}, + "chatPermissionsDescription": "Задаць узровень дазволаў, які неабходны для некаторых дзеянняў у чаце. Узроўні 0, 50 і 100 звычайна адлюстроўваюць карыстальнікаў, мадэратараў і адміністратараў, але любая градацыя магчыма.", + "@chatPermissionsDescription": {}, + "updateInstalled": "🎉 Абнаўленне {version} усталявана!", + "@updateInstalled": { + "type": "String", + "placeholders": { + "version": { + "type": "String" + } + } + }, + "changelog": "Спіс змен", + "@changelog": {}, + "sendCanceled": "Адпраўка скасавана", + "@sendCanceled": {}, + "loginWithMatrixId": "Увайсці з Matrix-ID", + "@loginWithMatrixId": {}, + "discoverHomeservers": "Даследаваць дамашнія сервера", + "@discoverHomeservers": {}, + "whatIsAHomeserver": "Што такое дамашні сервер?", + "@whatIsAHomeserver": {}, + "doesNotSeemToBeAValidHomeserver": "Гэта не выглядае як дамашні сервер. Няслушны URL?", + "@doesNotSeemToBeAValidHomeserver": {}, + "calculatingFileSize": "Вылічэнне памеру файла...", + "@calculatingFileSize": {}, + "prepareSendingAttachment": "Падрыхтоўка адпраўкі прыкладання...", + "@prepareSendingAttachment": {}, + "sendingAttachment": "Адпраўка прыкладання...", + "@sendingAttachment": {}, + "generatingVideoThumbnail": "Стварэнне вокладкі відэа...", + "@generatingVideoThumbnail": {}, + "compressVideo": "Сцісканне відэа...", + "@compressVideo": {}, + "sendingAttachmentCountOfCount": "Адпраўляецца прыкладанне {index} з {length}...", + "@sendingAttachmentCountOfCount": { + "type": "integer", + "placeholders": { + "index": { + "type": "int" + }, + "length": { + "type": "int" + } + } + }, + "serverLimitReached": "Дасягнуты серверны ліміт! Пачакайце {seconds} секунд...", + "@serverLimitReached": { + "type": "integer", + "placeholders": { + "seconds": { + "type": "int" + } + } + }, + "oneOfYourDevicesIsNotVerified": "Адна з вашых прылад не спраўджана", + "@oneOfYourDevicesIsNotVerified": {}, + "noticeChatBackupDeviceVerification": "Заўвага: Калі вы падключыце ўсе свае прылады да рэзервовага капіравання, яны аўтаматычна спраўдзяцца.", + "@noticeChatBackupDeviceVerification": {}, + "welcomeText": "Вітаначкі 👋 Гэта FluffyChat. Вы можаце ўвайсці на любы дамашні сервер, што сумяшчальны з https://matrix.org, а потым паразмаўляць з кім-небудзь. Гэта вялізная дэцэнтралізаваная сетка абмену паведамленнямі!", + "@welcomeText": {}, + "blur": "Размыццё:", + "@blur": {}, + "opacity": "Празрыстасць:", + "@opacity": {}, + "setWallpaper": "Задаць шпалеры", + "@setWallpaper": {}, + "notificationRuleMemberEvent": "Падзеі ўдзельніцтва", + "@notificationRuleMemberEvent": {}, + "notificationRuleMemberEventDescription": "Спыніць усе паведамленні пра ўдзельніцтва.", + "@notificationRuleMemberEventDescription": {}, + "notificationRuleIsUserMention": "Згадванні карыстальніка", + "@notificationRuleIsUserMention": {}, + "notificationRuleIsUserMentionDescription": "Паведамляе, калі карыстальніка згадалі ў паведамленні.", + "@notificationRuleIsUserMentionDescription": {}, + "notificationRuleContainsDisplayName": "Мае адлюстроўваемае імя", + "@notificationRuleContainsDisplayName": {}, + "notificationRuleContainsDisplayNameDescription": "Паведамляе, калі паведамленне мае іх адлюстроўваемае імя.", + "@notificationRuleContainsDisplayNameDescription": {}, + "notificationRuleIsRoomMention": "Згадванні пакою", + "@notificationRuleIsRoomMention": {}, + "notificationRuleIsRoomMentionDescription": "Паведамляе карыстальніка, калі згадваюць пакой.", + "@notificationRuleIsRoomMentionDescription": {}, + "notificationRuleRoomnotif": "Паведамленні пакою", + "@notificationRuleRoomnotif": {}, + "notificationRuleRoomnotifDescription": "Паведамляе пра згадванні '@room'.", + "@notificationRuleRoomnotifDescription": {}, + "notificationRuleTombstone": "Помнік", + "@notificationRuleTombstone": {}, + "notificationRuleTombstoneDescription": "Паведамляе пра дэактывацыю пакою.", + "@notificationRuleTombstoneDescription": {}, + "notificationRuleReaction": "Рэакцыя", + "@notificationRuleReaction": {}, + "notificationRuleReactionDescription": "Адключыць усе паведамленні пра рэакцыі.", + "@notificationRuleReactionDescription": {}, + "notificationRuleRoomServerAcl": "ACL сервера пакою", + "@notificationRuleRoomServerAcl": {}, + "notificationRuleRoomServerAclDescription": "Адключыць паведамленні пра серверныя спісы кантролю пакою (ACL).", + "@notificationRuleRoomServerAclDescription": {}, + "notificationRuleSuppressEdits": "Заглушыць змены", + "@notificationRuleSuppressEdits": {}, + "notificationRuleSuppressEditsDescription": "Заглушыць паведамленні пра адрэдагаваныя паведамленні.", + "@notificationRuleSuppressEditsDescription": {}, + "notificationRuleCall": "Выклік", + "@notificationRuleCall": {}, + "notificationRuleCallDescription": "Паведамляе пра выклікі.", + "@notificationRuleCallDescription": {}, + "notificationRuleEncryptedRoomOneToOne": "Шыфраваны пакой One-to-One", + "@notificationRuleEncryptedRoomOneToOne": {}, + "notificationRuleEncryptedRoomOneToOneDescription": "Паведамляе пра паведамленні ў шыфраваных one-to-one пакоях.", + "@notificationRuleEncryptedRoomOneToOneDescription": {}, + "notificationRuleRoomOneToOne": "Пакой One-to-One", + "@notificationRuleRoomOneToOne": {}, + "notificationRuleRoomOneToOneDescription": "Паведамляе пра паведамленні ў пакоях one-to-one.", + "@notificationRuleRoomOneToOneDescription": {}, + "notificationRuleMessage": "Паведамленне", + "@notificationRuleMessage": {}, + "notificationRuleMessageDescription": "Паведамляе пра звычайныя паведамленні.", + "@notificationRuleMessageDescription": {}, + "notificationRuleEncrypted": "Зашыфравана", + "@notificationRuleEncrypted": {}, + "notificationRuleEncryptedDescription": "Паведамляе пра паведамленні ў зашыфраваных пакоях.", + "@notificationRuleEncryptedDescription": {}, + "notificationRuleJitsi": "Jitsi", + "@notificationRuleJitsi": {}, + "notificationRuleJitsiDescription": "Паведамляе пра падзеі віджэту Jitsi.", + "@notificationRuleJitsiDescription": {}, + "notificationRuleServerAcl": "Заглушыць серверныя падзеі ACL", + "@notificationRuleServerAcl": {}, + "notificationRuleServerAclDescription": "Заглушыць паведамленні пра серверныя падзеі ACL.", + "@notificationRuleServerAclDescription": {}, + "unknownPushRule": "Невядомае правіла пуша '{rule}'", + "@unknownPushRule": { + "type": "String", + "placeholders": { + "rule": { + "type": "String" + } + } + }, + "sentVoiceMessage": "🎙️{duration} - Галасавое паведамленне ад {sender}", + "@sentVoiceMessage": { + "type": "String", + "placeholders": { + "sender": { + "type": "String" + }, + "duration": { + "type": "String" + } + } + }, + "deletePushRuleCanNotBeUndone": "Калі вы выдаліце гэтыя налады паведамленняў, гэта не можа быць адменена.", + "@deletePushRuleCanNotBeUndone": {}, + "more": "Больш", + "@more": {}, + "shareKeysWith": "Падзяліцца ключамі з...", + "@shareKeysWith": {}, + "shareKeysWithDescription": "Якім прыладам вы давяраеце настолькі, каб яны маглі чытаць вашыя зашыфраваныя паведамленні?", + "@shareKeysWithDescription": {}, + "pause": "Паўза", + "@pause": {}, + "resume": "Працягнуць", + "@resume": {}, + "newSubSpace": "Новая пад-прастора", + "@newSubSpace": {}, + "moveToDifferentSpace": "Перамясціцца ў іншую прастору", + "@moveToDifferentSpace": {}, + "moveUp": "Перамясціць вышэй", + "@moveUp": {}, + "moveDown": "Перамясціць ніжэй", + "@moveDown": {}, + "removeFromSpaceDescription": "Гэты чат будзе выдалены з прасторы, але з'явіцца ў вашым спісе чатаў.", + "@removeFromSpaceDescription": {}, + "countChats": "{chats} чатаў", + "@countChats": { + "type": "String", + "placeholders": { + "chats": { + "type": "int" + } + } + }, + "spaceMemberOf": "Удзельнік прасторы {spaces}", + "@spaceMemberOf": { + "type": "String", + "placeholders": { + "spaces": { + "type": "String" + } + } + }, + "donate": "Даць грошы", + "@donate": {} } From 5dc9973cabaabf62a6036328201eff7cd597e3c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 21:10:32 +0000 Subject: [PATCH 10/10] build: (deps): bump go_router from 16.2.5 to 16.3.0 Bumps [go_router](https://github.com/flutter/packages/tree/main/packages) from 16.2.5 to 16.3.0. - [Commits](https://github.com/flutter/packages/commits/go_router-v16.3.0/packages) --- updated-dependencies: - dependency-name: go_router dependency-version: 16.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pubspec.lock | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 739523f6d..e76e09dcd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -789,10 +789,10 @@ packages: dependency: "direct main" description: name: go_router - sha256: e1d7ffb0db475e6e845eb58b44768f50b830e23960e3df6908924acd8f7f70ea + sha256: d8f590a69729f719177ea68eb1e598295e8dbc41bbc247fed78b2c8a25660d7c url: "https://pub.dev" source: hosted - version: "16.2.5" + version: "16.3.0" gsettings: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index ffba13584..609fbdfd4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,7 +42,7 @@ dependencies: flutter_web_auth_2: ^3.1.1 # Version 4 blocked by https://github.com/MixinNetwork/flutter-plugins/issues/379 flutter_webrtc: ^1.2.0 geolocator: ^14.0.2 - go_router: ^16.2.5 + go_router: ^16.3.0 handy_window: ^0.4.0 html: ^0.15.4 http: ^1.5.0