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`. 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. diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index bc679990c..7cbbde823 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": { @@ -2812,176 +2812,614 @@ } } }, - "unverified": "Непацверджана", - "verified": "Пацверджана", - "verify": "Пацвердзіць", - "verifyStart": "Пачаць пацверджанне", - "verifySuccess": "Вы паспяхова пацвердзілі!", - "verifyTitle": "Пацверджанне іншага акаўнта", - "videoCall": "Відэазванок", - "visibilityOfTheChatHistory": "Виднасьць гісторыі чата", - "visibleForAllParticipants": "Видна для ўсіх удзельнікаў", - "pleaseTryAgainLaterOrChooseDifferentServer": "Калі ласка, паспрабуйце яшчэ раз пазней або выберыце іншы сервер.", + "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}", - "profileNotFound": "Карыстальнік не знойдзены на серверы. Магчыма, ёсць праблема з злучэннем або карыстальнік не існуе.", - "setTheme": "Усталяваць тэму:", - "setColorTheme": "Усталяваць каляровую тэму:", + "@signInWith": { + "type": "String", + "placeholders": { + "provider": { + "type": "String" + } + } + }, + "profileNotFound": "Карыстальнік не знойдзены на гэтым серверы. Гэта можа быць памылка сеткі ці карыстальніка не існуе.", + "@profileNotFound": {}, + "setTheme": "Тэма:", + "@setTheme": {}, + "setColorTheme": "Каляровая схема:", + "@setColorTheme": {}, "invite": "Запрасіць", - "inviteGroupChat": "📨 Запрасіць у групавы чат", - "invitePrivateChat": "📨 Запрасіць у прыватны чат", - "invalidInput": "Несапраўдны ўвод!", - "wrongPinEntered": "Уведзены няправільны PIN! Паспрабуйце яшчэ раз праз {seconds} секунд...", - "pleaseEnterANumber": "Калі ласка, увядзіце лік, большы за 0", - "archiveRoomDescription": "Гэтая размова будзе перамешчана ў архіў. Іншыя карыстальнікі змогуць бачыць, што вы пакінулі размову.", - "roomUpgradeDescription": "Пасля гэтага размова будзе перастворана з новай версіяй пакоя. Удзельнікі будуць праінфармаваны, што ім трэба перайсці на новую размову. Больш інфармацыі пра версіі пакояў можна знайсці на https://spec.matrix.org/latest/rooms/", - "removeDevicesDescription": "Вы будзеце выведзены з гэтага прылады і больш не зможаце атрымліваць паведамленні.", - "banUserDescription": "Карыстальнік будзе заблакаваны ў гэтым чаце і не зможа зноў увайсці, пакуль яго не разблакуюць.", - "unbanUserDescription": "Карыстальнік зможа зноў увайсці ў чат, калі паспрабуе.", - "kickUserDescription": "Карыстальнік выдалены з чата, але не заблакаваны. У публічных чатах карыстальнік можа далучыцца зноў у любы час.", - "makeAdminDescription": "Калі вы зробіце гэтага карыстальніка адміністратарам, вы можаце не мець магчымасці адмяніць гэта, бо ён атрымае тыя ж правы, што і вы.", - "pushNotificationsNotAvailable": "Паведамленні ў выглядзе пуш-апавяшчэнняў недаступныя", - "learnMore": "Даведайцеся больш", - "yourGlobalUserIdIs": "Ваш глабальны ідэнтыфікатар карыстальніка: ", - "noUsersFoundWithQuery": "На жаль, карыстальнік з запытам \"{query}\" не знойдзены. Праверце, ці не дапусцілі вы памылку ў напісанні.", - "knocking": "Дзвін", - "chatCanBeDiscoveredViaSearchOnServer": "Чат можна знайсці праз пошук на {server}", - "searchChatsRooms": "Пошук #чатоў, @карыстальнікаў...", + "@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": "Стварыць групу і запрасіць карыстальнікаў", - "groupCanBeFoundViaSearch": "Групу можна знайсці праз пошук", - "wrongRecoveryKey": "Прабачце... здаецца, гэта не правільны ключ аднаўлення.", + "@createGroupAndInviteUsers": {}, + "groupCanBeFoundViaSearch": "Група можа быць знойдзена праз пошук", + "@groupCanBeFoundViaSearch": {}, "startConversation": "Пачаць размову", - "commandHint_sendraw": "Адправіць сыры json", - "databaseMigrationTitle": "База дадзеных аптымізавана", - "databaseMigrationBody": "Калі ласка, пачакайце. Гэта можа заняць некалькі момантаў.", - "leaveEmptyToClearStatus": "Астатняйце пустым, каб ачысціць свой статус.", + "@startConversation": {}, + "commandHint_sendraw": "Даслаць толькі json", + "@commandHint_sendraw": {}, + "databaseMigrationTitle": "База даных аптымізавана", + "@databaseMigrationTitle": {}, + "databaseMigrationBody": "Калі ласка, пачакайце. Гэта можа заняць некаторы час.", + "@databaseMigrationBody": {}, + "leaveEmptyToClearStatus": "Пакіньце пустым, каб ачысціць свой статус.", + "@leaveEmptyToClearStatus": {}, "select": "Выбраць", - "searchForUsers": "Шукайце @карыстальнікаў...", - "pleaseEnterYourCurrentPassword": "Калі ласка, увядзіце ваш існуючы пароль", + "@select": {}, + "searchForUsers": "Пошук @карыстальнікаў...", + "@searchForUsers": {}, + "pleaseEnterYourCurrentPassword": "Калі ласка, увядзіце свой бягучы пароль", + "@pleaseEnterYourCurrentPassword": {}, "newPassword": "Новы пароль", - "pleaseChooseAStrongPassword": "Калі ласка, выберыце моцны пароль", + "@newPassword": {}, + "pleaseChooseAStrongPassword": "Калі ласка, падбярыце больш надзейны пароль", + "@pleaseChooseAStrongPassword": {}, "passwordsDoNotMatch": "Паролі не супадаюць", - "passwordIsWrong": "Уведзены вамі пароль няправільны", + "@passwordsDoNotMatch": {}, + "passwordIsWrong": "Вы ўвялі няверны пароль", + "@passwordIsWrong": {}, "publicLink": "Публічная спасылка", - "publicChatAddresses": "Публічныя адрасы чатаў", + "@publicLink": {}, + "publicChatAddresses": "Публічныя адрасы чату", + "@publicChatAddresses": {}, "createNewAddress": "Стварыць новы адрас", + "@createNewAddress": {}, "joinSpace": "Далучыцца да прасторы", + "@joinSpace": {}, "publicSpaces": "Публічныя прасторы", - "addChatOrSubSpace": "Дадаць чат або падпрастору", - "subspace": "Падпрастора", - "decline": "Адмовіцца", + "@publicSpaces": {}, + "addChatOrSubSpace": "Дадаць чат ці пад-прастору", + "@addChatOrSubSpace": {}, + "subspace": "Пад-прастора", + "@subspace": {}, + "decline": "Адхіліць", + "@decline": {}, "thisDevice": "Гэта прылада:", - "initAppError": "Памылка падчас ініцыялізацыі прыкладання", - "userRole": "Роля карыстальніка", - "minimumPowerLevel": "{level} — мінімальны ўзровень паўнамоцтваў.", - "searchIn": "Шукайце ў чате \"{chat}\"...", - "searchMore": "Шукайце яшчэ...", + "@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": "Файлы", - "databaseBuildErrorBody": "Не ўдаецца пабудаваць базу дадзеных SQlite. Праграма пакуль выкарыстоўвае старую базу дадзеных. Калі ласка, паведаміце пра гэтую памылку распрацоўшчыкам на {url}. Паведамленне пра памылку: {error}", - "sessionLostBody": "Ваш сеанс страчаны. Калі ласка, паведаміце пра гэтую памылку распрацоўшчыкам на {url}. Паведамленне пра памылку: {error}", - "restoreSessionBody": "Праграма цяпер спрабуе аднавіць ваш сеанс з рэзервовай копіі. Калі ласка, паведаміце пра гэтую памылку распрацоўшчыкам на {url}. Паведамленне пра памылку: {error}", + "@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}?", - "sendReadReceipts": "Адправіць пацверджанні пра чытанне", - "sendTypingNotificationsDescription": "Іншыя ўдзельнікі чату могуць бачыць, калі вы набіраеце новае паведамленне.", - "sendReadReceiptsDescription": "Іншыя ўдзельнікі чату могуць бачыць, калі вы прачыталі паведамленне.", - "formattedMessages": "Фарматаваныя паведамленні", - "formattedMessagesDescription": "Паказваць багаты змест паведамленняў, напрыклад, тэкст у тлустым шрыфце з выкарыстаннем markdown.", - "verifyOtherUser": "🔐 Праверыць іншага карыстальніка", - "verifyOtherUserDescription": "Калі вы правяраеце іншага карыстальніка, вы можаце быць упэўнены, што ведаеце, з кім сапраўды перапісываецеся. 💪\n\nКалі вы пачынаеце праверку, вы і іншы карыстальнік ўбачыце ў аплікацыі ўсплывальнае акно. Там вы ўбачыце серыю эмодзі або нумароў, якія трэба параўнаць паміж сабой.\n\nЛепшы спосаб зрабіць гэта — сустрэцца ці пачаць відэазванок. 🧑‍🤝‍🧑", - "verifyOtherDevice": "🔐 Праверыць іншае прыладу", - "verifyOtherDeviceDescription": "Калі вы правяраеце іншую прыладу, гэтыя прылады могуць абменьвацца ключамі, што павышае вашу агульную бяспеку. 💪 Калі вы пачынаеце праверку, у аплікацыі з'явіцца ўсплывальнае акно на абодвух прыладах. Там вы ўбачыце серыю эмодзі або нумароў, якія трэба параўнаць. Лепш мець абедзве прылады пад рукой перад пачаткам праверкі. 🤳", - "acceptedKeyVerification": "{sender} прыняў праверку ключа", - "canceledKeyVerification": "{sender} адмяніў праверку ключа", - "completedKeyVerification": "{sender} завяршыў праверку ключа", - "isReadyForKeyVerification": "{sender} гатовы да праверкі ключа", - "requestedKeyVerification": "{sender} запытаў праверку ключа", - "startedKeyVerification": "{sender} пачаў праверку ключа", + "@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": "Празрысты", - "incomingMessages": "Уходзячыя паведамленні", - "stickers": "Наліпкі", - "discover": "Адкрыць", - "commandHint_ignore": "Ігнараваць дадзены ідэнтыфікатар матрыцы", - "commandHint_unignore": "Адмяніць ігнараванне дадзенага ідэнтыфікатара матрыцы", - "unreadChatsInApp": "{appname}: {unread} нявідкладных размоваў", - "noDatabaseEncryption": "Шыфраванне базы дадзеных не падтрымліваецца на гэтай платформе", - "thereAreCountUsersBlocked": "Зараз заблакавана {count} карыстальнікаў.", - "restricted": "Абмежаваны", - "knockRestricted": "Абмежавана ўдар", - "goToSpace": "Перайсці ў прастору: {space}", - "markAsUnread": "Адзначыць як нявідкладнае", + "@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} - Адміністратар", - "changeGeneralChatSettings": "Змяніць агульныя налады чата", + "@adminLevel": { + "type": "String", + "placeholders": { + "level": { + "type": "int" + } + } + }, + "changeGeneralChatSettings": "Змяніць агульныя налады чату", + "@changeGeneralChatSettings": {}, "inviteOtherUsers": "Запрасіць іншых карыстальнікаў у гэты чат", - "changeTheChatPermissions": "Змяніць дазволы чата", - "changeTheVisibilityOfChatHistory": "Змяніць бачнасць гісторыі чата", - "changeTheCanonicalRoomAlias": "Змяніць асноўны публічны адрас чата", - "sendRoomNotifications": "Адправіць паведамленні @room", - "changeTheDescriptionOfTheGroup": "Змяніць апісанне чата", - "chatPermissionsDescription": "Вызначце, які ўзровень паўнамоцтваў неабходны для пэўных дзеянняў у гэтым чаце. Узроўні паўнамоцтваў 0, 50 і 100 звычайна прадстаўляюць карыстальнікаў, мадэратараў і адміністратараў, але магчымы любыя градацыі.", - "updateInstalled": "🎉 Усталявана абнаўленне {version}!", - "changelog": "Змяненні", + "@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", - "discoverHomeservers": "Адкрыйце хатнія серверы", - "whatIsAHomeserver": "Што такое хатні сервер?", - "homeserverDescription": "Усе вашы дадзеныя захоўваюцца на хатнім серверы, так жа, як і ў пастаўшчыка электроннай пошты. Вы можаце выбраць, які хатні сервер выкарыстоўваць, пры гэтым вы можаце працягваць камунікаваць з усімі. Даведайцеся больш на https://matrix.org.", - "doesNotSeemToBeAValidHomeserver": "Гэта, здаецца, несумяшчальны хатні сервер. Няправільны URL?", - "calculatingFileSize": "Разлік памеру файла...", - "prepareSendingAttachment": "Падрыхтоўка да адпраўкі прыкладання...", + "@loginWithMatrixId": {}, + "discoverHomeservers": "Даследаваць дамашнія сервера", + "@discoverHomeservers": {}, + "whatIsAHomeserver": "Што такое дамашні сервер?", + "@whatIsAHomeserver": {}, + "doesNotSeemToBeAValidHomeserver": "Гэта не выглядае як дамашні сервер. Няслушны URL?", + "@doesNotSeemToBeAValidHomeserver": {}, + "calculatingFileSize": "Вылічэнне памеру файла...", + "@calculatingFileSize": {}, + "prepareSendingAttachment": "Падрыхтоўка адпраўкі прыкладання...", + "@prepareSendingAttachment": {}, "sendingAttachment": "Адпраўка прыкладання...", - "generatingVideoThumbnail": "Стварэнне эскізу відэа...", + "@sendingAttachment": {}, + "generatingVideoThumbnail": "Стварэнне вокладкі відэа...", + "@generatingVideoThumbnail": {}, "compressVideo": "Сцісканне відэа...", - "sendingAttachmentCountOfCount": "Адпраўка прыкладання {index} з {length}...", - "serverLimitReached": "Даступна мяжа сервера! Чаканне {seconds} секунд...", - "oneOfYourDevicesIsNotVerified": "Адзін з вашых прылад не праверены", - "noticeChatBackupDeviceVerification": "Заўвага: Калі вы падключаеце ўсе свае прылады да рэзервовай копіі чата, яны аўтаматычна праверяцца.", - "continueText": "Працягваць", - "welcomeText": "Прывітанне! 👋 Гэта FluffyChat. Вы можаце ўвайсці на любы хатні сервер, сумяшчальны з https://matrix.org. А потым перапісацца з кім заўгодна. Гэта вялікая дэцэнтралізаваная сетка паведамленняў!", + "@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": "Размыццё:", - "opacity": "Непразрыстасць:", - "setWallpaper": "Усталяваць фонавы малюнак", - "notificationRuleMemberEvent": "Падзея ўдзельніка", - "notificationRuleMemberEventDescription": "Падаўляе апавяшчэнні пра падзеі ўдзельнікаў.", - "notificationRuleIsUserMention": "Згадка карыстальніка", - "notificationRuleIsUserMentionDescription": "Паведамляе карыстальніку, калі яго прамым чынам згадваюць у паведамленні.", - "notificationRuleContainsDisplayName": "Змяшчае імя паказу", - "notificationRuleContainsDisplayNameDescription": "Паведамляе карыстальніку, калі паведамленне ўтрымлівае яго імя паказу.", - "notificationRuleIsRoomMention": "Згадка ў пакоі", - "notificationRuleIsRoomMentionDescription": "Паведамляе карыстальніку, калі ёсць згадка ў пакоі.", - "notificationRuleRoomnotif": "Апавяшчэнне пакоя", - "notificationRuleRoomnotifDescription": "Паведамляе карыстальніку, калі паведамленне ўтрымлівае '@room'.", - "notificationRuleTombstone": "Мемарыял", - "notificationRuleTombstoneDescription": "Паведамляе карыстальніку пра паведамленні аб дэактывацыі пакоя.", + "@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": "Рэакцыя", - "notificationRuleReactionDescription": "Падаўляе апавяшчэнні пра рэакцыі.", - "notificationRuleRoomServerAcl": "ACL сервера пакоя", - "notificationRuleRoomServerAclDescription": "Падаўляе апавяшчэнні пра спісы кантролю доступу да сервера пакояў (ACL).", - "notificationRuleSuppressEdits": "Падаўляе рэдагаванні", - "notificationRuleSuppressEditsDescription": "Падаўляе апавяшчэнні пра рэдагаваныя паведамленні.", - "notificationRuleCall": "Званок", - "notificationRuleCallDescription": "Паведамляе карыстальніку пра званкі.", - "notificationRuleEncryptedRoomOneToOne": "Зашыфраваны пакой адзін-на-адзін", - "notificationRuleEncryptedRoomOneToOneDescription": "Паведамляе карыстальніку пра паведамленні ў зашыфраваных пакоях адзін-на-адзін.", - "notificationRuleRoomOneToOne": "Пакой адзін-на-адзін", - "notificationRuleRoomOneToOneDescription": "Паведамляе карыстальніку пра паведамленні ў пакоях адзін-на-адзін.", + "@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": "Паведамленне", - "notificationRuleMessageDescription": "Паведамляе карыстальніку пра агульныя паведамленні.", - "notificationRuleEncrypted": "Зашыфраваны", - "notificationRuleEncryptedDescription": "Паведамляе карыстальніку пра паведамленні ў зашыфраваных пакоях.", + "@notificationRuleMessage": {}, + "notificationRuleMessageDescription": "Паведамляе пра звычайныя паведамленні.", + "@notificationRuleMessageDescription": {}, + "notificationRuleEncrypted": "Зашыфравана", + "@notificationRuleEncrypted": {}, + "notificationRuleEncryptedDescription": "Паведамляе пра паведамленні ў зашыфраваных пакоях.", + "@notificationRuleEncryptedDescription": {}, "notificationRuleJitsi": "Jitsi", - "notificationRuleJitsiDescription": "Паведамляе карыстальніку пра падзеі віджэта Jitsi.", - "notificationRuleServerAcl": "Падаўляе падзеі ACL сервера", - "notificationRuleServerAclDescription": "Падаўляе апавяшчэнні пра падзеі ACL сервера.", + "@notificationRuleJitsi": {}, + "notificationRuleJitsiDescription": "Паведамляе пра падзеі віджэту Jitsi.", + "@notificationRuleJitsiDescription": {}, + "notificationRuleServerAcl": "Заглушыць серверныя падзеі ACL", + "@notificationRuleServerAcl": {}, + "notificationRuleServerAclDescription": "Заглушыць паведамленні пра серверныя падзеі ACL.", + "@notificationRuleServerAclDescription": {}, "unknownPushRule": "Невядомае правіла пуша '{rule}'", - "sentVoiceMessage": "🎙️ {duration} - Гаварэчае паведамленне ад {sender}", - "deletePushRuleCanNotBeUndone": "Калі вы выдаліце гэтае наладжванне апавяшчэнняў, яго нельга будзе адменіць.", + "@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": "Падзяліцца ключамі з...", - "shareKeysWithDescription": "Якія прылады павінны быць даверанымі, каб яны маглі чытаць вашыя паведамленні ў зашыфраваных чатах?", + "@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": {}, "ignore": "Блакаваць", "ignoredUsers": "Блакаваные карыстальнікі", "writeAMessageLangCodes": "Пішыце на {l1} або {l2}...", @@ -4113,808 +4551,6 @@ "courseStartDesc": "Pangea Bot гатовы да працы ў любы час!\n\n...але навучанне лепш з сябрамі!", "@@locale": "be", "@@last_modified": "2026-01-29 15:24:53.163474", - "@unverified": { - "type": "String", - "placeholders": {} - }, - "@verified": { - "type": "String", - "placeholders": {} - }, - "@verify": { - "type": "String", - "placeholders": {} - }, - "@verifyStart": { - "type": "String", - "placeholders": {} - }, - "@verifySuccess": { - "type": "String", - "placeholders": {} - }, - "@verifyTitle": { - "type": "String", - "placeholders": {} - }, - "@videoCall": { - "type": "String", - "placeholders": {} - }, - "@visibilityOfTheChatHistory": { - "type": "String", - "placeholders": {} - }, - "@visibleForAllParticipants": { - "type": "String", - "placeholders": {} - }, - "@pleaseTryAgainLaterOrChooseDifferentServer": { - "type": "String", - "placeholders": {} - }, - "@signInWith": { - "type": "String", - "placeholders": { - "provider": { - "type": "String" - } - } - }, - "@profileNotFound": { - "type": "String", - "placeholders": {} - }, - "@setTheme": { - "type": "String", - "placeholders": {} - }, - "@setColorTheme": { - "type": "String", - "placeholders": {} - }, - "@invite": { - "type": "String", - "placeholders": {} - }, - "@inviteGroupChat": { - "type": "String", - "placeholders": {} - }, - "@invitePrivateChat": { - "type": "String", - "placeholders": {} - }, - "@invalidInput": { - "type": "String", - "placeholders": {} - }, - "@wrongPinEntered": { - "type": "String", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "@pleaseEnterANumber": { - "type": "String", - "placeholders": {} - }, - "@archiveRoomDescription": { - "type": "String", - "placeholders": {} - }, - "@roomUpgradeDescription": { - "type": "String", - "placeholders": {} - }, - "@removeDevicesDescription": { - "type": "String", - "placeholders": {} - }, - "@banUserDescription": { - "type": "String", - "placeholders": {} - }, - "@unbanUserDescription": { - "type": "String", - "placeholders": {} - }, - "@kickUserDescription": { - "type": "String", - "placeholders": {} - }, - "@makeAdminDescription": { - "type": "String", - "placeholders": {} - }, - "@pushNotificationsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@learnMore": { - "type": "String", - "placeholders": {} - }, - "@yourGlobalUserIdIs": { - "type": "String", - "placeholders": {} - }, - "@noUsersFoundWithQuery": { - "type": "String", - "placeholders": { - "query": { - "type": "String" - } - } - }, - "@knocking": { - "type": "String", - "placeholders": {} - }, - "@chatCanBeDiscoveredViaSearchOnServer": { - "type": "String", - "placeholders": { - "server": { - "type": "String" - } - } - }, - "@searchChatsRooms": { - "type": "String", - "placeholders": {} - }, - "@nothingFound": { - "type": "String", - "placeholders": {} - }, - "@groupName": { - "type": "String", - "placeholders": {} - }, - "@createGroupAndInviteUsers": { - "type": "String", - "placeholders": {} - }, - "@groupCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@wrongRecoveryKey": { - "type": "String", - "placeholders": {} - }, - "@startConversation": { - "type": "String", - "placeholders": {} - }, - "@commandHint_sendraw": { - "type": "String", - "placeholders": {} - }, - "@databaseMigrationTitle": { - "type": "String", - "placeholders": {} - }, - "@databaseMigrationBody": { - "type": "String", - "placeholders": {} - }, - "@leaveEmptyToClearStatus": { - "type": "String", - "placeholders": {} - }, - "@select": { - "type": "String", - "placeholders": {} - }, - "@searchForUsers": { - "type": "String", - "placeholders": {} - }, - "@pleaseEnterYourCurrentPassword": { - "type": "String", - "placeholders": {} - }, - "@newPassword": { - "type": "String", - "placeholders": {} - }, - "@pleaseChooseAStrongPassword": { - "type": "String", - "placeholders": {} - }, - "@passwordsDoNotMatch": { - "type": "String", - "placeholders": {} - }, - "@passwordIsWrong": { - "type": "String", - "placeholders": {} - }, - "@publicLink": { - "type": "String", - "placeholders": {} - }, - "@publicChatAddresses": { - "type": "String", - "placeholders": {} - }, - "@createNewAddress": { - "type": "String", - "placeholders": {} - }, - "@joinSpace": { - "type": "String", - "placeholders": {} - }, - "@publicSpaces": { - "type": "String", - "placeholders": {} - }, - "@addChatOrSubSpace": { - "type": "String", - "placeholders": {} - }, - "@subspace": { - "type": "String", - "placeholders": {} - }, - "@decline": { - "type": "String", - "placeholders": {} - }, - "@thisDevice": { - "type": "String", - "placeholders": {} - }, - "@initAppError": { - "type": "String", - "placeholders": {} - }, - "@userRole": { - "type": "String", - "placeholders": {} - }, - "@minimumPowerLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "String" - } - } - }, - "@searchIn": { - "type": "String", - "placeholders": { - "chat": { - "type": "String" - } - } - }, - "@searchMore": { - "type": "String", - "placeholders": {} - }, - "@gallery": { - "type": "String", - "placeholders": {} - }, - "@files": { - "type": "String", - "placeholders": {} - }, - "@databaseBuildErrorBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "@sessionLostBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "@restoreSessionBody": { - "type": "String", - "placeholders": { - "url": { - "type": "String" - }, - "error": { - "type": "String" - } - } - }, - "@forwardMessageTo": { - "type": "String", - "placeholders": { - "roomName": { - "type": "String" - } - } - }, - "@sendReadReceipts": { - "type": "String", - "placeholders": {} - }, - "@sendTypingNotificationsDescription": { - "type": "String", - "placeholders": {} - }, - "@sendReadReceiptsDescription": { - "type": "String", - "placeholders": {} - }, - "@formattedMessages": { - "type": "String", - "placeholders": {} - }, - "@formattedMessagesDescription": { - "type": "String", - "placeholders": {} - }, - "@verifyOtherUser": { - "type": "String", - "placeholders": {} - }, - "@verifyOtherUserDescription": { - "type": "String", - "placeholders": {} - }, - "@verifyOtherDevice": { - "type": "String", - "placeholders": {} - }, - "@verifyOtherDeviceDescription": { - "type": "String", - "placeholders": {} - }, - "@acceptedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "@canceledKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "@completedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "@isReadyForKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "@requestedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "@startedKeyVerification": { - "type": "String", - "placeholders": { - "sender": { - "type": "String" - } - } - }, - "@transparent": { - "type": "String", - "placeholders": {} - }, - "@incomingMessages": { - "type": "String", - "placeholders": {} - }, - "@stickers": { - "type": "String", - "placeholders": {} - }, - "@discover": { - "type": "String", - "placeholders": {} - }, - "@commandHint_ignore": { - "type": "String", - "placeholders": {} - }, - "@commandHint_unignore": { - "type": "String", - "placeholders": {} - }, - "@unreadChatsInApp": { - "type": "String", - "placeholders": { - "appname": { - "type": "String" - }, - "unread": { - "type": "String" - } - } - }, - "@noDatabaseEncryption": { - "type": "String", - "placeholders": {} - }, - "@thereAreCountUsersBlocked": { - "type": "String", - "placeholders": { - "count": {} - } - }, - "@restricted": { - "type": "String", - "placeholders": {} - }, - "@knockRestricted": { - "type": "String", - "placeholders": {} - }, - "@goToSpace": { - "type": "String", - "placeholders": { - "space": {} - } - }, - "@markAsUnread": { - "type": "String", - "placeholders": {} - }, - "@userLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@moderatorLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@adminLevel": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@changeGeneralChatSettings": { - "type": "String", - "placeholders": {} - }, - "@inviteOtherUsers": { - "type": "String", - "placeholders": {} - }, - "@changeTheChatPermissions": { - "type": "String", - "placeholders": {} - }, - "@changeTheVisibilityOfChatHistory": { - "type": "String", - "placeholders": {} - }, - "@changeTheCanonicalRoomAlias": { - "type": "String", - "placeholders": {} - }, - "@sendRoomNotifications": { - "type": "String", - "placeholders": {} - }, - "@changeTheDescriptionOfTheGroup": { - "type": "String", - "placeholders": {} - }, - "@chatPermissionsDescription": { - "type": "String", - "placeholders": {} - }, - "@updateInstalled": { - "type": "String", - "placeholders": { - "version": { - "type": "String" - } - } - }, - "@changelog": { - "type": "String", - "placeholders": {} - }, - "@sendCanceled": { - "type": "String", - "placeholders": {} - }, - "@loginWithMatrixId": { - "type": "String", - "placeholders": {} - }, - "@discoverHomeservers": { - "type": "String", - "placeholders": {} - }, - "@whatIsAHomeserver": { - "type": "String", - "placeholders": {} - }, - "@homeserverDescription": { - "type": "String", - "placeholders": {} - }, - "@doesNotSeemToBeAValidHomeserver": { - "type": "String", - "placeholders": {} - }, - "@calculatingFileSize": { - "type": "String", - "placeholders": {} - }, - "@prepareSendingAttachment": { - "type": "String", - "placeholders": {} - }, - "@sendingAttachment": { - "type": "String", - "placeholders": {} - }, - "@generatingVideoThumbnail": { - "type": "String", - "placeholders": {} - }, - "@compressVideo": { - "type": "String", - "placeholders": {} - }, - "@sendingAttachmentCountOfCount": { - "type": "integer", - "placeholders": { - "index": { - "type": "int" - }, - "length": { - "type": "int" - } - } - }, - "@serverLimitReached": { - "type": "integer", - "placeholders": { - "seconds": { - "type": "int" - } - } - }, - "@oneOfYourDevicesIsNotVerified": { - "type": "String", - "placeholders": {} - }, - "@noticeChatBackupDeviceVerification": { - "type": "String", - "placeholders": {} - }, - "@continueText": { - "type": "String", - "placeholders": {} - }, - "@welcomeText": { - "type": "String", - "placeholders": {} - }, - "@blur": { - "type": "String", - "placeholders": {} - }, - "@opacity": { - "type": "String", - "placeholders": {} - }, - "@setWallpaper": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleMemberEvent": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleMemberEventDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleIsUserMention": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleIsUserMentionDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleContainsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleContainsDisplayNameDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleIsRoomMention": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleIsRoomMentionDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleRoomnotif": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleRoomnotifDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleTombstone": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleTombstoneDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleReaction": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleReactionDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleRoomServerAcl": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleRoomServerAclDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleSuppressEdits": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleSuppressEditsDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleCall": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleCallDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleEncryptedRoomOneToOne": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleEncryptedRoomOneToOneDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleRoomOneToOne": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleRoomOneToOneDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleMessage": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleMessageDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleEncrypted": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleEncryptedDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleJitsi": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleJitsiDescription": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleServerAcl": { - "type": "String", - "placeholders": {} - }, - "@notificationRuleServerAclDescription": { - "type": "String", - "placeholders": {} - }, - "@unknownPushRule": { - "type": "String", - "placeholders": { - "rule": { - "type": "String" - } - } - }, - "@sentVoiceMessage": { - "type": "String", - "placeholders": { - "duration": { - "type": "String" - }, - "sender": { - "type": "String" - } - } - }, - "@deletePushRuleCanNotBeUndone": { - "type": "String", - "placeholders": {} - }, - "@more": { - "type": "String", - "placeholders": {} - }, - "@shareKeysWith": { - "type": "String", - "placeholders": {} - }, - "@shareKeysWithDescription": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 726ac3fa2..de1ca1e6f 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -3438,6 +3438,8 @@ }, "donate": "Spenden", "@donate": {}, + "resume": "Fortsetzen", + "@resume": {}, "writeAMessageLangCodes": "Geben Sie in {l1} oder {l2} ein...", "requests": "Anfragen", "holdForInfo": "Klicken und halten für Wortinformationen.", diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index ea1c2aa1f..c38d126d1 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -3399,6 +3399,45 @@ "@pause": {}, "resume": "Atosú", "@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": {}, "writeAMessageLangCodes": "Clóscríobh i {l1} nó {l2}...", "requests": "Iarratais", "holdForInfo": "Bain triail as agus coinnigh síos le haghaidh eolas faoin bhfocal.", diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index fa0c16f64..de2f4fc4a 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -3394,6 +3394,27 @@ "@pause": {}, "resume": "Continuar", "@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": {}, "writeAMessageLangCodes": "Escribe en {l1} ou {l2}...", "requests": "Solicitudes", "holdForInfo": "Fai clic e mantén para obter información sobre a palabra.", diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index 9eb4b9fc7..3a4da040a 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -3371,6 +3371,51 @@ "@declineInvitation": {}, "noMessagesYet": "Vēl nav ziņu", "@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": {}, "ignore": "Bloķēt", "ignoredUsers": "Bloķētie lietotāji", "writeAMessageLangCodes": "Rakstiet {l1} vai {l2}...", diff --git a/pubspec.lock b/pubspec.lock index 56fb4d020..8281ef62c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1921,10 +1921,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: @@ -2137,10 +2137,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 2d92d90d0..908f38c1e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -50,7 +50,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 @@ -75,12 +75,12 @@ 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 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