diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3d23ba2..d0fc8fb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -32,6 +32,10 @@ build_web: - cd assets/js/ && unzip olm.zip && cd ../../ - cd assets/js/ && rm olm.zip && cd ../../ - cd assets/js/ && mv javascript package && cd ../../ + - cd web/ && rm sql-wasm.js sql-wasm.wasm && cd ../ + - cd web/ && curl -L 'https://github.com/sql-js/sql.js/releases/latest/download/sqljs-wasm.zip' > sqljs-wasm.zip && cd ../ + - cd web/ && unzip sqljs-wasm.zip && cd ../ + - cd web/ && rm sqljs-wasm.zip && cd ../ - flutter pub get - flutter clean - flutter build web --release --verbose --dart-define=FLUTTER_WEB_USE_SKIA=true @@ -69,6 +73,7 @@ build_android_apk: - build/app/outputs/apk/release/app-release.apk only: - master + - tags build_android_appbundle: @@ -94,11 +99,11 @@ upload_to_fdroid_repo: ## ## Install ssh-agent if not already installed. ## - - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' + - 'which ssh-agent || (sudo apt-get update -y && sudo apt-get install openssh-client -y )' ## ## Install rsync if not already installed. ## - - 'which rsync || ( apt-get update -y && apt-get install rsync -y )' + - 'which rsync || (sudo apt-get update -y && sudo apt-get install rsync -y )' ## ## Run ssh-agent (inside the build environment) ## diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index f651483..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "ios/olm"] - path = ios/olm - url = https://gitlab.matrix.org/matrix-org/olm.git diff --git a/CHANGELOG.md b/CHANGELOG.md index 73b6e02..41c7a85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,31 @@ +# Version 0.16.0 - 2020-07-?? +### Features +- Implement web notifications +### Changes +- Various performance improvements +- Added languages: Galician, Croatian, Japanese, Russian +### Fixes: +- Various fixes, including key verification fixes + +# Version 0.15.1 - 2020-06-26 +### Fixes: +- Fix a big with account data being stored incorrectly + +# Version 0.15.0 - 2020-06-26 +### Features: +- New room list app bar design +- Chat app bar transparent +- Implement web file picker +- Minor design and UX improvements +- Implement Cross Signing +- Restore keys from online key backup +- Added translations: Czech, Spanish, Slovakian +### Changes: +- Show presences of users sharing a direct chat +- Big refactoring +### Fixes: +- Various fixes, including e2ee fixes and olm session recovery + # Version 0.14.0 - 2020-05-20 ### Features: - Implement image viewer diff --git a/README.md b/README.md index 08de7c0..0838ffb 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,12 @@ Don't even ask. ## How to add translations for your language +You can use Weblate to translate the app to your language: + +https://hosted.weblate.org/projects/fluffychat/ + + + 1. Replace the non-translated string in the codebase: ``` Text("Hello world"), diff --git a/android/app/build.gradle b/android/app/build.gradle index d9dc5de..ed87109 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -49,11 +49,6 @@ android { versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - externalNativeBuild { - cmake { - arguments "-DOLM_TESTS=NO" - } - } } signingConfigs { @@ -77,15 +72,6 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - - externalNativeBuild { - // Encapsulates your CMake build configurations. - cmake { - // Provides a relative path to your CMake build script. - path "../../ios/olm/CMakeLists.txt" - version "3.10.2" - } - } } flutter { @@ -98,6 +84,7 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' + implementation "net.zetetic:android-database-sqlcipher:4.4.0" // needed for moor_ffi w/ sqlcipher } //apply plugin: "com.google.gms.google-services" diff --git a/assets/sounds/notification.wav b/assets/sounds/notification.wav new file mode 100644 index 0000000..15d9235 Binary files /dev/null and b/assets/sounds/notification.wav differ diff --git a/ios/Flutter/.last_build_id b/ios/Flutter/.last_build_id new file mode 100644 index 0000000..f7f5f2a --- /dev/null +++ b/ios/Flutter/.last_build_id @@ -0,0 +1 @@ +6c5611b14df049743797687d0807922a \ No newline at end of file diff --git a/ios/Podfile b/ios/Podfile index 2bd2b5c..02cc456 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -63,7 +63,7 @@ target 'Runner' do # Keep pod path relative so it can be checked into Podfile.lock. pod 'Flutter', :path => 'Flutter' - pod 'OLMKit' + pod 'SQLCipher' # Plugin Pods @@ -91,4 +91,4 @@ post_install do |installer| end # add pods for desired Firebase products -# https://firebase.google.com/docs/ios/setup#available-pods \ No newline at end of file +# https://firebase.google.com/docs/ios/setup#available-pods diff --git a/ios/Podfile.lock b/ios/Podfile.lock index bc93b20..ecb727c 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,103 +1,139 @@ PODS: + - DKImagePickerController/Core (4.2.2): + - DKImagePickerController/ImageDataManager + - DKImagePickerController/Resource + - DKImagePickerController/ImageDataManager (4.2.2) + - DKImagePickerController/PhotoGallery (4.2.2): + - DKImagePickerController/Core + - DKPhotoGallery + - DKImagePickerController/Resource (4.2.2) + - DKPhotoGallery (0.0.14): + - DKPhotoGallery/Core (= 0.0.14) + - DKPhotoGallery/Model (= 0.0.14) + - DKPhotoGallery/Preview (= 0.0.14) + - DKPhotoGallery/Resource (= 0.0.14) + - SDWebImage + - SDWebImageFLPlugin + - DKPhotoGallery/Core (0.0.14): + - DKPhotoGallery/Model + - DKPhotoGallery/Preview + - SDWebImage + - SDWebImageFLPlugin + - DKPhotoGallery/Model (0.0.14): + - SDWebImage + - SDWebImageFLPlugin + - DKPhotoGallery/Preview (0.0.14): + - DKPhotoGallery/Model + - DKPhotoGallery/Resource + - SDWebImage + - SDWebImageFLPlugin + - DKPhotoGallery/Resource (0.0.14): + - SDWebImage + - SDWebImageFLPlugin - file_picker (0.0.1): + - DKImagePickerController/PhotoGallery - Flutter - - Firebase/Core (6.21.0): + - Firebase/Core (6.27.0): - Firebase/CoreOnly - - FirebaseAnalytics (= 6.4.0) - - Firebase/CoreOnly (6.21.0): - - FirebaseCore (= 6.6.5) - - Firebase/Messaging (6.21.0): + - FirebaseAnalytics (= 6.6.1) + - Firebase/CoreOnly (6.27.0): + - FirebaseCore (= 6.8.0) + - Firebase/Messaging (6.27.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 4.3.0) + - FirebaseMessaging (~> 4.5.0) - firebase_messaging (0.0.1): - Firebase/Core - Firebase/Messaging - Flutter - - FirebaseAnalytics (6.4.0): - - FirebaseCore (~> 6.6) - - FirebaseInstallations (~> 1.1) - - GoogleAppMeasurement (= 6.4.0) + - FirebaseAnalytics (6.6.1): + - FirebaseCore (~> 6.8) + - FirebaseInstallations (~> 1.4) + - GoogleAppMeasurement (= 6.6.1) - GoogleUtilities/AppDelegateSwizzler (~> 6.0) - GoogleUtilities/MethodSwizzler (~> 6.0) - GoogleUtilities/Network (~> 6.0) - "GoogleUtilities/NSData+zlib (~> 6.0)" - - nanopb (= 0.3.9011) - - FirebaseAnalyticsInterop (1.5.0) - - FirebaseCore (6.6.5): - - FirebaseCoreDiagnostics (~> 1.2) - - FirebaseCoreDiagnosticsInterop (~> 1.2) + - nanopb (~> 1.30905.0) + - FirebaseCore (6.8.0): + - FirebaseCoreDiagnostics (~> 1.3) - GoogleUtilities/Environment (~> 6.5) - GoogleUtilities/Logger (~> 6.5) - - FirebaseCoreDiagnostics (1.2.2): - - FirebaseCoreDiagnosticsInterop (~> 1.2) - - GoogleDataTransportCCTSupport (~> 2.0) + - FirebaseCoreDiagnostics (1.4.0): + - GoogleDataTransportCCTSupport (~> 3.1) - GoogleUtilities/Environment (~> 6.5) - GoogleUtilities/Logger (~> 6.5) - - nanopb (~> 0.3.901) - - FirebaseCoreDiagnosticsInterop (1.2.0) - - FirebaseInstallations (1.1.1): - - FirebaseCore (~> 6.6) - - GoogleUtilities/UserDefaults (~> 6.5) + - nanopb (~> 1.30905.0) + - FirebaseInstallations (1.4.0): + - FirebaseCore (~> 6.8) + - GoogleUtilities/Environment (~> 6.6) + - GoogleUtilities/UserDefaults (~> 6.6) - PromisesObjC (~> 1.2) - - FirebaseInstanceID (4.3.2): - - FirebaseCore (~> 6.6) + - FirebaseInstanceID (4.4.0): + - FirebaseCore (~> 6.8) - FirebaseInstallations (~> 1.0) - GoogleUtilities/Environment (~> 6.5) - GoogleUtilities/UserDefaults (~> 6.5) - - FirebaseMessaging (4.3.0): - - FirebaseAnalyticsInterop (~> 1.5) - - FirebaseCore (~> 6.6) + - FirebaseMessaging (4.5.0): + - FirebaseCore (~> 6.8) - FirebaseInstanceID (~> 4.3) - GoogleUtilities/AppDelegateSwizzler (~> 6.5) - GoogleUtilities/Environment (~> 6.5) - GoogleUtilities/Reachability (~> 6.5) - GoogleUtilities/UserDefaults (~> 6.5) - Protobuf (>= 3.9.2, ~> 3.9) + - FLAnimatedImage (1.0.12) - Flutter (1.0.0) + - flutter_keyboard_visibility (0.7.0): + - Flutter - flutter_local_notifications (0.0.1): - Flutter + - flutter_plugin_android_lifecycle (0.0.1): + - Flutter - flutter_secure_storage (3.3.1): - Flutter - flutter_sound (0.0.1): - Flutter - FMDB (2.7.5): - FMDB/standard (= 2.7.5) + - FMDB/SQLCipher (2.7.5): + - SQLCipher - FMDB/standard (2.7.5) - - GoogleAppMeasurement (6.4.0): + - GoogleAppMeasurement (6.6.1): - GoogleUtilities/AppDelegateSwizzler (~> 6.0) - GoogleUtilities/MethodSwizzler (~> 6.0) - GoogleUtilities/Network (~> 6.0) - "GoogleUtilities/NSData+zlib (~> 6.0)" - - nanopb (= 0.3.9011) - - GoogleDataTransport (5.1.0) - - GoogleDataTransportCCTSupport (2.0.1): - - GoogleDataTransport (~> 5.1) - - nanopb (~> 0.3.901) - - GoogleUtilities/AppDelegateSwizzler (6.5.2): + - nanopb (~> 1.30905.0) + - GoogleDataTransport (6.2.1) + - GoogleDataTransportCCTSupport (3.2.0): + - GoogleDataTransport (~> 6.1) + - nanopb (~> 1.30905.0) + - GoogleUtilities/AppDelegateSwizzler (6.6.0): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (6.5.2) - - GoogleUtilities/Logger (6.5.2): + - GoogleUtilities/Environment (6.6.0): + - PromisesObjC (~> 1.2) + - GoogleUtilities/Logger (6.6.0): - GoogleUtilities/Environment - - GoogleUtilities/MethodSwizzler (6.5.2): + - GoogleUtilities/MethodSwizzler (6.6.0): - GoogleUtilities/Logger - - GoogleUtilities/Network (6.5.2): + - GoogleUtilities/Network (6.6.0): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (6.5.2)" - - GoogleUtilities/Reachability (6.5.2): + - "GoogleUtilities/NSData+zlib (6.6.0)" + - GoogleUtilities/Reachability (6.6.0): - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (6.5.2): + - GoogleUtilities/UserDefaults (6.6.0): - GoogleUtilities/Logger - image_picker (0.0.1): - Flutter - - nanopb (0.3.9011): - - nanopb/decode (= 0.3.9011) - - nanopb/encode (= 0.3.9011) - - nanopb/decode (0.3.9011) - - nanopb/encode (0.3.9011) + - nanopb (1.30905.0): + - nanopb/decode (= 1.30905.0) + - nanopb/encode (= 1.30905.0) + - nanopb/decode (1.30905.0) + - nanopb/encode (1.30905.0) - OLMKit (3.1.0): - OLMKit/olmc (= 3.1.0) - OLMKit/olmcpp (= 3.1.0) @@ -107,15 +143,29 @@ PODS: - Flutter - path_provider (0.0.1): - Flutter - - PromisesObjC (1.2.8) - - Protobuf (3.11.4) + - PromisesObjC (1.2.9) + - Protobuf (3.12.0) - receive_sharing_intent (0.0.1): - Flutter + - SDWebImage (5.8.1): + - SDWebImage/Core (= 5.8.1) + - SDWebImage/Core (5.8.1) + - SDWebImageFLPlugin (0.4.0): + - FLAnimatedImage (>= 1.0.11) + - SDWebImage/Core (~> 5.6) - share (0.5.2): - Flutter - sqflite (0.0.1): - Flutter - FMDB (~> 2.7.2) + - sqflite_sqlcipher (0.0.1): + - Flutter + - FMDB/SQLCipher (~> 2.7.5) + - SQLCipher (4.4.0): + - SQLCipher/standard (= 4.4.0) + - SQLCipher/common (4.4.0) + - SQLCipher/standard (4.4.0): + - SQLCipher/common - url_launcher (0.0.1): - Flutter - url_launcher_macos (0.0.1): @@ -129,7 +179,9 @@ DEPENDENCIES: - file_picker (from `.symlinks/plugins/file_picker/ios`) - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - Flutter (from `Flutter`) + - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`) - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) + - flutter_plugin_android_lifecycle (from `.symlinks/plugins/flutter_plugin_android_lifecycle/ios`) - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - flutter_sound (from `.symlinks/plugins/flutter_sound/ios`) - image_picker (from `.symlinks/plugins/image_picker/ios`) @@ -139,6 +191,7 @@ DEPENDENCIES: - receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`) - share (from `.symlinks/plugins/share/ios`) - sqflite (from `.symlinks/plugins/sqflite/ios`) + - sqflite_sqlcipher (from `.symlinks/plugins/sqflite_sqlcipher/ios`) - url_launcher (from `.symlinks/plugins/url_launcher/ios`) - url_launcher_macos (from `.symlinks/plugins/url_launcher_macos/ios`) - url_launcher_web (from `.symlinks/plugins/url_launcher_web/ios`) @@ -146,15 +199,16 @@ DEPENDENCIES: SPEC REPOS: trunk: + - DKImagePickerController + - DKPhotoGallery - Firebase - FirebaseAnalytics - - FirebaseAnalyticsInterop - FirebaseCore - FirebaseCoreDiagnostics - - FirebaseCoreDiagnosticsInterop - FirebaseInstallations - FirebaseInstanceID - FirebaseMessaging + - FLAnimatedImage - FMDB - GoogleAppMeasurement - GoogleDataTransport @@ -164,6 +218,9 @@ SPEC REPOS: - OLMKit - PromisesObjC - Protobuf + - SDWebImage + - SDWebImageFLPlugin + - SQLCipher EXTERNAL SOURCES: file_picker: @@ -172,8 +229,12 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/firebase_messaging/ios" Flutter: :path: Flutter + flutter_keyboard_visibility: + :path: ".symlinks/plugins/flutter_keyboard_visibility/ios" flutter_local_notifications: :path: ".symlinks/plugins/flutter_local_notifications/ios" + flutter_plugin_android_lifecycle: + :path: ".symlinks/plugins/flutter_plugin_android_lifecycle/ios" flutter_secure_storage: :path: ".symlinks/plugins/flutter_secure_storage/ios" flutter_sound: @@ -190,6 +251,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/share/ios" sqflite: :path: ".symlinks/plugins/sqflite/ios" + sqflite_sqlcipher: + :path: ".symlinks/plugins/sqflite_sqlcipher/ios" url_launcher: :path: ".symlinks/plugins/url_launcher/ios" url_launcher_macos: @@ -200,36 +263,43 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/webview_flutter/ios" SPEC CHECKSUMS: - file_picker: 408623be2125b79a4539cf703be3d4b3abe5e245 - Firebase: f378c80340dd41c0ad0914af740c021eb282a04b - firebase_messaging: 73b3e7dd7b3b6a7e4bdac10d5295211ca4f87f90 - FirebaseAnalytics: a1a0b3327ceb5cd5b4bacffdb293f6c909aa087d - FirebaseAnalyticsInterop: 3f86269c38ae41f47afeb43ebf32a001f58fcdae - FirebaseCore: 9f495d3afacb7b558711e6218ebb14b1c51b5802 - FirebaseCoreDiagnostics: e9b4cd8ba60dee0f2d13347332e4b7898cca5b61 - FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850 - FirebaseInstallations: acb3216eb9784d3b1d2d2d635ff74fa892cc0c44 - FirebaseInstanceID: 7ee0d6777013bb952f377b41965bf132b6a075be - FirebaseMessaging: 4ec33842d36b3319e062e51fb8b35a74f726950d + DKImagePickerController: 4a3e7948a848c4348e600b3fe5ce41478835fa10 + DKPhotoGallery: 0290d32343574f06eaa4c26f8f2f8a1035e916be + file_picker: 3e6c3790de664ccf9b882732d9db5eaf6b8d4eb1 + Firebase: fc4cbf6f1592636431821ef9a3c557e4dfd9f268 + firebase_messaging: cffb57ce40958c6204f03fb0c81713e4cd1e240c + FirebaseAnalytics: 0ea640473474f036cabbc2576e20c2d63671c92f + FirebaseCore: feda061cb1ee6d8ad4824f4a4a8ffbcfe284f595 + FirebaseCoreDiagnostics: 4505e4d4009b1d93f605088ee7d7764d5f0d1c84 + FirebaseInstallations: 293f567159b6d66d1c990f13bb868066096c94ec + FirebaseInstanceID: 3b119bfe90e904851218159c9a4ecb847cc51d18 + FirebaseMessaging: ad9e1a80ea64905e01a0ce1b3eb76a2944544151 + FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31 Flutter: 0e3d915762c693b495b44d77113d4970485de6ec + flutter_keyboard_visibility: 6195387fb6d8f46e5cd6dda4a4154e41f800f545 flutter_local_notifications: 9e4738ce2471c5af910d961a6b7eadcf57c50186 + flutter_plugin_android_lifecycle: dc0b544e129eebb77a6bfb1239d4d1c673a60a35 flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec flutter_sound: 0e8163ceac1e00eb6d894e2ae4641ba726a2c479 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a - GoogleAppMeasurement: 6e68a94d0eaeb1d73ef6b0ed4f7334e29d63ae29 - GoogleDataTransport: b29a21d813e906014ca16c00897827e40e4a24ab - GoogleDataTransportCCTSupport: 6f15a89b0ca35d6fa523e1f752ef818588885988 - GoogleUtilities: ad0f3b691c67909d03a3327cc205222ab8f42e0e - image_picker: e3eacd46b94694dde7cf2705955cece853aa1a8f - nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd + GoogleAppMeasurement: 2fd5c5a56c069db635c8e7b92d4809a9591d0a69 + GoogleDataTransport: 9a8a16f79feffc7f42096743de2a7c4815e84020 + GoogleDataTransportCCTSupport: 489c1265d2c85b68187a83a911913d190012158d + GoogleUtilities: 39530bc0ad980530298e9c4af8549e991fd033b1 + image_picker: 66aa71bc96850a90590a35d4c4a2907b0d823109 + nanopb: c43f40fadfe79e8b8db116583945847910cbabc9 OLMKit: 4ee0159d63feeb86d836fdcfefe418e163511639 open_file: 02eb5cb6b21264bd3a696876f5afbfb7ca4f4b7d path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d - PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6 - Protobuf: 176220c526ad8bd09ab1fb40a978eac3fef665f7 + PromisesObjC: b48e0338dbbac2207e611750777895f7a5811b75 + Protobuf: 2793fcd0622a00b546c60e7cbbcc493e043e9bb9 receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1 + SDWebImage: e3eae2eda88578db0685a0c88597fdadd9433f05 + SDWebImageFLPlugin: 6c2295fb1242d44467c6c87dc5db6b0a13228fd8 share: bae0a282aab4483288913fc4dc0b935d4b491f2e sqflite: 4001a31ff81d210346b500c55b17f4d6c7589dd0 + sqflite_sqlcipher: 45e72be2f26bde6ad196ff8b084123d8634ba921 + SQLCipher: e434ed542b24f38ea7b36468a13f9765e1b5c072 url_launcher: a1c0cc845906122c4784c542523d8cacbded5626 url_launcher_macos: fd7894421cd39320dce5f292fc99ea9270b2a313 url_launcher_web: e5527357f037c87560776e36436bf2b0288b965c diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index cb9c0c5..190a43d 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -328,7 +328,6 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; @@ -446,7 +445,6 @@ }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; @@ -503,7 +501,6 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; diff --git a/lib/components/avatar.dart b/lib/components/avatar.dart index d6c7008..c3d55a5 100644 --- a/lib/components/avatar.dart +++ b/lib/components/avatar.dart @@ -48,7 +48,7 @@ class Avatar extends StatelessWidget { ) : null, backgroundColor: noPic - ? name?.color ?? Theme.of(context).secondaryHeaderColor + ? name?.lightColor ?? Theme.of(context).secondaryHeaderColor : Theme.of(context).secondaryHeaderColor, child: noPic ? Text(fallbackLetters, style: TextStyle(color: Colors.white)) diff --git a/lib/components/connection_status_header.dart b/lib/components/connection_status_header.dart new file mode 100644 index 0000000..705a4f5 --- /dev/null +++ b/lib/components/connection_status_header.dart @@ -0,0 +1,44 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; + +import 'matrix.dart'; + +class ConnectionStatusHeader extends StatefulWidget { + @override + _ConnectionStatusHeaderState createState() => _ConnectionStatusHeaderState(); +} + +class _ConnectionStatusHeaderState extends State { + StreamSubscription _onSyncSub; + StreamSubscription _onSyncErrorSub; + static bool _connected = false; + + set connected(bool connected) { + if (mounted) { + setState(() => _connected = connected); + } + } + + @override + void dispose() { + _onSyncSub?.cancel(); + _onSyncErrorSub?.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + _onSyncSub ??= Matrix.of(context).client.onSync.stream.listen( + (_) => connected = true, + ); + _onSyncErrorSub ??= Matrix.of(context).client.onSyncError.stream.listen( + (_) => connected = false, + ); + + return AnimatedContainer( + duration: Duration(milliseconds: 500), + height: _connected ? 0 : 5, + child: LinearProgressIndicator(), + ); + } +} diff --git a/lib/components/dialogs/presence_dialog.dart b/lib/components/dialogs/presence_dialog.dart index f5bc0b5..c5398d1 100644 --- a/lib/components/dialogs/presence_dialog.dart +++ b/lib/components/dialogs/presence_dialog.dart @@ -34,15 +34,6 @@ class PresenceDialog extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(presence.getLocalizedStatusMessage(context)), - if (presence.presence != null) - Text( - presence.presence.toString().split('.').last, - style: TextStyle( - color: presence.presence.currentlyActive == true - ? Colors.green - : Theme.of(context).primaryColor, - ), - ) ], ), actions: [ diff --git a/lib/components/dialogs/simple_dialogs.dart b/lib/components/dialogs/simple_dialogs.dart index 4d2c816..01be2e9 100644 --- a/lib/components/dialogs/simple_dialogs.dart +++ b/lib/components/dialogs/simple_dialogs.dart @@ -8,17 +8,17 @@ class SimpleDialogs { const SimpleDialogs(this.context); - Future enterText({ - String titleText, - String confirmText, - String cancelText, - String hintText, - String labelText, - String prefixText, - String suffixText, - bool password = false, - bool multiLine = false, - }) async { + Future enterText( + {String titleText, + String confirmText, + String cancelText, + String hintText, + String labelText, + String prefixText, + String suffixText, + bool password = false, + bool multiLine = false, + TextInputType keyboardType}) async { var textEditingController = TextEditingController(); final controller = textEditingController; String input; @@ -32,12 +32,13 @@ class SimpleDialogs { autocorrect: false, onSubmitted: (s) { input = s; - Navigator.of(context).pop(); + Navigator.of(c).pop(); }, minLines: multiLine ? 3 : 1, maxLines: multiLine ? 3 : 1, obscureText: password, textInputAction: multiLine ? TextInputAction.newline : null, + keyboardType: keyboardType, decoration: InputDecoration( hintText: hintText, labelText: labelText, @@ -54,7 +55,7 @@ class SimpleDialogs { cancelText?.toUpperCase() ?? L10n.of(context).close.toUpperCase(), style: TextStyle(color: Colors.blueGrey)), - onPressed: () => Navigator.of(context).pop(), + onPressed: () => Navigator.of(c).pop(), ), FlatButton( child: Text( @@ -63,7 +64,7 @@ class SimpleDialogs { ), onPressed: () { input = controller.text; - Navigator.of(context).pop(); + Navigator.of(c).pop(); }, ), ], @@ -90,7 +91,7 @@ class SimpleDialogs { cancelText?.toUpperCase() ?? L10n.of(context).close.toUpperCase(), style: TextStyle(color: Colors.blueGrey)), - onPressed: () => Navigator.of(context).pop(), + onPressed: () => Navigator.of(c).pop(), ), FlatButton( child: Text( @@ -99,7 +100,7 @@ class SimpleDialogs { ), onPressed: () { confirmed = true; - Navigator.of(context).pop(); + Navigator.of(c).pop(); }, ), ], @@ -124,7 +125,7 @@ class SimpleDialogs { okText ?? L10n.of(context).ok.toUpperCase(), ), onPressed: () { - Navigator.of(context).pop(); + Navigator.of(c).pop(); }, ), ], @@ -167,7 +168,12 @@ class SimpleDialogs { children: [ CircularProgressIndicator(), SizedBox(width: 16), - Text(L10n.of(context).loadingPleaseWait), + Expanded( + child: Text( + L10n.of(context).loadingPleaseWait, + overflow: TextOverflow.ellipsis, + maxLines: 1, + )), ], ), ), diff --git a/lib/components/html_message.dart b/lib/components/html_message.dart index ece16a8..2008ee0 100644 --- a/lib/components/html_message.dart +++ b/lib/components/html_message.dart @@ -21,11 +21,19 @@ class HtmlMessage extends StatelessWidget { @override Widget build(BuildContext context) { + // riot-web is notorious for creating bad reply fallback events from invalid messages which, if + // not handled properly, can lead to impersination. As such, we strip the entire `` tags + // here already, to prevent that from happening. + // We do *not* do this in an AST and just with simple regex here, as riot-web tends to create + // miss-matching tags, and this way we actually correctly identify what we want to strip and, well, + // strip it. + final renderHtml = html.replaceAll(RegExp('.*<\/mx-reply>'), ''); + // there is no need to pre-validate the html, as we validate it while rendering final themeData = Theme.of(context); return Html( - data: html, + data: renderHtml, defaultTextStyle: defaultTextStyle, linkStyle: linkStyle ?? themeData.textTheme.bodyText2.copyWith( diff --git a/lib/components/input_bar.dart b/lib/components/input_bar.dart index 61110dc..dfb4b22 100644 --- a/lib/components/input_bar.dart +++ b/lib/components/input_bar.dart @@ -280,6 +280,7 @@ class InputBar extends StatelessWidget { onChanged: (text) { onChanged(text); }, + textCapitalization: TextCapitalization.sentences, ), suggestionsCallback: getSuggestions, itemBuilder: buildSuggestion, diff --git a/lib/components/list_items/message.dart b/lib/components/list_items/message.dart index 6c8e3c8..35e064d 100644 --- a/lib/components/list_items/message.dart +++ b/lib/components/list_items/message.dart @@ -1,6 +1,5 @@ import 'package:bubble/bubble.dart'; import 'package:famedlysdk/famedlysdk.dart'; -import 'package:famedlysdk/encryption.dart'; import 'package:fluffychat/components/dialogs/simple_dialogs.dart'; import 'package:fluffychat/components/message_content.dart'; import 'package:fluffychat/components/reply_content.dart'; @@ -32,6 +31,10 @@ class Message extends StatelessWidget { this.selected, this.timeline}); + /// Indicates wheither the user may use a mouse instead + /// of touchscreen. + static bool useMouse = false; + @override Widget build(BuildContext context) { if (event.type == EventTypes.Unknown) { @@ -118,7 +121,7 @@ class Message extends StatelessWidget { ), if (event.type == EventTypes.Encrypted && event.messageType == MessageTypes.BadEncrypted && - event.content['body'] == DecryptError.UNKNOWN_SESSION) + event.content['can_request_session'] == true) RaisedButton( color: color.withAlpha(100), child: Text( @@ -169,7 +172,8 @@ class Message extends StatelessWidget { } return InkWell( - onTap: longPressSelect ? () => null : () => onSelect(event), + onHover: (b) => useMouse = true, + onTap: !useMouse && longPressSelect ? () => null : () => onSelect(event), splashColor: Theme.of(context).primaryColor.withAlpha(100), onLongPress: !longPressSelect ? null : () => onSelect(event), child: AnimatedContainer( diff --git a/lib/components/list_items/presence_list_item.dart b/lib/components/list_items/presence_list_item.dart index e55452d..d694036 100644 --- a/lib/components/list_items/presence_list_item.dart +++ b/lib/components/list_items/presence_list_item.dart @@ -1,62 +1,83 @@ import 'package:famedlysdk/famedlysdk.dart'; import 'package:fluffychat/components/dialogs/presence_dialog.dart'; +import 'package:fluffychat/utils/app_route.dart'; +import 'package:fluffychat/views/chat.dart'; import 'package:flutter/material.dart'; - import '../avatar.dart'; import '../matrix.dart'; class PresenceListItem extends StatelessWidget { - final Presence presence; + final Room room; - const PresenceListItem(this.presence); + const PresenceListItem(this.room); - static final Map _presences = {}; - - Future _requestProfile(BuildContext context) async { - _presences[presence.senderId] ??= - await Matrix.of(context).client.getProfileFromUserId(presence.senderId); - return _presences[presence.senderId]; + void _startChatAction(BuildContext context, String userId) async { + final roomId = await User(userId, + room: Room(client: Matrix.of(context).client, id: '')) + .startDirectChat(); + await Navigator.of(context).pushAndRemoveUntil( + AppRoute.defaultRoute( + context, + ChatView(roomId), + ), + (Route r) => r.isFirst); } @override Widget build(BuildContext context) { - return FutureBuilder( - future: _requestProfile(context), - builder: (context, snapshot) { - if (!snapshot.hasData) return Container(); - Uri avatarUrl; - var displayname = presence.senderId.localpart; - if (snapshot.hasData) { - avatarUrl = snapshot.data.avatarUrl; - displayname = snapshot.data.displayname; - } - return InkWell( - onTap: () => showDialog( + final user = room.getUserByMXIDSync(room.directChatMatrixID); + final presence = + Matrix.of(context).client.presences[room.directChatMatrixID]; + return InkWell( + onTap: () => presence?.presence?.statusMsg == null + ? _startChatAction(context, user.id) + : showDialog( context: context, - builder: (c) => PresenceDialog( + builder: (_) => PresenceDialog( presence, - avatarUrl: avatarUrl, - displayname: displayname, + avatarUrl: user.avatarUrl, + displayname: user.calcDisplayname(), ), - child: Container( - width: 80, - child: Column( - children: [ - SizedBox(height: 9), - Avatar(avatarUrl, displayname), - Padding( - padding: const EdgeInsets.all(6.0), - child: Text( - displayname, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - ), - ], + ), + child: Container( + width: 80, + child: Column( + children: [ + SizedBox(height: 16), + Container( + child: Avatar(user.avatarUrl, user.calcDisplayname()), + decoration: BoxDecoration( + border: Border.all( + width: 1, + color: presence?.presence?.statusMsg == null + ? presence?.presence?.currentlyActive == true + ? Colors.blue + : Theme.of(context).secondaryHeaderColor + : Theme.of(context).primaryColor, + ), + borderRadius: BorderRadius.circular(80), + ), + padding: EdgeInsets.all(2), + ), + Padding( + padding: const EdgeInsets.only(left: 6.0, top: 0.0, right: 6.0), + child: Text( + user.calcDisplayname().trim().split(' ').first, + overflow: TextOverflow.clip, + maxLines: 1, + style: TextStyle( + color: Theme.of(context) + .textTheme + .bodyText2 + .color + .withOpacity(0.66), + fontSize: 13, ), ), ), - ); - }); + ], + ), + ), + ); } } diff --git a/lib/components/list_items/public_room_list_item.dart b/lib/components/list_items/public_room_list_item.dart index 224c0da..eff6dd3 100644 --- a/lib/components/list_items/public_room_list_item.dart +++ b/lib/components/list_items/public_room_list_item.dart @@ -15,18 +15,33 @@ class PublicRoomListItem extends StatelessWidget { const PublicRoomListItem(this.publicRoomEntry, {Key key}) : super(key: key); void joinAction(BuildContext context) async { - final success = await SimpleDialogs(context).tryRequestWithLoadingDialog( - Matrix.of(context).client.api.joinRoom(publicRoomEntry.roomId)); + final success = await SimpleDialogs(context) + .tryRequestWithLoadingDialog(_joinRoomAndWait(context)); if (success != false) { await Navigator.of(context).push( AppRoute.defaultRoute( context, - ChatView(publicRoomEntry.roomId), + ChatView(success), ), ); } } + Future _joinRoomAndWait(BuildContext context) async { + final roomId = await Matrix.of(context) + .client + .api + .joinRoomOrAlias(publicRoomEntry.roomId); + if (Matrix.of(context).client.getRoomById(roomId) == null) { + await Matrix.of(context) + .client + .onRoomUpdate + .stream + .firstWhere((r) => r.id == roomId); + } + return roomId; + } + @override Widget build(BuildContext context) { final hasTopic = @@ -43,8 +58,10 @@ class PublicRoomListItem extends StatelessWidget { subtitle: Text( hasTopic ? publicRoomEntry.topic - : L10n.of(context).countParticipants( - publicRoomEntry.numJoinedMembers?.toString() ?? '0'), + : publicRoomEntry.numJoinedMembers == null + ? L10n.of(context).joinRoom + : L10n.of(context).countParticipants( + publicRoomEntry.numJoinedMembers.toString()), maxLines: 1, ), onTap: () => joinAction(context), diff --git a/lib/components/matrix.dart b/lib/components/matrix.dart index 41d4cba..bb0886a 100644 --- a/lib/components/matrix.dart +++ b/lib/components/matrix.dart @@ -9,11 +9,13 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:localstorage/localstorage.dart'; import 'package:url_launcher/url_launcher.dart'; - +import 'package:universal_html/prefer_universal/html.dart' as html; import '../l10n/l10n.dart'; import '../utils/beautify_string_extension.dart'; import '../utils/famedlysdk_store.dart'; import 'avatar.dart'; +import '../views/key_verification.dart'; +import '../utils/app_route.dart'; class Matrix extends StatefulWidget { static const String callNamespace = 'chat.fluffy.jitsi_call'; @@ -79,7 +81,7 @@ class MatrixState extends State { client.connect(); if (await initLoginState == LoginState.logged && !kIsWeb) { await FirebaseController.setupFirebase( - client, + this, widget.clientName, ); } @@ -97,7 +99,9 @@ class MatrixState extends State { }; StreamSubscription onRoomKeyRequestSub; + StreamSubscription onKeyVerificationRequestSub; StreamSubscription onJitsiCallSub; + StreamSubscription onNotification; void onJitsiCall(EventUpdate eventUpdate) { final event = Event.fromJson( @@ -154,12 +158,48 @@ class MatrixState extends State { return; } + void _showWebNotification(EventUpdate eventUpdate) async { + final room = client.getRoomById(eventUpdate.roomID); + if (room.notificationCount == 0) return; + final event = Event.fromJson(eventUpdate.content, room); + final body = event.getLocalizedBody( + L10n.of(context), + withSenderNamePrefix: + !room.isDirectChat || room.lastEvent.senderId == client.userID, + ); + html.AudioElement() + ..src = 'assets/assets/sounds/notification.wav' + ..autoplay = true + ..load(); + html.Notification( + room.getLocalizedDisplayname(L10n.of(context)), + body: body, + icon: event.sender.avatarUrl?.getThumbnail(client, + width: 64, height: 64, method: ThumbnailMethod.crop) ?? + room.avatar?.getThumbnail(client, + width: 64, height: 64, method: ThumbnailMethod.crop), + ); + } + @override void initState() { store = widget.store ?? Store(); if (widget.client == null) { debugPrint('[Matrix] Init matrix client'); - client = Client(widget.clientName, debug: false); + final Set verificationMethods = { + KeyVerificationMethod.numbers + }; + if (!kIsWeb) { + // emojis don't show in web somehow + verificationMethods.add(KeyVerificationMethod.emoji); + } + client = Client(widget.clientName, + debug: false, + enableE2eeRecovery: true, + verificationMethods: verificationMethods, + importantStateEvents: { + 'im.ponies.room_emotes', // we want emotes to work properly + }); onJitsiCallSub ??= client.onEvent.stream .where((e) => e.type == 'timeline' && @@ -170,6 +210,9 @@ class MatrixState extends State { onRoomKeyRequestSub ??= client.onRoomKeyRequest.stream.listen((RoomKeyRequest request) async { final room = request.room; + if (request.sender != room.client.userID) { + return; // ignore share requests by others + } final sender = room.getUserByMXIDSync(request.sender); if (await SimpleDialogs(context).askConfirmation( titleText: L10n.of(context).requestToReadOlderMessages, @@ -181,6 +224,23 @@ class MatrixState extends State { await request.forwardKey(); } }); + onKeyVerificationRequestSub ??= client.onKeyVerificationRequest.stream + .listen((KeyVerification request) async { + if (await SimpleDialogs(context).askConfirmation( + titleText: L10n.of(context).newVerificationRequest, + contentText: L10n.of(context).askVerificationRequest(request.userId), + )) { + await request.acceptVerification(); + await Navigator.of(context).push( + AppRoute.defaultRoute( + context, + KeyVerificationView(request: request), + ), + ); + } else { + await request.rejectVerification(); + } + }); _initWithStore(); } else { client = widget.client; @@ -201,13 +261,28 @@ class MatrixState extends State { renderHtml = render == '1'; }); } + if (kIsWeb) { + client.onSync.stream.first.then((s) { + html.Notification.requestPermission(); + onNotification ??= client.onEvent.stream + .where((e) => + e.roomID != activeRoomId && + e.type == 'timeline' && + [EventTypes.Message, EventTypes.Sticker, EventTypes.Encrypted] + .contains(e.eventType) && + e.content['sender'] != client.userID) + .listen(_showWebNotification); + }); + } super.initState(); } @override void dispose() { onRoomKeyRequestSub?.cancel(); + onKeyVerificationRequestSub?.cancel(); onJitsiCallSub?.cancel(); + onNotification?.cancel(); super.dispose(); } diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb new file mode 100644 index 0000000..d31cfc2 --- /dev/null +++ b/lib/l10n/intl_cs.arb @@ -0,0 +1,1395 @@ +{ + "@@last_modified": "2020-05-15T15:34:50.065646", + "About": "O aplikaci", + "@About": { + "type": "text", + "placeholders": {} + }, + "acceptedTheInvitation": "{username} přijali pozvání", + "@acceptedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Account": "Účet", + "@Account": { + "type": "text", + "placeholders": {} + }, + "Account informations": "Informace o účtu", + "@Account informations": { + "type": "text", + "placeholders": {} + }, + "activatedEndToEndEncryption": "{username} aktivoval koncové šifrování", + "@activatedEndToEndEncryption": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Add a group description": "Přidat popis skupiny", + "@Add a group description": { + "type": "text", + "placeholders": {} + }, + "Admin": "Administrátor", + "@Admin": { + "type": "text", + "placeholders": {} + }, + "alias": "alias", + "@alias": { + "type": "text", + "placeholders": {} + }, + "Already have an account?": "Máte již účet?", + "@Already have an account?": { + "type": "text", + "placeholders": {} + }, + "Anyone can join": "Kdokoliv se může připojit", + "@Anyone can join": { + "type": "text", + "placeholders": {} + }, + "Archive": "Archiv", + "@Archive": { + "type": "text", + "placeholders": {} + }, + "Archived Room": "Archivované místnosti", + "@Archived Room": { + "type": "text", + "placeholders": {} + }, + "Are guest users allowed to join": "Mohou se připojit hosté", + "@Are guest users allowed to join": { + "type": "text", + "placeholders": {} + }, + "Are you sure?": "Jste si jisti?", + "@Are you sure?": { + "type": "text", + "placeholders": {} + }, + "Authentication": "Autentizace", + "@Authentication": { + "type": "text", + "placeholders": {} + }, + "Avatar has been changed": "Avatar byl změněn", + "@Avatar has been changed": { + "type": "text", + "placeholders": {} + }, + "Ban from chat": "Zabanovat z diskuze", + "@Ban from chat": { + "type": "text", + "placeholders": {} + }, + "Banned": "Zabanován", + "@Banned": { + "type": "text", + "placeholders": {} + }, + "bannedUser": "{username} zabanoval {targetName}", + "@bannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "byDefaultYouWillBeConnectedTo": "V základním nastavení budete připojeni do {homeserver}", + "@byDefaultYouWillBeConnectedTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "Cancel": "Zrušit", + "@Cancel": { + "type": "text", + "placeholders": {} + }, + "changedTheChatAvatar": "{username} změnili svůj avatar", + "@changedTheChatAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheChatNameTo": "{username} změnili jméno diskuze na: „{chatname}“", + "@changedTheChatNameTo": { + "type": "text", + "placeholders": { + "username": {}, + "chatname": {} + } + }, + "changedTheChatDescriptionTo": "{username} změnili popis diskuze na: „{description}“", + "@changedTheChatDescriptionTo": { + "type": "text", + "placeholders": { + "username": {}, + "description": {} + } + }, + "changedTheChatPermissions": "{username} změnili nastavení oprávnění v diskuzi", + "@changedTheChatPermissions": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheDisplaynameTo": "{username} změnili přezdívku na: {displayname}", + "@changedTheDisplaynameTo": { + "type": "text", + "placeholders": { + "username": {}, + "displayname": {} + } + }, + "Change the homeserver": "Změnit použitý server", + "@Change the homeserver": { + "type": "text", + "placeholders": {} + }, + "changedTheGuestAccessRules": "{username} změnili přístupová práva pro hosty", + "@changedTheGuestAccessRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheGuestAccessRulesTo": "{username} změnili přístupová práva pro hosty na: {rules}", + "@changedTheGuestAccessRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheHistoryVisibility": "{username} změnili nastavení viditelnosti historie diskuze", + "@changedTheHistoryVisibility": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheHistoryVisibilityTo": "{username} změnili nastavení viditelnosti historie diskuze na: {rules}", + "@changedTheHistoryVisibilityTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheJoinRules": "{username} změnili nastavení pravidel připojení", + "@changedTheJoinRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheJoinRulesTo": "{username} změnili nastavení pravidel připojení na: {joinRules}", + "@changedTheJoinRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "joinRules": {} + } + }, + "changedTheProfileAvatar": "{username} změnili nastavení profilového avataru", + "@changedTheProfileAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomAliases": "{username} změnili nastavení aliasů místnosti", + "@changedTheRoomAliases": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomInvitationLink": "{username} změnili odkaz k pozvání do místnosti", + "@changedTheRoomInvitationLink": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Changelog": "Historie změn", + "@Changelog": { + "type": "text", + "placeholders": {} + }, + "Change the name of the group": "Změnit název skupiny", + "@Change the name of the group": { + "type": "text", + "placeholders": {} + }, + "Change wallpaper": "Změnit pozadí", + "@Change wallpaper": { + "type": "text", + "placeholders": {} + }, + "Change the server": "Změnit server", + "@Change the server": { + "type": "text", + "placeholders": {} + }, + "The encryption has been corrupted": "Šifrování bylo poškozeno", + "@The encryption has been corrupted": { + "type": "text", + "placeholders": {} + }, + "Chat": "Diskuze", + "@Chat": { + "type": "text", + "placeholders": {} + }, + "Chat details": "Detail diskuze", + "@Chat details": { + "type": "text", + "placeholders": {} + }, + "Choose a strong password": "Vyberte silné heslo", + "@Choose a strong password": { + "type": "text", + "placeholders": {} + }, + "Choose a username": "Vyberte uživatelské jméno", + "@Choose a username": { + "type": "text", + "placeholders": {} + }, + "Close": "Zavřít", + "@Close": { + "type": "text", + "placeholders": {} + }, + "Confirm": "Potvrdit", + "@Confirm": { + "type": "text", + "placeholders": {} + }, + "Connect": "Připojit", + "@Connect": { + "type": "text", + "placeholders": {} + }, + "Connection attempt failed": "Pokus o připojení selhal", + "@Connection attempt failed": { + "type": "text", + "placeholders": {} + }, + "Contact has been invited to the group": "Kontakt byl pozván do skupiny", + "@Contact has been invited to the group": { + "type": "text", + "placeholders": {} + }, + "Content viewer": "Prohlížeč obsahu", + "@Content viewer": { + "type": "text", + "placeholders": {} + }, + "Copied to clipboard": "Zkopírováno do schránky", + "@Copied to clipboard": { + "type": "text", + "placeholders": {} + }, + "Copy": "Kopírovat", + "@Copy": { + "type": "text", + "placeholders": {} + }, + "couldNotDecryptMessage": "Nebylo možné dešifrovat zprávu: {error}", + "@couldNotDecryptMessage": { + "type": "text", + "placeholders": { + "error": {} + } + }, + "Could not set avatar": "Nebylo možné nastavit avatar", + "@Could not set avatar": { + "type": "text", + "placeholders": {} + }, + "Could not set displayname": "Nebylo možné nastavit přezdívku uživatele", + "@Could not set displayname": { + "type": "text", + "placeholders": {} + }, + "countParticipants": "{count} účastníků", + "@countParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Create": "Vytvořit", + "@Create": { + "type": "text", + "placeholders": {} + }, + "Create account now": "Vytvořit účet teď", + "@Create account now": { + "type": "text", + "placeholders": {} + }, + "createdTheChat": "{username} založil diskuzi", + "@createdTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Create new group": "Založit skupinu", + "@Create new group": { + "type": "text", + "placeholders": {} + }, + "Currently active": "Momentálně aktivní", + "@Currently active": { + "type": "text", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "text", + "placeholders": { + "date": {}, + "timeOfDay": {} + } + }, + "dateWithoutYear": "{day}.{month}", + "@dateWithoutYear": { + "type": "text", + "placeholders": { + "month": {}, + "day": {} + } + }, + "dateWithYear": "{day}. {month}. {year}", + "@dateWithYear": { + "type": "text", + "placeholders": { + "year": {}, + "month": {}, + "day": {} + } + }, + "Delete": "Smazat", + "@Delete": { + "type": "text", + "placeholders": {} + }, + "Delete message": "Smazat zprávu", + "@Delete message": { + "type": "text", + "placeholders": {} + }, + "Deny": "Zakázat", + "@Deny": { + "type": "text", + "placeholders": {} + }, + "Device": "Zařízení", + "@Device": { + "type": "text", + "placeholders": {} + }, + "Devices": "Zařízení", + "@Devices": { + "type": "text", + "placeholders": {} + }, + "Discard picture": "Vyřadit obrázek", + "@Discard picture": { + "type": "text", + "placeholders": {} + }, + "Displayname has been changed": "Přezdívka byla změněna", + "@Displayname has been changed": { + "type": "text", + "placeholders": {} + }, + "Download file": "Stáhnout soubor", + "@Download file": { + "type": "text", + "placeholders": {} + }, + "Edit displayname": "Změnit přezdívku", + "@Edit displayname": { + "type": "text", + "placeholders": {} + }, + "Emote Settings": "Nastavení emotikon", + "@Emote Settings": { + "type": "text", + "placeholders": {} + }, + "Emote shortcode": "Označení emotikony", + "@Emote shortcode": { + "type": "text", + "placeholders": {} + }, + "emoteWarnNeedToPick": "Musíte zvolit označení emotikony a obrázek", + "@emoteWarnNeedToPick": { + "type": "text", + "placeholders": {} + }, + "emoteExists": "Emotikona již existuje", + "@emoteExists": { + "type": "text", + "placeholders": {} + }, + "emoteInvalid": "Nesprávné označení emotikony", + "@emoteInvalid": { + "type": "text", + "placeholders": {} + }, + "Empty chat": "Prázdná diskuze", + "@Empty chat": { + "type": "text", + "placeholders": {} + }, + "You won't be able to disable the encryption anymore. Are you sure?": "Šifrování jiš nebude možné vypnout. Jste si tím jisti?", + "@You won't be able to disable the encryption anymore. Are you sure?": { + "type": "text", + "placeholders": {} + }, + "Encryption algorithm": "Šifrovací algoritmus", + "@Encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "Encryption is not enabled": "Šifrování není aktivní", + "@Encryption is not enabled": { + "type": "text", + "placeholders": {} + }, + "End-to-end encryption settings": "Nastavení koncového šifrování", + "@End-to-end encryption settings": { + "type": "text", + "placeholders": {} + }, + "Enter a group name": "Zadejte jméno skupiny", + "@Enter a group name": { + "type": "text", + "placeholders": {} + }, + "Enter a username": "Zadejte uživatelské jméno", + "@Enter a username": { + "type": "text", + "placeholders": {} + }, + "Enter your homeserver": "Zadejte adresu serveru", + "@Enter your homeserver": { + "type": "text", + "placeholders": {} + }, + "File name": "Název souboru", + "@File name": { + "type": "text", + "placeholders": {} + }, + "File size": "Velikost souboru", + "@File size": { + "type": "text", + "placeholders": {} + }, + "FluffyChat": "FluffyChat", + "@FluffyChat": { + "type": "text", + "placeholders": {} + }, + "Forward": "Přeposlat", + "@Forward": { + "type": "text", + "placeholders": {} + }, + "Friday": "Pátek", + "@Friday": { + "type": "text", + "placeholders": {} + }, + "From joining": "Od připojení", + "@From joining": { + "type": "text", + "placeholders": {} + }, + "From the invitation": "Od pozvání", + "@From the invitation": { + "type": "text", + "placeholders": {} + }, + "Group": "Skupina", + "@Group": { + "type": "text", + "placeholders": {} + }, + "Group description": "Popis skupiny", + "@Group description": { + "type": "text", + "placeholders": {} + }, + "Group description has been changed": "Popis skupiny byl změněn", + "@Group description has been changed": { + "type": "text", + "placeholders": {} + }, + "Group is public": "Skupina je veřejná", + "@Group is public": { + "type": "text", + "placeholders": {} + }, + "groupWith": "Skupina s {displayname}", + "@groupWith": { + "type": "text", + "placeholders": { + "displayname": {} + } + }, + "Guests are forbidden": "Hosté jsou zakázáni", + "@Guests are forbidden": { + "type": "text", + "placeholders": {} + }, + "Guests can join": "Hosté se mohou připojit", + "@Guests can join": { + "type": "text", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{username} vzal zpět pozvání pro {targetName}", + "@hasWithdrawnTheInvitationFor": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Help": "Pomoc", + "@Help": { + "type": "text", + "placeholders": {} + }, + "Homeserver is not compatible": "Server není kompatibilní", + "@Homeserver is not compatible": { + "type": "text", + "placeholders": {} + }, + "ID": "ID", + "@ID": { + "type": "text", + "placeholders": {} + }, + "Identity": "Identita", + "@Identity": { + "type": "text", + "placeholders": {} + }, + "Invite contact": "Pozvat kontakt", + "@Invite contact": { + "type": "text", + "placeholders": {} + }, + "inviteContactToGroup": "Pozvat kontakt do {groupName}", + "@inviteContactToGroup": { + "type": "text", + "placeholders": { + "groupName": {} + } + }, + "Invited": "Pozváni", + "@Invited": { + "type": "text", + "placeholders": {} + }, + "inviteText": "", + "@inviteText": { + "type": "text", + "placeholders": { + "username": {}, + "link": {} + } + }, + "invitedUser": "{username} pozvali {targetName}", + "@invitedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Invited users only": "Pouze pozvaní uživatelé", + "@Invited users only": { + "type": "text", + "placeholders": {} + }, + "is typing...": "píše…", + "@is typing...": { + "type": "text", + "placeholders": {} + }, + "Edit Jitsi instance": "Nastavení instance Jitsi", + "@Edit Jitsi instance": { + "type": "text", + "placeholders": {} + }, + "joinedTheChat": "{username} se připojili do diskuze", + "@joinedTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "kicked": "{username} vyhodil {targetName}", + "@kicked": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "kickedAndBanned": "{username} vyhodil a zabanoval {targetName}", + "@kickedAndBanned": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Kick from chat": "Vyhodit z diskuze", + "@Kick from chat": { + "type": "text", + "placeholders": {} + }, + "Leave": "Odejít", + "@Leave": { + "type": "text", + "placeholders": {} + }, + "Left the chat": "Odešel z diskuze", + "@Left the chat": { + "type": "text", + "placeholders": {} + }, + "Logout": "Odhlásit", + "@Logout": { + "type": "text", + "placeholders": {} + }, + "userLeftTheChat": "{username} opustili diskuzi", + "@userLeftTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "lastActiveAgo": "Naposledy aktivní: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "text", + "placeholders": { + "localizedTimeShort": {} + } + }, + "Last seen IP": "Naposledy viděná IP", + "@Last seen IP": { + "type": "text", + "placeholders": {} + }, + "License": "Licence", + "@License": { + "type": "text", + "placeholders": {} + }, + "Loading... Please wait": "Načítání… Prosíme počkejte", + "@Loading... Please wait": { + "type": "text", + "placeholders": {} + }, + "Load more...": "Načíst další…", + "@Load more...": { + "type": "text", + "placeholders": {} + }, + "loadCountMoreParticipants": "Načíst dalších {count} účastníků", + "@loadCountMoreParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Login": "Přihlášení", + "@Login": { + "type": "text", + "placeholders": {} + }, + "logInTo": "Přihlášení k {homeserver}", + "@logInTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "Make a moderator": "Učiň moderátorem", + "@Make a moderator": { + "type": "text", + "placeholders": {} + }, + "Make an admin": "Učiň adminem", + "@Make an admin": { + "type": "text", + "placeholders": {} + }, + "Make sure the identifier is valid": "Ujistěte se, že je identifikátor validní", + "@Make sure the identifier is valid": { + "type": "text", + "placeholders": {} + }, + "Message will be removed for all participants": "Zpráva bude odstraněna pro všechny účastníky", + "@Message will be removed for all participants": { + "type": "text", + "placeholders": {} + }, + "Moderator": "Moderátor", + "@Moderator": { + "type": "text", + "placeholders": {} + }, + "Monday": "Pondělí", + "@Monday": { + "type": "text", + "placeholders": {} + }, + "Mute chat": "Ztišit diskuzi", + "@Mute chat": { + "type": "text", + "placeholders": {} + }, + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": "", + "@Please be aware that you need Pantalaimon to use end-to-end encryption for now.": { + "type": "text", + "placeholders": {} + }, + "New message in FluffyChat": "Nová zpráva ve FluffyChatu", + "@New message in FluffyChat": { + "type": "text", + "placeholders": {} + }, + "New private chat": "Nová soukromá diskuze", + "@New private chat": { + "type": "text", + "placeholders": {} + }, + "It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": "Vypadá to, že váš telefon nemá nainstalovány google services. Dobré rozhodnutí pro vaši bezpečnost! Pro příjem notifikací doporučujeme použít miocroG: https://microg.org/", + "@It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": { + "type": "text", + "placeholders": {} + }, + "None": "Nic", + "@None": { + "type": "text", + "placeholders": {} + }, + "No emotes found. 😕": "Žádné emotikony nebyly nalezeny. 😕", + "@No emotes found. 😕": { + "type": "text", + "placeholders": {} + }, + "No permission": "Chybí oprávnění", + "@No permission": { + "type": "text", + "placeholders": {} + }, + "No rooms found...": "Žádné místnosti nebyly nalezeny…", + "@No rooms found...": { + "type": "text", + "placeholders": {} + }, + "Not supported in web": "Nepodporováno na webu", + "@Not supported in web": { + "type": "text", + "placeholders": {} + }, + "numberSelected": "{number} vybráno", + "@numberSelected": { + "type": "text", + "placeholders": { + "number": {} + } + }, + "ok": "ok", + "@ok": { + "type": "text", + "placeholders": {} + }, + "Oops something went wrong...": "Ups! Něco se pokazilo…", + "@Oops something went wrong...": { + "type": "text", + "placeholders": {} + }, + "Open app to read messages": "Otevřete aplikaci pro přečtení zpráv", + "@Open app to read messages": { + "type": "text", + "placeholders": {} + }, + "Open camera": "Otevřít fotoaparát", + "@Open camera": { + "type": "text", + "placeholders": {} + }, + "(Optional) Group name": "(Volitelné) Název skupiny", + "@(Optional) Group name": { + "type": "text", + "placeholders": {} + }, + "Participating user devices": "Zúčastněná zařízení uživatele", + "@Participating user devices": { + "type": "text", + "placeholders": {} + }, + "Password": "Heslo", + "@Password": { + "type": "text", + "placeholders": {} + }, + "Pick image": "Zvolit obrázek", + "@Pick image": { + "type": "text", + "placeholders": {} + }, + "play": "Přehrát (fileName}", + "@play": { + "type": "text", + "placeholders": { + "fileName": {} + } + }, + "Please choose a username": "Prosíme zvolte si uživatelské jméno", + "@Please choose a username": { + "type": "text", + "placeholders": {} + }, + "Please enter a matrix identifier": "Prosíme zadejte identifikátor sítě matrix", + "@Please enter a matrix identifier": { + "type": "text", + "placeholders": {} + }, + "Please enter your password": "Prosíme zadejte heslo", + "@Please enter your password": { + "type": "text", + "placeholders": {} + }, + "Please enter your username": "Prosíme zadejte uživateslké jméno", + "@Please enter your username": { + "type": "text", + "placeholders": {} + }, + "Public Rooms": "Veřejné místnosti", + "@Public Rooms": { + "type": "text", + "placeholders": {} + }, + "Rejoin": "Připojit znovu", + "@Rejoin": { + "type": "text", + "placeholders": {} + }, + "Render rich message content": "Zobrazit formátovaný obsah", + "@Render rich message content": { + "type": "text", + "placeholders": {} + }, + "Recording": "Nahrávání", + "@Recording": { + "type": "text", + "placeholders": {} + }, + "redactedAnEvent": "{username} odstranili událost", + "@redactedAnEvent": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "rejectedTheInvitation": "{username} odmítli pozvání", + "@rejectedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove all other devices": "Odstranit všechna další zařízení", + "@Remove all other devices": { + "type": "text", + "placeholders": {} + }, + "removedBy": "Odstraněno {username}", + "@removedBy": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove device": "Odstraň zařízení", + "@Remove device": { + "type": "text", + "placeholders": {} + }, + "Remove exile": "", + "@Remove exile": { + "type": "text", + "placeholders": {} + }, + "Revoke all permissions": "Vezmi zpět všechna oprávnění", + "@Revoke all permissions": { + "type": "text", + "placeholders": {} + }, + "Remove": "Odstranit", + "@Remove": { + "type": "text", + "placeholders": {} + }, + "Remove message": "Odstranit zprávu", + "@Remove message": { + "type": "text", + "placeholders": {} + }, + "Reply": "Odpovědět", + "@Reply": { + "type": "text", + "placeholders": {} + }, + "Request permission": "Vyžádat oprávnění", + "@Request permission": { + "type": "text", + "placeholders": {} + }, + "Request to read older messages": "Vyžádat přečtení starších zpráv", + "@Request to read older messages": { + "type": "text", + "placeholders": {} + }, + "Saturday": "Sobota", + "@Saturday": { + "type": "text", + "placeholders": {} + }, + "Share": "Sdílet", + "@Share": { + "type": "text", + "placeholders": {} + }, + "sharedTheLocation": "{username} nasdíleli lokaci", + "@sharedTheLocation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Search for a chat": "Hledej diskuzi", + "@Search for a chat": { + "type": "text", + "placeholders": {} + }, + "Seen a long time ago": "", + "@Seen a long time ago": { + "type": "text", + "placeholders": {} + }, + "seenByUser": "Viděno uživatelem {username}", + "@seenByUser": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "seenByUserAndUser": "Viděno uživateli {username} a {username2}", + "@seenByUserAndUser": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "seenByUserAndCountOthers": "Viděno uživateli {username} a {count} dalšími", + "@seenByUserAndCountOthers": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "Send": "Odeslat", + "@Send": { + "type": "text", + "placeholders": {} + }, + "Send a message": "Odeslat zprávu", + "@Send a message": { + "type": "text", + "placeholders": {} + }, + "Send file": "Odeslat soubor", + "@Send file": { + "type": "text", + "placeholders": {} + }, + "Send image": "Odeslat obrázek", + "@Send image": { + "type": "text", + "placeholders": {} + }, + "sentAFile": "{username} poslali soubor", + "@sentAFile": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAnAudio": "{username} poslali zvukovou nahrávku", + "@sentAnAudio": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAPicture": "{username} poslali obrázek", + "@sentAPicture": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentASticker": "{username} poslali samolepku", + "@sentASticker": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAVideo": "{username} poslali video", + "@sentAVideo": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Set a profile picture": "Nastavit profilový obrázek", + "@Set a profile picture": { + "type": "text", + "placeholders": {} + }, + "Set group description": "Nastavit popis skupiny", + "@Set group description": { + "type": "text", + "placeholders": {} + }, + "Set invitation link": "Nastavit zvací odkaz", + "@Set invitation link": { + "type": "text", + "placeholders": {} + }, + "Set status": "Nastavit status", + "@Set status": { + "type": "text", + "placeholders": {} + }, + "Settings": "Nastavení", + "@Settings": { + "type": "text", + "placeholders": {} + }, + "Sign up": "Registrovat se", + "@Sign up": { + "type": "text", + "placeholders": {} + }, + "Change your style": "Nastavte svůj styl", + "@Change your style": { + "type": "text", + "placeholders": {} + }, + "System": "Systém", + "@System": { + "type": "text", + "placeholders": {} + }, + "How are you today?": "Jak se máte?", + "@How are you today?": { + "type": "text", + "placeholders": {} + }, + "Light": "Světlý", + "@Light": { + "type": "text", + "placeholders": {} + }, + "Dark": "Tmavý", + "@Dark": { + "type": "text", + "placeholders": {} + }, + "Use Amoled compatible colors?": "Použít barvy kompatibilní s Amoled displayem?", + "@Use Amoled compatible colors?": { + "type": "text", + "placeholders": {} + }, + "Source code": "Zdrojové kódy", + "@Source code": { + "type": "text", + "placeholders": {} + }, + "Start your first chat :-)": "Začněte svou první diskuzi :)", + "@Start your first chat :-)": { + "type": "text", + "placeholders": {} + }, + "Sunday": "Neděle", + "@Sunday": { + "type": "text", + "placeholders": {} + }, + "Donate": "Přispějte", + "@Donate": { + "type": "text", + "placeholders": {} + }, + "Tap to show menu": "Klepněte pro zobrazení menu", + "@Tap to show menu": { + "type": "text", + "placeholders": {} + }, + "This room has been archived.": "Tato místnost byla archivována.", + "@This room has been archived.": { + "type": "text", + "placeholders": {} + }, + "Thursday": "Čtvrtek", + "@Thursday": { + "type": "text", + "placeholders": {} + }, + "timeOfDay": "{hours24}:{minutes}", + "@timeOfDay": { + "type": "text", + "placeholders": { + "hours12": {}, + "hours24": {}, + "minutes": {}, + "suffix": {} + } + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "text", + "placeholders": {} + }, + "Try to send again": "", + "@Try to send again": { + "type": "text", + "placeholders": {} + }, + "Tuesday": "", + "@Tuesday": { + "type": "text", + "placeholders": {} + }, + "unbannedUser": "", + "@unbannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Unmute chat": "Zrušit ztišení", + "@Unmute chat": { + "type": "text", + "placeholders": {} + }, + "Unknown device": "Neznámé zařízení", + "@Unknown device": { + "type": "text", + "placeholders": {} + }, + "Unknown encryption algorithm": "Neznámý šifrovací algoritmus", + "@Unknown encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "unknownEvent": "Neznámá událost „{type}“", + "@unknownEvent": { + "type": "text", + "placeholders": { + "type": {} + } + }, + "unreadChats": "{unreadCount} nepřečtených diskuzí", + "@unreadChats": { + "type": "text", + "placeholders": { + "unreadCount": {} + } + }, + "unreadMessages": "{unreadEvents} nepřečtených zpráv", + "@unreadMessages": { + "type": "text", + "placeholders": { + "unreadEvents": {} + } + }, + "unreadMessagesInChats": "{unreadEvents} nepřečtených zpráv v {unreadChats}", + "@unreadMessagesInChats": { + "type": "text", + "placeholders": { + "unreadEvents": {}, + "unreadChats": {} + } + }, + "userAndOthersAreTyping": "{username} a {count} dalších píší…", + "@userAndOthersAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "userAndUserAreTyping": "{username} a {username2} píší…", + "@userAndUserAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "Username": "Uživatelské jméno", + "@Username": { + "type": "text", + "placeholders": {} + }, + "userIsTyping": "{username} píše…", + "@userIsTyping": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "userSentUnknownEvent": "{username} poslal událost {type}", + "@userSentUnknownEvent": { + "type": "text", + "placeholders": { + "username": {}, + "type": {} + } + }, + "Verify": "Ověř", + "@Verify": { + "type": "text", + "placeholders": {} + }, + "Video call": "Video hovor", + "@Video call": { + "type": "text", + "placeholders": {} + }, + "Visible for all participants": "Viditelné pro všechny účastníky", + "@Visible for all participants": { + "type": "text", + "placeholders": {} + }, + "Visible for everyone": "Viditelné pro všechny", + "@Visible for everyone": { + "type": "text", + "placeholders": {} + }, + "Visibility of the chat history": "Viditelnost historie diskuze", + "@Visibility of the chat history": { + "type": "text", + "placeholders": {} + }, + "Voice message": "Hlasová zpráva", + "@Voice message": { + "type": "text", + "placeholders": {} + }, + "Wallpaper": "Pozadí", + "@Wallpaper": { + "type": "text", + "placeholders": {} + }, + "End to end encryption is currently in Beta! Use at your own risk!": "Koncové šifrování je momentálně v Beta verzi! Používejte na vlastní nebezpečí!", + "@End to end encryption is currently in Beta! Use at your own risk!": { + "type": "text", + "placeholders": {} + }, + "Wednesday": "Středa", + "@Wednesday": { + "type": "text", + "placeholders": {} + }, + "Welcome to the cutest instant messenger in the matrix network.": "Vítejte v nejroztomilejší diskuzní aplikaci pro síť matrix.", + "@Welcome to the cutest instant messenger in the matrix network.": { + "type": "text", + "placeholders": {} + }, + "Who is allowed to join this group": "Kdo se může připojit do této skupiny", + "@Who is allowed to join this group": { + "type": "text", + "placeholders": {} + }, + "Write a message...": "Napište zprávu…", + "@Write a message...": { + "type": "text", + "placeholders": {} + }, + "Yes": "Ano", + "@Yes": { + "type": "text", + "placeholders": {} + }, + "You": "Ty", + "@You": { + "type": "text", + "placeholders": {} + }, + "You are invited to this chat": "Jste zváni do této diskuze", + "@You are invited to this chat": { + "type": "text", + "placeholders": {} + }, + "You are no longer participating in this chat": "Této diskuze se nadále neúčastníte", + "@You are no longer participating in this chat": { + "type": "text", + "placeholders": {} + }, + "You cannot invite yourself": "Nemůžete pozvat sami sebe", + "@You cannot invite yourself": { + "type": "text", + "placeholders": {} + }, + "You have been banned from this chat": "Byli jste zabanováni z této diskuze", + "@You have been banned from this chat": { + "type": "text", + "placeholders": {} + }, + "Your own username": "Vaše vlastní uživatelské jméno", + "@Your own username": { + "type": "text", + "placeholders": {} + }, + "Accept": "Přijmout", + "@Accept": { + "type": "text", + "placeholders": {} + } +} diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index a7003f1..c996436 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -89,7 +89,7 @@ "type": "text", "placeholders": {} }, - "Banned": "Banned", + "Banned": "Verbannt", "@Banned": { "type": "text", "placeholders": {} @@ -102,7 +102,7 @@ "targetName": {} } }, - "byDefaultYouWillBeConnectedTo": "Standardmäßig wirst Du mit {Homeserver} verbunden", + "byDefaultYouWillBeConnectedTo": "Standardmäßig wirst Du mit {homeserver} verbunden", "@byDefaultYouWillBeConnectedTo": { "type": "text", "placeholders": { @@ -223,7 +223,7 @@ "username": {} } }, - "Changelog": "Changelog", + "Changelog": "Protokoll der Änderungen", "@Changelog": { "type": "text", "placeholders": {} @@ -332,7 +332,7 @@ "count": {} } }, - "Create": "Create", + "Create": "Erstellen", "@Create": { "type": "text", "placeholders": {} @@ -354,8 +354,8 @@ "type": "text", "placeholders": {} }, - "Currenlty active": "Jetzt gerade online", - "@Currenlty active": { + "Currently active": "Jetzt gerade online", + "@Currently active": { "type": "text", "placeholders": {} }, @@ -367,7 +367,7 @@ "timeOfDay": {} } }, - "dateWithoutYear": "{day}.{month}", + "dateWithoutYear": "{day}. {month}", "@dateWithoutYear": { "type": "text", "placeholders": { @@ -375,7 +375,7 @@ "day": {} } }, - "dateWithYear": "{day}.{month}.{year}", + "dateWithYear": "{day}. {month}. {year}", "@dateWithYear": { "type": "text", "placeholders": { @@ -599,7 +599,7 @@ "type": "text", "placeholders": {} }, - "inviteContactToGroup": "Kontakt zu {groupName} einladen", + "inviteContactToGroup": "Kontakt in die Gruppe {groupName} einladen", "@inviteContactToGroup": { "type": "text", "placeholders": { @@ -680,7 +680,7 @@ "type": "text", "placeholders": {} }, - "Logout": "Logout", + "Logout": "Abmelden", "@Logout": { "type": "text", "placeholders": {} @@ -692,7 +692,7 @@ "username": {} } }, - "lastActiveAgo": "Zuletzt gesehen: {localizedTimeShort}", + "lastActiveAgo": "Zuletzt aktiv: {localizedTimeShort}", "@lastActiveAgo": { "type": "text", "placeholders": { @@ -860,7 +860,7 @@ "type": "text", "placeholders": {} }, - "play": "Play {fileName}", + "play": "{fileName} abspielen", "@play": { "type": "text", "placeholders": { @@ -990,7 +990,7 @@ "username": {} } }, - "Search for a chat": "Durchsuche die Chats", + "Search for a chat": "Chat suchen", "@Search for a chat": { "type": "text", "placeholders": {} @@ -1217,7 +1217,7 @@ "type": "text", "placeholders": {} }, - "unknownEvent": "Unbekanntes Event '{type}'", + "unknownEvent": "Unbekanntes Ereignis '{type}'", "@unknownEvent": { "type": "text", "placeholders": { @@ -1376,5 +1376,217 @@ "@Your own username": { "type": "text", "placeholders": {} + }, + "waitingPartnerNumbers": "Warte darauf, dass der Partner die Zahlen annimmt...", + "@waitingPartnerNumbers": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerEmoji": "Warte darauf, dass der Partner die Emoji annimmt...", + "@waitingPartnerEmoji": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "Warte darauf, dass der Partner die Verifikationsanfrage annimmt...", + "@waitingPartnerAcceptRequest": { + "type": "text", + "placeholders": {} + }, + "Verify User": "Verifiziere Benutzer", + "@Verify User": { + "type": "text", + "placeholders": {} + }, + "verifyTitle": "Verifiziere anderen Benutzer", + "@verifyTitle": { + "type": "text", + "placeholders": {} + }, + "verifySuccess": "Erfolgreich verifiziert!", + "@verifySuccess": { + "type": "text", + "placeholders": {} + }, + "verifyStart": "Starte Verifikation", + "@verifyStart": { + "type": "text", + "placeholders": {} + }, + "verifiedSession": "Sitzung erfolgreich verifiziert!", + "@verifiedSession": { + "type": "text", + "placeholders": {} + }, + "verifyManual": "Verifiziere manuell", + "@verifyManual": { + "type": "text", + "placeholders": {} + }, + "unknownSessionVerify": "Unbekannte Sitzung, bitte verifiziere diese", + "@unknownSessionVerify": { + "type": "text", + "placeholders": {} + }, + "Unblock Device": "Geräteblockierung aufheben", + "@Unblock Device": { + "type": "text", + "placeholders": {} + }, + "They Match": "Stimmen überein", + "@They Match": { + "type": "text", + "placeholders": {} + }, + "They Don't Match": "Stimmen nicht überein", + "@They Don't Match": { + "type": "text", + "placeholders": {} + }, + "How are you today?": "Wie geht es dir heute?", + "@How are you today?": { + "type": "text", + "placeholders": {} + }, + "Skip": "Überspringe", + "@Skip": { + "type": "text", + "placeholders": {} + }, + "sessionVerified": "Sitzung ist verifiziert", + "@sessionVerified": { + "type": "text", + "placeholders": {} + }, + "Room has been upgraded": "Der Raum wurde ge-upgraded", + "@Room has been upgraded": { + "type": "text", + "placeholders": {} + }, + "Reject": "Ablehnen", + "@Reject": { + "type": "text", + "placeholders": {} + }, + "passphraseOrKey": "Passwort oder Wiederherstellungsschlüssel", + "@passphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Open app to read messages": "Öffne app, um Nachrichten zu lesen", + "@Open app to read messages": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "Online Key Backup ist aktiviert", + "@onlineKeyBackupEnabled": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupDisabled": "Online Key Backup ist deaktiviert", + "@onlineKeyBackupDisabled": { + "type": "text", + "placeholders": {} + }, + "noMegolmBootstrap": "Fluffychat unterstützt noch nicht das Einschalten vom Online Key Backup. Bitte schalte es innerhalb Riot an.", + "@noMegolmBootstrap": { + "type": "text", + "placeholders": {} + }, + "noCrossSignBootstrap": "Fluffychat unterstützt noch nicht das Einschalten von Cross-Signing. Bitte schalte es innerhalb Riot an.", + "@noCrossSignBootstrap": { + "type": "text", + "placeholders": {} + }, + "newVerificationRequest": "Neue Verifikationsanfrage!", + "@newVerificationRequest": { + "type": "text", + "placeholders": {} + }, + "keysMissing": "Keys fehlen", + "@keysMissing": { + "type": "text", + "placeholders": {} + }, + "keysCached": "Keys sind gecached", + "@keysCached": { + "type": "text", + "placeholders": {} + }, + "isDeviceKeyCorrect": "Ist der folgende Geräteschlüssel korrekt?", + "@isDeviceKeyCorrect": { + "type": "text", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Falsches Passwort oder Wiederherstellungsschlüssel", + "@incorrectPassphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Encryption": "Verschlüsselung", + "@Encryption": { + "type": "text", + "placeholders": {} + }, + "crossSigningEnabled": "Cross-Signing ist aktiviert", + "@crossSigningEnabled": { + "type": "text", + "placeholders": {} + }, + "crossSigningDisabled": "Cross-Signing ist deaktiviert", + "@crossSigningDisabled": { + "type": "text", + "placeholders": {} + }, + "compareNumbersMatch": "Vergleiche und stelle sicher, dass die folgenden Zahlen mit denen des anderen Gerätes übereinstimmen:", + "@compareNumbersMatch": { + "type": "text", + "placeholders": {} + }, + "compareEmojiMatch": "Vergleiche und stelle sicher, dass die folgenden Emoji mit denen des anderen Gerätes übereinstimmen:", + "@compareEmojiMatch": { + "type": "text", + "placeholders": {} + }, + "cachedKeys": "Keys erfolgreich gecached!", + "@cachedKeys": { + "type": "text", + "placeholders": {} + }, + "Block Device": "Blockiere Gerät", + "@Block Device": { + "type": "text", + "placeholders": {} + }, + "askVerificationRequest": "Diese Bestätigungsanfrage von {username} annehmen?", + "@askVerificationRequest": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "askSSSSVerify": "Bitte gebe um deine Session zu verifizieren dein Secure-Store Passwort oder Wiederherstellungsschlüssel ein.", + "@askSSSSVerify": { + "type": "text", + "placeholders": {} + }, + "askSSSSSign": "Bitte gebe um die andere Person signieren zu können dein Secure-Store Passwort oder Wiederherstellungsschlüssel ein.", + "@askSSSSSign": { + "type": "text", + "placeholders": {} + }, + "askSSSSCache": "Bitte gib dein Secure-Store Passwort oder Wiederherstellungsschlüssel ein, um die Keys zu cachen.", + "@askSSSSCache": { + "type": "text", + "placeholders": {} + }, + "Accept": "Annehmen", + "@Accept": { + "type": "text", + "placeholders": {} + }, + "Submit": "Absenden", + "@Submit": { + "type": "text", + "placeholders": {} } } diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb new file mode 100644 index 0000000..6ef3231 --- /dev/null +++ b/lib/l10n/intl_es.arb @@ -0,0 +1,1592 @@ +{ + "@@last_modified": "2020-06-25T16:02:16.297192", + "About": "Acerca de", + "@About": { + "type": "text", + "placeholders": {} + }, + "Accept": "Aceptar", + "@Accept": { + "type": "text", + "placeholders": {} + }, + "acceptedTheInvitation": "{username} aceptó la invitación", + "@acceptedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Account": "Cuenta", + "@Account": { + "type": "text", + "placeholders": {} + }, + "Account informations": "Información de la cuenta", + "@Account informations": { + "type": "text", + "placeholders": {} + }, + "activatedEndToEndEncryption": "{username} activó el cifrado de extremo a extremo", + "@activatedEndToEndEncryption": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Add a group description": "Agregar una descripción al grupo", + "@Add a group description": { + "type": "text", + "placeholders": {} + }, + "Admin": "Administrador", + "@Admin": { + "type": "text", + "placeholders": {} + }, + "alias": "alias", + "@alias": { + "type": "text", + "placeholders": {} + }, + "Already have an account?": "¿Ya tienes una cuenta?", + "@Already have an account?": { + "type": "text", + "placeholders": {} + }, + "Anyone can join": "Cualquiera puede unirse", + "@Anyone can join": { + "type": "text", + "placeholders": {} + }, + "Archive": "Archivo", + "@Archive": { + "type": "text", + "placeholders": {} + }, + "Archived Room": "Sala archivada", + "@Archived Room": { + "type": "text", + "placeholders": {} + }, + "Are guest users allowed to join": "¿Pueden unirse los usuarios visitantes?", + "@Are guest users allowed to join": { + "type": "text", + "placeholders": {} + }, + "Are you sure?": "¿Estás seguro?", + "@Are you sure?": { + "type": "text", + "placeholders": {} + }, + "askSSSSCache": "Ingrese su contraseña de almacenamiento segura (SSSS) o la clave de recuperación para almacenar en caché las claves.", + "@askSSSSCache": { + "type": "text", + "placeholders": {} + }, + "askSSSSSign": "Para poder confirmar a la otra persona, ingrese su contraseña de almacenamiento segura o la clave de recuperación.", + "@askSSSSSign": { + "type": "text", + "placeholders": {} + }, + "askSSSSVerify": "Por favor, ingrese su contraseña de almacenamiento seguro (SSSS) o la clave de recuperación para verificar su sesión.", + "@askSSSSVerify": { + "type": "text", + "placeholders": {} + }, + "askVerificationRequest": "¿Aceptar esta solicitud de verificación de {username}?", + "@askVerificationRequest": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Authentication": "Autenticación", + "@Authentication": { + "type": "text", + "placeholders": {} + }, + "Avatar has been changed": "La imagen de perfil ha sido cambiada", + "@Avatar has been changed": { + "type": "text", + "placeholders": {} + }, + "Ban from chat": "Vetar del chat", + "@Ban from chat": { + "type": "text", + "placeholders": {} + }, + "Banned": "Vetado", + "@Banned": { + "type": "text", + "placeholders": {} + }, + "bannedUser": "{username} vetó a {targetName}", + "@bannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Block Device": "Bloquear dispositivo", + "@Block Device": { + "type": "text", + "placeholders": {} + }, + "byDefaultYouWillBeConnectedTo": "De forma predeterminada estará conectado a {homeserver}", + "@byDefaultYouWillBeConnectedTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "cachedKeys": "¡Las claves se han almacenado exitosamente!", + "@cachedKeys": { + "type": "text", + "placeholders": {} + }, + "Cancel": "Cancelar", + "@Cancel": { + "type": "text", + "placeholders": {} + }, + "changedTheChatAvatar": "{username} cambió el icono del chat", + "@changedTheChatAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheChatNameTo": "{username} cambió el nombre del chat a: '{chatname}'", + "@changedTheChatNameTo": { + "type": "text", + "placeholders": { + "username": {}, + "chatname": {} + } + }, + "changedTheChatDescriptionTo": "{username} cambió la descripción del chat a: '{description}'", + "@changedTheChatDescriptionTo": { + "type": "text", + "placeholders": { + "username": {}, + "description": {} + } + }, + "changedTheChatPermissions": "{username} cambió los permisos del chat", + "@changedTheChatPermissions": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheDisplaynameTo": "{username} cambió su nombre visible a: {displayname}", + "@changedTheDisplaynameTo": { + "type": "text", + "placeholders": { + "username": {}, + "displayname": {} + } + }, + "Change the homeserver": "Cambiar el servidor", + "@Change the homeserver": { + "type": "text", + "placeholders": {} + }, + "changedTheGuestAccessRules": "{username} cambió las reglas de acceso de visitantes", + "@changedTheGuestAccessRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheGuestAccessRulesTo": "{username} cambió las reglas de acceso de visitantes a: {rules}", + "@changedTheGuestAccessRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheHistoryVisibility": "{username} cambió la visibilidad del historial", + "@changedTheHistoryVisibility": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheHistoryVisibilityTo": "{username} cambió la visibilidad del historial a: {rules}", + "@changedTheHistoryVisibilityTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheJoinRules": "{username} cambió las reglas de ingreso", + "@changedTheJoinRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheJoinRulesTo": "{username} cambió las reglas de ingreso a {joinRules}", + "@changedTheJoinRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "joinRules": {} + } + }, + "changedTheProfileAvatar": "{username} cambió su imagen de perfil", + "@changedTheProfileAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomAliases": "{username} cambió el alias de la sala", + "@changedTheRoomAliases": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomInvitationLink": "{username} cambió el enlace de invitación", + "@changedTheRoomInvitationLink": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Changelog": "Registro de cambios", + "@Changelog": { + "type": "text", + "placeholders": {} + }, + "Change the name of the group": "Cambiar el nombre del grupo", + "@Change the name of the group": { + "type": "text", + "placeholders": {} + }, + "Change wallpaper": "Cambiar el fondo de pantalla", + "@Change wallpaper": { + "type": "text", + "placeholders": {} + }, + "Change the server": "Cambiar el servidor", + "@Change the server": { + "type": "text", + "placeholders": {} + }, + "The encryption has been corrupted": "El cifrado se ha corrompido", + "@The encryption has been corrupted": { + "type": "text", + "placeholders": {} + }, + "Chat": "Chat", + "@Chat": { + "type": "text", + "placeholders": {} + }, + "Chat details": "Detalles del chat", + "@Chat details": { + "type": "text", + "placeholders": {} + }, + "Choose a strong password": "Elija una contraseña segura", + "@Choose a strong password": { + "type": "text", + "placeholders": {} + }, + "Choose a username": "Elija un nombre de usuario", + "@Choose a username": { + "type": "text", + "placeholders": {} + }, + "Close": "Cerrar", + "@Close": { + "type": "text", + "placeholders": {} + }, + "compareEmojiMatch": "Compare y asegúrese de que los siguientes emoji coincidan con los del otro dispositivo:", + "@compareEmojiMatch": { + "type": "text", + "placeholders": {} + }, + "compareNumbersMatch": "Compare y asegúrese de que los siguientes números coincidan con los del otro dispositivo:", + "@compareNumbersMatch": { + "type": "text", + "placeholders": {} + }, + "Confirm": "Confirmar", + "@Confirm": { + "type": "text", + "placeholders": {} + }, + "Connect": "Conectar", + "@Connect": { + "type": "text", + "placeholders": {} + }, + "Connection attempt failed": "Falló el intento de conexión", + "@Connection attempt failed": { + "type": "text", + "placeholders": {} + }, + "Contact has been invited to the group": "El contacto ha sido invitado al grupo", + "@Contact has been invited to the group": { + "type": "text", + "placeholders": {} + }, + "Content viewer": "Visor de contenido", + "@Content viewer": { + "type": "text", + "placeholders": {} + }, + "Copied to clipboard": "Copiado al portapapeles", + "@Copied to clipboard": { + "type": "text", + "placeholders": {} + }, + "Copy": "Copiar", + "@Copy": { + "type": "text", + "placeholders": {} + }, + "couldNotDecryptMessage": "No se pudo descifrar el mensaje: {error}", + "@couldNotDecryptMessage": { + "type": "text", + "placeholders": { + "error": {} + } + }, + "Could not set avatar": "No se pudo establecer la imagen de perfil", + "@Could not set avatar": { + "type": "text", + "placeholders": {} + }, + "Could not set displayname": "No se pudo establecer el nombre visible", + "@Could not set displayname": { + "type": "text", + "placeholders": {} + }, + "countParticipants": "{count} participantes", + "@countParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Create": "Crear", + "@Create": { + "type": "text", + "placeholders": {} + }, + "Create account now": "Crear cuenta ahora", + "@Create account now": { + "type": "text", + "placeholders": {} + }, + "createdTheChat": "{username} creó el chat", + "@createdTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Create new group": "Crear grupo nuevo", + "@Create new group": { + "type": "text", + "placeholders": {} + }, + "crossSigningDisabled": "La confirmación cruzada está deshabilitada", + "@crossSigningDisabled": { + "type": "text", + "placeholders": {} + }, + "crossSigningEnabled": "La confirmación cruzada está habilitada", + "@crossSigningEnabled": { + "type": "text", + "placeholders": {} + }, + "Currently active": "Actualmente activo", + "@Currently active": { + "type": "text", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "text", + "placeholders": { + "date": {}, + "timeOfDay": {} + } + }, + "dateWithoutYear": "{day}/{month}", + "@dateWithoutYear": { + "type": "text", + "placeholders": { + "month": {}, + "day": {} + } + }, + "dateWithYear": "{day}/{month}/{year}", + "@dateWithYear": { + "type": "text", + "placeholders": { + "year": {}, + "month": {}, + "day": {} + } + }, + "Delete": "Eliminar", + "@Delete": { + "type": "text", + "placeholders": {} + }, + "Delete message": "Eliminar mensaje", + "@Delete message": { + "type": "text", + "placeholders": {} + }, + "Deny": "Rechazar", + "@Deny": { + "type": "text", + "placeholders": {} + }, + "Device": "Dispositivo", + "@Device": { + "type": "text", + "placeholders": {} + }, + "Devices": "Dispositivos", + "@Devices": { + "type": "text", + "placeholders": {} + }, + "Discard picture": "Descartar imagen", + "@Discard picture": { + "type": "text", + "placeholders": {} + }, + "Displayname has been changed": "El nombre visible ha cambiado", + "@Displayname has been changed": { + "type": "text", + "placeholders": {} + }, + "Download file": "Descargar archivo", + "@Download file": { + "type": "text", + "placeholders": {} + }, + "Edit displayname": "Editar nombre visible", + "@Edit displayname": { + "type": "text", + "placeholders": {} + }, + "Emote Settings": "Configuración de emotes", + "@Emote Settings": { + "type": "text", + "placeholders": {} + }, + "Emote shortcode": "Atajo de emote", + "@Emote shortcode": { + "type": "text", + "placeholders": {} + }, + "emoteWarnNeedToPick": "¡Debes elegir un atajo de emote y una imagen!", + "@emoteWarnNeedToPick": { + "type": "text", + "placeholders": {} + }, + "emoteExists": "¡El emote ya existe!", + "@emoteExists": { + "type": "text", + "placeholders": {} + }, + "emoteInvalid": "¡El atajo del emote es inválido!", + "@emoteInvalid": { + "type": "text", + "placeholders": {} + }, + "Empty chat": "Chat vacío", + "@Empty chat": { + "type": "text", + "placeholders": {} + }, + "You won't be able to disable the encryption anymore. Are you sure?": "Ya no podrá deshabilitar el cifrado. ¿Estás seguro?", + "@You won't be able to disable the encryption anymore. Are you sure?": { + "type": "text", + "placeholders": {} + }, + "Encryption": "Cifrado", + "@Encryption": { + "type": "text", + "placeholders": {} + }, + "Encryption algorithm": "Algoritmo de cifrado", + "@Encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "Encryption is not enabled": "El cifrado no está habilitado", + "@Encryption is not enabled": { + "type": "text", + "placeholders": {} + }, + "End-to-end encryption settings": "Configuración del cifrado de extremo a extremo", + "@End-to-end encryption settings": { + "type": "text", + "placeholders": {} + }, + "Enter a group name": "Ingrese un nombre de grupo", + "@Enter a group name": { + "type": "text", + "placeholders": {} + }, + "Enter a username": "Ingrese un nombre de usuario", + "@Enter a username": { + "type": "text", + "placeholders": {} + }, + "Enter your homeserver": "Ingrese su servidor", + "@Enter your homeserver": { + "type": "text", + "placeholders": {} + }, + "File name": "Nombre del archivo", + "@File name": { + "type": "text", + "placeholders": {} + }, + "File size": "Tamaño del archivo", + "@File size": { + "type": "text", + "placeholders": {} + }, + "FluffyChat": "FluffyChat", + "@FluffyChat": { + "type": "text", + "placeholders": {} + }, + "Forward": "Reenviar", + "@Forward": { + "type": "text", + "placeholders": {} + }, + "Friday": "Viernes", + "@Friday": { + "type": "text", + "placeholders": {} + }, + "From joining": "Desde que se unió", + "@From joining": { + "type": "text", + "placeholders": {} + }, + "From the invitation": "Desde la invitación", + "@From the invitation": { + "type": "text", + "placeholders": {} + }, + "Group": "Grupo", + "@Group": { + "type": "text", + "placeholders": {} + }, + "Group description": "Descripción del grupo", + "@Group description": { + "type": "text", + "placeholders": {} + }, + "Group description has been changed": "La descripción del grupo ha sido cambiada", + "@Group description has been changed": { + "type": "text", + "placeholders": {} + }, + "Group is public": "El grupo es público", + "@Group is public": { + "type": "text", + "placeholders": {} + }, + "groupWith": "Grupo con {displayname}", + "@groupWith": { + "type": "text", + "placeholders": { + "displayname": {} + } + }, + "Guests are forbidden": "Los visitantes están prohibidos", + "@Guests are forbidden": { + "type": "text", + "placeholders": {} + }, + "Guests can join": "Los visitantes pueden unirse", + "@Guests can join": { + "type": "text", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{username} ha retirado la invitación para {targetName}", + "@hasWithdrawnTheInvitationFor": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Help": "Ayuda", + "@Help": { + "type": "text", + "placeholders": {} + }, + "Homeserver is not compatible": "El servidor no es compatible", + "@Homeserver is not compatible": { + "type": "text", + "placeholders": {} + }, + "ID": "Identificación", + "@ID": { + "type": "text", + "placeholders": {} + }, + "Identity": "Identidad", + "@Identity": { + "type": "text", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Frase de contraseña o clave de recuperación incorrecta", + "@incorrectPassphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Invite contact": "Invitar contacto", + "@Invite contact": { + "type": "text", + "placeholders": {} + }, + "inviteContactToGroup": "Invitar contacto a {groupName}", + "@inviteContactToGroup": { + "type": "text", + "placeholders": { + "groupName": {} + } + }, + "Invited": "Invitado", + "@Invited": { + "type": "text", + "placeholders": {} + }, + "inviteText": "{username} te invitó a FluffyChat.\n1. Instale FluffyChat: http://fluffy.chat\n2. Regístrate o inicia sesión \n3. Abra el enlace de invitación: {link}", + "@inviteText": { + "type": "text", + "placeholders": { + "username": {}, + "link": {} + } + }, + "invitedUser": "{username} invitó a {targetName}", + "@invitedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Invited users only": "Sólo usuarios invitados", + "@Invited users only": { + "type": "text", + "placeholders": {} + }, + "isDeviceKeyCorrect": "¿Es correcta la siguiente clave de dispositivo?", + "@isDeviceKeyCorrect": { + "type": "text", + "placeholders": {} + }, + "is typing...": "está escribiendo...", + "@is typing...": { + "type": "text", + "placeholders": {} + }, + "Edit Jitsi instance": "Cambiar la instancia de Jitsi", + "@Edit Jitsi instance": { + "type": "text", + "placeholders": {} + }, + "joinedTheChat": "{username} se unió al chat", + "@joinedTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "keysCached": "Las claves están en caché", + "@keysCached": { + "type": "text", + "placeholders": {} + }, + "keysMissing": "Faltan las claves", + "@keysMissing": { + "type": "text", + "placeholders": {} + }, + "kicked": "{username} echó a {targetName}", + "@kicked": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "kickedAndBanned": "{username} echó y vetó a {targetName}", + "@kickedAndBanned": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Kick from chat": "Echar del chat", + "@Kick from chat": { + "type": "text", + "placeholders": {} + }, + "Leave": "Abandonar", + "@Leave": { + "type": "text", + "placeholders": {} + }, + "Left the chat": "Abandonó el chat", + "@Left the chat": { + "type": "text", + "placeholders": {} + }, + "Logout": "Cerrar sesión", + "@Logout": { + "type": "text", + "placeholders": {} + }, + "userLeftTheChat": "{username} abandonó el chat", + "@userLeftTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "lastActiveAgo": "Última vez activo: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "text", + "placeholders": { + "localizedTimeShort": {} + } + }, + "Last seen IP": "Última dirección IP vista", + "@Last seen IP": { + "type": "text", + "placeholders": {} + }, + "License": "Licencia", + "@License": { + "type": "text", + "placeholders": {} + }, + "Loading... Please wait": "Cargando... Por favor espere", + "@Loading... Please wait": { + "type": "text", + "placeholders": {} + }, + "Load more...": "Mostrar más...", + "@Load more...": { + "type": "text", + "placeholders": {} + }, + "loadCountMoreParticipants": "Mostrar {count} participantes más", + "@loadCountMoreParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Login": "Iniciar sesión", + "@Login": { + "type": "text", + "placeholders": {} + }, + "logInTo": "Iniciar sesión en {homeserver}", + "@logInTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "Make a moderator": "Hacer un moderador/a", + "@Make a moderator": { + "type": "text", + "placeholders": {} + }, + "Make an admin": "Hacer un administrador/a", + "@Make an admin": { + "type": "text", + "placeholders": {} + }, + "Make sure the identifier is valid": "Asegúrese de que el identificador es válido", + "@Make sure the identifier is valid": { + "type": "text", + "placeholders": {} + }, + "Message will be removed for all participants": "El mensaje será eliminado para todos los participantes", + "@Message will be removed for all participants": { + "type": "text", + "placeholders": {} + }, + "Moderator": "Moderador", + "@Moderator": { + "type": "text", + "placeholders": {} + }, + "Monday": "Lunes", + "@Monday": { + "type": "text", + "placeholders": {} + }, + "Mute chat": "Silenciar chat", + "@Mute chat": { + "type": "text", + "placeholders": {} + }, + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": "Tenga en cuenta que necesita Pantalaimon para utilizar el cifrado de extremo a extremo por ahora.", + "@Please be aware that you need Pantalaimon to use end-to-end encryption for now.": { + "type": "text", + "placeholders": {} + }, + "New message in FluffyChat": "Nuevo mensaje en FluffyChat", + "@New message in FluffyChat": { + "type": "text", + "placeholders": {} + }, + "New private chat": "Nuevo chat privado", + "@New private chat": { + "type": "text", + "placeholders": {} + }, + "newVerificationRequest": "¡Nueva solicitud de verificación!", + "@newVerificationRequest": { + "type": "text", + "placeholders": {} + }, + "noCrossSignBootstrap": "Fluffychat actualmente no admite habilitar confirmación cruzada. Por favor habilítela desde Element.", + "@noCrossSignBootstrap": { + "type": "text", + "placeholders": {} + }, + "noMegolmBootstrap": "Fluffychat actualmente no admite habilitar la Copia de seguridad de clave en línea. Por favor habilítela desde Element.", + "@noMegolmBootstrap": { + "type": "text", + "placeholders": {} + }, + "It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": "Parece que no tienes servicios de Google en tu teléfono. ¡Esa es una buena decisión para tu privacidad! Para recibir notificaciones instantáneas en FluffyChat, recomendamos usar microG: https://microg.org/", + "@It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": { + "type": "text", + "placeholders": {} + }, + "None": "Ninguno", + "@None": { + "type": "text", + "placeholders": {} + }, + "No emotes found. 😕": "Ningún emote encontrado. 😕", + "@No emotes found. 😕": { + "type": "text", + "placeholders": {} + }, + "No permission": "Sin autorización", + "@No permission": { + "type": "text", + "placeholders": {} + }, + "No rooms found...": "Ninguna sala encontrada...", + "@No rooms found...": { + "type": "text", + "placeholders": {} + }, + "Not supported in web": "No es compatible con la versión web", + "@Not supported in web": { + "type": "text", + "placeholders": {} + }, + "numberSelected": "{number} seleccionado(s)", + "@numberSelected": { + "type": "text", + "placeholders": { + "number": {} + } + }, + "ok": "ok", + "@ok": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupDisabled": "La copia de seguridad de la clave en línea está deshabilitada", + "@onlineKeyBackupDisabled": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "La copia de seguridad de la clave en línea está habilitada", + "@onlineKeyBackupEnabled": { + "type": "text", + "placeholders": {} + }, + "Oops something went wrong...": "Ups, algo salió mal...", + "@Oops something went wrong...": { + "type": "text", + "placeholders": {} + }, + "Open app to read messages": "Abrir la aplicación para leer los mensajes", + "@Open app to read messages": { + "type": "text", + "placeholders": {} + }, + "Open camera": "Abrir la cámara", + "@Open camera": { + "type": "text", + "placeholders": {} + }, + "(Optional) Group name": "(Opcional) Nombre del grupo", + "@(Optional) Group name": { + "type": "text", + "placeholders": {} + }, + "Participating user devices": "Dispositivos de usuario participantes", + "@Participating user devices": { + "type": "text", + "placeholders": {} + }, + "passphraseOrKey": "contraseña o clave de recuperación", + "@passphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Password": "Contraseña", + "@Password": { + "type": "text", + "placeholders": {} + }, + "Pick image": "Elegir imagen", + "@Pick image": { + "type": "text", + "placeholders": {} + }, + "play": "Reproducir {fileName}", + "@play": { + "type": "text", + "placeholders": { + "fileName": {} + } + }, + "Please choose a username": "Por favor, elija un nombre de usuario", + "@Please choose a username": { + "type": "text", + "placeholders": {} + }, + "Please enter a matrix identifier": "Por favor, ingrese un identificador matrix", + "@Please enter a matrix identifier": { + "type": "text", + "placeholders": {} + }, + "Please enter your password": "Por favor ingrese su contraseña", + "@Please enter your password": { + "type": "text", + "placeholders": {} + }, + "Please enter your username": "Por favor ingrese su nombre de usuario", + "@Please enter your username": { + "type": "text", + "placeholders": {} + }, + "Public Rooms": "Salas públicas", + "@Public Rooms": { + "type": "text", + "placeholders": {} + }, + "Reject": "Rechazar", + "@Reject": { + "type": "text", + "placeholders": {} + }, + "Rejoin": "Volver a unirse", + "@Rejoin": { + "type": "text", + "placeholders": {} + }, + "Render rich message content": "Mostrar el contenido con mensajes enriquecidos", + "@Render rich message content": { + "type": "text", + "placeholders": {} + }, + "Recording": "Grabando", + "@Recording": { + "type": "text", + "placeholders": {} + }, + "redactedAnEvent": "{username} redactó un evento", + "@redactedAnEvent": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "rejectedTheInvitation": "{username} rechazó la invitación", + "@rejectedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove all other devices": "Eliminar todos los otros dispositivos", + "@Remove all other devices": { + "type": "text", + "placeholders": {} + }, + "removedBy": "Eliminado por {username}", + "@removedBy": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove device": "Eliminar dispositivo", + "@Remove device": { + "type": "text", + "placeholders": {} + }, + "Remove exile": "Eliminar la expulsión", + "@Remove exile": { + "type": "text", + "placeholders": {} + }, + "Revoke all permissions": "Revocar todos los permisos", + "@Revoke all permissions": { + "type": "text", + "placeholders": {} + }, + "Remove": "Eliminar", + "@Remove": { + "type": "text", + "placeholders": {} + }, + "Remove message": "Eliminar mensaje", + "@Remove message": { + "type": "text", + "placeholders": {} + }, + "Reply": "Responder", + "@Reply": { + "type": "text", + "placeholders": {} + }, + "Request permission": "Solicitar permiso", + "@Request permission": { + "type": "text", + "placeholders": {} + }, + "Request to read older messages": "Solicitar poder leer mensajes antiguos", + "@Request to read older messages": { + "type": "text", + "placeholders": {} + }, + "Room has been upgraded": "La sala ha subido de categoría", + "@Room has been upgraded": { + "type": "text", + "placeholders": {} + }, + "Saturday": "Sábado", + "@Saturday": { + "type": "text", + "placeholders": {} + }, + "Share": "Compartir", + "@Share": { + "type": "text", + "placeholders": {} + }, + "sharedTheLocation": "{username} compartió la ubicación", + "@sharedTheLocation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Search for a chat": "Buscar un chat", + "@Search for a chat": { + "type": "text", + "placeholders": {} + }, + "Seen a long time ago": "Visto hace mucho tiempo", + "@Seen a long time ago": { + "type": "text", + "placeholders": {} + }, + "seenByUser": "Visto por {username}", + "@seenByUser": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "seenByUserAndUser": "Visto por {username} y {username2}", + "@seenByUserAndUser": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "seenByUserAndCountOthers": "Visto por {username} y {count} más", + "@seenByUserAndCountOthers": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "Send": "Enviar", + "@Send": { + "type": "text", + "placeholders": {} + }, + "Send a message": "Enviar un mensaje", + "@Send a message": { + "type": "text", + "placeholders": {} + }, + "Send file": "Enviar un archivo", + "@Send file": { + "type": "text", + "placeholders": {} + }, + "Send image": "Enviar una imagen", + "@Send image": { + "type": "text", + "placeholders": {} + }, + "sentAFile": "{username} envió un archivo", + "@sentAFile": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAnAudio": "{username} envió un audio", + "@sentAnAudio": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAPicture": "{username} envió una imagen", + "@sentAPicture": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentASticker": "{username} envió un sticker", + "@sentASticker": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAVideo": "{username} envió un video", + "@sentAVideo": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sessionVerified": "La sesión está verificada", + "@sessionVerified": { + "type": "text", + "placeholders": {} + }, + "Set a profile picture": "Establecer una foto de perfil", + "@Set a profile picture": { + "type": "text", + "placeholders": {} + }, + "Set group description": "Establecer descripción del grupo", + "@Set group description": { + "type": "text", + "placeholders": {} + }, + "Set invitation link": "Establecer enlace de invitación", + "@Set invitation link": { + "type": "text", + "placeholders": {} + }, + "Set status": "Establecer estado", + "@Set status": { + "type": "text", + "placeholders": {} + }, + "Settings": "Ajustes", + "@Settings": { + "type": "text", + "placeholders": {} + }, + "Sign up": "Registrarse", + "@Sign up": { + "type": "text", + "placeholders": {} + }, + "Skip": "Omitir", + "@Skip": { + "type": "text", + "placeholders": {} + }, + "Change your style": "Cambia tu estilo", + "@Change your style": { + "type": "text", + "placeholders": {} + }, + "System": "Sistema", + "@System": { + "type": "text", + "placeholders": {} + }, + "How are you today?": "¿Cómo estás hoy?", + "@How are you today?": { + "type": "text", + "placeholders": {} + }, + "Light": "Claro", + "@Light": { + "type": "text", + "placeholders": {} + }, + "Dark": "Oscuro", + "@Dark": { + "type": "text", + "placeholders": {} + }, + "Use Amoled compatible colors?": "¿Usar colores compatibles con AMOLED?", + "@Use Amoled compatible colors?": { + "type": "text", + "placeholders": {} + }, + "Source code": "Código fuente", + "@Source code": { + "type": "text", + "placeholders": {} + }, + "Start your first chat :-)": "Comience su primer chat :-)", + "@Start your first chat :-)": { + "type": "text", + "placeholders": {} + }, + "Submit": "Enviar", + "@Submit": { + "type": "text", + "placeholders": {} + }, + "Sunday": "Domingo", + "@Sunday": { + "type": "text", + "placeholders": {} + }, + "Donate": "Donar", + "@Donate": { + "type": "text", + "placeholders": {} + }, + "Tap to show menu": "Toca para mostrar el menú", + "@Tap to show menu": { + "type": "text", + "placeholders": {} + }, + "They Don't Match": "No coinciden", + "@They Don't Match": { + "type": "text", + "placeholders": {} + }, + "They Match": "Coinciden", + "@They Match": { + "type": "text", + "placeholders": {} + }, + "This room has been archived.": "Esta sala ha sido archivada.", + "@This room has been archived.": { + "type": "text", + "placeholders": {} + }, + "Thursday": "Jueves", + "@Thursday": { + "type": "text", + "placeholders": {} + }, + "timeOfDay": "{hours24}:{minutes}", + "@timeOfDay": { + "type": "text", + "placeholders": { + "hours12": {}, + "hours24": {}, + "minutes": {}, + "suffix": {} + } + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "text", + "placeholders": {} + }, + "Try to send again": "Intentar enviar nuevamente", + "@Try to send again": { + "type": "text", + "placeholders": {} + }, + "Tuesday": "Martes", + "@Tuesday": { + "type": "text", + "placeholders": {} + }, + "unbannedUser": "{username} admitió a {targetName} nuevamente", + "@unbannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Unblock Device": "Desbloquear dispositivo", + "@Unblock Device": { + "type": "text", + "placeholders": {} + }, + "Unmute chat": "Dejar de silenciar el chat", + "@Unmute chat": { + "type": "text", + "placeholders": {} + }, + "Unknown device": "Dispositivo desconocido", + "@Unknown device": { + "type": "text", + "placeholders": {} + }, + "Unknown encryption algorithm": "Algoritmo de cifrado desconocido", + "@Unknown encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "unknownSessionVerify": "Sesión desconocida, por favor verifíquela", + "@unknownSessionVerify": { + "type": "text", + "placeholders": {} + }, + "unknownEvent": "Evento desconocido '{type}'", + "@unknownEvent": { + "type": "text", + "placeholders": { + "type": {} + } + }, + "unreadChats": "{unreadCount} chats no leídos", + "@unreadChats": { + "type": "text", + "placeholders": { + "unreadCount": {} + } + }, + "unreadMessages": "{unreadEvents} mensajes no leídos", + "@unreadMessages": { + "type": "text", + "placeholders": { + "unreadEvents": {} + } + }, + "unreadMessagesInChats": "{unreadEvents} mensajes no leídos en {unreadChats} chats", + "@unreadMessagesInChats": { + "type": "text", + "placeholders": { + "unreadEvents": {}, + "unreadChats": {} + } + }, + "userAndOthersAreTyping": "{username} y {count} más están escribiendo...", + "@userAndOthersAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "userAndUserAreTyping": "{username} y {username2} están escribiendo...", + "@userAndUserAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "Username": "Nombre de usuario", + "@Username": { + "type": "text", + "placeholders": {} + }, + "userIsTyping": "{username} está escribiendo...", + "@userIsTyping": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "userSentUnknownEvent": "{username} envió un evento {type}", + "@userSentUnknownEvent": { + "type": "text", + "placeholders": { + "username": {}, + "type": {} + } + }, + "Verify": "Verificar", + "@Verify": { + "type": "text", + "placeholders": {} + }, + "verifyManual": "Verificar manualmente", + "@verifyManual": { + "type": "text", + "placeholders": {} + }, + "verifiedSession": "¡Sesión verificada exitosamente!", + "@verifiedSession": { + "type": "text", + "placeholders": {} + }, + "verifyStart": "Comenzar verificación", + "@verifyStart": { + "type": "text", + "placeholders": {} + }, + "verifySuccess": "¡Has verificado exitosamente!", + "@verifySuccess": { + "type": "text", + "placeholders": {} + }, + "verifyTitle": "Verificando la otra cuenta", + "@verifyTitle": { + "type": "text", + "placeholders": {} + }, + "Verify User": "Verificar usuario", + "@Verify User": { + "type": "text", + "placeholders": {} + }, + "Video call": "Video llamada", + "@Video call": { + "type": "text", + "placeholders": {} + }, + "Visible for all participants": "Visible para todos los participantes", + "@Visible for all participants": { + "type": "text", + "placeholders": {} + }, + "Visible for everyone": "Visible para todo el mundo", + "@Visible for everyone": { + "type": "text", + "placeholders": {} + }, + "Visibility of the chat history": "Visibilidad del historial del chat", + "@Visibility of the chat history": { + "type": "text", + "placeholders": {} + }, + "Voice message": "Mensaje de voz", + "@Voice message": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "Esperando a que el socio acepte la solicitud...", + "@waitingPartnerAcceptRequest": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerEmoji": "Esperando a que el socio acepte los emojis...", + "@waitingPartnerEmoji": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerNumbers": "Esperando a que el socio acepte los números...", + "@waitingPartnerNumbers": { + "type": "text", + "placeholders": {} + }, + "Wallpaper": "Fondo de pantalla", + "@Wallpaper": { + "type": "text", + "placeholders": {} + }, + "End to end encryption is currently in Beta! Use at your own risk!": "¡El cifrado de extremo a extremo está actualmente en período de prueba! ¡Úselo bajo su propio riesgo!", + "@End to end encryption is currently in Beta! Use at your own risk!": { + "type": "text", + "placeholders": {} + }, + "Wednesday": "Miércoles", + "@Wednesday": { + "type": "text", + "placeholders": {} + }, + "Welcome to the cutest instant messenger in the matrix network.": "Bienvenido al mensajero instantáneo más tierno de la red Matrix.", + "@Welcome to the cutest instant messenger in the matrix network.": { + "type": "text", + "placeholders": {} + }, + "Who is allowed to join this group": "Quién tiene permitido unirse al grupo", + "@Who is allowed to join this group": { + "type": "text", + "placeholders": {} + }, + "Write a message...": "Escribe un mensaje...", + "@Write a message...": { + "type": "text", + "placeholders": {} + }, + "Yes": "Sí", + "@Yes": { + "type": "text", + "placeholders": {} + }, + "You": "Tú", + "@You": { + "type": "text", + "placeholders": {} + }, + "You are invited to this chat": "Estás invitado a este chat", + "@You are invited to this chat": { + "type": "text", + "placeholders": {} + }, + "You are no longer participating in this chat": "Ya no estás participando en este chat", + "@You are no longer participating in this chat": { + "type": "text", + "placeholders": {} + }, + "You cannot invite yourself": "No puedes invitarte a tí mismo", + "@You cannot invite yourself": { + "type": "text", + "placeholders": {} + }, + "You have been banned from this chat": "Has sido vetado de este chat", + "@You have been banned from this chat": { + "type": "text", + "placeholders": {} + }, + "Your own username": "Tu nombre de usuario", + "@Your own username": { + "type": "text", + "placeholders": {} + } +} diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 138bd1f..1f6af57 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -1,6 +1,6 @@ { "@@last_modified": "2020-05-15T22:28:40", - "About": "About", + "About": "À propos", "@About": { "type": "text", "placeholders": {} @@ -12,7 +12,7 @@ "username": {} } }, - "Account": "Account", + "Account": "Compte", "@Account": { "type": "text", "placeholders": {} @@ -89,7 +89,7 @@ "type": "text", "placeholders": {} }, - "Banned": "Banned", + "Banned": "Banni", "@Banned": { "type": "text", "placeholders": {} @@ -164,7 +164,7 @@ "username": {} } }, - "changedTheGuestAccessRulesTo": "{username} a changé les règles d'accès à la discussion pour les invités en : {rules}", + "changedTheGuestAccessRulesTo": "{username} a changé les règles d'accès à la discussion pour les invités en : {rules}", "@changedTheGuestAccessRulesTo": { "type": "text", "placeholders": { @@ -354,8 +354,8 @@ "type": "text", "placeholders": {} }, - "Currenlty active": "Actif en ce moment", - "@Currenlty active": { + "Currently active": "Actif en ce moment", + "@Currently active": { "type": "text", "placeholders": {} }, @@ -632,7 +632,7 @@ "type": "text", "placeholders": {} }, - "is typing...": "is typing...", + "is typing...": "est en train d'écrire...", "@is typing...": { "type": "text", "placeholders": {} @@ -670,17 +670,17 @@ "type": "text", "placeholders": {} }, - "Leave": "Leave", + "Leave": "Partir", "@Leave": { "type": "text", "placeholders": {} }, - "Left the chat": "Discussion quittée", + "Left the chat": "A quitté la discussion", "@Left the chat": { "type": "text", "placeholders": {} }, - "Logout": "Logout", + "Logout": "Se déconnecter", "@Logout": { "type": "text", "placeholders": {} @@ -692,7 +692,7 @@ "username": {} } }, - "lastActiveAgo": "Vu pour la dernière fois: {localizedTimeShort}", + "lastActiveAgo": "Vu pour la dernière fois : {localizedTimeShort}", "@lastActiveAgo": { "type": "text", "placeholders": { @@ -1327,7 +1327,7 @@ "type": "text", "placeholders": {} }, - "End to end encryption is currently in Beta! Use at your own risk!": "Le chiffrement de bout en bout est actuellement en beta ! Utilisez cette fonctionnalité à vos propres risques !!", + "End to end encryption is currently in Beta! Use at your own risk!": "Le chiffrement de bout en bout est actuellement en béta ! Utilisez cette fonctionnalité à vos propres risques !", "@End to end encryption is currently in Beta! Use at your own risk!": { "type": "text", "placeholders": {} @@ -1386,5 +1386,207 @@ "@Your own username": { "type": "text", "placeholders": {} + }, + "waitingPartnerNumbers": "En attente de l'acceptation des nombres par le partenaire...", + "@waitingPartnerNumbers": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerEmoji": "En attente de l'acceptation de l'émoji par le partenaire...", + "@waitingPartnerEmoji": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "En attente de la vérification de la demande par le partenaire...", + "@waitingPartnerAcceptRequest": { + "type": "text", + "placeholders": {} + }, + "Verify User": "Vérifier l'utilisateur/trice", + "@Verify User": { + "type": "text", + "placeholders": {} + }, + "verifyTitle": "Vérification de l'autre compte", + "@verifyTitle": { + "type": "text", + "placeholders": {} + }, + "verifySuccess": "Vous avez vérifié avec succès !", + "@verifySuccess": { + "type": "text", + "placeholders": {} + }, + "verifyStart": "Commencer la vérification", + "@verifyStart": { + "type": "text", + "placeholders": {} + }, + "verifiedSession": "Session vérifiée avec succès !", + "@verifiedSession": { + "type": "text", + "placeholders": {} + }, + "verifyManual": "Vérifier manuellement", + "@verifyManual": { + "type": "text", + "placeholders": {} + }, + "unknownSessionVerify": "Session inconnue, veuillez vérifier", + "@unknownSessionVerify": { + "type": "text", + "placeholders": {} + }, + "Unblock Device": "Débloquer l'appareil", + "@Unblock Device": { + "type": "text", + "placeholders": {} + }, + "They Match": "Elles correspondent", + "@They Match": { + "type": "text", + "placeholders": {} + }, + "They Don't Match": "Elles ne correspondent pas", + "@They Don't Match": { + "type": "text", + "placeholders": {} + }, + "Submit": "Soumettre", + "@Submit": { + "type": "text", + "placeholders": {} + }, + "Skip": "Ignorer", + "@Skip": { + "type": "text", + "placeholders": {} + }, + "sessionVerified": "La session est vérifiée", + "@sessionVerified": { + "type": "text", + "placeholders": {} + }, + "Room has been upgraded": "Le salon a été mis à niveau", + "@Room has been upgraded": { + "type": "text", + "placeholders": {} + }, + "Reject": "Refuser", + "@Reject": { + "type": "text", + "placeholders": {} + }, + "passphraseOrKey": "Phrase de passe ou clé de récupération", + "@passphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "La sauvegarde en ligne des clés est activée", + "@onlineKeyBackupEnabled": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupDisabled": "La sauvegarde en ligne des clés est désactivée", + "@onlineKeyBackupDisabled": { + "type": "text", + "placeholders": {} + }, + "noMegolmBootstrap": "Fluffychat ne prend pas actuellement en charge l'activation de la sauvegarde des clés en ligne. Veuillez l'activer à partir de Element.", + "@noMegolmBootstrap": { + "type": "text", + "placeholders": {} + }, + "noCrossSignBootstrap": "Fluffychat ne permet pas actuellement d'activer la signature croisée. Veuillez l'activer à partir de Element.", + "@noCrossSignBootstrap": { + "type": "text", + "placeholders": {} + }, + "newVerificationRequest": "Nouvelle demande de vérification !", + "@newVerificationRequest": { + "type": "text", + "placeholders": {} + }, + "keysMissing": "Les clés sont manquantes", + "@keysMissing": { + "type": "text", + "placeholders": {} + }, + "keysCached": "Les clés sont mises en cache", + "@keysCached": { + "type": "text", + "placeholders": {} + }, + "isDeviceKeyCorrect": "La clé de l'appareil ci-dessous est-elle correcte ?", + "@isDeviceKeyCorrect": { + "type": "text", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Phrase de passe ou clé de récupération incorrecte", + "@incorrectPassphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Encryption": "Chiffrement", + "@Encryption": { + "type": "text", + "placeholders": {} + }, + "crossSigningEnabled": "La signature croisée est activée", + "@crossSigningEnabled": { + "type": "text", + "placeholders": {} + }, + "crossSigningDisabled": "La signature croisée est désactivée", + "@crossSigningDisabled": { + "type": "text", + "placeholders": {} + }, + "compareNumbersMatch": "Comparez et assurez-vous que les chiffres suivants correspondent à ceux de l'autre appareil :", + "@compareNumbersMatch": { + "type": "text", + "placeholders": {} + }, + "compareEmojiMatch": "Comparez et assurez-vous que les emojis suivants correspondent à ceux de l'autre appareil :", + "@compareEmojiMatch": { + "type": "text", + "placeholders": {} + }, + "cachedKeys": "Clés mises en cache avec succès !", + "@cachedKeys": { + "type": "text", + "placeholders": {} + }, + "Block Device": "Bloquer l'appareil", + "@Block Device": { + "type": "text", + "placeholders": {} + }, + "askVerificationRequest": "Accepter cette demande de vérification de {username} ?", + "@askVerificationRequest": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "askSSSSVerify": "Veuillez saisir votre phrase de passe stockée de manière sécurisée ou votre clé de récupération pour vérifier votre session.", + "@askSSSSVerify": { + "type": "text", + "placeholders": {} + }, + "askSSSSSign": "Pour pouvoir faire signer l'autre personne, veuillez entrer votre phrase de passe stockée de manière sécurisée ou votre clé de récupération.", + "@askSSSSSign": { + "type": "text", + "placeholders": {} + }, + "askSSSSCache": "Veuillez saisir votre phrase de passe stockée de manière sécurisée ou votre clé de récupération pour mettre les clés en cache.", + "@askSSSSCache": { + "type": "text", + "placeholders": {} + }, + "Accept": "Accepter", + "@Accept": { + "type": "text", + "placeholders": {} } } diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb new file mode 100644 index 0000000..05f881d --- /dev/null +++ b/lib/l10n/intl_gl.arb @@ -0,0 +1,1592 @@ +{ + "@@last_modified": "2020-06-25T16:02:16.297192", + "About": "Acerca de", + "@About": { + "type": "text", + "placeholders": {} + }, + "Accept": "Aceptar", + "@Accept": { + "type": "text", + "placeholders": {} + }, + "acceptedTheInvitation": "{username} aceptou o convite", + "@acceptedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Account": "Conta", + "@Account": { + "type": "text", + "placeholders": {} + }, + "Account informations": "Información da conta", + "@Account informations": { + "type": "text", + "placeholders": {} + }, + "activatedEndToEndEncryption": "{username} activou o cifrado extremo-a-extremo", + "@activatedEndToEndEncryption": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Add a group description": "Engade a descrición do grupo", + "@Add a group description": { + "type": "text", + "placeholders": {} + }, + "Admin": "Admin", + "@Admin": { + "type": "text", + "placeholders": {} + }, + "alias": "alias", + "@alias": { + "type": "text", + "placeholders": {} + }, + "Already have an account?": "¿xa tes unha conta?", + "@Already have an account?": { + "type": "text", + "placeholders": {} + }, + "Anyone can join": "Calquera pode unirse", + "@Anyone can join": { + "type": "text", + "placeholders": {} + }, + "Archive": "Arquivo", + "@Archive": { + "type": "text", + "placeholders": {} + }, + "Archived Room": "Sala arquivada", + "@Archived Room": { + "type": "text", + "placeholders": {} + }, + "Are guest users allowed to join": "Teñen permitido as convidadas o acceso", + "@Are guest users allowed to join": { + "type": "text", + "placeholders": {} + }, + "Are you sure?": "¿estás certo?", + "@Are you sure?": { + "type": "text", + "placeholders": {} + }, + "askSSSSCache": "Escribe a frase de paso de seguridade ou chave de recuperación para almacenar as chaves.", + "@askSSSSCache": { + "type": "text", + "placeholders": {} + }, + "askSSSSSign": "Para poder conectar a outra persoa, escribe a túa frase de paso ou chave de recuperación.", + "@askSSSSSign": { + "type": "text", + "placeholders": {} + }, + "askSSSSVerify": "Escribe frase de paso de almacenaxe segura ou chave de recuperación para verificar a túa sesión.", + "@askSSSSVerify": { + "type": "text", + "placeholders": {} + }, + "askVerificationRequest": "¿Aceptar a solicitude de verificación de {username}?", + "@askVerificationRequest": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Authentication": "Autenticación", + "@Authentication": { + "type": "text", + "placeholders": {} + }, + "Avatar has been changed": "O avatar cambiou", + "@Avatar has been changed": { + "type": "text", + "placeholders": {} + }, + "Ban from chat": "Expulsar da conversa", + "@Ban from chat": { + "type": "text", + "placeholders": {} + }, + "Banned": "Vetada", + "@Banned": { + "type": "text", + "placeholders": {} + }, + "bannedUser": "{username} vetou a {targetName}", + "@bannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Block Device": "Bloquear dispositivo", + "@Block Device": { + "type": "text", + "placeholders": {} + }, + "byDefaultYouWillBeConnectedTo": "Por omisión vas conectar con {homeserver}", + "@byDefaultYouWillBeConnectedTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "cachedKeys": "Almacenaches as chaves correctamente!", + "@cachedKeys": { + "type": "text", + "placeholders": {} + }, + "Cancel": "Cancelar", + "@Cancel": { + "type": "text", + "placeholders": {} + }, + "changedTheChatAvatar": "{username} cambiou o avatar do chat", + "@changedTheChatAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheChatNameTo": "{username} mudou o nome da conversa a: '{chatname}'", + "@changedTheChatNameTo": { + "type": "text", + "placeholders": { + "username": {}, + "chatname": {} + } + }, + "changedTheChatDescriptionTo": "{username} mudou a descrición da conversa a: '{description}'", + "@changedTheChatDescriptionTo": { + "type": "text", + "placeholders": { + "username": {}, + "description": {} + } + }, + "changedTheChatPermissions": "{username} mudou os permisos da conversa", + "@changedTheChatPermissions": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheDisplaynameTo": "{username} cambiou o nome público a: {displayname}", + "@changedTheDisplaynameTo": { + "type": "text", + "placeholders": { + "username": {}, + "displayname": {} + } + }, + "Change the homeserver": "Mudar de servidor de inicio", + "@Change the homeserver": { + "type": "text", + "placeholders": {} + }, + "changedTheGuestAccessRules": "{username} mudou as regras de acceso para convidadas", + "@changedTheGuestAccessRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheGuestAccessRulesTo": "{username} mudou as regras de acceso para convidadas a: {rules}", + "@changedTheGuestAccessRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheHistoryVisibility": "{username} mudou a visibilidade do historial", + "@changedTheHistoryVisibility": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheHistoryVisibilityTo": "{username} mudou a visibilidade do historial a: {rules}", + "@changedTheHistoryVisibilityTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheJoinRules": "{username} mudou as regras de acceso", + "@changedTheJoinRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheJoinRulesTo": "{username} mudou as regras de acceso a: {joinRules}", + "@changedTheJoinRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "joinRules": {} + } + }, + "changedTheProfileAvatar": "{username} mudou o avatar do perfil", + "@changedTheProfileAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomAliases": "{username} mudou os alias da sala", + "@changedTheRoomAliases": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomInvitationLink": "{username} mudou a ligazón de convite", + "@changedTheRoomInvitationLink": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Changelog": "Rexistro de cambios", + "@Changelog": { + "type": "text", + "placeholders": {} + }, + "Change the name of the group": "Mudar o nome do grupo", + "@Change the name of the group": { + "type": "text", + "placeholders": {} + }, + "Change wallpaper": "Mudar fondo do chat", + "@Change wallpaper": { + "type": "text", + "placeholders": {} + }, + "Change the server": "Mudar de servidor", + "@Change the server": { + "type": "text", + "placeholders": {} + }, + "The encryption has been corrupted": "O cifrado está corrompido", + "@The encryption has been corrupted": { + "type": "text", + "placeholders": {} + }, + "Chat": "Chat", + "@Chat": { + "type": "text", + "placeholders": {} + }, + "Chat details": "Detalles do chat", + "@Chat details": { + "type": "text", + "placeholders": {} + }, + "Choose a strong password": "Escolle un contrasinal forte", + "@Choose a strong password": { + "type": "text", + "placeholders": {} + }, + "Choose a username": "Escolle un nome de usuaria", + "@Choose a username": { + "type": "text", + "placeholders": {} + }, + "Close": "Pechar", + "@Close": { + "type": "text", + "placeholders": {} + }, + "compareEmojiMatch": "Comparar e asegurarse de que estas emoticonas concordan no outro dispositivo:", + "@compareEmojiMatch": { + "type": "text", + "placeholders": {} + }, + "compareNumbersMatch": "Compara e asegúrate de que os seguintes números concordan cos do outro dispositivo:", + "@compareNumbersMatch": { + "type": "text", + "placeholders": {} + }, + "Confirm": "Confirmar", + "@Confirm": { + "type": "text", + "placeholders": {} + }, + "Connect": "Conectar", + "@Connect": { + "type": "text", + "placeholders": {} + }, + "Connection attempt failed": "Fallou o intento de conexión", + "@Connection attempt failed": { + "type": "text", + "placeholders": {} + }, + "Contact has been invited to the group": "O contacto foi convidado ó grupo", + "@Contact has been invited to the group": { + "type": "text", + "placeholders": {} + }, + "Content viewer": "Visor de contido", + "@Content viewer": { + "type": "text", + "placeholders": {} + }, + "Copied to clipboard": "Copiado ó portapapeis", + "@Copied to clipboard": { + "type": "text", + "placeholders": {} + }, + "Copy": "Copiar", + "@Copy": { + "type": "text", + "placeholders": {} + }, + "couldNotDecryptMessage": "Non se descifrou a mensaxe: {error}", + "@couldNotDecryptMessage": { + "type": "text", + "placeholders": { + "error": {} + } + }, + "Could not set avatar": "Non se estableceu o avatar", + "@Could not set avatar": { + "type": "text", + "placeholders": {} + }, + "Could not set displayname": "Non se estableceu o nome público", + "@Could not set displayname": { + "type": "text", + "placeholders": {} + }, + "countParticipants": "{count} participantes", + "@countParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Create": "Crear", + "@Create": { + "type": "text", + "placeholders": {} + }, + "Create account now": "Crear unha conta", + "@Create account now": { + "type": "text", + "placeholders": {} + }, + "createdTheChat": "{username} creou a conversa", + "@createdTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Create new group": "Crear novo grupo", + "@Create new group": { + "type": "text", + "placeholders": {} + }, + "crossSigningDisabled": "A Sinatura-Cruzada está desactivada", + "@crossSigningDisabled": { + "type": "text", + "placeholders": {} + }, + "crossSigningEnabled": "Sinatura-Cruzada activada", + "@crossSigningEnabled": { + "type": "text", + "placeholders": {} + }, + "Currently active": "Actualmente activo", + "@Currently active": { + "type": "text", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "text", + "placeholders": { + "date": {}, + "timeOfDay": {} + } + }, + "dateWithoutYear": "{day}-{month}", + "@dateWithoutYear": { + "type": "text", + "placeholders": { + "month": {}, + "day": {} + } + }, + "dateWithYear": "{day}-{month}-{year}", + "@dateWithYear": { + "type": "text", + "placeholders": { + "year": {}, + "month": {}, + "day": {} + } + }, + "Delete": "Eliminar", + "@Delete": { + "type": "text", + "placeholders": {} + }, + "Delete message": "Eliminar mensaxe", + "@Delete message": { + "type": "text", + "placeholders": {} + }, + "Deny": "Denegar", + "@Deny": { + "type": "text", + "placeholders": {} + }, + "Device": "Dispositivo", + "@Device": { + "type": "text", + "placeholders": {} + }, + "Devices": "Dispositivos", + "@Devices": { + "type": "text", + "placeholders": {} + }, + "Discard picture": "Desbotar imaxe", + "@Discard picture": { + "type": "text", + "placeholders": {} + }, + "Displayname has been changed": "O nome público mudou", + "@Displayname has been changed": { + "type": "text", + "placeholders": {} + }, + "Download file": "Descargar ficheiro", + "@Download file": { + "type": "text", + "placeholders": {} + }, + "Edit displayname": "Editar nome público", + "@Edit displayname": { + "type": "text", + "placeholders": {} + }, + "Emote Settings": "Axustes de Emote", + "@Emote Settings": { + "type": "text", + "placeholders": {} + }, + "Emote shortcode": "Atallo de Emote", + "@Emote shortcode": { + "type": "text", + "placeholders": {} + }, + "emoteWarnNeedToPick": "Escribe un atallo e asocialle unha imaxe!", + "@emoteWarnNeedToPick": { + "type": "text", + "placeholders": {} + }, + "emoteExists": "Xa existe ese emote!", + "@emoteExists": { + "type": "text", + "placeholders": {} + }, + "emoteInvalid": "Atallo do emote non é válido!", + "@emoteInvalid": { + "type": "text", + "placeholders": {} + }, + "Empty chat": "Chat baleiro", + "@Empty chat": { + "type": "text", + "placeholders": {} + }, + "You won't be able to disable the encryption anymore. Are you sure?": "Non poderás desactivar o cifrado posteriormente, ¿estás certo?", + "@You won't be able to disable the encryption anymore. Are you sure?": { + "type": "text", + "placeholders": {} + }, + "Encryption": "Cifrado", + "@Encryption": { + "type": "text", + "placeholders": {} + }, + "Encryption algorithm": "Algoritmo do cifrado", + "@Encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "Encryption is not enabled": "Cifrado desactivado", + "@Encryption is not enabled": { + "type": "text", + "placeholders": {} + }, + "End-to-end encryption settings": "Axustes do cifrado extremo-a-extremo", + "@End-to-end encryption settings": { + "type": "text", + "placeholders": {} + }, + "Enter a group name": "Escribe un nome para o grupo", + "@Enter a group name": { + "type": "text", + "placeholders": {} + }, + "Enter a username": "Escribe un nome de usuaria", + "@Enter a username": { + "type": "text", + "placeholders": {} + }, + "Enter your homeserver": "Escribe o teu servidor de inicio", + "@Enter your homeserver": { + "type": "text", + "placeholders": {} + }, + "File name": "Nome do ficheiro", + "@File name": { + "type": "text", + "placeholders": {} + }, + "File size": "Tamaño do ficheiro", + "@File size": { + "type": "text", + "placeholders": {} + }, + "FluffyChat": "FluffyChat", + "@FluffyChat": { + "type": "text", + "placeholders": {} + }, + "Forward": "Reenviar", + "@Forward": { + "type": "text", + "placeholders": {} + }, + "Friday": "Venres", + "@Friday": { + "type": "text", + "placeholders": {} + }, + "From joining": "Desde que se una", + "@From joining": { + "type": "text", + "placeholders": {} + }, + "From the invitation": "Desde o convite", + "@From the invitation": { + "type": "text", + "placeholders": {} + }, + "Group": "Grupo", + "@Group": { + "type": "text", + "placeholders": {} + }, + "Group description": "Descrición do grupo", + "@Group description": { + "type": "text", + "placeholders": {} + }, + "Group description has been changed": "Mudou a descrición do grupo", + "@Group description has been changed": { + "type": "text", + "placeholders": {} + }, + "Group is public": "O grupo é público", + "@Group is public": { + "type": "text", + "placeholders": {} + }, + "groupWith": "Grupo con {displayname}", + "@groupWith": { + "type": "text", + "placeholders": { + "displayname": {} + } + }, + "Guests are forbidden": "Non se permiten convidadas", + "@Guests are forbidden": { + "type": "text", + "placeholders": {} + }, + "Guests can join": "Permítense convidadas", + "@Guests can join": { + "type": "text", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{username} retirou o convite para {targetName}", + "@hasWithdrawnTheInvitationFor": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Help": "Axuda", + "@Help": { + "type": "text", + "placeholders": {} + }, + "Homeserver is not compatible": "Servidor de inicio non compatible", + "@Homeserver is not compatible": { + "type": "text", + "placeholders": {} + }, + "ID": "ID", + "@ID": { + "type": "text", + "placeholders": {} + }, + "Identity": "Identidade", + "@Identity": { + "type": "text", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Frase de paso ou chave de recuperación incorrecta", + "@incorrectPassphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Invite contact": "Convidar contacto", + "@Invite contact": { + "type": "text", + "placeholders": {} + }, + "inviteContactToGroup": "Convidar contacto a {groupName}", + "@inviteContactToGroup": { + "type": "text", + "placeholders": { + "groupName": {} + } + }, + "Invited": "Convidado", + "@Invited": { + "type": "text", + "placeholders": {} + }, + "inviteText": "{username} convidoute a FluffyChat.\n1. instala FluffyChat: http://fluffy.chat \n2. Rexístrate ou conéctate\n3. Abre a ligazón do convite: {link}", + "@inviteText": { + "type": "text", + "placeholders": { + "username": {}, + "link": {} + } + }, + "invitedUser": "{username} convidou a {targetName}", + "@invitedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Invited users only": "Só usuarias convidadas", + "@Invited users only": { + "type": "text", + "placeholders": {} + }, + "isDeviceKeyCorrect": "¿É correcta esta chave do dispositivo?", + "@isDeviceKeyCorrect": { + "type": "text", + "placeholders": {} + }, + "is typing...": "está escribindo...", + "@is typing...": { + "type": "text", + "placeholders": {} + }, + "Edit Jitsi instance": "Editar instancia Jitsi", + "@Edit Jitsi instance": { + "type": "text", + "placeholders": {} + }, + "joinedTheChat": "{username} uníuse ó chat", + "@joinedTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "keysCached": "Chaves almacenadas", + "@keysCached": { + "type": "text", + "placeholders": {} + }, + "keysMissing": "Faltan as chaves", + "@keysMissing": { + "type": "text", + "placeholders": {} + }, + "kicked": "{username} expulsou a {targetName}", + "@kicked": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "kickedAndBanned": "{username} expulsou e vetou a {targetName}", + "@kickedAndBanned": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Kick from chat": "Expulsar da conversa", + "@Kick from chat": { + "type": "text", + "placeholders": {} + }, + "Leave": "Saír", + "@Leave": { + "type": "text", + "placeholders": {} + }, + "Left the chat": "Deixar a conversa", + "@Left the chat": { + "type": "text", + "placeholders": {} + }, + "Logout": "Desconectar", + "@Logout": { + "type": "text", + "placeholders": {} + }, + "userLeftTheChat": "{username} deixou a conversa", + "@userLeftTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "lastActiveAgo": "Última actividade: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "text", + "placeholders": { + "localizedTimeShort": {} + } + }, + "Last seen IP": "Última IP vista", + "@Last seen IP": { + "type": "text", + "placeholders": {} + }, + "License": "Licenza", + "@License": { + "type": "text", + "placeholders": {} + }, + "Loading... Please wait": "Cargando... Agarda", + "@Loading... Please wait": { + "type": "text", + "placeholders": {} + }, + "Load more...": "Cargar máis...", + "@Load more...": { + "type": "text", + "placeholders": {} + }, + "loadCountMoreParticipants": "Cargar {count} participantes máis", + "@loadCountMoreParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Login": "Conexión", + "@Login": { + "type": "text", + "placeholders": {} + }, + "logInTo": "Conectar con {homeserver}", + "@logInTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "Make a moderator": "Converter en moderadora", + "@Make a moderator": { + "type": "text", + "placeholders": {} + }, + "Make an admin": "Converter en administradora", + "@Make an admin": { + "type": "text", + "placeholders": {} + }, + "Make sure the identifier is valid": "Asegúrate de que o identificador é válido", + "@Make sure the identifier is valid": { + "type": "text", + "placeholders": {} + }, + "Message will be removed for all participants": "A mensaxe eliminarase para todas as participantes", + "@Message will be removed for all participants": { + "type": "text", + "placeholders": {} + }, + "Moderator": "Moderadora", + "@Moderator": { + "type": "text", + "placeholders": {} + }, + "Monday": "Luns", + "@Monday": { + "type": "text", + "placeholders": {} + }, + "Mute chat": "Acalar conversa", + "@Mute chat": { + "type": "text", + "placeholders": {} + }, + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": "Ten en conta que polo de agora precisas Pantalaimon para o cifrado extremo-a-extremo.", + "@Please be aware that you need Pantalaimon to use end-to-end encryption for now.": { + "type": "text", + "placeholders": {} + }, + "New message in FluffyChat": "Nova mensaxe en FluffyChat", + "@New message in FluffyChat": { + "type": "text", + "placeholders": {} + }, + "New private chat": "Nova conversa privada", + "@New private chat": { + "type": "text", + "placeholders": {} + }, + "newVerificationRequest": "Nova solicitude de verificación!", + "@newVerificationRequest": { + "type": "text", + "placeholders": {} + }, + "noCrossSignBootstrap": "Polo momento FluffyChat non soporta a activación da Sinatura-Cruzada. Actívaa desde Element.", + "@noCrossSignBootstrap": { + "type": "text", + "placeholders": {} + }, + "noMegolmBootstrap": "Actualmente Fluffychat non soporta a activación da Copia En Liña das Chaves. Actívaa desde Element.", + "@noMegolmBootstrap": { + "type": "text", + "placeholders": {} + }, + "It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": "Semella que non tes os servizos de google no teu dispositivo. Ben feito! a túa privacidade agradécecho! Para recibir notificacións push en FluffyChat recomendamos usar microG: https://microg.org/", + "@It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": { + "type": "text", + "placeholders": {} + }, + "None": "Ningún", + "@None": { + "type": "text", + "placeholders": {} + }, + "No emotes found. 😕": "Non hai emotes. 😕", + "@No emotes found. 😕": { + "type": "text", + "placeholders": {} + }, + "No permission": "Sen permiso", + "@No permission": { + "type": "text", + "placeholders": {} + }, + "No rooms found...": "Non se atoparon salas...", + "@No rooms found...": { + "type": "text", + "placeholders": {} + }, + "Not supported in web": "Non soportado na web", + "@Not supported in web": { + "type": "text", + "placeholders": {} + }, + "numberSelected": "{number} seleccionados", + "@numberSelected": { + "type": "text", + "placeholders": { + "number": {} + } + }, + "ok": "OK", + "@ok": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupDisabled": "Copia de apoio En liña das Chaves desactivada", + "@onlineKeyBackupDisabled": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "Copia de Apoio das Chaves activada", + "@onlineKeyBackupEnabled": { + "type": "text", + "placeholders": {} + }, + "Oops something went wrong...": "Ooooi, algo fallou...", + "@Oops something went wrong...": { + "type": "text", + "placeholders": {} + }, + "Open app to read messages": "Abrir a app e ler mensaxes", + "@Open app to read messages": { + "type": "text", + "placeholders": {} + }, + "Open camera": "Abrir cámara", + "@Open camera": { + "type": "text", + "placeholders": {} + }, + "(Optional) Group name": "(Optativo) Nome do grupo", + "@(Optional) Group name": { + "type": "text", + "placeholders": {} + }, + "Participating user devices": "Dispositivos das usuarias participantes", + "@Participating user devices": { + "type": "text", + "placeholders": {} + }, + "passphraseOrKey": "frase de paso ou chave de recuperación", + "@passphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Password": "Contrasinal", + "@Password": { + "type": "text", + "placeholders": {} + }, + "Pick image": "Escolle unha imaxe", + "@Pick image": { + "type": "text", + "placeholders": {} + }, + "play": "Reproducir {fileName}", + "@play": { + "type": "text", + "placeholders": { + "fileName": {} + } + }, + "Please choose a username": "Escolle un nome de usuaria", + "@Please choose a username": { + "type": "text", + "placeholders": {} + }, + "Please enter a matrix identifier": "Escribe un identificador matrix", + "@Please enter a matrix identifier": { + "type": "text", + "placeholders": {} + }, + "Please enter your password": "Escribe o teu contrasinal", + "@Please enter your password": { + "type": "text", + "placeholders": {} + }, + "Please enter your username": "Escribe o teu nome de usuaria", + "@Please enter your username": { + "type": "text", + "placeholders": {} + }, + "Public Rooms": "Salas públicas", + "@Public Rooms": { + "type": "text", + "placeholders": {} + }, + "Reject": "Rexeitar", + "@Reject": { + "type": "text", + "placeholders": {} + }, + "Rejoin": "Volta a unirte", + "@Rejoin": { + "type": "text", + "placeholders": {} + }, + "Render rich message content": "Mostrar contido enriquecido da mensaxe", + "@Render rich message content": { + "type": "text", + "placeholders": {} + }, + "Recording": "Gravando", + "@Recording": { + "type": "text", + "placeholders": {} + }, + "redactedAnEvent": "{username} publicou un evento", + "@redactedAnEvent": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "rejectedTheInvitation": "{username} rexeitou o convite", + "@rejectedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove all other devices": "Quitar todos os outros dispositivos", + "@Remove all other devices": { + "type": "text", + "placeholders": {} + }, + "removedBy": "Eliminado por {username}", + "@removedBy": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove device": "Quitar dispositivo", + "@Remove device": { + "type": "text", + "placeholders": {} + }, + "Remove exile": "Quitar o veto", + "@Remove exile": { + "type": "text", + "placeholders": {} + }, + "Revoke all permissions": "Revogar tódolos permisos", + "@Revoke all permissions": { + "type": "text", + "placeholders": {} + }, + "Remove": "Eliminar", + "@Remove": { + "type": "text", + "placeholders": {} + }, + "Remove message": "Eliminar mensaxe", + "@Remove message": { + "type": "text", + "placeholders": {} + }, + "Reply": "Responder", + "@Reply": { + "type": "text", + "placeholders": {} + }, + "Request permission": "Solicitar permiso", + "@Request permission": { + "type": "text", + "placeholders": {} + }, + "Request to read older messages": "Solicitar ler mensaxes antigas", + "@Request to read older messages": { + "type": "text", + "placeholders": {} + }, + "Room has been upgraded": "A sala foi actualizada", + "@Room has been upgraded": { + "type": "text", + "placeholders": {} + }, + "Saturday": "Sábado", + "@Saturday": { + "type": "text", + "placeholders": {} + }, + "Share": "Compartir", + "@Share": { + "type": "text", + "placeholders": {} + }, + "sharedTheLocation": "{username} compartiu a localización", + "@sharedTheLocation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Search for a chat": "Buscar un chat", + "@Search for a chat": { + "type": "text", + "placeholders": {} + }, + "Seen a long time ago": "Hai moito que non aparece", + "@Seen a long time ago": { + "type": "text", + "placeholders": {} + }, + "seenByUser": "Visto por {username}", + "@seenByUser": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "seenByUserAndUser": "Visto por {username} e {username2}", + "@seenByUserAndUser": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "seenByUserAndCountOthers": "Visto por {username} e {count} outras", + "@seenByUserAndCountOthers": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "Send": "Enviar", + "@Send": { + "type": "text", + "placeholders": {} + }, + "Send a message": "Enviar unha mensaxe", + "@Send a message": { + "type": "text", + "placeholders": {} + }, + "Send file": "Enviar ficheiro", + "@Send file": { + "type": "text", + "placeholders": {} + }, + "Send image": "Enviar imaxe", + "@Send image": { + "type": "text", + "placeholders": {} + }, + "sentAFile": "{username} enviou un ficheiro", + "@sentAFile": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAnAudio": "{username} enviou un audio", + "@sentAnAudio": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAPicture": "{username} enviou unha imaxe", + "@sentAPicture": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentASticker": "{username} enviou un adhesivo", + "@sentASticker": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAVideo": "{username} enviou un vídeo", + "@sentAVideo": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sessionVerified": "Sesión verificada", + "@sessionVerified": { + "type": "text", + "placeholders": {} + }, + "Set a profile picture": "Establecer foto do perfil", + "@Set a profile picture": { + "type": "text", + "placeholders": {} + }, + "Set group description": "Establecer descrición do grupo", + "@Set group description": { + "type": "text", + "placeholders": {} + }, + "Set invitation link": "Establecer ligazón do convite", + "@Set invitation link": { + "type": "text", + "placeholders": {} + }, + "Set status": "Establecer estado", + "@Set status": { + "type": "text", + "placeholders": {} + }, + "Settings": "Axustes", + "@Settings": { + "type": "text", + "placeholders": {} + }, + "Sign up": "Rexistro", + "@Sign up": { + "type": "text", + "placeholders": {} + }, + "Skip": "Saltar", + "@Skip": { + "type": "text", + "placeholders": {} + }, + "Change your style": "Cambiar o estilo", + "@Change your style": { + "type": "text", + "placeholders": {} + }, + "System": "Sistema", + "@System": { + "type": "text", + "placeholders": {} + }, + "How are you today?": "¿Que tal estás hoxe?", + "@How are you today?": { + "type": "text", + "placeholders": {} + }, + "Light": "Claro", + "@Light": { + "type": "text", + "placeholders": {} + }, + "Dark": "Escuro", + "@Dark": { + "type": "text", + "placeholders": {} + }, + "Use Amoled compatible colors?": "¿Usar cores compatibles con Amoled?", + "@Use Amoled compatible colors?": { + "type": "text", + "placeholders": {} + }, + "Source code": "Código fonte", + "@Source code": { + "type": "text", + "placeholders": {} + }, + "Start your first chat :-)": "Abre a primeira conversa :-)", + "@Start your first chat :-)": { + "type": "text", + "placeholders": {} + }, + "Submit": "Enviar", + "@Submit": { + "type": "text", + "placeholders": {} + }, + "Sunday": "Domingo", + "@Sunday": { + "type": "text", + "placeholders": {} + }, + "Donate": "Doar", + "@Donate": { + "type": "text", + "placeholders": {} + }, + "Tap to show menu": "Toca para mostrar menú", + "@Tap to show menu": { + "type": "text", + "placeholders": {} + }, + "They Don't Match": "Non concordan", + "@They Don't Match": { + "type": "text", + "placeholders": {} + }, + "They Match": "Concordan", + "@They Match": { + "type": "text", + "placeholders": {} + }, + "This room has been archived.": "A sala foi arquivada.", + "@This room has been archived.": { + "type": "text", + "placeholders": {} + }, + "Thursday": "Xoves", + "@Thursday": { + "type": "text", + "placeholders": {} + }, + "timeOfDay": "{hours12}:{minutes} {suffix}", + "@timeOfDay": { + "type": "text", + "placeholders": { + "hours12": {}, + "hours24": {}, + "minutes": {}, + "suffix": {} + } + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "text", + "placeholders": {} + }, + "Try to send again": "Inténtao outra vez", + "@Try to send again": { + "type": "text", + "placeholders": {} + }, + "Tuesday": "Martes", + "@Tuesday": { + "type": "text", + "placeholders": {} + }, + "unbannedUser": "{username} retirou o veto a {targetName}", + "@unbannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Unblock Device": "Desbloquear dispositivo", + "@Unblock Device": { + "type": "text", + "placeholders": {} + }, + "Unmute chat": "Reactivar chat", + "@Unmute chat": { + "type": "text", + "placeholders": {} + }, + "Unknown device": "Dispositivo descoñecido", + "@Unknown device": { + "type": "text", + "placeholders": {} + }, + "Unknown encryption algorithm": "Algoritmo de cifrado descoñecido", + "@Unknown encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "unknownSessionVerify": "Sesión descoñecida, por favor verifícaa", + "@unknownSessionVerify": { + "type": "text", + "placeholders": {} + }, + "unknownEvent": "Evento descoñecido '{type}'", + "@unknownEvent": { + "type": "text", + "placeholders": { + "type": {} + } + }, + "unreadChats": "{unreadCount} chats non lidos", + "@unreadChats": { + "type": "text", + "placeholders": { + "unreadCount": {} + } + }, + "unreadMessages": "{unreadEvents} mensaxes non lidas", + "@unreadMessages": { + "type": "text", + "placeholders": { + "unreadEvents": {} + } + }, + "unreadMessagesInChats": "{unreadEvents} mensaxes non lidas en {unreadChats} conversas", + "@unreadMessagesInChats": { + "type": "text", + "placeholders": { + "unreadEvents": {}, + "unreadChats": {} + } + }, + "userAndOthersAreTyping": "{username} e {count} máis están escribindo...", + "@userAndOthersAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "userAndUserAreTyping": "{username} e {username2} están escribindo...", + "@userAndUserAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "Username": "Nome de usuaria", + "@Username": { + "type": "text", + "placeholders": {} + }, + "userIsTyping": "{username} está escribindo...", + "@userIsTyping": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "userSentUnknownEvent": "{username} enviou un evento {type]", + "@userSentUnknownEvent": { + "type": "text", + "placeholders": { + "username": {}, + "type": {} + } + }, + "Verify": "Verificar", + "@Verify": { + "type": "text", + "placeholders": {} + }, + "verifyManual": "Verificar manualmente", + "@verifyManual": { + "type": "text", + "placeholders": {} + }, + "verifiedSession": "Sesión verificada correctamente!", + "@verifiedSession": { + "type": "text", + "placeholders": {} + }, + "verifyStart": "Comezar verificación", + "@verifyStart": { + "type": "text", + "placeholders": {} + }, + "verifySuccess": "Verificaches correctamente!", + "@verifySuccess": { + "type": "text", + "placeholders": {} + }, + "verifyTitle": "Verificando a outra conta", + "@verifyTitle": { + "type": "text", + "placeholders": {} + }, + "Verify User": "Verificar usuaria", + "@Verify User": { + "type": "text", + "placeholders": {} + }, + "Video call": "Chamada de vídeo", + "@Video call": { + "type": "text", + "placeholders": {} + }, + "Visible for all participants": "Visible para todas as participantes", + "@Visible for all participants": { + "type": "text", + "placeholders": {} + }, + "Visible for everyone": "Visible para todas", + "@Visible for everyone": { + "type": "text", + "placeholders": {} + }, + "Visibility of the chat history": "Visibilidade do historial da conversa", + "@Visibility of the chat history": { + "type": "text", + "placeholders": {} + }, + "Voice message": "Mensaxe de voz", + "@Voice message": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "Agardando a que a outra parte acepte a solicitude...", + "@waitingPartnerAcceptRequest": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerEmoji": "Agardando a que a outra parte acepte as emoticonas...", + "@waitingPartnerEmoji": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerNumbers": "Agardando a que a outra parte acepte os números...", + "@waitingPartnerNumbers": { + "type": "text", + "placeholders": {} + }, + "Wallpaper": "Fondo da conversa", + "@Wallpaper": { + "type": "text", + "placeholders": {} + }, + "End to end encryption is currently in Beta! Use at your own risk!": "O cifrado extremo-a-extremo está en Beta! Úsao baixo a túa responsabilidade!", + "@End to end encryption is currently in Beta! Use at your own risk!": { + "type": "text", + "placeholders": {} + }, + "Wednesday": "Mércores", + "@Wednesday": { + "type": "text", + "placeholders": {} + }, + "Welcome to the cutest instant messenger in the matrix network.": "Benvida a mensaxería instantánea más cuquiña da rede matrix.", + "@Welcome to the cutest instant messenger in the matrix network.": { + "type": "text", + "placeholders": {} + }, + "Who is allowed to join this group": "Quen se pode unir a este grupo", + "@Who is allowed to join this group": { + "type": "text", + "placeholders": {} + }, + "Write a message...": "Escribe unha mensaxe...", + "@Write a message...": { + "type": "text", + "placeholders": {} + }, + "Yes": "Si", + "@Yes": { + "type": "text", + "placeholders": {} + }, + "You": "Ti", + "@You": { + "type": "text", + "placeholders": {} + }, + "You are invited to this chat": "Estás convidada a este chat", + "@You are invited to this chat": { + "type": "text", + "placeholders": {} + }, + "You are no longer participating in this chat": "Xa non participas desta conversa", + "@You are no longer participating in this chat": { + "type": "text", + "placeholders": {} + }, + "You cannot invite yourself": "Non podes autoconvidarte", + "@You cannot invite yourself": { + "type": "text", + "placeholders": {} + }, + "You have been banned from this chat": "Foches vetada nesta conversa", + "@You have been banned from this chat": { + "type": "text", + "placeholders": {} + }, + "Your own username": "O teu nome de usuaria", + "@Your own username": { + "type": "text", + "placeholders": {} + } +} diff --git a/lib/l10n/intl_hr.arb b/lib/l10n/intl_hr.arb new file mode 100644 index 0000000..e0f030d --- /dev/null +++ b/lib/l10n/intl_hr.arb @@ -0,0 +1,1592 @@ +{ + "@@last_modified": "2020-06-25T16:02:16.297192", + "About": "Informacije", + "@About": { + "type": "text", + "placeholders": {} + }, + "Accept": "Prihvati", + "@Accept": { + "type": "text", + "placeholders": {} + }, + "acceptedTheInvitation": "{username} je prihvatio/la poziv", + "@acceptedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Account": "Račun", + "@Account": { + "type": "text", + "placeholders": {} + }, + "Account informations": "Podaci računa", + "@Account informations": { + "type": "text", + "placeholders": {} + }, + "activatedEndToEndEncryption": "{username} je aktivirao/la obostrano šifriranje", + "@activatedEndToEndEncryption": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Add a group description": "Dodaj opis grupe", + "@Add a group description": { + "type": "text", + "placeholders": {} + }, + "Admin": "Administrator", + "@Admin": { + "type": "text", + "placeholders": {} + }, + "alias": "pseudonim", + "@alias": { + "type": "text", + "placeholders": {} + }, + "Already have an account?": "Već imaš račun?", + "@Already have an account?": { + "type": "text", + "placeholders": {} + }, + "Anyone can join": "Svatko se može pridružiti", + "@Anyone can join": { + "type": "text", + "placeholders": {} + }, + "Archive": "Arhiva", + "@Archive": { + "type": "text", + "placeholders": {} + }, + "Archived Room": "Arhivirana soba", + "@Archived Room": { + "type": "text", + "placeholders": {} + }, + "Are guest users allowed to join": "Smiju li se gosti pridružiti grupi", + "@Are guest users allowed to join": { + "type": "text", + "placeholders": {} + }, + "Are you sure?": "Sigurno?", + "@Are you sure?": { + "type": "text", + "placeholders": {} + }, + "askSSSSCache": "Upiši svoju sigurnosnu lozinku ili ključ za obnavljanje, kako bi se ključevi spremili u predmemoriju.", + "@askSSSSCache": { + "type": "text", + "placeholders": {} + }, + "askSSSSSign": "Za potpisivanje druge osobe, upiši svoju sigurnosnu lozinku ili ključ za obnavljanje.", + "@askSSSSSign": { + "type": "text", + "placeholders": {} + }, + "askSSSSVerify": "Za potvrđivanje tvoje sesije, upiši svoju sigurnosnu lozinku ili ključ za obnavljanje.", + "@askSSSSVerify": { + "type": "text", + "placeholders": {} + }, + "askVerificationRequest": "Prihvatiti ovaj zahtjev za potvrđivanje od {username}?", + "@askVerificationRequest": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Authentication": "Autentifikacija", + "@Authentication": { + "type": "text", + "placeholders": {} + }, + "Avatar has been changed": "Avatar je promijenjen", + "@Avatar has been changed": { + "type": "text", + "placeholders": {} + }, + "Ban from chat": "Isključi iz chata", + "@Ban from chat": { + "type": "text", + "placeholders": {} + }, + "Banned": "Isključen", + "@Banned": { + "type": "text", + "placeholders": {} + }, + "bannedUser": "{username} je isključio/la {targetName}", + "@bannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Block Device": "Blokiraj uređaj", + "@Block Device": { + "type": "text", + "placeholders": {} + }, + "byDefaultYouWillBeConnectedTo": "Standardno ćeš biti povezan/a s {homeserver}", + "@byDefaultYouWillBeConnectedTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "cachedKeys": "Uspješno međuspremljeni ključevi!", + "@cachedKeys": { + "type": "text", + "placeholders": {} + }, + "Cancel": "Odustani", + "@Cancel": { + "type": "text", + "placeholders": {} + }, + "changedTheChatAvatar": "{username} je promijenio/la avatar chata", + "@changedTheChatAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheChatNameTo": "{username} je promijenio/la ime chata u: „{chatname}”", + "@changedTheChatNameTo": { + "type": "text", + "placeholders": { + "username": {}, + "chatname": {} + } + }, + "changedTheChatDescriptionTo": "{username} je promijenio/la opis chata u: „{description}”", + "@changedTheChatDescriptionTo": { + "type": "text", + "placeholders": { + "username": {}, + "description": {} + } + }, + "changedTheChatPermissions": "{username} je promijenio/la dozvole chata", + "@changedTheChatPermissions": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheDisplaynameTo": "{username} je promijenio/la prikazano ime u: {displayname}", + "@changedTheDisplaynameTo": { + "type": "text", + "placeholders": { + "username": {}, + "displayname": {} + } + }, + "Change the homeserver": "Promijeni domaćeg poslužitelja", + "@Change the homeserver": { + "type": "text", + "placeholders": {} + }, + "changedTheGuestAccessRules": "{username} je promijenio/la pravila pristupa za goste", + "@changedTheGuestAccessRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheGuestAccessRulesTo": "{username} je promijenio/la pravila pristupa za goste u: {rules}", + "@changedTheGuestAccessRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheHistoryVisibility": "{username} je promijenio/la vidljivost kronologije", + "@changedTheHistoryVisibility": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheHistoryVisibilityTo": "{username} je promijenio/la vidljivost kronologije u: {rules}", + "@changedTheHistoryVisibilityTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheJoinRules": "{username} je promijenio/la pravila pridruživanja", + "@changedTheJoinRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheJoinRulesTo": "{username} je promijenio/la pravila pridruživanja u: {joinRules}", + "@changedTheJoinRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "joinRules": {} + } + }, + "changedTheProfileAvatar": "{username} je promijenio/la avatar profila", + "@changedTheProfileAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomAliases": "{username} je promijenio/la pseudonime soba", + "@changedTheRoomAliases": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomInvitationLink": "{username} je promijenio/la poveznicu poziva", + "@changedTheRoomInvitationLink": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Changelog": "Zapis promjena", + "@Changelog": { + "type": "text", + "placeholders": {} + }, + "Change the name of the group": "Promijeni ime grupe", + "@Change the name of the group": { + "type": "text", + "placeholders": {} + }, + "Change wallpaper": "Promijeni sliku pozadine", + "@Change wallpaper": { + "type": "text", + "placeholders": {} + }, + "Change the server": "Promijeni poslužitelja", + "@Change the server": { + "type": "text", + "placeholders": {} + }, + "The encryption has been corrupted": "Šifriranje je oštećeno", + "@The encryption has been corrupted": { + "type": "text", + "placeholders": {} + }, + "Chat": "Chat", + "@Chat": { + "type": "text", + "placeholders": {} + }, + "Chat details": "Detalji chata", + "@Chat details": { + "type": "text", + "placeholders": {} + }, + "Choose a strong password": "Odaberi snažnu lozinku", + "@Choose a strong password": { + "type": "text", + "placeholders": {} + }, + "Choose a username": "Odaberi korisničko ime", + "@Choose a username": { + "type": "text", + "placeholders": {} + }, + "Close": "Zatvori", + "@Close": { + "type": "text", + "placeholders": {} + }, + "compareEmojiMatch": "Usporedi i provjeri, poklapaju li se sljedeći emojiji s onima drugog uređaja:", + "@compareEmojiMatch": { + "type": "text", + "placeholders": {} + }, + "compareNumbersMatch": "Usporedi i provjeri, poklapaju li se sljedeći brojevi s onima drugog uređaja:", + "@compareNumbersMatch": { + "type": "text", + "placeholders": {} + }, + "Confirm": "Potvrdi", + "@Confirm": { + "type": "text", + "placeholders": {} + }, + "Connect": "Spoji", + "@Connect": { + "type": "text", + "placeholders": {} + }, + "Connection attempt failed": "Neuspio pokušaj povezivanja", + "@Connection attempt failed": { + "type": "text", + "placeholders": {} + }, + "Contact has been invited to the group": "Kontakt je pozvan u grupu", + "@Contact has been invited to the group": { + "type": "text", + "placeholders": {} + }, + "Content viewer": "Prikazivač sadržaja", + "@Content viewer": { + "type": "text", + "placeholders": {} + }, + "Copied to clipboard": "Kopirano u međuspremnik", + "@Copied to clipboard": { + "type": "text", + "placeholders": {} + }, + "Copy": "Kopiraj", + "@Copy": { + "type": "text", + "placeholders": {} + }, + "couldNotDecryptMessage": "Neuspjelo dešifriranje poruke: {error}", + "@couldNotDecryptMessage": { + "type": "text", + "placeholders": { + "error": {} + } + }, + "Could not set avatar": "Neuspjelo postavljanje avatara", + "@Could not set avatar": { + "type": "text", + "placeholders": {} + }, + "Could not set displayname": "Neuspjelo postavljanje prikaznog imena", + "@Could not set displayname": { + "type": "text", + "placeholders": {} + }, + "countParticipants": "{count} sudionika", + "@countParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Create": "Stvori", + "@Create": { + "type": "text", + "placeholders": {} + }, + "Create account now": "Stvori račun sada", + "@Create account now": { + "type": "text", + "placeholders": {} + }, + "createdTheChat": "{username} je stvorio/la chat", + "@createdTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Create new group": "Stvori novu grupu", + "@Create new group": { + "type": "text", + "placeholders": {} + }, + "crossSigningDisabled": "Unakrsno potpisivanje je deaktivirano", + "@crossSigningDisabled": { + "type": "text", + "placeholders": {} + }, + "crossSigningEnabled": "Unakrsno potpisivanje je aktivirano", + "@crossSigningEnabled": { + "type": "text", + "placeholders": {} + }, + "Currently active": "Trenutačno aktivni", + "@Currently active": { + "type": "text", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "text", + "placeholders": { + "date": {}, + "timeOfDay": {} + } + }, + "dateWithoutYear": "{day}. {month}.", + "@dateWithoutYear": { + "type": "text", + "placeholders": { + "month": {}, + "day": {} + } + }, + "dateWithYear": "{day}. {month}. {year}.", + "@dateWithYear": { + "type": "text", + "placeholders": { + "year": {}, + "month": {}, + "day": {} + } + }, + "Delete": "Izbriži", + "@Delete": { + "type": "text", + "placeholders": {} + }, + "Delete message": "Izbriži poruku", + "@Delete message": { + "type": "text", + "placeholders": {} + }, + "Deny": "Odbij", + "@Deny": { + "type": "text", + "placeholders": {} + }, + "Device": "Uređaj", + "@Device": { + "type": "text", + "placeholders": {} + }, + "Devices": "Uređaji", + "@Devices": { + "type": "text", + "placeholders": {} + }, + "Discard picture": "Odbaci sliku", + "@Discard picture": { + "type": "text", + "placeholders": {} + }, + "Displayname has been changed": "Prikazno ime je promijenjeno", + "@Displayname has been changed": { + "type": "text", + "placeholders": {} + }, + "Download file": "Preuzmi datoteku", + "@Download file": { + "type": "text", + "placeholders": {} + }, + "Edit displayname": "Uredi prikazano ime", + "@Edit displayname": { + "type": "text", + "placeholders": {} + }, + "Emote Settings": "Postavke emojija", + "@Emote Settings": { + "type": "text", + "placeholders": {} + }, + "Emote shortcode": "Kratica emota", + "@Emote shortcode": { + "type": "text", + "placeholders": {} + }, + "emoteWarnNeedToPick": "Moraš odabrati jednu kraticu emota i sliku!", + "@emoteWarnNeedToPick": { + "type": "text", + "placeholders": {} + }, + "emoteExists": "Emot već postoji!", + "@emoteExists": { + "type": "text", + "placeholders": {} + }, + "emoteInvalid": "Neispravna kratica emota!", + "@emoteInvalid": { + "type": "text", + "placeholders": {} + }, + "Empty chat": "Prazan chat", + "@Empty chat": { + "type": "text", + "placeholders": {} + }, + "You won't be able to disable the encryption anymore. Are you sure?": "Više nećeš moći deaktivirati šifriranje. Sigurno?", + "@You won't be able to disable the encryption anymore. Are you sure?": { + "type": "text", + "placeholders": {} + }, + "Encryption": "Šifriranje", + "@Encryption": { + "type": "text", + "placeholders": {} + }, + "Encryption algorithm": "Algoritam šifriranja", + "@Encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "Encryption is not enabled": "Šifriranje nije aktivirano", + "@Encryption is not enabled": { + "type": "text", + "placeholders": {} + }, + "End-to-end encryption settings": "Postavke obostranog šifriranja", + "@End-to-end encryption settings": { + "type": "text", + "placeholders": {} + }, + "Enter a group name": "Upiši ime grupe", + "@Enter a group name": { + "type": "text", + "placeholders": {} + }, + "Enter a username": "Upiši korisničko ime", + "@Enter a username": { + "type": "text", + "placeholders": {} + }, + "Enter your homeserver": "Upiši svog domaćeg poslužitelja", + "@Enter your homeserver": { + "type": "text", + "placeholders": {} + }, + "File name": "Ime datoteke", + "@File name": { + "type": "text", + "placeholders": {} + }, + "File size": "Veličina datoteke", + "@File size": { + "type": "text", + "placeholders": {} + }, + "FluffyChat": "FluffyChat", + "@FluffyChat": { + "type": "text", + "placeholders": {} + }, + "Forward": "Proslijedi", + "@Forward": { + "type": "text", + "placeholders": {} + }, + "Friday": "Petak", + "@Friday": { + "type": "text", + "placeholders": {} + }, + "From joining": "Od pridruživanja", + "@From joining": { + "type": "text", + "placeholders": {} + }, + "From the invitation": "Od poziva", + "@From the invitation": { + "type": "text", + "placeholders": {} + }, + "Group": "Grupiraj", + "@Group": { + "type": "text", + "placeholders": {} + }, + "Group description": "Opis grupe", + "@Group description": { + "type": "text", + "placeholders": {} + }, + "Group description has been changed": "Opis grupe je promijenjen", + "@Group description has been changed": { + "type": "text", + "placeholders": {} + }, + "Group is public": "Grupa je javna", + "@Group is public": { + "type": "text", + "placeholders": {} + }, + "groupWith": "Grupa s {displayname}", + "@groupWith": { + "type": "text", + "placeholders": { + "displayname": {} + } + }, + "Guests are forbidden": "Gosti su zabranjeni", + "@Guests are forbidden": { + "type": "text", + "placeholders": {} + }, + "Guests can join": "Gosti se mogu pridružiti", + "@Guests can join": { + "type": "text", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{username} je povukao/la poziv za {targetName}", + "@hasWithdrawnTheInvitationFor": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Help": "Pomoć", + "@Help": { + "type": "text", + "placeholders": {} + }, + "Homeserver is not compatible": "Domaći poslužitelj nije kompatibilan", + "@Homeserver is not compatible": { + "type": "text", + "placeholders": {} + }, + "ID": "ID", + "@ID": { + "type": "text", + "placeholders": {} + }, + "Identity": "Identitet", + "@Identity": { + "type": "text", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Neispravna lozinka ili ključ za obnavljanje", + "@incorrectPassphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Invite contact": "Pozovi kontakt", + "@Invite contact": { + "type": "text", + "placeholders": {} + }, + "inviteContactToGroup": "Pozovi kontakt u {groupName}", + "@inviteContactToGroup": { + "type": "text", + "placeholders": { + "groupName": {} + } + }, + "Invited": "Pozvan/a", + "@Invited": { + "type": "text", + "placeholders": {} + }, + "inviteText": "{username} te je pozvao/la u FluffyChat. \n1. Instaliraj FluffyChat: http://fluffy.chat \n2. Registriraj ili prijavi se \n3. Otvori poveznicu poziva: {link}", + "@inviteText": { + "type": "text", + "placeholders": { + "username": {}, + "link": {} + } + }, + "invitedUser": "{username} je pozvao/la {targetName}", + "@invitedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Invited users only": "Samo pozvani korisnici", + "@Invited users only": { + "type": "text", + "placeholders": {} + }, + "isDeviceKeyCorrect": "Je li sljedeći ključ uređaja ispravan?", + "@isDeviceKeyCorrect": { + "type": "text", + "placeholders": {} + }, + "is typing...": "piše …", + "@is typing...": { + "type": "text", + "placeholders": {} + }, + "Edit Jitsi instance": "Uredi Jitsi primjerak", + "@Edit Jitsi instance": { + "type": "text", + "placeholders": {} + }, + "joinedTheChat": "{username} se pridružio/la chatu", + "@joinedTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "keysCached": "Ključevi su spremljeni u predmemoriji", + "@keysCached": { + "type": "text", + "placeholders": {} + }, + "keysMissing": "Nedostaju ključevi", + "@keysMissing": { + "type": "text", + "placeholders": {} + }, + "kicked": "{username} je izbacio/la {targetName}", + "@kicked": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "kickedAndBanned": "{username} je izbacio/la i isključio/la {targetName}", + "@kickedAndBanned": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Kick from chat": "Izbaci iz chata", + "@Kick from chat": { + "type": "text", + "placeholders": {} + }, + "Leave": "Napusti", + "@Leave": { + "type": "text", + "placeholders": {} + }, + "Left the chat": "Napustio/la je chat", + "@Left the chat": { + "type": "text", + "placeholders": {} + }, + "Logout": "Odjava", + "@Logout": { + "type": "text", + "placeholders": {} + }, + "userLeftTheChat": "{username} je napustio/la chat", + "@userLeftTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "lastActiveAgo": "Zadnja aktivnost: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "text", + "placeholders": { + "localizedTimeShort": {} + } + }, + "Last seen IP": "Zadnji viđeni IP", + "@Last seen IP": { + "type": "text", + "placeholders": {} + }, + "License": "Licenca", + "@License": { + "type": "text", + "placeholders": {} + }, + "Loading... Please wait": "Učitava se … Pričekaj", + "@Loading... Please wait": { + "type": "text", + "placeholders": {} + }, + "Load more...": "Učitaj više …", + "@Load more...": { + "type": "text", + "placeholders": {} + }, + "loadCountMoreParticipants": "Učitaj još {count} sudionika", + "@loadCountMoreParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Login": "Prijava", + "@Login": { + "type": "text", + "placeholders": {} + }, + "logInTo": "Prijavi se na {homeserver}", + "@logInTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "Make a moderator": "Postavi kao voditelja", + "@Make a moderator": { + "type": "text", + "placeholders": {} + }, + "Make an admin": "Postavi kao administratora", + "@Make an admin": { + "type": "text", + "placeholders": {} + }, + "Make sure the identifier is valid": "Provjeri je li identifikator ispravan", + "@Make sure the identifier is valid": { + "type": "text", + "placeholders": {} + }, + "Message will be removed for all participants": "Poruke će se ukloniti za sve sudionike", + "@Message will be removed for all participants": { + "type": "text", + "placeholders": {} + }, + "Moderator": "Voditelj", + "@Moderator": { + "type": "text", + "placeholders": {} + }, + "Monday": "Ponedjeljak", + "@Monday": { + "type": "text", + "placeholders": {} + }, + "Mute chat": "Isključi zvuk chata", + "@Mute chat": { + "type": "text", + "placeholders": {} + }, + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": "Za sada trebaš Pantalaimon za obostrano šifriranje.", + "@Please be aware that you need Pantalaimon to use end-to-end encryption for now.": { + "type": "text", + "placeholders": {} + }, + "New message in FluffyChat": "Nova poruka u FluffyChatu", + "@New message in FluffyChat": { + "type": "text", + "placeholders": {} + }, + "New private chat": "Novi privatni chat", + "@New private chat": { + "type": "text", + "placeholders": {} + }, + "newVerificationRequest": "Novi zahtjev za provjeru!", + "@newVerificationRequest": { + "type": "text", + "placeholders": {} + }, + "noCrossSignBootstrap": "Fluffychat trenutačno ne podržava unakrsno potpisivanje. Aktiviraj je pomoću Element-a.", + "@noCrossSignBootstrap": { + "type": "text", + "placeholders": {} + }, + "noMegolmBootstrap": "Fluffychat trenutačno ne podržava online sigurnosnu kopiju ključeva. Aktiviraj je pomoću Element-a.", + "@noMegolmBootstrap": { + "type": "text", + "placeholders": {} + }, + "It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": "Čini se da na mobitelu nemaš google usluge. To je dobra odluka za tvoju privatnost! Za primanje push obavijesti u FluffyChatu preporučujemo upotrebu microG-a: https://microg.org/", + "@It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": { + "type": "text", + "placeholders": {} + }, + "None": "Ništa", + "@None": { + "type": "text", + "placeholders": {} + }, + "No emotes found. 😕": "Nema emota. 😕", + "@No emotes found. 😕": { + "type": "text", + "placeholders": {} + }, + "No permission": "Bez dozvole", + "@No permission": { + "type": "text", + "placeholders": {} + }, + "No rooms found...": "Nema pronađenih soba …", + "@No rooms found...": { + "type": "text", + "placeholders": {} + }, + "Not supported in web": "Nije podržano u internetu", + "@Not supported in web": { + "type": "text", + "placeholders": {} + }, + "numberSelected": "{number} odabrano", + "@numberSelected": { + "type": "text", + "placeholders": { + "number": {} + } + }, + "ok": "u redu", + "@ok": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupDisabled": "Online sigurnosna kopija ključeva je deaktivirana", + "@onlineKeyBackupDisabled": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "Online sigurnosna kopija ključeva je aktivirana", + "@onlineKeyBackupEnabled": { + "type": "text", + "placeholders": {} + }, + "Oops something went wrong...": "Ups, došlo je do neke greške …", + "@Oops something went wrong...": { + "type": "text", + "placeholders": {} + }, + "Open app to read messages": "Za čitanje poruka, otvori program", + "@Open app to read messages": { + "type": "text", + "placeholders": {} + }, + "Open camera": "Otvori kameru", + "@Open camera": { + "type": "text", + "placeholders": {} + }, + "(Optional) Group name": "(Opcionalno) Ime grupe", + "@(Optional) Group name": { + "type": "text", + "placeholders": {} + }, + "Participating user devices": "Sudjelujući korisnički uređaji", + "@Participating user devices": { + "type": "text", + "placeholders": {} + }, + "passphraseOrKey": "Lozinka ili ključ za obnavljanje", + "@passphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Password": "Lozinka", + "@Password": { + "type": "text", + "placeholders": {} + }, + "Pick image": "Odaberi sliku", + "@Pick image": { + "type": "text", + "placeholders": {} + }, + "play": "Sviraj {fileName}", + "@play": { + "type": "text", + "placeholders": { + "fileName": {} + } + }, + "Please choose a username": "Odaberi korisničko ime", + "@Please choose a username": { + "type": "text", + "placeholders": {} + }, + "Please enter a matrix identifier": "Upiši identifikator matrice", + "@Please enter a matrix identifier": { + "type": "text", + "placeholders": {} + }, + "Please enter your password": "Upiši svoju lozinku", + "@Please enter your password": { + "type": "text", + "placeholders": {} + }, + "Please enter your username": "Upiši svoje korisničko ime", + "@Please enter your username": { + "type": "text", + "placeholders": {} + }, + "Public Rooms": "Javne sobe", + "@Public Rooms": { + "type": "text", + "placeholders": {} + }, + "Reject": "Odbij", + "@Reject": { + "type": "text", + "placeholders": {} + }, + "Rejoin": "Ponovo se pridruži", + "@Rejoin": { + "type": "text", + "placeholders": {} + }, + "Render rich message content": "Prikaži formatirani sadržaj poruke", + "@Render rich message content": { + "type": "text", + "placeholders": {} + }, + "Recording": "Snimanje", + "@Recording": { + "type": "text", + "placeholders": {} + }, + "redactedAnEvent": "{username} je preuredio/la događaj", + "@redactedAnEvent": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "rejectedTheInvitation": "{username} je odbio/la poziv", + "@rejectedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove all other devices": "Ukloni sve druge uređaje", + "@Remove all other devices": { + "type": "text", + "placeholders": {} + }, + "removedBy": "Uklonjeno od {username}", + "@removedBy": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove device": "Ukloni uređaj", + "@Remove device": { + "type": "text", + "placeholders": {} + }, + "Remove exile": "Ukloni izbacivanje", + "@Remove exile": { + "type": "text", + "placeholders": {} + }, + "Revoke all permissions": "Opozovi sve dozvole", + "@Revoke all permissions": { + "type": "text", + "placeholders": {} + }, + "Remove": "Ukloni", + "@Remove": { + "type": "text", + "placeholders": {} + }, + "Remove message": "Ukloni poruku", + "@Remove message": { + "type": "text", + "placeholders": {} + }, + "Reply": "Odgovori", + "@Reply": { + "type": "text", + "placeholders": {} + }, + "Request permission": "Zatraži dozvolu", + "@Request permission": { + "type": "text", + "placeholders": {} + }, + "Request to read older messages": "Zahtjev za čitanje starijih poruka", + "@Request to read older messages": { + "type": "text", + "placeholders": {} + }, + "Room has been upgraded": "Ova soba je nadograđena", + "@Room has been upgraded": { + "type": "text", + "placeholders": {} + }, + "Saturday": "Subota", + "@Saturday": { + "type": "text", + "placeholders": {} + }, + "Share": "Dijeli", + "@Share": { + "type": "text", + "placeholders": {} + }, + "sharedTheLocation": "{username} je dijelio/la mjesto", + "@sharedTheLocation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Search for a chat": "Traži chat", + "@Search for a chat": { + "type": "text", + "placeholders": {} + }, + "Seen a long time ago": "Viđeno prije dugo vremena", + "@Seen a long time ago": { + "type": "text", + "placeholders": {} + }, + "seenByUser": "Viđeno od {username}", + "@seenByUser": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "seenByUserAndUser": "Viđeno od {username} i {username2}", + "@seenByUserAndUser": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "seenByUserAndCountOthers": "Viđeno od {username} i još {count} korisnika", + "@seenByUserAndCountOthers": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "Send": "Pošalji", + "@Send": { + "type": "text", + "placeholders": {} + }, + "Send a message": "Pošalji poruku", + "@Send a message": { + "type": "text", + "placeholders": {} + }, + "Send file": "Pošalji datoteku", + "@Send file": { + "type": "text", + "placeholders": {} + }, + "Send image": "Pošalji sliku", + "@Send image": { + "type": "text", + "placeholders": {} + }, + "sentAFile": "{username} ja poslao/la datoteku", + "@sentAFile": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAnAudio": "{username} ja poslao/la audio", + "@sentAnAudio": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAPicture": "{username} ja poslao/la sliku", + "@sentAPicture": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentASticker": "{username} je poslao/la naljepnicu", + "@sentASticker": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAVideo": "{username} ja poslao/la video", + "@sentAVideo": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sessionVerified": "Sesija je provjerena", + "@sessionVerified": { + "type": "text", + "placeholders": {} + }, + "Set a profile picture": "Postavi sliku profila", + "@Set a profile picture": { + "type": "text", + "placeholders": {} + }, + "Set group description": "Postavi opis grupe", + "@Set group description": { + "type": "text", + "placeholders": {} + }, + "Set invitation link": "Pošalji poveznicu za pozivnicu", + "@Set invitation link": { + "type": "text", + "placeholders": {} + }, + "Set status": "Postavi stanje", + "@Set status": { + "type": "text", + "placeholders": {} + }, + "Settings": "Postavke", + "@Settings": { + "type": "text", + "placeholders": {} + }, + "Sign up": "Prijavi se", + "@Sign up": { + "type": "text", + "placeholders": {} + }, + "Skip": "Preskoči", + "@Skip": { + "type": "text", + "placeholders": {} + }, + "Change your style": "Promijeni svoj stil", + "@Change your style": { + "type": "text", + "placeholders": {} + }, + "System": "Sustav", + "@System": { + "type": "text", + "placeholders": {} + }, + "How are you today?": "Kako si danas?", + "@How are you today?": { + "type": "text", + "placeholders": {} + }, + "Light": "Svjetla", + "@Light": { + "type": "text", + "placeholders": {} + }, + "Dark": "Tamna", + "@Dark": { + "type": "text", + "placeholders": {} + }, + "Use Amoled compatible colors?": "Koristiti Amoled kompatibilne boje?", + "@Use Amoled compatible colors?": { + "type": "text", + "placeholders": {} + }, + "Source code": "Izvorni kȏd", + "@Source code": { + "type": "text", + "placeholders": {} + }, + "Start your first chat :-)": "Počni svoj prvi chat :-)", + "@Start your first chat :-)": { + "type": "text", + "placeholders": {} + }, + "Submit": "Pošalji", + "@Submit": { + "type": "text", + "placeholders": {} + }, + "Sunday": "Nedjelja", + "@Sunday": { + "type": "text", + "placeholders": {} + }, + "Donate": "Doniraj", + "@Donate": { + "type": "text", + "placeholders": {} + }, + "Tap to show menu": "Dodirni za prikaz izbornika", + "@Tap to show menu": { + "type": "text", + "placeholders": {} + }, + "They Don't Match": "Ne poklapaju se", + "@They Don't Match": { + "type": "text", + "placeholders": {} + }, + "They Match": "Poklapaju se", + "@They Match": { + "type": "text", + "placeholders": {} + }, + "This room has been archived.": "Ova soba je arhivirana.", + "@This room has been archived.": { + "type": "text", + "placeholders": {} + }, + "Thursday": "Četvrtak", + "@Thursday": { + "type": "text", + "placeholders": {} + }, + "timeOfDay": "{hours24}:{minutes}", + "@timeOfDay": { + "type": "text", + "placeholders": { + "hours12": {}, + "hours24": {}, + "minutes": {}, + "suffix": {} + } + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "text", + "placeholders": {} + }, + "Try to send again": "Pokušaj ponovo poslati", + "@Try to send again": { + "type": "text", + "placeholders": {} + }, + "Tuesday": "Utorak", + "@Tuesday": { + "type": "text", + "placeholders": {} + }, + "unbannedUser": "{username} je ponovo uključio/la {targetName}", + "@unbannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Unblock Device": "Deblokiraj uređaj", + "@Unblock Device": { + "type": "text", + "placeholders": {} + }, + "Unmute chat": "Uključi zvuk chata", + "@Unmute chat": { + "type": "text", + "placeholders": {} + }, + "Unknown device": "Nepoznat uređaj", + "@Unknown device": { + "type": "text", + "placeholders": {} + }, + "Unknown encryption algorithm": "Nepoznat algoritam šifriranja", + "@Unknown encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "unknownSessionVerify": "Nepoznata sesija, provjeri", + "@unknownSessionVerify": { + "type": "text", + "placeholders": {} + }, + "unknownEvent": "Nepoznata vrsta događaja „{type}”", + "@unknownEvent": { + "type": "text", + "placeholders": { + "type": {} + } + }, + "unreadChats": "{unreadCount} nepročitana chata", + "@unreadChats": { + "type": "text", + "placeholders": { + "unreadCount": {} + } + }, + "unreadMessages": "{unreadEvents} nepročitane poruke", + "@unreadMessages": { + "type": "text", + "placeholders": { + "unreadEvents": {} + } + }, + "unreadMessagesInChats": "{unreadEvents} nepročitane poruke u {unreadChats} chata", + "@unreadMessagesInChats": { + "type": "text", + "placeholders": { + "unreadEvents": {}, + "unreadChats": {} + } + }, + "userAndOthersAreTyping": "{username} i još {count} korisnika pišu …", + "@userAndOthersAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "userAndUserAreTyping": "{username} i {username2} pišu …", + "@userAndUserAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "Username": "Korisničko ime", + "@Username": { + "type": "text", + "placeholders": {} + }, + "userIsTyping": "{username} piše …", + "@userIsTyping": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "userSentUnknownEvent": "{username} ja poslao/la {type} događaj", + "@userSentUnknownEvent": { + "type": "text", + "placeholders": { + "username": {}, + "type": {} + } + }, + "Verify": "Provjeri", + "@Verify": { + "type": "text", + "placeholders": {} + }, + "verifyManual": "Provjeri ručno", + "@verifyManual": { + "type": "text", + "placeholders": {} + }, + "verifiedSession": "Uspješno provjerena sesija!", + "@verifiedSession": { + "type": "text", + "placeholders": {} + }, + "verifyStart": "Pokreni provjeru", + "@verifyStart": { + "type": "text", + "placeholders": {} + }, + "verifySuccess": "Uspješno si provjerio/la!", + "@verifySuccess": { + "type": "text", + "placeholders": {} + }, + "verifyTitle": "Provjeravanje drugog računa", + "@verifyTitle": { + "type": "text", + "placeholders": {} + }, + "Verify User": "Provjeri korisnika", + "@Verify User": { + "type": "text", + "placeholders": {} + }, + "Video call": "Video poziv", + "@Video call": { + "type": "text", + "placeholders": {} + }, + "Visible for all participants": "Vidljivo za sve sudionike", + "@Visible for all participants": { + "type": "text", + "placeholders": {} + }, + "Visible for everyone": "Vidljivo za sve", + "@Visible for everyone": { + "type": "text", + "placeholders": {} + }, + "Visibility of the chat history": "Vidljivost kronologije chata", + "@Visibility of the chat history": { + "type": "text", + "placeholders": {} + }, + "Voice message": "Glasovna poruka", + "@Voice message": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "Čekanje na partnera, da prihvati zahtjeva …", + "@waitingPartnerAcceptRequest": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerEmoji": "Čekanje na partnera, da prihvati emoji …", + "@waitingPartnerEmoji": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerNumbers": "Čekanje na partnera, da prihvati brojeve …", + "@waitingPartnerNumbers": { + "type": "text", + "placeholders": {} + }, + "Wallpaper": "Slika pozadine", + "@Wallpaper": { + "type": "text", + "placeholders": {} + }, + "End to end encryption is currently in Beta! Use at your own risk!": "Obostrano šifriranje je trenutačno u beta stanju! Koriti na vlastitu odgovornost!", + "@End to end encryption is currently in Beta! Use at your own risk!": { + "type": "text", + "placeholders": {} + }, + "Wednesday": "Srijeda", + "@Wednesday": { + "type": "text", + "placeholders": {} + }, + "Welcome to the cutest instant messenger in the matrix network.": "Lijep pozdrav u najslađi program za čavrljanje u matrix-mreži.", + "@Welcome to the cutest instant messenger in the matrix network.": { + "type": "text", + "placeholders": {} + }, + "Who is allowed to join this group": "Tko se smije pridružiti grupi", + "@Who is allowed to join this group": { + "type": "text", + "placeholders": {} + }, + "Write a message...": "Napiši poruku …", + "@Write a message...": { + "type": "text", + "placeholders": {} + }, + "Yes": "Da", + "@Yes": { + "type": "text", + "placeholders": {} + }, + "You": "Ti", + "@You": { + "type": "text", + "placeholders": {} + }, + "You are invited to this chat": "Pozvan/a si u ovaj chat", + "@You are invited to this chat": { + "type": "text", + "placeholders": {} + }, + "You are no longer participating in this chat": "Više ne sudjeluješ u ovom chatu", + "@You are no longer participating in this chat": { + "type": "text", + "placeholders": {} + }, + "You cannot invite yourself": "Sebe ne možeš pozvati", + "@You cannot invite yourself": { + "type": "text", + "placeholders": {} + }, + "You have been banned from this chat": "Isključen/a si iz ovog chata", + "@You have been banned from this chat": { + "type": "text", + "placeholders": {} + }, + "Your own username": "Tvoje korisničko ime", + "@Your own username": { + "type": "text", + "placeholders": {} + } +} diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb index c18cfff..a7f7ef9 100644 --- a/lib/l10n/intl_hu.arb +++ b/lib/l10n/intl_hu.arb @@ -64,7 +64,7 @@ "type": "text", "placeholders": {} }, - "Are guest users allowed to join": "Csatlakozhatnak-e vendég felhasználók", + "Are guest users allowed to join": "Csatlakozhatnak vendég felhasználók", "@Are guest users allowed to join": { "type": "text", "placeholders": {} @@ -424,7 +424,7 @@ "type": "text", "placeholders": {} }, - "Emote Settings": "Hangulatjel beállíŧások", + "Emote Settings": "Hangulatjel beállítások", "@Emote Settings": { "type": "text", "placeholders": {} @@ -835,7 +835,7 @@ "type": "text", "placeholders": {} }, - "Open camera": "Kamera megnyitása", + "Open camera": "Kamera megnyitása", "@Open camera": { "type": "text", "placeholders": {} @@ -1282,7 +1282,7 @@ "type": {} } }, - "Verify": "Igazol", + "Verify": "Hitelesít", "@Verify": { "type": "text", "placeholders": {} @@ -1376,5 +1376,224 @@ "@Your own username": { "type": "text", "placeholders": {} + }, + "askSSSSSign": "A másik személy igazolásához, kérlek add meg jelszavadat vagy visszaállítási kulcsodat.", + "@askSSSSSign": { + "type": "text", + "placeholders": {} + }, + "newVerificationRequest": "Új hitelesítési kérelem!", + "@newVerificationRequest": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerNumbers": "Várakozás partnere, amíg elfogadja a számokat...", + "@waitingPartnerNumbers": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "Várakozás partnerre, amíg elfogadja a kérést...", + "@waitingPartnerAcceptRequest": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerEmoji": "Várakozás partnere, amíg elfogadja a hangulatjeleket...", + "@waitingPartnerEmoji": { + "type": "text", + "placeholders": {} + }, + "Verify User": "Felhasználó hitelesítése", + "@Verify User": { + "type": "text", + "placeholders": {} + }, + "verifyTitle": "Másik fiók hitelesítése", + "@verifyTitle": { + "type": "text", + "placeholders": {} + }, + "verifySuccess": "Sikeresen hitelesítettél!", + "@verifySuccess": { + "type": "text", + "placeholders": {} + }, + "verifyStart": "Hitelesítés megkezdése", + "@verifyStart": { + "type": "text", + "placeholders": {} + }, + "verifiedSession": "Sikeresen hitelesítetted a munkamenetedet!", + "@verifiedSession": { + "type": "text", + "placeholders": {} + }, + "verifyManual": "Kézi hitelesítés", + "@verifyManual": { + "type": "text", + "placeholders": {} + }, + "unknownSessionVerify": "Ismeretlen munkamenet, kérlek hitelesítsd", + "@unknownSessionVerify": { + "type": "text", + "placeholders": {} + }, + "Block Device": "Eszköz blokkolása", + "@Block Device": { + "type": "text", + "placeholders": {} + }, + "Unblock Device": "Eszköz blokkolásának megszüntetése", + "@Unblock Device": { + "type": "text", + "placeholders": {} + }, + "They Match": "Megegyeznek", + "@They Match": { + "type": "text", + "placeholders": {} + }, + "They Don't Match": "Nem egyeznek", + "@They Don't Match": { + "type": "text", + "placeholders": {} + }, + "Submit": "Mehet", + "@Submit": { + "type": "text", + "placeholders": {} + }, + "Skip": "Kihagy", + "@Skip": { + "type": "text", + "placeholders": {} + }, + "sessionVerified": "Munkamenet hitelesítve", + "@sessionVerified": { + "type": "text", + "placeholders": {} + }, + "Seen a long time ago": "Már régen látta", + "@Seen a long time ago": { + "type": "text", + "placeholders": {} + }, + "Room has been upgraded": "Szoba frissítve lett", + "@Room has been upgraded": { + "type": "text", + "placeholders": {} + }, + "Reject": "Visszautasít", + "@Reject": { + "type": "text", + "placeholders": {} + }, + "passphraseOrKey": "Jelszó vagy visszaállítási kulcs", + "@passphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "Online Kulcs Archívum engedélyezve", + "@onlineKeyBackupEnabled": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupDisabled": "Online Kulcs Archívum letiltva", + "@onlineKeyBackupDisabled": { + "type": "text", + "placeholders": {} + }, + "noMegolmBootstrap": "FluffyChat jelenleg nem támogatja az Online Kulcs Archívumot (backup). Kérlek engedélyezd Riot-ból.", + "@noMegolmBootstrap": { + "type": "text", + "placeholders": {} + }, + "noCrossSignBootstrap": "FluffyChat jelenleg nem támogatja a Kereszt-Aláírás bekapcsolását. Kérlek engedélyezd Riot-ból.", + "@noCrossSignBootstrap": { + "type": "text", + "placeholders": {} + }, + "keysMissing": "Kulcsok hiányoznak", + "@keysMissing": { + "type": "text", + "placeholders": {} + }, + "keysCached": "Kulcsok betöltve", + "@keysCached": { + "type": "text", + "placeholders": {} + }, + "isDeviceKeyCorrect": "Helyes az alábbi eszköz kulcs?", + "@isDeviceKeyCorrect": { + "type": "text", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Hibás jelszó vagy visszaállítási kulcs", + "@incorrectPassphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Encryption": "Titkosítás", + "@Encryption": { + "type": "text", + "placeholders": {} + }, + "Currently active": "Jelenleg aktív", + "@Currently active": { + "type": "text", + "placeholders": {} + }, + "crossSigningEnabled": "Kereszt-Aláírás bekapcsolva", + "@crossSigningEnabled": { + "type": "text", + "placeholders": {} + }, + "crossSigningDisabled": "Kereszt-Aláírás kikapcsolva", + "@crossSigningDisabled": { + "type": "text", + "placeholders": {} + }, + "couldNotDecryptMessage": "Nem sikerült visszafejteni a titkosított üzenetet: {error}", + "@couldNotDecryptMessage": { + "type": "text", + "placeholders": { + "error": {} + } + }, + "compareNumbersMatch": "Hasonlítsd össze a számokat a másik eszközön lévőkkel:", + "@compareNumbersMatch": { + "type": "text", + "placeholders": {} + }, + "compareEmojiMatch": "Hasonlítsd össze a hangulatjeleket a másik eszközön lévőkkel:", + "@compareEmojiMatch": { + "type": "text", + "placeholders": {} + }, + "cachedKeys": "Sikeresen betöltöttük a kulcsokat!", + "@cachedKeys": { + "type": "text", + "placeholders": {} + }, + "askVerificationRequest": "Elfogadod {username} hitelesítési kérelmét?", + "@askVerificationRequest": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "askSSSSVerify": "Add meg a biztonságos tárolóhoz tartozó vagy a visszaállítási jelszavadat, a munkamenet hitelesítéséhez.", + "@askSSSSVerify": { + "type": "text", + "placeholders": {} + }, + "askSSSSCache": "Add meg a biztonságos tárolóhoz tartozó vagy a visszaállítási jelszavadat, hogy betöltsük a kulcsaidat.", + "@askSSSSCache": { + "type": "text", + "placeholders": {} + }, + "Accept": "Elfogad", + "@Accept": { + "type": "text", + "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb new file mode 100644 index 0000000..be28a96 --- /dev/null +++ b/lib/l10n/intl_ja.arb @@ -0,0 +1,1592 @@ +{ + "@@last_modified": "2020-06-25T16:02:16.297192", + "About": "このアプリについて", + "@About": { + "type": "text", + "placeholders": {} + }, + "Accept": "承諾する", + "@Accept": { + "type": "text", + "placeholders": {} + }, + "acceptedTheInvitation": "{username}が招待を承諾しました", + "@acceptedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Account": "アカウント", + "@Account": { + "type": "text", + "placeholders": {} + }, + "Account informations": "アカウント情報", + "@Account informations": { + "type": "text", + "placeholders": {} + }, + "activatedEndToEndEncryption": "{username}がエンドツーエンド暗号化を有効にしました", + "@activatedEndToEndEncryption": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Add a group description": "グループの説明を追加する", + "@Add a group description": { + "type": "text", + "placeholders": {} + }, + "Admin": "管理者", + "@Admin": { + "type": "text", + "placeholders": {} + }, + "alias": "エイリアス", + "@alias": { + "type": "text", + "placeholders": {} + }, + "Already have an account?": "アカウントをすでにお持ちですか?", + "@Already have an account?": { + "type": "text", + "placeholders": {} + }, + "Anyone can join": "誰でも参加できる", + "@Anyone can join": { + "type": "text", + "placeholders": {} + }, + "Archive": "アーカイブ", + "@Archive": { + "type": "text", + "placeholders": {} + }, + "Archived Room": "アーカイブされた部屋", + "@Archived Room": { + "type": "text", + "placeholders": {} + }, + "Are guest users allowed to join": "ゲストユーザーの参加を許可する", + "@Are guest users allowed to join": { + "type": "text", + "placeholders": {} + }, + "Are you sure?": "これでよろしいですか?", + "@Are you sure?": { + "type": "text", + "placeholders": {} + }, + "askSSSSCache": "鍵をキャッシュするためにはパスフレーズやリカバリーキーを入力してください。", + "@askSSSSCache": { + "type": "text", + "placeholders": {} + }, + "askSSSSSign": "他の人を署名するためにはパスフレーズやリカバリーキーを入力してください。", + "@askSSSSSign": { + "type": "text", + "placeholders": {} + }, + "askSSSSVerify": "セッションを検証するためにはパスフレーズやリカバリーキーを入力してください。", + "@askSSSSVerify": { + "type": "text", + "placeholders": {} + }, + "askVerificationRequest": "{username}の検証リクエストを承認しますか?", + "@askVerificationRequest": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Authentication": "認証", + "@Authentication": { + "type": "text", + "placeholders": {} + }, + "Avatar has been changed": "アバターが変更されました", + "@Avatar has been changed": { + "type": "text", + "placeholders": {} + }, + "Ban from chat": "チャットからBANする", + "@Ban from chat": { + "type": "text", + "placeholders": {} + }, + "Banned": "BANされています", + "@Banned": { + "type": "text", + "placeholders": {} + }, + "bannedUser": "{username}が{targetName}をBANしました", + "@bannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Block Device": "デバイスをブロックする", + "@Block Device": { + "type": "text", + "placeholders": {} + }, + "byDefaultYouWillBeConnectedTo": "デフォルトで{homeserver}に接続されます", + "@byDefaultYouWillBeConnectedTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "cachedKeys": "鍵のキャッシュに成功しました!", + "@cachedKeys": { + "type": "text", + "placeholders": {} + }, + "Cancel": "キャンセル", + "@Cancel": { + "type": "text", + "placeholders": {} + }, + "changedTheChatAvatar": "{username}がチャットアバターを変更しました", + "@changedTheChatAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheChatNameTo": "{username}がチャットの名前を「{chatname}」に変更しました", + "@changedTheChatNameTo": { + "type": "text", + "placeholders": { + "username": {}, + "chatname": {} + } + }, + "changedTheChatDescriptionTo": "{username}がチャットの説明を「{description}」に変更しました", + "@changedTheChatDescriptionTo": { + "type": "text", + "placeholders": { + "username": {}, + "description": {} + } + }, + "changedTheChatPermissions": "{username}がチャットの権限を変更しました", + "@changedTheChatPermissions": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheDisplaynameTo": "{username}が表示名を「{displayname}」に変更しました", + "@changedTheDisplaynameTo": { + "type": "text", + "placeholders": { + "username": {}, + "displayname": {} + } + }, + "Change the homeserver": "ホームサーバーの変更", + "@Change the homeserver": { + "type": "text", + "placeholders": {} + }, + "changedTheGuestAccessRules": "{username}がゲストのアクセスルールを変更しました", + "@changedTheGuestAccessRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheGuestAccessRulesTo": "{username}がゲストのアクセスルールを{rules}に変更しました", + "@changedTheGuestAccessRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheHistoryVisibility": "{username}が履歴の表示設定を変更しました", + "@changedTheHistoryVisibility": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheHistoryVisibilityTo": "{username}が履歴の表示設定を{rules}に変更しました", + "@changedTheHistoryVisibilityTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheJoinRules": "{username}が参加ルールを変更しました", + "@changedTheJoinRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheJoinRulesTo": "{username}が参加ルールを{joinRules}に変更しました", + "@changedTheJoinRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "joinRules": {} + } + }, + "changedTheProfileAvatar": "{username}がプロフィールのアバターを変更しました", + "@changedTheProfileAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomAliases": "{username}が部屋のエイリアスを変更しました", + "@changedTheRoomAliases": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomInvitationLink": "{username}が招待リンクを変更しました", + "@changedTheRoomInvitationLink": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Changelog": "変更履歴", + "@Changelog": { + "type": "text", + "placeholders": {} + }, + "Change the name of the group": "グループの名前を変更する", + "@Change the name of the group": { + "type": "text", + "placeholders": {} + }, + "Change wallpaper": "壁紙を変更する", + "@Change wallpaper": { + "type": "text", + "placeholders": {} + }, + "Change the server": "サーバーを変更する", + "@Change the server": { + "type": "text", + "placeholders": {} + }, + "The encryption has been corrupted": "暗号が破損しています", + "@The encryption has been corrupted": { + "type": "text", + "placeholders": {} + }, + "Chat": "チャット", + "@Chat": { + "type": "text", + "placeholders": {} + }, + "Chat details": "チャットの詳細", + "@Chat details": { + "type": "text", + "placeholders": {} + }, + "Choose a strong password": "強いパスワードを選択してください", + "@Choose a strong password": { + "type": "text", + "placeholders": {} + }, + "Choose a username": "ユーザー名を選択してください", + "@Choose a username": { + "type": "text", + "placeholders": {} + }, + "Close": "閉じる", + "@Close": { + "type": "text", + "placeholders": {} + }, + "compareEmojiMatch": "表示されている絵文字が他のデバイスで表示されているものと一致するか確認してください:", + "@compareEmojiMatch": { + "type": "text", + "placeholders": {} + }, + "compareNumbersMatch": "表示されている数字が他のデバイスで表示されているものと一致するか確認してください:", + "@compareNumbersMatch": { + "type": "text", + "placeholders": {} + }, + "Confirm": "確認", + "@Confirm": { + "type": "text", + "placeholders": {} + }, + "Connect": "接続", + "@Connect": { + "type": "text", + "placeholders": {} + }, + "Connection attempt failed": "接続が失敗しました", + "@Connection attempt failed": { + "type": "text", + "placeholders": {} + }, + "Contact has been invited to the group": "連絡先に登録された人が招待されました", + "@Contact has been invited to the group": { + "type": "text", + "placeholders": {} + }, + "Content viewer": "コンテンツビューアー", + "@Content viewer": { + "type": "text", + "placeholders": {} + }, + "Copied to clipboard": "クリップボードにコピーされました", + "@Copied to clipboard": { + "type": "text", + "placeholders": {} + }, + "Copy": "コピー", + "@Copy": { + "type": "text", + "placeholders": {} + }, + "couldNotDecryptMessage": "メッセージを解読できませんでした: {error}", + "@couldNotDecryptMessage": { + "type": "text", + "placeholders": { + "error": {} + } + }, + "Could not set avatar": "アバターをセットできませんでした", + "@Could not set avatar": { + "type": "text", + "placeholders": {} + }, + "Could not set displayname": "表示名をセットできませんでした", + "@Could not set displayname": { + "type": "text", + "placeholders": {} + }, + "countParticipants": "{count}名の参加者", + "@countParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Create": "作成", + "@Create": { + "type": "text", + "placeholders": {} + }, + "Create account now": "アカウントを作成する", + "@Create account now": { + "type": "text", + "placeholders": {} + }, + "createdTheChat": "{username}がチャットを作成しました", + "@createdTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Create new group": "新しいグループを作成する", + "@Create new group": { + "type": "text", + "placeholders": {} + }, + "crossSigningDisabled": "相互署名は使えません", + "@crossSigningDisabled": { + "type": "text", + "placeholders": {} + }, + "crossSigningEnabled": "相互署名が使えます", + "@crossSigningEnabled": { + "type": "text", + "placeholders": {} + }, + "Currently active": "現在アクティブです", + "@Currently active": { + "type": "text", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "text", + "placeholders": { + "date": {}, + "timeOfDay": {} + } + }, + "dateWithoutYear": "{month}-{day}", + "@dateWithoutYear": { + "type": "text", + "placeholders": { + "month": {}, + "day": {} + } + }, + "dateWithYear": "{year}-{month}-{day}", + "@dateWithYear": { + "type": "text", + "placeholders": { + "year": {}, + "month": {}, + "day": {} + } + }, + "Delete": "削除", + "@Delete": { + "type": "text", + "placeholders": {} + }, + "Delete message": "メッセージの削除", + "@Delete message": { + "type": "text", + "placeholders": {} + }, + "Deny": "拒否", + "@Deny": { + "type": "text", + "placeholders": {} + }, + "Device": "デバイス", + "@Device": { + "type": "text", + "placeholders": {} + }, + "Devices": "デバイス", + "@Devices": { + "type": "text", + "placeholders": {} + }, + "Discard picture": "画像を無視する", + "@Discard picture": { + "type": "text", + "placeholders": {} + }, + "Displayname has been changed": "表示名が変更されました", + "@Displayname has been changed": { + "type": "text", + "placeholders": {} + }, + "Download file": "ファイルのダウンロード", + "@Download file": { + "type": "text", + "placeholders": {} + }, + "Edit displayname": "表示名を編集", + "@Edit displayname": { + "type": "text", + "placeholders": {} + }, + "Emote Settings": "Emote設定", + "@Emote Settings": { + "type": "text", + "placeholders": {} + }, + "Emote shortcode": "Emoteショートコード", + "@Emote shortcode": { + "type": "text", + "placeholders": {} + }, + "emoteWarnNeedToPick": "Emoteショートコードと画像を選択してください!", + "@emoteWarnNeedToPick": { + "type": "text", + "placeholders": {} + }, + "emoteExists": "Emoteはすでに存在します!", + "@emoteExists": { + "type": "text", + "placeholders": {} + }, + "emoteInvalid": "不正なEmoteショートコード!", + "@emoteInvalid": { + "type": "text", + "placeholders": {} + }, + "Empty chat": "空のチャット", + "@Empty chat": { + "type": "text", + "placeholders": {} + }, + "You won't be able to disable the encryption anymore. Are you sure?": "一度暗号化を有効にするともとに戻せません。よろしいですか?", + "@You won't be able to disable the encryption anymore. Are you sure?": { + "type": "text", + "placeholders": {} + }, + "Encryption": "暗号化", + "@Encryption": { + "type": "text", + "placeholders": {} + }, + "Encryption algorithm": "暗号化アルゴリズム", + "@Encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "Encryption is not enabled": "暗号化されていません", + "@Encryption is not enabled": { + "type": "text", + "placeholders": {} + }, + "End-to-end encryption settings": "エンドツーエンド暗号化設定", + "@End-to-end encryption settings": { + "type": "text", + "placeholders": {} + }, + "Enter a group name": "グループ名を入力してください", + "@Enter a group name": { + "type": "text", + "placeholders": {} + }, + "Enter a username": "ユーザー名を入力してください", + "@Enter a username": { + "type": "text", + "placeholders": {} + }, + "Enter your homeserver": "ホームサーバーを入力してください", + "@Enter your homeserver": { + "type": "text", + "placeholders": {} + }, + "File name": "ファイル名", + "@File name": { + "type": "text", + "placeholders": {} + }, + "File size": "ファイルサイズ", + "@File size": { + "type": "text", + "placeholders": {} + }, + "FluffyChat": "FluffyChat", + "@FluffyChat": { + "type": "text", + "placeholders": {} + }, + "Forward": "進む", + "@Forward": { + "type": "text", + "placeholders": {} + }, + "Friday": "金曜日", + "@Friday": { + "type": "text", + "placeholders": {} + }, + "From joining": "参加時点から閲覧可能", + "@From joining": { + "type": "text", + "placeholders": {} + }, + "From the invitation": "招待時点から閲覧可能", + "@From the invitation": { + "type": "text", + "placeholders": {} + }, + "Group": "グループ", + "@Group": { + "type": "text", + "placeholders": {} + }, + "Group description": "グループの説明", + "@Group description": { + "type": "text", + "placeholders": {} + }, + "Group description has been changed": "グループの説明が変更されました", + "@Group description has been changed": { + "type": "text", + "placeholders": {} + }, + "Group is public": "グループは公開されています", + "@Group is public": { + "type": "text", + "placeholders": {} + }, + "groupWith": "{displayname}とグループを作成する", + "@groupWith": { + "type": "text", + "placeholders": { + "displayname": {} + } + }, + "Guests are forbidden": "ゲストは許可されていません", + "@Guests are forbidden": { + "type": "text", + "placeholders": {} + }, + "Guests can join": "ゲストが許可されています", + "@Guests can join": { + "type": "text", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{targetName}の招待を{username}が取り下げました", + "@hasWithdrawnTheInvitationFor": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Help": "ヘルプ", + "@Help": { + "type": "text", + "placeholders": {} + }, + "Homeserver is not compatible": "このホームサーバーは互換性がありません", + "@Homeserver is not compatible": { + "type": "text", + "placeholders": {} + }, + "ID": "ID", + "@ID": { + "type": "text", + "placeholders": {} + }, + "Identity": "アイデンティティ", + "@Identity": { + "type": "text", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "パスフレーズかリカバリーキーが間違っています", + "@incorrectPassphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Invite contact": "連絡先から招待する", + "@Invite contact": { + "type": "text", + "placeholders": {} + }, + "inviteContactToGroup": "連絡先から{groupName}に招待する", + "@inviteContactToGroup": { + "type": "text", + "placeholders": { + "groupName": {} + } + }, + "Invited": "招待されました", + "@Invited": { + "type": "text", + "placeholders": {} + }, + "inviteText": "{username}がFluffyChatにあなたを招待しました. \n1. FluffyChatをインストールしてください: http://fluffy.chat \n2. 新しくアカウントを作成するかサインインしてください\n3. 招待リンクを開いてください: {link}", + "@inviteText": { + "type": "text", + "placeholders": { + "username": {}, + "link": {} + } + }, + "invitedUser": "{username}が{targetName}を招待しました", + "@invitedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Invited users only": "招待されたユーザーのみ", + "@Invited users only": { + "type": "text", + "placeholders": {} + }, + "isDeviceKeyCorrect": "このデバイスキーは正しいですか?", + "@isDeviceKeyCorrect": { + "type": "text", + "placeholders": {} + }, + "is typing...": "入力しています...", + "@is typing...": { + "type": "text", + "placeholders": {} + }, + "Edit Jitsi instance": "Jitsiインスタンスを編集する", + "@Edit Jitsi instance": { + "type": "text", + "placeholders": {} + }, + "joinedTheChat": "{username}がチャットに参加しました", + "@joinedTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "keysCached": "鍵はキャッシュされたいます", + "@keysCached": { + "type": "text", + "placeholders": {} + }, + "keysMissing": "鍵がありません", + "@keysMissing": { + "type": "text", + "placeholders": {} + }, + "kicked": "{username}は{targetName}をキックしました", + "@kicked": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "kickedAndBanned": "{username}は{targetName}をキックしBANしました", + "@kickedAndBanned": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Kick from chat": "チャットからキックする", + "@Kick from chat": { + "type": "text", + "placeholders": {} + }, + "Leave": "退室する", + "@Leave": { + "type": "text", + "placeholders": {} + }, + "Left the chat": "退室しました", + "@Left the chat": { + "type": "text", + "placeholders": {} + }, + "Logout": "ログアウト", + "@Logout": { + "type": "text", + "placeholders": {} + }, + "userLeftTheChat": "{username}は退室しました", + "@userLeftTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "lastActiveAgo": "最終アクティブ: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "text", + "placeholders": { + "localizedTimeShort": {} + } + }, + "Last seen IP": "最終IP", + "@Last seen IP": { + "type": "text", + "placeholders": {} + }, + "License": "ライセンス", + "@License": { + "type": "text", + "placeholders": {} + }, + "Loading... Please wait": "読み込み中...お待ちください", + "@Loading... Please wait": { + "type": "text", + "placeholders": {} + }, + "Load more...": "更に読み込む...", + "@Load more...": { + "type": "text", + "placeholders": {} + }, + "loadCountMoreParticipants": "あと{count}名参加者を読み込む", + "@loadCountMoreParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Login": "ログイン", + "@Login": { + "type": "text", + "placeholders": {} + }, + "logInTo": "{homeserver}にログインする", + "@logInTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "Make a moderator": "モデレータにする", + "@Make a moderator": { + "type": "text", + "placeholders": {} + }, + "Make an admin": "管理者にする", + "@Make an admin": { + "type": "text", + "placeholders": {} + }, + "Make sure the identifier is valid": "識別子が正しいか確認してください", + "@Make sure the identifier is valid": { + "type": "text", + "placeholders": {} + }, + "Message will be removed for all participants": "メッセージはすべての参加者から消去されます", + "@Message will be removed for all participants": { + "type": "text", + "placeholders": {} + }, + "Moderator": "モデレータ", + "@Moderator": { + "type": "text", + "placeholders": {} + }, + "Monday": "月曜日", + "@Monday": { + "type": "text", + "placeholders": {} + }, + "Mute chat": "チャットのミュート", + "@Mute chat": { + "type": "text", + "placeholders": {} + }, + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": "現時点では、エンドツーエンドの暗号化を使用するにはPantalaimonが必要であることに注意してください。", + "@Please be aware that you need Pantalaimon to use end-to-end encryption for now.": { + "type": "text", + "placeholders": {} + }, + "New message in FluffyChat": "FluffyChatに新しいメッセージがあります", + "@New message in FluffyChat": { + "type": "text", + "placeholders": {} + }, + "New private chat": "新しいプライベートチャット", + "@New private chat": { + "type": "text", + "placeholders": {} + }, + "newVerificationRequest": "新しい認証リクエスト!", + "@newVerificationRequest": { + "type": "text", + "placeholders": {} + }, + "noCrossSignBootstrap": "FluffyChatは現在相互署名機能をサポートしていません。Elementから有効化してください。", + "@noCrossSignBootstrap": { + "type": "text", + "placeholders": {} + }, + "noMegolmBootstrap": "FluffyChatは現在鍵のオンラインバックアップの有効化をサポートしていません。Elementから有効化してください。", + "@noMegolmBootstrap": { + "type": "text", + "placeholders": {} + }, + "It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": "あなたのスマホにはグーグルサービスがないようですね。プライバシーを保護するための良い選択です!Push通知を受け取るにはmicroGを使うことを推奨しています: https://microg.org/", + "@It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": { + "type": "text", + "placeholders": {} + }, + "None": "なし", + "@None": { + "type": "text", + "placeholders": {} + }, + "No emotes found. 😕": "Emoteは見つかりませんでした😕", + "@No emotes found. 😕": { + "type": "text", + "placeholders": {} + }, + "No permission": "権限がありません", + "@No permission": { + "type": "text", + "placeholders": {} + }, + "No rooms found...": "部屋は見つかりませんでした...", + "@No rooms found...": { + "type": "text", + "placeholders": {} + }, + "Not supported in web": "ウェブではサポートされていません", + "@Not supported in web": { + "type": "text", + "placeholders": {} + }, + "numberSelected": "{number}選択されています", + "@numberSelected": { + "type": "text", + "placeholders": { + "number": {} + } + }, + "ok": "OK", + "@ok": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupDisabled": "オンライン鍵バックアップは使用されていません", + "@onlineKeyBackupDisabled": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "オンライン鍵バックアップは使用されています", + "@onlineKeyBackupEnabled": { + "type": "text", + "placeholders": {} + }, + "Oops something went wrong...": "おっと、何かがうまくいきませんでした...", + "@Oops something went wrong...": { + "type": "text", + "placeholders": {} + }, + "Open app to read messages": "アプリを開いてメッセージを確認してください", + "@Open app to read messages": { + "type": "text", + "placeholders": {} + }, + "Open camera": "カメラを開く", + "@Open camera": { + "type": "text", + "placeholders": {} + }, + "(Optional) Group name": "(任意)グループ名", + "@(Optional) Group name": { + "type": "text", + "placeholders": {} + }, + "Participating user devices": "ユーザーの使用しているデバイス", + "@Participating user devices": { + "type": "text", + "placeholders": {} + }, + "passphraseOrKey": "パスフレーズかリカバリーキー", + "@passphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Password": "パスワード", + "@Password": { + "type": "text", + "placeholders": {} + }, + "Pick image": "画像を選択してください", + "@Pick image": { + "type": "text", + "placeholders": {} + }, + "play": "{fileName}を再生する", + "@play": { + "type": "text", + "placeholders": { + "fileName": {} + } + }, + "Please choose a username": "ユーザー名を選択してください", + "@Please choose a username": { + "type": "text", + "placeholders": {} + }, + "Please enter a matrix identifier": "Matrix識別子を入力してください", + "@Please enter a matrix identifier": { + "type": "text", + "placeholders": {} + }, + "Please enter your password": "パスワードを入力してください", + "@Please enter your password": { + "type": "text", + "placeholders": {} + }, + "Please enter your username": "ユーザー名を入力してください", + "@Please enter your username": { + "type": "text", + "placeholders": {} + }, + "Public Rooms": "公開された部屋", + "@Public Rooms": { + "type": "text", + "placeholders": {} + }, + "Reject": "拒否", + "@Reject": { + "type": "text", + "placeholders": {} + }, + "Rejoin": "再参加", + "@Rejoin": { + "type": "text", + "placeholders": {} + }, + "Render rich message content": "リッチメッセージをレンダリングする", + "@Render rich message content": { + "type": "text", + "placeholders": {} + }, + "Recording": "録音中", + "@Recording": { + "type": "text", + "placeholders": {} + }, + "redactedAnEvent": "{username}がイベントを編集しました", + "@redactedAnEvent": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "rejectedTheInvitation": "{username}は招待を拒否しました", + "@rejectedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove all other devices": "他のデバイスをすべて削除", + "@Remove all other devices": { + "type": "text", + "placeholders": {} + }, + "removedBy": "{username}によって削除されました", + "@removedBy": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove device": "デバイスの削除", + "@Remove device": { + "type": "text", + "placeholders": {} + }, + "Remove exile": "追放を取り消し", + "@Remove exile": { + "type": "text", + "placeholders": {} + }, + "Revoke all permissions": "すべての権限を取り消す", + "@Revoke all permissions": { + "type": "text", + "placeholders": {} + }, + "Remove": "消去", + "@Remove": { + "type": "text", + "placeholders": {} + }, + "Remove message": "メッセージを削除", + "@Remove message": { + "type": "text", + "placeholders": {} + }, + "Reply": "返信", + "@Reply": { + "type": "text", + "placeholders": {} + }, + "Request permission": "権限を要求する", + "@Request permission": { + "type": "text", + "placeholders": {} + }, + "Request to read older messages": "過去のメッセージを読む権限を要求する", + "@Request to read older messages": { + "type": "text", + "placeholders": {} + }, + "Room has been upgraded": "部屋はアップグレードされました", + "@Room has been upgraded": { + "type": "text", + "placeholders": {} + }, + "Saturday": "土曜日", + "@Saturday": { + "type": "text", + "placeholders": {} + }, + "Share": "共有", + "@Share": { + "type": "text", + "placeholders": {} + }, + "sharedTheLocation": "{username}は現在地を共有しました", + "@sharedTheLocation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Search for a chat": "チャットを検索する", + "@Search for a chat": { + "type": "text", + "placeholders": {} + }, + "Seen a long time ago": "ずいぶん前", + "@Seen a long time ago": { + "type": "text", + "placeholders": {} + }, + "seenByUser": "{username}が既読", + "@seenByUser": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "seenByUserAndUser": "{username}と{username2}が既読", + "@seenByUserAndUser": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "seenByUserAndCountOthers": "{username}と他{count}名が既読", + "@seenByUserAndCountOthers": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "Send": "送信", + "@Send": { + "type": "text", + "placeholders": {} + }, + "Send a message": "メッセージを送信", + "@Send a message": { + "type": "text", + "placeholders": {} + }, + "Send file": "ファイルを送信", + "@Send file": { + "type": "text", + "placeholders": {} + }, + "Send image": "画像の送信", + "@Send image": { + "type": "text", + "placeholders": {} + }, + "sentAFile": "{username}はファイルを送信しました", + "@sentAFile": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAnAudio": "{username}は音声を送信しました", + "@sentAnAudio": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAPicture": "{username}は画像を送信しました", + "@sentAPicture": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentASticker": "{username}はステッカーを送信しました", + "@sentASticker": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAVideo": "{username}は動画を送信しました", + "@sentAVideo": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sessionVerified": "セッションは確認済みです", + "@sessionVerified": { + "type": "text", + "placeholders": {} + }, + "Set a profile picture": "プロフィール画像を設定する", + "@Set a profile picture": { + "type": "text", + "placeholders": {} + }, + "Set group description": "グループの説明を設定する", + "@Set group description": { + "type": "text", + "placeholders": {} + }, + "Set invitation link": "招待リンクを設定する", + "@Set invitation link": { + "type": "text", + "placeholders": {} + }, + "Set status": "ステータスの設定", + "@Set status": { + "type": "text", + "placeholders": {} + }, + "Settings": "設定", + "@Settings": { + "type": "text", + "placeholders": {} + }, + "Sign up": "サインアップ", + "@Sign up": { + "type": "text", + "placeholders": {} + }, + "Skip": "スキップ", + "@Skip": { + "type": "text", + "placeholders": {} + }, + "Change your style": "スタイルを変更する", + "@Change your style": { + "type": "text", + "placeholders": {} + }, + "System": "システム", + "@System": { + "type": "text", + "placeholders": {} + }, + "How are you today?": "お元気ですか?", + "@How are you today?": { + "type": "text", + "placeholders": {} + }, + "Light": "ライト", + "@Light": { + "type": "text", + "placeholders": {} + }, + "Dark": "ダーク", + "@Dark": { + "type": "text", + "placeholders": {} + }, + "Use Amoled compatible colors?": "有機EL(Amoled)対応の色にしますか?", + "@Use Amoled compatible colors?": { + "type": "text", + "placeholders": {} + }, + "Source code": "ソースコード", + "@Source code": { + "type": "text", + "placeholders": {} + }, + "Start your first chat :-)": "初めてのチャットを開始してください(^_^)", + "@Start your first chat :-)": { + "type": "text", + "placeholders": {} + }, + "Submit": "送信", + "@Submit": { + "type": "text", + "placeholders": {} + }, + "Sunday": "日曜日", + "@Sunday": { + "type": "text", + "placeholders": {} + }, + "Donate": "寄付する", + "@Donate": { + "type": "text", + "placeholders": {} + }, + "Tap to show menu": "メニューを表示するにはタップしてください", + "@Tap to show menu": { + "type": "text", + "placeholders": {} + }, + "They Don't Match": "違います", + "@They Don't Match": { + "type": "text", + "placeholders": {} + }, + "They Match": "一致しています", + "@They Match": { + "type": "text", + "placeholders": {} + }, + "This room has been archived.": "この部屋はアーカイブされています。", + "@This room has been archived.": { + "type": "text", + "placeholders": {} + }, + "Thursday": "木曜日", + "@Thursday": { + "type": "text", + "placeholders": {} + }, + "timeOfDay": "{hours24}:{minutes} {suffix}", + "@timeOfDay": { + "type": "text", + "placeholders": { + "hours12": {}, + "hours24": {}, + "minutes": {}, + "suffix": {} + } + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "text", + "placeholders": {} + }, + "Try to send again": "送信し直してみる", + "@Try to send again": { + "type": "text", + "placeholders": {} + }, + "Tuesday": "火曜日", + "@Tuesday": { + "type": "text", + "placeholders": {} + }, + "unbannedUser": "{username}が{targetName}のBANを解除しました", + "@unbannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Unblock Device": "デバイスをブロック解除する", + "@Unblock Device": { + "type": "text", + "placeholders": {} + }, + "Unmute chat": "チャットをミュート解除する", + "@Unmute chat": { + "type": "text", + "placeholders": {} + }, + "Unknown device": "未知デバイス", + "@Unknown device": { + "type": "text", + "placeholders": {} + }, + "Unknown encryption algorithm": "未知の暗号化アルゴリズム", + "@Unknown encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "unknownSessionVerify": "未知のセッションです。確認してください。", + "@unknownSessionVerify": { + "type": "text", + "placeholders": {} + }, + "unknownEvent": "未知のイベント'{type}'", + "@unknownEvent": { + "type": "text", + "placeholders": { + "type": {} + } + }, + "unreadChats": "{unreadCount}の未読メッセージ", + "@unreadChats": { + "type": "text", + "placeholders": { + "unreadCount": {} + } + }, + "unreadMessages": "{unreadEvents}件の未読メッセージ", + "@unreadMessages": { + "type": "text", + "placeholders": { + "unreadEvents": {} + } + }, + "unreadMessagesInChats": "{unreadChats}で{unreadEvents}件の未読メッセージ", + "@unreadMessagesInChats": { + "type": "text", + "placeholders": { + "unreadEvents": {}, + "unreadChats": {} + } + }, + "userAndOthersAreTyping": "{username}と他{count}名が入力しています...", + "@userAndOthersAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "userAndUserAreTyping": "{username}と{username2}が入力しています...", + "@userAndUserAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "Username": "ユーザー名", + "@Username": { + "type": "text", + "placeholders": {} + }, + "userIsTyping": "{username}が入力しています...", + "@userIsTyping": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "userSentUnknownEvent": "{username}は{type}イベントを送信しました", + "@userSentUnknownEvent": { + "type": "text", + "placeholders": { + "username": {}, + "type": {} + } + }, + "Verify": "確認", + "@Verify": { + "type": "text", + "placeholders": {} + }, + "verifyManual": "手動で確認", + "@verifyManual": { + "type": "text", + "placeholders": {} + }, + "verifiedSession": "セッションの確認ができました!", + "@verifiedSession": { + "type": "text", + "placeholders": {} + }, + "verifyStart": "確認を始める", + "@verifyStart": { + "type": "text", + "placeholders": {} + }, + "verifySuccess": "確認が完了しました!", + "@verifySuccess": { + "type": "text", + "placeholders": {} + }, + "verifyTitle": "他のアカウントを確認中", + "@verifyTitle": { + "type": "text", + "placeholders": {} + }, + "Verify User": "ユーザーの認証", + "@Verify User": { + "type": "text", + "placeholders": {} + }, + "Video call": "音声通話", + "@Video call": { + "type": "text", + "placeholders": {} + }, + "Visible for all participants": "すべての参加者が閲覧可能", + "@Visible for all participants": { + "type": "text", + "placeholders": {} + }, + "Visible for everyone": "すべての人が閲覧可能", + "@Visible for everyone": { + "type": "text", + "placeholders": {} + }, + "Visibility of the chat history": "チャット履歴の表示", + "@Visibility of the chat history": { + "type": "text", + "placeholders": {} + }, + "Voice message": "ボイスメッセージ", + "@Voice message": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "パートナーのリクエスト承諾待ちです...", + "@waitingPartnerAcceptRequest": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerEmoji": "パートナーの絵文字承諾待ちです...", + "@waitingPartnerEmoji": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerNumbers": "パートナーの数字承諾待ちです...", + "@waitingPartnerNumbers": { + "type": "text", + "placeholders": {} + }, + "Wallpaper": "壁紙", + "@Wallpaper": { + "type": "text", + "placeholders": {} + }, + "End to end encryption is currently in Beta! Use at your own risk!": "エンドツーエンド暗号化は現在ベータ版です!これは自分自身の責任で行ってください!", + "@End to end encryption is currently in Beta! Use at your own risk!": { + "type": "text", + "placeholders": {} + }, + "Wednesday": "水曜日", + "@Wednesday": { + "type": "text", + "placeholders": {} + }, + "Welcome to the cutest instant messenger in the matrix network.": "Matrixネットワークで一番かわいいチャットアプリへようこそ。", + "@Welcome to the cutest instant messenger in the matrix network.": { + "type": "text", + "placeholders": {} + }, + "Who is allowed to join this group": "誰がこのチャットに入れますか", + "@Who is allowed to join this group": { + "type": "text", + "placeholders": {} + }, + "Write a message...": "メッセージを入力してください...", + "@Write a message...": { + "type": "text", + "placeholders": {} + }, + "Yes": "はい", + "@Yes": { + "type": "text", + "placeholders": {} + }, + "You": "あなた", + "@You": { + "type": "text", + "placeholders": {} + }, + "You are invited to this chat": "チャットに招待されています", + "@You are invited to this chat": { + "type": "text", + "placeholders": {} + }, + "You are no longer participating in this chat": "あなたはもうこのチャットの参加者ではありません", + "@You are no longer participating in this chat": { + "type": "text", + "placeholders": {} + }, + "You cannot invite yourself": "自分自身を招待することはできません", + "@You cannot invite yourself": { + "type": "text", + "placeholders": {} + }, + "You have been banned from this chat": "チャットからBANされてしまいました", + "@You have been banned from this chat": { + "type": "text", + "placeholders": {} + }, + "Your own username": "あなたのユーザー名", + "@Your own username": { + "type": "text", + "placeholders": {} + } +} diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index 010e949..349eb91 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,10 +1,15 @@ { - "@@last_modified": "2020-05-15T15:34:50.065646", + "@@last_modified": "2020-06-25T16:02:16.297192", "About": "About", "@About": { "type": "text", "placeholders": {} }, + "Accept": "Accept", + "@Accept": { + "type": "text", + "placeholders": {} + }, "acceptedTheInvitation": "{username} accepted the invitation", "@acceptedTheInvitation": { "type": "text", @@ -74,6 +79,28 @@ "type": "text", "placeholders": {} }, + "askSSSSCache": "Please enter your secure store passphrase or recovery key to cache the keys.", + "@askSSSSCache": { + "type": "text", + "placeholders": {} + }, + "askSSSSSign": "To be able to sign the other person, please enter your secure store passphrase or recovery key.", + "@askSSSSSign": { + "type": "text", + "placeholders": {} + }, + "askSSSSVerify": "Please enter your secure store passphrase or recovery key to verify your session.", + "@askSSSSVerify": { + "type": "text", + "placeholders": {} + }, + "askVerificationRequest": "Accept this verification request from {username}?", + "@askVerificationRequest": { + "type": "text", + "placeholders": { + "username": {} + } + }, "Authentication": "Authentication", "@Authentication": { "type": "text", @@ -102,6 +129,11 @@ "targetName": {} } }, + "Block Device": "Block Device", + "@Block Device": { + "type": "text", + "placeholders": {} + }, "byDefaultYouWillBeConnectedTo": "By default you will be connected to {homeserver}", "@byDefaultYouWillBeConnectedTo": { "type": "text", @@ -109,6 +141,11 @@ "homeserver": {} } }, + "cachedKeys": "Successfully cached keys!", + "@cachedKeys": { + "type": "text", + "placeholders": {} + }, "Cancel": "Cancel", "@Cancel": { "type": "text", @@ -202,7 +239,7 @@ "joinRules": {} } }, - "changedTheProfileAvatar": "{username} changed the profile avatar", + "changedTheProfileAvatar": "{username} changed their avatar", "@changedTheProfileAvatar": { "type": "text", "placeholders": { @@ -273,6 +310,16 @@ "type": "text", "placeholders": {} }, + "compareEmojiMatch": "Compare and make sure the following emoji match those of the other device:", + "@compareEmojiMatch": { + "type": "text", + "placeholders": {} + }, + "compareNumbersMatch": "Compare and make sure the following numbers match those of the other device:", + "@compareNumbersMatch": { + "type": "text", + "placeholders": {} + }, "Confirm": "Confirm", "@Confirm": { "type": "text", @@ -354,8 +401,18 @@ "type": "text", "placeholders": {} }, - "Currenlty active": "Currenlty active", - "@Currenlty active": { + "crossSigningDisabled": "Cross-Signing is disabled", + "@crossSigningDisabled": { + "type": "text", + "placeholders": {} + }, + "crossSigningEnabled": "Cross-Signing is enabled", + "@crossSigningEnabled": { + "type": "text", + "placeholders": {} + }, + "Currently active": "Currently active", + "@Currently active": { "type": "text", "placeholders": {} }, @@ -464,6 +521,11 @@ "type": "text", "placeholders": {} }, + "Encryption": "Encryption", + "@Encryption": { + "type": "text", + "placeholders": {} + }, "Encryption algorithm": "Encryption algorithm", "@Encryption algorithm": { "type": "text", @@ -594,6 +656,11 @@ "type": "text", "placeholders": {} }, + "incorrectPassphraseOrKey": "Incorrect passphrase or recovery key", + "@incorrectPassphraseOrKey": { + "type": "text", + "placeholders": {} + }, "Invite contact": "Invite contact", "@Invite contact": { "type": "text", @@ -632,6 +699,11 @@ "type": "text", "placeholders": {} }, + "isDeviceKeyCorrect": "Is the following device key correct?", + "@isDeviceKeyCorrect": { + "type": "text", + "placeholders": {} + }, "is typing...": "is typing...", "@is typing...": { "type": "text", @@ -649,6 +721,16 @@ "username": {} } }, + "keysCached": "Keys are cached", + "@keysCached": { + "type": "text", + "placeholders": {} + }, + "keysMissing": "Keys are missing", + "@keysMissing": { + "type": "text", + "placeholders": {} + }, "kicked": "{username} kicked {targetName}", "@kicked": { "type": "text", @@ -788,6 +870,21 @@ "type": "text", "placeholders": {} }, + "newVerificationRequest": "New verification request!", + "@newVerificationRequest": { + "type": "text", + "placeholders": {} + }, + "noCrossSignBootstrap": "Fluffychat currently does not support enabling Cross-Signing. Please enable it from within Element.", + "@noCrossSignBootstrap": { + "type": "text", + "placeholders": {} + }, + "noMegolmBootstrap": "Fluffychat currently does not support enabling Online Key Backup. Please enable it from within Element.", + "@noMegolmBootstrap": { + "type": "text", + "placeholders": {} + }, "It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": "It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/", "@It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": { "type": "text", @@ -830,6 +927,16 @@ "type": "text", "placeholders": {} }, + "onlineKeyBackupDisabled": "Online Key Backup is disabled", + "@onlineKeyBackupDisabled": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "Online Key Backup is enabled", + "@onlineKeyBackupEnabled": { + "type": "text", + "placeholders": {} + }, "Oops something went wrong...": "Oops something went wrong...", "@Oops something went wrong...": { "type": "text", @@ -855,6 +962,11 @@ "type": "text", "placeholders": {} }, + "passphraseOrKey": "passphrase or recovery key", + "@passphraseOrKey": { + "type": "text", + "placeholders": {} + }, "Password": "Password", "@Password": { "type": "text", @@ -897,6 +1009,11 @@ "type": "text", "placeholders": {} }, + "Reject": "Reject", + "@Reject": { + "type": "text", + "placeholders": {} + }, "Rejoin": "Rejoin", "@Rejoin": { "type": "text", @@ -978,6 +1095,11 @@ "type": "text", "placeholders": {} }, + "Room has been upgraded": "Room has been upgraded", + "@Room has been upgraded": { + "type": "text", + "placeholders": {} + }, "Saturday": "Saturday", "@Saturday": { "type": "text", @@ -1083,6 +1205,11 @@ "username": {} } }, + "sessionVerified": "Session is verified", + "@sessionVerified": { + "type": "text", + "placeholders": {} + }, "Set a profile picture": "Set a profile picture", "@Set a profile picture": { "type": "text", @@ -1113,6 +1240,11 @@ "type": "text", "placeholders": {} }, + "Skip": "Skip", + "@Skip": { + "type": "text", + "placeholders": {} + }, "Change your style": "Change your style", "@Change your style": { "type": "text", @@ -1153,6 +1285,11 @@ "type": "text", "placeholders": {} }, + "Submit": "Submit", + "@Submit": { + "type": "text", + "placeholders": {} + }, "Sunday": "Sunday", "@Sunday": { "type": "text", @@ -1168,6 +1305,16 @@ "type": "text", "placeholders": {} }, + "They Don't Match": "They Don't Match", + "@They Don't Match": { + "type": "text", + "placeholders": {} + }, + "They Match": "They Match", + "@They Match": { + "type": "text", + "placeholders": {} + }, "This room has been archived.": "This room has been archived.", "@This room has been archived.": { "type": "text", @@ -1212,6 +1359,11 @@ "targetName": {} } }, + "Unblock Device": "Unblock Device", + "@Unblock Device": { + "type": "text", + "placeholders": {} + }, "Unmute chat": "Unmute chat", "@Unmute chat": { "type": "text", @@ -1227,6 +1379,11 @@ "type": "text", "placeholders": {} }, + "unknownSessionVerify": "Unknown session, please verify", + "@unknownSessionVerify": { + "type": "text", + "placeholders": {} + }, "unknownEvent": "Unknown event '{type}'", "@unknownEvent": { "type": "text", @@ -1297,6 +1454,36 @@ "type": "text", "placeholders": {} }, + "verifyManual": "Verify Manually", + "@verifyManual": { + "type": "text", + "placeholders": {} + }, + "verifiedSession": "Successfully verified session!", + "@verifiedSession": { + "type": "text", + "placeholders": {} + }, + "verifyStart": "Start Verification", + "@verifyStart": { + "type": "text", + "placeholders": {} + }, + "verifySuccess": "You successfully verified!", + "@verifySuccess": { + "type": "text", + "placeholders": {} + }, + "verifyTitle": "Verifying other account", + "@verifyTitle": { + "type": "text", + "placeholders": {} + }, + "Verify User": "Verify User", + "@Verify User": { + "type": "text", + "placeholders": {} + }, "Video call": "Video call", "@Video call": { "type": "text", @@ -1322,6 +1509,21 @@ "type": "text", "placeholders": {} }, + "waitingPartnerAcceptRequest": "Waiting for partner to accept the request...", + "@waitingPartnerAcceptRequest": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerEmoji": "Waiting for partner to accept the emoji...", + "@waitingPartnerEmoji": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerNumbers": "Waiting for partner to accept the numbers...", + "@waitingPartnerNumbers": { + "type": "text", + "placeholders": {} + }, "Wallpaper": "Wallpaper", "@Wallpaper": { "type": "text", @@ -1387,4 +1589,4 @@ "type": "text", "placeholders": {} } -} \ No newline at end of file +} diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb new file mode 100644 index 0000000..b78197b --- /dev/null +++ b/lib/l10n/intl_ru.arb @@ -0,0 +1,1592 @@ +{ + "@@last_modified": "2020-06-25T16:02:16.297192", + "About": "О приложении", + "@About": { + "type": "text", + "placeholders": {} + }, + "Accept": "Принять", + "@Accept": { + "type": "text", + "placeholders": {} + }, + "acceptedTheInvitation": "{username} принял(а) приглашение", + "@acceptedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Account": "Учётная запись", + "@Account": { + "type": "text", + "placeholders": {} + }, + "Account informations": "Сведения об учётной записи", + "@Account informations": { + "type": "text", + "placeholders": {} + }, + "activatedEndToEndEncryption": "{username} активировал(а) сквозное шифрование", + "@activatedEndToEndEncryption": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Add a group description": "Добавить описание группы", + "@Add a group description": { + "type": "text", + "placeholders": {} + }, + "Admin": "Администратор", + "@Admin": { + "type": "text", + "placeholders": {} + }, + "alias": "псевдоним", + "@alias": { + "type": "text", + "placeholders": {} + }, + "Already have an account?": "Уже есть учётная запись?", + "@Already have an account?": { + "type": "text", + "placeholders": {} + }, + "Anyone can join": "Каждый может присоединиться", + "@Anyone can join": { + "type": "text", + "placeholders": {} + }, + "Archive": "Архив", + "@Archive": { + "type": "text", + "placeholders": {} + }, + "Archived Room": "Архивированная комната", + "@Archived Room": { + "type": "text", + "placeholders": {} + }, + "Are guest users allowed to join": "Разрешено ли гостям присоединяться", + "@Are guest users allowed to join": { + "type": "text", + "placeholders": {} + }, + "Are you sure?": "Вы уверены?", + "@Are you sure?": { + "type": "text", + "placeholders": {} + }, + "askSSSSCache": "Пожалуйста, введите секретную фразу безопасного хранилища или ключ восстановления для кеширования ключей.", + "@askSSSSCache": { + "type": "text", + "placeholders": {} + }, + "askSSSSSign": "Чтобы иметь возможность подписать другое лицо, пожалуйста, введите пароль или ключ восстановления вашего безопасного хранилища.", + "@askSSSSSign": { + "type": "text", + "placeholders": {} + }, + "askSSSSVerify": "Пожалуйста, введите вашу безопасную парольную фразу или ключ восстановления, чтобы подтвердить ваш сеанс.", + "@askSSSSVerify": { + "type": "text", + "placeholders": {} + }, + "askVerificationRequest": "Принять этот запрос подтверждения от {username}?", + "@askVerificationRequest": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Authentication": "Аутентификация", + "@Authentication": { + "type": "text", + "placeholders": {} + }, + "Avatar has been changed": "Аватар был изменен", + "@Avatar has been changed": { + "type": "text", + "placeholders": {} + }, + "Ban from chat": "Бан чата", + "@Ban from chat": { + "type": "text", + "placeholders": {} + }, + "Banned": "Забанен", + "@Banned": { + "type": "text", + "placeholders": {} + }, + "bannedUser": "{username} забанил(а) {targetName}", + "@bannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Block Device": "Заблокировать устройство", + "@Block Device": { + "type": "text", + "placeholders": {} + }, + "byDefaultYouWillBeConnectedTo": "По умолчанию вы будете подключены к {homeserver}", + "@byDefaultYouWillBeConnectedTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "cachedKeys": "Ключи успешно кэшированы!", + "@cachedKeys": { + "type": "text", + "placeholders": {} + }, + "Cancel": "Отмена", + "@Cancel": { + "type": "text", + "placeholders": {} + }, + "changedTheChatAvatar": "{username} изменил(а) аватар чата", + "@changedTheChatAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheChatNameTo": "{username} изменил(а) имя чата на: '{chatname}'", + "@changedTheChatNameTo": { + "type": "text", + "placeholders": { + "username": {}, + "chatname": {} + } + }, + "changedTheChatDescriptionTo": "{username} изменил(а) описание чата на: '{description}'", + "@changedTheChatDescriptionTo": { + "type": "text", + "placeholders": { + "username": {}, + "description": {} + } + }, + "changedTheChatPermissions": "{username} изменил(а) права чата", + "@changedTheChatPermissions": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheDisplaynameTo": "{username} изменил(а) отображаемое имя на: {displayname}", + "@changedTheDisplaynameTo": { + "type": "text", + "placeholders": { + "username": {}, + "displayname": {} + } + }, + "Change the homeserver": "Изменить домашний сервер", + "@Change the homeserver": { + "type": "text", + "placeholders": {} + }, + "changedTheGuestAccessRules": "{username} изменил(а) правила гостевого доступа", + "@changedTheGuestAccessRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheGuestAccessRulesTo": "{username} изменил(а) правила гостевого доступа на: {rules}", + "@changedTheGuestAccessRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheHistoryVisibility": "{username} изменил(а) видимость истории", + "@changedTheHistoryVisibility": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheHistoryVisibilityTo": "{username} изменил(а) видимость истории на: {rules}", + "@changedTheHistoryVisibilityTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheJoinRules": "{username} изменил(а) правила присоединения", + "@changedTheJoinRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheJoinRulesTo": "{username} изменил(а) правила присоединения на: {joinRules}", + "@changedTheJoinRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "joinRules": {} + } + }, + "changedTheProfileAvatar": "{username} сменил(а) свой аватар", + "@changedTheProfileAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomAliases": "{username} изменил(а) псевдонимы комнаты", + "@changedTheRoomAliases": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomInvitationLink": "{username} изменил(а) ссылку приглашения", + "@changedTheRoomInvitationLink": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Changelog": "Изменения", + "@Changelog": { + "type": "text", + "placeholders": {} + }, + "Change the name of the group": "Изменить название группы", + "@Change the name of the group": { + "type": "text", + "placeholders": {} + }, + "Change wallpaper": "Сменить обои", + "@Change wallpaper": { + "type": "text", + "placeholders": {} + }, + "Change the server": "Сменить сервер", + "@Change the server": { + "type": "text", + "placeholders": {} + }, + "The encryption has been corrupted": "Шифрование было повреждено", + "@The encryption has been corrupted": { + "type": "text", + "placeholders": {} + }, + "Chat": "Чат", + "@Chat": { + "type": "text", + "placeholders": {} + }, + "Chat details": "Детали чата", + "@Chat details": { + "type": "text", + "placeholders": {} + }, + "Choose a strong password": "Выберите надёжный пароль", + "@Choose a strong password": { + "type": "text", + "placeholders": {} + }, + "Choose a username": "Выберете имя пользователя", + "@Choose a username": { + "type": "text", + "placeholders": {} + }, + "Close": "Закрыть", + "@Close": { + "type": "text", + "placeholders": {} + }, + "compareEmojiMatch": "Сравните и убедитесь, что следующие эмодзи соответствуют таковым на другом устройстве:", + "@compareEmojiMatch": { + "type": "text", + "placeholders": {} + }, + "compareNumbersMatch": "Сравните и убедитесь, что следующие числа соответствуют числам на другом устройстве:", + "@compareNumbersMatch": { + "type": "text", + "placeholders": {} + }, + "Confirm": "Подтвердить", + "@Confirm": { + "type": "text", + "placeholders": {} + }, + "Connect": "Присоединиться", + "@Connect": { + "type": "text", + "placeholders": {} + }, + "Connection attempt failed": "Попытка подключения не удалась", + "@Connection attempt failed": { + "type": "text", + "placeholders": {} + }, + "Contact has been invited to the group": "Контакт был приглашен в группу", + "@Contact has been invited to the group": { + "type": "text", + "placeholders": {} + }, + "Content viewer": "Просмотр содержимого", + "@Content viewer": { + "type": "text", + "placeholders": {} + }, + "Copied to clipboard": "Скопировано в буфер обмена", + "@Copied to clipboard": { + "type": "text", + "placeholders": {} + }, + "Copy": "Скопировать", + "@Copy": { + "type": "text", + "placeholders": {} + }, + "couldNotDecryptMessage": "Не удалось расшифровать сообщение: {error}", + "@couldNotDecryptMessage": { + "type": "text", + "placeholders": { + "error": {} + } + }, + "Could not set avatar": "Не удалось установить аватар", + "@Could not set avatar": { + "type": "text", + "placeholders": {} + }, + "Could not set displayname": "Не удалось установить отображаемое имя", + "@Could not set displayname": { + "type": "text", + "placeholders": {} + }, + "countParticipants": "{count} участника(-ов)", + "@countParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Create": "Создать", + "@Create": { + "type": "text", + "placeholders": {} + }, + "Create account now": "Создать учётную запись сейчас", + "@Create account now": { + "type": "text", + "placeholders": {} + }, + "createdTheChat": "{username} создал(а) чат", + "@createdTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Create new group": "Создать новую группу", + "@Create new group": { + "type": "text", + "placeholders": {} + }, + "crossSigningDisabled": "Кросс-подпись отключена", + "@crossSigningDisabled": { + "type": "text", + "placeholders": {} + }, + "crossSigningEnabled": "Кросс-подпись включена", + "@crossSigningEnabled": { + "type": "text", + "placeholders": {} + }, + "Currently active": "В настоящее время активен", + "@Currently active": { + "type": "text", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "text", + "placeholders": { + "date": {}, + "timeOfDay": {} + } + }, + "dateWithoutYear": "{day}. {month}", + "@dateWithoutYear": { + "type": "text", + "placeholders": { + "month": {}, + "day": {} + } + }, + "dateWithYear": "{day}. {month}. {year}", + "@dateWithYear": { + "type": "text", + "placeholders": { + "year": {}, + "month": {}, + "day": {} + } + }, + "Delete": "Удалить", + "@Delete": { + "type": "text", + "placeholders": {} + }, + "Delete message": "Удалить сообщение", + "@Delete message": { + "type": "text", + "placeholders": {} + }, + "Deny": "Отклонить", + "@Deny": { + "type": "text", + "placeholders": {} + }, + "Device": "Устройство", + "@Device": { + "type": "text", + "placeholders": {} + }, + "Devices": "Устройства", + "@Devices": { + "type": "text", + "placeholders": {} + }, + "Discard picture": "Сбросить картинку", + "@Discard picture": { + "type": "text", + "placeholders": {} + }, + "Displayname has been changed": "Отображаемое имя было изменено", + "@Displayname has been changed": { + "type": "text", + "placeholders": {} + }, + "Download file": "Скачать файл", + "@Download file": { + "type": "text", + "placeholders": {} + }, + "Edit displayname": "Изменить отображаемое имя", + "@Edit displayname": { + "type": "text", + "placeholders": {} + }, + "Emote Settings": "Настройки смайликов", + "@Emote Settings": { + "type": "text", + "placeholders": {} + }, + "Emote shortcode": "Краткий код для смайлика", + "@Emote shortcode": { + "type": "text", + "placeholders": {} + }, + "emoteWarnNeedToPick": "Вам нужно выбрать краткий код смайлика и картинку!", + "@emoteWarnNeedToPick": { + "type": "text", + "placeholders": {} + }, + "emoteExists": "Смайлик уже существует!", + "@emoteExists": { + "type": "text", + "placeholders": {} + }, + "emoteInvalid": "Недопустимый краткий код смайлика!", + "@emoteInvalid": { + "type": "text", + "placeholders": {} + }, + "Empty chat": "Пустой чат", + "@Empty chat": { + "type": "text", + "placeholders": {} + }, + "You won't be able to disable the encryption anymore. Are you sure?": "Вы больше не сможете отключить шифрование. Вы уверены?", + "@You won't be able to disable the encryption anymore. Are you sure?": { + "type": "text", + "placeholders": {} + }, + "Encryption": "Шифрование", + "@Encryption": { + "type": "text", + "placeholders": {} + }, + "Encryption algorithm": "Алгоритм шифрования", + "@Encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "Encryption is not enabled": "Шифрование не включено", + "@Encryption is not enabled": { + "type": "text", + "placeholders": {} + }, + "End-to-end encryption settings": "Сквозные настройки шифрования", + "@End-to-end encryption settings": { + "type": "text", + "placeholders": {} + }, + "Enter a group name": "Введите название группы", + "@Enter a group name": { + "type": "text", + "placeholders": {} + }, + "Enter a username": "Введите имя пользователя", + "@Enter a username": { + "type": "text", + "placeholders": {} + }, + "Enter your homeserver": "Введите ваш домашний сервер", + "@Enter your homeserver": { + "type": "text", + "placeholders": {} + }, + "File name": "Имя файла", + "@File name": { + "type": "text", + "placeholders": {} + }, + "File size": "Размер файла", + "@File size": { + "type": "text", + "placeholders": {} + }, + "FluffyChat": "FluffyChat", + "@FluffyChat": { + "type": "text", + "placeholders": {} + }, + "Forward": "Переслать", + "@Forward": { + "type": "text", + "placeholders": {} + }, + "Friday": "Пятница", + "@Friday": { + "type": "text", + "placeholders": {} + }, + "From joining": "С момента присоединения", + "@From joining": { + "type": "text", + "placeholders": {} + }, + "From the invitation": "С момента приглашения", + "@From the invitation": { + "type": "text", + "placeholders": {} + }, + "Group": "Группа", + "@Group": { + "type": "text", + "placeholders": {} + }, + "Group description": "Описание группы", + "@Group description": { + "type": "text", + "placeholders": {} + }, + "Group description has been changed": "Описание группы было изменено", + "@Group description has been changed": { + "type": "text", + "placeholders": {} + }, + "Group is public": "Публичная группа", + "@Group is public": { + "type": "text", + "placeholders": {} + }, + "groupWith": "Группа с {displayname}", + "@groupWith": { + "type": "text", + "placeholders": { + "displayname": {} + } + }, + "Guests are forbidden": "Гости запрещены", + "@Guests are forbidden": { + "type": "text", + "placeholders": {} + }, + "Guests can join": "Гости могут присоединиться", + "@Guests can join": { + "type": "text", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{username} отозвал(а) приглашение для {targetName}", + "@hasWithdrawnTheInvitationFor": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Help": "Помощь", + "@Help": { + "type": "text", + "placeholders": {} + }, + "Homeserver is not compatible": "Домашний сервер не совместим", + "@Homeserver is not compatible": { + "type": "text", + "placeholders": {} + }, + "ID": "ID", + "@ID": { + "type": "text", + "placeholders": {} + }, + "Identity": "Идентификация", + "@Identity": { + "type": "text", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Неверный пароль или ключ восстановления", + "@incorrectPassphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Invite contact": "Пригласить контакт", + "@Invite contact": { + "type": "text", + "placeholders": {} + }, + "inviteContactToGroup": "Пригласить контакт в {groupName}", + "@inviteContactToGroup": { + "type": "text", + "placeholders": { + "groupName": {} + } + }, + "Invited": "Приглашён", + "@Invited": { + "type": "text", + "placeholders": {} + }, + "inviteText": "{username} пригласил(а) вас в FluffyChat. \n1. Установите FluffyChat: http://fluffy.chat \n2. Зарегистрируйтесь или войдите \n3. Откройте ссылку приглашения: {link}", + "@inviteText": { + "type": "text", + "placeholders": { + "username": {}, + "link": {} + } + }, + "invitedUser": "{username} пригласил(а) {targetName}", + "@invitedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Invited users only": "Только приглашённым пользователям", + "@Invited users only": { + "type": "text", + "placeholders": {} + }, + "isDeviceKeyCorrect": "Правильно ли указан следующий ключ устройства?", + "@isDeviceKeyCorrect": { + "type": "text", + "placeholders": {} + }, + "is typing...": "Печатает...", + "@is typing...": { + "type": "text", + "placeholders": {} + }, + "Edit Jitsi instance": "Изменить экземпляр Jitsi", + "@Edit Jitsi instance": { + "type": "text", + "placeholders": {} + }, + "joinedTheChat": "{username} присоединился(-ась) к чату", + "@joinedTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "keysCached": "Ключи кэшированы", + "@keysCached": { + "type": "text", + "placeholders": {} + }, + "keysMissing": "Ключи отсутствуют", + "@keysMissing": { + "type": "text", + "placeholders": {} + }, + "kicked": "{username} исключил(а) {targetName}", + "@kicked": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "kickedAndBanned": "{username} исключил(а) и забанил(а) {targetName}", + "@kickedAndBanned": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Kick from chat": "Исключить из чата", + "@Kick from chat": { + "type": "text", + "placeholders": {} + }, + "Leave": "Покинуть", + "@Leave": { + "type": "text", + "placeholders": {} + }, + "Left the chat": "Покинуть чат", + "@Left the chat": { + "type": "text", + "placeholders": {} + }, + "Logout": "Выйти", + "@Logout": { + "type": "text", + "placeholders": {} + }, + "userLeftTheChat": "{username} покинул(а) чат", + "@userLeftTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "lastActiveAgo": "Последнее посещение: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "text", + "placeholders": { + "localizedTimeShort": {} + } + }, + "Last seen IP": "Последний увиденный IP", + "@Last seen IP": { + "type": "text", + "placeholders": {} + }, + "License": "Лицензия", + "@License": { + "type": "text", + "placeholders": {} + }, + "Loading... Please wait": "Загрузка... Пожалуйста подождите", + "@Loading... Please wait": { + "type": "text", + "placeholders": {} + }, + "Load more...": "Загрузить больше...", + "@Load more...": { + "type": "text", + "placeholders": {} + }, + "loadCountMoreParticipants": "Загрузить еще {count} участников", + "@loadCountMoreParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Login": "Вход", + "@Login": { + "type": "text", + "placeholders": {} + }, + "logInTo": "Войти в {homeserver}", + "@logInTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "Make a moderator": "Сделать модератором", + "@Make a moderator": { + "type": "text", + "placeholders": {} + }, + "Make an admin": "Сделать администратором", + "@Make an admin": { + "type": "text", + "placeholders": {} + }, + "Make sure the identifier is valid": "Убедитесь, что идентификатор действителен", + "@Make sure the identifier is valid": { + "type": "text", + "placeholders": {} + }, + "Message will be removed for all participants": "Сообщение будет удалено для всех участников", + "@Message will be removed for all participants": { + "type": "text", + "placeholders": {} + }, + "Moderator": "Модератор", + "@Moderator": { + "type": "text", + "placeholders": {} + }, + "Monday": "Понедельник", + "@Monday": { + "type": "text", + "placeholders": {} + }, + "Mute chat": "Отключить уведомления", + "@Mute chat": { + "type": "text", + "placeholders": {} + }, + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": "Помните, что вам нужен Pantalaimon для использования сквозного шифрования.", + "@Please be aware that you need Pantalaimon to use end-to-end encryption for now.": { + "type": "text", + "placeholders": {} + }, + "New message in FluffyChat": "Новое сообщение в FluffyChat", + "@New message in FluffyChat": { + "type": "text", + "placeholders": {} + }, + "New private chat": "Новый приватный чат", + "@New private chat": { + "type": "text", + "placeholders": {} + }, + "newVerificationRequest": "Новый запрос на подтверждение!", + "@newVerificationRequest": { + "type": "text", + "placeholders": {} + }, + "noCrossSignBootstrap": "Fluffychat в настоящее время не поддерживает включение кросс-подписи. Пожалуйста, включите его в Element.", + "@noCrossSignBootstrap": { + "type": "text", + "placeholders": {} + }, + "noMegolmBootstrap": "В настоящее время Fluffychat не поддерживает функцию резервного копирования онлайн-ключей. Пожалуйста, включите его из Element.", + "@noMegolmBootstrap": { + "type": "text", + "placeholders": {} + }, + "It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": "Похоже, у вас нет служб Google на вашем телефоне. Это хорошее решение для вашей конфиденциальности! Для получения push-уведомлений в FluffyChat мы рекомендуем использовать microG: https://microg.org/", + "@It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": { + "type": "text", + "placeholders": {} + }, + "None": "Ничего", + "@None": { + "type": "text", + "placeholders": {} + }, + "No emotes found. 😕": "Смайликов не найдено. 😕", + "@No emotes found. 😕": { + "type": "text", + "placeholders": {} + }, + "No permission": "Нет разрешений", + "@No permission": { + "type": "text", + "placeholders": {} + }, + "No rooms found...": "Комнаты не найдены...", + "@No rooms found...": { + "type": "text", + "placeholders": {} + }, + "Not supported in web": "Не поддерживается в веб-версии", + "@Not supported in web": { + "type": "text", + "placeholders": {} + }, + "numberSelected": "{number} выбрано", + "@numberSelected": { + "type": "text", + "placeholders": { + "number": {} + } + }, + "ok": "ok", + "@ok": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupDisabled": "Резервное копирование онлайн-ключей отключено", + "@onlineKeyBackupDisabled": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "Резервное копирование онлайн ключей включено", + "@onlineKeyBackupEnabled": { + "type": "text", + "placeholders": {} + }, + "Oops something went wrong...": "Упс! Что-то пошло не так...", + "@Oops something went wrong...": { + "type": "text", + "placeholders": {} + }, + "Open app to read messages": "Откройте приложение для чтения сообщений", + "@Open app to read messages": { + "type": "text", + "placeholders": {} + }, + "Open camera": "Открыть камеру", + "@Open camera": { + "type": "text", + "placeholders": {} + }, + "(Optional) Group name": "(Необязательно) Название группы", + "@(Optional) Group name": { + "type": "text", + "placeholders": {} + }, + "Participating user devices": "Участвующие устройства", + "@Participating user devices": { + "type": "text", + "placeholders": {} + }, + "passphraseOrKey": "пароль или ключ восстановления", + "@passphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Password": "Пароль", + "@Password": { + "type": "text", + "placeholders": {} + }, + "Pick image": "Выбрать картинку", + "@Pick image": { + "type": "text", + "placeholders": {} + }, + "play": "Играть {fileName}", + "@play": { + "type": "text", + "placeholders": { + "fileName": {} + } + }, + "Please choose a username": "Пожалуйста, выберите имя пользователя", + "@Please choose a username": { + "type": "text", + "placeholders": {} + }, + "Please enter a matrix identifier": "Пожалуйста, введите matrix идентификатор", + "@Please enter a matrix identifier": { + "type": "text", + "placeholders": {} + }, + "Please enter your password": "Пожалуйста введите ваш пароль", + "@Please enter your password": { + "type": "text", + "placeholders": {} + }, + "Please enter your username": "Пожалуйста, введите имя пользователя", + "@Please enter your username": { + "type": "text", + "placeholders": {} + }, + "Public Rooms": "Публичные комнаты", + "@Public Rooms": { + "type": "text", + "placeholders": {} + }, + "Reject": "Отклонить", + "@Reject": { + "type": "text", + "placeholders": {} + }, + "Rejoin": "Перезайти", + "@Rejoin": { + "type": "text", + "placeholders": {} + }, + "Render rich message content": "Показать отформатированные сообщения", + "@Render rich message content": { + "type": "text", + "placeholders": {} + }, + "Recording": "Запись", + "@Recording": { + "type": "text", + "placeholders": {} + }, + "redactedAnEvent": "{username} отредактировал(а) событие", + "@redactedAnEvent": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "rejectedTheInvitation": "{username} отклонил(а) приглашение", + "@rejectedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove all other devices": "Удалить все другие устройства", + "@Remove all other devices": { + "type": "text", + "placeholders": {} + }, + "removedBy": "Удалено пользователем {username}", + "@removedBy": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove device": "Удалить устройство", + "@Remove device": { + "type": "text", + "placeholders": {} + }, + "Remove exile": "Удалить ссылку", + "@Remove exile": { + "type": "text", + "placeholders": {} + }, + "Revoke all permissions": "Отменить все разрешения", + "@Revoke all permissions": { + "type": "text", + "placeholders": {} + }, + "Remove": "Удалить", + "@Remove": { + "type": "text", + "placeholders": {} + }, + "Remove message": "Удалить сообщение", + "@Remove message": { + "type": "text", + "placeholders": {} + }, + "Reply": "Ответить", + "@Reply": { + "type": "text", + "placeholders": {} + }, + "Request permission": "Запросить разрешение", + "@Request permission": { + "type": "text", + "placeholders": {} + }, + "Request to read older messages": "Запросить доступ к предыдущим сообщениям", + "@Request to read older messages": { + "type": "text", + "placeholders": {} + }, + "Room has been upgraded": "Комната обновлена", + "@Room has been upgraded": { + "type": "text", + "placeholders": {} + }, + "Saturday": "Суббота", + "@Saturday": { + "type": "text", + "placeholders": {} + }, + "Share": "Поделиться", + "@Share": { + "type": "text", + "placeholders": {} + }, + "sharedTheLocation": "{username} поделился(-ась) местоположением", + "@sharedTheLocation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Search for a chat": "Поиск чата", + "@Search for a chat": { + "type": "text", + "placeholders": {} + }, + "Seen a long time ago": "Просматривали давно", + "@Seen a long time ago": { + "type": "text", + "placeholders": {} + }, + "seenByUser": "Просмотрено пользователем {username}", + "@seenByUser": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "seenByUserAndUser": "Просмотрено пользователями {username} и {username2}", + "@seenByUserAndUser": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "seenByUserAndCountOthers": "Просмотрено пользователями {username} и {count} другими", + "@seenByUserAndCountOthers": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "Send": "Отправить", + "@Send": { + "type": "text", + "placeholders": {} + }, + "Send a message": "Отправить сообщение", + "@Send a message": { + "type": "text", + "placeholders": {} + }, + "Send file": "Отправить файл", + "@Send file": { + "type": "text", + "placeholders": {} + }, + "Send image": "Отправить картинку", + "@Send image": { + "type": "text", + "placeholders": {} + }, + "sentAFile": "{username} отправил(а) файл", + "@sentAFile": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAnAudio": "{username} отправил(а) аудио", + "@sentAnAudio": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAPicture": "{username} отправил(а) картинку", + "@sentAPicture": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentASticker": "{username} отправил(а) стикер", + "@sentASticker": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAVideo": "{username} отправил(а) видео", + "@sentAVideo": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sessionVerified": "Сессия подтверждена", + "@sessionVerified": { + "type": "text", + "placeholders": {} + }, + "Set a profile picture": "Установить изображение профиля", + "@Set a profile picture": { + "type": "text", + "placeholders": {} + }, + "Set group description": "Задать описание группы", + "@Set group description": { + "type": "text", + "placeholders": {} + }, + "Set invitation link": "Установить ссылку для приглашения", + "@Set invitation link": { + "type": "text", + "placeholders": {} + }, + "Set status": "Задать статус", + "@Set status": { + "type": "text", + "placeholders": {} + }, + "Settings": "Настройки", + "@Settings": { + "type": "text", + "placeholders": {} + }, + "Sign up": "Зарегистрироваться", + "@Sign up": { + "type": "text", + "placeholders": {} + }, + "Skip": "Пропустить", + "@Skip": { + "type": "text", + "placeholders": {} + }, + "Change your style": "Изменить свой стиль", + "@Change your style": { + "type": "text", + "placeholders": {} + }, + "System": "Системный", + "@System": { + "type": "text", + "placeholders": {} + }, + "How are you today?": "Как у вас сегодня дела?", + "@How are you today?": { + "type": "text", + "placeholders": {} + }, + "Light": "Светлый", + "@Light": { + "type": "text", + "placeholders": {} + }, + "Dark": "Тёмный", + "@Dark": { + "type": "text", + "placeholders": {} + }, + "Use Amoled compatible colors?": "Использовать Amoled совместимые цвета?", + "@Use Amoled compatible colors?": { + "type": "text", + "placeholders": {} + }, + "Source code": "Исходный код", + "@Source code": { + "type": "text", + "placeholders": {} + }, + "Start your first chat :-)": "Начни свой первый чат :-)", + "@Start your first chat :-)": { + "type": "text", + "placeholders": {} + }, + "Submit": "Отправить", + "@Submit": { + "type": "text", + "placeholders": {} + }, + "Sunday": "Воскресенье", + "@Sunday": { + "type": "text", + "placeholders": {} + }, + "Donate": "Пожертвовать", + "@Donate": { + "type": "text", + "placeholders": {} + }, + "Tap to show menu": "Нажмите, чтобы показать меню", + "@Tap to show menu": { + "type": "text", + "placeholders": {} + }, + "They Don't Match": "Они не совпадают", + "@They Don't Match": { + "type": "text", + "placeholders": {} + }, + "They Match": "Они совпадают", + "@They Match": { + "type": "text", + "placeholders": {} + }, + "This room has been archived.": "Эта комната была заархивирована.", + "@This room has been archived.": { + "type": "text", + "placeholders": {} + }, + "Thursday": "Четверг", + "@Thursday": { + "type": "text", + "placeholders": {} + }, + "timeOfDay": "{hours24}:{minutes}", + "@timeOfDay": { + "type": "text", + "placeholders": { + "hours12": {}, + "hours24": {}, + "minutes": {}, + "suffix": {} + } + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "text", + "placeholders": {} + }, + "Try to send again": "Попробуйте отправить еще раз", + "@Try to send again": { + "type": "text", + "placeholders": {} + }, + "Tuesday": "Вторник", + "@Tuesday": { + "type": "text", + "placeholders": {} + }, + "unbannedUser": "{username} разбанил(а) {targetName}", + "@unbannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Unblock Device": "Разблокировать устройство", + "@Unblock Device": { + "type": "text", + "placeholders": {} + }, + "Unmute chat": "Включить уведомления", + "@Unmute chat": { + "type": "text", + "placeholders": {} + }, + "Unknown device": "Неизвестное устройство", + "@Unknown device": { + "type": "text", + "placeholders": {} + }, + "Unknown encryption algorithm": "Неизвестный алгоритм шифрования", + "@Unknown encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "unknownSessionVerify": "Неизвестная сессия, пожалуйста, проверьте", + "@unknownSessionVerify": { + "type": "text", + "placeholders": {} + }, + "unknownEvent": "Неизвестное событие '{type}'", + "@unknownEvent": { + "type": "text", + "placeholders": { + "type": {} + } + }, + "unreadChats": "{unreadCount} непрочитанных чатов", + "@unreadChats": { + "type": "text", + "placeholders": { + "unreadCount": {} + } + }, + "unreadMessages": "{unreadEvents} непрочитанных сообщений", + "@unreadMessages": { + "type": "text", + "placeholders": { + "unreadEvents": {} + } + }, + "unreadMessagesInChats": "{unreadEvents} непрочитанных сообщений в {unreadChats} чатах", + "@unreadMessagesInChats": { + "type": "text", + "placeholders": { + "unreadEvents": {}, + "unreadChats": {} + } + }, + "userAndOthersAreTyping": "{username} и {count} других участников печатают...", + "@userAndOthersAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "userAndUserAreTyping": "{username} и {username2} печатают...", + "@userAndUserAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "Username": "Имя пользователя", + "@Username": { + "type": "text", + "placeholders": {} + }, + "userIsTyping": "{username} печатает...", + "@userIsTyping": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "userSentUnknownEvent": "{username} отправил(а) событие типа {type}", + "@userSentUnknownEvent": { + "type": "text", + "placeholders": { + "username": {}, + "type": {} + } + }, + "Verify": "Проверить", + "@Verify": { + "type": "text", + "placeholders": {} + }, + "verifyManual": "Проверить вручную", + "@verifyManual": { + "type": "text", + "placeholders": {} + }, + "verifiedSession": "Успешно проверенная сессия!", + "@verifiedSession": { + "type": "text", + "placeholders": {} + }, + "verifyStart": "Начать проверку", + "@verifyStart": { + "type": "text", + "placeholders": {} + }, + "verifySuccess": "Вы успешно проверили!", + "@verifySuccess": { + "type": "text", + "placeholders": {} + }, + "verifyTitle": "Проверка другой учётной записи", + "@verifyTitle": { + "type": "text", + "placeholders": {} + }, + "Verify User": "Проверить пользователя", + "@Verify User": { + "type": "text", + "placeholders": {} + }, + "Video call": "Видеозвонок", + "@Video call": { + "type": "text", + "placeholders": {} + }, + "Visible for all participants": "Видима для всех участников", + "@Visible for all participants": { + "type": "text", + "placeholders": {} + }, + "Visible for everyone": "Видна всем", + "@Visible for everyone": { + "type": "text", + "placeholders": {} + }, + "Visibility of the chat history": "Видимость истории чата", + "@Visibility of the chat history": { + "type": "text", + "placeholders": {} + }, + "Voice message": "Голосовое сообщение", + "@Voice message": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "В ожидании партнёра, чтобы принять запрос...", + "@waitingPartnerAcceptRequest": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerEmoji": "В ожидании партнёра, чтобы принять смайлики...", + "@waitingPartnerEmoji": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerNumbers": "В ожидании партнёра, чтобы принять числа...", + "@waitingPartnerNumbers": { + "type": "text", + "placeholders": {} + }, + "Wallpaper": "Обои", + "@Wallpaper": { + "type": "text", + "placeholders": {} + }, + "End to end encryption is currently in Beta! Use at your own risk!": "Сквозное шифрование в настоящее время в бета-версии! Используйте на свой риск!", + "@End to end encryption is currently in Beta! Use at your own risk!": { + "type": "text", + "placeholders": {} + }, + "Wednesday": "Среда", + "@Wednesday": { + "type": "text", + "placeholders": {} + }, + "Welcome to the cutest instant messenger in the matrix network.": "Добро пожаловать в самый симпатичный мессенджер в сети Matrix.", + "@Welcome to the cutest instant messenger in the matrix network.": { + "type": "text", + "placeholders": {} + }, + "Who is allowed to join this group": "Кому разрешено вступать в эту группу", + "@Who is allowed to join this group": { + "type": "text", + "placeholders": {} + }, + "Write a message...": "Напишите сообщение...", + "@Write a message...": { + "type": "text", + "placeholders": {} + }, + "Yes": "Да", + "@Yes": { + "type": "text", + "placeholders": {} + }, + "You": "Вы", + "@You": { + "type": "text", + "placeholders": {} + }, + "You are invited to this chat": "Вы приглашены в этот чат", + "@You are invited to this chat": { + "type": "text", + "placeholders": {} + }, + "You are no longer participating in this chat": "Вы больше не участвуете в этом чате", + "@You are no longer participating in this chat": { + "type": "text", + "placeholders": {} + }, + "You cannot invite yourself": "Вы не можете пригласить себя", + "@You cannot invite yourself": { + "type": "text", + "placeholders": {} + }, + "You have been banned from this chat": "Вы были забанены в этом чате", + "@You have been banned from this chat": { + "type": "text", + "placeholders": {} + }, + "Your own username": "Ваше имя пользователя", + "@Your own username": { + "type": "text", + "placeholders": {} + } +} diff --git a/lib/l10n/intl_sk.arb b/lib/l10n/intl_sk.arb new file mode 100644 index 0000000..179b569 --- /dev/null +++ b/lib/l10n/intl_sk.arb @@ -0,0 +1,1592 @@ +{ + "@@last_modified": "2020-06-25T16:02:16.297192", + "About": "O aplikácii", + "@About": { + "type": "text", + "placeholders": {} + }, + "Accept": "Prijať", + "@Accept": { + "type": "text", + "placeholders": {} + }, + "acceptedTheInvitation": "{username} prijali pozvánku", + "@acceptedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Account": "Účet", + "@Account": { + "type": "text", + "placeholders": {} + }, + "Account informations": "Informácie o účte", + "@Account informations": { + "type": "text", + "placeholders": {} + }, + "activatedEndToEndEncryption": "{username} aktivovali koncové šifrovanie", + "@activatedEndToEndEncryption": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Add a group description": "Pridať popis skupiny", + "@Add a group description": { + "type": "text", + "placeholders": {} + }, + "Admin": "Administrátor", + "@Admin": { + "type": "text", + "placeholders": {} + }, + "alias": "alias", + "@alias": { + "type": "text", + "placeholders": {} + }, + "Already have an account?": "Máte už účet?", + "@Already have an account?": { + "type": "text", + "placeholders": {} + }, + "Anyone can join": "Ktokoľvek sa môže pripojiť", + "@Anyone can join": { + "type": "text", + "placeholders": {} + }, + "Archive": "Archivovať", + "@Archive": { + "type": "text", + "placeholders": {} + }, + "Archived Room": "Archivovaná miestnosť", + "@Archived Room": { + "type": "text", + "placeholders": {} + }, + "Are guest users allowed to join": "Môžu sa pripojiť hostia", + "@Are guest users allowed to join": { + "type": "text", + "placeholders": {} + }, + "Are you sure?": "Ste si istí?", + "@Are you sure?": { + "type": "text", + "placeholders": {} + }, + "askSSSSCache": "Prosím zadajte vašu prístupovu frázu k \"bezpečému úložisku\" alebo \"kľúč na obnovu\" pre uloženie kľúčov.", + "@askSSSSCache": { + "type": "text", + "placeholders": {} + }, + "askSSSSSign": "Na overenie tejto osoby, prosím zadajte prístupovu frázu k \"bezpečému úložisku\" alebo \"klúč na obnovu\".", + "@askSSSSSign": { + "type": "text", + "placeholders": {} + }, + "askSSSSVerify": "Prosím zadajte vašu prístupovú frázu k \"bezpečnému úložisku\" alebo \"kľúč na obnovu\" pre overenie vašej relácie.", + "@askSSSSVerify": { + "type": "text", + "placeholders": {} + }, + "askVerificationRequest": "Akcepovať žiadosť o verifikáciu od {username}?", + "@askVerificationRequest": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Authentication": "Autentifikácia", + "@Authentication": { + "type": "text", + "placeholders": {} + }, + "Avatar has been changed": "Avatar bol zmenený", + "@Avatar has been changed": { + "type": "text", + "placeholders": {} + }, + "Ban from chat": "Zabanovať z chatu", + "@Ban from chat": { + "type": "text", + "placeholders": {} + }, + "Banned": "Zabanovaný", + "@Banned": { + "type": "text", + "placeholders": {} + }, + "bannedUser": "{username} zabanoval {targetName}", + "@bannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Block Device": "Zakázať zariadenie", + "@Block Device": { + "type": "text", + "placeholders": {} + }, + "byDefaultYouWillBeConnectedTo": "V základnom nastavení budete pripojený k {homeserver}", + "@byDefaultYouWillBeConnectedTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "cachedKeys": "Klúče sa úspešne uložili!", + "@cachedKeys": { + "type": "text", + "placeholders": {} + }, + "Cancel": "Zrušiť", + "@Cancel": { + "type": "text", + "placeholders": {} + }, + "changedTheChatAvatar": "{username} si zmenili svôj avatar", + "@changedTheChatAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheChatNameTo": "{username} zmenili meno chatu na: „{chatname}“", + "@changedTheChatNameTo": { + "type": "text", + "placeholders": { + "username": {}, + "chatname": {} + } + }, + "changedTheChatDescriptionTo": "{username} zmenili popis chatu na: „{description}“", + "@changedTheChatDescriptionTo": { + "type": "text", + "placeholders": { + "username": {}, + "description": {} + } + }, + "changedTheChatPermissions": "{username} zmenili nastavenie oprávnení chatu", + "@changedTheChatPermissions": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheDisplaynameTo": "{username} si zmenili prezývku na: {displayname}", + "@changedTheDisplaynameTo": { + "type": "text", + "placeholders": { + "username": {}, + "displayname": {} + } + }, + "Change the homeserver": "Zmeniť použitý server", + "@Change the homeserver": { + "type": "text", + "placeholders": {} + }, + "changedTheGuestAccessRules": "{username} zmenili prístupové práva pre hosťov", + "@changedTheGuestAccessRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheGuestAccessRulesTo": "{username} zmenili prístupové práva pro hosťov na: {rules}", + "@changedTheGuestAccessRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheHistoryVisibility": "{username} zmenili nastavenie viditelnosti histórie chatu", + "@changedTheHistoryVisibility": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheHistoryVisibilityTo": "{username} zmenili nastavenie viditelnosti histórie chatu na: {rules}", + "@changedTheHistoryVisibilityTo": { + "type": "text", + "placeholders": { + "username": {}, + "rules": {} + } + }, + "changedTheJoinRules": "{username} zmenili nastavenie pravidiel pripojenia", + "@changedTheJoinRules": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheJoinRulesTo": "{username} zmenili nastavenie pravidiel pripojenia na: {joinRules}", + "@changedTheJoinRulesTo": { + "type": "text", + "placeholders": { + "username": {}, + "joinRules": {} + } + }, + "changedTheProfileAvatar": "{username} si zmenili profilový obrázok", + "@changedTheProfileAvatar": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomAliases": "{username} zmenili nastavenie aliasov chatu", + "@changedTheRoomAliases": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "changedTheRoomInvitationLink": "{username} zmenili odkaz k pozvánke do miestnosti", + "@changedTheRoomInvitationLink": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Changelog": "História zmien", + "@Changelog": { + "type": "text", + "placeholders": {} + }, + "Change the name of the group": "Zmeniť názov skupiny", + "@Change the name of the group": { + "type": "text", + "placeholders": {} + }, + "Change wallpaper": "Zmeniť pozadie", + "@Change wallpaper": { + "type": "text", + "placeholders": {} + }, + "Change the server": "Zmeniť server", + "@Change the server": { + "type": "text", + "placeholders": {} + }, + "The encryption has been corrupted": "Šifrovanie bolo poškodené", + "@The encryption has been corrupted": { + "type": "text", + "placeholders": {} + }, + "Chat": "Chat", + "@Chat": { + "type": "text", + "placeholders": {} + }, + "Chat details": "Podrobnosti o chate", + "@Chat details": { + "type": "text", + "placeholders": {} + }, + "Choose a strong password": "Vyberte si silné heslo", + "@Choose a strong password": { + "type": "text", + "placeholders": {} + }, + "Choose a username": "Vyberte si užívateľské meno", + "@Choose a username": { + "type": "text", + "placeholders": {} + }, + "Close": "Zavrieť", + "@Close": { + "type": "text", + "placeholders": {} + }, + "compareEmojiMatch": "Porovnajte a uistite sa, že nasledujúce emotikony sa zhodujú na oboch zariadeniach:", + "@compareEmojiMatch": { + "type": "text", + "placeholders": {} + }, + "compareNumbersMatch": "Porovnajte a uistite sa, že nasledujúce čísla sa zhodujú na oboch zariadeniach:", + "@compareNumbersMatch": { + "type": "text", + "placeholders": {} + }, + "Confirm": "Potvrdiť", + "@Confirm": { + "type": "text", + "placeholders": {} + }, + "Connect": "Pripojiť", + "@Connect": { + "type": "text", + "placeholders": {} + }, + "Connection attempt failed": "Pokus o pripojenie zlyhal", + "@Connection attempt failed": { + "type": "text", + "placeholders": {} + }, + "Contact has been invited to the group": "Kontakt bol pozvaný do skupiny", + "@Contact has been invited to the group": { + "type": "text", + "placeholders": {} + }, + "Content viewer": "Prehliadač obsahu", + "@Content viewer": { + "type": "text", + "placeholders": {} + }, + "Copied to clipboard": "Skopírované do schránky", + "@Copied to clipboard": { + "type": "text", + "placeholders": {} + }, + "Copy": "Kopírovať", + "@Copy": { + "type": "text", + "placeholders": {} + }, + "couldNotDecryptMessage": "Nebolo možné dešifrovať správu: {error}", + "@couldNotDecryptMessage": { + "type": "text", + "placeholders": { + "error": {} + } + }, + "Could not set avatar": "Nepodarilo sa nastaviť avatar", + "@Could not set avatar": { + "type": "text", + "placeholders": {} + }, + "Could not set displayname": "Nepodarilo sa nastaviť prezývku užívateľa", + "@Could not set displayname": { + "type": "text", + "placeholders": {} + }, + "countParticipants": "{count} účastníkov", + "@countParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Create": "Vytvoriť", + "@Create": { + "type": "text", + "placeholders": {} + }, + "Create account now": "Vytvoriť účet teraz", + "@Create account now": { + "type": "text", + "placeholders": {} + }, + "createdTheChat": "{username} založili chat", + "@createdTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Create new group": "Vytvoriť novú skupinu", + "@Create new group": { + "type": "text", + "placeholders": {} + }, + "crossSigningDisabled": "Vzájomné overenie je vypnuté", + "@crossSigningDisabled": { + "type": "text", + "placeholders": {} + }, + "crossSigningEnabled": "Vzájomné overenie je zapnuté", + "@crossSigningEnabled": { + "type": "text", + "placeholders": {} + }, + "Currently active": "Momentálne prítomní", + "@Currently active": { + "type": "text", + "placeholders": {} + }, + "dateAndTimeOfDay": "{date}, {timeOfDay}", + "@dateAndTimeOfDay": { + "type": "text", + "placeholders": { + "date": {}, + "timeOfDay": {} + } + }, + "dateWithoutYear": "{day}.{month}.", + "@dateWithoutYear": { + "type": "text", + "placeholders": { + "month": {}, + "day": {} + } + }, + "dateWithYear": "{day}.{month}.{year}", + "@dateWithYear": { + "type": "text", + "placeholders": { + "year": {}, + "month": {}, + "day": {} + } + }, + "Delete": "Odstrániť", + "@Delete": { + "type": "text", + "placeholders": {} + }, + "Delete message": "Odstrániť správu", + "@Delete message": { + "type": "text", + "placeholders": {} + }, + "Deny": "Zamietnuť", + "@Deny": { + "type": "text", + "placeholders": {} + }, + "Device": "Zariadenie", + "@Device": { + "type": "text", + "placeholders": {} + }, + "Devices": "Zariadenia", + "@Devices": { + "type": "text", + "placeholders": {} + }, + "Discard picture": "Zahodiť obrázok", + "@Discard picture": { + "type": "text", + "placeholders": {} + }, + "Displayname has been changed": "Prezývka bola zmenená", + "@Displayname has been changed": { + "type": "text", + "placeholders": {} + }, + "Download file": "Stiahnuť súbor", + "@Download file": { + "type": "text", + "placeholders": {} + }, + "Edit displayname": "Zmeniť prezývku", + "@Edit displayname": { + "type": "text", + "placeholders": {} + }, + "Emote Settings": "Nastavenie emotikonov", + "@Emote Settings": { + "type": "text", + "placeholders": {} + }, + "Emote shortcode": "Kód emotikonu", + "@Emote shortcode": { + "type": "text", + "placeholders": {} + }, + "emoteWarnNeedToPick": "Musíte zvoliť kód emotikonu a obrázok", + "@emoteWarnNeedToPick": { + "type": "text", + "placeholders": {} + }, + "emoteExists": "Emotikon už existuje", + "@emoteExists": { + "type": "text", + "placeholders": {} + }, + "emoteInvalid": "Nesprávné označenie emotikonu", + "@emoteInvalid": { + "type": "text", + "placeholders": {} + }, + "Empty chat": "Prázdny chat", + "@Empty chat": { + "type": "text", + "placeholders": {} + }, + "You won't be able to disable the encryption anymore. Are you sure?": "Šifrovanie už nebude možné vypnúť. Ste si tým istí?", + "@You won't be able to disable the encryption anymore. Are you sure?": { + "type": "text", + "placeholders": {} + }, + "Encryption": "Šifrovanie", + "@Encryption": { + "type": "text", + "placeholders": {} + }, + "Encryption algorithm": "Šifrovací algoritmus", + "@Encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "Encryption is not enabled": "Šifrovanie nie je aktívne", + "@Encryption is not enabled": { + "type": "text", + "placeholders": {} + }, + "End-to-end encryption settings": "Nastavenie koncového šifrovania", + "@End-to-end encryption settings": { + "type": "text", + "placeholders": {} + }, + "Enter a group name": "Zadajte názov skupiny", + "@Enter a group name": { + "type": "text", + "placeholders": {} + }, + "Enter a username": "Zadajte uživateľské meno", + "@Enter a username": { + "type": "text", + "placeholders": {} + }, + "Enter your homeserver": "Zadajte svoj homeserver", + "@Enter your homeserver": { + "type": "text", + "placeholders": {} + }, + "File name": "Názov súboru", + "@File name": { + "type": "text", + "placeholders": {} + }, + "File size": "Veľkosť súboru", + "@File size": { + "type": "text", + "placeholders": {} + }, + "FluffyChat": "FluffyChat", + "@FluffyChat": { + "type": "text", + "placeholders": {} + }, + "Forward": "Preposlať", + "@Forward": { + "type": "text", + "placeholders": {} + }, + "Friday": "Piatok", + "@Friday": { + "type": "text", + "placeholders": {} + }, + "From joining": "Od pripojenia", + "@From joining": { + "type": "text", + "placeholders": {} + }, + "From the invitation": "Od pozvania", + "@From the invitation": { + "type": "text", + "placeholders": {} + }, + "Group": "Skupina", + "@Group": { + "type": "text", + "placeholders": {} + }, + "Group description": "Popis skupiny", + "@Group description": { + "type": "text", + "placeholders": {} + }, + "Group description has been changed": "Popis skupiny bol zmenený", + "@Group description has been changed": { + "type": "text", + "placeholders": {} + }, + "Group is public": "Skupina je verejná", + "@Group is public": { + "type": "text", + "placeholders": {} + }, + "groupWith": "Skupina s {displayname}", + "@groupWith": { + "type": "text", + "placeholders": { + "displayname": {} + } + }, + "Guests are forbidden": "Hostia sú zakázaní", + "@Guests are forbidden": { + "type": "text", + "placeholders": {} + }, + "Guests can join": "Hostia sa môžu pripojiť", + "@Guests can join": { + "type": "text", + "placeholders": {} + }, + "hasWithdrawnTheInvitationFor": "{username} vzal späť pozvánku pre {targetName}", + "@hasWithdrawnTheInvitationFor": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Help": "Pomoc", + "@Help": { + "type": "text", + "placeholders": {} + }, + "Homeserver is not compatible": "Homeserver nie je kompatibilný", + "@Homeserver is not compatible": { + "type": "text", + "placeholders": {} + }, + "ID": "ID", + "@ID": { + "type": "text", + "placeholders": {} + }, + "Identity": "Identita", + "@Identity": { + "type": "text", + "placeholders": {} + }, + "incorrectPassphraseOrKey": "Nesprávna prístupová fráza alebo kľúč na obnovenie", + "@incorrectPassphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Invite contact": "Pozvať kontakt", + "@Invite contact": { + "type": "text", + "placeholders": {} + }, + "inviteContactToGroup": "Pozvať kontakt do {groupName}", + "@inviteContactToGroup": { + "type": "text", + "placeholders": { + "groupName": {} + } + }, + "Invited": "Pozvanie", + "@Invited": { + "type": "text", + "placeholders": {} + }, + "inviteText": "{username} vás pozval na FluffyChat.\n1. Nainštalujte si FluffyChat: http://fluffy.chat\n2. Zaregistrujte sa alebo sa prihláste\n3. Otvorte odkaz na pozvánku: {link}", + "@inviteText": { + "type": "text", + "placeholders": { + "username": {}, + "link": {} + } + }, + "invitedUser": "{username} pozvali {targetName}", + "@invitedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Invited users only": "Len pozvaní používatelia", + "@Invited users only": { + "type": "text", + "placeholders": {} + }, + "isDeviceKeyCorrect": "Je nasledujúci kód zariadenia správny?", + "@isDeviceKeyCorrect": { + "type": "text", + "placeholders": {} + }, + "is typing...": "píše...", + "@is typing...": { + "type": "text", + "placeholders": {} + }, + "Edit Jitsi instance": "Nastavenie inštancie Jitsi", + "@Edit Jitsi instance": { + "type": "text", + "placeholders": {} + }, + "joinedTheChat": "{username} sa pripojili do chatu", + "@joinedTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "keysCached": "Kľúče sú uložené", + "@keysCached": { + "type": "text", + "placeholders": {} + }, + "keysMissing": "Kľúče chýbaju", + "@keysMissing": { + "type": "text", + "placeholders": {} + }, + "kicked": "{username} vyhodili {targetName}", + "@kicked": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "kickedAndBanned": "{username} vyhodili a zabanovali {targetName}", + "@kickedAndBanned": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Kick from chat": "Vyhodiť z chatu", + "@Kick from chat": { + "type": "text", + "placeholders": {} + }, + "Leave": "Opustiť", + "@Leave": { + "type": "text", + "placeholders": {} + }, + "Left the chat": "Opustili chat", + "@Left the chat": { + "type": "text", + "placeholders": {} + }, + "Logout": "Odhlásiť sa", + "@Logout": { + "type": "text", + "placeholders": {} + }, + "userLeftTheChat": "{username} opustili chat", + "@userLeftTheChat": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "lastActiveAgo": "Naposledy prítomní: {localizedTimeShort}", + "@lastActiveAgo": { + "type": "text", + "placeholders": { + "localizedTimeShort": {} + } + }, + "Last seen IP": "Naposledy zaznamenaná IP adresa", + "@Last seen IP": { + "type": "text", + "placeholders": {} + }, + "License": "Licencia", + "@License": { + "type": "text", + "placeholders": {} + }, + "Loading... Please wait": "Načítava sa... Čakajte prosím", + "@Loading... Please wait": { + "type": "text", + "placeholders": {} + }, + "Load more...": "Načítať viac...", + "@Load more...": { + "type": "text", + "placeholders": {} + }, + "loadCountMoreParticipants": "Načítať ďalších {count} účastníkov", + "@loadCountMoreParticipants": { + "type": "text", + "placeholders": { + "count": {} + } + }, + "Login": "Prihlásiť sa", + "@Login": { + "type": "text", + "placeholders": {} + }, + "logInTo": "Prihlásenie k {homeserver}", + "@logInTo": { + "type": "text", + "placeholders": { + "homeserver": {} + } + }, + "Make a moderator": "Pridať práva moderátora", + "@Make a moderator": { + "type": "text", + "placeholders": {} + }, + "Make an admin": "Pridať práva administrátora", + "@Make an admin": { + "type": "text", + "placeholders": {} + }, + "Make sure the identifier is valid": "Skontrolujte, či je identifikátor platný", + "@Make sure the identifier is valid": { + "type": "text", + "placeholders": {} + }, + "Message will be removed for all participants": "Správa bude odstránená pre všetkých účastníkov", + "@Message will be removed for all participants": { + "type": "text", + "placeholders": {} + }, + "Moderator": "Moderátor", + "@Moderator": { + "type": "text", + "placeholders": {} + }, + "Monday": "Pondelok", + "@Monday": { + "type": "text", + "placeholders": {} + }, + "Mute chat": "Stlmiť chat", + "@Mute chat": { + "type": "text", + "placeholders": {} + }, + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": "Prosím berte na vedomie, že na koncové šifrovanie zatiaľ potrebujete Pantalaimon.", + "@Please be aware that you need Pantalaimon to use end-to-end encryption for now.": { + "type": "text", + "placeholders": {} + }, + "New message in FluffyChat": "Nová správa v FluffyChate", + "@New message in FluffyChat": { + "type": "text", + "placeholders": {} + }, + "New private chat": "Nový súkromný chat", + "@New private chat": { + "type": "text", + "placeholders": {} + }, + "newVerificationRequest": "Nová žiadosť o verifikáciu!", + "@newVerificationRequest": { + "type": "text", + "placeholders": {} + }, + "noCrossSignBootstrap": "Fluffychat v súčasnosti nepodporuje povolenie krížového podpisu. Prosím, povoľte ho z Riot.im.", + "@noCrossSignBootstrap": { + "type": "text", + "placeholders": {} + }, + "noMegolmBootstrap": "Fluffychat v súčasnosti nepodporuje povolenie online zálohu klúčov. Prosím, povoľte ho z Riot.im.", + "@noMegolmBootstrap": { + "type": "text", + "placeholders": {} + }, + "It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": "Zdá sa, že nemáte žiadne služby Googlu v telefóne. To je dobré rozhodnutie pre vaše súkromie! Ak chcete dostávať push notifikácie vo FluffyChat, odporúčame používať microG: https://microg.org/", + "@It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": { + "type": "text", + "placeholders": {} + }, + "None": "Žiadne", + "@None": { + "type": "text", + "placeholders": {} + }, + "No emotes found. 😕": "Nenašli sa žiadne emotikony. 😕", + "@No emotes found. 😕": { + "type": "text", + "placeholders": {} + }, + "No permission": "Chýba povolenie", + "@No permission": { + "type": "text", + "placeholders": {} + }, + "No rooms found...": "Nenašli sa žiadne miestnosti...", + "@No rooms found...": { + "type": "text", + "placeholders": {} + }, + "Not supported in web": "Nepodporované vo webovej verzii", + "@Not supported in web": { + "type": "text", + "placeholders": {} + }, + "numberSelected": "{number} označených správ", + "@numberSelected": { + "type": "text", + "placeholders": { + "number": {} + } + }, + "ok": "ok", + "@ok": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupDisabled": "Online záloha kľúčov je vypnutá", + "@onlineKeyBackupDisabled": { + "type": "text", + "placeholders": {} + }, + "onlineKeyBackupEnabled": "Online záloha kľúčov je zapnutá", + "@onlineKeyBackupEnabled": { + "type": "text", + "placeholders": {} + }, + "Oops something went wrong...": "Och! Niečo sa pokazilo...", + "@Oops something went wrong...": { + "type": "text", + "placeholders": {} + }, + "Open app to read messages": "Na prečítanie správy otvorte aplikáciu", + "@Open app to read messages": { + "type": "text", + "placeholders": {} + }, + "Open camera": "Otvoriť fotoaparát", + "@Open camera": { + "type": "text", + "placeholders": {} + }, + "(Optional) Group name": "(Voliteľné) Názov skupiny", + "@(Optional) Group name": { + "type": "text", + "placeholders": {} + }, + "Participating user devices": "Zúčastnené užívateľské zariadenia", + "@Participating user devices": { + "type": "text", + "placeholders": {} + }, + "passphraseOrKey": "prístupová fráza alebo kľúč na obnovenie", + "@passphraseOrKey": { + "type": "text", + "placeholders": {} + }, + "Password": "Heslo", + "@Password": { + "type": "text", + "placeholders": {} + }, + "Pick image": "Vybrať obrázok", + "@Pick image": { + "type": "text", + "placeholders": {} + }, + "play": "Prehrať (fileName}", + "@play": { + "type": "text", + "placeholders": { + "fileName": {} + } + }, + "Please choose a username": "Vyberte si používateľské meno", + "@Please choose a username": { + "type": "text", + "placeholders": {} + }, + "Please enter a matrix identifier": "Vyberte si matrix identifkátor", + "@Please enter a matrix identifier": { + "type": "text", + "placeholders": {} + }, + "Please enter your password": "Prosím zadajte svoje heslo", + "@Please enter your password": { + "type": "text", + "placeholders": {} + }, + "Please enter your username": "Zadajte svoje používateľské meno", + "@Please enter your username": { + "type": "text", + "placeholders": {} + }, + "Public Rooms": "Verejné miestnosti", + "@Public Rooms": { + "type": "text", + "placeholders": {} + }, + "Reject": "Odmietnuť", + "@Reject": { + "type": "text", + "placeholders": {} + }, + "Rejoin": "Vrátiť sa", + "@Rejoin": { + "type": "text", + "placeholders": {} + }, + "Render rich message content": "Zobraziť formátovaný obsah", + "@Render rich message content": { + "type": "text", + "placeholders": {} + }, + "Recording": "Nahrávam", + "@Recording": { + "type": "text", + "placeholders": {} + }, + "redactedAnEvent": "{username} odstránili udalosť", + "@redactedAnEvent": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "rejectedTheInvitation": "{username} odmietli pozvánku", + "@rejectedTheInvitation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove all other devices": "Odstráňiť všetky ostatné zariadenia", + "@Remove all other devices": { + "type": "text", + "placeholders": {} + }, + "removedBy": "Odstánené užívateľom {username}", + "@removedBy": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Remove device": "Odstráňiť zariadenie", + "@Remove device": { + "type": "text", + "placeholders": {} + }, + "Remove exile": "Odblokovať", + "@Remove exile": { + "type": "text", + "placeholders": {} + }, + "Revoke all permissions": "Zrušiť všetky povolenia", + "@Revoke all permissions": { + "type": "text", + "placeholders": {} + }, + "Remove": "Odstrániť", + "@Remove": { + "type": "text", + "placeholders": {} + }, + "Remove message": "Odstrániť správu", + "@Remove message": { + "type": "text", + "placeholders": {} + }, + "Reply": "Odpovedať", + "@Reply": { + "type": "text", + "placeholders": {} + }, + "Request permission": "Vyžiadať si povolenie", + "@Request permission": { + "type": "text", + "placeholders": {} + }, + "Request to read older messages": "Žiadosť o prečítanie starších správ", + "@Request to read older messages": { + "type": "text", + "placeholders": {} + }, + "Room has been upgraded": "Miestnosť bola upgradeovaná", + "@Room has been upgraded": { + "type": "text", + "placeholders": {} + }, + "Saturday": "Sobota", + "@Saturday": { + "type": "text", + "placeholders": {} + }, + "Share": "Zdieľať", + "@Share": { + "type": "text", + "placeholders": {} + }, + "sharedTheLocation": "{username} zdieľa lokáciu", + "@sharedTheLocation": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "Search for a chat": "Vyhladať v chate", + "@Search for a chat": { + "type": "text", + "placeholders": {} + }, + "Seen a long time ago": "Videný veľmi dávno", + "@Seen a long time ago": { + "type": "text", + "placeholders": {} + }, + "seenByUser": "Videné užívateľom {username}", + "@seenByUser": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "seenByUserAndUser": "Videné užívateľmi {username} a {username2}", + "@seenByUserAndUser": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "seenByUserAndCountOthers": "Videné užívateľom {username} a {count} dalšími", + "@seenByUserAndCountOthers": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "Send": "Odoslať", + "@Send": { + "type": "text", + "placeholders": {} + }, + "Send a message": "Odoslať správu", + "@Send a message": { + "type": "text", + "placeholders": {} + }, + "Send file": "Odoslať súbor", + "@Send file": { + "type": "text", + "placeholders": {} + }, + "Send image": "Odoslať obrázok", + "@Send image": { + "type": "text", + "placeholders": {} + }, + "sentAFile": "{username} poslali súbor", + "@sentAFile": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAnAudio": "{username} poslali zvukovú nahrávku", + "@sentAnAudio": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAPicture": "{username} poslali obrázok", + "@sentAPicture": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentASticker": "{username} poslali nálepku", + "@sentASticker": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sentAVideo": "{username} poslali video", + "@sentAVideo": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "sessionVerified": "Relácia je overená", + "@sessionVerified": { + "type": "text", + "placeholders": {} + }, + "Set a profile picture": "Nastaviť profilový obrázok", + "@Set a profile picture": { + "type": "text", + "placeholders": {} + }, + "Set group description": "Nastaviť popis skupiny", + "@Set group description": { + "type": "text", + "placeholders": {} + }, + "Set invitation link": "Nastaviť odkaz pre pozvánku", + "@Set invitation link": { + "type": "text", + "placeholders": {} + }, + "Set status": "Nastaviť status", + "@Set status": { + "type": "text", + "placeholders": {} + }, + "Settings": "Nastavenia", + "@Settings": { + "type": "text", + "placeholders": {} + }, + "Sign up": "Zaregistrovať sa", + "@Sign up": { + "type": "text", + "placeholders": {} + }, + "Skip": "Preskočiť", + "@Skip": { + "type": "text", + "placeholders": {} + }, + "Change your style": "Zmena štýlu", + "@Change your style": { + "type": "text", + "placeholders": {} + }, + "System": "Systémová farba", + "@System": { + "type": "text", + "placeholders": {} + }, + "How are you today?": "Ako sa dnes máte?", + "@How are you today?": { + "type": "text", + "placeholders": {} + }, + "Light": "Svetlá", + "@Light": { + "type": "text", + "placeholders": {} + }, + "Dark": "Tmavá", + "@Dark": { + "type": "text", + "placeholders": {} + }, + "Use Amoled compatible colors?": "Použiť Amoled kompatibilné farby?", + "@Use Amoled compatible colors?": { + "type": "text", + "placeholders": {} + }, + "Source code": "Zdrojový kód", + "@Source code": { + "type": "text", + "placeholders": {} + }, + "Start your first chat :-)": "Začnite svoj prvý chat :-)", + "@Start your first chat :-)": { + "type": "text", + "placeholders": {} + }, + "Submit": "Odoslať", + "@Submit": { + "type": "text", + "placeholders": {} + }, + "Sunday": "Nedeľa", + "@Sunday": { + "type": "text", + "placeholders": {} + }, + "Donate": "Prispejte", + "@Donate": { + "type": "text", + "placeholders": {} + }, + "Tap to show menu": "Ťuknutím zobrazíte menu", + "@Tap to show menu": { + "type": "text", + "placeholders": {} + }, + "They Don't Match": "Sa nezhodujú", + "@They Don't Match": { + "type": "text", + "placeholders": {} + }, + "They Match": "Zhodujú sa", + "@They Match": { + "type": "text", + "placeholders": {} + }, + "This room has been archived.": "Táto miestnosť bola archivovaná.", + "@This room has been archived.": { + "type": "text", + "placeholders": {} + }, + "Thursday": "Štvrtok", + "@Thursday": { + "type": "text", + "placeholders": {} + }, + "timeOfDay": "{hours24}:{minutes}", + "@timeOfDay": { + "type": "text", + "placeholders": { + "hours12": {}, + "hours24": {}, + "minutes": {}, + "suffix": {} + } + }, + "title": "FluffyChat", + "@title": { + "description": "Title for the application", + "type": "text", + "placeholders": {} + }, + "Try to send again": "Skúsiť znova odoslať", + "@Try to send again": { + "type": "text", + "placeholders": {} + }, + "Tuesday": "Utorok", + "@Tuesday": { + "type": "text", + "placeholders": {} + }, + "unbannedUser": "{username} odbanovali {targetName}", + "@unbannedUser": { + "type": "text", + "placeholders": { + "username": {}, + "targetName": {} + } + }, + "Unblock Device": "Odblokovať zariadenie", + "@Unblock Device": { + "type": "text", + "placeholders": {} + }, + "Unmute chat": "Zrušiť stlmenie chatu", + "@Unmute chat": { + "type": "text", + "placeholders": {} + }, + "Unknown device": "Neznáme zariadenie", + "@Unknown device": { + "type": "text", + "placeholders": {} + }, + "Unknown encryption algorithm": "Neznámy šifrovací algoritmus", + "@Unknown encryption algorithm": { + "type": "text", + "placeholders": {} + }, + "unknownSessionVerify": "Neznáma relácia, prosím verifikujte ju", + "@unknownSessionVerify": { + "type": "text", + "placeholders": {} + }, + "unknownEvent": "Neznáma udalosť „{type}“", + "@unknownEvent": { + "type": "text", + "placeholders": { + "type": {} + } + }, + "unreadChats": "{unreadCount} neprečítaných chatov", + "@unreadChats": { + "type": "text", + "placeholders": { + "unreadCount": {} + } + }, + "unreadMessages": "{unreadEvents} neprečítaných správ", + "@unreadMessages": { + "type": "text", + "placeholders": { + "unreadEvents": {} + } + }, + "unreadMessagesInChats": "{unreadEvents} neprečítaných správ v {unreadChats} chatoch", + "@unreadMessagesInChats": { + "type": "text", + "placeholders": { + "unreadEvents": {}, + "unreadChats": {} + } + }, + "userAndOthersAreTyping": "{username} a {count} dalších píšu…", + "@userAndOthersAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "count": {} + } + }, + "userAndUserAreTyping": "{username} a {username2} píšu…", + "@userAndUserAreTyping": { + "type": "text", + "placeholders": { + "username": {}, + "username2": {} + } + }, + "Username": "Užívateľské meno", + "@Username": { + "type": "text", + "placeholders": {} + }, + "userIsTyping": "{username} píše…", + "@userIsTyping": { + "type": "text", + "placeholders": { + "username": {} + } + }, + "userSentUnknownEvent": "{username} poslali udalosť {type}", + "@userSentUnknownEvent": { + "type": "text", + "placeholders": { + "username": {}, + "type": {} + } + }, + "Verify": "Overiť", + "@Verify": { + "type": "text", + "placeholders": {} + }, + "verifyManual": "Verifikovať manuálne", + "@verifyManual": { + "type": "text", + "placeholders": {} + }, + "verifiedSession": "Úspešne overenie relácie!", + "@verifiedSession": { + "type": "text", + "placeholders": {} + }, + "verifyStart": "Spustiť verifikáciu", + "@verifyStart": { + "type": "text", + "placeholders": {} + }, + "verifySuccess": "Verifikácia bola úspešná!", + "@verifySuccess": { + "type": "text", + "placeholders": {} + }, + "verifyTitle": "Verifikujem protiľahlý účet", + "@verifyTitle": { + "type": "text", + "placeholders": {} + }, + "Verify User": "Verifikovať používateľa", + "@Verify User": { + "type": "text", + "placeholders": {} + }, + "Video call": "Videohovor", + "@Video call": { + "type": "text", + "placeholders": {} + }, + "Visible for all participants": "Viditeľné pre všetkých účastníkov", + "@Visible for all participants": { + "type": "text", + "placeholders": {} + }, + "Visible for everyone": "Viditeľné pre každého", + "@Visible for everyone": { + "type": "text", + "placeholders": {} + }, + "Visibility of the chat history": "Viditeľnosť histórie chatu", + "@Visibility of the chat history": { + "type": "text", + "placeholders": {} + }, + "Voice message": "Hlasová správa", + "@Voice message": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerAcceptRequest": "Čaká sa, kým partner prijme požiadavku...", + "@waitingPartnerAcceptRequest": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerEmoji": "Čaká sa, kým partner prijme emotikon...", + "@waitingPartnerEmoji": { + "type": "text", + "placeholders": {} + }, + "waitingPartnerNumbers": "Čaká sa na to, kým partner prijme čísla...", + "@waitingPartnerNumbers": { + "type": "text", + "placeholders": {} + }, + "Wallpaper": "Pozadie", + "@Wallpaper": { + "type": "text", + "placeholders": {} + }, + "End to end encryption is currently in Beta! Use at your own risk!": "Konečné šifrovanie je momentálne v Beta verzii! Používajte na vlastné riziko!", + "@End to end encryption is currently in Beta! Use at your own risk!": { + "type": "text", + "placeholders": {} + }, + "Wednesday": "Streda", + "@Wednesday": { + "type": "text", + "placeholders": {} + }, + "Welcome to the cutest instant messenger in the matrix network.": "Vítajte v najroztomilejšom instant messengeri v sieti matrix.", + "@Welcome to the cutest instant messenger in the matrix network.": { + "type": "text", + "placeholders": {} + }, + "Who is allowed to join this group": "Kto môže vstúpiť do tejto skupiny", + "@Who is allowed to join this group": { + "type": "text", + "placeholders": {} + }, + "Write a message...": "Napísať správu...", + "@Write a message...": { + "type": "text", + "placeholders": {} + }, + "Yes": "Áno", + "@Yes": { + "type": "text", + "placeholders": {} + }, + "You": "Vy", + "@You": { + "type": "text", + "placeholders": {} + }, + "You are invited to this chat": "Ste pozvaní do tohto chatu", + "@You are invited to this chat": { + "type": "text", + "placeholders": {} + }, + "You are no longer participating in this chat": "Už sa nezúčastňujete tohto chatu", + "@You are no longer participating in this chat": { + "type": "text", + "placeholders": {} + }, + "You cannot invite yourself": "Nemôžete pozvať samých seba", + "@You cannot invite yourself": { + "type": "text", + "placeholders": {} + }, + "You have been banned from this chat": "Máte zablokovaný prístup k tomuto chatu", + "@You have been banned from this chat": { + "type": "text", + "placeholders": {} + }, + "Your own username": "Vaša vlastná prezývka", + "@Your own username": { + "type": "text", + "placeholders": {} + } +} diff --git a/lib/l10n/l10n.dart b/lib/l10n/l10n.dart index 1a189ca..fbd9b62 100644 --- a/lib/l10n/l10n.dart +++ b/lib/l10n/l10n.dart @@ -8,7 +8,20 @@ class AppLocalizationsDelegate extends LocalizationsDelegate { @override bool isSupported(Locale locale) { - return ['en', 'de', 'hu', 'pl', 'fr'].contains(locale.languageCode); + return [ + 'en', + 'de', + 'hu', + 'pl', + 'fr', + 'cs', + 'es', + 'sk', + 'gl', + 'hr', + 'ja', + 'ru', + ].contains(locale.languageCode); } @override @@ -46,6 +59,8 @@ class L10n extends MatrixLocalizations { String get about => Intl.message("About"); + String get accept => Intl.message("Accept"); + String acceptedTheInvitation(String username) => Intl.message( "$username accepted the invitation", name: "acceptedTheInvitation", @@ -81,6 +96,22 @@ class L10n extends MatrixLocalizations { String get areYouSure => Intl.message("Are you sure?"); + String get askSSSSCache => Intl.message( + "Please enter your secure store passphrase or recovery key to cache the keys.", + name: "askSSSSCache"); + + String get askSSSSSign => Intl.message( + "To be able to sign the other person, please enter your secure store passphrase or recovery key.", + name: "askSSSSSign"); + + String get askSSSSVerify => Intl.message( + "Please enter your secure store passphrase or recovery key to verify your session.", + name: "askSSSSVerify"); + + String askVerificationRequest(String username) => + Intl.message("Accept this verification request from $username?", + name: "askVerificationRequest", args: [username]); + String get authentication => Intl.message("Authentication"); String get avatarHasBeenChanged => Intl.message("Avatar has been changed"); @@ -95,12 +126,17 @@ class L10n extends MatrixLocalizations { args: [username, targetName], ); + String get blockDevice => Intl.message("Block Device"); + String byDefaultYouWillBeConnectedTo(String homeserver) => Intl.message( 'By default you will be connected to $homeserver', name: 'byDefaultYouWillBeConnectedTo', args: [homeserver], ); + String get cachedKeys => + Intl.message("Successfully cached keys!", name: "cachedKeys"); + String get cancel => Intl.message("Cancel"); String changedTheChatAvatar(String username) => Intl.message( @@ -177,7 +213,7 @@ class L10n extends MatrixLocalizations { ); String changedTheProfileAvatar(String username) => Intl.message( - "$username changed the profile avatar", + "$username changed their avatar", name: "changedTheProfileAvatar", args: [username], ); @@ -216,6 +252,14 @@ class L10n extends MatrixLocalizations { String get close => Intl.message("Close"); + String get compareEmojiMatch => Intl.message( + "Compare and make sure the following emoji match those of the other device:", + name: "compareEmojiMatch"); + + String get compareNumbersMatch => Intl.message( + "Compare and make sure the following numbers match those of the other device:", + name: "compareNumbersMatch"); + String get confirm => Intl.message("Confirm"); String get connect => Intl.message('Connect'); @@ -261,7 +305,13 @@ class L10n extends MatrixLocalizations { String get createNewGroup => Intl.message("Create new group"); - String get currentlyActive => Intl.message('Currenlty active'); + String get crossSigningDisabled => + Intl.message("Cross-Signing is disabled", name: "crossSigningDisabled"); + + String get crossSigningEnabled => + Intl.message("Cross-Signing is enabled", name: "crossSigningEnabled"); + + String get currentlyActive => Intl.message('Currently active'); String dateAndTimeOfDay(String date, String timeOfDay) => Intl.message( "$date, $timeOfDay", @@ -319,6 +369,8 @@ class L10n extends MatrixLocalizations { String get enableEncryptionWarning => Intl.message( "You won't be able to disable the encryption anymore. Are you sure?"); + String get encryption => Intl.message("Encryption"); + String get encryptionAlgorithm => Intl.message("Encryption algorithm"); String get encryptionNotEnabled => Intl.message("Encryption is not enabled"); @@ -383,6 +435,10 @@ class L10n extends MatrixLocalizations { String get identity => Intl.message("Identity"); + String get incorrectPassphraseOrKey => + Intl.message("Incorrect passphrase or recovery key", + name: "incorrectPassphraseOrKey"); + String get inviteContact => Intl.message("Invite contact"); String inviteContactToGroup(String groupName) => Intl.message( @@ -407,6 +463,10 @@ class L10n extends MatrixLocalizations { String get invitedUsersOnly => Intl.message("Invited users only"); + String get isDeviceKeyCorrect => + Intl.message("Is the following device key correct?", + name: "isDeviceKeyCorrect"); + String get isTyping => Intl.message("is typing..."); String get editJitsiInstance => Intl.message('Edit Jitsi instance'); @@ -417,6 +477,13 @@ class L10n extends MatrixLocalizations { args: [username], ); + String get joinRoom => Intl.message('Join room'); + + String get keysCached => Intl.message("Keys are cached", name: "keysCached"); + + String get keysMissing => + Intl.message("Keys are missing", name: "keysMissing"); + String kicked(String username, String targetName) => Intl.message( "$username kicked $targetName", name: "kicked", @@ -495,6 +562,17 @@ class L10n extends MatrixLocalizations { String get newPrivateChat => Intl.message("New private chat"); + String get newVerificationRequest => + Intl.message("New verification request!", name: "newVerificationRequest"); + + String get noCrossSignBootstrap => Intl.message( + "Fluffychat currently does not support enabling Cross-Signing. Please enable it from within Riot.", + name: "noCrossSignBootstrap"); + + String get noMegolmBootstrap => Intl.message( + "Fluffychat currently does not support enabling Online Key Backup. Please enable it from within Riot.", + name: "noMegolmBootstrap"); + String get noGoogleServicesWarning => Intl.message( "It seems that you have no google services on your phone. That's a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/"); @@ -513,6 +591,14 @@ class L10n extends MatrixLocalizations { String get ok => Intl.message('ok'); + String get onlineKeyBackupDisabled => + Intl.message("Online Key Backup is disabled", + name: "onlineKeyBackupDisabled"); + + String get onlineKeyBackupEnabled => + Intl.message("Online Key Backup is enabled", + name: "onlineKeyBackupEnabled"); + String get oopsSomethingWentWrong => Intl.message("Oops something went wrong..."); @@ -525,6 +611,9 @@ class L10n extends MatrixLocalizations { String get participatingUserDevices => Intl.message("Participating user devices"); + String get passphraseOrKey => + Intl.message("passphrase or recovery key", name: "passphraseOrKey"); + String get password => Intl.message("Password"); String get pickImage => Intl.message('Pick image'); @@ -548,6 +637,8 @@ class L10n extends MatrixLocalizations { String get publicRooms => Intl.message("Public Rooms"); + String get reject => Intl.message("Reject"); + String get rejoin => Intl.message("Rejoin"); String get renderRichContent => Intl.message("Render rich message content"); @@ -664,6 +755,9 @@ class L10n extends MatrixLocalizations { args: [username], ); + String get sessionVerified => + Intl.message("Session is verified", name: "sessionVerified"); + String get setAProfilePicture => Intl.message("Set a profile picture"); String get setGroupDescription => Intl.message("Set group description"); @@ -676,6 +770,8 @@ class L10n extends MatrixLocalizations { String get signUp => Intl.message("Sign up"); + String get skip => Intl.message("Skip"); + String get changeTheme => Intl.message("Change your style"); String get systemTheme => Intl.message("System"); @@ -692,12 +788,18 @@ class L10n extends MatrixLocalizations { String get startYourFirstChat => Intl.message("Start your first chat :-)"); + String get submit => Intl.message("Submit"); + String get sunday => Intl.message("Sunday"); String get donate => Intl.message("Donate"); String get tapToShowMenu => Intl.message("Tap to show menu"); + String get theyDontMatch => Intl.message("They Don't Match"); + + String get theyMatch => Intl.message("They Match"); + String get thisRoomHasBeenArchived => Intl.message("This room has been archived."); @@ -728,6 +830,8 @@ class L10n extends MatrixLocalizations { args: [username, targetName], ); + String get unblockDevice => Intl.message("Unblock Device"); + String get unmuteChat => Intl.message('Unmute chat'); String get unknownDevice => Intl.message("Unknown device"); @@ -735,6 +839,10 @@ class L10n extends MatrixLocalizations { String get unknownEncryptionAlgorithm => Intl.message("Unknown encryption algorithm"); + String get unknownSessionVerify => + Intl.message("Unknown session, please verify", + name: "unknownSessionVerify"); + String unknownEvent(String type) => Intl.message( "Unknown event '$type'", name: "unknownEvent", @@ -789,6 +897,23 @@ class L10n extends MatrixLocalizations { String get verify => Intl.message("Verify"); + String get verifyManual => + Intl.message("Verify Manually", name: "verifyManual"); + + String get verifiedSession => + Intl.message("Successfully verified session!", name: "verifiedSession"); + + String get verifyStart => + Intl.message("Start Verification", name: "verifyStart"); + + String get verifySuccess => + Intl.message("You successfully verified!", name: "verifySuccess"); + + String get verifyTitle => + Intl.message("Verifying other account", name: "verifyTitle"); + + String get verifyUser => Intl.message("Verify User"); + String get videoCall => Intl.message('Video call'); String get visibleForAllParticipants => @@ -801,6 +926,18 @@ class L10n extends MatrixLocalizations { String get voiceMessage => Intl.message("Voice message"); + String get waitingPartnerAcceptRequest => + Intl.message("Waiting for partner to accept the request...", + name: "waitingPartnerAcceptRequest"); + + String get waitingPartnerEmoji => + Intl.message("Waiting for partner to accept the emoji...", + name: "waitingPartnerEmoji"); + + String get waitingPartnerNumbers => + Intl.message("Waiting for partner to accept the numbers...", + name: "waitingPartnerNumbers"); + String get wallpaper => Intl.message("Wallpaper"); String get warningEncryptionInBeta => Intl.message( diff --git a/lib/l10n/messages_all.dart b/lib/l10n/messages_all.dart index e6e2cb1..2e2bc57 100644 --- a/lib/l10n/messages_all.dart +++ b/lib/l10n/messages_all.dart @@ -15,33 +15,61 @@ import 'package:intl/intl.dart'; import 'package:intl/message_lookup_by_library.dart'; import 'package:intl/src/intl_helpers.dart'; +import 'messages_cs.dart' as messages_cs; import 'messages_de.dart' as messages_de; +import 'messages_es.dart' as messages_es; import 'messages_fr.dart' as messages_fr; +import 'messages_gl.dart' as messages_gl; +import 'messages_hr.dart' as messages_hr; import 'messages_hu.dart' as messages_hu; +import 'messages_ja.dart' as messages_ja; import 'messages_messages.dart' as messages_messages; import 'messages_pl.dart' as messages_pl; +import 'messages_ru.dart' as messages_ru; +import 'messages_sk.dart' as messages_sk; typedef Future LibraryLoader(); Map _deferredLibraries = { + 'cs': () => new Future.value(null), 'de': () => new Future.value(null), + 'es': () => new Future.value(null), 'fr': () => new Future.value(null), + 'gl': () => new Future.value(null), + 'hr': () => new Future.value(null), 'hu': () => new Future.value(null), + 'ja': () => new Future.value(null), 'messages': () => new Future.value(null), 'pl': () => new Future.value(null), + 'ru': () => new Future.value(null), + 'sk': () => new Future.value(null), }; MessageLookupByLibrary _findExact(String localeName) { switch (localeName) { + case 'cs': + return messages_cs.messages; case 'de': return messages_de.messages; + case 'es': + return messages_es.messages; case 'fr': return messages_fr.messages; + case 'gl': + return messages_gl.messages; + case 'hr': + return messages_hr.messages; case 'hu': return messages_hu.messages; + case 'ja': + return messages_ja.messages; case 'messages': return messages_messages.messages; case 'pl': return messages_pl.messages; + case 'ru': + return messages_ru.messages; + case 'sk': + return messages_sk.messages; default: return null; } diff --git a/lib/l10n/messages_cs.dart b/lib/l10n/messages_cs.dart new file mode 100644 index 0000000..8b172a0 --- /dev/null +++ b/lib/l10n/messages_cs.dart @@ -0,0 +1,525 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a cs locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'cs'; + + static m0(username) => "${username} přijali pozvání"; + + static m1(username) => "${username} aktivoval koncové šifrování"; + + static m2(username, targetName) => "${username} zabanoval ${targetName}"; + + static m3(homeserver) => + "V základním nastavení budete připojeni do ${homeserver}"; + + static m4(username) => "${username} změnili svůj avatar"; + + static m5(username, description) => + "${username} změnili popis diskuze na: „${description}“"; + + static m6(username, chatname) => + "${username} změnili jméno diskuze na: „${chatname}“"; + + static m7(username) => "${username} změnili nastavení oprávnění v diskuzi"; + + static m8(username, displayname) => + "${username} změnili přezdívku na: ${displayname}"; + + static m9(username) => "${username} změnili přístupová práva pro hosty"; + + static m10(username, rules) => + "${username} změnili přístupová práva pro hosty na: ${rules}"; + + static m11(username) => + "${username} změnili nastavení viditelnosti historie diskuze"; + + static m12(username, rules) => + "${username} změnili nastavení viditelnosti historie diskuze na: ${rules}"; + + static m13(username) => "${username} změnili nastavení pravidel připojení"; + + static m14(username, joinRules) => + "${username} změnili nastavení pravidel připojení na: ${joinRules}"; + + static m15(username) => "${username} změnili nastavení profilového avataru"; + + static m16(username) => "${username} změnili nastavení aliasů místnosti"; + + static m17(username) => "${username} změnili odkaz k pozvání do místnosti"; + + static m18(error) => "Nebylo možné dešifrovat zprávu: ${error}"; + + static m19(count) => "${count} účastníků"; + + static m20(username) => "${username} založil diskuzi"; + + static m21(date, timeOfDay) => "${date}, ${timeOfDay}"; + + static m22(year, month, day) => "${day}. ${month}. ${year}"; + + static m23(month, day) => "${day}.${month}"; + + static m24(displayname) => "Skupina s ${displayname}"; + + static m25(username, targetName) => + "${username} vzal zpět pozvání pro ${targetName}"; + + static m26(groupName) => "Pozvat kontakt do ${groupName}"; + + static m27(username, link) => ""; + + static m28(username, targetName) => "${username} pozvali ${targetName}"; + + static m29(username) => "${username} se připojili do diskuze"; + + static m30(username, targetName) => "${username} vyhodil ${targetName}"; + + static m31(username, targetName) => + "${username} vyhodil a zabanoval ${targetName}"; + + static m32(localizedTimeShort) => "Naposledy aktivní: ${localizedTimeShort}"; + + static m33(count) => "Načíst dalších ${count} účastníků"; + + static m34(homeserver) => "Přihlášení k ${homeserver}"; + + static m35(number) => "${number} vybráno"; + + static m36(fileName) => "Přehrát (fileName}"; + + static m37(username) => "${username} odstranili událost"; + + static m38(username) => "${username} odmítli pozvání"; + + static m39(username) => "Odstraněno ${username}"; + + static m40(username) => "Viděno uživatelem ${username}"; + + static m41(username, count) => + "Viděno uživateli ${username} a ${count} dalšími"; + + static m42(username, username2) => + "Viděno uživateli ${username} a ${username2}"; + + static m43(username) => "${username} poslali soubor"; + + static m44(username) => "${username} poslali obrázek"; + + static m45(username) => "${username} poslali samolepku"; + + static m46(username) => "${username} poslali video"; + + static m47(username) => "${username} poslali zvukovou nahrávku"; + + static m48(username) => "${username} nasdíleli lokaci"; + + static m49(hours12, hours24, minutes, suffix) => "${hours24}:${minutes}"; + + static m50(username, targetName) => ""; + + static m51(type) => "Neznámá událost „${type}“"; + + static m52(unreadCount) => "${unreadCount} nepřečtených diskuzí"; + + static m53(unreadEvents) => "${unreadEvents} nepřečtených zpráv"; + + static m54(unreadEvents, unreadChats) => + "${unreadEvents} nepřečtených zpráv v ${unreadChats}"; + + static m55(username, count) => "${username} a ${count} dalších píší…"; + + static m56(username, username2) => "${username} a ${username2} píší…"; + + static m57(username) => "${username} píše…"; + + static m58(username) => "${username} opustili diskuzi"; + + static m59(username, type) => "${username} poslal událost ${type}"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static _notInlinedMessages(_) => { + "(Optional) Group name": + MessageLookupByLibrary.simpleMessage("(Volitelné) Název skupiny"), + "About": MessageLookupByLibrary.simpleMessage("O aplikaci"), + "Accept": MessageLookupByLibrary.simpleMessage("Přijmout"), + "Account": MessageLookupByLibrary.simpleMessage("Účet"), + "Account informations": + MessageLookupByLibrary.simpleMessage("Informace o účtu"), + "Add a group description": + MessageLookupByLibrary.simpleMessage("Přidat popis skupiny"), + "Admin": MessageLookupByLibrary.simpleMessage("Administrátor"), + "Already have an account?": + MessageLookupByLibrary.simpleMessage("Máte již účet?"), + "Anyone can join": + MessageLookupByLibrary.simpleMessage("Kdokoliv se může připojit"), + "Archive": MessageLookupByLibrary.simpleMessage("Archiv"), + "Archived Room": + MessageLookupByLibrary.simpleMessage("Archivované místnosti"), + "Are guest users allowed to join": + MessageLookupByLibrary.simpleMessage("Mohou se připojit hosté"), + "Are you sure?": MessageLookupByLibrary.simpleMessage("Jste si jisti?"), + "Authentication": MessageLookupByLibrary.simpleMessage("Autentizace"), + "Avatar has been changed": + MessageLookupByLibrary.simpleMessage("Avatar byl změněn"), + "Ban from chat": + MessageLookupByLibrary.simpleMessage("Zabanovat z diskuze"), + "Banned": MessageLookupByLibrary.simpleMessage("Zabanován"), + "Cancel": MessageLookupByLibrary.simpleMessage("Zrušit"), + "Change the homeserver": + MessageLookupByLibrary.simpleMessage("Změnit použitý server"), + "Change the name of the group": + MessageLookupByLibrary.simpleMessage("Změnit název skupiny"), + "Change the server": + MessageLookupByLibrary.simpleMessage("Změnit server"), + "Change wallpaper": + MessageLookupByLibrary.simpleMessage("Změnit pozadí"), + "Change your style": + MessageLookupByLibrary.simpleMessage("Nastavte svůj styl"), + "Changelog": MessageLookupByLibrary.simpleMessage("Historie změn"), + "Chat": MessageLookupByLibrary.simpleMessage("Diskuze"), + "Chat details": MessageLookupByLibrary.simpleMessage("Detail diskuze"), + "Choose a strong password": + MessageLookupByLibrary.simpleMessage("Vyberte silné heslo"), + "Choose a username": + MessageLookupByLibrary.simpleMessage("Vyberte uživatelské jméno"), + "Close": MessageLookupByLibrary.simpleMessage("Zavřít"), + "Confirm": MessageLookupByLibrary.simpleMessage("Potvrdit"), + "Connect": MessageLookupByLibrary.simpleMessage("Připojit"), + "Connection attempt failed": + MessageLookupByLibrary.simpleMessage("Pokus o připojení selhal"), + "Contact has been invited to the group": + MessageLookupByLibrary.simpleMessage( + "Kontakt byl pozván do skupiny"), + "Content viewer": + MessageLookupByLibrary.simpleMessage("Prohlížeč obsahu"), + "Copied to clipboard": + MessageLookupByLibrary.simpleMessage("Zkopírováno do schránky"), + "Copy": MessageLookupByLibrary.simpleMessage("Kopírovat"), + "Could not set avatar": MessageLookupByLibrary.simpleMessage( + "Nebylo možné nastavit avatar"), + "Could not set displayname": MessageLookupByLibrary.simpleMessage( + "Nebylo možné nastavit přezdívku uživatele"), + "Create": MessageLookupByLibrary.simpleMessage("Vytvořit"), + "Create account now": + MessageLookupByLibrary.simpleMessage("Vytvořit účet teď"), + "Create new group": + MessageLookupByLibrary.simpleMessage("Založit skupinu"), + "Currently active": + MessageLookupByLibrary.simpleMessage("Momentálně aktivní"), + "Dark": MessageLookupByLibrary.simpleMessage("Tmavý"), + "Delete": MessageLookupByLibrary.simpleMessage("Smazat"), + "Delete message": MessageLookupByLibrary.simpleMessage("Smazat zprávu"), + "Deny": MessageLookupByLibrary.simpleMessage("Zakázat"), + "Device": MessageLookupByLibrary.simpleMessage("Zařízení"), + "Devices": MessageLookupByLibrary.simpleMessage("Zařízení"), + "Discard picture": + MessageLookupByLibrary.simpleMessage("Vyřadit obrázek"), + "Displayname has been changed": + MessageLookupByLibrary.simpleMessage("Přezdívka byla změněna"), + "Donate": MessageLookupByLibrary.simpleMessage("Přispějte"), + "Download file": + MessageLookupByLibrary.simpleMessage("Stáhnout soubor"), + "Edit Jitsi instance": + MessageLookupByLibrary.simpleMessage("Nastavení instance Jitsi"), + "Edit displayname": + MessageLookupByLibrary.simpleMessage("Změnit přezdívku"), + "Emote Settings": + MessageLookupByLibrary.simpleMessage("Nastavení emotikon"), + "Emote shortcode": + MessageLookupByLibrary.simpleMessage("Označení emotikony"), + "Empty chat": MessageLookupByLibrary.simpleMessage("Prázdná diskuze"), + "Encryption algorithm": + MessageLookupByLibrary.simpleMessage("Šifrovací algoritmus"), + "Encryption is not enabled": + MessageLookupByLibrary.simpleMessage("Šifrování není aktivní"), + "End to end encryption is currently in Beta! Use at your own risk!": + MessageLookupByLibrary.simpleMessage( + "Koncové šifrování je momentálně v Beta verzi! Používejte na vlastní nebezpečí!"), + "End-to-end encryption settings": MessageLookupByLibrary.simpleMessage( + "Nastavení koncového šifrování"), + "Enter a group name": + MessageLookupByLibrary.simpleMessage("Zadejte jméno skupiny"), + "Enter a username": + MessageLookupByLibrary.simpleMessage("Zadejte uživatelské jméno"), + "Enter your homeserver": + MessageLookupByLibrary.simpleMessage("Zadejte adresu serveru"), + "File name": MessageLookupByLibrary.simpleMessage("Název souboru"), + "File size": MessageLookupByLibrary.simpleMessage("Velikost souboru"), + "FluffyChat": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "Forward": MessageLookupByLibrary.simpleMessage("Přeposlat"), + "Friday": MessageLookupByLibrary.simpleMessage("Pátek"), + "From joining": MessageLookupByLibrary.simpleMessage("Od připojení"), + "From the invitation": + MessageLookupByLibrary.simpleMessage("Od pozvání"), + "Group": MessageLookupByLibrary.simpleMessage("Skupina"), + "Group description": + MessageLookupByLibrary.simpleMessage("Popis skupiny"), + "Group description has been changed": + MessageLookupByLibrary.simpleMessage("Popis skupiny byl změněn"), + "Group is public": + MessageLookupByLibrary.simpleMessage("Skupina je veřejná"), + "Guests are forbidden": + MessageLookupByLibrary.simpleMessage("Hosté jsou zakázáni"), + "Guests can join": + MessageLookupByLibrary.simpleMessage("Hosté se mohou připojit"), + "Help": MessageLookupByLibrary.simpleMessage("Pomoc"), + "Homeserver is not compatible": + MessageLookupByLibrary.simpleMessage("Server není kompatibilní"), + "How are you today?": + MessageLookupByLibrary.simpleMessage("Jak se máte?"), + "ID": MessageLookupByLibrary.simpleMessage("ID"), + "Identity": MessageLookupByLibrary.simpleMessage("Identita"), + "Invite contact": + MessageLookupByLibrary.simpleMessage("Pozvat kontakt"), + "Invited": MessageLookupByLibrary.simpleMessage("Pozváni"), + "Invited users only": + MessageLookupByLibrary.simpleMessage("Pouze pozvaní uživatelé"), + "It seems that you have no google services on your phone. That\'s a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": + MessageLookupByLibrary.simpleMessage( + "Vypadá to, že váš telefon nemá nainstalovány google services. Dobré rozhodnutí pro vaši bezpečnost! Pro příjem notifikací doporučujeme použít miocroG: https://microg.org/"), + "Kick from chat": + MessageLookupByLibrary.simpleMessage("Vyhodit z diskuze"), + "Last seen IP": + MessageLookupByLibrary.simpleMessage("Naposledy viděná IP"), + "Leave": MessageLookupByLibrary.simpleMessage("Odejít"), + "Left the chat": + MessageLookupByLibrary.simpleMessage("Odešel z diskuze"), + "License": MessageLookupByLibrary.simpleMessage("Licence"), + "Light": MessageLookupByLibrary.simpleMessage("Světlý"), + "Load more...": MessageLookupByLibrary.simpleMessage("Načíst další…"), + "Loading... Please wait": + MessageLookupByLibrary.simpleMessage("Načítání… Prosíme počkejte"), + "Login": MessageLookupByLibrary.simpleMessage("Přihlášení"), + "Logout": MessageLookupByLibrary.simpleMessage("Odhlásit"), + "Make a moderator": + MessageLookupByLibrary.simpleMessage("Učiň moderátorem"), + "Make an admin": MessageLookupByLibrary.simpleMessage("Učiň adminem"), + "Make sure the identifier is valid": + MessageLookupByLibrary.simpleMessage( + "Ujistěte se, že je identifikátor validní"), + "Message will be removed for all participants": + MessageLookupByLibrary.simpleMessage( + "Zpráva bude odstraněna pro všechny účastníky"), + "Moderator": MessageLookupByLibrary.simpleMessage("Moderátor"), + "Monday": MessageLookupByLibrary.simpleMessage("Pondělí"), + "Mute chat": MessageLookupByLibrary.simpleMessage("Ztišit diskuzi"), + "New message in FluffyChat": + MessageLookupByLibrary.simpleMessage("Nová zpráva ve FluffyChatu"), + "New private chat": + MessageLookupByLibrary.simpleMessage("Nová soukromá diskuze"), + "No emotes found. 😕": MessageLookupByLibrary.simpleMessage( + "Žádné emotikony nebyly nalezeny. 😕"), + "No permission": + MessageLookupByLibrary.simpleMessage("Chybí oprávnění"), + "No rooms found...": MessageLookupByLibrary.simpleMessage( + "Žádné místnosti nebyly nalezeny…"), + "None": MessageLookupByLibrary.simpleMessage("Nic"), + "Not supported in web": + MessageLookupByLibrary.simpleMessage("Nepodporováno na webu"), + "Oops something went wrong...": + MessageLookupByLibrary.simpleMessage("Ups! Něco se pokazilo…"), + "Open app to read messages": MessageLookupByLibrary.simpleMessage( + "Otevřete aplikaci pro přečtení zpráv"), + "Open camera": + MessageLookupByLibrary.simpleMessage("Otevřít fotoaparát"), + "Participating user devices": MessageLookupByLibrary.simpleMessage( + "Zúčastněná zařízení uživatele"), + "Password": MessageLookupByLibrary.simpleMessage("Heslo"), + "Pick image": MessageLookupByLibrary.simpleMessage("Zvolit obrázek"), + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": + MessageLookupByLibrary.simpleMessage(""), + "Please choose a username": MessageLookupByLibrary.simpleMessage( + "Prosíme zvolte si uživatelské jméno"), + "Please enter a matrix identifier": + MessageLookupByLibrary.simpleMessage( + "Prosíme zadejte identifikátor sítě matrix"), + "Please enter your password": + MessageLookupByLibrary.simpleMessage("Prosíme zadejte heslo"), + "Please enter your username": MessageLookupByLibrary.simpleMessage( + "Prosíme zadejte uživateslké jméno"), + "Public Rooms": + MessageLookupByLibrary.simpleMessage("Veřejné místnosti"), + "Recording": MessageLookupByLibrary.simpleMessage("Nahrávání"), + "Rejoin": MessageLookupByLibrary.simpleMessage("Připojit znovu"), + "Remove": MessageLookupByLibrary.simpleMessage("Odstranit"), + "Remove all other devices": MessageLookupByLibrary.simpleMessage( + "Odstranit všechna další zařízení"), + "Remove device": + MessageLookupByLibrary.simpleMessage("Odstraň zařízení"), + "Remove exile": MessageLookupByLibrary.simpleMessage(""), + "Remove message": + MessageLookupByLibrary.simpleMessage("Odstranit zprávu"), + "Render rich message content": + MessageLookupByLibrary.simpleMessage("Zobrazit formátovaný obsah"), + "Reply": MessageLookupByLibrary.simpleMessage("Odpovědět"), + "Request permission": + MessageLookupByLibrary.simpleMessage("Vyžádat oprávnění"), + "Request to read older messages": MessageLookupByLibrary.simpleMessage( + "Vyžádat přečtení starších zpráv"), + "Revoke all permissions": MessageLookupByLibrary.simpleMessage( + "Vezmi zpět všechna oprávnění"), + "Saturday": MessageLookupByLibrary.simpleMessage("Sobota"), + "Search for a chat": + MessageLookupByLibrary.simpleMessage("Hledej diskuzi"), + "Seen a long time ago": MessageLookupByLibrary.simpleMessage(""), + "Send": MessageLookupByLibrary.simpleMessage("Odeslat"), + "Send a message": + MessageLookupByLibrary.simpleMessage("Odeslat zprávu"), + "Send file": MessageLookupByLibrary.simpleMessage("Odeslat soubor"), + "Send image": MessageLookupByLibrary.simpleMessage("Odeslat obrázek"), + "Set a profile picture": + MessageLookupByLibrary.simpleMessage("Nastavit profilový obrázek"), + "Set group description": + MessageLookupByLibrary.simpleMessage("Nastavit popis skupiny"), + "Set invitation link": + MessageLookupByLibrary.simpleMessage("Nastavit zvací odkaz"), + "Set status": MessageLookupByLibrary.simpleMessage("Nastavit status"), + "Settings": MessageLookupByLibrary.simpleMessage("Nastavení"), + "Share": MessageLookupByLibrary.simpleMessage("Sdílet"), + "Sign up": MessageLookupByLibrary.simpleMessage("Registrovat se"), + "Source code": MessageLookupByLibrary.simpleMessage("Zdrojové kódy"), + "Start your first chat :-)": MessageLookupByLibrary.simpleMessage( + "Začněte svou první diskuzi :)"), + "Sunday": MessageLookupByLibrary.simpleMessage("Neděle"), + "System": MessageLookupByLibrary.simpleMessage("Systém"), + "Tap to show menu": + MessageLookupByLibrary.simpleMessage("Klepněte pro zobrazení menu"), + "The encryption has been corrupted": + MessageLookupByLibrary.simpleMessage("Šifrování bylo poškozeno"), + "This room has been archived.": MessageLookupByLibrary.simpleMessage( + "Tato místnost byla archivována."), + "Thursday": MessageLookupByLibrary.simpleMessage("Čtvrtek"), + "Try to send again": MessageLookupByLibrary.simpleMessage(""), + "Tuesday": MessageLookupByLibrary.simpleMessage(""), + "Unknown device": + MessageLookupByLibrary.simpleMessage("Neznámé zařízení"), + "Unknown encryption algorithm": MessageLookupByLibrary.simpleMessage( + "Neznámý šifrovací algoritmus"), + "Unmute chat": MessageLookupByLibrary.simpleMessage("Zrušit ztišení"), + "Use Amoled compatible colors?": MessageLookupByLibrary.simpleMessage( + "Použít barvy kompatibilní s Amoled displayem?"), + "Username": MessageLookupByLibrary.simpleMessage("Uživatelské jméno"), + "Verify": MessageLookupByLibrary.simpleMessage("Ověř"), + "Video call": MessageLookupByLibrary.simpleMessage("Video hovor"), + "Visibility of the chat history": MessageLookupByLibrary.simpleMessage( + "Viditelnost historie diskuze"), + "Visible for all participants": MessageLookupByLibrary.simpleMessage( + "Viditelné pro všechny účastníky"), + "Visible for everyone": + MessageLookupByLibrary.simpleMessage("Viditelné pro všechny"), + "Voice message": MessageLookupByLibrary.simpleMessage("Hlasová zpráva"), + "Wallpaper": MessageLookupByLibrary.simpleMessage("Pozadí"), + "Wednesday": MessageLookupByLibrary.simpleMessage("Středa"), + "Welcome to the cutest instant messenger in the matrix network.": + MessageLookupByLibrary.simpleMessage( + "Vítejte v nejroztomilejší diskuzní aplikaci pro síť matrix."), + "Who is allowed to join this group": + MessageLookupByLibrary.simpleMessage( + "Kdo se může připojit do této skupiny"), + "Write a message...": + MessageLookupByLibrary.simpleMessage("Napište zprávu…"), + "Yes": MessageLookupByLibrary.simpleMessage("Ano"), + "You": MessageLookupByLibrary.simpleMessage("Ty"), + "You are invited to this chat": + MessageLookupByLibrary.simpleMessage("Jste zváni do této diskuze"), + "You are no longer participating in this chat": + MessageLookupByLibrary.simpleMessage( + "Této diskuze se nadále neúčastníte"), + "You cannot invite yourself": + MessageLookupByLibrary.simpleMessage("Nemůžete pozvat sami sebe"), + "You have been banned from this chat": + MessageLookupByLibrary.simpleMessage( + "Byli jste zabanováni z této diskuze"), + "You won\'t be able to disable the encryption anymore. Are you sure?": + MessageLookupByLibrary.simpleMessage( + "Šifrování jiš nebude možné vypnout. Jste si tím jisti?"), + "Your own username": MessageLookupByLibrary.simpleMessage( + "Vaše vlastní uživatelské jméno"), + "acceptedTheInvitation": m0, + "activatedEndToEndEncryption": m1, + "alias": MessageLookupByLibrary.simpleMessage("alias"), + "bannedUser": m2, + "byDefaultYouWillBeConnectedTo": m3, + "changedTheChatAvatar": m4, + "changedTheChatDescriptionTo": m5, + "changedTheChatNameTo": m6, + "changedTheChatPermissions": m7, + "changedTheDisplaynameTo": m8, + "changedTheGuestAccessRules": m9, + "changedTheGuestAccessRulesTo": m10, + "changedTheHistoryVisibility": m11, + "changedTheHistoryVisibilityTo": m12, + "changedTheJoinRules": m13, + "changedTheJoinRulesTo": m14, + "changedTheProfileAvatar": m15, + "changedTheRoomAliases": m16, + "changedTheRoomInvitationLink": m17, + "couldNotDecryptMessage": m18, + "countParticipants": m19, + "createdTheChat": m20, + "dateAndTimeOfDay": m21, + "dateWithYear": m22, + "dateWithoutYear": m23, + "emoteExists": + MessageLookupByLibrary.simpleMessage("Emotikona již existuje"), + "emoteInvalid": MessageLookupByLibrary.simpleMessage( + "Nesprávné označení emotikony"), + "emoteWarnNeedToPick": MessageLookupByLibrary.simpleMessage( + "Musíte zvolit označení emotikony a obrázek"), + "groupWith": m24, + "hasWithdrawnTheInvitationFor": m25, + "inviteContactToGroup": m26, + "inviteText": m27, + "invitedUser": m28, + "is typing...": MessageLookupByLibrary.simpleMessage("píše…"), + "joinedTheChat": m29, + "kicked": m30, + "kickedAndBanned": m31, + "lastActiveAgo": m32, + "loadCountMoreParticipants": m33, + "logInTo": m34, + "numberSelected": m35, + "ok": MessageLookupByLibrary.simpleMessage("ok"), + "play": m36, + "redactedAnEvent": m37, + "rejectedTheInvitation": m38, + "removedBy": m39, + "seenByUser": m40, + "seenByUserAndCountOthers": m41, + "seenByUserAndUser": m42, + "sentAFile": m43, + "sentAPicture": m44, + "sentASticker": m45, + "sentAVideo": m46, + "sentAnAudio": m47, + "sharedTheLocation": m48, + "timeOfDay": m49, + "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "unbannedUser": m50, + "unknownEvent": m51, + "unreadChats": m52, + "unreadMessages": m53, + "unreadMessagesInChats": m54, + "userAndOthersAreTyping": m55, + "userAndUserAreTyping": m56, + "userIsTyping": m57, + "userLeftTheChat": m58, + "userSentUnknownEvent": m59 + }; +} diff --git a/lib/l10n/messages_de.dart b/lib/l10n/messages_de.dart index 3685ccb..af1406d 100644 --- a/lib/l10n/messages_de.dart +++ b/lib/l10n/messages_de.dart @@ -24,6 +24,8 @@ class MessageLookup extends MessageLookupByLibrary { static m1(username) => "${username} hat Ende-zu-Ende Verschlüsselung aktiviert"; + static m60(username) => "Diese Bestätigungsanfrage von ${username} annehmen?"; + static m2(username, targetName) => "${username} hat ${targetName} verbannt"; static m3(homeserver) => "Standardmäßig wirst Du mit ${homeserver} verbunden"; @@ -71,16 +73,16 @@ class MessageLookup extends MessageLookupByLibrary { static m21(date, timeOfDay) => "${date}, ${timeOfDay}"; - static m22(year, month, day) => "${day}.${month}.${year}"; + static m22(year, month, day) => "${day}. ${month}. ${year}"; - static m23(month, day) => "${day}.${month}"; + static m23(month, day) => "${day}. ${month}"; static m24(displayname) => "Gruppe mit ${displayname}"; static m25(username, targetName) => "${username} hat die Einladung für ${targetName} zurückgezogen"; - static m26(groupName) => "Kontakt zu ${groupName} einladen"; + static m26(groupName) => "Kontakt in die Gruppe ${groupName} einladen"; static m27(username, link) => "${username} hat Dich zu FluffyChat eingeladen. \n1. Installiere FluffyChat: http://fluffy.chat \n2. Melde Dich in der App an \n3. Öffne den Einladungslink: ${link}"; @@ -96,7 +98,7 @@ class MessageLookup extends MessageLookupByLibrary { static m31(username, targetName) => "${username} hat ${targetName} hinausgeworfen und verbannt"; - static m32(localizedTimeShort) => "Zuletzt gesehen: ${localizedTimeShort}"; + static m32(localizedTimeShort) => "Zuletzt aktiv: ${localizedTimeShort}"; static m33(count) => "${count} weitere Teilnehmer*innen laden"; @@ -104,7 +106,7 @@ class MessageLookup extends MessageLookupByLibrary { static m35(number) => "${number} ausgewählt"; - static m36(fileName) => "Play ${fileName}"; + static m36(fileName) => "${fileName} abspielen"; static m37(username) => "${username} hat ein Event enternt"; @@ -135,7 +137,7 @@ class MessageLookup extends MessageLookupByLibrary { static m50(username, targetName) => "${username} hat die Verbannung von ${targetName} aufgehoben"; - static m51(type) => "Unbekanntes Event \'${type}\'"; + static m51(type) => "Unbekanntes Ereignis \'${type}\'"; static m52(unreadCount) => "${unreadCount} ungelesene Unterhaltungen"; @@ -161,6 +163,7 @@ class MessageLookup extends MessageLookupByLibrary { "(Optional) Group name": MessageLookupByLibrary.simpleMessage( "(Optional) Name für die Gruppe"), "About": MessageLookupByLibrary.simpleMessage("Über"), + "Accept": MessageLookupByLibrary.simpleMessage("Annehmen"), "Account": MessageLookupByLibrary.simpleMessage("Konto"), "Account informations": MessageLookupByLibrary.simpleMessage("Kontoinformationen"), @@ -184,7 +187,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Avatar wurde geändert"), "Ban from chat": MessageLookupByLibrary.simpleMessage("Aus dem Chat verbannen"), - "Banned": MessageLookupByLibrary.simpleMessage("Banned"), + "Banned": MessageLookupByLibrary.simpleMessage("Verbannt"), + "Block Device": MessageLookupByLibrary.simpleMessage("Blockiere Gerät"), "Cancel": MessageLookupByLibrary.simpleMessage("Abbrechen"), "Change the homeserver": MessageLookupByLibrary.simpleMessage( "Anderen Homeserver verwenden"), @@ -196,7 +200,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Hintergrund ändern"), "Change your style": MessageLookupByLibrary.simpleMessage("Ändere Deinen Style"), - "Changelog": MessageLookupByLibrary.simpleMessage("Changelog"), + "Changelog": + MessageLookupByLibrary.simpleMessage("Protokoll der Änderungen"), "Chat": MessageLookupByLibrary.simpleMessage("Chat"), "Chat details": MessageLookupByLibrary.simpleMessage("Gruppeninfo"), "Choose a strong password": @@ -220,11 +225,11 @@ class MessageLookup extends MessageLookupByLibrary { "Profilbild konnte nicht gesetzt werden"), "Could not set displayname": MessageLookupByLibrary.simpleMessage( "Anzeigename konnte nicht gesetzt werden"), - "Create": MessageLookupByLibrary.simpleMessage("Create"), + "Create": MessageLookupByLibrary.simpleMessage("Erstellen"), "Create account now": MessageLookupByLibrary.simpleMessage("Account jetzt erstellen"), "Create new group": MessageLookupByLibrary.simpleMessage("Neue Gruppe"), - "Currenlty active": + "Currently active": MessageLookupByLibrary.simpleMessage("Jetzt gerade online"), "Dark": MessageLookupByLibrary.simpleMessage("Dunkel"), "Delete": MessageLookupByLibrary.simpleMessage("Löschen"), @@ -248,6 +253,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Emote Einstellungen"), "Emote shortcode": MessageLookupByLibrary.simpleMessage("Emote kürzel"), "Empty chat": MessageLookupByLibrary.simpleMessage("Leerer Chat"), + "Encryption": MessageLookupByLibrary.simpleMessage("Verschlüsselung"), "Encryption algorithm": MessageLookupByLibrary.simpleMessage("Verschlüsselungsalgorithmus"), "Encryption is not enabled": MessageLookupByLibrary.simpleMessage( @@ -286,6 +292,8 @@ class MessageLookup extends MessageLookupByLibrary { "Help": MessageLookupByLibrary.simpleMessage("Hilfe"), "Homeserver is not compatible": MessageLookupByLibrary.simpleMessage( "Homeserver ist nicht kompatibel"), + "How are you today?": + MessageLookupByLibrary.simpleMessage("Wie geht es dir heute?"), "ID": MessageLookupByLibrary.simpleMessage("ID"), "Identity": MessageLookupByLibrary.simpleMessage("Identität"), "Invite contact": @@ -309,7 +317,7 @@ class MessageLookup extends MessageLookupByLibrary { "Loading... Please wait": MessageLookupByLibrary.simpleMessage("Lade ... Bitte warten"), "Login": MessageLookupByLibrary.simpleMessage("Login"), - "Logout": MessageLookupByLibrary.simpleMessage("Logout"), + "Logout": MessageLookupByLibrary.simpleMessage("Abmelden"), "Make a moderator": MessageLookupByLibrary.simpleMessage("Zum Moderator ernennen"), "Make an admin": @@ -338,6 +346,8 @@ class MessageLookup extends MessageLookupByLibrary { "Wird in der Web-Version nicht unterstützt"), "Oops something went wrong...": MessageLookupByLibrary.simpleMessage( "Hoppla! Da ist etwas schief gelaufen ..."), + "Open app to read messages": MessageLookupByLibrary.simpleMessage( + "Öffne app, um Nachrichten zu lesen"), "Open camera": MessageLookupByLibrary.simpleMessage("Kamera öffnen"), "Participating user devices": MessageLookupByLibrary.simpleMessage("Teilnehmende Geräte"), @@ -358,6 +368,7 @@ class MessageLookup extends MessageLookupByLibrary { "Public Rooms": MessageLookupByLibrary.simpleMessage("Öffentliche Räume"), "Recording": MessageLookupByLibrary.simpleMessage("Aufnahme"), + "Reject": MessageLookupByLibrary.simpleMessage("Ablehnen"), "Rejoin": MessageLookupByLibrary.simpleMessage("Wieder beitreten"), "Remove": MessageLookupByLibrary.simpleMessage("Entfernen"), "Remove all other devices": MessageLookupByLibrary.simpleMessage( @@ -377,9 +388,11 @@ class MessageLookup extends MessageLookupByLibrary { "Anfrage um ältere Nachrichten zu lesen"), "Revoke all permissions": MessageLookupByLibrary.simpleMessage( "Alle Berechtigungen zurücknehmen"), + "Room has been upgraded": + MessageLookupByLibrary.simpleMessage("Der Raum wurde ge-upgraded"), "Saturday": MessageLookupByLibrary.simpleMessage("Samstag"), "Search for a chat": - MessageLookupByLibrary.simpleMessage("Durchsuche die Chats"), + MessageLookupByLibrary.simpleMessage("Chat suchen"), "Seen a long time ago": MessageLookupByLibrary.simpleMessage( "Vor sehr langer Zeit gesehen"), "Send": MessageLookupByLibrary.simpleMessage("Senden"), @@ -397,9 +410,11 @@ class MessageLookup extends MessageLookupByLibrary { "Settings": MessageLookupByLibrary.simpleMessage("Einstellungen"), "Share": MessageLookupByLibrary.simpleMessage("Teilen"), "Sign up": MessageLookupByLibrary.simpleMessage("Registrieren"), + "Skip": MessageLookupByLibrary.simpleMessage("Überspringe"), "Source code": MessageLookupByLibrary.simpleMessage("Quellcode"), "Start your first chat :-)": MessageLookupByLibrary.simpleMessage( "Starte deinen ersten Chat :-)"), + "Submit": MessageLookupByLibrary.simpleMessage("Absenden"), "Sunday": MessageLookupByLibrary.simpleMessage("Sonntag"), "System": MessageLookupByLibrary.simpleMessage("System"), "Tap to show menu": MessageLookupByLibrary.simpleMessage( @@ -407,12 +422,17 @@ class MessageLookup extends MessageLookupByLibrary { "The encryption has been corrupted": MessageLookupByLibrary.simpleMessage( "Die Verschlüsselung wurde korrumpiert"), + "They Don\'t Match": + MessageLookupByLibrary.simpleMessage("Stimmen nicht überein"), + "They Match": MessageLookupByLibrary.simpleMessage("Stimmen überein"), "This room has been archived.": MessageLookupByLibrary.simpleMessage( "Dieser Raum wurde archiviert."), "Thursday": MessageLookupByLibrary.simpleMessage("Donnerstag"), "Try to send again": MessageLookupByLibrary.simpleMessage("Nochmal versuchen zu senden"), "Tuesday": MessageLookupByLibrary.simpleMessage("Dienstag"), + "Unblock Device": + MessageLookupByLibrary.simpleMessage("Geräteblockierung aufheben"), "Unknown device": MessageLookupByLibrary.simpleMessage("Unbekanntes Gerät"), "Unknown encryption algorithm": MessageLookupByLibrary.simpleMessage( @@ -422,6 +442,8 @@ class MessageLookup extends MessageLookupByLibrary { "Amoled optimierte Farben verwenden?"), "Username": MessageLookupByLibrary.simpleMessage("Benutzername"), "Verify": MessageLookupByLibrary.simpleMessage("Bestätigen"), + "Verify User": + MessageLookupByLibrary.simpleMessage("Verifiziere Benutzer"), "Video call": MessageLookupByLibrary.simpleMessage("Videoanruf"), "Visibility of the chat history": MessageLookupByLibrary.simpleMessage( "Sichtbarkeit des Chat-Verlaufs"), @@ -461,8 +483,17 @@ class MessageLookup extends MessageLookupByLibrary { "acceptedTheInvitation": m0, "activatedEndToEndEncryption": m1, "alias": MessageLookupByLibrary.simpleMessage("Alias"), + "askSSSSCache": MessageLookupByLibrary.simpleMessage( + "Bitte gib dein Secure-Store Passwort oder Wiederherstellungsschlüssel ein, um die Keys zu cachen."), + "askSSSSSign": MessageLookupByLibrary.simpleMessage( + "Bitte gebe um die andere Person signieren zu können dein Secure-Store Passwort oder Wiederherstellungsschlüssel ein."), + "askSSSSVerify": MessageLookupByLibrary.simpleMessage( + "Bitte gebe um deine Session zu verifizieren dein Secure-Store Passwort oder Wiederherstellungsschlüssel ein."), + "askVerificationRequest": m60, "bannedUser": m2, "byDefaultYouWillBeConnectedTo": m3, + "cachedKeys": + MessageLookupByLibrary.simpleMessage("Keys erfolgreich gecached!"), "changedTheChatAvatar": m4, "changedTheChatDescriptionTo": m5, "changedTheChatNameTo": m6, @@ -477,9 +508,17 @@ class MessageLookup extends MessageLookupByLibrary { "changedTheProfileAvatar": m15, "changedTheRoomAliases": m16, "changedTheRoomInvitationLink": m17, + "compareEmojiMatch": MessageLookupByLibrary.simpleMessage( + "Vergleiche und stelle sicher, dass die folgenden Emoji mit denen des anderen Gerätes übereinstimmen:"), + "compareNumbersMatch": MessageLookupByLibrary.simpleMessage( + "Vergleiche und stelle sicher, dass die folgenden Zahlen mit denen des anderen Gerätes übereinstimmen:"), "couldNotDecryptMessage": m18, "countParticipants": m19, "createdTheChat": m20, + "crossSigningDisabled": MessageLookupByLibrary.simpleMessage( + "Cross-Signing ist deaktiviert"), + "crossSigningEnabled": + MessageLookupByLibrary.simpleMessage("Cross-Signing ist aktiviert"), "dateAndTimeOfDay": m21, "dateWithYear": m22, "dateWithoutYear": m23, @@ -491,18 +530,37 @@ class MessageLookup extends MessageLookupByLibrary { "Wähle ein Emote-kürzel und ein Bild!"), "groupWith": m24, "hasWithdrawnTheInvitationFor": m25, + "incorrectPassphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Falsches Passwort oder Wiederherstellungsschlüssel"), "inviteContactToGroup": m26, "inviteText": m27, "invitedUser": m28, "is typing...": MessageLookupByLibrary.simpleMessage("schreibt..."), + "isDeviceKeyCorrect": MessageLookupByLibrary.simpleMessage( + "Ist der folgende Geräteschlüssel korrekt?"), "joinedTheChat": m29, + "keysCached": + MessageLookupByLibrary.simpleMessage("Keys sind gecached"), + "keysMissing": MessageLookupByLibrary.simpleMessage("Keys fehlen"), "kicked": m30, "kickedAndBanned": m31, "lastActiveAgo": m32, "loadCountMoreParticipants": m33, "logInTo": m34, + "newVerificationRequest": + MessageLookupByLibrary.simpleMessage("Neue Verifikationsanfrage!"), + "noCrossSignBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat unterstützt noch nicht das Einschalten von Cross-Signing. Bitte schalte es innerhalb Riot an."), + "noMegolmBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat unterstützt noch nicht das Einschalten vom Online Key Backup. Bitte schalte es innerhalb Riot an."), "numberSelected": m35, "ok": MessageLookupByLibrary.simpleMessage("ok"), + "onlineKeyBackupDisabled": MessageLookupByLibrary.simpleMessage( + "Online Key Backup ist deaktiviert"), + "onlineKeyBackupEnabled": MessageLookupByLibrary.simpleMessage( + "Online Key Backup ist aktiviert"), + "passphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Passwort oder Wiederherstellungsschlüssel"), "play": m36, "redactedAnEvent": m37, "rejectedTheInvitation": m38, @@ -515,11 +573,15 @@ class MessageLookup extends MessageLookupByLibrary { "sentASticker": m45, "sentAVideo": m46, "sentAnAudio": m47, + "sessionVerified": + MessageLookupByLibrary.simpleMessage("Sitzung ist verifiziert"), "sharedTheLocation": m48, "timeOfDay": m49, "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), "unbannedUser": m50, "unknownEvent": m51, + "unknownSessionVerify": MessageLookupByLibrary.simpleMessage( + "Unbekannte Sitzung, bitte verifiziere diese"), "unreadChats": m52, "unreadMessages": m53, "unreadMessagesInChats": m54, @@ -527,6 +589,22 @@ class MessageLookup extends MessageLookupByLibrary { "userAndUserAreTyping": m56, "userIsTyping": m57, "userLeftTheChat": m58, - "userSentUnknownEvent": m59 + "userSentUnknownEvent": m59, + "verifiedSession": MessageLookupByLibrary.simpleMessage( + "Sitzung erfolgreich verifiziert!"), + "verifyManual": + MessageLookupByLibrary.simpleMessage("Verifiziere manuell"), + "verifyStart": + MessageLookupByLibrary.simpleMessage("Starte Verifikation"), + "verifySuccess": + MessageLookupByLibrary.simpleMessage("Erfolgreich verifiziert!"), + "verifyTitle": MessageLookupByLibrary.simpleMessage( + "Verifiziere anderen Benutzer"), + "waitingPartnerAcceptRequest": MessageLookupByLibrary.simpleMessage( + "Warte darauf, dass der Partner die Verifikationsanfrage annimmt..."), + "waitingPartnerEmoji": MessageLookupByLibrary.simpleMessage( + "Warte darauf, dass der Partner die Emoji annimmt..."), + "waitingPartnerNumbers": MessageLookupByLibrary.simpleMessage( + "Warte darauf, dass der Partner die Zahlen annimmt...") }; } diff --git a/lib/l10n/messages_es.dart b/lib/l10n/messages_es.dart new file mode 100644 index 0000000..d68d547 --- /dev/null +++ b/lib/l10n/messages_es.dart @@ -0,0 +1,609 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a es locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'es'; + + static m0(username) => "${username} aceptó la invitación"; + + static m1(username) => "${username} activó el cifrado de extremo a extremo"; + + static m60(username) => + "¿Aceptar esta solicitud de verificación de ${username}?"; + + static m2(username, targetName) => "${username} vetó a ${targetName}"; + + static m3(homeserver) => + "De forma predeterminada estará conectado a ${homeserver}"; + + static m4(username) => "${username} cambió el icono del chat"; + + static m5(username, description) => + "${username} cambió la descripción del chat a: \'${description}\'"; + + static m6(username, chatname) => + "${username} cambió el nombre del chat a: \'${chatname}\'"; + + static m7(username) => "${username} cambió los permisos del chat"; + + static m8(username, displayname) => + "${username} cambió su nombre visible a: ${displayname}"; + + static m9(username) => + "${username} cambió las reglas de acceso de visitantes"; + + static m10(username, rules) => + "${username} cambió las reglas de acceso de visitantes a: ${rules}"; + + static m11(username) => "${username} cambió la visibilidad del historial"; + + static m12(username, rules) => + "${username} cambió la visibilidad del historial a: ${rules}"; + + static m13(username) => "${username} cambió las reglas de ingreso"; + + static m14(username, joinRules) => + "${username} cambió las reglas de ingreso a ${joinRules}"; + + static m15(username) => "${username} cambió su imagen de perfil"; + + static m16(username) => "${username} cambió el alias de la sala"; + + static m17(username) => "${username} cambió el enlace de invitación"; + + static m18(error) => "No se pudo descifrar el mensaje: ${error}"; + + static m19(count) => "${count} participantes"; + + static m20(username) => "${username} creó el chat"; + + static m21(date, timeOfDay) => "${date}, ${timeOfDay}"; + + static m22(year, month, day) => "${day}/${month}/${year}"; + + static m23(month, day) => "${day}/${month}"; + + static m24(displayname) => "Grupo con ${displayname}"; + + static m25(username, targetName) => + "${username} ha retirado la invitación para ${targetName}"; + + static m26(groupName) => "Invitar contacto a ${groupName}"; + + static m27(username, link) => + "${username} te invitó a FluffyChat.\n1. Instale FluffyChat: http://fluffy.chat\n2. Regístrate o inicia sesión \n3. Abra el enlace de invitación: ${link}"; + + static m28(username, targetName) => "${username} invitó a ${targetName}"; + + static m29(username) => "${username} se unió al chat"; + + static m30(username, targetName) => "${username} echó a ${targetName}"; + + static m31(username, targetName) => "${username} echó y vetó a ${targetName}"; + + static m32(localizedTimeShort) => "Última vez activo: ${localizedTimeShort}"; + + static m33(count) => "Mostrar ${count} participantes más"; + + static m34(homeserver) => "Iniciar sesión en ${homeserver}"; + + static m35(number) => "${number} seleccionado(s)"; + + static m36(fileName) => "Reproducir ${fileName}"; + + static m37(username) => "${username} redactó un evento"; + + static m38(username) => "${username} rechazó la invitación"; + + static m39(username) => "Eliminado por ${username}"; + + static m40(username) => "Visto por ${username}"; + + static m41(username, count) => "Visto por ${username} y ${count} más"; + + static m42(username, username2) => "Visto por ${username} y ${username2}"; + + static m43(username) => "${username} envió un archivo"; + + static m44(username) => "${username} envió una imagen"; + + static m45(username) => "${username} envió un sticker"; + + static m46(username) => "${username} envió un video"; + + static m47(username) => "${username} envió un audio"; + + static m48(username) => "${username} compartió la ubicación"; + + static m49(hours12, hours24, minutes, suffix) => "${hours24}:${minutes}"; + + static m50(username, targetName) => + "${username} admitió a ${targetName} nuevamente"; + + static m51(type) => "Evento desconocido \'${type}\'"; + + static m52(unreadCount) => "${unreadCount} chats no leídos"; + + static m53(unreadEvents) => "${unreadEvents} mensajes no leídos"; + + static m54(unreadEvents, unreadChats) => + "${unreadEvents} mensajes no leídos en ${unreadChats} chats"; + + static m55(username, count) => + "${username} y ${count} más están escribiendo..."; + + static m56(username, username2) => + "${username} y ${username2} están escribiendo..."; + + static m57(username) => "${username} está escribiendo..."; + + static m58(username) => "${username} abandonó el chat"; + + static m59(username, type) => "${username} envió un evento ${type}"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static _notInlinedMessages(_) => { + "(Optional) Group name": + MessageLookupByLibrary.simpleMessage("(Opcional) Nombre del grupo"), + "About": MessageLookupByLibrary.simpleMessage("Acerca de"), + "Accept": MessageLookupByLibrary.simpleMessage("Aceptar"), + "Account": MessageLookupByLibrary.simpleMessage("Cuenta"), + "Account informations": + MessageLookupByLibrary.simpleMessage("Información de la cuenta"), + "Add a group description": MessageLookupByLibrary.simpleMessage( + "Agregar una descripción al grupo"), + "Admin": MessageLookupByLibrary.simpleMessage("Administrador"), + "Already have an account?": + MessageLookupByLibrary.simpleMessage("¿Ya tienes una cuenta?"), + "Anyone can join": + MessageLookupByLibrary.simpleMessage("Cualquiera puede unirse"), + "Archive": MessageLookupByLibrary.simpleMessage("Archivo"), + "Archived Room": MessageLookupByLibrary.simpleMessage("Sala archivada"), + "Are guest users allowed to join": MessageLookupByLibrary.simpleMessage( + "¿Pueden unirse los usuarios visitantes?"), + "Are you sure?": MessageLookupByLibrary.simpleMessage("¿Estás seguro?"), + "Authentication": MessageLookupByLibrary.simpleMessage("Autenticación"), + "Avatar has been changed": MessageLookupByLibrary.simpleMessage( + "La imagen de perfil ha sido cambiada"), + "Ban from chat": MessageLookupByLibrary.simpleMessage("Vetar del chat"), + "Banned": MessageLookupByLibrary.simpleMessage("Vetado"), + "Block Device": + MessageLookupByLibrary.simpleMessage("Bloquear dispositivo"), + "Cancel": MessageLookupByLibrary.simpleMessage("Cancelar"), + "Change the homeserver": + MessageLookupByLibrary.simpleMessage("Cambiar el servidor"), + "Change the name of the group": + MessageLookupByLibrary.simpleMessage("Cambiar el nombre del grupo"), + "Change the server": + MessageLookupByLibrary.simpleMessage("Cambiar el servidor"), + "Change wallpaper": MessageLookupByLibrary.simpleMessage( + "Cambiar el fondo de pantalla"), + "Change your style": + MessageLookupByLibrary.simpleMessage("Cambia tu estilo"), + "Changelog": + MessageLookupByLibrary.simpleMessage("Registro de cambios"), + "Chat": MessageLookupByLibrary.simpleMessage("Chat"), + "Chat details": + MessageLookupByLibrary.simpleMessage("Detalles del chat"), + "Choose a strong password": + MessageLookupByLibrary.simpleMessage("Elija una contraseña segura"), + "Choose a username": + MessageLookupByLibrary.simpleMessage("Elija un nombre de usuario"), + "Close": MessageLookupByLibrary.simpleMessage("Cerrar"), + "Confirm": MessageLookupByLibrary.simpleMessage("Confirmar"), + "Connect": MessageLookupByLibrary.simpleMessage("Conectar"), + "Connection attempt failed": MessageLookupByLibrary.simpleMessage( + "Falló el intento de conexión"), + "Contact has been invited to the group": + MessageLookupByLibrary.simpleMessage( + "El contacto ha sido invitado al grupo"), + "Content viewer": + MessageLookupByLibrary.simpleMessage("Visor de contenido"), + "Copied to clipboard": + MessageLookupByLibrary.simpleMessage("Copiado al portapapeles"), + "Copy": MessageLookupByLibrary.simpleMessage("Copiar"), + "Could not set avatar": MessageLookupByLibrary.simpleMessage( + "No se pudo establecer la imagen de perfil"), + "Could not set displayname": MessageLookupByLibrary.simpleMessage( + "No se pudo establecer el nombre visible"), + "Create": MessageLookupByLibrary.simpleMessage("Crear"), + "Create account now": + MessageLookupByLibrary.simpleMessage("Crear cuenta ahora"), + "Create new group": + MessageLookupByLibrary.simpleMessage("Crear grupo nuevo"), + "Currently active": + MessageLookupByLibrary.simpleMessage("Actualmente activo"), + "Dark": MessageLookupByLibrary.simpleMessage("Oscuro"), + "Delete": MessageLookupByLibrary.simpleMessage("Eliminar"), + "Delete message": + MessageLookupByLibrary.simpleMessage("Eliminar mensaje"), + "Deny": MessageLookupByLibrary.simpleMessage("Rechazar"), + "Device": MessageLookupByLibrary.simpleMessage("Dispositivo"), + "Devices": MessageLookupByLibrary.simpleMessage("Dispositivos"), + "Discard picture": + MessageLookupByLibrary.simpleMessage("Descartar imagen"), + "Displayname has been changed": MessageLookupByLibrary.simpleMessage( + "El nombre visible ha cambiado"), + "Donate": MessageLookupByLibrary.simpleMessage("Donar"), + "Download file": + MessageLookupByLibrary.simpleMessage("Descargar archivo"), + "Edit Jitsi instance": MessageLookupByLibrary.simpleMessage( + "Cambiar la instancia de Jitsi"), + "Edit displayname": + MessageLookupByLibrary.simpleMessage("Editar nombre visible"), + "Emote Settings": + MessageLookupByLibrary.simpleMessage("Configuración de emotes"), + "Emote shortcode": + MessageLookupByLibrary.simpleMessage("Atajo de emote"), + "Empty chat": MessageLookupByLibrary.simpleMessage("Chat vacío"), + "Encryption": MessageLookupByLibrary.simpleMessage("Cifrado"), + "Encryption algorithm": + MessageLookupByLibrary.simpleMessage("Algoritmo de cifrado"), + "Encryption is not enabled": MessageLookupByLibrary.simpleMessage( + "El cifrado no está habilitado"), + "End to end encryption is currently in Beta! Use at your own risk!": + MessageLookupByLibrary.simpleMessage( + "¡El cifrado de extremo a extremo está actualmente en período de prueba! ¡Úselo bajo su propio riesgo!"), + "End-to-end encryption settings": MessageLookupByLibrary.simpleMessage( + "Configuración del cifrado de extremo a extremo"), + "Enter a group name": + MessageLookupByLibrary.simpleMessage("Ingrese un nombre de grupo"), + "Enter a username": MessageLookupByLibrary.simpleMessage( + "Ingrese un nombre de usuario"), + "Enter your homeserver": + MessageLookupByLibrary.simpleMessage("Ingrese su servidor"), + "File name": MessageLookupByLibrary.simpleMessage("Nombre del archivo"), + "File size": MessageLookupByLibrary.simpleMessage("Tamaño del archivo"), + "FluffyChat": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "Forward": MessageLookupByLibrary.simpleMessage("Reenviar"), + "Friday": MessageLookupByLibrary.simpleMessage("Viernes"), + "From joining": + MessageLookupByLibrary.simpleMessage("Desde que se unió"), + "From the invitation": + MessageLookupByLibrary.simpleMessage("Desde la invitación"), + "Group": MessageLookupByLibrary.simpleMessage("Grupo"), + "Group description": + MessageLookupByLibrary.simpleMessage("Descripción del grupo"), + "Group description has been changed": + MessageLookupByLibrary.simpleMessage( + "La descripción del grupo ha sido cambiada"), + "Group is public": + MessageLookupByLibrary.simpleMessage("El grupo es público"), + "Guests are forbidden": MessageLookupByLibrary.simpleMessage( + "Los visitantes están prohibidos"), + "Guests can join": MessageLookupByLibrary.simpleMessage( + "Los visitantes pueden unirse"), + "Help": MessageLookupByLibrary.simpleMessage("Ayuda"), + "Homeserver is not compatible": MessageLookupByLibrary.simpleMessage( + "El servidor no es compatible"), + "How are you today?": + MessageLookupByLibrary.simpleMessage("¿Cómo estás hoy?"), + "ID": MessageLookupByLibrary.simpleMessage("Identificación"), + "Identity": MessageLookupByLibrary.simpleMessage("Identidad"), + "Invite contact": + MessageLookupByLibrary.simpleMessage("Invitar contacto"), + "Invited": MessageLookupByLibrary.simpleMessage("Invitado"), + "Invited users only": + MessageLookupByLibrary.simpleMessage("Sólo usuarios invitados"), + "It seems that you have no google services on your phone. That\'s a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": + MessageLookupByLibrary.simpleMessage( + "Parece que no tienes servicios de Google en tu teléfono. ¡Esa es una buena decisión para tu privacidad! Para recibir notificaciones instantáneas en FluffyChat, recomendamos usar microG: https://microg.org/"), + "Kick from chat": + MessageLookupByLibrary.simpleMessage("Echar del chat"), + "Last seen IP": + MessageLookupByLibrary.simpleMessage("Última dirección IP vista"), + "Leave": MessageLookupByLibrary.simpleMessage("Abandonar"), + "Left the chat": + MessageLookupByLibrary.simpleMessage("Abandonó el chat"), + "License": MessageLookupByLibrary.simpleMessage("Licencia"), + "Light": MessageLookupByLibrary.simpleMessage("Claro"), + "Load more...": MessageLookupByLibrary.simpleMessage("Mostrar más..."), + "Loading... Please wait": MessageLookupByLibrary.simpleMessage( + "Cargando... Por favor espere"), + "Login": MessageLookupByLibrary.simpleMessage("Iniciar sesión"), + "Logout": MessageLookupByLibrary.simpleMessage("Cerrar sesión"), + "Make a moderator": + MessageLookupByLibrary.simpleMessage("Hacer un moderador/a"), + "Make an admin": + MessageLookupByLibrary.simpleMessage("Hacer un administrador/a"), + "Make sure the identifier is valid": + MessageLookupByLibrary.simpleMessage( + "Asegúrese de que el identificador es válido"), + "Message will be removed for all participants": + MessageLookupByLibrary.simpleMessage( + "El mensaje será eliminado para todos los participantes"), + "Moderator": MessageLookupByLibrary.simpleMessage("Moderador"), + "Monday": MessageLookupByLibrary.simpleMessage("Lunes"), + "Mute chat": MessageLookupByLibrary.simpleMessage("Silenciar chat"), + "New message in FluffyChat": + MessageLookupByLibrary.simpleMessage("Nuevo mensaje en FluffyChat"), + "New private chat": + MessageLookupByLibrary.simpleMessage("Nuevo chat privado"), + "No emotes found. 😕": + MessageLookupByLibrary.simpleMessage("Ningún emote encontrado. 😕"), + "No permission": + MessageLookupByLibrary.simpleMessage("Sin autorización"), + "No rooms found...": + MessageLookupByLibrary.simpleMessage("Ninguna sala encontrada..."), + "None": MessageLookupByLibrary.simpleMessage("Ninguno"), + "Not supported in web": MessageLookupByLibrary.simpleMessage( + "No es compatible con la versión web"), + "Oops something went wrong...": + MessageLookupByLibrary.simpleMessage("Ups, algo salió mal..."), + "Open app to read messages": MessageLookupByLibrary.simpleMessage( + "Abrir la aplicación para leer los mensajes"), + "Open camera": MessageLookupByLibrary.simpleMessage("Abrir la cámara"), + "Participating user devices": MessageLookupByLibrary.simpleMessage( + "Dispositivos de usuario participantes"), + "Password": MessageLookupByLibrary.simpleMessage("Contraseña"), + "Pick image": MessageLookupByLibrary.simpleMessage("Elegir imagen"), + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": + MessageLookupByLibrary.simpleMessage( + "Tenga en cuenta que necesita Pantalaimon para utilizar el cifrado de extremo a extremo por ahora."), + "Please choose a username": MessageLookupByLibrary.simpleMessage( + "Por favor, elija un nombre de usuario"), + "Please enter a matrix identifier": + MessageLookupByLibrary.simpleMessage( + "Por favor, ingrese un identificador matrix"), + "Please enter your password": MessageLookupByLibrary.simpleMessage( + "Por favor ingrese su contraseña"), + "Please enter your username": MessageLookupByLibrary.simpleMessage( + "Por favor ingrese su nombre de usuario"), + "Public Rooms": MessageLookupByLibrary.simpleMessage("Salas públicas"), + "Recording": MessageLookupByLibrary.simpleMessage("Grabando"), + "Reject": MessageLookupByLibrary.simpleMessage("Rechazar"), + "Rejoin": MessageLookupByLibrary.simpleMessage("Volver a unirse"), + "Remove": MessageLookupByLibrary.simpleMessage("Eliminar"), + "Remove all other devices": MessageLookupByLibrary.simpleMessage( + "Eliminar todos los otros dispositivos"), + "Remove device": + MessageLookupByLibrary.simpleMessage("Eliminar dispositivo"), + "Remove exile": + MessageLookupByLibrary.simpleMessage("Eliminar la expulsión"), + "Remove message": + MessageLookupByLibrary.simpleMessage("Eliminar mensaje"), + "Render rich message content": MessageLookupByLibrary.simpleMessage( + "Mostrar el contenido con mensajes enriquecidos"), + "Reply": MessageLookupByLibrary.simpleMessage("Responder"), + "Request permission": + MessageLookupByLibrary.simpleMessage("Solicitar permiso"), + "Request to read older messages": MessageLookupByLibrary.simpleMessage( + "Solicitar poder leer mensajes antiguos"), + "Revoke all permissions": + MessageLookupByLibrary.simpleMessage("Revocar todos los permisos"), + "Room has been upgraded": MessageLookupByLibrary.simpleMessage( + "La sala ha subido de categoría"), + "Saturday": MessageLookupByLibrary.simpleMessage("Sábado"), + "Search for a chat": + MessageLookupByLibrary.simpleMessage("Buscar un chat"), + "Seen a long time ago": + MessageLookupByLibrary.simpleMessage("Visto hace mucho tiempo"), + "Send": MessageLookupByLibrary.simpleMessage("Enviar"), + "Send a message": + MessageLookupByLibrary.simpleMessage("Enviar un mensaje"), + "Send file": MessageLookupByLibrary.simpleMessage("Enviar un archivo"), + "Send image": MessageLookupByLibrary.simpleMessage("Enviar una imagen"), + "Set a profile picture": MessageLookupByLibrary.simpleMessage( + "Establecer una foto de perfil"), + "Set group description": MessageLookupByLibrary.simpleMessage( + "Establecer descripción del grupo"), + "Set invitation link": MessageLookupByLibrary.simpleMessage( + "Establecer enlace de invitación"), + "Set status": MessageLookupByLibrary.simpleMessage("Establecer estado"), + "Settings": MessageLookupByLibrary.simpleMessage("Ajustes"), + "Share": MessageLookupByLibrary.simpleMessage("Compartir"), + "Sign up": MessageLookupByLibrary.simpleMessage("Registrarse"), + "Skip": MessageLookupByLibrary.simpleMessage("Omitir"), + "Source code": MessageLookupByLibrary.simpleMessage("Código fuente"), + "Start your first chat :-)": + MessageLookupByLibrary.simpleMessage("Comience su primer chat :-)"), + "Submit": MessageLookupByLibrary.simpleMessage("Enviar"), + "Sunday": MessageLookupByLibrary.simpleMessage("Domingo"), + "System": MessageLookupByLibrary.simpleMessage("Sistema"), + "Tap to show menu": + MessageLookupByLibrary.simpleMessage("Toca para mostrar el menú"), + "The encryption has been corrupted": + MessageLookupByLibrary.simpleMessage("El cifrado se ha corrompido"), + "They Don\'t Match": + MessageLookupByLibrary.simpleMessage("No coinciden"), + "They Match": MessageLookupByLibrary.simpleMessage("Coinciden"), + "This room has been archived.": MessageLookupByLibrary.simpleMessage( + "Esta sala ha sido archivada."), + "Thursday": MessageLookupByLibrary.simpleMessage("Jueves"), + "Try to send again": + MessageLookupByLibrary.simpleMessage("Intentar enviar nuevamente"), + "Tuesday": MessageLookupByLibrary.simpleMessage("Martes"), + "Unblock Device": + MessageLookupByLibrary.simpleMessage("Desbloquear dispositivo"), + "Unknown device": + MessageLookupByLibrary.simpleMessage("Dispositivo desconocido"), + "Unknown encryption algorithm": MessageLookupByLibrary.simpleMessage( + "Algoritmo de cifrado desconocido"), + "Unmute chat": + MessageLookupByLibrary.simpleMessage("Dejar de silenciar el chat"), + "Use Amoled compatible colors?": MessageLookupByLibrary.simpleMessage( + "¿Usar colores compatibles con AMOLED?"), + "Username": MessageLookupByLibrary.simpleMessage("Nombre de usuario"), + "Verify": MessageLookupByLibrary.simpleMessage("Verificar"), + "Verify User": + MessageLookupByLibrary.simpleMessage("Verificar usuario"), + "Video call": MessageLookupByLibrary.simpleMessage("Video llamada"), + "Visibility of the chat history": MessageLookupByLibrary.simpleMessage( + "Visibilidad del historial del chat"), + "Visible for all participants": MessageLookupByLibrary.simpleMessage( + "Visible para todos los participantes"), + "Visible for everyone": + MessageLookupByLibrary.simpleMessage("Visible para todo el mundo"), + "Voice message": MessageLookupByLibrary.simpleMessage("Mensaje de voz"), + "Wallpaper": MessageLookupByLibrary.simpleMessage("Fondo de pantalla"), + "Wednesday": MessageLookupByLibrary.simpleMessage("Miércoles"), + "Welcome to the cutest instant messenger in the matrix network.": + MessageLookupByLibrary.simpleMessage( + "Bienvenido al mensajero instantáneo más tierno de la red Matrix."), + "Who is allowed to join this group": + MessageLookupByLibrary.simpleMessage( + "Quién tiene permitido unirse al grupo"), + "Write a message...": + MessageLookupByLibrary.simpleMessage("Escribe un mensaje..."), + "Yes": MessageLookupByLibrary.simpleMessage("Sí"), + "You": MessageLookupByLibrary.simpleMessage("Tú"), + "You are invited to this chat": + MessageLookupByLibrary.simpleMessage("Estás invitado a este chat"), + "You are no longer participating in this chat": + MessageLookupByLibrary.simpleMessage( + "Ya no estás participando en este chat"), + "You cannot invite yourself": MessageLookupByLibrary.simpleMessage( + "No puedes invitarte a tí mismo"), + "You have been banned from this chat": + MessageLookupByLibrary.simpleMessage( + "Has sido vetado de este chat"), + "You won\'t be able to disable the encryption anymore. Are you sure?": + MessageLookupByLibrary.simpleMessage( + "Ya no podrá deshabilitar el cifrado. ¿Estás seguro?"), + "Your own username": + MessageLookupByLibrary.simpleMessage("Tu nombre de usuario"), + "acceptedTheInvitation": m0, + "activatedEndToEndEncryption": m1, + "alias": MessageLookupByLibrary.simpleMessage("alias"), + "askSSSSCache": MessageLookupByLibrary.simpleMessage( + "Ingrese su contraseña de almacenamiento segura (SSSS) o la clave de recuperación para almacenar en caché las claves."), + "askSSSSSign": MessageLookupByLibrary.simpleMessage( + "Para poder confirmar a la otra persona, ingrese su contraseña de almacenamiento segura o la clave de recuperación."), + "askSSSSVerify": MessageLookupByLibrary.simpleMessage( + "Por favor, ingrese su contraseña de almacenamiento seguro (SSSS) o la clave de recuperación para verificar su sesión."), + "askVerificationRequest": m60, + "bannedUser": m2, + "byDefaultYouWillBeConnectedTo": m3, + "cachedKeys": MessageLookupByLibrary.simpleMessage( + "¡Las claves se han almacenado exitosamente!"), + "changedTheChatAvatar": m4, + "changedTheChatDescriptionTo": m5, + "changedTheChatNameTo": m6, + "changedTheChatPermissions": m7, + "changedTheDisplaynameTo": m8, + "changedTheGuestAccessRules": m9, + "changedTheGuestAccessRulesTo": m10, + "changedTheHistoryVisibility": m11, + "changedTheHistoryVisibilityTo": m12, + "changedTheJoinRules": m13, + "changedTheJoinRulesTo": m14, + "changedTheProfileAvatar": m15, + "changedTheRoomAliases": m16, + "changedTheRoomInvitationLink": m17, + "compareEmojiMatch": MessageLookupByLibrary.simpleMessage( + "Compare y asegúrese de que los siguientes emoji coincidan con los del otro dispositivo:"), + "compareNumbersMatch": MessageLookupByLibrary.simpleMessage( + "Compare y asegúrese de que los siguientes números coincidan con los del otro dispositivo:"), + "couldNotDecryptMessage": m18, + "countParticipants": m19, + "createdTheChat": m20, + "crossSigningDisabled": MessageLookupByLibrary.simpleMessage( + "La confirmación cruzada está deshabilitada"), + "crossSigningEnabled": MessageLookupByLibrary.simpleMessage( + "La confirmación cruzada está habilitada"), + "dateAndTimeOfDay": m21, + "dateWithYear": m22, + "dateWithoutYear": m23, + "emoteExists": + MessageLookupByLibrary.simpleMessage("¡El emote ya existe!"), + "emoteInvalid": MessageLookupByLibrary.simpleMessage( + "¡El atajo del emote es inválido!"), + "emoteWarnNeedToPick": MessageLookupByLibrary.simpleMessage( + "¡Debes elegir un atajo de emote y una imagen!"), + "groupWith": m24, + "hasWithdrawnTheInvitationFor": m25, + "incorrectPassphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Frase de contraseña o clave de recuperación incorrecta"), + "inviteContactToGroup": m26, + "inviteText": m27, + "invitedUser": m28, + "is typing...": + MessageLookupByLibrary.simpleMessage("está escribiendo..."), + "isDeviceKeyCorrect": MessageLookupByLibrary.simpleMessage( + "¿Es correcta la siguiente clave de dispositivo?"), + "joinedTheChat": m29, + "keysCached": + MessageLookupByLibrary.simpleMessage("Las claves están en caché"), + "keysMissing": + MessageLookupByLibrary.simpleMessage("Faltan las claves"), + "kicked": m30, + "kickedAndBanned": m31, + "lastActiveAgo": m32, + "loadCountMoreParticipants": m33, + "logInTo": m34, + "newVerificationRequest": MessageLookupByLibrary.simpleMessage( + "¡Nueva solicitud de verificación!"), + "noCrossSignBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat actualmente no admite habilitar confirmación cruzada. Por favor habilítela desde Element."), + "noMegolmBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat actualmente no admite habilitar la Copia de seguridad de clave en línea. Por favor habilítela desde Element."), + "numberSelected": m35, + "ok": MessageLookupByLibrary.simpleMessage("ok"), + "onlineKeyBackupDisabled": MessageLookupByLibrary.simpleMessage( + "La copia de seguridad de la clave en línea está deshabilitada"), + "onlineKeyBackupEnabled": MessageLookupByLibrary.simpleMessage( + "La copia de seguridad de la clave en línea está habilitada"), + "passphraseOrKey": MessageLookupByLibrary.simpleMessage( + "contraseña o clave de recuperación"), + "play": m36, + "redactedAnEvent": m37, + "rejectedTheInvitation": m38, + "removedBy": m39, + "seenByUser": m40, + "seenByUserAndCountOthers": m41, + "seenByUserAndUser": m42, + "sentAFile": m43, + "sentAPicture": m44, + "sentASticker": m45, + "sentAVideo": m46, + "sentAnAudio": m47, + "sessionVerified": + MessageLookupByLibrary.simpleMessage("La sesión está verificada"), + "sharedTheLocation": m48, + "timeOfDay": m49, + "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "unbannedUser": m50, + "unknownEvent": m51, + "unknownSessionVerify": MessageLookupByLibrary.simpleMessage( + "Sesión desconocida, por favor verifíquela"), + "unreadChats": m52, + "unreadMessages": m53, + "unreadMessagesInChats": m54, + "userAndOthersAreTyping": m55, + "userAndUserAreTyping": m56, + "userIsTyping": m57, + "userLeftTheChat": m58, + "userSentUnknownEvent": m59, + "verifiedSession": MessageLookupByLibrary.simpleMessage( + "¡Sesión verificada exitosamente!"), + "verifyManual": + MessageLookupByLibrary.simpleMessage("Verificar manualmente"), + "verifyStart": + MessageLookupByLibrary.simpleMessage("Comenzar verificación"), + "verifySuccess": MessageLookupByLibrary.simpleMessage( + "¡Has verificado exitosamente!"), + "verifyTitle": + MessageLookupByLibrary.simpleMessage("Verificando la otra cuenta"), + "waitingPartnerAcceptRequest": MessageLookupByLibrary.simpleMessage( + "Esperando a que el socio acepte la solicitud..."), + "waitingPartnerEmoji": MessageLookupByLibrary.simpleMessage( + "Esperando a que el socio acepte los emojis..."), + "waitingPartnerNumbers": MessageLookupByLibrary.simpleMessage( + "Esperando a que el socio acepte los números...") + }; +} diff --git a/lib/l10n/messages_fr.dart b/lib/l10n/messages_fr.dart index df16fb0..a051d87 100644 --- a/lib/l10n/messages_fr.dart +++ b/lib/l10n/messages_fr.dart @@ -23,6 +23,9 @@ class MessageLookup extends MessageLookupByLibrary { static m1(username) => "${username} a activé le chiffrement de bout en bout"; + static m60(username) => + "Accepter cette demande de vérification de ${username} ?"; + static m2(username, targetName) => "${username} a banni ${targetName}"; static m3(homeserver) => "Par défaut, vous serez connecté à ${homeserver}"; @@ -45,7 +48,7 @@ class MessageLookup extends MessageLookupByLibrary { "${username} a changé les règles d\'accès à la discussion pour les invités"; static m10(username, rules) => - "${username} a changé les règles d\'accès à la discussion pour les invités en : ${rules}"; + "${username} a changé les règles d\'accès à la discussion pour les invités en : ${rules}"; static m11(username) => "${username} a changé la visibilité de l\'historique de la discussion"; @@ -97,7 +100,7 @@ class MessageLookup extends MessageLookupByLibrary { "${username} a expulsé et banni ${targetName}"; static m32(localizedTimeShort) => - "Vu pour la dernière fois: ${localizedTimeShort}"; + "Vu pour la dernière fois : ${localizedTimeShort}"; static m33(count) => "Charger ${count} participants de plus"; @@ -161,8 +164,9 @@ class MessageLookup extends MessageLookupByLibrary { static _notInlinedMessages(_) => { "(Optional) Group name": MessageLookupByLibrary.simpleMessage("(Optionnel) Nom du groupe"), - "About": MessageLookupByLibrary.simpleMessage("About"), - "Account": MessageLookupByLibrary.simpleMessage("Account"), + "About": MessageLookupByLibrary.simpleMessage("À propos"), + "Accept": MessageLookupByLibrary.simpleMessage("Accepter"), + "Account": MessageLookupByLibrary.simpleMessage("Compte"), "Account informations": MessageLookupByLibrary.simpleMessage("Informations du compte"), "Add a group description": MessageLookupByLibrary.simpleMessage( @@ -184,7 +188,9 @@ class MessageLookup extends MessageLookupByLibrary { "L\'image de profil a été changée"), "Ban from chat": MessageLookupByLibrary.simpleMessage("Bannir de la discussion"), - "Banned": MessageLookupByLibrary.simpleMessage("Banned"), + "Banned": MessageLookupByLibrary.simpleMessage("Banni"), + "Block Device": + MessageLookupByLibrary.simpleMessage("Bloquer l\'appareil"), "Cancel": MessageLookupByLibrary.simpleMessage("Annuler"), "Change the homeserver": MessageLookupByLibrary.simpleMessage( "Changer le serveur d\'accueil"), @@ -227,7 +233,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Créer un compte"), "Create new group": MessageLookupByLibrary.simpleMessage("Créer un nouveau groupe"), - "Currenlty active": + "Currently active": MessageLookupByLibrary.simpleMessage("Actif en ce moment"), "Dark": MessageLookupByLibrary.simpleMessage("Sombre"), "Delete": MessageLookupByLibrary.simpleMessage("Supprimer"), @@ -252,13 +258,14 @@ class MessageLookup extends MessageLookupByLibrary { "Emote shortcode": MessageLookupByLibrary.simpleMessage("Raccourci d\'émoticône"), "Empty chat": MessageLookupByLibrary.simpleMessage("Discussion vide"), + "Encryption": MessageLookupByLibrary.simpleMessage("Chiffrement"), "Encryption algorithm": MessageLookupByLibrary.simpleMessage("Algorithme de chiffrement"), "Encryption is not enabled": MessageLookupByLibrary.simpleMessage( "Le chiffrement n\'est pas actif"), "End to end encryption is currently in Beta! Use at your own risk!": MessageLookupByLibrary.simpleMessage( - "Le chiffrement de bout en bout est actuellement en beta ! Utilisez cette fonctionnalité à vos propres risques !!"), + "Le chiffrement de bout en bout est actuellement en béta ! Utilisez cette fonctionnalité à vos propres risques !"), "End-to-end encryption settings": MessageLookupByLibrary.simpleMessage( "Paramètres du chiffrement de bout en bout"), "Enter a group name": @@ -307,16 +314,16 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Expulser de la discussion"), "Last seen IP": MessageLookupByLibrary.simpleMessage( "Dernière addresse IP utilisée"), - "Leave": MessageLookupByLibrary.simpleMessage("Leave"), + "Leave": MessageLookupByLibrary.simpleMessage("Partir"), "Left the chat": - MessageLookupByLibrary.simpleMessage("Discussion quittée"), + MessageLookupByLibrary.simpleMessage("A quitté la discussion"), "License": MessageLookupByLibrary.simpleMessage("Licence"), "Light": MessageLookupByLibrary.simpleMessage("Clair"), "Load more...": MessageLookupByLibrary.simpleMessage("Charger plus..."), "Loading... Please wait": MessageLookupByLibrary.simpleMessage( "Chargement... Merci de patienter"), "Login": MessageLookupByLibrary.simpleMessage("Connexion"), - "Logout": MessageLookupByLibrary.simpleMessage("Logout"), + "Logout": MessageLookupByLibrary.simpleMessage("Se déconnecter"), "Make a moderator": MessageLookupByLibrary.simpleMessage("Promouvoir comme modérateur"), "Make an admin": MessageLookupByLibrary.simpleMessage( @@ -368,6 +375,7 @@ class MessageLookup extends MessageLookupByLibrary { "Renseignez votre nom d\'utilisateur"), "Public Rooms": MessageLookupByLibrary.simpleMessage("Salons publics"), "Recording": MessageLookupByLibrary.simpleMessage("Enregistrement"), + "Reject": MessageLookupByLibrary.simpleMessage("Refuser"), "Rejoin": MessageLookupByLibrary.simpleMessage("Rejoindre de nouveau"), "Remove": MessageLookupByLibrary.simpleMessage("Supprimer"), "Remove all other devices": MessageLookupByLibrary.simpleMessage( @@ -387,6 +395,8 @@ class MessageLookup extends MessageLookupByLibrary { "Demander à lire les anciens messages"), "Revoke all permissions": MessageLookupByLibrary.simpleMessage( "Révoquer toutes les permissions"), + "Room has been upgraded": + MessageLookupByLibrary.simpleMessage("Le salon a été mis à niveau"), "Saturday": MessageLookupByLibrary.simpleMessage("Samedi"), "Search for a chat": MessageLookupByLibrary.simpleMessage("Rechercher une discussion"), @@ -407,9 +417,11 @@ class MessageLookup extends MessageLookupByLibrary { "Settings": MessageLookupByLibrary.simpleMessage("Paramètres"), "Share": MessageLookupByLibrary.simpleMessage("Partager"), "Sign up": MessageLookupByLibrary.simpleMessage("S\'inscrire"), + "Skip": MessageLookupByLibrary.simpleMessage("Ignorer"), "Source code": MessageLookupByLibrary.simpleMessage("Code source"), "Start your first chat :-)": MessageLookupByLibrary.simpleMessage( "Démarrez votre première discussion :-)"), + "Submit": MessageLookupByLibrary.simpleMessage("Soumettre"), "Sunday": MessageLookupByLibrary.simpleMessage("Dimanche"), "System": MessageLookupByLibrary.simpleMessage("Système"), "Tap to show menu": MessageLookupByLibrary.simpleMessage( @@ -417,12 +429,18 @@ class MessageLookup extends MessageLookupByLibrary { "The encryption has been corrupted": MessageLookupByLibrary.simpleMessage( "Le chiffrement a été corrompu"), + "They Don\'t Match": + MessageLookupByLibrary.simpleMessage("Elles ne correspondent pas"), + "They Match": + MessageLookupByLibrary.simpleMessage("Elles correspondent"), "This room has been archived.": MessageLookupByLibrary.simpleMessage("Ce salon a été archivé."), "Thursday": MessageLookupByLibrary.simpleMessage("Jeudi"), "Try to send again": MessageLookupByLibrary.simpleMessage("Retenter l\'envoi"), "Tuesday": MessageLookupByLibrary.simpleMessage("Mardi"), + "Unblock Device": + MessageLookupByLibrary.simpleMessage("Débloquer l\'appareil"), "Unknown device": MessageLookupByLibrary.simpleMessage("Périphérique inconnu"), "Unknown encryption algorithm": MessageLookupByLibrary.simpleMessage( @@ -433,6 +451,8 @@ class MessageLookup extends MessageLookupByLibrary { "Utiliser des couleurs compatibles Amoled ?"), "Username": MessageLookupByLibrary.simpleMessage("Nom d\'utilisateur"), "Verify": MessageLookupByLibrary.simpleMessage("Vérifier"), + "Verify User": MessageLookupByLibrary.simpleMessage( + "Vérifier l\'utilisateur/trice"), "Video call": MessageLookupByLibrary.simpleMessage("Appel vidéo"), "Visibility of the chat history": MessageLookupByLibrary.simpleMessage( "Visibilité de l\'historique de la discussion"), @@ -471,8 +491,17 @@ class MessageLookup extends MessageLookupByLibrary { "acceptedTheInvitation": m0, "activatedEndToEndEncryption": m1, "alias": MessageLookupByLibrary.simpleMessage("adresse"), + "askSSSSCache": MessageLookupByLibrary.simpleMessage( + "Veuillez saisir votre phrase de passe stockée de manière sécurisée ou votre clé de récupération pour mettre les clés en cache."), + "askSSSSSign": MessageLookupByLibrary.simpleMessage( + "Pour pouvoir faire signer l\'autre personne, veuillez entrer votre phrase de passe stockée de manière sécurisée ou votre clé de récupération."), + "askSSSSVerify": MessageLookupByLibrary.simpleMessage( + "Veuillez saisir votre phrase de passe stockée de manière sécurisée ou votre clé de récupération pour vérifier votre session."), + "askVerificationRequest": m60, "bannedUser": m2, "byDefaultYouWillBeConnectedTo": m3, + "cachedKeys": MessageLookupByLibrary.simpleMessage( + "Clés mises en cache avec succès !"), "changedTheChatAvatar": m4, "changedTheChatDescriptionTo": m5, "changedTheChatNameTo": m6, @@ -487,9 +516,17 @@ class MessageLookup extends MessageLookupByLibrary { "changedTheProfileAvatar": m15, "changedTheRoomAliases": m16, "changedTheRoomInvitationLink": m17, + "compareEmojiMatch": MessageLookupByLibrary.simpleMessage( + "Comparez et assurez-vous que les emojis suivants correspondent à ceux de l\'autre appareil :"), + "compareNumbersMatch": MessageLookupByLibrary.simpleMessage( + "Comparez et assurez-vous que les chiffres suivants correspondent à ceux de l\'autre appareil :"), "couldNotDecryptMessage": m18, "countParticipants": m19, "createdTheChat": m20, + "crossSigningDisabled": MessageLookupByLibrary.simpleMessage( + "La signature croisée est désactivée"), + "crossSigningEnabled": MessageLookupByLibrary.simpleMessage( + "La signature croisée est activée"), "dateAndTimeOfDay": m21, "dateWithYear": m22, "dateWithoutYear": m23, @@ -501,18 +538,39 @@ class MessageLookup extends MessageLookupByLibrary { "Vous devez sélectionner un raccourci d\'émoticône et une image !"), "groupWith": m24, "hasWithdrawnTheInvitationFor": m25, + "incorrectPassphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Phrase de passe ou clé de récupération incorrecte"), "inviteContactToGroup": m26, "inviteText": m27, "invitedUser": m28, - "is typing...": MessageLookupByLibrary.simpleMessage("is typing..."), + "is typing...": + MessageLookupByLibrary.simpleMessage("est en train d\'écrire..."), + "isDeviceKeyCorrect": MessageLookupByLibrary.simpleMessage( + "La clé de l\'appareil ci-dessous est-elle correcte ?"), "joinedTheChat": m29, + "keysCached": MessageLookupByLibrary.simpleMessage( + "Les clés sont mises en cache"), + "keysMissing": + MessageLookupByLibrary.simpleMessage("Les clés sont manquantes"), "kicked": m30, "kickedAndBanned": m31, "lastActiveAgo": m32, "loadCountMoreParticipants": m33, "logInTo": m34, + "newVerificationRequest": MessageLookupByLibrary.simpleMessage( + "Nouvelle demande de vérification !"), + "noCrossSignBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat ne permet pas actuellement d\'activer la signature croisée. Veuillez l\'activer à partir de Element."), + "noMegolmBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat ne prend pas actuellement en charge l\'activation de la sauvegarde des clés en ligne. Veuillez l\'activer à partir de Element."), "numberSelected": m35, "ok": MessageLookupByLibrary.simpleMessage("ok"), + "onlineKeyBackupDisabled": MessageLookupByLibrary.simpleMessage( + "La sauvegarde en ligne des clés est désactivée"), + "onlineKeyBackupEnabled": MessageLookupByLibrary.simpleMessage( + "La sauvegarde en ligne des clés est activée"), + "passphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Phrase de passe ou clé de récupération"), "play": m36, "redactedAnEvent": m37, "rejectedTheInvitation": m38, @@ -525,11 +583,15 @@ class MessageLookup extends MessageLookupByLibrary { "sentASticker": m45, "sentAVideo": m46, "sentAnAudio": m47, + "sessionVerified": + MessageLookupByLibrary.simpleMessage("La session est vérifiée"), "sharedTheLocation": m48, "timeOfDay": m49, "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), "unbannedUser": m50, "unknownEvent": m51, + "unknownSessionVerify": MessageLookupByLibrary.simpleMessage( + "Session inconnue, veuillez vérifier"), "unreadChats": m52, "unreadMessages": m53, "unreadMessagesInChats": m54, @@ -537,6 +599,22 @@ class MessageLookup extends MessageLookupByLibrary { "userAndUserAreTyping": m56, "userIsTyping": m57, "userLeftTheChat": m58, - "userSentUnknownEvent": m59 + "userSentUnknownEvent": m59, + "verifiedSession": MessageLookupByLibrary.simpleMessage( + "Session vérifiée avec succès !"), + "verifyManual": + MessageLookupByLibrary.simpleMessage("Vérifier manuellement"), + "verifyStart": + MessageLookupByLibrary.simpleMessage("Commencer la vérification"), + "verifySuccess": MessageLookupByLibrary.simpleMessage( + "Vous avez vérifié avec succès !"), + "verifyTitle": MessageLookupByLibrary.simpleMessage( + "Vérification de l\'autre compte"), + "waitingPartnerAcceptRequest": MessageLookupByLibrary.simpleMessage( + "En attente de la vérification de la demande par le partenaire..."), + "waitingPartnerEmoji": MessageLookupByLibrary.simpleMessage( + "En attente de l\'acceptation de l\'émoji par le partenaire..."), + "waitingPartnerNumbers": MessageLookupByLibrary.simpleMessage( + "En attente de l\'acceptation des nombres par le partenaire...") }; } diff --git a/lib/l10n/messages_gl.dart b/lib/l10n/messages_gl.dart new file mode 100644 index 0000000..4cb2c81 --- /dev/null +++ b/lib/l10n/messages_gl.dart @@ -0,0 +1,606 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a gl locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'gl'; + + static m0(username) => "${username} aceptou o convite"; + + static m1(username) => "${username} activou o cifrado extremo-a-extremo"; + + static m60(username) => + "¿Aceptar a solicitude de verificación de ${username}?"; + + static m2(username, targetName) => "${username} vetou a ${targetName}"; + + static m3(homeserver) => "Por omisión vas conectar con ${homeserver}"; + + static m4(username) => "${username} cambiou o avatar do chat"; + + static m5(username, description) => + "${username} mudou a descrición da conversa a: \'${description}\'"; + + static m6(username, chatname) => + "${username} mudou o nome da conversa a: \'${chatname}\'"; + + static m7(username) => "${username} mudou os permisos da conversa"; + + static m8(username, displayname) => + "${username} cambiou o nome público a: ${displayname}"; + + static m9(username) => + "${username} mudou as regras de acceso para convidadas"; + + static m10(username, rules) => + "${username} mudou as regras de acceso para convidadas a: ${rules}"; + + static m11(username) => "${username} mudou a visibilidade do historial"; + + static m12(username, rules) => + "${username} mudou a visibilidade do historial a: ${rules}"; + + static m13(username) => "${username} mudou as regras de acceso"; + + static m14(username, joinRules) => + "${username} mudou as regras de acceso a: ${joinRules}"; + + static m15(username) => "${username} mudou o avatar do perfil"; + + static m16(username) => "${username} mudou os alias da sala"; + + static m17(username) => "${username} mudou a ligazón de convite"; + + static m18(error) => "Non se descifrou a mensaxe: ${error}"; + + static m19(count) => "${count} participantes"; + + static m20(username) => "${username} creou a conversa"; + + static m21(date, timeOfDay) => "${date}, ${timeOfDay}"; + + static m22(year, month, day) => "${day}-${month}-${year}"; + + static m23(month, day) => "${day}-${month}"; + + static m24(displayname) => "Grupo con ${displayname}"; + + static m25(username, targetName) => + "${username} retirou o convite para ${targetName}"; + + static m26(groupName) => "Convidar contacto a ${groupName}"; + + static m27(username, link) => + "${username} convidoute a FluffyChat.\n1. instala FluffyChat: http://fluffy.chat \n2. Rexístrate ou conéctate\n3. Abre a ligazón do convite: ${link}"; + + static m28(username, targetName) => "${username} convidou a ${targetName}"; + + static m29(username) => "${username} uníuse ó chat"; + + static m30(username, targetName) => "${username} expulsou a ${targetName}"; + + static m31(username, targetName) => + "${username} expulsou e vetou a ${targetName}"; + + static m32(localizedTimeShort) => "Última actividade: ${localizedTimeShort}"; + + static m33(count) => "Cargar ${count} participantes máis"; + + static m34(homeserver) => "Conectar con ${homeserver}"; + + static m35(number) => "${number} seleccionados"; + + static m36(fileName) => "Reproducir ${fileName}"; + + static m37(username) => "${username} publicou un evento"; + + static m38(username) => "${username} rexeitou o convite"; + + static m39(username) => "Eliminado por ${username}"; + + static m40(username) => "Visto por ${username}"; + + static m41(username, count) => "Visto por ${username} e ${count} outras"; + + static m42(username, username2) => "Visto por ${username} e ${username2}"; + + static m43(username) => "${username} enviou un ficheiro"; + + static m44(username) => "${username} enviou unha imaxe"; + + static m45(username) => "${username} enviou un adhesivo"; + + static m46(username) => "${username} enviou un vídeo"; + + static m47(username) => "${username} enviou un audio"; + + static m48(username) => "${username} compartiu a localización"; + + static m49(hours12, hours24, minutes, suffix) => + "${hours12}:${minutes} ${suffix}"; + + static m50(username, targetName) => + "${username} retirou o veto a ${targetName}"; + + static m51(type) => "Evento descoñecido \'${type}\'"; + + static m52(unreadCount) => "${unreadCount} chats non lidos"; + + static m53(unreadEvents) => "${unreadEvents} mensaxes non lidas"; + + static m54(unreadEvents, unreadChats) => + "${unreadEvents} mensaxes non lidas en ${unreadChats} conversas"; + + static m55(username, count) => + "${username} e ${count} máis están escribindo..."; + + static m56(username, username2) => + "${username} e ${username2} están escribindo..."; + + static m57(username) => "${username} está escribindo..."; + + static m58(username) => "${username} deixou a conversa"; + + static m59(username, type) => "${username} enviou un evento {type]"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static _notInlinedMessages(_) => { + "(Optional) Group name": + MessageLookupByLibrary.simpleMessage("(Optativo) Nome do grupo"), + "About": MessageLookupByLibrary.simpleMessage("Acerca de"), + "Accept": MessageLookupByLibrary.simpleMessage("Aceptar"), + "Account": MessageLookupByLibrary.simpleMessage("Conta"), + "Account informations": + MessageLookupByLibrary.simpleMessage("Información da conta"), + "Add a group description": MessageLookupByLibrary.simpleMessage( + "Engade a descrición do grupo"), + "Admin": MessageLookupByLibrary.simpleMessage("Admin"), + "Already have an account?": + MessageLookupByLibrary.simpleMessage("¿xa tes unha conta?"), + "Anyone can join": + MessageLookupByLibrary.simpleMessage("Calquera pode unirse"), + "Archive": MessageLookupByLibrary.simpleMessage("Arquivo"), + "Archived Room": MessageLookupByLibrary.simpleMessage("Sala arquivada"), + "Are guest users allowed to join": MessageLookupByLibrary.simpleMessage( + "Teñen permitido as convidadas o acceso"), + "Are you sure?": MessageLookupByLibrary.simpleMessage("¿estás certo?"), + "Authentication": MessageLookupByLibrary.simpleMessage("Autenticación"), + "Avatar has been changed": + MessageLookupByLibrary.simpleMessage("O avatar cambiou"), + "Ban from chat": + MessageLookupByLibrary.simpleMessage("Expulsar da conversa"), + "Banned": MessageLookupByLibrary.simpleMessage("Vetada"), + "Block Device": + MessageLookupByLibrary.simpleMessage("Bloquear dispositivo"), + "Cancel": MessageLookupByLibrary.simpleMessage("Cancelar"), + "Change the homeserver": + MessageLookupByLibrary.simpleMessage("Mudar de servidor de inicio"), + "Change the name of the group": + MessageLookupByLibrary.simpleMessage("Mudar o nome do grupo"), + "Change the server": + MessageLookupByLibrary.simpleMessage("Mudar de servidor"), + "Change wallpaper": + MessageLookupByLibrary.simpleMessage("Mudar fondo do chat"), + "Change your style": + MessageLookupByLibrary.simpleMessage("Cambiar o estilo"), + "Changelog": + MessageLookupByLibrary.simpleMessage("Rexistro de cambios"), + "Chat": MessageLookupByLibrary.simpleMessage("Chat"), + "Chat details": + MessageLookupByLibrary.simpleMessage("Detalles do chat"), + "Choose a strong password": MessageLookupByLibrary.simpleMessage( + "Escolle un contrasinal forte"), + "Choose a username": + MessageLookupByLibrary.simpleMessage("Escolle un nome de usuaria"), + "Close": MessageLookupByLibrary.simpleMessage("Pechar"), + "Confirm": MessageLookupByLibrary.simpleMessage("Confirmar"), + "Connect": MessageLookupByLibrary.simpleMessage("Conectar"), + "Connection attempt failed": MessageLookupByLibrary.simpleMessage( + "Fallou o intento de conexión"), + "Contact has been invited to the group": + MessageLookupByLibrary.simpleMessage( + "O contacto foi convidado ó grupo"), + "Content viewer": + MessageLookupByLibrary.simpleMessage("Visor de contido"), + "Copied to clipboard": + MessageLookupByLibrary.simpleMessage("Copiado ó portapapeis"), + "Copy": MessageLookupByLibrary.simpleMessage("Copiar"), + "Could not set avatar": + MessageLookupByLibrary.simpleMessage("Non se estableceu o avatar"), + "Could not set displayname": MessageLookupByLibrary.simpleMessage( + "Non se estableceu o nome público"), + "Create": MessageLookupByLibrary.simpleMessage("Crear"), + "Create account now": + MessageLookupByLibrary.simpleMessage("Crear unha conta"), + "Create new group": + MessageLookupByLibrary.simpleMessage("Crear novo grupo"), + "Currently active": + MessageLookupByLibrary.simpleMessage("Actualmente activo"), + "Dark": MessageLookupByLibrary.simpleMessage("Escuro"), + "Delete": MessageLookupByLibrary.simpleMessage("Eliminar"), + "Delete message": + MessageLookupByLibrary.simpleMessage("Eliminar mensaxe"), + "Deny": MessageLookupByLibrary.simpleMessage("Denegar"), + "Device": MessageLookupByLibrary.simpleMessage("Dispositivo"), + "Devices": MessageLookupByLibrary.simpleMessage("Dispositivos"), + "Discard picture": + MessageLookupByLibrary.simpleMessage("Desbotar imaxe"), + "Displayname has been changed": + MessageLookupByLibrary.simpleMessage("O nome público mudou"), + "Donate": MessageLookupByLibrary.simpleMessage("Doar"), + "Download file": + MessageLookupByLibrary.simpleMessage("Descargar ficheiro"), + "Edit Jitsi instance": + MessageLookupByLibrary.simpleMessage("Editar instancia Jitsi"), + "Edit displayname": + MessageLookupByLibrary.simpleMessage("Editar nome público"), + "Emote Settings": + MessageLookupByLibrary.simpleMessage("Axustes de Emote"), + "Emote shortcode": + MessageLookupByLibrary.simpleMessage("Atallo de Emote"), + "Empty chat": MessageLookupByLibrary.simpleMessage("Chat baleiro"), + "Encryption": MessageLookupByLibrary.simpleMessage("Cifrado"), + "Encryption algorithm": + MessageLookupByLibrary.simpleMessage("Algoritmo do cifrado"), + "Encryption is not enabled": + MessageLookupByLibrary.simpleMessage("Cifrado desactivado"), + "End to end encryption is currently in Beta! Use at your own risk!": + MessageLookupByLibrary.simpleMessage( + "O cifrado extremo-a-extremo está en Beta! Úsao baixo a túa responsabilidade!"), + "End-to-end encryption settings": MessageLookupByLibrary.simpleMessage( + "Axustes do cifrado extremo-a-extremo"), + "Enter a group name": MessageLookupByLibrary.simpleMessage( + "Escribe un nome para o grupo"), + "Enter a username": + MessageLookupByLibrary.simpleMessage("Escribe un nome de usuaria"), + "Enter your homeserver": MessageLookupByLibrary.simpleMessage( + "Escribe o teu servidor de inicio"), + "File name": MessageLookupByLibrary.simpleMessage("Nome do ficheiro"), + "File size": MessageLookupByLibrary.simpleMessage("Tamaño do ficheiro"), + "FluffyChat": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "Forward": MessageLookupByLibrary.simpleMessage("Reenviar"), + "Friday": MessageLookupByLibrary.simpleMessage("Venres"), + "From joining": + MessageLookupByLibrary.simpleMessage("Desde que se una"), + "From the invitation": + MessageLookupByLibrary.simpleMessage("Desde o convite"), + "Group": MessageLookupByLibrary.simpleMessage("Grupo"), + "Group description": + MessageLookupByLibrary.simpleMessage("Descrición do grupo"), + "Group description has been changed": + MessageLookupByLibrary.simpleMessage("Mudou a descrición do grupo"), + "Group is public": + MessageLookupByLibrary.simpleMessage("O grupo é público"), + "Guests are forbidden": + MessageLookupByLibrary.simpleMessage("Non se permiten convidadas"), + "Guests can join": + MessageLookupByLibrary.simpleMessage("Permítense convidadas"), + "Help": MessageLookupByLibrary.simpleMessage("Axuda"), + "Homeserver is not compatible": MessageLookupByLibrary.simpleMessage( + "Servidor de inicio non compatible"), + "How are you today?": + MessageLookupByLibrary.simpleMessage("¿Que tal estás hoxe?"), + "ID": MessageLookupByLibrary.simpleMessage("ID"), + "Identity": MessageLookupByLibrary.simpleMessage("Identidade"), + "Invite contact": + MessageLookupByLibrary.simpleMessage("Convidar contacto"), + "Invited": MessageLookupByLibrary.simpleMessage("Convidado"), + "Invited users only": + MessageLookupByLibrary.simpleMessage("Só usuarias convidadas"), + "It seems that you have no google services on your phone. That\'s a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": + MessageLookupByLibrary.simpleMessage( + "Semella que non tes os servizos de google no teu dispositivo. Ben feito! a túa privacidade agradécecho! Para recibir notificacións push en FluffyChat recomendamos usar microG: https://microg.org/"), + "Kick from chat": + MessageLookupByLibrary.simpleMessage("Expulsar da conversa"), + "Last seen IP": MessageLookupByLibrary.simpleMessage("Última IP vista"), + "Leave": MessageLookupByLibrary.simpleMessage("Saír"), + "Left the chat": + MessageLookupByLibrary.simpleMessage("Deixar a conversa"), + "License": MessageLookupByLibrary.simpleMessage("Licenza"), + "Light": MessageLookupByLibrary.simpleMessage("Claro"), + "Load more...": MessageLookupByLibrary.simpleMessage("Cargar máis..."), + "Loading... Please wait": + MessageLookupByLibrary.simpleMessage("Cargando... Agarda"), + "Login": MessageLookupByLibrary.simpleMessage("Conexión"), + "Logout": MessageLookupByLibrary.simpleMessage("Desconectar"), + "Make a moderator": + MessageLookupByLibrary.simpleMessage("Converter en moderadora"), + "Make an admin": + MessageLookupByLibrary.simpleMessage("Converter en administradora"), + "Make sure the identifier is valid": + MessageLookupByLibrary.simpleMessage( + "Asegúrate de que o identificador é válido"), + "Message will be removed for all participants": + MessageLookupByLibrary.simpleMessage( + "A mensaxe eliminarase para todas as participantes"), + "Moderator": MessageLookupByLibrary.simpleMessage("Moderadora"), + "Monday": MessageLookupByLibrary.simpleMessage("Luns"), + "Mute chat": MessageLookupByLibrary.simpleMessage("Acalar conversa"), + "New message in FluffyChat": + MessageLookupByLibrary.simpleMessage("Nova mensaxe en FluffyChat"), + "New private chat": + MessageLookupByLibrary.simpleMessage("Nova conversa privada"), + "No emotes found. 😕": + MessageLookupByLibrary.simpleMessage("Non hai emotes. 😕"), + "No permission": MessageLookupByLibrary.simpleMessage("Sen permiso"), + "No rooms found...": + MessageLookupByLibrary.simpleMessage("Non se atoparon salas..."), + "None": MessageLookupByLibrary.simpleMessage("Ningún"), + "Not supported in web": + MessageLookupByLibrary.simpleMessage("Non soportado na web"), + "Oops something went wrong...": + MessageLookupByLibrary.simpleMessage("Ooooi, algo fallou..."), + "Open app to read messages": + MessageLookupByLibrary.simpleMessage("Abrir a app e ler mensaxes"), + "Open camera": MessageLookupByLibrary.simpleMessage("Abrir cámara"), + "Participating user devices": MessageLookupByLibrary.simpleMessage( + "Dispositivos das usuarias participantes"), + "Password": MessageLookupByLibrary.simpleMessage("Contrasinal"), + "Pick image": + MessageLookupByLibrary.simpleMessage("Escolle unha imaxe"), + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": + MessageLookupByLibrary.simpleMessage( + "Ten en conta que polo de agora precisas Pantalaimon para o cifrado extremo-a-extremo."), + "Please choose a username": + MessageLookupByLibrary.simpleMessage("Escolle un nome de usuaria"), + "Please enter a matrix identifier": + MessageLookupByLibrary.simpleMessage( + "Escribe un identificador matrix"), + "Please enter your password": + MessageLookupByLibrary.simpleMessage("Escribe o teu contrasinal"), + "Please enter your username": MessageLookupByLibrary.simpleMessage( + "Escribe o teu nome de usuaria"), + "Public Rooms": MessageLookupByLibrary.simpleMessage("Salas públicas"), + "Recording": MessageLookupByLibrary.simpleMessage("Gravando"), + "Reject": MessageLookupByLibrary.simpleMessage("Rexeitar"), + "Rejoin": MessageLookupByLibrary.simpleMessage("Volta a unirte"), + "Remove": MessageLookupByLibrary.simpleMessage("Eliminar"), + "Remove all other devices": MessageLookupByLibrary.simpleMessage( + "Quitar todos os outros dispositivos"), + "Remove device": + MessageLookupByLibrary.simpleMessage("Quitar dispositivo"), + "Remove exile": MessageLookupByLibrary.simpleMessage("Quitar o veto"), + "Remove message": + MessageLookupByLibrary.simpleMessage("Eliminar mensaxe"), + "Render rich message content": MessageLookupByLibrary.simpleMessage( + "Mostrar contido enriquecido da mensaxe"), + "Reply": MessageLookupByLibrary.simpleMessage("Responder"), + "Request permission": + MessageLookupByLibrary.simpleMessage("Solicitar permiso"), + "Request to read older messages": MessageLookupByLibrary.simpleMessage( + "Solicitar ler mensaxes antigas"), + "Revoke all permissions": + MessageLookupByLibrary.simpleMessage("Revogar tódolos permisos"), + "Room has been upgraded": + MessageLookupByLibrary.simpleMessage("A sala foi actualizada"), + "Saturday": MessageLookupByLibrary.simpleMessage("Sábado"), + "Search for a chat": + MessageLookupByLibrary.simpleMessage("Buscar un chat"), + "Seen a long time ago": + MessageLookupByLibrary.simpleMessage("Hai moito que non aparece"), + "Send": MessageLookupByLibrary.simpleMessage("Enviar"), + "Send a message": + MessageLookupByLibrary.simpleMessage("Enviar unha mensaxe"), + "Send file": MessageLookupByLibrary.simpleMessage("Enviar ficheiro"), + "Send image": MessageLookupByLibrary.simpleMessage("Enviar imaxe"), + "Set a profile picture": + MessageLookupByLibrary.simpleMessage("Establecer foto do perfil"), + "Set group description": MessageLookupByLibrary.simpleMessage( + "Establecer descrición do grupo"), + "Set invitation link": MessageLookupByLibrary.simpleMessage( + "Establecer ligazón do convite"), + "Set status": MessageLookupByLibrary.simpleMessage("Establecer estado"), + "Settings": MessageLookupByLibrary.simpleMessage("Axustes"), + "Share": MessageLookupByLibrary.simpleMessage("Compartir"), + "Sign up": MessageLookupByLibrary.simpleMessage("Rexistro"), + "Skip": MessageLookupByLibrary.simpleMessage("Saltar"), + "Source code": MessageLookupByLibrary.simpleMessage("Código fonte"), + "Start your first chat :-)": MessageLookupByLibrary.simpleMessage( + "Abre a primeira conversa :-)"), + "Submit": MessageLookupByLibrary.simpleMessage("Enviar"), + "Sunday": MessageLookupByLibrary.simpleMessage("Domingo"), + "System": MessageLookupByLibrary.simpleMessage("Sistema"), + "Tap to show menu": + MessageLookupByLibrary.simpleMessage("Toca para mostrar menú"), + "The encryption has been corrupted": + MessageLookupByLibrary.simpleMessage("O cifrado está corrompido"), + "They Don\'t Match": + MessageLookupByLibrary.simpleMessage("Non concordan"), + "They Match": MessageLookupByLibrary.simpleMessage("Concordan"), + "This room has been archived.": + MessageLookupByLibrary.simpleMessage("A sala foi arquivada."), + "Thursday": MessageLookupByLibrary.simpleMessage("Xoves"), + "Try to send again": + MessageLookupByLibrary.simpleMessage("Inténtao outra vez"), + "Tuesday": MessageLookupByLibrary.simpleMessage("Martes"), + "Unblock Device": + MessageLookupByLibrary.simpleMessage("Desbloquear dispositivo"), + "Unknown device": + MessageLookupByLibrary.simpleMessage("Dispositivo descoñecido"), + "Unknown encryption algorithm": MessageLookupByLibrary.simpleMessage( + "Algoritmo de cifrado descoñecido"), + "Unmute chat": MessageLookupByLibrary.simpleMessage("Reactivar chat"), + "Use Amoled compatible colors?": MessageLookupByLibrary.simpleMessage( + "¿Usar cores compatibles con Amoled?"), + "Username": MessageLookupByLibrary.simpleMessage("Nome de usuaria"), + "Verify": MessageLookupByLibrary.simpleMessage("Verificar"), + "Verify User": + MessageLookupByLibrary.simpleMessage("Verificar usuaria"), + "Video call": MessageLookupByLibrary.simpleMessage("Chamada de vídeo"), + "Visibility of the chat history": MessageLookupByLibrary.simpleMessage( + "Visibilidade do historial da conversa"), + "Visible for all participants": MessageLookupByLibrary.simpleMessage( + "Visible para todas as participantes"), + "Visible for everyone": + MessageLookupByLibrary.simpleMessage("Visible para todas"), + "Voice message": MessageLookupByLibrary.simpleMessage("Mensaxe de voz"), + "Wallpaper": MessageLookupByLibrary.simpleMessage("Fondo da conversa"), + "Wednesday": MessageLookupByLibrary.simpleMessage("Mércores"), + "Welcome to the cutest instant messenger in the matrix network.": + MessageLookupByLibrary.simpleMessage( + "Benvida a mensaxería instantánea más cuquiña da rede matrix."), + "Who is allowed to join this group": + MessageLookupByLibrary.simpleMessage( + "Quen se pode unir a este grupo"), + "Write a message...": + MessageLookupByLibrary.simpleMessage("Escribe unha mensaxe..."), + "Yes": MessageLookupByLibrary.simpleMessage("Si"), + "You": MessageLookupByLibrary.simpleMessage("Ti"), + "You are invited to this chat": + MessageLookupByLibrary.simpleMessage("Estás convidada a este chat"), + "You are no longer participating in this chat": + MessageLookupByLibrary.simpleMessage( + "Xa non participas desta conversa"), + "You cannot invite yourself": + MessageLookupByLibrary.simpleMessage("Non podes autoconvidarte"), + "You have been banned from this chat": + MessageLookupByLibrary.simpleMessage( + "Foches vetada nesta conversa"), + "You won\'t be able to disable the encryption anymore. Are you sure?": + MessageLookupByLibrary.simpleMessage( + "Non poderás desactivar o cifrado posteriormente, ¿estás certo?"), + "Your own username": + MessageLookupByLibrary.simpleMessage("O teu nome de usuaria"), + "acceptedTheInvitation": m0, + "activatedEndToEndEncryption": m1, + "alias": MessageLookupByLibrary.simpleMessage("alias"), + "askSSSSCache": MessageLookupByLibrary.simpleMessage( + "Escribe a frase de paso de seguridade ou chave de recuperación para almacenar as chaves."), + "askSSSSSign": MessageLookupByLibrary.simpleMessage( + "Para poder conectar a outra persoa, escribe a túa frase de paso ou chave de recuperación."), + "askSSSSVerify": MessageLookupByLibrary.simpleMessage( + "Escribe frase de paso de almacenaxe segura ou chave de recuperación para verificar a túa sesión."), + "askVerificationRequest": m60, + "bannedUser": m2, + "byDefaultYouWillBeConnectedTo": m3, + "cachedKeys": MessageLookupByLibrary.simpleMessage( + "Almacenaches as chaves correctamente!"), + "changedTheChatAvatar": m4, + "changedTheChatDescriptionTo": m5, + "changedTheChatNameTo": m6, + "changedTheChatPermissions": m7, + "changedTheDisplaynameTo": m8, + "changedTheGuestAccessRules": m9, + "changedTheGuestAccessRulesTo": m10, + "changedTheHistoryVisibility": m11, + "changedTheHistoryVisibilityTo": m12, + "changedTheJoinRules": m13, + "changedTheJoinRulesTo": m14, + "changedTheProfileAvatar": m15, + "changedTheRoomAliases": m16, + "changedTheRoomInvitationLink": m17, + "compareEmojiMatch": MessageLookupByLibrary.simpleMessage( + "Comparar e asegurarse de que estas emoticonas concordan no outro dispositivo:"), + "compareNumbersMatch": MessageLookupByLibrary.simpleMessage( + "Compara e asegúrate de que os seguintes números concordan cos do outro dispositivo:"), + "couldNotDecryptMessage": m18, + "countParticipants": m19, + "createdTheChat": m20, + "crossSigningDisabled": MessageLookupByLibrary.simpleMessage( + "A Sinatura-Cruzada está desactivada"), + "crossSigningEnabled": + MessageLookupByLibrary.simpleMessage("Sinatura-Cruzada activada"), + "dateAndTimeOfDay": m21, + "dateWithYear": m22, + "dateWithoutYear": m23, + "emoteExists": + MessageLookupByLibrary.simpleMessage("Xa existe ese emote!"), + "emoteInvalid": MessageLookupByLibrary.simpleMessage( + "Atallo do emote non é válido!"), + "emoteWarnNeedToPick": MessageLookupByLibrary.simpleMessage( + "Escribe un atallo e asocialle unha imaxe!"), + "groupWith": m24, + "hasWithdrawnTheInvitationFor": m25, + "incorrectPassphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Frase de paso ou chave de recuperación incorrecta"), + "inviteContactToGroup": m26, + "inviteText": m27, + "invitedUser": m28, + "is typing...": + MessageLookupByLibrary.simpleMessage("está escribindo..."), + "isDeviceKeyCorrect": MessageLookupByLibrary.simpleMessage( + "¿É correcta esta chave do dispositivo?"), + "joinedTheChat": m29, + "keysCached": + MessageLookupByLibrary.simpleMessage("Chaves almacenadas"), + "keysMissing": MessageLookupByLibrary.simpleMessage("Faltan as chaves"), + "kicked": m30, + "kickedAndBanned": m31, + "lastActiveAgo": m32, + "loadCountMoreParticipants": m33, + "logInTo": m34, + "newVerificationRequest": MessageLookupByLibrary.simpleMessage( + "Nova solicitude de verificación!"), + "noCrossSignBootstrap": MessageLookupByLibrary.simpleMessage( + "Polo momento FluffyChat non soporta a activación da Sinatura-Cruzada. Actívaa desde Element."), + "noMegolmBootstrap": MessageLookupByLibrary.simpleMessage( + "Actualmente Fluffychat non soporta a activación da Copia En Liña das Chaves. Actívaa desde Element."), + "numberSelected": m35, + "ok": MessageLookupByLibrary.simpleMessage("OK"), + "onlineKeyBackupDisabled": MessageLookupByLibrary.simpleMessage( + "Copia de apoio En liña das Chaves desactivada"), + "onlineKeyBackupEnabled": MessageLookupByLibrary.simpleMessage( + "Copia de Apoio das Chaves activada"), + "passphraseOrKey": MessageLookupByLibrary.simpleMessage( + "frase de paso ou chave de recuperación"), + "play": m36, + "redactedAnEvent": m37, + "rejectedTheInvitation": m38, + "removedBy": m39, + "seenByUser": m40, + "seenByUserAndCountOthers": m41, + "seenByUserAndUser": m42, + "sentAFile": m43, + "sentAPicture": m44, + "sentASticker": m45, + "sentAVideo": m46, + "sentAnAudio": m47, + "sessionVerified": + MessageLookupByLibrary.simpleMessage("Sesión verificada"), + "sharedTheLocation": m48, + "timeOfDay": m49, + "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "unbannedUser": m50, + "unknownEvent": m51, + "unknownSessionVerify": MessageLookupByLibrary.simpleMessage( + "Sesión descoñecida, por favor verifícaa"), + "unreadChats": m52, + "unreadMessages": m53, + "unreadMessagesInChats": m54, + "userAndOthersAreTyping": m55, + "userAndUserAreTyping": m56, + "userIsTyping": m57, + "userLeftTheChat": m58, + "userSentUnknownEvent": m59, + "verifiedSession": MessageLookupByLibrary.simpleMessage( + "Sesión verificada correctamente!"), + "verifyManual": + MessageLookupByLibrary.simpleMessage("Verificar manualmente"), + "verifyStart": + MessageLookupByLibrary.simpleMessage("Comezar verificación"), + "verifySuccess": + MessageLookupByLibrary.simpleMessage("Verificaches correctamente!"), + "verifyTitle": + MessageLookupByLibrary.simpleMessage("Verificando a outra conta"), + "waitingPartnerAcceptRequest": MessageLookupByLibrary.simpleMessage( + "Agardando a que a outra parte acepte a solicitude..."), + "waitingPartnerEmoji": MessageLookupByLibrary.simpleMessage( + "Agardando a que a outra parte acepte as emoticonas..."), + "waitingPartnerNumbers": MessageLookupByLibrary.simpleMessage( + "Agardando a que a outra parte acepte os números...") + }; +} diff --git a/lib/l10n/messages_hr.dart b/lib/l10n/messages_hr.dart new file mode 100644 index 0000000..c88c607 --- /dev/null +++ b/lib/l10n/messages_hr.dart @@ -0,0 +1,599 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a hr locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'hr'; + + static m0(username) => "${username} je prihvatio/la poziv"; + + static m1(username) => "${username} je aktivirao/la obostrano šifriranje"; + + static m60(username) => + "Prihvatiti ovaj zahtjev za potvrđivanje od ${username}?"; + + static m2(username, targetName) => + "${username} je isključio/la ${targetName}"; + + static m3(homeserver) => "Standardno ćeš biti povezan/a s ${homeserver}"; + + static m4(username) => "${username} je promijenio/la avatar chata"; + + static m5(username, description) => + "${username} je promijenio/la opis chata u: „${description}”"; + + static m6(username, chatname) => + "${username} je promijenio/la ime chata u: „${chatname}”"; + + static m7(username) => "${username} je promijenio/la dozvole chata"; + + static m8(username, displayname) => + "${username} je promijenio/la prikazano ime u: ${displayname}"; + + static m9(username) => + "${username} je promijenio/la pravila pristupa za goste"; + + static m10(username, rules) => + "${username} je promijenio/la pravila pristupa za goste u: ${rules}"; + + static m11(username) => "${username} je promijenio/la vidljivost kronologije"; + + static m12(username, rules) => + "${username} je promijenio/la vidljivost kronologije u: ${rules}"; + + static m13(username) => "${username} je promijenio/la pravila pridruživanja"; + + static m14(username, joinRules) => + "${username} je promijenio/la pravila pridruživanja u: ${joinRules}"; + + static m15(username) => "${username} je promijenio/la avatar profila"; + + static m16(username) => "${username} je promijenio/la pseudonime soba"; + + static m17(username) => "${username} je promijenio/la poveznicu poziva"; + + static m18(error) => "Neuspjelo dešifriranje poruke: ${error}"; + + static m19(count) => "${count} sudionika"; + + static m20(username) => "${username} je stvorio/la chat"; + + static m21(date, timeOfDay) => "${date}, ${timeOfDay}"; + + static m22(year, month, day) => "${day}. ${month}. ${year}."; + + static m23(month, day) => "${day}. ${month}."; + + static m24(displayname) => "Grupa s ${displayname}"; + + static m25(username, targetName) => + "${username} je povukao/la poziv za ${targetName}"; + + static m26(groupName) => "Pozovi kontakt u ${groupName}"; + + static m27(username, link) => + "${username} te je pozvao/la u FluffyChat. \n1. Instaliraj FluffyChat: http://fluffy.chat \n2. Registriraj ili prijavi se \n3. Otvori poveznicu poziva: ${link}"; + + static m28(username, targetName) => "${username} je pozvao/la ${targetName}"; + + static m29(username) => "${username} se pridružio/la chatu"; + + static m30(username, targetName) => "${username} je izbacio/la ${targetName}"; + + static m31(username, targetName) => + "${username} je izbacio/la i isključio/la ${targetName}"; + + static m32(localizedTimeShort) => "Zadnja aktivnost: ${localizedTimeShort}"; + + static m33(count) => "Učitaj još ${count} sudionika"; + + static m34(homeserver) => "Prijavi se na ${homeserver}"; + + static m35(number) => "${number} odabrano"; + + static m36(fileName) => "Sviraj ${fileName}"; + + static m37(username) => "${username} je preuredio/la događaj"; + + static m38(username) => "${username} je odbio/la poziv"; + + static m39(username) => "Uklonjeno od ${username}"; + + static m40(username) => "Viđeno od ${username}"; + + static m41(username, count) => + "Viđeno od ${username} i još ${count} korisnika"; + + static m42(username, username2) => "Viđeno od ${username} i ${username2}"; + + static m43(username) => "${username} ja poslao/la datoteku"; + + static m44(username) => "${username} ja poslao/la sliku"; + + static m45(username) => "${username} je poslao/la naljepnicu"; + + static m46(username) => "${username} ja poslao/la video"; + + static m47(username) => "${username} ja poslao/la audio"; + + static m48(username) => "${username} je dijelio/la mjesto"; + + static m49(hours12, hours24, minutes, suffix) => "${hours24}:${minutes}"; + + static m50(username, targetName) => + "${username} je ponovo uključio/la ${targetName}"; + + static m51(type) => "Nepoznata vrsta događaja „${type}”"; + + static m52(unreadCount) => "${unreadCount} nepročitana chata"; + + static m53(unreadEvents) => "${unreadEvents} nepročitane poruke"; + + static m54(unreadEvents, unreadChats) => + "${unreadEvents} nepročitane poruke u ${unreadChats} chata"; + + static m55(username, count) => "${username} i još ${count} korisnika pišu …"; + + static m56(username, username2) => "${username} i ${username2} pišu …"; + + static m57(username) => "${username} piše …"; + + static m58(username) => "${username} je napustio/la chat"; + + static m59(username, type) => "${username} ja poslao/la ${type} događaj"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static _notInlinedMessages(_) => { + "(Optional) Group name": + MessageLookupByLibrary.simpleMessage("(Opcionalno) Ime grupe"), + "About": MessageLookupByLibrary.simpleMessage("Informacije"), + "Accept": MessageLookupByLibrary.simpleMessage("Prihvati"), + "Account": MessageLookupByLibrary.simpleMessage("Račun"), + "Account informations": + MessageLookupByLibrary.simpleMessage("Podaci računa"), + "Add a group description": + MessageLookupByLibrary.simpleMessage("Dodaj opis grupe"), + "Admin": MessageLookupByLibrary.simpleMessage("Administrator"), + "Already have an account?": + MessageLookupByLibrary.simpleMessage("Već imaš račun?"), + "Anyone can join": + MessageLookupByLibrary.simpleMessage("Svatko se može pridružiti"), + "Archive": MessageLookupByLibrary.simpleMessage("Arhiva"), + "Archived Room": + MessageLookupByLibrary.simpleMessage("Arhivirana soba"), + "Are guest users allowed to join": MessageLookupByLibrary.simpleMessage( + "Smiju li se gosti pridružiti grupi"), + "Are you sure?": MessageLookupByLibrary.simpleMessage("Sigurno?"), + "Authentication": + MessageLookupByLibrary.simpleMessage("Autentifikacija"), + "Avatar has been changed": + MessageLookupByLibrary.simpleMessage("Avatar je promijenjen"), + "Ban from chat": + MessageLookupByLibrary.simpleMessage("Isključi iz chata"), + "Banned": MessageLookupByLibrary.simpleMessage("Isključen"), + "Block Device": MessageLookupByLibrary.simpleMessage("Blokiraj uređaj"), + "Cancel": MessageLookupByLibrary.simpleMessage("Odustani"), + "Change the homeserver": MessageLookupByLibrary.simpleMessage( + "Promijeni domaćeg poslužitelja"), + "Change the name of the group": + MessageLookupByLibrary.simpleMessage("Promijeni ime grupe"), + "Change the server": + MessageLookupByLibrary.simpleMessage("Promijeni poslužitelja"), + "Change wallpaper": + MessageLookupByLibrary.simpleMessage("Promijeni sliku pozadine"), + "Change your style": + MessageLookupByLibrary.simpleMessage("Promijeni svoj stil"), + "Changelog": MessageLookupByLibrary.simpleMessage("Zapis promjena"), + "Chat": MessageLookupByLibrary.simpleMessage("Chat"), + "Chat details": MessageLookupByLibrary.simpleMessage("Detalji chata"), + "Choose a strong password": + MessageLookupByLibrary.simpleMessage("Odaberi snažnu lozinku"), + "Choose a username": + MessageLookupByLibrary.simpleMessage("Odaberi korisničko ime"), + "Close": MessageLookupByLibrary.simpleMessage("Zatvori"), + "Confirm": MessageLookupByLibrary.simpleMessage("Potvrdi"), + "Connect": MessageLookupByLibrary.simpleMessage("Spoji"), + "Connection attempt failed": + MessageLookupByLibrary.simpleMessage("Neuspio pokušaj povezivanja"), + "Contact has been invited to the group": + MessageLookupByLibrary.simpleMessage("Kontakt je pozvan u grupu"), + "Content viewer": + MessageLookupByLibrary.simpleMessage("Prikazivač sadržaja"), + "Copied to clipboard": + MessageLookupByLibrary.simpleMessage("Kopirano u međuspremnik"), + "Copy": MessageLookupByLibrary.simpleMessage("Kopiraj"), + "Could not set avatar": MessageLookupByLibrary.simpleMessage( + "Neuspjelo postavljanje avatara"), + "Could not set displayname": MessageLookupByLibrary.simpleMessage( + "Neuspjelo postavljanje prikaznog imena"), + "Create": MessageLookupByLibrary.simpleMessage("Stvori"), + "Create account now": + MessageLookupByLibrary.simpleMessage("Stvori račun sada"), + "Create new group": + MessageLookupByLibrary.simpleMessage("Stvori novu grupu"), + "Currently active": + MessageLookupByLibrary.simpleMessage("Trenutačno aktivni"), + "Dark": MessageLookupByLibrary.simpleMessage("Tamna"), + "Delete": MessageLookupByLibrary.simpleMessage("Izbriži"), + "Delete message": + MessageLookupByLibrary.simpleMessage("Izbriži poruku"), + "Deny": MessageLookupByLibrary.simpleMessage("Odbij"), + "Device": MessageLookupByLibrary.simpleMessage("Uređaj"), + "Devices": MessageLookupByLibrary.simpleMessage("Uređaji"), + "Discard picture": MessageLookupByLibrary.simpleMessage("Odbaci sliku"), + "Displayname has been changed": MessageLookupByLibrary.simpleMessage( + "Prikazno ime je promijenjeno"), + "Donate": MessageLookupByLibrary.simpleMessage("Doniraj"), + "Download file": + MessageLookupByLibrary.simpleMessage("Preuzmi datoteku"), + "Edit Jitsi instance": + MessageLookupByLibrary.simpleMessage("Uredi Jitsi primjerak"), + "Edit displayname": + MessageLookupByLibrary.simpleMessage("Uredi prikazano ime"), + "Emote Settings": + MessageLookupByLibrary.simpleMessage("Postavke emojija"), + "Emote shortcode": + MessageLookupByLibrary.simpleMessage("Kratica emota"), + "Empty chat": MessageLookupByLibrary.simpleMessage("Prazan chat"), + "Encryption": MessageLookupByLibrary.simpleMessage("Šifriranje"), + "Encryption algorithm": + MessageLookupByLibrary.simpleMessage("Algoritam šifriranja"), + "Encryption is not enabled": + MessageLookupByLibrary.simpleMessage("Šifriranje nije aktivirano"), + "End to end encryption is currently in Beta! Use at your own risk!": + MessageLookupByLibrary.simpleMessage( + "Obostrano šifriranje je trenutačno u beta stanju! Koriti na vlastitu odgovornost!"), + "End-to-end encryption settings": MessageLookupByLibrary.simpleMessage( + "Postavke obostranog šifriranja"), + "Enter a group name": + MessageLookupByLibrary.simpleMessage("Upiši ime grupe"), + "Enter a username": + MessageLookupByLibrary.simpleMessage("Upiši korisničko ime"), + "Enter your homeserver": MessageLookupByLibrary.simpleMessage( + "Upiši svog domaćeg poslužitelja"), + "File name": MessageLookupByLibrary.simpleMessage("Ime datoteke"), + "File size": MessageLookupByLibrary.simpleMessage("Veličina datoteke"), + "FluffyChat": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "Forward": MessageLookupByLibrary.simpleMessage("Proslijedi"), + "Friday": MessageLookupByLibrary.simpleMessage("Petak"), + "From joining": + MessageLookupByLibrary.simpleMessage("Od pridruživanja"), + "From the invitation": + MessageLookupByLibrary.simpleMessage("Od poziva"), + "Group": MessageLookupByLibrary.simpleMessage("Grupiraj"), + "Group description": MessageLookupByLibrary.simpleMessage("Opis grupe"), + "Group description has been changed": + MessageLookupByLibrary.simpleMessage("Opis grupe je promijenjen"), + "Group is public": + MessageLookupByLibrary.simpleMessage("Grupa je javna"), + "Guests are forbidden": + MessageLookupByLibrary.simpleMessage("Gosti su zabranjeni"), + "Guests can join": + MessageLookupByLibrary.simpleMessage("Gosti se mogu pridružiti"), + "Help": MessageLookupByLibrary.simpleMessage("Pomoć"), + "Homeserver is not compatible": MessageLookupByLibrary.simpleMessage( + "Domaći poslužitelj nije kompatibilan"), + "How are you today?": + MessageLookupByLibrary.simpleMessage("Kako si danas?"), + "ID": MessageLookupByLibrary.simpleMessage("ID"), + "Identity": MessageLookupByLibrary.simpleMessage("Identitet"), + "Invite contact": + MessageLookupByLibrary.simpleMessage("Pozovi kontakt"), + "Invited": MessageLookupByLibrary.simpleMessage("Pozvan/a"), + "Invited users only": + MessageLookupByLibrary.simpleMessage("Samo pozvani korisnici"), + "It seems that you have no google services on your phone. That\'s a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": + MessageLookupByLibrary.simpleMessage( + "Čini se da na mobitelu nemaš google usluge. To je dobra odluka za tvoju privatnost! Za primanje push obavijesti u FluffyChatu preporučujemo upotrebu microG-a: https://microg.org/"), + "Kick from chat": + MessageLookupByLibrary.simpleMessage("Izbaci iz chata"), + "Last seen IP": + MessageLookupByLibrary.simpleMessage("Zadnji viđeni IP"), + "Leave": MessageLookupByLibrary.simpleMessage("Napusti"), + "Left the chat": + MessageLookupByLibrary.simpleMessage("Napustio/la je chat"), + "License": MessageLookupByLibrary.simpleMessage("Licenca"), + "Light": MessageLookupByLibrary.simpleMessage("Svjetla"), + "Load more...": MessageLookupByLibrary.simpleMessage("Učitaj više …"), + "Loading... Please wait": + MessageLookupByLibrary.simpleMessage("Učitava se … Pričekaj"), + "Login": MessageLookupByLibrary.simpleMessage("Prijava"), + "Logout": MessageLookupByLibrary.simpleMessage("Odjava"), + "Make a moderator": + MessageLookupByLibrary.simpleMessage("Postavi kao voditelja"), + "Make an admin": + MessageLookupByLibrary.simpleMessage("Postavi kao administratora"), + "Make sure the identifier is valid": + MessageLookupByLibrary.simpleMessage( + "Provjeri je li identifikator ispravan"), + "Message will be removed for all participants": + MessageLookupByLibrary.simpleMessage( + "Poruke će se ukloniti za sve sudionike"), + "Moderator": MessageLookupByLibrary.simpleMessage("Voditelj"), + "Monday": MessageLookupByLibrary.simpleMessage("Ponedjeljak"), + "Mute chat": + MessageLookupByLibrary.simpleMessage("Isključi zvuk chata"), + "New message in FluffyChat": + MessageLookupByLibrary.simpleMessage("Nova poruka u FluffyChatu"), + "New private chat": + MessageLookupByLibrary.simpleMessage("Novi privatni chat"), + "No emotes found. 😕": + MessageLookupByLibrary.simpleMessage("Nema emota. 😕"), + "No permission": MessageLookupByLibrary.simpleMessage("Bez dozvole"), + "No rooms found...": + MessageLookupByLibrary.simpleMessage("Nema pronađenih soba …"), + "None": MessageLookupByLibrary.simpleMessage("Ništa"), + "Not supported in web": + MessageLookupByLibrary.simpleMessage("Nije podržano u internetu"), + "Oops something went wrong...": MessageLookupByLibrary.simpleMessage( + "Ups, došlo je do neke greške …"), + "Open app to read messages": MessageLookupByLibrary.simpleMessage( + "Za čitanje poruka, otvori program"), + "Open camera": MessageLookupByLibrary.simpleMessage("Otvori kameru"), + "Participating user devices": MessageLookupByLibrary.simpleMessage( + "Sudjelujući korisnički uređaji"), + "Password": MessageLookupByLibrary.simpleMessage("Lozinka"), + "Pick image": MessageLookupByLibrary.simpleMessage("Odaberi sliku"), + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": + MessageLookupByLibrary.simpleMessage( + "Za sada trebaš Pantalaimon za obostrano šifriranje."), + "Please choose a username": + MessageLookupByLibrary.simpleMessage("Odaberi korisničko ime"), + "Please enter a matrix identifier": + MessageLookupByLibrary.simpleMessage("Upiši identifikator matrice"), + "Please enter your password": + MessageLookupByLibrary.simpleMessage("Upiši svoju lozinku"), + "Please enter your username": + MessageLookupByLibrary.simpleMessage("Upiši svoje korisničko ime"), + "Public Rooms": MessageLookupByLibrary.simpleMessage("Javne sobe"), + "Recording": MessageLookupByLibrary.simpleMessage("Snimanje"), + "Reject": MessageLookupByLibrary.simpleMessage("Odbij"), + "Rejoin": MessageLookupByLibrary.simpleMessage("Ponovo se pridruži"), + "Remove": MessageLookupByLibrary.simpleMessage("Ukloni"), + "Remove all other devices": + MessageLookupByLibrary.simpleMessage("Ukloni sve druge uređaje"), + "Remove device": MessageLookupByLibrary.simpleMessage("Ukloni uređaj"), + "Remove exile": + MessageLookupByLibrary.simpleMessage("Ukloni izbacivanje"), + "Remove message": MessageLookupByLibrary.simpleMessage("Ukloni poruku"), + "Render rich message content": MessageLookupByLibrary.simpleMessage( + "Prikaži formatirani sadržaj poruke"), + "Reply": MessageLookupByLibrary.simpleMessage("Odgovori"), + "Request permission": + MessageLookupByLibrary.simpleMessage("Zatraži dozvolu"), + "Request to read older messages": MessageLookupByLibrary.simpleMessage( + "Zahtjev za čitanje starijih poruka"), + "Revoke all permissions": + MessageLookupByLibrary.simpleMessage("Opozovi sve dozvole"), + "Room has been upgraded": + MessageLookupByLibrary.simpleMessage("Ova soba je nadograđena"), + "Saturday": MessageLookupByLibrary.simpleMessage("Subota"), + "Search for a chat": MessageLookupByLibrary.simpleMessage("Traži chat"), + "Seen a long time ago": + MessageLookupByLibrary.simpleMessage("Viđeno prije dugo vremena"), + "Send": MessageLookupByLibrary.simpleMessage("Pošalji"), + "Send a message": + MessageLookupByLibrary.simpleMessage("Pošalji poruku"), + "Send file": MessageLookupByLibrary.simpleMessage("Pošalji datoteku"), + "Send image": MessageLookupByLibrary.simpleMessage("Pošalji sliku"), + "Set a profile picture": + MessageLookupByLibrary.simpleMessage("Postavi sliku profila"), + "Set group description": + MessageLookupByLibrary.simpleMessage("Postavi opis grupe"), + "Set invitation link": MessageLookupByLibrary.simpleMessage( + "Pošalji poveznicu za pozivnicu"), + "Set status": MessageLookupByLibrary.simpleMessage("Postavi stanje"), + "Settings": MessageLookupByLibrary.simpleMessage("Postavke"), + "Share": MessageLookupByLibrary.simpleMessage("Dijeli"), + "Sign up": MessageLookupByLibrary.simpleMessage("Prijavi se"), + "Skip": MessageLookupByLibrary.simpleMessage("Preskoči"), + "Source code": MessageLookupByLibrary.simpleMessage("Izvorni kȏd"), + "Start your first chat :-)": + MessageLookupByLibrary.simpleMessage("Počni svoj prvi chat :-)"), + "Submit": MessageLookupByLibrary.simpleMessage("Pošalji"), + "Sunday": MessageLookupByLibrary.simpleMessage("Nedjelja"), + "System": MessageLookupByLibrary.simpleMessage("Sustav"), + "Tap to show menu": + MessageLookupByLibrary.simpleMessage("Dodirni za prikaz izbornika"), + "The encryption has been corrupted": + MessageLookupByLibrary.simpleMessage("Šifriranje je oštećeno"), + "They Don\'t Match": + MessageLookupByLibrary.simpleMessage("Ne poklapaju se"), + "They Match": MessageLookupByLibrary.simpleMessage("Poklapaju se"), + "This room has been archived.": + MessageLookupByLibrary.simpleMessage("Ova soba je arhivirana."), + "Thursday": MessageLookupByLibrary.simpleMessage("Četvrtak"), + "Try to send again": + MessageLookupByLibrary.simpleMessage("Pokušaj ponovo poslati"), + "Tuesday": MessageLookupByLibrary.simpleMessage("Utorak"), + "Unblock Device": + MessageLookupByLibrary.simpleMessage("Deblokiraj uređaj"), + "Unknown device": + MessageLookupByLibrary.simpleMessage("Nepoznat uređaj"), + "Unknown encryption algorithm": MessageLookupByLibrary.simpleMessage( + "Nepoznat algoritam šifriranja"), + "Unmute chat": + MessageLookupByLibrary.simpleMessage("Uključi zvuk chata"), + "Use Amoled compatible colors?": MessageLookupByLibrary.simpleMessage( + "Koristiti Amoled kompatibilne boje?"), + "Username": MessageLookupByLibrary.simpleMessage("Korisničko ime"), + "Verify": MessageLookupByLibrary.simpleMessage("Provjeri"), + "Verify User": + MessageLookupByLibrary.simpleMessage("Provjeri korisnika"), + "Video call": MessageLookupByLibrary.simpleMessage("Video poziv"), + "Visibility of the chat history": MessageLookupByLibrary.simpleMessage( + "Vidljivost kronologije chata"), + "Visible for all participants": + MessageLookupByLibrary.simpleMessage("Vidljivo za sve sudionike"), + "Visible for everyone": + MessageLookupByLibrary.simpleMessage("Vidljivo za sve"), + "Voice message": + MessageLookupByLibrary.simpleMessage("Glasovna poruka"), + "Wallpaper": MessageLookupByLibrary.simpleMessage("Slika pozadine"), + "Wednesday": MessageLookupByLibrary.simpleMessage("Srijeda"), + "Welcome to the cutest instant messenger in the matrix network.": + MessageLookupByLibrary.simpleMessage( + "Lijep pozdrav u najslađi program za čavrljanje u matrix-mreži."), + "Who is allowed to join this group": + MessageLookupByLibrary.simpleMessage( + "Tko se smije pridružiti grupi"), + "Write a message...": + MessageLookupByLibrary.simpleMessage("Napiši poruku …"), + "Yes": MessageLookupByLibrary.simpleMessage("Da"), + "You": MessageLookupByLibrary.simpleMessage("Ti"), + "You are invited to this chat": + MessageLookupByLibrary.simpleMessage("Pozvan/a si u ovaj chat"), + "You are no longer participating in this chat": + MessageLookupByLibrary.simpleMessage( + "Više ne sudjeluješ u ovom chatu"), + "You cannot invite yourself": + MessageLookupByLibrary.simpleMessage("Sebe ne možeš pozvati"), + "You have been banned from this chat": + MessageLookupByLibrary.simpleMessage( + "Isključen/a si iz ovog chata"), + "You won\'t be able to disable the encryption anymore. Are you sure?": + MessageLookupByLibrary.simpleMessage( + "Više nećeš moći deaktivirati šifriranje. Sigurno?"), + "Your own username": + MessageLookupByLibrary.simpleMessage("Tvoje korisničko ime"), + "acceptedTheInvitation": m0, + "activatedEndToEndEncryption": m1, + "alias": MessageLookupByLibrary.simpleMessage("pseudonim"), + "askSSSSCache": MessageLookupByLibrary.simpleMessage( + "Upiši svoju sigurnosnu lozinku ili ključ za obnavljanje, kako bi se ključevi spremili u predmemoriju."), + "askSSSSSign": MessageLookupByLibrary.simpleMessage( + "Za potpisivanje druge osobe, upiši svoju sigurnosnu lozinku ili ključ za obnavljanje."), + "askSSSSVerify": MessageLookupByLibrary.simpleMessage( + "Za potvrđivanje tvoje sesije, upiši svoju sigurnosnu lozinku ili ključ za obnavljanje."), + "askVerificationRequest": m60, + "bannedUser": m2, + "byDefaultYouWillBeConnectedTo": m3, + "cachedKeys": MessageLookupByLibrary.simpleMessage( + "Uspješno međuspremljeni ključevi!"), + "changedTheChatAvatar": m4, + "changedTheChatDescriptionTo": m5, + "changedTheChatNameTo": m6, + "changedTheChatPermissions": m7, + "changedTheDisplaynameTo": m8, + "changedTheGuestAccessRules": m9, + "changedTheGuestAccessRulesTo": m10, + "changedTheHistoryVisibility": m11, + "changedTheHistoryVisibilityTo": m12, + "changedTheJoinRules": m13, + "changedTheJoinRulesTo": m14, + "changedTheProfileAvatar": m15, + "changedTheRoomAliases": m16, + "changedTheRoomInvitationLink": m17, + "compareEmojiMatch": MessageLookupByLibrary.simpleMessage( + "Usporedi i provjeri, poklapaju li se sljedeći emojiji s onima drugog uređaja:"), + "compareNumbersMatch": MessageLookupByLibrary.simpleMessage( + "Usporedi i provjeri, poklapaju li se sljedeći brojevi s onima drugog uređaja:"), + "couldNotDecryptMessage": m18, + "countParticipants": m19, + "createdTheChat": m20, + "crossSigningDisabled": MessageLookupByLibrary.simpleMessage( + "Unakrsno potpisivanje je deaktivirano"), + "crossSigningEnabled": MessageLookupByLibrary.simpleMessage( + "Unakrsno potpisivanje je aktivirano"), + "dateAndTimeOfDay": m21, + "dateWithYear": m22, + "dateWithoutYear": m23, + "emoteExists": + MessageLookupByLibrary.simpleMessage("Emot već postoji!"), + "emoteInvalid": + MessageLookupByLibrary.simpleMessage("Neispravna kratica emota!"), + "emoteWarnNeedToPick": MessageLookupByLibrary.simpleMessage( + "Moraš odabrati jednu kraticu emota i sliku!"), + "groupWith": m24, + "hasWithdrawnTheInvitationFor": m25, + "incorrectPassphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Neispravna lozinka ili ključ za obnavljanje"), + "inviteContactToGroup": m26, + "inviteText": m27, + "invitedUser": m28, + "is typing...": MessageLookupByLibrary.simpleMessage("piše …"), + "isDeviceKeyCorrect": MessageLookupByLibrary.simpleMessage( + "Je li sljedeći ključ uređaja ispravan?"), + "joinedTheChat": m29, + "keysCached": MessageLookupByLibrary.simpleMessage( + "Ključevi su spremljeni u predmemoriji"), + "keysMissing": + MessageLookupByLibrary.simpleMessage("Nedostaju ključevi"), + "kicked": m30, + "kickedAndBanned": m31, + "lastActiveAgo": m32, + "loadCountMoreParticipants": m33, + "logInTo": m34, + "newVerificationRequest": + MessageLookupByLibrary.simpleMessage("Novi zahtjev za provjeru!"), + "noCrossSignBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat trenutačno ne podržava unakrsno potpisivanje. Aktiviraj je pomoću Element-a."), + "noMegolmBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat trenutačno ne podržava online sigurnosnu kopiju ključeva. Aktiviraj je pomoću Element-a."), + "numberSelected": m35, + "ok": MessageLookupByLibrary.simpleMessage("u redu"), + "onlineKeyBackupDisabled": MessageLookupByLibrary.simpleMessage( + "Online sigurnosna kopija ključeva je deaktivirana"), + "onlineKeyBackupEnabled": MessageLookupByLibrary.simpleMessage( + "Online sigurnosna kopija ključeva je aktivirana"), + "passphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Lozinka ili ključ za obnavljanje"), + "play": m36, + "redactedAnEvent": m37, + "rejectedTheInvitation": m38, + "removedBy": m39, + "seenByUser": m40, + "seenByUserAndCountOthers": m41, + "seenByUserAndUser": m42, + "sentAFile": m43, + "sentAPicture": m44, + "sentASticker": m45, + "sentAVideo": m46, + "sentAnAudio": m47, + "sessionVerified": + MessageLookupByLibrary.simpleMessage("Sesija je provjerena"), + "sharedTheLocation": m48, + "timeOfDay": m49, + "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "unbannedUser": m50, + "unknownEvent": m51, + "unknownSessionVerify": + MessageLookupByLibrary.simpleMessage("Nepoznata sesija, provjeri"), + "unreadChats": m52, + "unreadMessages": m53, + "unreadMessagesInChats": m54, + "userAndOthersAreTyping": m55, + "userAndUserAreTyping": m56, + "userIsTyping": m57, + "userLeftTheChat": m58, + "userSentUnknownEvent": m59, + "verifiedSession": + MessageLookupByLibrary.simpleMessage("Uspješno provjerena sesija!"), + "verifyManual": MessageLookupByLibrary.simpleMessage("Provjeri ručno"), + "verifyStart": MessageLookupByLibrary.simpleMessage("Pokreni provjeru"), + "verifySuccess": + MessageLookupByLibrary.simpleMessage("Uspješno si provjerio/la!"), + "verifyTitle": + MessageLookupByLibrary.simpleMessage("Provjeravanje drugog računa"), + "waitingPartnerAcceptRequest": MessageLookupByLibrary.simpleMessage( + "Čekanje na partnera, da prihvati zahtjeva …"), + "waitingPartnerEmoji": MessageLookupByLibrary.simpleMessage( + "Čekanje na partnera, da prihvati emoji …"), + "waitingPartnerNumbers": MessageLookupByLibrary.simpleMessage( + "Čekanje na partnera, da prihvati brojeve …") + }; +} diff --git a/lib/l10n/messages_hu.dart b/lib/l10n/messages_hu.dart index 53edf38..650fdd1 100644 --- a/lib/l10n/messages_hu.dart +++ b/lib/l10n/messages_hu.dart @@ -24,6 +24,8 @@ class MessageLookup extends MessageLookupByLibrary { static m1(username) => "${username} aktiválta a végpontól-végpontig titkosítást"; + static m60(username) => "Elfogadod ${username} hitelesítési kérelmét?"; + static m2(username, targetName) => "${username} kitiltotta ${targetName}-t"; static m3(homeserver) => "Alapértelmezésben ${homeserver}-hoz csatlakozol"; @@ -64,6 +66,9 @@ class MessageLookup extends MessageLookupByLibrary { static m17(username) => "${username} módosította a meghívó linket"; + static m18(error) => + "Nem sikerült visszafejteni a titkosított üzenetet: ${error}"; + static m19(count) => "${count} résztvevő"; static m20(username) => "${username} létrehozta a csevegést"; @@ -158,6 +163,7 @@ class MessageLookup extends MessageLookupByLibrary { "(Optional) Group name": MessageLookupByLibrary.simpleMessage("(Nem kötelező) Csoport név"), "About": MessageLookupByLibrary.simpleMessage("Névjegy"), + "Accept": MessageLookupByLibrary.simpleMessage("Elfogad"), "Account": MessageLookupByLibrary.simpleMessage("Fiók"), "Account informations": MessageLookupByLibrary.simpleMessage("Fiók információk"), @@ -172,7 +178,7 @@ class MessageLookup extends MessageLookupByLibrary { "Archived Room": MessageLookupByLibrary.simpleMessage("Archivált szoba"), "Are guest users allowed to join": MessageLookupByLibrary.simpleMessage( - "Csatlakozhatnak-e vendég felhasználók"), + "Csatlakozhatnak vendég felhasználók"), "Are you sure?": MessageLookupByLibrary.simpleMessage("Biztos?"), "Authentication": MessageLookupByLibrary.simpleMessage("Hitelesítés"), "Avatar has been changed": @@ -180,6 +186,8 @@ class MessageLookup extends MessageLookupByLibrary { "Ban from chat": MessageLookupByLibrary.simpleMessage("Csevegésből kitiltás"), "Banned": MessageLookupByLibrary.simpleMessage("Kitiltva"), + "Block Device": + MessageLookupByLibrary.simpleMessage("Eszköz blokkolása"), "Cancel": MessageLookupByLibrary.simpleMessage("Mégsem"), "Change the homeserver": MessageLookupByLibrary.simpleMessage("Matrix szerver váltás"), @@ -221,6 +229,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Új fiók létrehozása"), "Create new group": MessageLookupByLibrary.simpleMessage("Új csoport létrehozása"), + "Currently active": + MessageLookupByLibrary.simpleMessage("Jelenleg aktív"), "Dark": MessageLookupByLibrary.simpleMessage("Sötét"), "Delete": MessageLookupByLibrary.simpleMessage("Törlés"), "Delete message": @@ -238,10 +248,11 @@ class MessageLookup extends MessageLookupByLibrary { "Edit displayname": MessageLookupByLibrary.simpleMessage( "Megjelenítési név módosítása"), "Emote Settings": - MessageLookupByLibrary.simpleMessage("Hangulatjel beállíŧások"), + MessageLookupByLibrary.simpleMessage("Hangulatjel beállítások"), "Emote shortcode": MessageLookupByLibrary.simpleMessage("Rövid kód a hangulatjelhez"), "Empty chat": MessageLookupByLibrary.simpleMessage("Üres csevegés"), + "Encryption": MessageLookupByLibrary.simpleMessage("Titkosítás"), "Encryption algorithm": MessageLookupByLibrary.simpleMessage("Titkosítási algoritmus"), "Encryption is not enabled": MessageLookupByLibrary.simpleMessage( @@ -357,6 +368,7 @@ class MessageLookup extends MessageLookupByLibrary { "Add meg a felhasználónevedet"), "Public Rooms": MessageLookupByLibrary.simpleMessage("Publikus szoba"), "Recording": MessageLookupByLibrary.simpleMessage("Felvétel"), + "Reject": MessageLookupByLibrary.simpleMessage("Visszautasít"), "Rejoin": MessageLookupByLibrary.simpleMessage("Újracsatlakozás"), "Remove": MessageLookupByLibrary.simpleMessage("Eltávolítás"), "Remove all other devices": MessageLookupByLibrary.simpleMessage( @@ -376,9 +388,13 @@ class MessageLookup extends MessageLookupByLibrary { "Korábbi üzenetekhez való hozzáférés igénylése"), "Revoke all permissions": MessageLookupByLibrary.simpleMessage( "Minden jogosultság megvonása"), + "Room has been upgraded": + MessageLookupByLibrary.simpleMessage("Szoba frissítve lett"), "Saturday": MessageLookupByLibrary.simpleMessage("Szombat"), "Search for a chat": MessageLookupByLibrary.simpleMessage("Csevegés keresése"), + "Seen a long time ago": + MessageLookupByLibrary.simpleMessage("Már régen látta"), "Send": MessageLookupByLibrary.simpleMessage("Küldés"), "Send a message": MessageLookupByLibrary.simpleMessage("Üzenet küldése"), @@ -395,9 +411,11 @@ class MessageLookup extends MessageLookupByLibrary { "Settings": MessageLookupByLibrary.simpleMessage("Beállítások"), "Share": MessageLookupByLibrary.simpleMessage("Megosztás"), "Sign up": MessageLookupByLibrary.simpleMessage("Felíratkozás"), + "Skip": MessageLookupByLibrary.simpleMessage("Kihagy"), "Source code": MessageLookupByLibrary.simpleMessage("Forráskód"), "Start your first chat :-)": MessageLookupByLibrary.simpleMessage("Kezdj el csevegni :-)"), + "Submit": MessageLookupByLibrary.simpleMessage("Mehet"), "Sunday": MessageLookupByLibrary.simpleMessage("Vasárnap"), "System": MessageLookupByLibrary.simpleMessage("Rendszer"), "Tap to show menu": MessageLookupByLibrary.simpleMessage( @@ -405,12 +423,17 @@ class MessageLookup extends MessageLookupByLibrary { "The encryption has been corrupted": MessageLookupByLibrary.simpleMessage( "A titkosítás sérült és megbízhatatlan"), + "They Don\'t Match": + MessageLookupByLibrary.simpleMessage("Nem egyeznek"), + "They Match": MessageLookupByLibrary.simpleMessage("Megegyeznek"), "This room has been archived.": MessageLookupByLibrary.simpleMessage("Ez a szoba archiválva lett."), "Thursday": MessageLookupByLibrary.simpleMessage("Csütörtök"), "Try to send again": MessageLookupByLibrary.simpleMessage("Próbáld újraküldeni"), "Tuesday": MessageLookupByLibrary.simpleMessage("Kedd"), + "Unblock Device": MessageLookupByLibrary.simpleMessage( + "Eszköz blokkolásának megszüntetése"), "Unknown device": MessageLookupByLibrary.simpleMessage("Ismeretlen eszköz"), "Unknown encryption algorithm": MessageLookupByLibrary.simpleMessage( @@ -420,7 +443,9 @@ class MessageLookup extends MessageLookupByLibrary { "Use Amoled compatible colors?": MessageLookupByLibrary.simpleMessage( "AmoLED kompatibilis színek használata?"), "Username": MessageLookupByLibrary.simpleMessage("Felhasználónév"), - "Verify": MessageLookupByLibrary.simpleMessage("Igazol"), + "Verify": MessageLookupByLibrary.simpleMessage("Hitelesít"), + "Verify User": + MessageLookupByLibrary.simpleMessage("Felhasználó hitelesítése"), "Video call": MessageLookupByLibrary.simpleMessage("Videó hívás"), "Visibility of the chat history": MessageLookupByLibrary.simpleMessage( "Csevegési előzmény láthatósága"), @@ -459,8 +484,17 @@ class MessageLookup extends MessageLookupByLibrary { "acceptedTheInvitation": m0, "activatedEndToEndEncryption": m1, "alias": MessageLookupByLibrary.simpleMessage("álnév"), + "askSSSSCache": MessageLookupByLibrary.simpleMessage( + "Add meg a biztonságos tárolóhoz tartozó vagy a visszaállítási jelszavadat, hogy betöltsük a kulcsaidat."), + "askSSSSSign": MessageLookupByLibrary.simpleMessage( + "A másik személy igazolásához, kérlek add meg jelszavadat vagy visszaállítási kulcsodat."), + "askSSSSVerify": MessageLookupByLibrary.simpleMessage( + "Add meg a biztonságos tárolóhoz tartozó vagy a visszaállítási jelszavadat, a munkamenet hitelesítéséhez."), + "askVerificationRequest": m60, "bannedUser": m2, "byDefaultYouWillBeConnectedTo": m3, + "cachedKeys": MessageLookupByLibrary.simpleMessage( + "Sikeresen betöltöttük a kulcsokat!"), "changedTheChatAvatar": m4, "changedTheChatDescriptionTo": m5, "changedTheChatNameTo": m6, @@ -475,8 +509,17 @@ class MessageLookup extends MessageLookupByLibrary { "changedTheProfileAvatar": m15, "changedTheRoomAliases": m16, "changedTheRoomInvitationLink": m17, + "compareEmojiMatch": MessageLookupByLibrary.simpleMessage( + "Hasonlítsd össze a hangulatjeleket a másik eszközön lévőkkel:"), + "compareNumbersMatch": MessageLookupByLibrary.simpleMessage( + "Hasonlítsd össze a számokat a másik eszközön lévőkkel:"), + "couldNotDecryptMessage": m18, "countParticipants": m19, "createdTheChat": m20, + "crossSigningDisabled": + MessageLookupByLibrary.simpleMessage("Kereszt-Aláírás kikapcsolva"), + "crossSigningEnabled": + MessageLookupByLibrary.simpleMessage("Kereszt-Aláírás bekapcsolva"), "dateAndTimeOfDay": m21, "dateWithYear": m22, "dateWithoutYear": m23, @@ -488,18 +531,37 @@ class MessageLookup extends MessageLookupByLibrary { "A hangulatjelhez válassz egy képet és egy rövid kód"), "groupWith": m24, "hasWithdrawnTheInvitationFor": m25, + "incorrectPassphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Hibás jelszó vagy visszaállítási kulcs"), "inviteContactToGroup": m26, "inviteText": m27, "invitedUser": m28, "is typing...": MessageLookupByLibrary.simpleMessage("gépel..."), + "isDeviceKeyCorrect": MessageLookupByLibrary.simpleMessage( + "Helyes az alábbi eszköz kulcs?"), "joinedTheChat": m29, + "keysCached": MessageLookupByLibrary.simpleMessage("Kulcsok betöltve"), + "keysMissing": + MessageLookupByLibrary.simpleMessage("Kulcsok hiányoznak"), "kicked": m30, "kickedAndBanned": m31, "lastActiveAgo": m32, "loadCountMoreParticipants": m33, "logInTo": m34, + "newVerificationRequest": + MessageLookupByLibrary.simpleMessage("Új hitelesítési kérelem!"), + "noCrossSignBootstrap": MessageLookupByLibrary.simpleMessage( + "FluffyChat jelenleg nem támogatja a Kereszt-Aláírás bekapcsolását. Kérlek engedélyezd Riot-ból."), + "noMegolmBootstrap": MessageLookupByLibrary.simpleMessage( + "FluffyChat jelenleg nem támogatja az Online Kulcs Archívumot (backup). Kérlek engedélyezd Riot-ból."), "numberSelected": m35, "ok": MessageLookupByLibrary.simpleMessage("ok"), + "onlineKeyBackupDisabled": MessageLookupByLibrary.simpleMessage( + "Online Kulcs Archívum letiltva"), + "onlineKeyBackupEnabled": MessageLookupByLibrary.simpleMessage( + "Online Kulcs Archívum engedélyezve"), + "passphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Jelszó vagy visszaállítási kulcs"), "play": m36, "redactedAnEvent": m37, "rejectedTheInvitation": m38, @@ -512,11 +574,15 @@ class MessageLookup extends MessageLookupByLibrary { "sentASticker": m45, "sentAVideo": m46, "sentAnAudio": m47, + "sessionVerified": + MessageLookupByLibrary.simpleMessage("Munkamenet hitelesítve"), "sharedTheLocation": m48, "timeOfDay": m49, "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), "unbannedUser": m50, "unknownEvent": m51, + "unknownSessionVerify": MessageLookupByLibrary.simpleMessage( + "Ismeretlen munkamenet, kérlek hitelesítsd"), "unreadChats": m52, "unreadMessages": m53, "unreadMessagesInChats": m54, @@ -524,6 +590,22 @@ class MessageLookup extends MessageLookupByLibrary { "userAndUserAreTyping": m56, "userIsTyping": m57, "userLeftTheChat": m58, - "userSentUnknownEvent": m59 + "userSentUnknownEvent": m59, + "verifiedSession": MessageLookupByLibrary.simpleMessage( + "Sikeresen hitelesítetted a munkamenetedet!"), + "verifyManual": + MessageLookupByLibrary.simpleMessage("Kézi hitelesítés"), + "verifyStart": + MessageLookupByLibrary.simpleMessage("Hitelesítés megkezdése"), + "verifySuccess": + MessageLookupByLibrary.simpleMessage("Sikeresen hitelesítettél!"), + "verifyTitle": + MessageLookupByLibrary.simpleMessage("Másik fiók hitelesítése"), + "waitingPartnerAcceptRequest": MessageLookupByLibrary.simpleMessage( + "Várakozás partnerre, amíg elfogadja a kérést..."), + "waitingPartnerEmoji": MessageLookupByLibrary.simpleMessage( + "Várakozás partnere, amíg elfogadja a hangulatjeleket..."), + "waitingPartnerNumbers": MessageLookupByLibrary.simpleMessage( + "Várakozás partnere, amíg elfogadja a számokat...") }; } diff --git a/lib/l10n/messages_ja.dart b/lib/l10n/messages_ja.dart new file mode 100644 index 0000000..c4300d0 --- /dev/null +++ b/lib/l10n/messages_ja.dart @@ -0,0 +1,538 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a ja locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'ja'; + + static m0(username) => "${username} が招待を承諾しました"; + + static m1(username) => "${username} がエンドツーエンド暗号化を有効にしました"; + + static m60(username) => "${username} の検証リクエストを承認しますか?"; + + static m2(username, targetName) => "${username}が${targetName}をBANしました"; + + static m3(homeserver) => "デフォルトで${homeserver}に接続されます"; + + static m4(username) => "${username}がチャットアバターを変更しました"; + + static m5(username, description) => + "${username}がチャットの説明を「${description}」に変更しました"; + + static m6(username, chatname) => "${username}がチャットの名前を「${chatname}」に変更しました"; + + static m7(username) => "${username}がチャットの権限を変更しました"; + + static m8(username, displayname) => "${username}が表示名を「${displayname}」に変更しました"; + + static m9(username) => "${username}がゲストのアクセスルールを変更しました"; + + static m10(username, rules) => "${username}がゲストのアクセスルールを${rules}に変更しました"; + + static m11(username) => "${username}が履歴の表示設定を変更しました"; + + static m12(username, rules) => "${username}が履歴の表示設定を${rules}に変更しました"; + + static m13(username) => "${username}が参加ルールを変更しました"; + + static m14(username, joinRules) => "${username}が参加ルールを${joinRules}に変更しました"; + + static m15(username) => "${username}がプロフィールのアバターを変更しました"; + + static m16(username) => "${username}が部屋のエイリアスを変更しました"; + + static m17(username) => "${username}が招待リンクを変更しました"; + + static m18(error) => "メッセージを解読できませんでした: ${error}"; + + static m19(count) => "${count}名の参加者"; + + static m20(username) => "${username}がチャットを作成しました"; + + static m21(date, timeOfDay) => "${date}, ${timeOfDay}"; + + static m22(year, month, day) => "${year}-${month}-${day}"; + + static m23(month, day) => "${month}-${day}"; + + static m24(displayname) => "${displayname}とグループを作成する"; + + static m25(username, targetName) => "${targetName}の招待を${username}が取り下げました"; + + static m26(groupName) => "連絡先から${groupName}に招待する"; + + static m27(username, link) => + "${username}がFluffyChatにあなたを招待しました. \n1. FluffyChatをインストールしてください: http://fluffy.chat \n2. 新しくアカウントを作成するかサインインしてください\n3. 招待リンクを開いてください: ${link}"; + + static m28(username, targetName) => "${username}が${targetName}を招待しました"; + + static m29(username) => "${username}がチャットに参加しました"; + + static m30(username, targetName) => "${username}は${targetName}をキックしました"; + + static m31(username, targetName) => "${username}は${targetName}をキックしBANしました"; + + static m32(localizedTimeShort) => "最終アクティブ: ${localizedTimeShort}"; + + static m33(count) => "あと${count}名参加者を読み込む"; + + static m34(homeserver) => "${homeserver}にログインする"; + + static m35(number) => "${number}選択されています"; + + static m36(fileName) => "${fileName}を再生する"; + + static m37(username) => "${username}がイベントを編集しました"; + + static m38(username) => "${username}は招待を拒否しました"; + + static m39(username) => "${username}によって削除されました"; + + static m40(username) => "${username}が既読"; + + static m41(username, count) => "${username}と他${count}名が既読"; + + static m42(username, username2) => "${username}と${username2}が既読"; + + static m43(username) => "${username}はファイルを送信しました"; + + static m44(username) => "${username}は画像を送信しました"; + + static m45(username) => "${username}はステッカーを送信しました"; + + static m46(username) => "${username}は動画を送信しました"; + + static m47(username) => "${username}は音声を送信しました"; + + static m48(username) => "${username}は現在地を共有しました"; + + static m49(hours12, hours24, minutes, suffix) => + "${hours24}:${minutes} ${suffix}"; + + static m50(username, targetName) => "${username}が${targetName}のBANを解除しました"; + + static m51(type) => "未知のイベント\'${type}\'"; + + static m52(unreadCount) => "${unreadCount}の未読メッセージ"; + + static m53(unreadEvents) => "${unreadEvents}件の未読メッセージ"; + + static m54(unreadEvents, unreadChats) => + "${unreadChats}で${unreadEvents}件の未読メッセージ"; + + static m55(username, count) => "${username}と他${count}名が入力しています..."; + + static m56(username, username2) => "${username}と${username2}が入力しています..."; + + static m57(username) => "${username}が入力しています..."; + + static m58(username) => "${username}は退室しました"; + + static m59(username, type) => "${username}は${type}イベントを送信しました"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static _notInlinedMessages(_) => { + "(Optional) Group name": + MessageLookupByLibrary.simpleMessage("(任意)グループ名"), + "About": MessageLookupByLibrary.simpleMessage("このアプリについて"), + "Accept": MessageLookupByLibrary.simpleMessage("承諾する"), + "Account": MessageLookupByLibrary.simpleMessage("アカウント"), + "Account informations": MessageLookupByLibrary.simpleMessage("アカウント情報"), + "Add a group description": + MessageLookupByLibrary.simpleMessage("グループの説明を追加する"), + "Admin": MessageLookupByLibrary.simpleMessage("管理者"), + "Already have an account?": + MessageLookupByLibrary.simpleMessage("アカウントをすでにお持ちですか?"), + "Anyone can join": MessageLookupByLibrary.simpleMessage("誰でも参加できます"), + "Archive": MessageLookupByLibrary.simpleMessage("アーカイブ"), + "Archived Room": MessageLookupByLibrary.simpleMessage("アーカイブされた部屋"), + "Are guest users allowed to join": + MessageLookupByLibrary.simpleMessage("ゲストユーザーの参加を許可する"), + "Are you sure?": MessageLookupByLibrary.simpleMessage("これでよろしいですか?"), + "Authentication": MessageLookupByLibrary.simpleMessage("認証"), + "Avatar has been changed": + MessageLookupByLibrary.simpleMessage("アバターが変更されました"), + "Ban from chat": MessageLookupByLibrary.simpleMessage("チャットからBANする"), + "Banned": MessageLookupByLibrary.simpleMessage("BANされています"), + "Block Device": MessageLookupByLibrary.simpleMessage("デバイスをブロックする"), + "Cancel": MessageLookupByLibrary.simpleMessage("キャンセル"), + "Change the homeserver": + MessageLookupByLibrary.simpleMessage("ホームサーバーの変更"), + "Change the name of the group": + MessageLookupByLibrary.simpleMessage("グループの名前を変更する"), + "Change the server": MessageLookupByLibrary.simpleMessage("サーバーを変更する"), + "Change wallpaper": MessageLookupByLibrary.simpleMessage("壁紙を変更する"), + "Change your style": MessageLookupByLibrary.simpleMessage("スタイルを変更する"), + "Changelog": MessageLookupByLibrary.simpleMessage("変更履歴"), + "Chat": MessageLookupByLibrary.simpleMessage("チャット"), + "Chat details": MessageLookupByLibrary.simpleMessage("チャットの詳細"), + "Choose a strong password": + MessageLookupByLibrary.simpleMessage("強いパスワードを選択してください"), + "Choose a username": + MessageLookupByLibrary.simpleMessage("ユーザー名を選択してください"), + "Close": MessageLookupByLibrary.simpleMessage("閉じる"), + "Confirm": MessageLookupByLibrary.simpleMessage("確認しました"), + "Connect": MessageLookupByLibrary.simpleMessage("接続"), + "Connection attempt failed": + MessageLookupByLibrary.simpleMessage("接続が失敗しました"), + "Contact has been invited to the group": + MessageLookupByLibrary.simpleMessage("連絡先に登録された人が招待されました"), + "Content viewer": MessageLookupByLibrary.simpleMessage("コンテンツビューアー"), + "Copied to clipboard": + MessageLookupByLibrary.simpleMessage("クリップボードにコピーされました"), + "Copy": MessageLookupByLibrary.simpleMessage("コピー"), + "Could not set avatar": + MessageLookupByLibrary.simpleMessage("アバターをセットできませんでした"), + "Could not set displayname": + MessageLookupByLibrary.simpleMessage("表示名をセットできませんでした"), + "Create": MessageLookupByLibrary.simpleMessage("作成"), + "Create account now": + MessageLookupByLibrary.simpleMessage("アカウントを作成する"), + "Create new group": + MessageLookupByLibrary.simpleMessage("新しいグループを作成する"), + "Currently active": MessageLookupByLibrary.simpleMessage("現在アクティブです"), + "Dark": MessageLookupByLibrary.simpleMessage("ダーク"), + "Delete": MessageLookupByLibrary.simpleMessage("削除"), + "Delete message": MessageLookupByLibrary.simpleMessage("メッセージの削除"), + "Deny": MessageLookupByLibrary.simpleMessage("拒否"), + "Device": MessageLookupByLibrary.simpleMessage("デバイス"), + "Devices": MessageLookupByLibrary.simpleMessage("デバイス"), + "Discard picture": MessageLookupByLibrary.simpleMessage("画像を無視する"), + "Displayname has been changed": + MessageLookupByLibrary.simpleMessage("表示名が変更されました"), + "Donate": MessageLookupByLibrary.simpleMessage("寄付する"), + "Download file": MessageLookupByLibrary.simpleMessage("ファイルのダウンロード"), + "Edit Jitsi instance": + MessageLookupByLibrary.simpleMessage("Jitsiインスタンスを編集する"), + "Edit displayname": MessageLookupByLibrary.simpleMessage("表示名を編集"), + "Emote Settings": MessageLookupByLibrary.simpleMessage("Emote設定"), + "Emote shortcode": MessageLookupByLibrary.simpleMessage("Emoteショートコード"), + "Empty chat": MessageLookupByLibrary.simpleMessage("空のチャット"), + "Encryption": MessageLookupByLibrary.simpleMessage("暗号化"), + "Encryption algorithm": + MessageLookupByLibrary.simpleMessage("暗号化アルゴリズム"), + "Encryption is not enabled": + MessageLookupByLibrary.simpleMessage("暗号化されていません"), + "End to end encryption is currently in Beta! Use at your own risk!": + MessageLookupByLibrary.simpleMessage( + "エンドツーエンド暗号化は現在ベータ版です!これは自分自身の責任で行ってください!"), + "End-to-end encryption settings": + MessageLookupByLibrary.simpleMessage("エンドツーエンド暗号化設定"), + "Enter a group name": + MessageLookupByLibrary.simpleMessage("グループ名を入力してください"), + "Enter a username": + MessageLookupByLibrary.simpleMessage("ユーザー名を入力してください"), + "Enter your homeserver": + MessageLookupByLibrary.simpleMessage("ホームサーバーを入力してください"), + "File name": MessageLookupByLibrary.simpleMessage("ファイル名"), + "File size": MessageLookupByLibrary.simpleMessage("ファイルサイズ"), + "FluffyChat": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "Forward": MessageLookupByLibrary.simpleMessage("進む"), + "Friday": MessageLookupByLibrary.simpleMessage("金曜日"), + "From joining": MessageLookupByLibrary.simpleMessage("参加から"), + "From the invitation": MessageLookupByLibrary.simpleMessage("招待から"), + "Group": MessageLookupByLibrary.simpleMessage("グループ"), + "Group description": MessageLookupByLibrary.simpleMessage("グループの説明"), + "Group description has been changed": + MessageLookupByLibrary.simpleMessage("グループの説明が変更されました"), + "Group is public": + MessageLookupByLibrary.simpleMessage("グループは公開されています"), + "Guests are forbidden": + MessageLookupByLibrary.simpleMessage("ゲストは許可されていません"), + "Guests can join": MessageLookupByLibrary.simpleMessage("ゲストが許可されています"), + "Help": MessageLookupByLibrary.simpleMessage("ヘルプ"), + "Homeserver is not compatible": + MessageLookupByLibrary.simpleMessage("このホームサーバーは互換性がありません"), + "How are you today?": MessageLookupByLibrary.simpleMessage("お元気ですか?"), + "ID": MessageLookupByLibrary.simpleMessage("ID"), + "Identity": MessageLookupByLibrary.simpleMessage("アイデンティティ"), + "Invite contact": MessageLookupByLibrary.simpleMessage("連絡先から招待する"), + "Invited": MessageLookupByLibrary.simpleMessage("招待されました"), + "Invited users only": + MessageLookupByLibrary.simpleMessage("招待されたユーザーのみ"), + "It seems that you have no google services on your phone. That\'s a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": + MessageLookupByLibrary.simpleMessage( + "あなたのスマホにはグーグルサービスがないようですね。プライバシーを保護するための良い選択です!Push通知を受け取るにはmicroGを使うことを推奨しています: https://microg.org/"), + "Kick from chat": MessageLookupByLibrary.simpleMessage("チャットからキックする"), + "Last seen IP": MessageLookupByLibrary.simpleMessage("最終IP"), + "Leave": MessageLookupByLibrary.simpleMessage("退室する"), + "Left the chat": MessageLookupByLibrary.simpleMessage("退室しました"), + "License": MessageLookupByLibrary.simpleMessage("ライセンス"), + "Light": MessageLookupByLibrary.simpleMessage("ライト"), + "Load more...": MessageLookupByLibrary.simpleMessage("更に読み込む..."), + "Loading... Please wait": + MessageLookupByLibrary.simpleMessage("読み込み中...お待ちください。"), + "Login": MessageLookupByLibrary.simpleMessage("ログイン"), + "Logout": MessageLookupByLibrary.simpleMessage("ログアウト"), + "Make a moderator": MessageLookupByLibrary.simpleMessage("モデレータを作成する"), + "Make an admin": MessageLookupByLibrary.simpleMessage("管理者を作成する"), + "Make sure the identifier is valid": + MessageLookupByLibrary.simpleMessage("識別子が正しいか確認してください"), + "Message will be removed for all participants": + MessageLookupByLibrary.simpleMessage("メッセージはすべての参加者から消去されます"), + "Moderator": MessageLookupByLibrary.simpleMessage("モデレータ"), + "Monday": MessageLookupByLibrary.simpleMessage("月曜日"), + "Mute chat": MessageLookupByLibrary.simpleMessage("チャットのミュート"), + "New message in FluffyChat": + MessageLookupByLibrary.simpleMessage("FluffyChatに新しいメッセージがあります"), + "New private chat": + MessageLookupByLibrary.simpleMessage("新しいプライベートチャット"), + "No emotes found. 😕": + MessageLookupByLibrary.simpleMessage("Emoteは見つかりませんでした😕"), + "No permission": MessageLookupByLibrary.simpleMessage("権限がありません"), + "No rooms found...": + MessageLookupByLibrary.simpleMessage("部屋は見つかりませんでした..."), + "None": MessageLookupByLibrary.simpleMessage("なし"), + "Not supported in web": + MessageLookupByLibrary.simpleMessage("ウェブではサポートされていません"), + "Oops something went wrong...": + MessageLookupByLibrary.simpleMessage("おっと、何かがうまくいきませんでした..."), + "Open app to read messages": + MessageLookupByLibrary.simpleMessage("アプリを開いてメッセージを確認してください"), + "Open camera": MessageLookupByLibrary.simpleMessage("カメラを開く"), + "Participating user devices": + MessageLookupByLibrary.simpleMessage("ユーザーの使用しているデバイス"), + "Password": MessageLookupByLibrary.simpleMessage("パスワード"), + "Pick image": MessageLookupByLibrary.simpleMessage("画像を選択してください"), + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": + MessageLookupByLibrary.simpleMessage( + "現時点では、エンドツーエンドの暗号化を使用するにはPantalaimonが必要であることに注意してください。"), + "Please choose a username": + MessageLookupByLibrary.simpleMessage("ユーザー名を選択してください"), + "Please enter a matrix identifier": + MessageLookupByLibrary.simpleMessage("Matrix識別子を入力してください"), + "Please enter your password": + MessageLookupByLibrary.simpleMessage("パスワードを入力してください"), + "Please enter your username": + MessageLookupByLibrary.simpleMessage("ユーザー名を入力してください"), + "Public Rooms": MessageLookupByLibrary.simpleMessage("公開された部屋"), + "Recording": MessageLookupByLibrary.simpleMessage("録音中"), + "Reject": MessageLookupByLibrary.simpleMessage("拒否"), + "Rejoin": MessageLookupByLibrary.simpleMessage("再参加"), + "Remove": MessageLookupByLibrary.simpleMessage("消去"), + "Remove all other devices": + MessageLookupByLibrary.simpleMessage("他のデバイスをすべて削除"), + "Remove device": MessageLookupByLibrary.simpleMessage("デバイスの削除"), + "Remove exile": MessageLookupByLibrary.simpleMessage("追放を取り消し"), + "Remove message": MessageLookupByLibrary.simpleMessage("メッセージを削除"), + "Render rich message content": + MessageLookupByLibrary.simpleMessage("リッチメッセージをレンダリングする"), + "Reply": MessageLookupByLibrary.simpleMessage("返信"), + "Request permission": MessageLookupByLibrary.simpleMessage("権限を要求する"), + "Request to read older messages": + MessageLookupByLibrary.simpleMessage("過去のメッセージを読む権限を要求する"), + "Revoke all permissions": + MessageLookupByLibrary.simpleMessage("すべての権限を取り消す"), + "Room has been upgraded": + MessageLookupByLibrary.simpleMessage("部屋はアップグレードされました"), + "Saturday": MessageLookupByLibrary.simpleMessage("土曜日"), + "Search for a chat": MessageLookupByLibrary.simpleMessage("チャットを検索する"), + "Seen a long time ago": + MessageLookupByLibrary.simpleMessage("ずいぶん前に既読"), + "Send": MessageLookupByLibrary.simpleMessage("送信"), + "Send a message": MessageLookupByLibrary.simpleMessage("メッセージを送信"), + "Send file": MessageLookupByLibrary.simpleMessage("ファイルを送信"), + "Send image": MessageLookupByLibrary.simpleMessage("画像の送信"), + "Set a profile picture": + MessageLookupByLibrary.simpleMessage("プロフィール画像を設定する"), + "Set group description": + MessageLookupByLibrary.simpleMessage("グループの説明を設定する"), + "Set invitation link": + MessageLookupByLibrary.simpleMessage("招待リンクを設定する"), + "Set status": MessageLookupByLibrary.simpleMessage("ステータスの設定"), + "Settings": MessageLookupByLibrary.simpleMessage("設定"), + "Share": MessageLookupByLibrary.simpleMessage("共有"), + "Sign up": MessageLookupByLibrary.simpleMessage("サインアップ"), + "Skip": MessageLookupByLibrary.simpleMessage("スキップ"), + "Source code": MessageLookupByLibrary.simpleMessage("ソースコード"), + "Start your first chat :-)": + MessageLookupByLibrary.simpleMessage("初めてのチャットを開始してください(^_^)"), + "Submit": MessageLookupByLibrary.simpleMessage("送信"), + "Sunday": MessageLookupByLibrary.simpleMessage("日曜日"), + "System": MessageLookupByLibrary.simpleMessage("システム"), + "Tap to show menu": + MessageLookupByLibrary.simpleMessage("メニューを表示するにはタップしてください"), + "The encryption has been corrupted": + MessageLookupByLibrary.simpleMessage("暗号が破損しています"), + "They Don\'t Match": MessageLookupByLibrary.simpleMessage("違います"), + "They Match": MessageLookupByLibrary.simpleMessage("一致しています"), + "This room has been archived.": + MessageLookupByLibrary.simpleMessage("この部屋はアーカイブされています"), + "Thursday": MessageLookupByLibrary.simpleMessage("木曜日"), + "Try to send again": MessageLookupByLibrary.simpleMessage("送信し直してみる"), + "Tuesday": MessageLookupByLibrary.simpleMessage("火曜日"), + "Unblock Device": MessageLookupByLibrary.simpleMessage("デバイスをブロック解除する"), + "Unknown device": MessageLookupByLibrary.simpleMessage("未知デバイス"), + "Unknown encryption algorithm": + MessageLookupByLibrary.simpleMessage("未知の暗号化アルゴリズム"), + "Unmute chat": MessageLookupByLibrary.simpleMessage("チャットをミュート解除する"), + "Use Amoled compatible colors?": + MessageLookupByLibrary.simpleMessage("有機EL(Amoled)対応の色にしますか?"), + "Username": MessageLookupByLibrary.simpleMessage("ユーザー名"), + "Verify": MessageLookupByLibrary.simpleMessage("確認"), + "Verify User": MessageLookupByLibrary.simpleMessage("ユーザーの認証"), + "Video call": MessageLookupByLibrary.simpleMessage("音声通話"), + "Visibility of the chat history": + MessageLookupByLibrary.simpleMessage("チャット履歴の表示"), + "Visible for all participants": + MessageLookupByLibrary.simpleMessage("すべての参加者が閲覧可能です"), + "Visible for everyone": + MessageLookupByLibrary.simpleMessage("すべての人が閲覧可能です"), + "Voice message": MessageLookupByLibrary.simpleMessage("ボイスメッセージ"), + "Wallpaper": MessageLookupByLibrary.simpleMessage("壁紙"), + "Wednesday": MessageLookupByLibrary.simpleMessage("水曜日"), + "Welcome to the cutest instant messenger in the matrix network.": + MessageLookupByLibrary.simpleMessage( + "Matrixネットワークで一番かわいいチャットアプリへようこそ!"), + "Who is allowed to join this group": + MessageLookupByLibrary.simpleMessage("誰がこのチャットに入れますか"), + "Write a message...": + MessageLookupByLibrary.simpleMessage("メッセージを入力してください..."), + "Yes": MessageLookupByLibrary.simpleMessage("はい"), + "You": MessageLookupByLibrary.simpleMessage("あなた"), + "You are invited to this chat": + MessageLookupByLibrary.simpleMessage("チャットに招待されています"), + "You are no longer participating in this chat": + MessageLookupByLibrary.simpleMessage("あなたはもうこのチャットの参加者ではありません"), + "You cannot invite yourself": + MessageLookupByLibrary.simpleMessage("自分自身を招待することはできません"), + "You have been banned from this chat": + MessageLookupByLibrary.simpleMessage("チャットからBANされてしまいました"), + "You won\'t be able to disable the encryption anymore. Are you sure?": + MessageLookupByLibrary.simpleMessage( + "一度暗号化を有効にするともとに戻せません。よろしいですか?"), + "Your own username": MessageLookupByLibrary.simpleMessage("あなたのユーザー名"), + "acceptedTheInvitation": m0, + "activatedEndToEndEncryption": m1, + "alias": MessageLookupByLibrary.simpleMessage("エイリアス"), + "askSSSSCache": MessageLookupByLibrary.simpleMessage( + "鍵をキャッシュするためにはパスフレーズやリカバリーキーを入力してください。"), + "askSSSSSign": MessageLookupByLibrary.simpleMessage( + "他の人を署名するためにはパスフレーズやリカバリーキーを入力してください。"), + "askSSSSVerify": MessageLookupByLibrary.simpleMessage( + "セッションを検証するためにはパスフレーズやリカバリーキーを入力してください。"), + "askVerificationRequest": m60, + "bannedUser": m2, + "byDefaultYouWillBeConnectedTo": m3, + "cachedKeys": MessageLookupByLibrary.simpleMessage("鍵のキャッシュに成功しました!"), + "changedTheChatAvatar": m4, + "changedTheChatDescriptionTo": m5, + "changedTheChatNameTo": m6, + "changedTheChatPermissions": m7, + "changedTheDisplaynameTo": m8, + "changedTheGuestAccessRules": m9, + "changedTheGuestAccessRulesTo": m10, + "changedTheHistoryVisibility": m11, + "changedTheHistoryVisibilityTo": m12, + "changedTheJoinRules": m13, + "changedTheJoinRulesTo": m14, + "changedTheProfileAvatar": m15, + "changedTheRoomAliases": m16, + "changedTheRoomInvitationLink": m17, + "compareEmojiMatch": MessageLookupByLibrary.simpleMessage( + "表示されている絵文字が他のデバイスで表示されているものと一致するか確認してください"), + "compareNumbersMatch": MessageLookupByLibrary.simpleMessage( + "表示されている数字が他のデバイスで表示されているものと一致するか確認してください"), + "couldNotDecryptMessage": m18, + "countParticipants": m19, + "createdTheChat": m20, + "crossSigningDisabled": + MessageLookupByLibrary.simpleMessage("相互署名は使えません"), + "crossSigningEnabled": + MessageLookupByLibrary.simpleMessage("相互署名が使えます"), + "dateAndTimeOfDay": m21, + "dateWithYear": m22, + "dateWithoutYear": m23, + "emoteExists": MessageLookupByLibrary.simpleMessage("Emoteはすでに存在します!"), + "emoteInvalid": MessageLookupByLibrary.simpleMessage("不正なEmoteショートコード"), + "emoteWarnNeedToPick": + MessageLookupByLibrary.simpleMessage("Emoteショートコードと画像を選択してください!"), + "groupWith": m24, + "hasWithdrawnTheInvitationFor": m25, + "incorrectPassphraseOrKey": + MessageLookupByLibrary.simpleMessage("パスフレーズかリカバリーキーが間違っています"), + "inviteContactToGroup": m26, + "inviteText": m27, + "invitedUser": m28, + "is typing...": MessageLookupByLibrary.simpleMessage("が入力しています..."), + "isDeviceKeyCorrect": + MessageLookupByLibrary.simpleMessage("このデバイスキーは正しいですか?"), + "joinedTheChat": m29, + "keysCached": MessageLookupByLibrary.simpleMessage("鍵はキャッシュされたいます"), + "keysMissing": MessageLookupByLibrary.simpleMessage("鍵がありません"), + "kicked": m30, + "kickedAndBanned": m31, + "lastActiveAgo": m32, + "loadCountMoreParticipants": m33, + "logInTo": m34, + "newVerificationRequest": + MessageLookupByLibrary.simpleMessage("新しい認証リクエスト"), + "noCrossSignBootstrap": MessageLookupByLibrary.simpleMessage( + "FluffyChatは現在相互署名機能をサポートしていません。Elementから有効化してください。"), + "noMegolmBootstrap": MessageLookupByLibrary.simpleMessage( + "FluffyChatは現在鍵のオンラインバックアップの有効化をサポートしていません。Elementから有効化してください。"), + "numberSelected": m35, + "ok": MessageLookupByLibrary.simpleMessage("OK"), + "onlineKeyBackupDisabled": + MessageLookupByLibrary.simpleMessage("オンライン鍵バックアップは使用されていません"), + "onlineKeyBackupEnabled": + MessageLookupByLibrary.simpleMessage("オンライン鍵バックアップは使用されています"), + "passphraseOrKey": + MessageLookupByLibrary.simpleMessage("パスフレーズかリカバリーキー"), + "play": m36, + "redactedAnEvent": m37, + "rejectedTheInvitation": m38, + "removedBy": m39, + "seenByUser": m40, + "seenByUserAndCountOthers": m41, + "seenByUserAndUser": m42, + "sentAFile": m43, + "sentAPicture": m44, + "sentASticker": m45, + "sentAVideo": m46, + "sentAnAudio": m47, + "sessionVerified": MessageLookupByLibrary.simpleMessage("セッションは確認済みです"), + "sharedTheLocation": m48, + "timeOfDay": m49, + "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "unbannedUser": m50, + "unknownEvent": m51, + "unknownSessionVerify": + MessageLookupByLibrary.simpleMessage("未知のセッションです。確認してください。"), + "unreadChats": m52, + "unreadMessages": m53, + "unreadMessagesInChats": m54, + "userAndOthersAreTyping": m55, + "userAndUserAreTyping": m56, + "userIsTyping": m57, + "userLeftTheChat": m58, + "userSentUnknownEvent": m59, + "verifiedSession": + MessageLookupByLibrary.simpleMessage("セッションの確認ができました!"), + "verifyManual": MessageLookupByLibrary.simpleMessage("手動で確認"), + "verifyStart": MessageLookupByLibrary.simpleMessage("確認を始める"), + "verifySuccess": MessageLookupByLibrary.simpleMessage("確認が完了しました!"), + "verifyTitle": MessageLookupByLibrary.simpleMessage("他のアカウントを確認中"), + "waitingPartnerAcceptRequest": + MessageLookupByLibrary.simpleMessage("パートナーのリクエスト承諾待ちです"), + "waitingPartnerEmoji": + MessageLookupByLibrary.simpleMessage("パートナーの絵文字承諾待ちです..."), + "waitingPartnerNumbers": + MessageLookupByLibrary.simpleMessage("パートナーの数字承諾待ちです") + }; +} diff --git a/lib/l10n/messages_messages.dart b/lib/l10n/messages_messages.dart index d983002..07a703e 100644 --- a/lib/l10n/messages_messages.dart +++ b/lib/l10n/messages_messages.dart @@ -23,6 +23,8 @@ class MessageLookup extends MessageLookupByLibrary { static m1(username) => "${username} activated end to end encryption"; + static m60(username) => "Accept this verification request from ${username}?"; + static m2(username, targetName) => "${username} banned ${targetName}"; static m3(homeserver) => "By default you will be connected to ${homeserver}"; @@ -55,7 +57,7 @@ class MessageLookup extends MessageLookupByLibrary { static m14(username, joinRules) => "${username} changed the join rules to: ${joinRules}"; - static m15(username) => "${username} changed the profile avatar"; + static m15(username) => "${username} changed their avatar"; static m16(username) => "${username} changed the room aliases"; @@ -157,6 +159,7 @@ class MessageLookup extends MessageLookupByLibrary { "(Optional) Group name": MessageLookupByLibrary.simpleMessage("(Optional) Group name"), "About": MessageLookupByLibrary.simpleMessage("About"), + "Accept": MessageLookupByLibrary.simpleMessage("Accept"), "Account": MessageLookupByLibrary.simpleMessage("Account"), "Account informations": MessageLookupByLibrary.simpleMessage("Account informations"), @@ -178,6 +181,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Avatar has been changed"), "Ban from chat": MessageLookupByLibrary.simpleMessage("Ban from chat"), "Banned": MessageLookupByLibrary.simpleMessage("Banned"), + "Block Device": MessageLookupByLibrary.simpleMessage("Block Device"), "Cancel": MessageLookupByLibrary.simpleMessage("Cancel"), "Change the homeserver": MessageLookupByLibrary.simpleMessage("Change the homeserver"), @@ -218,8 +222,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Create account now"), "Create new group": MessageLookupByLibrary.simpleMessage("Create new group"), - "Currenlty active": - MessageLookupByLibrary.simpleMessage("Currenlty active"), + "Currently active": + MessageLookupByLibrary.simpleMessage("Currently active"), "Dark": MessageLookupByLibrary.simpleMessage("Dark"), "Delete": MessageLookupByLibrary.simpleMessage("Delete"), "Delete message": @@ -242,6 +246,7 @@ class MessageLookup extends MessageLookupByLibrary { "Emote shortcode": MessageLookupByLibrary.simpleMessage("Emote shortcode"), "Empty chat": MessageLookupByLibrary.simpleMessage("Empty chat"), + "Encryption": MessageLookupByLibrary.simpleMessage("Encryption"), "Encryption algorithm": MessageLookupByLibrary.simpleMessage("Encryption algorithm"), "Encryption is not enabled": @@ -351,6 +356,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Please enter your username"), "Public Rooms": MessageLookupByLibrary.simpleMessage("Public Rooms"), "Recording": MessageLookupByLibrary.simpleMessage("Recording"), + "Reject": MessageLookupByLibrary.simpleMessage("Reject"), "Rejoin": MessageLookupByLibrary.simpleMessage("Rejoin"), "Remove": MessageLookupByLibrary.simpleMessage("Remove"), "Remove all other devices": @@ -368,6 +374,8 @@ class MessageLookup extends MessageLookupByLibrary { "Request to read older messages"), "Revoke all permissions": MessageLookupByLibrary.simpleMessage("Revoke all permissions"), + "Room has been upgraded": + MessageLookupByLibrary.simpleMessage("Room has been upgraded"), "Saturday": MessageLookupByLibrary.simpleMessage("Saturday"), "Search for a chat": MessageLookupByLibrary.simpleMessage("Search for a chat"), @@ -388,9 +396,11 @@ class MessageLookup extends MessageLookupByLibrary { "Settings": MessageLookupByLibrary.simpleMessage("Settings"), "Share": MessageLookupByLibrary.simpleMessage("Share"), "Sign up": MessageLookupByLibrary.simpleMessage("Sign up"), + "Skip": MessageLookupByLibrary.simpleMessage("Skip"), "Source code": MessageLookupByLibrary.simpleMessage("Source code"), "Start your first chat :-)": MessageLookupByLibrary.simpleMessage("Start your first chat :-)"), + "Submit": MessageLookupByLibrary.simpleMessage("Submit"), "Sunday": MessageLookupByLibrary.simpleMessage("Sunday"), "System": MessageLookupByLibrary.simpleMessage("System"), "Tap to show menu": @@ -398,12 +408,17 @@ class MessageLookup extends MessageLookupByLibrary { "The encryption has been corrupted": MessageLookupByLibrary.simpleMessage( "The encryption has been corrupted"), + "They Don\'t Match": + MessageLookupByLibrary.simpleMessage("They Don\'t Match"), + "They Match": MessageLookupByLibrary.simpleMessage("They Match"), "This room has been archived.": MessageLookupByLibrary.simpleMessage( "This room has been archived."), "Thursday": MessageLookupByLibrary.simpleMessage("Thursday"), "Try to send again": MessageLookupByLibrary.simpleMessage("Try to send again"), "Tuesday": MessageLookupByLibrary.simpleMessage("Tuesday"), + "Unblock Device": + MessageLookupByLibrary.simpleMessage("Unblock Device"), "Unknown device": MessageLookupByLibrary.simpleMessage("Unknown device"), "Unknown encryption algorithm": MessageLookupByLibrary.simpleMessage( @@ -413,6 +428,7 @@ class MessageLookup extends MessageLookupByLibrary { "Use Amoled compatible colors?"), "Username": MessageLookupByLibrary.simpleMessage("Username"), "Verify": MessageLookupByLibrary.simpleMessage("Verify"), + "Verify User": MessageLookupByLibrary.simpleMessage("Verify User"), "Video call": MessageLookupByLibrary.simpleMessage("Video call"), "Visibility of the chat history": MessageLookupByLibrary.simpleMessage( "Visibility of the chat history"), @@ -451,8 +467,17 @@ class MessageLookup extends MessageLookupByLibrary { "acceptedTheInvitation": m0, "activatedEndToEndEncryption": m1, "alias": MessageLookupByLibrary.simpleMessage("alias"), + "askSSSSCache": MessageLookupByLibrary.simpleMessage( + "Please enter your secure store passphrase or recovery key to cache the keys."), + "askSSSSSign": MessageLookupByLibrary.simpleMessage( + "To be able to sign the other person, please enter your secure store passphrase or recovery key."), + "askSSSSVerify": MessageLookupByLibrary.simpleMessage( + "Please enter your secure store passphrase or recovery key to verify your session."), + "askVerificationRequest": m60, "bannedUser": m2, "byDefaultYouWillBeConnectedTo": m3, + "cachedKeys": + MessageLookupByLibrary.simpleMessage("Successfully cached keys!"), "changedTheChatAvatar": m4, "changedTheChatDescriptionTo": m5, "changedTheChatNameTo": m6, @@ -467,9 +492,17 @@ class MessageLookup extends MessageLookupByLibrary { "changedTheProfileAvatar": m15, "changedTheRoomAliases": m16, "changedTheRoomInvitationLink": m17, + "compareEmojiMatch": MessageLookupByLibrary.simpleMessage( + "Compare and make sure the following emoji match those of the other device:"), + "compareNumbersMatch": MessageLookupByLibrary.simpleMessage( + "Compare and make sure the following numbers match those of the other device:"), "couldNotDecryptMessage": m18, "countParticipants": m19, "createdTheChat": m20, + "crossSigningDisabled": + MessageLookupByLibrary.simpleMessage("Cross-Signing is disabled"), + "crossSigningEnabled": + MessageLookupByLibrary.simpleMessage("Cross-Signing is enabled"), "dateAndTimeOfDay": m21, "dateWithYear": m22, "dateWithoutYear": m23, @@ -481,18 +514,36 @@ class MessageLookup extends MessageLookupByLibrary { "You need to pick an emote shortcode and an image!"), "groupWith": m24, "hasWithdrawnTheInvitationFor": m25, + "incorrectPassphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Incorrect passphrase or recovery key"), "inviteContactToGroup": m26, "inviteText": m27, "invitedUser": m28, "is typing...": MessageLookupByLibrary.simpleMessage("is typing..."), + "isDeviceKeyCorrect": MessageLookupByLibrary.simpleMessage( + "Is the following device key correct?"), "joinedTheChat": m29, + "keysCached": MessageLookupByLibrary.simpleMessage("Keys are cached"), + "keysMissing": MessageLookupByLibrary.simpleMessage("Keys are missing"), "kicked": m30, "kickedAndBanned": m31, "lastActiveAgo": m32, "loadCountMoreParticipants": m33, "logInTo": m34, + "newVerificationRequest": + MessageLookupByLibrary.simpleMessage("New verification request!"), + "noCrossSignBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat currently does not support enabling Cross-Signing. Please enable it from within Element."), + "noMegolmBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat currently does not support enabling Online Key Backup. Please enable it from within Element."), "numberSelected": m35, "ok": MessageLookupByLibrary.simpleMessage("ok"), + "onlineKeyBackupDisabled": MessageLookupByLibrary.simpleMessage( + "Online Key Backup is disabled"), + "onlineKeyBackupEnabled": MessageLookupByLibrary.simpleMessage( + "Online Key Backup is enabled"), + "passphraseOrKey": + MessageLookupByLibrary.simpleMessage("passphrase or recovery key"), "play": m36, "redactedAnEvent": m37, "rejectedTheInvitation": m38, @@ -505,11 +556,15 @@ class MessageLookup extends MessageLookupByLibrary { "sentASticker": m45, "sentAVideo": m46, "sentAnAudio": m47, + "sessionVerified": + MessageLookupByLibrary.simpleMessage("Session is verified"), "sharedTheLocation": m48, "timeOfDay": m49, "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), "unbannedUser": m50, "unknownEvent": m51, + "unknownSessionVerify": MessageLookupByLibrary.simpleMessage( + "Unknown session, please verify"), "unreadChats": m52, "unreadMessages": m53, "unreadMessagesInChats": m54, @@ -517,6 +572,21 @@ class MessageLookup extends MessageLookupByLibrary { "userAndUserAreTyping": m56, "userIsTyping": m57, "userLeftTheChat": m58, - "userSentUnknownEvent": m59 + "userSentUnknownEvent": m59, + "verifiedSession": MessageLookupByLibrary.simpleMessage( + "Successfully verified session!"), + "verifyManual": MessageLookupByLibrary.simpleMessage("Verify Manually"), + "verifyStart": + MessageLookupByLibrary.simpleMessage("Start Verification"), + "verifySuccess": + MessageLookupByLibrary.simpleMessage("You successfully verified!"), + "verifyTitle": + MessageLookupByLibrary.simpleMessage("Verifying other account"), + "waitingPartnerAcceptRequest": MessageLookupByLibrary.simpleMessage( + "Waiting for partner to accept the request..."), + "waitingPartnerEmoji": MessageLookupByLibrary.simpleMessage( + "Waiting for partner to accept the emoji..."), + "waitingPartnerNumbers": MessageLookupByLibrary.simpleMessage( + "Waiting for partner to accept the numbers...") }; } diff --git a/lib/l10n/messages_ru.dart b/lib/l10n/messages_ru.dart new file mode 100644 index 0000000..1e192a5 --- /dev/null +++ b/lib/l10n/messages_ru.dart @@ -0,0 +1,603 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a ru locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'ru'; + + static m0(username) => "${username} принял(а) приглашение"; + + static m1(username) => "${username} активировал(а) сквозное шифрование"; + + static m60(username) => "Принять этот запрос подтверждения от ${username}?"; + + static m2(username, targetName) => "${username} забанил(а) ${targetName}"; + + static m3(homeserver) => "По умолчанию вы будете подключены к ${homeserver}"; + + static m4(username) => "${username} изменил(а) аватар чата"; + + static m5(username, description) => + "${username} изменил(а) описание чата на: \'${description}\'"; + + static m6(username, chatname) => + "${username} изменил(а) имя чата на: \'${chatname}\'"; + + static m7(username) => "${username} изменил(а) права чата"; + + static m8(username, displayname) => + "${username} изменил(а) отображаемое имя на: ${displayname}"; + + static m9(username) => "${username} изменил(а) правила гостевого доступа"; + + static m10(username, rules) => + "${username} изменил(а) правила гостевого доступа на: ${rules}"; + + static m11(username) => "${username} изменил(а) видимость истории"; + + static m12(username, rules) => + "${username} изменил(а) видимость истории на: ${rules}"; + + static m13(username) => "${username} изменил(а) правила присоединения"; + + static m14(username, joinRules) => + "${username} изменил(а) правила присоединения на: ${joinRules}"; + + static m15(username) => "${username} сменил(а) аватар профиля"; + + static m16(username) => "${username} изменил(а) псевдонимы комнаты"; + + static m17(username) => "${username} изменил(а) ссылку приглашения"; + + static m18(error) => "Не удалось расшифровать сообщение: ${error}"; + + static m19(count) => "${count} участника(-ов)"; + + static m20(username) => "${username} создал(а) чат"; + + static m21(date, timeOfDay) => "${date}, ${timeOfDay}"; + + static m22(year, month, day) => "${day}. ${month}. ${year}"; + + static m23(month, day) => "${day}. ${month}"; + + static m24(displayname) => "Группа с ${displayname}"; + + static m25(username, targetName) => + "${username} отозвал(а) приглашение для ${targetName}"; + + static m26(groupName) => "Пригласить контакт в ${groupName}"; + + static m27(username, link) => + "${username} пригласил(а) вас в FluffyChat. \n1. Установите FluffyChat: http://fluffy.chat \n2. Зарегистрируйтесь или войдите \n3. Откройте ссылку приглашения: ${link}"; + + static m28(username, targetName) => "${username} пригласил(а) ${targetName}"; + + static m29(username) => "${username} присоединился(-ась) к чату"; + + static m30(username, targetName) => "${username} исключил(а) ${targetName}"; + + static m31(username, targetName) => + "${username} исключил(а) и забанил(а) ${targetName}"; + + static m32(localizedTimeShort) => + "Последнее посещение: ${localizedTimeShort}"; + + static m33(count) => "Загрузить еще ${count} участников"; + + static m34(homeserver) => "Войти в ${homeserver}"; + + static m35(number) => "${number} выбрано"; + + static m36(fileName) => "Играть ${fileName}"; + + static m37(username) => "${username} отредактировал(а) событие"; + + static m38(username) => "${username} отклонил(а) приглашение"; + + static m39(username) => "Удалено пользователем ${username}"; + + static m40(username) => "Просмотрено пользователем ${username}"; + + static m41(username, count) => + "Просмотрено пользователями ${username} и ${count} другими"; + + static m42(username, username2) => + "Просмотрено пользователями ${username} и ${username2}"; + + static m43(username) => "${username} отправил(а) файл"; + + static m44(username) => "${username} отправил(а) картинку"; + + static m45(username) => "${username} отправил(а) стикер"; + + static m46(username) => "${username} отправил(а) видео"; + + static m47(username) => "${username} отправил(а) аудио"; + + static m48(username) => "${username} поделился(-ась) местоположением"; + + static m49(hours12, hours24, minutes, suffix) => "${hours24}:${minutes}"; + + static m50(username, targetName) => "${username} разбанил(а) ${targetName}"; + + static m51(type) => "Неизвестное событие \'${type}\'"; + + static m52(unreadCount) => "${unreadCount} непрочитанных чатов"; + + static m53(unreadEvents) => "${unreadEvents} непрочитанных сообщений"; + + static m54(unreadEvents, unreadChats) => + "${unreadEvents} непрочитанных сообщений в ${unreadChats} чатах"; + + static m55(username, count) => + "${username} и ${count} других участников печатают..."; + + static m56(username, username2) => "${username} и ${username2} печатают..."; + + static m57(username) => "${username} печатает..."; + + static m58(username) => "${username} покинул(а) чат"; + + static m59(username, type) => "${username} отправил(а) событие типа ${type}"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static _notInlinedMessages(_) => { + "(Optional) Group name": MessageLookupByLibrary.simpleMessage( + "(Необязательно) Название группы"), + "About": MessageLookupByLibrary.simpleMessage("О приложении"), + "Accept": MessageLookupByLibrary.simpleMessage("Принять"), + "Account": MessageLookupByLibrary.simpleMessage("Учётная запись"), + "Account informations": + MessageLookupByLibrary.simpleMessage("Сведения об учётной записи"), + "Add a group description": + MessageLookupByLibrary.simpleMessage("Добавить описание группы"), + "Admin": MessageLookupByLibrary.simpleMessage("Админ"), + "Already have an account?": + MessageLookupByLibrary.simpleMessage("Уже есть учётная запись?"), + "Anyone can join": + MessageLookupByLibrary.simpleMessage("Каждый может присоединиться"), + "Archive": MessageLookupByLibrary.simpleMessage("Архив"), + "Archived Room": + MessageLookupByLibrary.simpleMessage("Архивированная комната"), + "Are guest users allowed to join": MessageLookupByLibrary.simpleMessage( + "Разрешено ли гостям присоединяться"), + "Are you sure?": MessageLookupByLibrary.simpleMessage("Вы уверены?"), + "Authentication": + MessageLookupByLibrary.simpleMessage("Аутентификация"), + "Avatar has been changed": + MessageLookupByLibrary.simpleMessage("Аватар был изменен"), + "Ban from chat": MessageLookupByLibrary.simpleMessage("Бан чата"), + "Banned": MessageLookupByLibrary.simpleMessage("Забанен"), + "Block Device": + MessageLookupByLibrary.simpleMessage("Заблокировать устройство"), + "Cancel": MessageLookupByLibrary.simpleMessage("Отмена"), + "Change the homeserver": + MessageLookupByLibrary.simpleMessage("Изменить домашний сервер"), + "Change the name of the group": + MessageLookupByLibrary.simpleMessage("Изменить название группы"), + "Change the server": + MessageLookupByLibrary.simpleMessage("Сменить сервер"), + "Change wallpaper": + MessageLookupByLibrary.simpleMessage("Сменить обои"), + "Change your style": + MessageLookupByLibrary.simpleMessage("Изменить свой стиль"), + "Changelog": MessageLookupByLibrary.simpleMessage("Изменения"), + "Chat": MessageLookupByLibrary.simpleMessage("Чат"), + "Chat details": MessageLookupByLibrary.simpleMessage("Детали чата"), + "Choose a strong password": + MessageLookupByLibrary.simpleMessage("Выберите надёжный пароль"), + "Choose a username": + MessageLookupByLibrary.simpleMessage("Выберете имя пользователя"), + "Close": MessageLookupByLibrary.simpleMessage("Закрыть"), + "Confirm": MessageLookupByLibrary.simpleMessage("Подтвердить"), + "Connect": MessageLookupByLibrary.simpleMessage("Присоединиться"), + "Connection attempt failed": MessageLookupByLibrary.simpleMessage( + "Попытка подключения не удалась"), + "Contact has been invited to the group": + MessageLookupByLibrary.simpleMessage( + "Контакт был приглашен в группу"), + "Content viewer": + MessageLookupByLibrary.simpleMessage("Просмотр содержимого"), + "Copied to clipboard": + MessageLookupByLibrary.simpleMessage("Скопировано в буфер обмена"), + "Copy": MessageLookupByLibrary.simpleMessage("Скопировать"), + "Could not set avatar": MessageLookupByLibrary.simpleMessage( + "Не удалось установить аватар"), + "Could not set displayname": MessageLookupByLibrary.simpleMessage( + "Не удалось установить отображаемое имя"), + "Create": MessageLookupByLibrary.simpleMessage("Создать"), + "Create account now": MessageLookupByLibrary.simpleMessage( + "Создать учётную запись сейчас"), + "Create new group": + MessageLookupByLibrary.simpleMessage("Создать новую группу"), + "Currently active": + MessageLookupByLibrary.simpleMessage("В настоящее время активен"), + "Dark": MessageLookupByLibrary.simpleMessage("Тёмный"), + "Delete": MessageLookupByLibrary.simpleMessage("Удалить"), + "Delete message": + MessageLookupByLibrary.simpleMessage("Удалить сообщение"), + "Deny": MessageLookupByLibrary.simpleMessage("Отклонить"), + "Device": MessageLookupByLibrary.simpleMessage("Устройство"), + "Devices": MessageLookupByLibrary.simpleMessage("Устройства"), + "Discard picture": + MessageLookupByLibrary.simpleMessage("Сбросить картинку"), + "Displayname has been changed": MessageLookupByLibrary.simpleMessage( + "Отображаемое имя было изменено"), + "Donate": MessageLookupByLibrary.simpleMessage("Пожертвовать"), + "Download file": MessageLookupByLibrary.simpleMessage("Скачать файл"), + "Edit Jitsi instance": + MessageLookupByLibrary.simpleMessage("Изменить экземпляр Jitsi"), + "Edit displayname": + MessageLookupByLibrary.simpleMessage("Изменить отображаемое имя"), + "Emote Settings": + MessageLookupByLibrary.simpleMessage("Настройки смайликов"), + "Emote shortcode": + MessageLookupByLibrary.simpleMessage("Краткий код для смайлика"), + "Empty chat": MessageLookupByLibrary.simpleMessage("Пустой чат"), + "Encryption": MessageLookupByLibrary.simpleMessage("Шифрование"), + "Encryption algorithm": + MessageLookupByLibrary.simpleMessage("Алгоритм шифрования"), + "Encryption is not enabled": + MessageLookupByLibrary.simpleMessage("Шифрование не включено"), + "End to end encryption is currently in Beta! Use at your own risk!": + MessageLookupByLibrary.simpleMessage( + "Сквозное шифрование в настоящее время в бета-версии! Используйте на свой риск!"), + "End-to-end encryption settings": MessageLookupByLibrary.simpleMessage( + "Сквозные настройки шифрования"), + "Enter a group name": + MessageLookupByLibrary.simpleMessage("Введите название группы"), + "Enter a username": + MessageLookupByLibrary.simpleMessage("Введите имя пользователя"), + "Enter your homeserver": + MessageLookupByLibrary.simpleMessage("Введите ваш домашний сервер"), + "File name": MessageLookupByLibrary.simpleMessage("Имя файла"), + "File size": MessageLookupByLibrary.simpleMessage("Размер файла"), + "FluffyChat": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "Forward": MessageLookupByLibrary.simpleMessage("Переслать"), + "Friday": MessageLookupByLibrary.simpleMessage("Пятница"), + "From joining": + MessageLookupByLibrary.simpleMessage("С момента присоединения"), + "From the invitation": + MessageLookupByLibrary.simpleMessage("С момента приглашения"), + "Group": MessageLookupByLibrary.simpleMessage("Группа"), + "Group description": + MessageLookupByLibrary.simpleMessage("Описание группы"), + "Group description has been changed": + MessageLookupByLibrary.simpleMessage( + "Описание группы было изменено"), + "Group is public": + MessageLookupByLibrary.simpleMessage("Публичная группа"), + "Guests are forbidden": + MessageLookupByLibrary.simpleMessage("Гости запрещены"), + "Guests can join": + MessageLookupByLibrary.simpleMessage("Гости могут присоединиться"), + "Help": MessageLookupByLibrary.simpleMessage("Помощь"), + "Homeserver is not compatible": MessageLookupByLibrary.simpleMessage( + "Домашний сервер не совместим"), + "How are you today?": + MessageLookupByLibrary.simpleMessage("Как у вас сегодня дела?"), + "ID": MessageLookupByLibrary.simpleMessage("ID"), + "Identity": MessageLookupByLibrary.simpleMessage("Идентификация"), + "Invite contact": + MessageLookupByLibrary.simpleMessage("Пригласить контакт"), + "Invited": MessageLookupByLibrary.simpleMessage("Приглашён"), + "Invited users only": MessageLookupByLibrary.simpleMessage( + "Только приглашённым пользователям"), + "It seems that you have no google services on your phone. That\'s a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": + MessageLookupByLibrary.simpleMessage( + "Похоже, у вас нет служб Google на вашем телефоне. Это хорошее решение для вашей конфиденциальности! Для получения push-уведомлений в FluffyChat мы рекомендуем использовать microG: https://microg.org/"), + "Kick from chat": + MessageLookupByLibrary.simpleMessage("Исключить из чата"), + "Last seen IP": + MessageLookupByLibrary.simpleMessage("Последний увиденный IP"), + "Leave": MessageLookupByLibrary.simpleMessage("Покинуть"), + "Left the chat": MessageLookupByLibrary.simpleMessage("Покинуть чат"), + "License": MessageLookupByLibrary.simpleMessage("Лицензия"), + "Light": MessageLookupByLibrary.simpleMessage("Светлый"), + "Load more...": + MessageLookupByLibrary.simpleMessage("Загрузить больше..."), + "Loading... Please wait": MessageLookupByLibrary.simpleMessage( + "Загрузка... Пожалуйста подождите"), + "Login": MessageLookupByLibrary.simpleMessage("Вход"), + "Logout": MessageLookupByLibrary.simpleMessage("Выйти"), + "Make a moderator": + MessageLookupByLibrary.simpleMessage("Сделать модератором"), + "Make an admin": + MessageLookupByLibrary.simpleMessage("Сделать админом"), + "Make sure the identifier is valid": + MessageLookupByLibrary.simpleMessage( + "Убедитесь, что идентификатор действителен"), + "Message will be removed for all participants": + MessageLookupByLibrary.simpleMessage( + "Сообщение будет удалено для всех участников"), + "Moderator": MessageLookupByLibrary.simpleMessage("Модератор"), + "Monday": MessageLookupByLibrary.simpleMessage("Понедельник"), + "Mute chat": MessageLookupByLibrary.simpleMessage("Замутить чат"), + "New message in FluffyChat": MessageLookupByLibrary.simpleMessage( + "Новое сообщение в FluffyChat"), + "New private chat": + MessageLookupByLibrary.simpleMessage("Новый приватный чат"), + "No emotes found. 😕": + MessageLookupByLibrary.simpleMessage("Смайликов не найдено. 😕"), + "No permission": MessageLookupByLibrary.simpleMessage("Нет разрешений"), + "No rooms found...": + MessageLookupByLibrary.simpleMessage("Комнаты не найдены..."), + "None": MessageLookupByLibrary.simpleMessage("Ничего"), + "Not supported in web": MessageLookupByLibrary.simpleMessage( + "Не поддерживается в веб-версии"), + "Oops something went wrong...": + MessageLookupByLibrary.simpleMessage("Упс! Что-то пошло не так..."), + "Open app to read messages": MessageLookupByLibrary.simpleMessage( + "Откройте приложение для чтения сообщений"), + "Open camera": MessageLookupByLibrary.simpleMessage("Открыть камеру"), + "Participating user devices": + MessageLookupByLibrary.simpleMessage("Участвующие устройства"), + "Password": MessageLookupByLibrary.simpleMessage("Пароль"), + "Pick image": MessageLookupByLibrary.simpleMessage("Выбрать картинку"), + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": + MessageLookupByLibrary.simpleMessage( + "Помните, что вам нужен Pantalaimon для использования сквозного шифрования."), + "Please choose a username": MessageLookupByLibrary.simpleMessage( + "Пожалуйста, выберите имя пользователя"), + "Please enter a matrix identifier": + MessageLookupByLibrary.simpleMessage( + "Пожалуйста, введите matrix идентификатор"), + "Please enter your password": MessageLookupByLibrary.simpleMessage( + "Пожалуйста введите ваш пароль"), + "Please enter your username": MessageLookupByLibrary.simpleMessage( + "Пожалуйста, введите имя пользователя"), + "Public Rooms": + MessageLookupByLibrary.simpleMessage("Публичные комнаты"), + "Recording": MessageLookupByLibrary.simpleMessage("Запись"), + "Reject": MessageLookupByLibrary.simpleMessage("Отклонить"), + "Rejoin": MessageLookupByLibrary.simpleMessage("Перезайти"), + "Remove": MessageLookupByLibrary.simpleMessage("Удалить"), + "Remove all other devices": MessageLookupByLibrary.simpleMessage( + "Удалить все другие устройства"), + "Remove device": + MessageLookupByLibrary.simpleMessage("Удалить устройство"), + "Remove exile": MessageLookupByLibrary.simpleMessage("Удалить ссылку"), + "Remove message": + MessageLookupByLibrary.simpleMessage("Удалить сообщение"), + "Render rich message content": MessageLookupByLibrary.simpleMessage( + "Показать отформатированные сообщения"), + "Reply": MessageLookupByLibrary.simpleMessage("Ответить"), + "Request permission": + MessageLookupByLibrary.simpleMessage("Запросить разрешение"), + "Request to read older messages": MessageLookupByLibrary.simpleMessage( + "Запросить доступ к предыдущим сообщениям"), + "Revoke all permissions": + MessageLookupByLibrary.simpleMessage("Отменить все разрешения"), + "Room has been upgraded": + MessageLookupByLibrary.simpleMessage("Комната обновлена"), + "Saturday": MessageLookupByLibrary.simpleMessage("Суббота"), + "Search for a chat": MessageLookupByLibrary.simpleMessage("Поиск чата"), + "Seen a long time ago": + MessageLookupByLibrary.simpleMessage("Просматривали давно"), + "Send": MessageLookupByLibrary.simpleMessage("Отправить"), + "Send a message": + MessageLookupByLibrary.simpleMessage("Отправить сообщение"), + "Send file": MessageLookupByLibrary.simpleMessage("Отправить файл"), + "Send image": + MessageLookupByLibrary.simpleMessage("Отправить картинку"), + "Set a profile picture": MessageLookupByLibrary.simpleMessage( + "Установить изображение профиля"), + "Set group description": + MessageLookupByLibrary.simpleMessage("Задать описание группы"), + "Set invitation link": MessageLookupByLibrary.simpleMessage( + "Установить ссылку для приглашения"), + "Set status": MessageLookupByLibrary.simpleMessage("Задать статус"), + "Settings": MessageLookupByLibrary.simpleMessage("Настройки"), + "Share": MessageLookupByLibrary.simpleMessage("Поделиться"), + "Sign up": MessageLookupByLibrary.simpleMessage("Зарегистрироваться"), + "Skip": MessageLookupByLibrary.simpleMessage("Пропустить"), + "Source code": MessageLookupByLibrary.simpleMessage("Исходный код"), + "Start your first chat :-)": + MessageLookupByLibrary.simpleMessage("Начни свой первый чат :-)"), + "Submit": MessageLookupByLibrary.simpleMessage("Отправить"), + "Sunday": MessageLookupByLibrary.simpleMessage("Воскресенье"), + "System": MessageLookupByLibrary.simpleMessage("Системный"), + "Tap to show menu": MessageLookupByLibrary.simpleMessage( + "Нажмите, чтобы показать меню"), + "The encryption has been corrupted": + MessageLookupByLibrary.simpleMessage("Шифрование было повреждено"), + "They Don\'t Match": + MessageLookupByLibrary.simpleMessage("Они не совпадают"), + "They Match": MessageLookupByLibrary.simpleMessage("Они совпадают"), + "This room has been archived.": MessageLookupByLibrary.simpleMessage( + "Эта комната была заархивирована."), + "Thursday": MessageLookupByLibrary.simpleMessage("Четверг"), + "Try to send again": MessageLookupByLibrary.simpleMessage( + "Попробуйте отправить еще раз"), + "Tuesday": MessageLookupByLibrary.simpleMessage("Вторник"), + "Unblock Device": + MessageLookupByLibrary.simpleMessage("Разблокировать устройство"), + "Unknown device": + MessageLookupByLibrary.simpleMessage("Неизвестное устройство"), + "Unknown encryption algorithm": MessageLookupByLibrary.simpleMessage( + "Неизвестный алгоритм шифрования"), + "Unmute chat": MessageLookupByLibrary.simpleMessage("Размутить чат"), + "Use Amoled compatible colors?": MessageLookupByLibrary.simpleMessage( + "Использовать Amoled совместимые цвета?"), + "Username": MessageLookupByLibrary.simpleMessage("Имя пользователя"), + "Verify": MessageLookupByLibrary.simpleMessage("Проверить"), + "Verify User": + MessageLookupByLibrary.simpleMessage("Проверить пользователя"), + "Video call": MessageLookupByLibrary.simpleMessage("Видеозвонок"), + "Visibility of the chat history": + MessageLookupByLibrary.simpleMessage("Видимость истории чата"), + "Visible for all participants": + MessageLookupByLibrary.simpleMessage("Видима для всех участников"), + "Visible for everyone": + MessageLookupByLibrary.simpleMessage("Видна всем"), + "Voice message": + MessageLookupByLibrary.simpleMessage("Голосовое сообщение"), + "Wallpaper": MessageLookupByLibrary.simpleMessage("Обои"), + "Wednesday": MessageLookupByLibrary.simpleMessage("Среда"), + "Welcome to the cutest instant messenger in the matrix network.": + MessageLookupByLibrary.simpleMessage( + "Добро пожаловать в самый симпатичный мессенджер в сети matrix."), + "Who is allowed to join this group": + MessageLookupByLibrary.simpleMessage( + "Кому разрешено вступать в эту группу"), + "Write a message...": + MessageLookupByLibrary.simpleMessage("Напишите сообщение..."), + "Yes": MessageLookupByLibrary.simpleMessage("Да"), + "You": MessageLookupByLibrary.simpleMessage("Вы"), + "You are invited to this chat": + MessageLookupByLibrary.simpleMessage("Вы приглашены в этот чат"), + "You are no longer participating in this chat": + MessageLookupByLibrary.simpleMessage( + "Вы больше не участвуете в этом чате"), + "You cannot invite yourself": MessageLookupByLibrary.simpleMessage( + "Вы не можете пригласить себя"), + "You have been banned from this chat": + MessageLookupByLibrary.simpleMessage( + "Вы были забанены в этом чате"), + "You won\'t be able to disable the encryption anymore. Are you sure?": + MessageLookupByLibrary.simpleMessage( + "Вы больше не сможете отключить шифрование. Вы уверены?"), + "Your own username": + MessageLookupByLibrary.simpleMessage("Ваше имя пользователя"), + "acceptedTheInvitation": m0, + "activatedEndToEndEncryption": m1, + "alias": MessageLookupByLibrary.simpleMessage("псевдоним"), + "askSSSSCache": MessageLookupByLibrary.simpleMessage( + "Пожалуйста, введите секретную фразу безопасного хранилища или ключ восстановления для кеширования ключей."), + "askSSSSSign": MessageLookupByLibrary.simpleMessage( + "Чтобы иметь возможность подписать другое лицо, пожалуйста, введите пароль или ключ восстановления вашего безопасного хранилища."), + "askSSSSVerify": MessageLookupByLibrary.simpleMessage( + "Пожалуйста, введите вашу безопасную парольную фразу или ключ восстановления, чтобы подтвердить ваш сеанс."), + "askVerificationRequest": m60, + "bannedUser": m2, + "byDefaultYouWillBeConnectedTo": m3, + "cachedKeys": + MessageLookupByLibrary.simpleMessage("Ключи успешно кэшированы!"), + "changedTheChatAvatar": m4, + "changedTheChatDescriptionTo": m5, + "changedTheChatNameTo": m6, + "changedTheChatPermissions": m7, + "changedTheDisplaynameTo": m8, + "changedTheGuestAccessRules": m9, + "changedTheGuestAccessRulesTo": m10, + "changedTheHistoryVisibility": m11, + "changedTheHistoryVisibilityTo": m12, + "changedTheJoinRules": m13, + "changedTheJoinRulesTo": m14, + "changedTheProfileAvatar": m15, + "changedTheRoomAliases": m16, + "changedTheRoomInvitationLink": m17, + "compareEmojiMatch": MessageLookupByLibrary.simpleMessage( + "Сравните и убедитесь, что следующие эмодзи соответствуют таковым на другом устройстве:"), + "compareNumbersMatch": MessageLookupByLibrary.simpleMessage( + "Сравните и убедитесь, что следующие числа соответствуют числам на другом устройстве:"), + "couldNotDecryptMessage": m18, + "countParticipants": m19, + "createdTheChat": m20, + "crossSigningDisabled": + MessageLookupByLibrary.simpleMessage("Кросс-подпись отключена"), + "crossSigningEnabled": + MessageLookupByLibrary.simpleMessage("Кросс-подпись включена"), + "dateAndTimeOfDay": m21, + "dateWithYear": m22, + "dateWithoutYear": m23, + "emoteExists": + MessageLookupByLibrary.simpleMessage("Смайлик уже существует!"), + "emoteInvalid": MessageLookupByLibrary.simpleMessage( + "Недопустимый краткий код смайлика!"), + "emoteWarnNeedToPick": MessageLookupByLibrary.simpleMessage( + "Вам нужно выбрать краткий код смайлика и картинку!"), + "groupWith": m24, + "hasWithdrawnTheInvitationFor": m25, + "incorrectPassphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Неверный пароль или ключ восстановления"), + "inviteContactToGroup": m26, + "inviteText": m27, + "invitedUser": m28, + "is typing...": MessageLookupByLibrary.simpleMessage("Печатает..."), + "isDeviceKeyCorrect": MessageLookupByLibrary.simpleMessage( + "Правильно ли указан следующий ключ устройства?"), + "joinedTheChat": m29, + "keysCached": MessageLookupByLibrary.simpleMessage("Ключи кэшированы"), + "keysMissing": + MessageLookupByLibrary.simpleMessage("Ключи отсутствуют"), + "kicked": m30, + "kickedAndBanned": m31, + "lastActiveAgo": m32, + "loadCountMoreParticipants": m33, + "logInTo": m34, + "newVerificationRequest": MessageLookupByLibrary.simpleMessage( + "Новый запрос на подтверждение!"), + "noCrossSignBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat в настоящее время не поддерживает включение кросс-подписи. Пожалуйста, включите его в Element."), + "noMegolmBootstrap": MessageLookupByLibrary.simpleMessage( + "В настоящее время Fluffychat не поддерживает функцию резервного копирования онлайн-ключей. Пожалуйста, включите его из Element."), + "numberSelected": m35, + "ok": MessageLookupByLibrary.simpleMessage("ok"), + "onlineKeyBackupDisabled": MessageLookupByLibrary.simpleMessage( + "Резервное копирование онлайн-ключей отключено"), + "onlineKeyBackupEnabled": MessageLookupByLibrary.simpleMessage( + "Резервное копирование онлайн ключей включено"), + "passphraseOrKey": MessageLookupByLibrary.simpleMessage( + "пароль или ключ восстановления"), + "play": m36, + "redactedAnEvent": m37, + "rejectedTheInvitation": m38, + "removedBy": m39, + "seenByUser": m40, + "seenByUserAndCountOthers": m41, + "seenByUserAndUser": m42, + "sentAFile": m43, + "sentAPicture": m44, + "sentASticker": m45, + "sentAVideo": m46, + "sentAnAudio": m47, + "sessionVerified": + MessageLookupByLibrary.simpleMessage("Сессия подтверждена"), + "sharedTheLocation": m48, + "timeOfDay": m49, + "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "unbannedUser": m50, + "unknownEvent": m51, + "unknownSessionVerify": MessageLookupByLibrary.simpleMessage( + "Неизвестная сессия, пожалуйста, проверьте"), + "unreadChats": m52, + "unreadMessages": m53, + "unreadMessagesInChats": m54, + "userAndOthersAreTyping": m55, + "userAndUserAreTyping": m56, + "userIsTyping": m57, + "userLeftTheChat": m58, + "userSentUnknownEvent": m59, + "verifiedSession": + MessageLookupByLibrary.simpleMessage("Успешно проверенная сессия!"), + "verifyManual": + MessageLookupByLibrary.simpleMessage("Проверить вручную"), + "verifyStart": MessageLookupByLibrary.simpleMessage("Начать проверку"), + "verifySuccess": + MessageLookupByLibrary.simpleMessage("Вы успешно проверили!"), + "verifyTitle": MessageLookupByLibrary.simpleMessage( + "Проверка другой учётной записи"), + "waitingPartnerAcceptRequest": MessageLookupByLibrary.simpleMessage( + "В ожидании партнера, чтобы принять запрос..."), + "waitingPartnerEmoji": MessageLookupByLibrary.simpleMessage( + "В ожидании партнера, чтобы принять смайлики..."), + "waitingPartnerNumbers": MessageLookupByLibrary.simpleMessage( + "В ожидании партнера, чтобы принять числа...") + }; +} diff --git a/lib/l10n/messages_sk.dart b/lib/l10n/messages_sk.dart new file mode 100644 index 0000000..dd9bf7c --- /dev/null +++ b/lib/l10n/messages_sk.dart @@ -0,0 +1,604 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a sk locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'sk'; + + static m0(username) => "${username} prijali pozvánku"; + + static m1(username) => "${username} aktivovali koncové šifrovanie"; + + static m60(username) => "Akcepovať žiadosť o verifikáciu od ${username}?"; + + static m2(username, targetName) => "${username} zabanoval ${targetName}"; + + static m3(homeserver) => + "V základnom nastavení budete pripojený k ${homeserver}"; + + static m4(username) => "${username} si zmenili svôj avatar"; + + static m5(username, description) => + "${username} zmenili popis chatu na: „${description}“"; + + static m6(username, chatname) => + "${username} zmenili meno chatu na: „${chatname}“"; + + static m7(username) => "${username} zmenili nastavenie oprávnení chatu"; + + static m8(username, displayname) => + "${username} si zmenili prezývku na: ${displayname}"; + + static m9(username) => "${username} zmenili prístupové práva pre hosťov"; + + static m10(username, rules) => + "${username} zmenili prístupové práva pro hosťov na: ${rules}"; + + static m11(username) => + "${username} zmenili nastavenie viditelnosti histórie chatu"; + + static m12(username, rules) => + "${username} zmenili nastavenie viditelnosti histórie chatu na: ${rules}"; + + static m13(username) => "${username} zmenili nastavenie pravidiel pripojenia"; + + static m14(username, joinRules) => + "${username} zmenili nastavenie pravidiel pripojenia na: ${joinRules}"; + + static m15(username) => "${username} si zmenili profilový obrázok"; + + static m16(username) => "${username} zmenili nastavenie aliasov chatu"; + + static m17(username) => "${username} zmenili odkaz k pozvánke do miestnosti"; + + static m18(error) => "Nebolo možné dešifrovať správu: ${error}"; + + static m19(count) => "${count} účastníkov"; + + static m20(username) => "${username} založili chat"; + + static m21(date, timeOfDay) => "${date}, ${timeOfDay}"; + + static m22(year, month, day) => "${day}.${month}.${year}"; + + static m23(month, day) => "${day}.${month}."; + + static m24(displayname) => "Skupina s ${displayname}"; + + static m25(username, targetName) => + "${username} vzal späť pozvánku pre ${targetName}"; + + static m26(groupName) => "Pozvať kontakt do ${groupName}"; + + static m27(username, link) => + "${username} vás pozval na FluffyChat.\n1. Nainštalujte si FluffyChat: http://fluffy.chat\n2. Zaregistrujte sa alebo sa prihláste\n3. Otvorte odkaz na pozvánku: ${link}"; + + static m28(username, targetName) => "${username} pozvali ${targetName}"; + + static m29(username) => "${username} sa pripojili do chatu"; + + static m30(username, targetName) => "${username} vyhodili ${targetName}"; + + static m31(username, targetName) => + "${username} vyhodili a zabanovali ${targetName}"; + + static m32(localizedTimeShort) => "Naposledy prítomní: ${localizedTimeShort}"; + + static m33(count) => "Načítať ďalších ${count} účastníkov"; + + static m34(homeserver) => "Prihlásenie k ${homeserver}"; + + static m35(number) => "${number} označených správ"; + + static m36(fileName) => "Prehrať (fileName}"; + + static m37(username) => "${username} odstránili udalosť"; + + static m38(username) => "${username} odmietli pozvánku"; + + static m39(username) => "Odstánené užívateľom ${username}"; + + static m40(username) => "Videné užívateľom ${username}"; + + static m41(username, count) => + "Videné užívateľom ${username} a ${count} dalšími"; + + static m42(username, username2) => + "Videné užívateľmi ${username} a ${username2}"; + + static m43(username) => "${username} poslali súbor"; + + static m44(username) => "${username} poslali obrázok"; + + static m45(username) => "${username} poslali nálepku"; + + static m46(username) => "${username} poslali video"; + + static m47(username) => "${username} poslali zvukovú nahrávku"; + + static m48(username) => "${username} zdieľa lokáciu"; + + static m49(hours12, hours24, minutes, suffix) => "${hours24}:${minutes}"; + + static m50(username, targetName) => "${username} odbanovali ${targetName}"; + + static m51(type) => "Neznáma udalosť „${type}“"; + + static m52(unreadCount) => "${unreadCount} neprečítaných chatov"; + + static m53(unreadEvents) => "${unreadEvents} neprečítaných správ"; + + static m54(unreadEvents, unreadChats) => + "${unreadEvents} neprečítaných správ v ${unreadChats} chatoch"; + + static m55(username, count) => "${username} a ${count} dalších píšu…"; + + static m56(username, username2) => "${username} a ${username2} píšu…"; + + static m57(username) => "${username} píše…"; + + static m58(username) => "${username} opustili chat"; + + static m59(username, type) => "${username} poslali udalosť ${type}"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static _notInlinedMessages(_) => { + "(Optional) Group name": + MessageLookupByLibrary.simpleMessage("(Voliteľné) Názov skupiny"), + "About": MessageLookupByLibrary.simpleMessage("O aplikácii"), + "Accept": MessageLookupByLibrary.simpleMessage("Prijať"), + "Account": MessageLookupByLibrary.simpleMessage("Účet"), + "Account informations": + MessageLookupByLibrary.simpleMessage("Informácie o účte"), + "Add a group description": + MessageLookupByLibrary.simpleMessage("Pridať popis skupiny"), + "Admin": MessageLookupByLibrary.simpleMessage("Administrátor"), + "Already have an account?": + MessageLookupByLibrary.simpleMessage("Máte už účet?"), + "Anyone can join": + MessageLookupByLibrary.simpleMessage("Ktokoľvek sa môže pripojiť"), + "Archive": MessageLookupByLibrary.simpleMessage("Archivovať"), + "Archived Room": + MessageLookupByLibrary.simpleMessage("Archivovaná miestnosť"), + "Are guest users allowed to join": + MessageLookupByLibrary.simpleMessage("Môžu sa pripojiť hostia"), + "Are you sure?": MessageLookupByLibrary.simpleMessage("Ste si istí?"), + "Authentication": + MessageLookupByLibrary.simpleMessage("Autentifikácia"), + "Avatar has been changed": + MessageLookupByLibrary.simpleMessage("Avatar bol zmenený"), + "Ban from chat": + MessageLookupByLibrary.simpleMessage("Zabanovať z chatu"), + "Banned": MessageLookupByLibrary.simpleMessage("Zabanovaný"), + "Block Device": + MessageLookupByLibrary.simpleMessage("Zakázať zariadenie"), + "Cancel": MessageLookupByLibrary.simpleMessage("Zrušiť"), + "Change the homeserver": + MessageLookupByLibrary.simpleMessage("Zmeniť použitý server"), + "Change the name of the group": + MessageLookupByLibrary.simpleMessage("Zmeniť názov skupiny"), + "Change the server": + MessageLookupByLibrary.simpleMessage("Zmeniť server"), + "Change wallpaper": + MessageLookupByLibrary.simpleMessage("Zmeniť pozadie"), + "Change your style": + MessageLookupByLibrary.simpleMessage("Zmena štýlu"), + "Changelog": MessageLookupByLibrary.simpleMessage("História zmien"), + "Chat": MessageLookupByLibrary.simpleMessage("Chat"), + "Chat details": + MessageLookupByLibrary.simpleMessage("Podrobnosti o chate"), + "Choose a strong password": + MessageLookupByLibrary.simpleMessage("Vyberte si silné heslo"), + "Choose a username": + MessageLookupByLibrary.simpleMessage("Vyberte si užívateľské meno"), + "Close": MessageLookupByLibrary.simpleMessage("Zavrieť"), + "Confirm": MessageLookupByLibrary.simpleMessage("Potvrdiť"), + "Connect": MessageLookupByLibrary.simpleMessage("Pripojiť"), + "Connection attempt failed": + MessageLookupByLibrary.simpleMessage("Pokus o pripojenie zlyhal"), + "Contact has been invited to the group": + MessageLookupByLibrary.simpleMessage( + "Kontakt bol pozvaný do skupiny"), + "Content viewer": + MessageLookupByLibrary.simpleMessage("Prehliadač obsahu"), + "Copied to clipboard": + MessageLookupByLibrary.simpleMessage("Skopírované do schránky"), + "Copy": MessageLookupByLibrary.simpleMessage("Kopírovať"), + "Could not set avatar": MessageLookupByLibrary.simpleMessage( + "Nepodarilo sa nastaviť avatar"), + "Could not set displayname": MessageLookupByLibrary.simpleMessage( + "Nepodarilo sa nastaviť prezývku užívateľa"), + "Create": MessageLookupByLibrary.simpleMessage("Vytvoriť"), + "Create account now": + MessageLookupByLibrary.simpleMessage("Vytvoriť účet teraz"), + "Create new group": + MessageLookupByLibrary.simpleMessage("Vytvoriť novú skupinu"), + "Currently active": + MessageLookupByLibrary.simpleMessage("Momentálne prítomní"), + "Dark": MessageLookupByLibrary.simpleMessage("Tmavá"), + "Delete": MessageLookupByLibrary.simpleMessage("Odstrániť"), + "Delete message": + MessageLookupByLibrary.simpleMessage("Odstrániť správu"), + "Deny": MessageLookupByLibrary.simpleMessage("Zamietnuť"), + "Device": MessageLookupByLibrary.simpleMessage("Zariadenie"), + "Devices": MessageLookupByLibrary.simpleMessage("Zariadenia"), + "Discard picture": + MessageLookupByLibrary.simpleMessage("Zahodiť obrázok"), + "Displayname has been changed": + MessageLookupByLibrary.simpleMessage("Prezývka bola zmenená"), + "Donate": MessageLookupByLibrary.simpleMessage("Prispejte"), + "Download file": MessageLookupByLibrary.simpleMessage("Stiahnuť súbor"), + "Edit Jitsi instance": + MessageLookupByLibrary.simpleMessage("Nastavenie inštancie Jitsi"), + "Edit displayname": + MessageLookupByLibrary.simpleMessage("Zmeniť prezývku"), + "Emote Settings": + MessageLookupByLibrary.simpleMessage("Nastavenie emotikonov"), + "Emote shortcode": + MessageLookupByLibrary.simpleMessage("Kód emotikonu"), + "Empty chat": MessageLookupByLibrary.simpleMessage("Prázdny chat"), + "Encryption": MessageLookupByLibrary.simpleMessage("Šifrovanie"), + "Encryption algorithm": + MessageLookupByLibrary.simpleMessage("Šifrovací algoritmus"), + "Encryption is not enabled": + MessageLookupByLibrary.simpleMessage("Šifrovanie nie je aktívne"), + "End to end encryption is currently in Beta! Use at your own risk!": + MessageLookupByLibrary.simpleMessage( + "Konečné šifrovanie je momentálne v Beta verzii! Používajte na vlastné riziko!"), + "End-to-end encryption settings": MessageLookupByLibrary.simpleMessage( + "Nastavenie koncového šifrovania"), + "Enter a group name": + MessageLookupByLibrary.simpleMessage("Zadajte názov skupiny"), + "Enter a username": + MessageLookupByLibrary.simpleMessage("Zadajte uživateľské meno"), + "Enter your homeserver": + MessageLookupByLibrary.simpleMessage("Zadajte svoj homeserver"), + "File name": MessageLookupByLibrary.simpleMessage("Názov súboru"), + "File size": MessageLookupByLibrary.simpleMessage("Veľkosť súboru"), + "FluffyChat": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "Forward": MessageLookupByLibrary.simpleMessage("Preposlať"), + "Friday": MessageLookupByLibrary.simpleMessage("Piatok"), + "From joining": MessageLookupByLibrary.simpleMessage("Od pripojenia"), + "From the invitation": + MessageLookupByLibrary.simpleMessage("Od pozvania"), + "Group": MessageLookupByLibrary.simpleMessage("Skupina"), + "Group description": + MessageLookupByLibrary.simpleMessage("Popis skupiny"), + "Group description has been changed": + MessageLookupByLibrary.simpleMessage("Popis skupiny bol zmenený"), + "Group is public": + MessageLookupByLibrary.simpleMessage("Skupina je verejná"), + "Guests are forbidden": + MessageLookupByLibrary.simpleMessage("Hostia sú zakázaní"), + "Guests can join": + MessageLookupByLibrary.simpleMessage("Hostia sa môžu pripojiť"), + "Help": MessageLookupByLibrary.simpleMessage("Pomoc"), + "Homeserver is not compatible": MessageLookupByLibrary.simpleMessage( + "Homeserver nie je kompatibilný"), + "How are you today?": + MessageLookupByLibrary.simpleMessage("Ako sa dnes máte?"), + "ID": MessageLookupByLibrary.simpleMessage("ID"), + "Identity": MessageLookupByLibrary.simpleMessage("Identita"), + "Invite contact": + MessageLookupByLibrary.simpleMessage("Pozvať kontakt"), + "Invited": MessageLookupByLibrary.simpleMessage("Pozvanie"), + "Invited users only": + MessageLookupByLibrary.simpleMessage("Len pozvaní používatelia"), + "It seems that you have no google services on your phone. That\'s a good decision for your privacy! To receive push notifications in FluffyChat we recommend using microG: https://microg.org/": + MessageLookupByLibrary.simpleMessage( + "Zdá sa, že nemáte žiadne služby Googlu v telefóne. To je dobré rozhodnutie pre vaše súkromie! Ak chcete dostávať push notifikácie vo FluffyChat, odporúčame používať microG: https://microg.org/"), + "Kick from chat": + MessageLookupByLibrary.simpleMessage("Vyhodiť z chatu"), + "Last seen IP": MessageLookupByLibrary.simpleMessage( + "Naposledy zaznamenaná IP adresa"), + "Leave": MessageLookupByLibrary.simpleMessage("Opustiť"), + "Left the chat": MessageLookupByLibrary.simpleMessage("Opustili chat"), + "License": MessageLookupByLibrary.simpleMessage("Licencia"), + "Light": MessageLookupByLibrary.simpleMessage("Svetlá"), + "Load more...": MessageLookupByLibrary.simpleMessage("Načítať viac..."), + "Loading... Please wait": MessageLookupByLibrary.simpleMessage( + "Načítava sa... Čakajte prosím"), + "Login": MessageLookupByLibrary.simpleMessage("Prihlásiť sa"), + "Logout": MessageLookupByLibrary.simpleMessage("Odhlásiť sa"), + "Make a moderator": + MessageLookupByLibrary.simpleMessage("Pridať práva moderátora"), + "Make an admin": + MessageLookupByLibrary.simpleMessage("Pridať práva administrátora"), + "Make sure the identifier is valid": + MessageLookupByLibrary.simpleMessage( + "Skontrolujte, či je identifikátor platný"), + "Message will be removed for all participants": + MessageLookupByLibrary.simpleMessage( + "Správa bude odstránená pre všetkých účastníkov"), + "Moderator": MessageLookupByLibrary.simpleMessage("Moderátor"), + "Monday": MessageLookupByLibrary.simpleMessage("Pondelok"), + "Mute chat": MessageLookupByLibrary.simpleMessage("Stlmiť chat"), + "New message in FluffyChat": + MessageLookupByLibrary.simpleMessage("Nová správa v FluffyChate"), + "New private chat": + MessageLookupByLibrary.simpleMessage("Nový súkromný chat"), + "No emotes found. 😕": MessageLookupByLibrary.simpleMessage( + "Nenašli sa žiadne emotikony. 😕"), + "No permission": + MessageLookupByLibrary.simpleMessage("Chýba povolenie"), + "No rooms found...": MessageLookupByLibrary.simpleMessage( + "Nenašli sa žiadne miestnosti..."), + "None": MessageLookupByLibrary.simpleMessage("Žiadne"), + "Not supported in web": MessageLookupByLibrary.simpleMessage( + "Nepodporované vo webovej verzii"), + "Oops something went wrong...": + MessageLookupByLibrary.simpleMessage("Och! Niečo sa pokazilo..."), + "Open app to read messages": MessageLookupByLibrary.simpleMessage( + "Na prečítanie správy otvorte aplikáciu"), + "Open camera": + MessageLookupByLibrary.simpleMessage("Otvoriť fotoaparát"), + "Participating user devices": MessageLookupByLibrary.simpleMessage( + "Zúčastnené užívateľské zariadenia"), + "Password": MessageLookupByLibrary.simpleMessage("Heslo"), + "Pick image": MessageLookupByLibrary.simpleMessage("Vybrať obrázok"), + "Please be aware that you need Pantalaimon to use end-to-end encryption for now.": + MessageLookupByLibrary.simpleMessage( + "Prosím berte na vedomie, že na koncové šifrovanie zatiaľ potrebujete Pantalaimon."), + "Please choose a username": MessageLookupByLibrary.simpleMessage( + "Vyberte si používateľské meno"), + "Please enter a matrix identifier": + MessageLookupByLibrary.simpleMessage( + "Vyberte si matrix identifkátor"), + "Please enter your password": + MessageLookupByLibrary.simpleMessage("Prosím zadajte svoje heslo"), + "Please enter your username": MessageLookupByLibrary.simpleMessage( + "Zadajte svoje používateľské meno"), + "Public Rooms": + MessageLookupByLibrary.simpleMessage("Verejné miestnosti"), + "Recording": MessageLookupByLibrary.simpleMessage("Nahrávam"), + "Reject": MessageLookupByLibrary.simpleMessage("Odmietnuť"), + "Rejoin": MessageLookupByLibrary.simpleMessage("Vrátiť sa"), + "Remove": MessageLookupByLibrary.simpleMessage("Odstrániť"), + "Remove all other devices": MessageLookupByLibrary.simpleMessage( + "Odstráňiť všetky ostatné zariadenia"), + "Remove device": + MessageLookupByLibrary.simpleMessage("Odstráňiť zariadenie"), + "Remove exile": MessageLookupByLibrary.simpleMessage("Odblokovať"), + "Remove message": + MessageLookupByLibrary.simpleMessage("Odstrániť správu"), + "Render rich message content": + MessageLookupByLibrary.simpleMessage("Zobraziť formátovaný obsah"), + "Reply": MessageLookupByLibrary.simpleMessage("Odpovedať"), + "Request permission": + MessageLookupByLibrary.simpleMessage("Vyžiadať si povolenie"), + "Request to read older messages": MessageLookupByLibrary.simpleMessage( + "Žiadosť o prečítanie starších správ"), + "Revoke all permissions": + MessageLookupByLibrary.simpleMessage("Zrušiť všetky povolenia"), + "Room has been upgraded": + MessageLookupByLibrary.simpleMessage("Miestnosť bola upgradeovaná"), + "Saturday": MessageLookupByLibrary.simpleMessage("Sobota"), + "Search for a chat": + MessageLookupByLibrary.simpleMessage("Vyhladať v chate"), + "Seen a long time ago": + MessageLookupByLibrary.simpleMessage("Videný veľmi dávno"), + "Send": MessageLookupByLibrary.simpleMessage("Odoslať"), + "Send a message": + MessageLookupByLibrary.simpleMessage("Odoslať správu"), + "Send file": MessageLookupByLibrary.simpleMessage("Odoslať súbor"), + "Send image": MessageLookupByLibrary.simpleMessage("Odoslať obrázok"), + "Set a profile picture": + MessageLookupByLibrary.simpleMessage("Nastaviť profilový obrázok"), + "Set group description": + MessageLookupByLibrary.simpleMessage("Nastaviť popis skupiny"), + "Set invitation link": + MessageLookupByLibrary.simpleMessage("Nastaviť odkaz pre pozvánku"), + "Set status": MessageLookupByLibrary.simpleMessage("Nastaviť status"), + "Settings": MessageLookupByLibrary.simpleMessage("Nastavenia"), + "Share": MessageLookupByLibrary.simpleMessage("Zdieľať"), + "Sign up": MessageLookupByLibrary.simpleMessage("Zaregistrovať sa"), + "Skip": MessageLookupByLibrary.simpleMessage("Preskočiť"), + "Source code": MessageLookupByLibrary.simpleMessage("Zdrojový kód"), + "Start your first chat :-)": + MessageLookupByLibrary.simpleMessage("Začnite svoj prvý chat :-)"), + "Submit": MessageLookupByLibrary.simpleMessage("Odoslať"), + "Sunday": MessageLookupByLibrary.simpleMessage("Nedeľa"), + "System": MessageLookupByLibrary.simpleMessage("Systémová farba"), + "Tap to show menu": + MessageLookupByLibrary.simpleMessage("Ťuknutím zobrazíte menu"), + "The encryption has been corrupted": + MessageLookupByLibrary.simpleMessage("Šifrovanie bolo poškodené"), + "They Don\'t Match": + MessageLookupByLibrary.simpleMessage("Sa nezhodujú"), + "They Match": MessageLookupByLibrary.simpleMessage("Zhodujú sa"), + "This room has been archived.": MessageLookupByLibrary.simpleMessage( + "Táto miestnosť bola archivovaná."), + "Thursday": MessageLookupByLibrary.simpleMessage("Štvrtok"), + "Try to send again": + MessageLookupByLibrary.simpleMessage("Skúsiť znova odoslať"), + "Tuesday": MessageLookupByLibrary.simpleMessage("Utorok"), + "Unblock Device": + MessageLookupByLibrary.simpleMessage("Odblokovať zariadenie"), + "Unknown device": + MessageLookupByLibrary.simpleMessage("Neznáme zariadenie"), + "Unknown encryption algorithm": MessageLookupByLibrary.simpleMessage( + "Neznámy šifrovací algoritmus"), + "Unmute chat": + MessageLookupByLibrary.simpleMessage("Zrušiť stlmenie chatu"), + "Use Amoled compatible colors?": MessageLookupByLibrary.simpleMessage( + "Použiť Amoled kompatibilné farby?"), + "Username": MessageLookupByLibrary.simpleMessage("Užívateľské meno"), + "Verify": MessageLookupByLibrary.simpleMessage("Overiť"), + "Verify User": + MessageLookupByLibrary.simpleMessage("Verifikovať používateľa"), + "Video call": MessageLookupByLibrary.simpleMessage("Videohovor"), + "Visibility of the chat history": + MessageLookupByLibrary.simpleMessage("Viditeľnosť histórie chatu"), + "Visible for all participants": MessageLookupByLibrary.simpleMessage( + "Viditeľné pre všetkých účastníkov"), + "Visible for everyone": + MessageLookupByLibrary.simpleMessage("Viditeľné pre každého"), + "Voice message": MessageLookupByLibrary.simpleMessage("Hlasová správa"), + "Wallpaper": MessageLookupByLibrary.simpleMessage("Pozadie"), + "Wednesday": MessageLookupByLibrary.simpleMessage("Streda"), + "Welcome to the cutest instant messenger in the matrix network.": + MessageLookupByLibrary.simpleMessage( + "Vítajte v najroztomilejšom instant messengeri v sieti matrix."), + "Who is allowed to join this group": + MessageLookupByLibrary.simpleMessage( + "Kto môže vstúpiť do tejto skupiny"), + "Write a message...": + MessageLookupByLibrary.simpleMessage("Napísať správu..."), + "Yes": MessageLookupByLibrary.simpleMessage("Áno"), + "You": MessageLookupByLibrary.simpleMessage("Vy"), + "You are invited to this chat": + MessageLookupByLibrary.simpleMessage("Ste pozvaní do tohto chatu"), + "You are no longer participating in this chat": + MessageLookupByLibrary.simpleMessage( + "Už sa nezúčastňujete tohto chatu"), + "You cannot invite yourself": + MessageLookupByLibrary.simpleMessage("Nemôžete pozvať samých seba"), + "You have been banned from this chat": + MessageLookupByLibrary.simpleMessage( + "Máte zablokovaný prístup k tomuto chatu"), + "You won\'t be able to disable the encryption anymore. Are you sure?": + MessageLookupByLibrary.simpleMessage( + "Šifrovanie už nebude možné vypnúť. Ste si tým istí?"), + "Your own username": + MessageLookupByLibrary.simpleMessage("Vaša vlastná prezývka"), + "acceptedTheInvitation": m0, + "activatedEndToEndEncryption": m1, + "alias": MessageLookupByLibrary.simpleMessage("alias"), + "askSSSSCache": MessageLookupByLibrary.simpleMessage( + "Prosím zadajte vašu prístupovu frázu k \"bezpečému úložisku\" alebo \"kľúč na obnovu\" pre uloženie kľúčov."), + "askSSSSSign": MessageLookupByLibrary.simpleMessage( + "Na overenie tejto osoby, prosím zadajte prístupovu frázu k \"bezpečému úložisku\" alebo \"klúč na obnovu\"."), + "askSSSSVerify": MessageLookupByLibrary.simpleMessage( + "Prosím zadajte vašu prístupovú frázu k \"bezpečnému úložisku\" alebo \"kľúč na obnovu\" pre overenie vašej relácie."), + "askVerificationRequest": m60, + "bannedUser": m2, + "byDefaultYouWillBeConnectedTo": m3, + "cachedKeys": + MessageLookupByLibrary.simpleMessage("Klúče sa úspešne uložili!"), + "changedTheChatAvatar": m4, + "changedTheChatDescriptionTo": m5, + "changedTheChatNameTo": m6, + "changedTheChatPermissions": m7, + "changedTheDisplaynameTo": m8, + "changedTheGuestAccessRules": m9, + "changedTheGuestAccessRulesTo": m10, + "changedTheHistoryVisibility": m11, + "changedTheHistoryVisibilityTo": m12, + "changedTheJoinRules": m13, + "changedTheJoinRulesTo": m14, + "changedTheProfileAvatar": m15, + "changedTheRoomAliases": m16, + "changedTheRoomInvitationLink": m17, + "compareEmojiMatch": MessageLookupByLibrary.simpleMessage( + "Porovnajte a uistite sa, že nasledujúce emotikony sa zhodujú na oboch zariadeniach:"), + "compareNumbersMatch": MessageLookupByLibrary.simpleMessage( + "Porovnajte a uistite sa, že nasledujúce čísla sa zhodujú na oboch zariadeniach:"), + "couldNotDecryptMessage": m18, + "countParticipants": m19, + "createdTheChat": m20, + "crossSigningDisabled": MessageLookupByLibrary.simpleMessage( + "Vzájomné overenie je vypnuté"), + "crossSigningEnabled": MessageLookupByLibrary.simpleMessage( + "Vzájomné overenie je zapnuté"), + "dateAndTimeOfDay": m21, + "dateWithYear": m22, + "dateWithoutYear": m23, + "emoteExists": + MessageLookupByLibrary.simpleMessage("Emotikon už existuje"), + "emoteInvalid": MessageLookupByLibrary.simpleMessage( + "Nesprávné označenie emotikonu"), + "emoteWarnNeedToPick": MessageLookupByLibrary.simpleMessage( + "Musíte zvoliť kód emotikonu a obrázok"), + "groupWith": m24, + "hasWithdrawnTheInvitationFor": m25, + "incorrectPassphraseOrKey": MessageLookupByLibrary.simpleMessage( + "Nesprávna prístupová fráza alebo kľúč na obnovenie"), + "inviteContactToGroup": m26, + "inviteText": m27, + "invitedUser": m28, + "is typing...": MessageLookupByLibrary.simpleMessage("píše..."), + "isDeviceKeyCorrect": MessageLookupByLibrary.simpleMessage( + "Je nasledujúci kód zariadenia správny?"), + "joinedTheChat": m29, + "keysCached": MessageLookupByLibrary.simpleMessage("Kľúče sú uložené"), + "keysMissing": MessageLookupByLibrary.simpleMessage("Kľúče chýbaju"), + "kicked": m30, + "kickedAndBanned": m31, + "lastActiveAgo": m32, + "loadCountMoreParticipants": m33, + "logInTo": m34, + "newVerificationRequest": + MessageLookupByLibrary.simpleMessage("Nová žiadosť o verifikáciu!"), + "noCrossSignBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat v súčasnosti nepodporuje povolenie krížového podpisu. Prosím, povoľte ho z Riot.im."), + "noMegolmBootstrap": MessageLookupByLibrary.simpleMessage( + "Fluffychat v súčasnosti nepodporuje povolenie online zálohu klúčov. Prosím, povoľte ho z Riot.im."), + "numberSelected": m35, + "ok": MessageLookupByLibrary.simpleMessage("ok"), + "onlineKeyBackupDisabled": MessageLookupByLibrary.simpleMessage( + "Online záloha kľúčov je vypnutá"), + "onlineKeyBackupEnabled": MessageLookupByLibrary.simpleMessage( + "Online záloha kľúčov je zapnutá"), + "passphraseOrKey": MessageLookupByLibrary.simpleMessage( + "prístupová fráza alebo kľúč na obnovenie"), + "play": m36, + "redactedAnEvent": m37, + "rejectedTheInvitation": m38, + "removedBy": m39, + "seenByUser": m40, + "seenByUserAndCountOthers": m41, + "seenByUserAndUser": m42, + "sentAFile": m43, + "sentAPicture": m44, + "sentASticker": m45, + "sentAVideo": m46, + "sentAnAudio": m47, + "sessionVerified": + MessageLookupByLibrary.simpleMessage("Relácia je overená"), + "sharedTheLocation": m48, + "timeOfDay": m49, + "title": MessageLookupByLibrary.simpleMessage("FluffyChat"), + "unbannedUser": m50, + "unknownEvent": m51, + "unknownSessionVerify": MessageLookupByLibrary.simpleMessage( + "Neznáma relácia, prosím verifikujte ju"), + "unreadChats": m52, + "unreadMessages": m53, + "unreadMessagesInChats": m54, + "userAndOthersAreTyping": m55, + "userAndUserAreTyping": m56, + "userIsTyping": m57, + "userLeftTheChat": m58, + "userSentUnknownEvent": m59, + "verifiedSession": + MessageLookupByLibrary.simpleMessage("Úspešne overenie relácie!"), + "verifyManual": + MessageLookupByLibrary.simpleMessage("Verifikovať manuálne"), + "verifyStart": + MessageLookupByLibrary.simpleMessage("Spustiť verifikáciu"), + "verifySuccess": + MessageLookupByLibrary.simpleMessage("Verifikácia bola úspešná!"), + "verifyTitle": + MessageLookupByLibrary.simpleMessage("Verifikujem protiľahlý účet"), + "waitingPartnerAcceptRequest": MessageLookupByLibrary.simpleMessage( + "Čaká sa, kým partner prijme požiadavku..."), + "waitingPartnerEmoji": MessageLookupByLibrary.simpleMessage( + "Čaká sa, kým partner prijme emotikon..."), + "waitingPartnerNumbers": MessageLookupByLibrary.simpleMessage( + "Čaká sa na to, kým partner prijme čísla...") + }; +} diff --git a/lib/main.dart b/lib/main.dart index 73d7209..7bb69d2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -46,6 +46,13 @@ class App extends StatelessWidget { const Locale('hu'), // Hungarian const Locale('pl'), // Polish const Locale('fr'), // French + const Locale('cs'), // Czech + const Locale('es'), // Spanish + const Locale('sk'), // Slovakian + const Locale('gl'), // Galician + const Locale('hr'), // Croatian + const Locale('ja'), // Japanese + const Locale('ru'), // Russian ], locale: kIsWeb ? Locale(html.window.navigator.language.split('-').first) diff --git a/lib/utils/client_presence_extension.dart b/lib/utils/client_presence_extension.dart index 02bdb9b..65f1885 100644 --- a/lib/utils/client_presence_extension.dart +++ b/lib/utils/client_presence_extension.dart @@ -1,10 +1,10 @@ import 'package:famedlysdk/famedlysdk.dart'; extension ClientPresenceExtension on Client { - List get statusList { - final statusList = presences.values.toList().reversed.toList(); - statusList.removeWhere((p) => p.presence.statusMsg?.isEmpty ?? true); - statusList.reversed.toList(); - return statusList; + static final Map presencesCache = {}; + + Future requestProfileCached(String senderId) async { + presencesCache[senderId] ??= await getProfileFromUserId(senderId); + return presencesCache[senderId]; } } diff --git a/lib/utils/database/cipher_db.dart b/lib/utils/database/cipher_db.dart new file mode 100644 index 0000000..11b54f0 --- /dev/null +++ b/lib/utils/database/cipher_db.dart @@ -0,0 +1,121 @@ +// file from https://gist.github.com/simolus3/5097bbd80ce59f9b957961fe851fd95a#file-cipher_db-dart + +import 'dart:async'; +import 'dart:ffi'; +import 'dart:io'; +import 'dart:math'; + +import 'package:moor/backends.dart'; +import 'package:moor/moor.dart'; +import 'package:moor_ffi/moor_ffi.dart'; +import 'package:moor_ffi/open_helper.dart'; + +/// Tells `moor_ffi` to use `sqlcipher` instead of the regular `sqlite3`. +/// +/// This needs to be called before using `moor`, for instance in the `main` +/// method. +void init() { + const sharedLibraryName = 'libsqlcipher.so'; + + open.overrideFor(OperatingSystem.android, () { + try { + return DynamicLibrary.open(sharedLibraryName); + } catch (_) { + // On some (especially old) Android devices, we somehow can't dlopen + // libraries shipped with the apk. We need to find the full path of the + // library (/data/data//lib/libsqlite3.so) and open that one. + // For details, see https://github.com/simolus3/moor/issues/420 + final appIdAsBytes = File('/proc/self/cmdline').readAsBytesSync(); + + // app id ends with the first \0 character in here. + final endOfAppId = max(appIdAsBytes.indexOf(0), 0); + final appId = String.fromCharCodes(appIdAsBytes.sublist(0, endOfAppId)); + + return DynamicLibrary.open('/data/data/$appId/lib/$sharedLibraryName'); + } + }); + + open.overrideFor(OperatingSystem.iOS, () => DynamicLibrary.executable()); +} + +class VmDatabaseEncrypted extends DelegatedDatabase { + /// Creates a database that will store its result in the [file], creating it + /// if it doesn't exist. + factory VmDatabaseEncrypted( + File file, { + String password = '', + bool logStatements = false, + }) { + final vmDatabase = VmDatabase(file, logStatements: logStatements); + return VmDatabaseEncrypted._(vmDatabase, password); + } + + factory VmDatabaseEncrypted.memory({ + String password = '', + bool logStatements = false, + }) { + final vmDatabase = VmDatabase.memory(logStatements: logStatements); + return VmDatabaseEncrypted._(vmDatabase, password); + } + + VmDatabaseEncrypted._( + VmDatabase vmDatabase, + String password, + ) : super( + _VmEncryptedDelegate(vmDatabase.delegate, password), + logStatements: vmDatabase.logStatements, + isSequential: vmDatabase.isSequential, + ); +} + +class _VmEncryptedDelegate extends DatabaseDelegate { + final String password; + final DatabaseDelegate delegate; + + _VmEncryptedDelegate( + this.delegate, + this.password, + ); + + @override + Future open(QueryExecutorUser db) async { + await delegate.open(db); + final keyLiteral = const StringType().mapToSqlConstant(password); + await delegate.runCustom('PRAGMA KEY = $keyLiteral', const []); + return Future.value(); + } + + @override + FutureOr get isOpen => delegate.isOpen; + + @override + Future runBatched(BatchedStatements statements) { + return delegate.runBatched(statements); + } + + @override + Future runCustom(String statement, List args) { + return delegate.runCustom(statement, args); + } + + @override + Future runInsert(String statement, List args) { + return delegate.runInsert(statement, args); + } + + @override + Future runSelect(String statement, List args) { + return delegate.runSelect(statement, args); + } + + @override + Future runUpdate(String statement, List args) { + return delegate.runUpdate(statement, args); + } + + @override + TransactionDelegate get transactionDelegate => delegate.transactionDelegate; + + @override + DbVersionDelegate get versionDelegate => delegate.versionDelegate; +} diff --git a/lib/utils/database/mobile.dart b/lib/utils/database/mobile.dart index 295c15e..8108659 100644 --- a/lib/utils/database/mobile.dart +++ b/lib/utils/database/mobile.dart @@ -1,14 +1,63 @@ +import 'dart:io'; +import 'dart:isolate'; import 'package:famedlysdk/famedlysdk.dart'; -import 'package:encrypted_moor/encrypted_moor.dart'; +import 'package:sqflite/sqflite.dart' show getDatabasesPath; +import 'package:path/path.dart' as p; import 'package:flutter/material.dart'; +import 'package:moor/moor.dart'; +import 'package:moor/isolate.dart'; +import 'cipher_db.dart' as cipher; -Database constructDb( +bool _inited = false; + +// see https://moor.simonbinder.eu/docs/advanced-features/isolates/ +void _startBackground(_IsolateStartRequest request) { + // this is the entry point from the background isolate! Let's create + // the database from the path we received + + if (!_inited) { + cipher.init(); + _inited = true; + } + final executor = cipher.VmDatabaseEncrypted(File(request.targetPath), + password: request.password, logStatements: request.logStatements); + // we're using MoorIsolate.inCurrent here as this method already runs on a + // background isolate. If we used MoorIsolate.spawn, a third isolate would be + // started which is not what we want! + final moorIsolate = MoorIsolate.inCurrent( + () => DatabaseConnection.fromExecutor(executor), + ); + // inform the starting isolate about this, so that it can call .connect() + request.sendMoorIsolate.send(moorIsolate); +} + +// used to bundle the SendPort and the target path, since isolate entry point +// functions can only take one parameter. +class _IsolateStartRequest { + final SendPort sendMoorIsolate; + final String targetPath; + final String password; + final bool logStatements; + + _IsolateStartRequest( + this.sendMoorIsolate, this.targetPath, this.password, this.logStatements); +} + +Future constructDb( {bool logStatements = false, String filename = 'database.sqlite', - String password = ''}) { + String password = ''}) async { debugPrint('[Moor] using encrypted moor'); - return Database(EncryptedExecutor( - path: filename, password: password, logStatements: logStatements)); + final dbFolder = await getDatabasesPath(); + final targetPath = p.join(dbFolder, filename); + final receivePort = ReceivePort(); + await Isolate.spawn( + _startBackground, + _IsolateStartRequest( + receivePort.sendPort, targetPath, password, logStatements), + ); + final isolate = (await receivePort.first as MoorIsolate); + return Database.connect(await isolate.connect()); } Future getLocalstorage(String key) async { diff --git a/lib/utils/database/unsupported.dart b/lib/utils/database/unsupported.dart index cae3499..996b1f5 100644 --- a/lib/utils/database/unsupported.dart +++ b/lib/utils/database/unsupported.dart @@ -1,9 +1,9 @@ import 'package:famedlysdk/famedlysdk.dart'; -Database constructDb( +Future constructDb( {bool logStatements = false, String filename = 'database.sqlite', - String password = ''}) { + String password = ''}) async { throw 'Platform not supported'; } diff --git a/lib/utils/database/web.dart b/lib/utils/database/web.dart index e028e41..cd9e9ef 100644 --- a/lib/utils/database/web.dart +++ b/lib/utils/database/web.dart @@ -3,10 +3,10 @@ import 'package:moor/moor_web.dart'; import 'package:flutter/material.dart'; import 'dart:html'; -Database constructDb( +Future constructDb( {bool logStatements = false, String filename = 'database.sqlite', - String password = ''}) { + String password = ''}) async { debugPrint('[Moor] Using moor web'); return Database(WebDatabase.withStorage( MoorWebStorage.indexedDbIfSupported(filename), diff --git a/lib/utils/date_time_extension.dart b/lib/utils/date_time_extension.dart index 60a1983..5d94346 100644 --- a/lib/utils/date_time_extension.dart +++ b/lib/utils/date_time_extension.dart @@ -34,8 +34,8 @@ extension DateTimeExtension on DateTime { /// Returns a simple time String. /// TODO: Add localization String localizedTimeOfDay(BuildContext context) { - return L10n.of(context).timeOfDay( - _z(hour % 12), _z(hour), _z(minute), hour > 11 ? 'pm' : 'am'); + return L10n.of(context).timeOfDay(_z(hour % 12 == 0 ? 12 : hour % 12), + _z(hour), _z(minute), hour > 11 ? 'pm' : 'am'); } /// Returns [localizedTimeOfDay()] if the ChatTime is today, the name of the week diff --git a/lib/utils/famedlysdk_store.dart b/lib/utils/famedlysdk_store.dart index 761b64e..0dc906c 100644 --- a/lib/utils/famedlysdk_store.dart +++ b/lib/utils/famedlysdk_store.dart @@ -12,27 +12,36 @@ import 'package:olm/olm.dart' as olm; // needed for migration import 'package:random_string/random_string.dart'; Future getDatabase(Client client) async { - if (_db != null) return _db; - final store = Store(); - var password = await store.getItem('database-password'); - var needMigration = false; - if (password == null || password.isEmpty) { - needMigration = true; - password = randomString(255); + while (_generateDatabaseLock) { + await Future.delayed(Duration(milliseconds: 50)); } - _db = constructDb( - logStatements: false, - filename: 'moor.sqlite', - password: password, - ); - if (needMigration) { - await migrate(client.clientName, _db, store); - await store.setItem('database-password', password); + _generateDatabaseLock = true; + try { + if (_db != null) return _db; + final store = Store(); + var password = await store.getItem('database-password'); + var needMigration = false; + if (password == null || password.isEmpty) { + needMigration = true; + password = randomString(255); + } + _db = await constructDb( + logStatements: false, + filename: 'moor.sqlite', + password: password, + ); + if (needMigration) { + await migrate(client.clientName, _db, store); + await store.setItem('database-password', password); + } + return _db; + } finally { + _generateDatabaseLock = false; } - return _db; } Database _db; +bool _generateDatabaseLock = false; Future migrate(String clientName, Database db, Store store) async { debugPrint('[Store] attempting old migration to moor...'); @@ -127,7 +136,7 @@ Future migrate(String clientName, Database db, Store store) async { var sess = olm.Session(); sess.unpickle(credentials['userID'], pickle); await db.storeOlmSession( - clientId, identKey, sess.session_id(), pickle); + clientId, identKey, sess.session_id(), pickle, null); sess?.free(); } } diff --git a/lib/utils/firebase_controller.dart b/lib/utils/firebase_controller.dart index 5efe800..efd8b99 100644 --- a/lib/utils/firebase_controller.dart +++ b/lib/utils/firebase_controller.dart @@ -13,6 +13,7 @@ import 'package:bot_toast/bot_toast.dart'; import 'package:path_provider/path_provider.dart'; import 'package:famedlysdk/famedlysdk.dart'; import 'famedlysdk_store.dart'; +import '../components/matrix.dart'; abstract class FirebaseController { static final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); @@ -26,7 +27,9 @@ abstract class FirebaseController { static const String GATEWAY_URL = 'https://janian.de:7023/'; static const String PUSHER_FORMAT = 'event_id_only'; - static Future setupFirebase(Client client, String clientName) async { + static Future setupFirebase( + MatrixState matrix, String clientName) async { + final client = matrix.client; if (Platform.isIOS) iOS_Permission(); String token; @@ -36,10 +39,18 @@ abstract class FirebaseController { token = null; } if (token?.isEmpty ?? true) { - BotToast.showText( - text: L10n.of(context).noGoogleServicesWarning, - duration: Duration(seconds: 15), - ); + final storeItem = + await matrix.store.getItem('chat.fluffy.show_no_google'); + final configOptionMissing = storeItem == null || storeItem.isEmpty; + if (configOptionMissing || (!configOptionMissing && storeItem == '1')) { + BotToast.showText( + text: L10n.of(context).noGoogleServicesWarning, + duration: Duration(seconds: 15), + ); + if (configOptionMissing) { + await matrix.store.setItem('chat.fluffy.show_no_google', '0'); + } + } return; } final pushers = await client.api.requestPushers(); diff --git a/lib/utils/matrix_file_extension.dart b/lib/utils/matrix_file_extension.dart index 04cb7e4..f2c92b9 100644 --- a/lib/utils/matrix_file_extension.dart +++ b/lib/utils/matrix_file_extension.dart @@ -10,7 +10,7 @@ import 'package:mime_type/mime_type.dart'; extension MatrixFileExtension on MatrixFile { void open() async { if (kIsWeb) { - final fileName = path.split('/').last; + final fileName = name.split('/').last; final mimeType = mime(fileName); var element = html.document.createElement('a'); element.setAttribute( @@ -25,7 +25,7 @@ extension MatrixFileExtension on MatrixFile { element.remove(); } else { var tempDir = await getTemporaryDirectory(); - final file = File(tempDir.path + '/' + path.split('/').last); + final file = File(tempDir.path + '/' + name.split('/').last); file.writeAsBytesSync(bytes); await OpenFile.open(file.path); } diff --git a/lib/utils/presence_extension.dart b/lib/utils/presence_extension.dart index b367298..c127cd3 100644 --- a/lib/utils/presence_extension.dart +++ b/lib/utils/presence_extension.dart @@ -8,8 +8,11 @@ extension PresenceExtension on Presence { if (presence.statusMsg?.isNotEmpty ?? false) { return presence.statusMsg; } - return L10n.of(context).lastActiveAgo( - DateTime.fromMillisecondsSinceEpoch(presence.lastActiveAgo) - .localizedTimeShort(context)); + if (presence.lastActiveAgo != null) { + return L10n.of(context).lastActiveAgo( + DateTime.fromMillisecondsSinceEpoch(presence.lastActiveAgo) + .localizedTimeShort(context)); + } + return L10n.of(context).lastSeenLongTimeAgo; } } diff --git a/lib/utils/room_status_extension.dart b/lib/utils/room_status_extension.dart index 6b5d043..da86e9f 100644 --- a/lib/utils/room_status_extension.dart +++ b/lib/utils/room_status_extension.dart @@ -9,14 +9,20 @@ extension RoomStatusExtension on Room { String getLocalizedStatus(BuildContext context) { if (isDirectChat) { - if (directChatPresence != null) { + if (directChatPresence != null && + directChatPresence.presence != null && + (directChatPresence.presence.lastActiveAgo != null || + directChatPresence.presence.currentlyActive != null)) { if (directChatPresence.presence.currentlyActive == true) { return L10n.of(context).currentlyActive; } - return L10n.of(context).lastActiveAgo( - DateTime.fromMillisecondsSinceEpoch( - directChatPresence.presence.lastActiveAgo) - .localizedTimeShort(context)); + if (directChatPresence.presence.lastActiveAgo == null) { + return L10n.of(context).lastSeenLongTimeAgo; + } + final time = DateTime.fromMillisecondsSinceEpoch( + DateTime.now().millisecondsSinceEpoch - + directChatPresence.presence.lastActiveAgo); + return L10n.of(context).lastActiveAgo(time.localizedTimeShort(context)); } return L10n.of(context).lastSeenLongTimeAgo; } diff --git a/lib/utils/string_color.dart b/lib/utils/string_color.dart index 983dcef..f96c2e1 100644 --- a/lib/utils/string_color.dart +++ b/lib/utils/string_color.dart @@ -9,4 +9,13 @@ extension StringColor on String { number = (number % 10) * 25.5; return HSLColor.fromAHSL(1, number, 1, 0.35).toColor(); } + + Color get lightColor { + var number = 0.0; + for (var i = 0; i < length; i++) { + number += codeUnitAt(i); + } + number = (number % 10) * 25.5; + return HSLColor.fromAHSL(1, number, 1, 0.66).toColor(); + } } diff --git a/lib/views/chat.dart b/lib/views/chat.dart index fa4d097..e364bc8 100644 --- a/lib/views/chat.dart +++ b/lib/views/chat.dart @@ -3,10 +3,10 @@ import 'dart:io'; import 'dart:math'; import 'package:famedlysdk/famedlysdk.dart'; -import 'package:file_picker/file_picker.dart'; import 'package:fluffychat/components/adaptive_page_layout.dart'; import 'package:fluffychat/components/avatar.dart'; import 'package:fluffychat/components/chat_settings_popup_menu.dart'; +import 'package:fluffychat/components/connection_status_header.dart'; import 'package:fluffychat/components/dialogs/presence_dialog.dart'; import 'package:fluffychat/components/dialogs/recording_dialog.dart'; import 'package:fluffychat/components/dialogs/simple_dialogs.dart'; @@ -20,9 +20,9 @@ import 'package:fluffychat/utils/room_status_extension.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:bot_toast/bot_toast.dart'; -import 'package:image_picker/image_picker.dart'; +import 'package:memoryfilepicker/memoryfilepicker.dart'; import 'package:pedantic/pedantic.dart'; +import 'package:image_picker/image_picker.dart'; import 'chat_details.dart'; import 'chat_list.dart'; @@ -91,11 +91,11 @@ class _ChatState extends State<_Chat> { void requestHistory() async { if (_canLoadMore) { setState(() => _loadingHistory = true); - try { - await timeline.requestHistory(historyCount: _loadHistoryCount); - } catch (e) { - debugPrint('Error loading history: ' + e.toString()); - } + + await SimpleDialogs(context).tryRequestWithErrorToast( + timeline.requestHistory(historyCount: _loadHistoryCount), + ); + if (mounted) setState(() => _loadingHistory = false); } } @@ -157,9 +157,6 @@ class _ChatState extends State<_Chat> { if (timeline.events.isNotEmpty) { unawaited(room.sendReadReceipt(timeline.events.first.eventId)); } - if (timeline.events.length < _loadHistoryCount) { - requestHistory(); - } } updateView(); return true; @@ -187,51 +184,39 @@ class _ChatState extends State<_Chat> { } void sendFileAction(BuildContext context) async { - if (kIsWeb) { - BotToast.showText(text: L10n.of(context).notSupportedInWeb); - return; - } - var file = await FilePicker.getFile(); + var file = await MemoryFilePicker.getFile(); if (file == null) return; await SimpleDialogs(context).tryRequestWithLoadingDialog( room.sendFileEvent( - MatrixFile(bytes: await file.readAsBytes(), path: file.path), + MatrixFile(bytes: file.bytes, name: file.path), ), ); } void sendImageAction(BuildContext context) async { - if (kIsWeb) { - BotToast.showText(text: L10n.of(context).notSupportedInWeb); - return; - } - var file = await ImagePicker.pickImage( + var file = await MemoryFilePicker.getImage( source: ImageSource.gallery, imageQuality: 50, maxWidth: 1600, maxHeight: 1600); if (file == null) return; await SimpleDialogs(context).tryRequestWithLoadingDialog( - room.sendImageEvent( - MatrixFile(bytes: await file.readAsBytes(), path: file.path), + room.sendFileEvent( + MatrixImageFile(bytes: await file.bytes, name: file.path), ), ); } void openCameraAction(BuildContext context) async { - if (kIsWeb) { - BotToast.showText(text: L10n.of(context).notSupportedInWeb); - return; - } - var file = await ImagePicker.pickImage( + var file = await MemoryFilePicker.getImage( source: ImageSource.camera, imageQuality: 50, maxWidth: 1600, maxHeight: 1600); if (file == null) return; await SimpleDialogs(context).tryRequestWithLoadingDialog( - room.sendImageEvent( - MatrixFile(bytes: await file.readAsBytes(), path: file.path), + room.sendFileEvent( + MatrixImageFile(bytes: file.bytes, name: file.path), ), ); } @@ -246,8 +231,9 @@ class _ChatState extends State<_Chat> { if (result == null) return; final audioFile = File(result); await SimpleDialogs(context).tryRequestWithLoadingDialog( - room.sendAudioEvent( - MatrixFile(bytes: audioFile.readAsBytesSync(), path: audioFile.path), + room.sendFileEvent( + MatrixAudioFile( + bytes: audioFile.readAsBytesSync(), name: audioFile.path), ), ); } @@ -462,202 +448,206 @@ class _ChatState extends State<_Chat> { fit: BoxFit.cover, ), ), - SafeArea( - child: Column( - children: [ - if (_loadingHistory) LinearProgressIndicator(), - Expanded( - child: FutureBuilder( - future: getTimeline(), - builder: (BuildContext context, snapshot) { - if (!snapshot.hasData) { - return Center( - child: CircularProgressIndicator(), - ); - } + Column( + children: [ + Expanded( + child: FutureBuilder( + future: getTimeline(), + builder: (BuildContext context, snapshot) { + if (!snapshot.hasData) { + return Center( + child: CircularProgressIndicator(), + ); + } - if (room.notificationCount != null && - room.notificationCount > 0 && - timeline != null && - timeline.events.isNotEmpty) { - room.sendReadReceipt(timeline.events.first.eventId); - } + if (room.notificationCount != null && + room.notificationCount > 0 && + timeline != null && + timeline.events.isNotEmpty) { + room.sendReadReceipt(timeline.events.first.eventId); + } - if (timeline.events.isEmpty) return Container(); + if (timeline.events.isEmpty) return Container(); - return ListView.builder( - padding: EdgeInsets.symmetric( - horizontal: max( - 0, - (MediaQuery.of(context).size.width - - AdaptivePageLayout.defaultMinWidth * - 3.5) / - 2), - ), - reverse: true, - itemCount: timeline.events.length + 2, - controller: _scrollController, - itemBuilder: (BuildContext context, int i) { - return i == timeline.events.length + 1 - ? _canLoadMore && !_loadingHistory - ? FlatButton( - child: Text( - L10n.of(context).loadMore, - style: TextStyle( - color: - Theme.of(context).primaryColor, - fontWeight: FontWeight.bold, - decoration: - TextDecoration.underline, + return ListView.builder( + padding: EdgeInsets.symmetric( + horizontal: max( + 0, + (MediaQuery.of(context).size.width - + AdaptivePageLayout.defaultMinWidth * + 3.5) / + 2), + ), + reverse: true, + itemCount: timeline.events.length + 2, + controller: _scrollController, + itemBuilder: (BuildContext context, int i) { + return i == timeline.events.length + 1 + ? _loadingHistory + ? Container( + height: 50, + alignment: Alignment.center, + padding: EdgeInsets.all(8), + child: CircularProgressIndicator(), + ) + : _canLoadMore + ? FlatButton( + child: Text( + L10n.of(context).loadMore, + style: TextStyle( + color: Theme.of(context) + .primaryColor, + fontWeight: FontWeight.bold, + decoration: + TextDecoration.underline, + ), ), + onPressed: requestHistory, + ) + : Container() + : i == 0 + ? AnimatedContainer( + height: seenByText.isEmpty ? 0 : 24, + duration: seenByText.isEmpty + ? Duration(milliseconds: 0) + : Duration(milliseconds: 500), + alignment: + timeline.events.first.senderId == + client.userID + ? Alignment.topRight + : Alignment.topLeft, + child: Text( + seenByText, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + color: Theme.of(context).primaryColor, ), - onPressed: requestHistory, - ) - : Container() - : i == 0 - ? AnimatedContainer( - height: seenByText.isEmpty ? 0 : 24, - duration: seenByText.isEmpty - ? Duration(milliseconds: 0) - : Duration(milliseconds: 500), - alignment: - timeline.events.first.senderId == - client.userID - ? Alignment.topRight - : Alignment.topLeft, - child: Text( - seenByText, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - color: - Theme.of(context).primaryColor, - ), - ), - padding: EdgeInsets.only( - left: 8, - right: 8, - bottom: 8, - ), - ) - : Message(timeline.events[i - 1], - onAvatarTab: (Event event) { - sendController.text += - ' ${event.senderId}'; - }, onSelect: (Event event) { - if (!event.redacted) { - if (selectedEvents.contains(event)) { - setState( - () => - selectedEvents.remove(event), - ); - } else { - setState( - () => selectedEvents.add(event), - ); - } - selectedEvents.sort( - (a, b) => a.originServerTs - .compareTo(b.originServerTs), + ), + padding: EdgeInsets.only( + left: 8, + right: 8, + bottom: 8, + ), + ) + : Message(timeline.events[i - 1], + onAvatarTab: (Event event) { + sendController.text += + ' ${event.senderId}'; + }, onSelect: (Event event) { + if (!event.redacted) { + if (selectedEvents.contains(event)) { + setState( + () => selectedEvents.remove(event), + ); + } else { + setState( + () => selectedEvents.add(event), ); } - }, - longPressSelect: selectedEvents.isEmpty, - selected: selectedEvents - .contains(timeline.events[i - 1]), - timeline: timeline, - nextEvent: i >= 2 - ? timeline.events[i - 2] - : null); - }); - }, - ), + selectedEvents.sort( + (a, b) => a.originServerTs + .compareTo(b.originServerTs), + ); + } + }, + longPressSelect: selectedEvents.isEmpty, + selected: selectedEvents + .contains(timeline.events[i - 1]), + timeline: timeline, + nextEvent: i >= 2 + ? timeline.events[i - 2] + : null); + }); + }, ), - AnimatedContainer( - duration: Duration(milliseconds: 300), - height: replyEvent != null ? 56 : 0, - child: Material( - color: Theme.of(context).secondaryHeaderColor, - child: Row( - children: [ - IconButton( - icon: Icon(Icons.close), - onPressed: () => setState(() => replyEvent = null), - ), - Expanded( - child: ReplyContent(replyEvent), - ), - ], - ), - ), - ), - Divider( - height: 1, + ), + ConnectionStatusHeader(), + AnimatedContainer( + duration: Duration(milliseconds: 300), + height: replyEvent != null ? 56 : 0, + child: Material( color: Theme.of(context).secondaryHeaderColor, - thickness: 1, + child: Row( + children: [ + IconButton( + icon: Icon(Icons.close), + onPressed: () => setState(() => replyEvent = null), + ), + Expanded( + child: ReplyContent(replyEvent), + ), + ], + ), ), - room.canSendDefaultMessages && - room.membership == Membership.join - ? Container( - decoration: BoxDecoration( - color: Theme.of(context) - .backgroundColor - .withOpacity(0.8), - ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: selectMode - ? [ - Container( - height: 56, - child: FlatButton( - onPressed: () => - forwardEventsAction(context), - child: Row( - children: [ - Icon(Icons.keyboard_arrow_left), - Text(L10n.of(context).forward), - ], - ), + ), + Divider( + height: 1, + color: Theme.of(context).secondaryHeaderColor, + thickness: 1, + ), + room.canSendDefaultMessages && room.membership == Membership.join + ? Container( + decoration: BoxDecoration( + color: + Theme.of(context).backgroundColor.withOpacity(0.8), + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: selectMode + ? [ + Container( + height: 56, + child: FlatButton( + onPressed: () => + forwardEventsAction(context), + child: Row( + children: [ + Icon(Icons.keyboard_arrow_left), + Text(L10n.of(context).forward), + ], ), ), - selectedEvents.length == 1 - ? selectedEvents.first.status > 0 - ? Container( - height: 56, - child: FlatButton( - onPressed: () => replyAction(), - child: Row( - children: [ - Text( - L10n.of(context).reply), - Icon(Icons - .keyboard_arrow_right), - ], - ), + ), + selectedEvents.length == 1 + ? selectedEvents.first.status > 0 + ? Container( + height: 56, + child: FlatButton( + onPressed: () => replyAction(), + child: Row( + children: [ + Text(L10n.of(context).reply), + Icon(Icons + .keyboard_arrow_right), + ], ), - ) - : Container( - height: 56, - child: FlatButton( - onPressed: () => - sendAgainAction(), - child: Row( - children: [ - Text(L10n.of(context) - .tryToSendAgain), - SizedBox(width: 4), - Icon(Icons.send, size: 16), - ], - ), + ), + ) + : Container( + height: 56, + child: FlatButton( + onPressed: () => + sendAgainAction(), + child: Row( + children: [ + Text(L10n.of(context) + .tryToSendAgain), + SizedBox(width: 4), + Icon(Icons.send, size: 16), + ], ), - ) - : Container(), - ] - : [ - if (!kIsWeb && inputText.isEmpty) - PopupMenuButton( + ), + ) + : Container(), + ] + : [ + if (inputText.isEmpty) + Container( + height: 56, + alignment: Alignment.center, + child: PopupMenuButton( icon: Icon(Icons.add), onSelected: (String choice) async { if (choice == 'file') { @@ -700,99 +690,114 @@ class _ChatState extends State<_Chat> { contentPadding: EdgeInsets.all(0), ), ), - PopupMenuItem( - value: 'camera', - child: ListTile( - leading: CircleAvatar( - backgroundColor: Colors.purple, - foregroundColor: Colors.white, - child: Icon(Icons.camera_alt), + if (!kIsWeb) + PopupMenuItem( + value: 'camera', + child: ListTile( + leading: CircleAvatar( + backgroundColor: Colors.purple, + foregroundColor: Colors.white, + child: Icon(Icons.camera_alt), + ), + title: Text( + L10n.of(context).openCamera), + contentPadding: EdgeInsets.all(0), ), - title: Text( - L10n.of(context).openCamera), - contentPadding: EdgeInsets.all(0), ), - ), - PopupMenuItem( - value: 'voice', - child: ListTile( - leading: CircleAvatar( - backgroundColor: Colors.red, - foregroundColor: Colors.white, - child: Icon(Icons.mic), + if (!kIsWeb) + PopupMenuItem( + value: 'voice', + child: ListTile( + leading: CircleAvatar( + backgroundColor: Colors.red, + foregroundColor: Colors.white, + child: Icon(Icons.mic), + ), + title: Text(L10n.of(context) + .voiceMessage), + contentPadding: EdgeInsets.all(0), ), - title: Text( - L10n.of(context).voiceMessage), - contentPadding: EdgeInsets.all(0), ), - ), ], ), - EncryptionButton(room), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 4.0), - child: InputBar( - room: room, - minLines: 1, - maxLines: kIsWeb ? 1 : 8, - keyboardType: kIsWeb - ? TextInputType.text - : TextInputType.multiline, - onSubmitted: (String text) { - send(); - FocusScope.of(context) - .requestFocus(inputFocus); - }, - focusNode: inputFocus, - controller: sendController, - decoration: InputDecoration( - hintText: - L10n.of(context).writeAMessage, - border: InputBorder.none, - ), - onChanged: (String text) { - typingCoolDown?.cancel(); - typingCoolDown = - Timer(Duration(seconds: 2), () { - typingCoolDown = null; - currentlyTyping = false; - room.sendTypingInfo(false); - }); - typingTimeout ??= - Timer(Duration(seconds: 30), () { - typingTimeout = null; - currentlyTyping = false; - }); - if (!currentlyTyping) { - currentlyTyping = true; - room.sendTypingInfo(true, - timeout: Duration(seconds: 30) - .inMilliseconds); - } - setState(() => inputText = text); - }, + ), + Container( + height: 56, + alignment: Alignment.center, + child: EncryptionButton(room), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 4.0), + child: InputBar( + room: room, + minLines: 1, + maxLines: kIsWeb ? 1 : 8, + keyboardType: kIsWeb + ? TextInputType.text + : TextInputType.multiline, + onSubmitted: (String text) { + send(); + FocusScope.of(context) + .requestFocus(inputFocus); + }, + focusNode: inputFocus, + controller: sendController, + decoration: InputDecoration( + hintText: + L10n.of(context).writeAMessage, + hintMaxLines: 1, + border: InputBorder.none, ), + onChanged: (String text) { + typingCoolDown?.cancel(); + typingCoolDown = + Timer(Duration(seconds: 2), () { + typingCoolDown = null; + currentlyTyping = false; + room.sendTypingInfo(false); + }); + typingTimeout ??= + Timer(Duration(seconds: 30), () { + typingTimeout = null; + currentlyTyping = false; + }); + if (!currentlyTyping) { + currentlyTyping = true; + room.sendTypingInfo(true, + timeout: Duration(seconds: 30) + .inMilliseconds); + } + setState(() => inputText = text); + }, ), ), - if (!kIsWeb && inputText.isEmpty) - IconButton( + ), + if (!kIsWeb && inputText.isEmpty) + Container( + height: 56, + alignment: Alignment.center, + child: IconButton( icon: Icon(Icons.mic), onPressed: () => voiceMessageAction(context), ), - if (kIsWeb || inputText.isNotEmpty) - IconButton( + ), + if (kIsWeb || inputText.isNotEmpty) + Container( + height: 56, + alignment: Alignment.center, + child: IconButton( icon: Icon(Icons.send), onPressed: () => send(), ), - ], - ), - ) - : Container(), - ], - ), + ), + ], + ), + ) + : Container(), + ], ), ], ), diff --git a/lib/views/chat_details.dart b/lib/views/chat_details.dart index 71e6d50..cf062e9 100644 --- a/lib/views/chat_details.dart +++ b/lib/views/chat_details.dart @@ -15,6 +15,7 @@ import 'package:flutter/services.dart'; import 'package:bot_toast/bot_toast.dart'; import 'package:image_picker/image_picker.dart'; import 'package:link_text/link_text.dart'; +import 'package:memoryfilepicker/memoryfilepicker.dart'; import './settings_emotes.dart'; class ChatDetails extends StatefulWidget { @@ -100,7 +101,7 @@ class _ChatDetailsState extends State { } void setAvatarAction(BuildContext context) async { - final tempFile = await ImagePicker.pickImage( + final tempFile = await MemoryFilePicker.getImage( source: ImageSource.gallery, imageQuality: 50, maxWidth: 1600, @@ -109,8 +110,8 @@ class _ChatDetailsState extends State { final success = await SimpleDialogs(context).tryRequestWithLoadingDialog( widget.room.setAvatar( MatrixFile( - bytes: await tempFile.readAsBytes(), - path: tempFile.path, + bytes: tempFile.bytes, + name: tempFile.path, ), ), ); diff --git a/lib/views/chat_encryption_settings.dart b/lib/views/chat_encryption_settings.dart index 366d4ec..1f44f00 100644 --- a/lib/views/chat_encryption_settings.dart +++ b/lib/views/chat_encryption_settings.dart @@ -1,4 +1,5 @@ import 'package:famedlysdk/famedlysdk.dart'; +import 'package:famedlysdk/encryption.dart'; import 'package:fluffychat/components/adaptive_page_layout.dart'; import 'package:fluffychat/components/avatar.dart'; import 'package:fluffychat/components/matrix.dart'; @@ -6,6 +7,9 @@ import 'package:fluffychat/utils/beautify_string_extension.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/views/chat_list.dart'; import 'package:flutter/material.dart'; +import 'key_verification.dart'; +import '../utils/app_route.dart'; +import '../components/dialogs/simple_dialogs.dart'; class ChatEncryptionSettingsView extends StatelessWidget { final String id; @@ -33,6 +37,70 @@ class ChatEncryptionSettings extends StatefulWidget { } class _ChatEncryptionSettingsState extends State { + Future onSelected( + BuildContext context, String action, DeviceKeys key) async { + final room = Matrix.of(context).client.getRoomById(widget.id); + final unblock = () async { + if (key.blocked) { + await key.setBlocked(false); + } + }; + switch (action) { + case 'verify': + await unblock(); + final req = key.startVerification(); + req.onUpdate = () { + if (req.state == KeyVerificationState.done) { + setState(() => null); + } + }; + await Navigator.of(context).push( + AppRoute.defaultRoute( + context, + KeyVerificationView(request: req), + ), + ); + break; + case 'verify_manual': + if (await SimpleDialogs(context).askConfirmation( + titleText: L10n.of(context).isDeviceKeyCorrect, + contentText: key.ed25519Key.beautified, + )) { + await unblock(); + await key.setVerified(true); + setState(() => null); + } + break; + case 'verify_user': + await unblock(); + final req = + await room.client.userDeviceKeys[key.userId].startVerification(); + req.onUpdate = () { + if (req.state == KeyVerificationState.done) { + setState(() => null); + } + }; + await Navigator.of(context).push( + AppRoute.defaultRoute( + context, + KeyVerificationView(request: req), + ), + ); + break; + case 'block': + if (key.directVerified) { + await key.setVerified(false); + } + await key.setBlocked(true); + setState(() => null); + break; + case 'unblock': + await unblock(); + setState(() => null); + break; + } + } + @override Widget build(BuildContext context) { final room = Matrix.of(context).client.getRoomById(widget.id); @@ -68,59 +136,99 @@ class _ChatEncryptionSettingsState extends State { if (i == 0 || deviceKeys[i].userId != deviceKeys[i - 1].userId) Material( - child: ListTile( - leading: Avatar( - room + child: PopupMenuButton( + onSelected: (action) => + onSelected(context, action, deviceKeys[i]), + itemBuilder: (c) { + var items = >[]; + if (room + .client + .userDeviceKeys[deviceKeys[i].userId] + .verified == + UserVerifiedStatus.unknown && + deviceKeys[i].userId != room.client.userID) { + items.add(PopupMenuItem( + child: Text(L10n.of(context).verifyUser), + value: 'verify_user', + )); + } + return items; + }, + child: ListTile( + leading: Avatar( + room + .getUserByMXIDSync(deviceKeys[i].userId) + .avatarUrl, + room + .getUserByMXIDSync(deviceKeys[i].userId) + .calcDisplayname(), + ), + title: Text(room .getUserByMXIDSync(deviceKeys[i].userId) - .avatarUrl, - room - .getUserByMXIDSync(deviceKeys[i].userId) - .calcDisplayname(), + .calcDisplayname()), + subtitle: Text(deviceKeys[i].userId), ), - title: Text(room - .getUserByMXIDSync(deviceKeys[i].userId) - .calcDisplayname()), - subtitle: Text(deviceKeys[i].userId), ), elevation: 2, ), - CheckboxListTile( - title: Text( - "${deviceKeys[i].unsigned["device_display_name"] ?? L10n.of(context).unknownDevice} - ${deviceKeys[i].deviceId}", - style: TextStyle( - color: deviceKeys[i].blocked - ? Colors.red - : deviceKeys[i].verified - ? Colors.green - : Colors.orange), - ), - subtitle: Text( - deviceKeys[i] - .keys['ed25519:${deviceKeys[i].deviceId}'] - .beautified, - style: TextStyle( - color: - Theme.of(context).textTheme.bodyText2.color), - ), - value: deviceKeys[i].verified, - onChanged: (bool newVal) { - if (newVal == true) { - if (deviceKeys[i].blocked) { - deviceKeys[i] - .setBlocked(false, Matrix.of(context).client); + PopupMenuButton( + onSelected: (action) => + onSelected(context, action, deviceKeys[i]), + itemBuilder: (c) { + var items = >[]; + if (deviceKeys[i].blocked || + !deviceKeys[i].verified) { + if (deviceKeys[i].userId == room.client.userID) { + items.add(PopupMenuItem( + child: Text(L10n.of(context).verifyStart), + value: 'verify', + )); + items.add(PopupMenuItem( + child: Text(L10n.of(context).verifyManual), + value: 'verify_manual', + )); + } else { + items.add(PopupMenuItem( + child: Text(L10n.of(context).verifyUser), + value: 'verify_user', + )); } - deviceKeys[i] - .setVerified(true, Matrix.of(context).client); - } else { - if (deviceKeys[i].verified) { - deviceKeys[i].setVerified( - false, Matrix.of(context).client); - } - deviceKeys[i] - .setBlocked(true, Matrix.of(context).client); } - setState(() => null); + if (deviceKeys[i].blocked) { + items.add(PopupMenuItem( + child: Text(L10n.of(context).unblockDevice), + value: 'unblock', + )); + } + if (!deviceKeys[i].blocked) { + items.add(PopupMenuItem( + child: Text(L10n.of(context).blockDevice), + value: 'block', + )); + } + return items; }, + child: ListTile( + title: Text( + "${deviceKeys[i].unsigned["device_display_name"] ?? L10n.of(context).unknownDevice} - ${deviceKeys[i].deviceId}", + style: TextStyle( + color: deviceKeys[i].blocked + ? Colors.red + : deviceKeys[i].verified + ? Colors.green + : Colors.orange), + ), + subtitle: Text( + deviceKeys[i] + .keys['ed25519:${deviceKeys[i].deviceId}'] + .beautified, + style: TextStyle( + color: Theme.of(context) + .textTheme + .bodyText2 + .color), + ), + ), ), ], ), diff --git a/lib/views/chat_list.dart b/lib/views/chat_list.dart index b8617ad..93a78ab 100644 --- a/lib/views/chat_list.dart +++ b/lib/views/chat_list.dart @@ -3,23 +3,20 @@ import 'dart:io'; import 'package:famedlysdk/famedlysdk.dart'; import 'package:famedlysdk/matrix_api.dart'; +import 'package:fluffychat/components/connection_status_header.dart'; import 'package:fluffychat/components/dialogs/simple_dialogs.dart'; import 'package:fluffychat/components/list_items/presence_list_item.dart'; import 'package:fluffychat/components/list_items/public_room_list_item.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_speed_dial/flutter_speed_dial.dart'; import 'package:receive_sharing_intent/receive_sharing_intent.dart'; import 'package:share/share.dart'; - -import '../components/theme_switcher.dart'; import '../components/adaptive_page_layout.dart'; import '../components/list_items/chat_list_item.dart'; import '../components/matrix.dart'; import '../l10n/l10n.dart'; import '../utils/app_route.dart'; import '../utils/url_launcher.dart'; -import '../utils/client_presence_extension.dart'; import 'archive.dart'; import 'homeserver_picker.dart'; import 'new_group.dart'; @@ -55,6 +52,7 @@ class ChatList extends StatefulWidget { class _ChatListState extends State { bool get searchMode => searchController.text?.isNotEmpty ?? false; final TextEditingController searchController = TextEditingController(); + final FocusNode _searchFocusNode = FocusNode(); Timer coolDown; PublicRoomsResponse publicRoomsResponse; bool loadingPublicRooms = false; @@ -140,7 +138,7 @@ class _ChatListState extends State { 'msgtype': 'chat.fluffy.shared_file', 'file': MatrixFile( bytes: file.readAsBytesSync(), - path: file.path, + name: file.path, ), }; } @@ -290,7 +288,7 @@ class _ChatListState extends State { ), ), appBar: AppBar( - elevation: _scrolledToTop ? 0 : null, + //elevation: _scrolledToTop ? 0 : null, leading: selectMode != SelectMode.share ? null : IconButton( @@ -301,31 +299,26 @@ class _ChatListState extends State { titleSpacing: 0, title: selectMode == SelectMode.share ? Text(L10n.of(context).share) - : Container( - padding: EdgeInsets.all(8), - height: 42, - margin: EdgeInsets.only(right: 8), - decoration: BoxDecoration( - color: Theme.of(context).secondaryHeaderColor, - borderRadius: BorderRadius.circular(90), - ), + : Padding( + padding: + EdgeInsets.only(top: 8, bottom: 8, right: 8), child: TextField( autocorrect: false, controller: searchController, + focusNode: _searchFocusNode, decoration: InputDecoration( - suffixIcon: loadingPublicRooms - ? Container( - alignment: Alignment.centerRight, - child: Container( - width: 20, - height: 20, - child: CircularProgressIndicator(), - ), - ) - : Icon(Icons.search), contentPadding: EdgeInsets.all(9), border: InputBorder.none, hintText: L10n.of(context).searchForAChat, + suffixIcon: searchMode + ? IconButton( + icon: Icon(Icons.backspace), + onPressed: () => setState(() { + searchController.clear(); + _searchFocusNode.unfocus(); + }), + ) + : null, ), ), ), @@ -334,39 +327,14 @@ class _ChatListState extends State { (AdaptivePageLayout.columnMode(context) || selectMode == SelectMode.share) ? null - : SpeedDial( + : FloatingActionButton( child: Icon(Icons.add), - overlayColor: blackWhiteColor(context), - foregroundColor: Colors.white, backgroundColor: Theme.of(context).primaryColor, - children: [ - SpeedDialChild( - child: Icon(Icons.people_outline), - foregroundColor: Colors.white, - backgroundColor: Colors.blue, - label: L10n.of(context).createNewGroup, - labelStyle: TextStyle( - fontSize: 18.0, color: Colors.black), - onTap: () => Navigator.of(context) - .pushAndRemoveUntil( - AppRoute.defaultRoute( - context, NewGroupView()), - (r) => r.isFirst), - ), - SpeedDialChild( - child: Icon(Icons.person_add), - foregroundColor: Colors.white, - backgroundColor: Colors.green, - label: L10n.of(context).newPrivateChat, - labelStyle: TextStyle( - fontSize: 18.0, color: Colors.black), - onTap: () => Navigator.of(context) - .pushAndRemoveUntil( - AppRoute.defaultRoute( - context, NewPrivateChatView()), - (r) => r.isFirst), - ), - ], + onPressed: () => Navigator.of(context) + .pushAndRemoveUntil( + AppRoute.defaultRoute( + context, NewPrivateChatView()), + (r) => r.isFirst), ), body: StreamBuilder( stream: Matrix.of(context).client.onSync.stream, @@ -409,50 +377,66 @@ class _ChatListState extends State { (publicRoomsResponse?.chunk?.length ?? 0); final totalCount = rooms.length + publicRoomsCount; + final directChats = + rooms.where((r) => r.isDirectChat).toList(); + final presences = + Matrix.of(context).client.presences; + directChats.sort((a, b) => + presences[b.directChatMatrixID] + ?.presence + ?.statusMsg != + null + ? 1 + : b.lastEvent.originServerTs.compareTo( + a.lastEvent.originServerTs)); return ListView.separated( controller: _scrollController, - separatorBuilder: - (BuildContext context, int i) => - i == totalCount - publicRoomsCount - ? Material( - elevation: 2, - child: ListTile( - title: Text(L10n.of(context) - .publicRooms), - ), - ) - : Container(), + separatorBuilder: (BuildContext context, + int i) => + i == totalCount - publicRoomsCount + ? ListTile( + title: Text( + L10n.of(context).publicRooms + + ':', + style: TextStyle( + fontWeight: FontWeight.bold, + color: Theme.of(context) + .primaryColor, + ), + ), + ) + : Container(), itemCount: totalCount + 1, itemBuilder: (BuildContext context, int i) { if (i == 0) { - return (Matrix.of(context) - .client - .statusList - .isEmpty || - selectMode == SelectMode.share) - ? Container() - : PreferredSize( - preferredSize: - Size.fromHeight(89), - child: Container( - height: 81, - child: ListView.builder( - scrollDirection: - Axis.horizontal, - itemCount: Matrix.of(context) - .client - .statusList - .length, - itemBuilder: (BuildContext - context, - int i) => - PresenceListItem( - Matrix.of(context) - .client - .statusList[i]), + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + ConnectionStatusHeader(), + (directChats.isEmpty || + selectMode == + SelectMode.share) + ? Container() + : PreferredSize( + preferredSize: + Size.fromHeight(90), + child: Container( + height: 82, + child: ListView.builder( + scrollDirection: + Axis.horizontal, + itemCount: + directChats.length, + itemBuilder: (BuildContext + context, + int i) => + PresenceListItem( + directChats[i]), + ), + ), ), - ), - ); + ], + ); } i--; return i < rooms.length diff --git a/lib/views/homeserver_picker.dart b/lib/views/homeserver_picker.dart index 8b83da2..63df5fa 100644 --- a/lib/views/homeserver_picker.dart +++ b/lib/views/homeserver_picker.dart @@ -19,7 +19,8 @@ class _HomeserverPickerState extends State { final homeserver = await SimpleDialogs(context).enterText( titleText: L10n.of(context).enterYourHomeserver, hintText: Matrix.defaultHomeserver, - prefixText: 'https://'); + prefixText: 'https://', + keyboardType: TextInputType.url); if (homeserver?.isEmpty ?? true) return; _checkHomeserverAction(homeserver, context); } @@ -48,6 +49,12 @@ class _HomeserverPickerState extends State { ))); } } else { + + homeserver = homeserver.trim(); + if (homeserver.endsWith('/')) { + homeserver = homeserver.substring(0, homeserver.length - 1); + + } wellknown = await SimpleDialogs(context).tryRequestWithLoadingDialog( Matrix.of(context) .client diff --git a/lib/views/key_verification.dart b/lib/views/key_verification.dart new file mode 100644 index 0000000..d7b6c8b --- /dev/null +++ b/lib/views/key_verification.dart @@ -0,0 +1,343 @@ +import 'package:flutter/material.dart'; +import 'package:famedlysdk/encryption.dart'; +import 'package:famedlysdk/matrix_api.dart'; +import 'chat_list.dart'; +import '../components/adaptive_page_layout.dart'; +import '../components/avatar.dart'; +import '../components/dialogs/simple_dialogs.dart'; +import '../l10n/l10n.dart'; + +class KeyVerificationView extends StatelessWidget { + final KeyVerification request; + + KeyVerificationView({this.request}); + + @override + Widget build(BuildContext context) { + return AdaptivePageLayout( + primaryPage: FocusPage.SECOND, + firstScaffold: ChatList(), + secondScaffold: KeyVerificationPage(request: request), + ); + } +} + +class KeyVerificationPage extends StatefulWidget { + final KeyVerification request; + + KeyVerificationPage({this.request}); + + @override + _KeyVerificationPageState createState() => _KeyVerificationPageState(); +} + +class _KeyVerificationPageState extends State { + void Function() originalOnUpdate; + + @override + void initState() { + originalOnUpdate = widget.request.onUpdate; + widget.request.onUpdate = () { + if (originalOnUpdate != null) { + originalOnUpdate(); + } + setState(() => null); + }; + widget.request.client.getProfileFromUserId(widget.request.userId).then((p) { + profile = p; + setState(() => null); + }); + super.initState(); + } + + @override + void dispose() { + widget.request.onUpdate = + originalOnUpdate; // don't want to get updates anymore + if (![KeyVerificationState.error, KeyVerificationState.done] + .contains(widget.request.state)) { + widget.request.cancel('m.user'); + } + super.dispose(); + } + + Profile profile; + + @override + Widget build(BuildContext context) { + Widget body; + final buttons = []; + switch (widget.request.state) { + case KeyVerificationState.askSSSS: + // prompt the user for their ssss passphrase / key + final textEditingController = TextEditingController(); + String input; + final checkInput = () async { + if (input == null) { + return; + } + SimpleDialogs(context).showLoadingDialog(context); + // make sure the loading spinner shows before we test the keys + await Future.delayed(Duration(milliseconds: 100)); + var valid = false; + try { + await widget.request.openSSSS(recoveryKey: input); + valid = true; + } catch (_) { + try { + await widget.request.openSSSS(passphrase: input); + valid = true; + } catch (_) { + valid = false; + } + } + await Navigator.of(context)?.pop(); + if (!valid) { + await SimpleDialogs(context).inform( + contentText: L10n.of(context).incorrectPassphraseOrKey, + ); + } + }; + body = Container( + margin: EdgeInsets.only(left: 8.0, right: 8.0), + child: Column( + children: [ + Text(L10n.of(context).askSSSSSign, + style: TextStyle(fontSize: 20)), + Container(height: 10), + TextField( + controller: textEditingController, + autofocus: false, + autocorrect: false, + onSubmitted: (s) { + input = s; + checkInput(); + }, + minLines: 1, + maxLines: 1, + obscureText: true, + decoration: InputDecoration( + hintText: L10n.of(context).passphraseOrKey, + prefixStyle: TextStyle(color: Theme.of(context).primaryColor), + suffixStyle: TextStyle(color: Theme.of(context).primaryColor), + border: OutlineInputBorder(), + ), + ), + ], + mainAxisSize: MainAxisSize.min, + ), + ); + buttons.add(RaisedButton( + color: Theme.of(context).primaryColor, + elevation: 5, + textColor: Colors.white, + child: Text(L10n.of(context).submit), + onPressed: () { + input = textEditingController.text; + checkInput(); + }, + )); + buttons.add(RaisedButton( + textColor: Theme.of(context).primaryColor, + elevation: 5, + color: Colors.white, + child: Text(L10n.of(context).skip), + onPressed: () => widget.request.openSSSS(skip: true), + )); + break; + case KeyVerificationState.askAccept: + body = Container( + child: Text( + L10n.of(context).askVerificationRequest(widget.request.userId), + style: TextStyle(fontSize: 20)), + margin: EdgeInsets.only(left: 8.0, right: 8.0), + ); + buttons.add(RaisedButton( + color: Theme.of(context).primaryColor, + elevation: 5, + textColor: Colors.white, + child: Text(L10n.of(context).accept), + onPressed: () => widget.request.acceptVerification(), + )); + buttons.add(RaisedButton( + textColor: Theme.of(context).primaryColor, + elevation: 5, + color: Colors.white, + child: Text(L10n.of(context).reject), + onPressed: () { + widget.request.rejectVerification().then((_) { + Navigator.of(context).pop(); + }); + }, + )); + break; + case KeyVerificationState.waitingAccept: + body = Column( + children: [ + CircularProgressIndicator(), + Container(height: 10), + Text(L10n.of(context).waitingPartnerAcceptRequest), + ], + mainAxisSize: MainAxisSize.min, + ); + break; + case KeyVerificationState.askSas: + TextSpan compareWidget; + // maybe add a button to switch between the two and only determine default + // view for if "emoji" is a present sasType or not? + String compareText; + if (widget.request.sasTypes.contains('emoji')) { + compareText = L10n.of(context).compareEmojiMatch; + compareWidget = TextSpan( + children: widget.request.sasEmojis + .map((e) => WidgetSpan(child: _Emoji(e))) + .toList(), + ); + } else { + compareText = L10n.of(context).compareNumbersMatch; + final numbers = widget.request.sasNumbers; + final numbstr = '${numbers[0]}-${numbers[1]}-${numbers[2]}'; + compareWidget = + TextSpan(text: numbstr, style: TextStyle(fontSize: 40)); + } + body = Column( + children: [ + Container( + child: Text(compareText, style: TextStyle(fontSize: 20)), + margin: EdgeInsets.only(left: 8.0, right: 8.0), + ), + Container(height: 10), + Text.rich( + compareWidget, + textAlign: TextAlign.center, + ), + ], + mainAxisSize: MainAxisSize.min, + ); + buttons.add(RaisedButton( + color: Theme.of(context).primaryColor, + elevation: 5, + textColor: Colors.white, + child: Text(L10n.of(context).theyMatch), + onPressed: () => widget.request.acceptSas(), + )); + buttons.add(RaisedButton( + textColor: Theme.of(context).primaryColor, + elevation: 5, + color: Colors.white, + child: Text(L10n.of(context).theyDontMatch), + onPressed: () => widget.request.rejectSas(), + )); + break; + case KeyVerificationState.waitingSas: + var acceptText = widget.request.sasTypes.contains('emoji') + ? L10n.of(context).waitingPartnerEmoji + : L10n.of(context).waitingPartnerNumbers; + body = Column( + children: [ + CircularProgressIndicator(), + Container(height: 10), + Text(acceptText), + ], + mainAxisSize: MainAxisSize.min, + ); + break; + case KeyVerificationState.done: + body = Column( + children: [ + Icon(Icons.check_circle, color: Colors.green, size: 200.0), + Container(height: 10), + Text(L10n.of(context).verifySuccess), + ], + mainAxisSize: MainAxisSize.min, + ); + buttons.add(RaisedButton( + color: Theme.of(context).primaryColor, + elevation: 5, + textColor: Colors.white, + child: Text(L10n.of(context).close), + onPressed: () => Navigator.of(context).pop(), + )); + break; + case KeyVerificationState.error: + body = Column( + children: [ + Icon(Icons.cancel, color: Colors.red, size: 200.0), + Container(height: 10), + Text( + 'Error ${widget.request.canceledCode}: ${widget.request.canceledReason}'), + ], + mainAxisSize: MainAxisSize.min, + ); + buttons.add(RaisedButton( + color: Theme.of(context).primaryColor, + elevation: 5, + textColor: Colors.white, + child: Text(L10n.of(context).close), + onPressed: () => Navigator.of(context).pop(), + )); + break; + } + body ??= Text('ERROR: Unknown state ' + widget.request.state.toString()); + final otherName = profile?.displayname ?? widget.request.userId; + var bottom; + if (widget.request.deviceId != null) { + final deviceName = widget + .request + .client + .userDeviceKeys[widget.request.userId] + ?.deviceKeys[widget.request.deviceId] + ?.deviceDisplayName ?? + ''; + bottom = PreferredSize( + child: Text('$deviceName (${widget.request.deviceId})', + style: TextStyle(color: Theme.of(context).textTheme.caption.color)), + preferredSize: Size(0.0, 20.0), + ); + } + return Scaffold( + appBar: AppBar( + title: ListTile( + leading: Avatar(profile?.avatarUrl, otherName), + contentPadding: EdgeInsets.zero, + title: Text(L10n.of(context).verifyTitle), + isThreeLine: otherName != widget.request.userId, + subtitle: Column( + children: [ + Text(otherName), + if (otherName != widget.request.userId) + Text(widget.request.userId), + ], + crossAxisAlignment: CrossAxisAlignment.start, + ), + ), + elevation: 0, + bottom: bottom, + ), + extendBody: true, + extendBodyBehindAppBar: true, + body: Center( + child: body, + ), + persistentFooterButtons: buttons.isEmpty ? null : buttons, + ); + } +} + +class _Emoji extends StatelessWidget { + final KeyVerificationEmoji emoji; + + _Emoji(this.emoji); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text(emoji.emoji, style: TextStyle(fontSize: 50)), + Text(emoji.name), + Container(height: 10, width: 5), + ], + ); + } +} diff --git a/lib/views/login.dart b/lib/views/login.dart index b37643a..b4691f7 100644 --- a/lib/views/login.dart +++ b/lib/views/login.dart @@ -67,7 +67,7 @@ class _LoginState extends State { if (!kIsWeb) { try { await FirebaseController.setupFirebase( - matrix.client, + matrix, matrix.widget.clientName, ); } catch (exception) { @@ -174,7 +174,8 @@ class _LoginState extends State { title: TextField( readOnly: loading, autocorrect: false, - autofocus: widget.username != null ? false : true, + autofocus: true, + keyboardType: TextInputType.emailAddress, onChanged: (t) => _checkWellKnownWithCoolDown(t, context), controller: usernameController, decoration: InputDecoration( @@ -231,7 +232,7 @@ class _LoginState extends State { L10n.of(context).login.toUpperCase(), style: TextStyle(color: Colors.white, fontSize: 16), ), - onPressed: () => loading ? null : login(context), + onPressed: loading ? null : () => login(context), ), ), ), diff --git a/lib/views/settings.dart b/lib/views/settings.dart index 4ba98ad..af100fd 100644 --- a/lib/views/settings.dart +++ b/lib/views/settings.dart @@ -1,9 +1,12 @@ +import 'dart:io'; + import 'package:famedlysdk/famedlysdk.dart'; import 'package:fluffychat/components/settings_themes.dart'; import 'package:fluffychat/views/settings_devices.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; +import 'package:memoryfilepicker/memoryfilepicker.dart'; import 'package:url_launcher/url_launcher.dart'; import 'app_info.dart'; @@ -35,6 +38,10 @@ class Settings extends StatefulWidget { class _SettingsState extends State { Future profileFuture; dynamic profile; + Future crossSigningCachedFuture; + bool crossSigningCached; + Future megolmBackupCachedFuture; + bool megolmBackupCached; void logoutAction(BuildContext context) async { if (await SimpleDialogs(context).askConfirmation() == false) { @@ -81,7 +88,7 @@ class _SettingsState extends State { } void setAvatarAction(BuildContext context) async { - final tempFile = await ImagePicker.pickImage( + final tempFile = await MemoryFilePicker.getImage( source: ImageSource.gallery, imageQuality: 50, maxWidth: 1600, @@ -91,8 +98,8 @@ class _SettingsState extends State { final success = await SimpleDialogs(context).tryRequestWithLoadingDialog( matrix.client.setAvatar( MatrixFile( - bytes: await tempFile.readAsBytes(), - path: tempFile.path, + bytes: tempFile.bytes, + name: tempFile.path, ), ), ); @@ -105,9 +112,9 @@ class _SettingsState extends State { } void setWallpaperAction(BuildContext context) async { - final wallpaper = await ImagePicker.pickImage(source: ImageSource.gallery); + final wallpaper = await ImagePicker().getImage(source: ImageSource.gallery); if (wallpaper == null) return; - Matrix.of(context).wallpaper = wallpaper; + Matrix.of(context).wallpaper = File(wallpaper.path); await Matrix.of(context) .store .setItem('chat.fluffy.wallpaper', wallpaper.path); @@ -120,12 +127,65 @@ class _SettingsState extends State { setState(() => null); } + Future requestSSSSCache(BuildContext context) async { + final handle = Matrix.of(context).client.encryption.ssss.open(); + final str = await SimpleDialogs(context).enterText( + titleText: L10n.of(context).askSSSSCache, + hintText: L10n.of(context).passphraseOrKey, + password: true, + ); + if (str != null) { + SimpleDialogs(context).showLoadingDialog(context); + // make sure the loading spinner shows before we test the keys + await Future.delayed(Duration(milliseconds: 100)); + var valid = false; + try { + handle.unlock(recoveryKey: str); + valid = true; + } catch (_) { + try { + handle.unlock(passphrase: str); + valid = true; + } catch (_) { + valid = false; + } + } + await Navigator.of(context)?.pop(); + if (valid) { + await handle.maybeCacheAll(); + await SimpleDialogs(context).inform( + contentText: L10n.of(context).cachedKeys, + ); + setState(() { + crossSigningCachedFuture = null; + crossSigningCached = null; + megolmBackupCachedFuture = null; + megolmBackupCached = null; + }); + } else { + await SimpleDialogs(context).inform( + contentText: L10n.of(context).incorrectPassphraseOrKey, + ); + } + } + } + @override Widget build(BuildContext context) { final client = Matrix.of(context).client; - profileFuture ??= client.ownProfile; - profileFuture.then((p) { + profileFuture ??= client.ownProfile.then((p) { if (mounted) setState(() => profile = p); + return p; + }); + crossSigningCachedFuture ??= + client.encryption.crossSigning.isCached().then((c) { + if (mounted) setState(() => crossSigningCached = c); + return c; + }); + megolmBackupCachedFuture ??= + client.encryption.keyManager.isCached().then((c) { + if (mounted) setState(() => megolmBackupCached = c); + return c; }); return Scaffold( body: NestedScrollView( @@ -283,6 +343,110 @@ class _SettingsState extends State { onTap: () => logoutAction(context), ), Divider(thickness: 1), + ListTile( + title: Text( + L10n.of(context).encryption, + style: TextStyle( + color: Theme.of(context).primaryColor, + fontWeight: FontWeight.bold, + ), + ), + ), + ListTile( + trailing: Icon(Icons.compare_arrows), + title: Text(client.encryption.crossSigning.enabled + ? L10n.of(context).crossSigningEnabled + : L10n.of(context).crossSigningDisabled), + subtitle: client.encryption.crossSigning.enabled + ? Text(client.isUnknownSession + ? L10n.of(context).unknownSessionVerify + : L10n.of(context).sessionVerified + + ', ' + + (crossSigningCached == null + ? '⌛' + : (crossSigningCached + ? L10n.of(context).keysCached + : L10n.of(context).keysMissing))) + : null, + onTap: () async { + if (!client.encryption.crossSigning.enabled) { + await SimpleDialogs(context).inform( + contentText: L10n.of(context).noCrossSignBootstrap, + ); + return; + } + if (client.isUnknownSession) { + final str = await SimpleDialogs(context).enterText( + titleText: L10n.of(context).askSSSSVerify, + hintText: L10n.of(context).passphraseOrKey, + password: true, + ); + if (str != null) { + SimpleDialogs(context).showLoadingDialog(context); + // make sure the loading spinner shows before we test the keys + await Future.delayed(Duration(milliseconds: 100)); + var valid = false; + try { + await client.encryption.crossSigning + .selfSign(recoveryKey: str); + valid = true; + } catch (_) { + try { + await client.encryption.crossSigning + .selfSign(passphrase: str); + valid = true; + } catch (_) { + valid = false; + } + } + await Navigator.of(context)?.pop(); + if (valid) { + await SimpleDialogs(context).inform( + contentText: L10n.of(context).verifiedSession, + ); + setState(() { + crossSigningCachedFuture = null; + crossSigningCached = null; + megolmBackupCachedFuture = null; + megolmBackupCached = null; + }); + } else { + await SimpleDialogs(context).inform( + contentText: L10n.of(context).incorrectPassphraseOrKey, + ); + } + } + } + if (!(await client.encryption.crossSigning.isCached())) { + await requestSSSSCache(context); + } + }, + ), + ListTile( + trailing: Icon(Icons.wb_cloudy), + title: Text(client.encryption.keyManager.enabled + ? L10n.of(context).onlineKeyBackupEnabled + : L10n.of(context).onlineKeyBackupDisabled), + subtitle: client.encryption.keyManager.enabled + ? Text(megolmBackupCached == null + ? '⌛' + : (megolmBackupCached + ? L10n.of(context).keysCached + : L10n.of(context).keysMissing)) + : null, + onTap: () async { + if (!client.encryption.keyManager.enabled) { + await SimpleDialogs(context).inform( + contentText: L10n.of(context).noMegolmBootstrap, + ); + return; + } + if (!(await client.encryption.keyManager.isCached())) { + await requestSSSSCache(context); + } + }, + ), + Divider(thickness: 1), ListTile( title: Text( L10n.of(context).about, diff --git a/lib/views/settings_emotes.dart b/lib/views/settings_emotes.dart index 834f716..8568385 100644 --- a/lib/views/settings_emotes.dart +++ b/lib/views/settings_emotes.dart @@ -4,6 +4,7 @@ import 'package:flutter_advanced_networkimage/provider.dart'; import 'package:famedlysdk/famedlysdk.dart'; import 'package:image_picker/image_picker.dart'; import 'package:bot_toast/bot_toast.dart'; +import 'package:memoryfilepicker/memoryfilepicker.dart'; import 'chat_list.dart'; import '../components/adaptive_page_layout.dart'; @@ -367,20 +368,19 @@ class _EmoteImagePickerState extends State<_EmoteImagePicker> { BotToast.showText(text: L10n.of(context).notSupportedInWeb); return; } - var file = await ImagePicker.pickImage( + var file = await MemoryFilePicker.getImage( source: ImageSource.gallery, imageQuality: 50, maxWidth: 128, maxHeight: 128); if (file == null) return; - final matrixFile = - MatrixFile(bytes: await file.readAsBytes(), path: file.path); + final matrixFile = MatrixFile(bytes: file.bytes, name: file.path); final uploadResp = await SimpleDialogs(context).tryRequestWithLoadingDialog( Matrix.of(context) .client .api - .upload(matrixFile.bytes, matrixFile.path), + .upload(matrixFile.bytes, matrixFile.name), ); setState(() { widget.controller.text = uploadResp; diff --git a/lib/views/sign_up.dart b/lib/views/sign_up.dart index 2764f89..1ee2d5f 100644 --- a/lib/views/sign_up.dart +++ b/lib/views/sign_up.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'dart:math'; import 'package:famedlysdk/famedlysdk.dart'; @@ -10,6 +9,7 @@ import 'package:fluffychat/views/sign_up_password.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; +import 'package:memoryfilepicker/memoryfilepicker.dart'; class SignUp extends StatefulWidget { SignUp({Key key, WellKnownInformations this.wellknown: null}) @@ -25,10 +25,10 @@ class _SignUpState extends State { final TextEditingController usernameController = TextEditingController(); String usernameError; bool loading = false; - File avatar; + MemoryFile avatar; void setAvatarAction() async { - var file = await ImagePicker.pickImage( + var file = await MemoryFilePicker.getImage( source: ImageSource.gallery, maxHeight: 512, maxWidth: 512, @@ -97,7 +97,8 @@ class _SignUpState extends State { children: [ ListTile( leading: CircleAvatar( - backgroundImage: avatar == null ? null : FileImage(avatar), + backgroundImage: + avatar == null ? null : MemoryImage(avatar.bytes), backgroundColor: avatar == null ? Theme.of(context).brightness == Brightness.dark ? Color(0xff121212) @@ -164,7 +165,7 @@ class _SignUpState extends State { L10n.of(context).signUp.toUpperCase(), style: TextStyle(color: Colors.white, fontSize: 16), ), - onPressed: () => loading ? null : signUpAction(context), + onPressed: loading ? null : () => signUpAction(context), ), ), ), diff --git a/lib/views/sign_up_password.dart b/lib/views/sign_up_password.dart index 4ca66af..ed71d1e 100644 --- a/lib/views/sign_up_password.dart +++ b/lib/views/sign_up_password.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'dart:math'; import 'package:famedlysdk/famedlysdk.dart'; @@ -8,11 +7,12 @@ import 'package:fluffychat/utils/app_route.dart'; import 'package:fluffychat/views/auth_web_view.dart'; import 'package:flutter/material.dart'; import 'package:bot_toast/bot_toast.dart'; +import 'package:memoryfilepicker/memoryfilepicker.dart'; import 'chat_list.dart'; class SignUpPassword extends StatefulWidget { - final File avatar; + final MemoryFile avatar; final String username; final String displayname; final WellKnownInformations wellknown; @@ -102,8 +102,8 @@ class _SignUpPasswordState extends State { try { await matrix.client.setAvatar( MatrixFile( - bytes: await widget.avatar.readAsBytes(), - path: widget.avatar.path, + bytes: widget.avatar.bytes, + name: widget.avatar.path, ), ); } catch (exception) { @@ -181,7 +181,7 @@ class _SignUpPasswordState extends State { L10n.of(context).createAccountNow.toUpperCase(), style: TextStyle(color: Colors.white, fontSize: 16), ), - onPressed: () => loading ? null : _signUpAction(context), + onPressed: loading ? null : () => _signUpAction(context), ), ), ), diff --git a/pubspec.lock b/pubspec.lock index cde821b..091d9c2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -29,6 +29,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.6.0" + asn1lib: + dependency: transitive + description: + name: asn1lib + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.4" async: dependency: transitive description: @@ -36,6 +43,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.4.1" + base58check: + dependency: transitive + description: + name: base58check + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" boolean_selector: dependency: transitive description: @@ -127,15 +141,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.3" - encrypted_moor: - dependency: "direct main" + encrypt: + dependency: transitive description: - path: "extras/encryption" - ref: HEAD - resolved-ref: "6f930b011577e5bc8a5e5511691c8fcc43869a1c" - url: "https://github.com/simolus3/moor.git" - source: git - version: "1.0.0" + name: encrypt + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.2" fake_async: dependency: transitive description: @@ -158,12 +170,19 @@ packages: source: hosted version: "0.1.3" file_picker: - dependency: "direct main" + dependency: transitive description: name: file_picker url: "https://pub.dartlang.org" source: hosted - version: "1.4.3+2" + version: "1.12.0" + file_picker_platform_interface: + dependency: transitive + description: + name: file_picker_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" firebase_messaging: dependency: "direct main" description: @@ -222,7 +241,21 @@ packages: name: flutter_matrix_html url: "https://pub.dartlang.org" source: hosted - version: "0.0.8" + version: "0.1.2" + flutter_olm: + dependency: "direct main" + description: + name: flutter_olm + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.8" flutter_secure_storage: dependency: "direct main" description: @@ -244,13 +277,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.1" - flutter_speed_dial: - dependency: "direct main" - description: - name: flutter_speed_dial - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.5" flutter_svg: dependency: transitive description: @@ -325,12 +351,19 @@ packages: source: hosted version: "2.1.12" image_picker: - dependency: "direct main" + dependency: transitive description: name: image_picker url: "https://pub.dartlang.org" source: hosted - version: "0.6.2+3" + version: "0.6.7+2" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" intl: dependency: "direct main" description: @@ -397,12 +430,17 @@ packages: matrix_file_e2ee: dependency: transitive description: - path: "." - ref: "1.x.y" - resolved-ref: "32edeff765369a7a77a0822f4b19302ca24a017b" - url: "https://gitlab.com/famedly/libraries/matrix_file_e2ee.git" - source: git - version: "1.0.3" + name: matrix_file_e2ee + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + memoryfilepicker: + dependency: "direct main" + description: + name: memoryfilepicker + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1" meta: dependency: transitive description: @@ -431,6 +469,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.0.2" + moor_ffi: + dependency: "direct main" + description: + name: moor_ffi + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.0" multi_server_socket: dependency: transitive description: @@ -462,12 +507,10 @@ packages: olm: dependency: transitive description: - path: "." - ref: "1.x.y" - resolved-ref: f66975bd1b5cb1865eba5efe6e3a392aa5e396a5 - url: "https://gitlab.com/famedly/libraries/dart-olm.git" - source: git - version: "1.1.1" + name: olm + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" open_file: dependency: "direct main" description: @@ -489,6 +532,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.10" + password_hash: + dependency: transitive + description: + name: password_hash + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" path: dependency: transitive description: @@ -551,7 +601,7 @@ packages: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" pointycastle: dependency: transitive description: @@ -655,20 +705,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.0" - sqflite_common: - dependency: transitive - description: - name: sqflite_common - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.1" - sqflite_sqlcipher: - dependency: transitive - description: - name: sqflite_sqlcipher - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.0+6" stack_trace: dependency: transitive description: @@ -738,7 +774,7 @@ packages: name: universal_html url: "https://pub.dartlang.org" source: hosted - version: "1.1.12" + version: "1.2.3" universal_io: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 65bcd6b..b6ca7ac 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,7 @@ description: Chat with your friends. # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.14.0+40 +version: 0.15.1+42 environment: sdk: ">=2.6.0 <3.0.0" @@ -29,12 +29,9 @@ dependencies: localstorage: ^3.0.1+4 bubble: ^1.1.9+1 - file_picker: ^1.4.3+2 - image_picker: ^0.6.2+3 - flutter_speed_dial: ^1.2.5 + memoryfilepicker: ^0.1.1 url_launcher: ^5.4.1 url_launcher_web: ^0.1.0 - sqflite: ^1.2.0 flutter_advanced_networkimage: any firebase_messaging: ^6.0.13 flutter_local_notifications: ^1.4.3 @@ -52,20 +49,19 @@ dependencies: open_file: ^3.0.1 mime_type: ^0.3.0 bot_toast: ^3.0.0 - flutter_matrix_html: ^0.0.8 + flutter_matrix_html: ^0.1.1 moor: ^3.0.2 random_string: ^2.0.1 flutter_typeahead: ^1.8.1 + flutter_olm: ^1.0.1 intl: ^0.16.0 intl_translation: ^0.17.9 flutter_localizations: sdk: flutter - encrypted_moor: - git: - url: https://github.com/simolus3/moor.git - path: extras/encryption + moor_ffi: ^0.5.0 # 0.6.0 and up have a bug that it doesn't build with --profile, see https://github.com/simolus3/moor/issues/581 + sqflite: ^1.1.7 # Still used to obtain the database location dev_dependencies: flutter_test: @@ -93,6 +89,7 @@ flutter: # To add assets to your application, add an assets section, like this: assets: - assets/ + - assets/sounds/ - assets/js/ - assets/js/package/ diff --git a/web/sql-wasm.js b/web/sql-wasm.js index f75abd4..c0f637c 100644 --- a/web/sql-wasm.js +++ b/web/sql-wasm.js @@ -19,7 +19,7 @@ var initSqlJs = function (moduleConfig) { return initSqlJsPromise; } // If we're here, we've never called this function before - initSqlJsPromise = new Promise((resolveModule, reject) => { + initSqlJsPromise = new Promise(function (resolveModule, reject) { // We are modularizing this manually because the current modularize setting in Emscripten has some issues: // https://github.com/kripken/emscripten/issues/5820 @@ -66,124 +66,118 @@ var initSqlJs = function (moduleConfig) { // of the options, and has the side effect of reducing emcc's efforts to modify the module if its output were to change in the future. // That's a nice side effect since we're handling the modularization efforts ourselves module = undefined; - + // The emcc-generated code and shell-post.js code goes below, // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort -var aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {}); -var va=function(){var a;var b=h(4);var c={};var d=function(){function a(a,b){this.fb=a;this.db=b;this.nb=1;this.Eb=[]}a.prototype.bind=function(a){if(!this.fb)throw"Statement closed";this.reset();return Array.isArray(a)?this.lc(a):this.mc(a)};a.prototype.step=function(){var a;if(!this.fb)throw"Statement closed";this.nb=1;switch(a=Tb(this.fb)){case c.hc:return!0;case c.DONE:return!1;default:return this.db.handleError(a)}};a.prototype.sc=function(a){null==a&&(a=this.nb++);return Ub(this.fb,a)};a.prototype.tc= -function(a){null==a&&(a=this.nb++);return Vb(this.fb,a)};a.prototype.getBlob=function(a){var b;null==a&&(a=this.nb++);var c=Wb(this.fb,a);var d=Xb(this.fb,a);var e=new Uint8Array(c);for(a=b=0;0<=c?bc;a=0<=c?++b:--b)e[a]=l[d+a];return e};a.prototype.get=function(a){var b,d;null!=a&&this.bind(a)&&this.step();var e=[];a=b=0;for(d=ib(this.fb);0<=d?bd;a=0<=d?++b:--b)switch(Yb(this.fb,a)){case c.fc:case c.FLOAT:e.push(this.sc(a));break;case c.ic:e.push(this.tc(a));break;case c.Zb:e.push(this.getBlob(a)); -break;default:e.push(null)}return e};a.prototype.getColumnNames=function(){var a,b;var c=[];var d=a=0;for(b=ib(this.fb);0<=b?ab;d=0<=b?++a:--a)c.push(Zb(this.fb,d));return c};a.prototype.getAsObject=function(a){var b,c;var d=this.get(a);var e=this.getColumnNames();var g={};a=b=0;for(c=e.length;b>>0);if(null!=a){var c=this.filename,d=c?n("/",c):"/";c=ia(!0,!0);d=ja(d,(void 0!==c?c:438)&4095|32768,0);if(a){if("string"===typeof a){for(var e=Array(a.length),k=0,m=a.length;kc;e=0<=c?++g:--g){var m=q(d+4*e,"i32");var z=jc(m);e=function(){switch(!1){case 1!==z:return kc; -case 2!==z:return lc;case 3!==z:return mc;case 4!==z:return function(a){var b,c;var d=nc(a);var e=oc(a);a=new Uint8Array(d);for(b=c=0;0<=d?cd;b=0<=d?++c:--c)a[b]=l[e+b];return a};default:return function(){return null}}}();e=e(m);k.push(e)}if(c=b.apply(null,k))switch(typeof c){case "number":return pc(a,c);case "string":return qc(a,c,-1,-1)}else return rc(a)});this.handleError(sc(this.db,a,b.length,c.jc,0,d,0,0,0));return this};return a}();var g=f.cwrap("sqlite3_open","number",["string","number"]); -var k=f.cwrap("sqlite3_close_v2","number",["number"]);var m=f.cwrap("sqlite3_exec","number",["number","string","number","number","number"]);f.cwrap("sqlite3_free","",["number"]);var y=f.cwrap("sqlite3_changes","number",["number"]);var z=f.cwrap("sqlite3_prepare_v2","number",["number","string","number","number","number"]);var fa=f.cwrap("sqlite3_prepare_v2","number",["number","number","number","number","number"]);var ca=f.cwrap("sqlite3_bind_text","number",["number","number","number","number","number"]); -var Ia=f.cwrap("sqlite3_bind_blob","number",["number","number","number","number","number"]);var ac=f.cwrap("sqlite3_bind_double","number",["number","number","number"]);var $b=f.cwrap("sqlite3_bind_int","number",["number","number","number"]);var bc=f.cwrap("sqlite3_bind_parameter_index","number",["number","string"]);var Tb=f.cwrap("sqlite3_step","number",["number"]);var hc=f.cwrap("sqlite3_errmsg","string",["number"]);var ib=f.cwrap("sqlite3_data_count","number",["number"]);var Ub=f.cwrap("sqlite3_column_double", -"number",["number","number"]);var Vb=f.cwrap("sqlite3_column_text","string",["number","number"]);var Xb=f.cwrap("sqlite3_column_blob","number",["number","number"]);var Wb=f.cwrap("sqlite3_column_bytes","number",["number","number"]);var Yb=f.cwrap("sqlite3_column_type","number",["number","number"]);var Zb=f.cwrap("sqlite3_column_name","string",["number","number"]);var dc=f.cwrap("sqlite3_reset","number",["number"]);var cc=f.cwrap("sqlite3_clear_bindings","number",["number"]);var ec=f.cwrap("sqlite3_finalize", -"number",["number"]);var sc=f.cwrap("sqlite3_create_function_v2","number","number string number number number number number number number".split(" "));var jc=f.cwrap("sqlite3_value_type","number",["number"]);var nc=f.cwrap("sqlite3_value_bytes","number",["number"]);var mc=f.cwrap("sqlite3_value_text","string",["number"]);var kc=f.cwrap("sqlite3_value_int","number",["number"]);var oc=f.cwrap("sqlite3_value_blob","number",["number"]);var lc=f.cwrap("sqlite3_value_double","number",["number"]);var pc= -f.cwrap("sqlite3_result_double","",["number","number"]);var rc=f.cwrap("sqlite3_result_null","",["number"]);var qc=f.cwrap("sqlite3_result_text","",["number","string","number","number"]);var fc=f.cwrap("RegisterExtensionFunctions","number",["number"]);this.SQL={Database:e};for(a in this.SQL)f[a]=this.SQL[a];var da=0;c.xb=0;c.we=1;c.Pe=2;c.Ze=3;c.Cc=4;c.Ec=5;c.Se=6;c.NOMEM=7;c.bf=8;c.Qe=9;c.Re=10;c.Hc=11;c.NOTFOUND=12;c.Oe=13;c.Fc=14;c.$e=15;c.EMPTY=16;c.cf=17;c.df=18;c.Gc=19;c.Te=20;c.Ue=21;c.Ve= -22;c.Dc=23;c.Ne=24;c.af=25;c.We=26;c.Xe=27;c.ef=28;c.hc=100;c.DONE=101;c.fc=1;c.FLOAT=2;c.ic=3;c.Zb=4;c.Ye=5;c.jc=1}.bind(this);f.preRun=f.preRun||[];f.preRun.push(va);var wa={},u;for(u in f)f.hasOwnProperty(u)&&(wa[u]=f[u]);f.arguments=[];f.thisProgram="./this.program";f.quit=function(a,b){throw b;};f.preRun=[];f.postRun=[];var v=!1,w=!1,x=!1,xa=!1;v="object"===typeof window;w="function"===typeof importScripts;x="object"===typeof process&&"function"===typeof require&&!v&&!w;xa=!v&&!x&&!w;var A=""; -if(x){A=__dirname+"/";var ya,za;f.read=function(a,b){ya||(ya=require("fs"));za||(za=require("path"));a=za.normalize(a);a=ya.readFileSync(a);return b?a:a.toString()};f.readBinary=function(a){a=f.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1>2];a=b+a+15&-16;if(a<=Da())D[Ca>>2]=a;else if(!Ea(a))return 0;return b} -var Fa={"f64-rem":function(a,b){return a%b},"debugger":function(){debugger}},Ga=1,E=Array(64);function ua(a){for(var b=0;64>b;b++)if(!E[b])return E[b]=a,Ga+b;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.";}"object"!==typeof WebAssembly&&C("no native wasm support detected"); -function q(a,b){b=b||"i8";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":return l[a>>0];case "i8":return l[a>>0];case "i16":return Ha[a>>1];case "i32":return D[a>>2];case "i64":return D[a>>2];case "float":return Ja[a>>2];case "double":return Ka[a>>3];default:B("invalid type for getValue: "+b)}return null}var La,Ma=!1;function assert(a,b){a||B("Assertion failed: "+b)}function Na(a){var b=f["_"+a];assert(b,"Cannot call unknown function "+a+", make sure it is exported");return b} -function Oa(a,b,c,d){var e={string:function(a){var b=0;if(null!==a&&void 0!==a&&0!==a){var c=(a.length<<2)+1;b=h(c);r(a,F,b,c)}return b},array:function(a){var b=h(a.length);l.set(a,b);return b}},g=Na(a),k=[];a=0;if(d)for(var m=0;m>0]=0;break;case "i8":l[a>>0]=0;break;case "i16":Ha[a>>1]=0;break;case "i32":D[a>>2]=0;break;case "i64":aa=[0,1<=+Pa(0)?~~+Qa(0)>>>0:0];D[a>>2]=aa[0];D[a+4>>2]=aa[1];break;case "float":Ja[a>>2]=0;break;case "double":Ka[a>>3]=0;break;default:B("invalid type for setValue: "+b)}}var Ra=0,Sa=3; -function ea(a){var b=Ra;if("number"===typeof a){var c=!0;var d=a}else c=!1,d=a.length;b=b==Sa?e:[Ta,h,Ba][b](Math.max(d,1));if(c){var e=b;assert(0==(b&3));for(a=b+(d&-4);e>2]=0;for(a=b+d;e>0]=0;return b}a.subarray||a.slice?F.set(a,b):F.set(new Uint8Array(a),b);return b}var Ua="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0; -function t(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function G(a){return a?t(F,a,void 0):""} -function r(a,b,c,d){if(!(0=k){var m=a.charCodeAt(++g);k=65536+((k&1023)<<10)|m&1023}if(127>=k){if(c>=d)break;b[c++]=k}else{if(2047>=k){if(c+1>=d)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++]=224|k>>12}else{if(c+3>=d)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-e} -function oa(a){for(var b=0,c=0;c=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");function Va(a){return a.replace(/__Z[\w\d_]+/g,function(a){return a===a?a:a+" ["+a+"]"})}function Wa(a){0Ya&&C("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+Ya+"! (TOTAL_STACK=5242880)"); -f.buffer?buffer=f.buffer:"object"===typeof WebAssembly&&"function"===typeof WebAssembly.Memory?(La=new WebAssembly.Memory({initial:Ya/65536}),buffer=La.buffer):buffer=new ArrayBuffer(Ya);Xa();D[Ca>>2]=5303264;function Za(a){for(;0>2];var c=D[b>>2]}else ob.rb=!0,J.USER=J.LOGNAME="web_user",J.PATH="/",J.PWD="/",J.HOME="/home/web_user",J.LANG="C.UTF-8",J._=f.thisProgram,c=db?Ta(1024):Ba(1024),b=db?Ta(256):Ba(256),D[b>>2]=c,D[a>>2]=b;a=[];var d=0,e;for(e in J)if("string"===typeof J[e]){var g=e+"="+J[e];a.push(g);d+=g.length}if(1024>0]=d.charCodeAt(m);l[k>>0]=0;D[b+ -4*e>>2]=c;c+=g.length+1}D[b+4*a.length>>2]=0}function pb(a){f.___errno_location&&(D[f.___errno_location()>>2]=a);return a}function qb(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a}function rb(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);(a=qb(a.split("/").filter(function(a){return!!a}),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a} -function sb(a){var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&(b=b.substr(0,b.length-1));return a+b}function tb(a){if("/"===a)return"/";var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)}function ub(){var a=Array.prototype.slice.call(arguments,0);return rb(a.join("/"))}function n(a,b){return rb(a+"/"+b)} -function vb(){for(var a="",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:"/";if("string"!==typeof b)throw new TypeError("Arguments to path.resolve must be strings");if(!b)return"";a=b+"/"+a;b="/"===b.charAt(0)}a=qb(a.split("/").filter(function(a){return!!a}),!b).join("/");return(b?"/":"")+a||"."}var wb=[];function xb(a,b){wb[a]={input:[],output:[],ub:b};yb(a,zb)} -var zb={open:function(a){var b=wb[a.node.rdev];if(!b)throw new K(L.Cb);a.tty=b;a.seekable=!1},close:function(a){a.tty.ub.flush(a.tty)},flush:function(a){a.tty.ub.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.ub.Xb)throw new K(L.Ob);for(var e=0,g=0;g=b||(b=Math.max(b,c*(1048576>c?2:1.125)|0),0!=c&&(b=Math.max(b,256)),c=a.bb,a.bb=new Uint8Array(b),0b)a.bb.length=b;else for(;a.bb.length=a.node.gb)return 0;a=Math.min(a.node.gb-e,d);if(8b)throw new K(L.ib);return b},Pb:function(a,b,c){M.Tb(a.node,b+c);a.node.gb=Math.max(a.node.gb,b+c)},zb:function(a,b,c,d,e,g,k){if(32768!== -(a.node.mode&61440))throw new K(L.Cb);c=a.node.bb;if(k&2||c.buffer!==b&&c.buffer!==b.buffer){if(0>2)}catch(c){if(!c.code)throw c; -throw new K(L[c.code]);}return b.mode},kb:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.jb.Hb.root);b.reverse();return ub.apply(null,b)},qc:function(a){a&=-2656257;var b=0,c;for(c in P.Ub)a&c&&(b|=P.Ub[c],a^=c);if(a)throw new K(L.ib);return b},ab:{lb:function(a){a=P.kb(a);try{var b=fs.lstatSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}P.yb&&!b.pb&&(b.pb=4096);P.yb&&!b.blocks&&(b.blocks=(b.size+b.pb-1)/b.pb|0);return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink, -uid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,pb:b.pb,blocks:b.blocks}},hb:function(a,b){var c=P.kb(a);try{void 0!==b.mode&&(fs.chmodSync(c,b.mode),a.mode=b.mode),void 0!==b.size&&fs.truncateSync(c,b.size)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},lookup:function(a,b){var c=n(P.kb(a),b);c=P.Wb(c);return P.createNode(a,b,c)},vb:function(a,b,c,d){a=P.createNode(a,b,c,d);b=P.kb(a);try{N(a.mode)?fs.mkdirSync(b,a.mode):fs.writeFileSync(b,"",{mode:a.mode})}catch(e){if(!e.code)throw e; -throw new K(L[e.code]);}return a},rename:function(a,b,c){a=P.kb(a);b=n(P.kb(b),c);try{fs.renameSync(a,b)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},unlink:function(a,b){a=n(P.kb(a),b);try{fs.unlinkSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},rmdir:function(a,b){a=n(P.kb(a),b);try{fs.rmdirSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},readdir:function(a){a=P.kb(a);try{return fs.readdirSync(a)}catch(b){if(!b.code)throw b;throw new K(L[b.code]);}},symlink:function(a, -b,c){a=n(P.kb(a),b);try{fs.symlinkSync(c,a)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},readlink:function(a){var b=P.kb(a);try{return b=fs.readlinkSync(b),b=Fb.relative(Fb.resolve(a.jb.Hb.root),b)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}}},cb:{open:function(a){var b=P.kb(a.node);try{32768===(a.node.mode&61440)&&(a.wb=fs.openSync(b,P.qc(a.flags)))}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},close:function(a){try{32768===(a.node.mode&61440)&&a.wb&&fs.closeSync(a.wb)}catch(b){if(!b.code)throw b; -throw new K(L[b.code]);}},read:function(a,b,c,d,e){if(0===d)return 0;try{return fs.readSync(a.wb,P.Rb(b.buffer),c,d,e)}catch(g){throw new K(L[g.code]);}},write:function(a,b,c,d,e){try{return fs.writeSync(a.wb,P.Rb(b.buffer),c,d,e)}catch(g){throw new K(L[g.code]);}},ob:function(a,b,c){if(1===c)b+=a.position;else if(2===c&&32768===(a.node.mode&61440))try{b+=fs.fstatSync(a.wb).size}catch(d){throw new K(L[d.code]);}if(0>b)throw new K(L.ib);return b}}},Gb=null,Hb={},Q=[],Ib=1,R=null,Jb=!0,S={},K=null, -Eb={};function T(a,b){a=vb("/",a);b=b||{};if(!a)return{path:"",node:null};var c={Vb:!0,Jb:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8>>0)%R.length}function Nb(a){var b=Mb(a.parent.id,a.name);a.tb=R[b];R[b]=a}function Ob(a){var b=Mb(a.parent.id,a.name);if(R[b]===a)R[b]=a.tb;else for(b=R[b];b;){if(b.tb===a){b.tb=a.tb;break}b=b.tb}} -function O(a,b){var c;if(c=(c=Pb(a,"x"))?c:a.ab.lookup?0:13)throw new K(c,a);for(c=R[Mb(a.id,b)];c;c=c.tb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ab.lookup(a,b)} -function Db(a,b,c,d){Qb||(Qb=function(a,b,c,d){a||(a=this);this.parent=a;this.jb=a.jb;this.sb=null;this.id=Ib++;this.name=b;this.mode=c;this.ab={};this.cb={};this.rdev=d},Qb.prototype={},Object.defineProperties(Qb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}}));a=new Qb(a,b,c,d);Nb(a);return a} -function N(a){return 16384===(a&61440)}var Rb={r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218};function ic(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Pb(a,b){if(Jb)return 0;if(-1===b.indexOf("r")||a.mode&292){if(-1!==b.indexOf("w")&&!(a.mode&146)||-1!==b.indexOf("x")&&!(a.mode&73))return 13}else return 13;return 0}function tc(a,b){try{return O(a,b),17}catch(c){}return Pb(a,"wx")} -function uc(a,b,c){try{var d=O(a,b)}catch(e){return e.eb}if(a=Pb(a,"wx"))return a;if(c){if(!N(d.mode))return 20;if(d===d.parent||"/"===Lb(d))return 16}else if(N(d.mode))return 21;return 0}function vc(a){var b=4096;for(a=a||0;a<=b;a++)if(!Q[a])return a;throw new K(24);} -function wc(a,b){xc||(xc=function(){},xc.prototype={},Object.defineProperties(xc.prototype,{object:{get:function(){return this.node},set:function(a){this.node=a}}}));var c=new xc,d;for(d in a)c[d]=a[d];a=c;b=vc(b);a.fd=b;return Q[b]=a}var Cb={open:function(a){a.cb=Hb[a.node.rdev].cb;a.cb.open&&a.cb.open(a)},ob:function(){throw new K(29);}};function yb(a,b){Hb[a]={cb:b}} -function yc(a,b){var c="/"===b,d=!b;if(c&&Gb)throw new K(16);if(!c&&!d){var e=T(b,{Vb:!1});b=e.path;e=e.node;if(e.sb)throw new K(16);if(!N(e.mode))throw new K(20);}b={type:a,Hb:{},Yb:b,wc:[]};a=a.jb(b);a.jb=b;b.root=a;c?Gb=a:e&&(e.sb=b,e.jb&&e.jb.wc.push(b))}function ja(a,b,c){var d=T(a,{parent:!0}).node;a=tb(a);if(!a||"."===a||".."===a)throw new K(22);var e=tc(d,a);if(e)throw new K(e);if(!d.ab.vb)throw new K(1);return d.ab.vb(d,a,b,c)}function U(a,b){ja(a,(void 0!==b?b:511)&1023|16384,0)} -function zc(a,b,c){"undefined"===typeof c&&(c=b,b=438);ja(a,b|8192,c)}function Ac(a,b){if(!vb(a))throw new K(2);var c=T(b,{parent:!0}).node;if(!c)throw new K(2);b=tb(b);var d=tc(c,b);if(d)throw new K(d);if(!c.ab.symlink)throw new K(1);c.ab.symlink(c,b,a)} -function ta(a){var b=T(a,{parent:!0}).node,c=tb(a),d=O(b,c),e=uc(b,c,!1);if(e)throw new K(e);if(!b.ab.unlink)throw new K(1);if(d.sb)throw new K(16);try{S.willDeletePath&&S.willDeletePath(a)}catch(g){console.log("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.ab.unlink(b,c);Ob(d);try{if(S.onDeletePath)S.onDeletePath(a)}catch(g){console.log("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+g.message)}} -function Kb(a){a=T(a).node;if(!a)throw new K(2);if(!a.ab.readlink)throw new K(22);return vb(Lb(a.parent),a.ab.readlink(a))}function ra(a,b){a=T(a,{qb:!b}).node;if(!a)throw new K(2);if(!a.ab.lb)throw new K(1);return a.ab.lb(a)}function Bc(a){return ra(a,!0)}function ka(a,b){var c;"string"===typeof a?c=T(a,{qb:!0}).node:c=a;if(!c.ab.hb)throw new K(1);c.ab.hb(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})} -function Cc(a){var b;"string"===typeof a?b=T(a,{qb:!0}).node:b=a;if(!b.ab.hb)throw new K(1);b.ab.hb(b,{timestamp:Date.now()})}function Dc(a,b){if(0>b)throw new K(22);var c;"string"===typeof a?c=T(a,{qb:!0}).node:c=a;if(!c.ab.hb)throw new K(1);if(N(c.mode))throw new K(21);if(32768!==(c.mode&61440))throw new K(22);if(a=Pb(c,"w"))throw new K(a);c.ab.hb(c,{size:b,timestamp:Date.now()})} -function p(a,b,c,d){if(""===a)throw new K(2);if("string"===typeof b){var e=Rb[b];if("undefined"===typeof e)throw Error("Unknown file open mode: "+b);b=e}c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var g=a;else{a=rb(a);try{g=T(a,{qb:!(b&131072)}).node}catch(k){}}e=!1;if(b&64)if(g){if(b&128)throw new K(17);}else g=ja(a,c,0),e=!0;if(!g)throw new K(2);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!N(g.mode))throw new K(20);if(!e&&(c=g?40960===(g.mode&61440)?40:N(g.mode)&& -("r"!==ic(b)||b&512)?21:Pb(g,ic(b)):2))throw new K(c);b&512&&Dc(g,0);b&=-641;d=wc({node:g,path:Lb(g),flags:b,seekable:!0,position:0,cb:g.cb,Bc:[],error:!1},d);d.cb.open&&d.cb.open(d);!f.logReadFiles||b&1||(Ec||(Ec={}),a in Ec||(Ec[a]=1,console.log("FS.trackingDelegate error on read file: "+a)));try{S.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),S.onOpenFile(a,g))}catch(k){console.log("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+k.message)}return d} -function ma(a){if(null===a.fd)throw new K(9);a.Gb&&(a.Gb=null);try{a.cb.close&&a.cb.close(a)}catch(b){throw b;}finally{Q[a.fd]=null}a.fd=null}function Fc(a,b,c){if(null===a.fd)throw new K(9);if(!a.seekable||!a.cb.ob)throw new K(29);if(0!=c&&1!=c&&2!=c)throw new K(22);a.position=a.cb.ob(a,b,c);a.Bc=[]} -function sa(a,b,c,d,e){if(0>d||0>e)throw new K(22);if(null===a.fd)throw new K(9);if(1===(a.flags&2097155))throw new K(9);if(N(a.node.mode))throw new K(21);if(!a.cb.read)throw new K(22);var g="undefined"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new K(29);b=a.cb.read(a,b,c,d,e);g||(a.position+=b);return b} -function la(a,b,c,d,e,g){if(0>d||0>e)throw new K(22);if(null===a.fd)throw new K(9);if(0===(a.flags&2097155))throw new K(9);if(N(a.node.mode))throw new K(21);if(!a.cb.write)throw new K(22);a.flags&1024&&Fc(a,0,2);var k="undefined"!==typeof e;if(!k)e=a.position;else if(!a.seekable)throw new K(29);b=a.cb.write(a,b,c,d,e,g);k||(a.position+=b);try{if(a.path&&S.onWriteToFile)S.onWriteToFile(a.path)}catch(m){console.log("FS.trackingDelegate['onWriteToFile']('"+a.path+"') threw an exception: "+m.message)}return b} -function Gc(){K||(K=function(a,b){this.node=b;this.zc=function(a){this.eb=a};this.zc(a);this.message="FS error";this.stack&&Object.defineProperty(this,"stack",{value:Error().stack,writable:!0})},K.prototype=Error(),K.prototype.constructor=K,[2].forEach(function(a){Eb[a]=new K(a);Eb[a].stack=""}))}var Hc;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c} -function Ic(a,b,c){a=n("/dev",a);var d=ia(!!b,!!c);Jc||(Jc=64);var e=Jc++<<8|0;yb(e,{open:function(a){a.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(a,c,d,e){for(var g=0,k=0;k>2]=d.dev;D[c+4>>2]=0;D[c+8>>2]=d.ino;D[c+12>>2]=d.mode;D[c+16>>2]=d.nlink;D[c+20>>2]=d.uid;D[c+24>>2]=d.gid;D[c+28>>2]=d.rdev;D[c+32>>2]=0;D[c+36>>2]=d.size;D[c+40>>2]=4096;D[c+44>>2]=d.blocks;D[c+48>>2]=d.atime.getTime()/1E3|0;D[c+52>>2]=0;D[c+56>>2]=d.mtime.getTime()/1E3|0;D[c+60>>2]=0;D[c+64>>2]=d.ctime.getTime()/1E3|0;D[c+68>>2]=0;D[c+72>>2]=d.ino;return 0}var W=0; -function X(){W+=4;return D[W-4>>2]}function Y(){return G(X())}function Z(){var a=Q[X()];if(!a)throw new K(L.Kb);return a}function Da(){return l.length}function Ea(a){if(2147418112=b?b=Wa(2*b):b=Math.min(Wa((3*b+2147483648)/4),2147418112);a=Wa(b);var c=buffer.byteLength;try{var d=-1!==La.grow((a-c)/65536)?buffer=La.buffer:null}catch(e){d=null}if(!d||d.byteLength!=b)return!1;Xa();return!0} -function Mc(a){if(0===a)return 0;a=G(a);if(!J.hasOwnProperty(a))return 0;Mc.rb&&ha(Mc.rb);a=J[a];var b=oa(a)+1,c=Ta(b);c&&r(a,l,c,b);Mc.rb=c;return Mc.rb}r("GMT",F,60272,4); -function Nc(){function a(a){return(a=a.toTimeString().match(/\(([A-Za-z ]+)\)$/))?a[1]:"GMT"}if(!Oc){Oc=!0;D[Pc()>>2]=60*(new Date).getTimezoneOffset();var b=new Date(2E3,0,1),c=new Date(2E3,6,1);D[Qc()>>2]=Number(b.getTimezoneOffset()!=c.getTimezoneOffset());var d=a(b),e=a(c);d=ea(ba(d));e=ea(ba(e));c.getTimezoneOffset()>2]=d,D[Rc()+4>>2]=e):(D[Rc()>>2]=e,D[Rc()+4>>2]=d)}}var Oc; -function Sc(a){a/=1E3;if((v||w)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b>2]=c.position;c.Gb&&0===d&&0===g&&(c.Gb=null);return 0}catch(k){return"undefined"!==typeof V&&k instanceof K||B(k),-k.eb}},ca:function(a,b){W=b;try{var c=Y(),d=X();ka(c,d);return 0}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},ba:function(a,b){W=b;try{var c=X(),d=X();if(0===d)return-L.ib;if(dd?-L.ib:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0; -case 3:return c.flags;case 4:return d=X(),c.flags|=d,0;case 12:return d=X(),Ha[d+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-L.ib;case 9:return pb(L.ib),-1;default:return-L.ib}}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},U:function(a,b){W=b;try{var c=Z(),d=X(),e=X();return sa(c,l,d,e)}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},T:function(a,b){W=b;try{var c=Y();var d=X();if(d&-8)var e=-L.ib;else{var g=T(c,{qb:!0}).node;a="";d&4&&(a+="r"); -d&2&&(a+="w");d&1&&(a+="x");e=a&&Pb(g,a)?-L.$b:0}return e}catch(k){return"undefined"!==typeof V&&k instanceof K||B(k),-k.eb}},S:function(a,b){W=b;try{var c=Y(),d=X();a=c;a=rb(a);"/"===a[a.length-1]&&(a=a.substr(0,a.length-1));U(a,d);return 0}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},R:function(a,b){W=b;try{var c=Z(),d=X(),e=X();return la(c,l,d,e)}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},Q:function(a,b){W=b;try{var c=Y(),d=T(c,{parent:!0}).node, -e=tb(c),g=O(d,e),k=uc(d,e,!0);if(k)throw new K(k);if(!d.ab.rmdir)throw new K(1);if(g.sb)throw new K(16);try{S.willDeletePath&&S.willDeletePath(c)}catch(m){console.log("FS.trackingDelegate['willDeletePath']('"+c+"') threw an exception: "+m.message)}d.ab.rmdir(d,e);Ob(g);try{if(S.onDeletePath)S.onDeletePath(c)}catch(m){console.log("FS.trackingDelegate['onDeletePath']('"+c+"') threw an exception: "+m.message)}return 0}catch(m){return"undefined"!==typeof V&&m instanceof K||B(m),-m.eb}},P:function(a,b){W= -b;try{var c=Y(),d=X(),e=X();return p(c,d,e).fd}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},s:function(a,b){W=b;try{var c=Z();ma(c);return 0}catch(d){return"undefined"!==typeof V&&d instanceof K||B(d),-d.eb}},O:function(a,b){W=b;try{var c=Y(),d=X();var e=X();if(0>=e)var g=-L.ib;else{var k=Kb(c),m=Math.min(e,oa(k)),y=l[d+m];r(k,F,d,e+1);l[d+m]=y;g=m}return g}catch(z){return"undefined"!==typeof V&&z instanceof K||B(z),-z.eb}},N:function(a,b){W=b;try{var c=X(),d=X(),e=Kc[c];if(!e)return 0; -if(d===e.uc){var g=Q[e.fd],k=e.flags,m=new Uint8Array(F.subarray(c,c+d));g&&g.cb.Ab&&g.cb.Ab(g,m,0,d,k);Kc[c]=null;e.Db&&ha(e.vc)}return 0}catch(y){return"undefined"!==typeof V&&y instanceof K||B(y),-y.eb}},M:function(a,b){W=b;try{var c=X(),d=X(),e=Q[c];if(!e)throw new K(9);ka(e.node,d);return 0}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},L:Da,K:function(a,b,c){F.set(F.subarray(b,b+c),a)},J:Ea,r:Mc,q:function(a){var b=Date.now();D[a>>2]=b/1E3|0;D[a+4>>2]=b%1E3*1E3|0;return 0}, -I:function(a){return Math.log(a)/Math.LN10},p:function(){B("trap!")},H:function(a){Nc();a=new Date(1E3*D[a>>2]);D[15056]=a.getSeconds();D[15057]=a.getMinutes();D[15058]=a.getHours();D[15059]=a.getDate();D[15060]=a.getMonth();D[15061]=a.getFullYear()-1900;D[15062]=a.getDay();var b=new Date(a.getFullYear(),0,1);D[15063]=(a.getTime()-b.getTime())/864E5|0;D[15065]=-(60*a.getTimezoneOffset());var c=(new Date(2E3,6,1)).getTimezoneOffset();b=b.getTimezoneOffset();a=(c!=b&&a.getTimezoneOffset()==Math.min(b, -c))|0;D[15064]=a;a=D[Rc()+(a?4:0)>>2];D[15066]=a;return 60224},G:function(a,b){var c=D[a>>2];a=D[a+4>>2];0!==b&&(D[b>>2]=0,D[b+4>>2]=0);return Sc(1E6*c+a/1E3)},F:function(a){switch(a){case 30:return 16384;case 85:return 131068;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809; -case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32; -case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}pb(22);return-1}, -E:function(a){var b=Date.now()/1E3|0;a&&(D[a>>2]=b);return b},D:function(a,b){if(b){var c=1E3*D[b+8>>2];c+=D[b+12>>2]/1E3}else c=Date.now();a=G(a);try{b=c;var d=T(a,{qb:!0}).node;d.ab.hb(d,{timestamp:Math.max(b,c)});return 0}catch(e){a=e;if(!(a instanceof K)){a+=" : ";a:{d=Error();if(!d.stack){try{throw Error(0);}catch(g){d=g}if(!d.stack){d="(no stack trace available)";break a}}d=d.stack.toString()}f.extraStackTrace&&(d+="\n"+f.extraStackTrace());d=Va(d);throw a+d;}pb(a.eb);return-1}},C:function(){B("OOM")}, -a:Ca},buffer);f.asm=Vc;f._RegisterExtensionFunctions=function(){return f.asm.ha.apply(null,arguments)};var nb=f.___emscripten_environ_constructor=function(){return f.asm.ia.apply(null,arguments)};f.___errno_location=function(){return f.asm.ja.apply(null,arguments)}; -var Qc=f.__get_daylight=function(){return f.asm.ka.apply(null,arguments)},Pc=f.__get_timezone=function(){return f.asm.la.apply(null,arguments)},Rc=f.__get_tzname=function(){return f.asm.ma.apply(null,arguments)},ha=f._free=function(){return f.asm.na.apply(null,arguments)},Ta=f._malloc=function(){return f.asm.oa.apply(null,arguments)},Tc=f._memalign=function(){return f.asm.pa.apply(null,arguments)},Uc=f._memset=function(){return f.asm.qa.apply(null,arguments)}; -f._sqlite3_bind_blob=function(){return f.asm.ra.apply(null,arguments)};f._sqlite3_bind_double=function(){return f.asm.sa.apply(null,arguments)};f._sqlite3_bind_int=function(){return f.asm.ta.apply(null,arguments)};f._sqlite3_bind_parameter_index=function(){return f.asm.ua.apply(null,arguments)};f._sqlite3_bind_text=function(){return f.asm.va.apply(null,arguments)};f._sqlite3_changes=function(){return f.asm.wa.apply(null,arguments)};f._sqlite3_clear_bindings=function(){return f.asm.xa.apply(null,arguments)}; -f._sqlite3_close_v2=function(){return f.asm.ya.apply(null,arguments)};f._sqlite3_column_blob=function(){return f.asm.za.apply(null,arguments)};f._sqlite3_column_bytes=function(){return f.asm.Aa.apply(null,arguments)};f._sqlite3_column_double=function(){return f.asm.Ba.apply(null,arguments)};f._sqlite3_column_name=function(){return f.asm.Ca.apply(null,arguments)};f._sqlite3_column_text=function(){return f.asm.Da.apply(null,arguments)};f._sqlite3_column_type=function(){return f.asm.Ea.apply(null,arguments)}; -f._sqlite3_create_function_v2=function(){return f.asm.Fa.apply(null,arguments)};f._sqlite3_data_count=function(){return f.asm.Ga.apply(null,arguments)};f._sqlite3_errmsg=function(){return f.asm.Ha.apply(null,arguments)};f._sqlite3_exec=function(){return f.asm.Ia.apply(null,arguments)};f._sqlite3_finalize=function(){return f.asm.Ja.apply(null,arguments)};f._sqlite3_free=function(){return f.asm.Ka.apply(null,arguments)};f._sqlite3_open=function(){return f.asm.La.apply(null,arguments)}; -f._sqlite3_prepare_v2=function(){return f.asm.Ma.apply(null,arguments)};f._sqlite3_reset=function(){return f.asm.Na.apply(null,arguments)};f._sqlite3_result_double=function(){return f.asm.Oa.apply(null,arguments)};f._sqlite3_result_null=function(){return f.asm.Pa.apply(null,arguments)};f._sqlite3_result_text=function(){return f.asm.Qa.apply(null,arguments)};f._sqlite3_step=function(){return f.asm.Ra.apply(null,arguments)};f._sqlite3_value_blob=function(){return f.asm.Sa.apply(null,arguments)}; -f._sqlite3_value_bytes=function(){return f.asm.Ta.apply(null,arguments)};f._sqlite3_value_double=function(){return f.asm.Ua.apply(null,arguments)};f._sqlite3_value_int=function(){return f.asm.Va.apply(null,arguments)};f._sqlite3_value_text=function(){return f.asm.Wa.apply(null,arguments)};f._sqlite3_value_type=function(){return f.asm.Xa.apply(null,arguments)}; -var h=f.stackAlloc=function(){return f.asm.Za.apply(null,arguments)},qa=f.stackRestore=function(){return f.asm._a.apply(null,arguments)},na=f.stackSave=function(){return f.asm.$a.apply(null,arguments)};f.dynCall_vi=function(){return f.asm.Ya.apply(null,arguments)};f.asm=Vc;f.cwrap=function(a,b,c,d){c=c||[];var e=c.every(function(a){return"number"===a});return"string"!==b&&e&&!d?Na(a):function(){return Oa(a,b,c,arguments)}};f.stackSave=na;f.stackRestore=qa;f.stackAlloc=h; -function Wc(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Wc.prototype=Error();Wc.prototype.constructor=Wc;gb=function Xc(){f.calledRun||Yc();f.calledRun||(gb=Xc)}; -function Yc(){function a(){if(!f.calledRun&&(f.calledRun=!0,!Ma)){db||(db=!0,f.noFSInit||Hc||(Hc=!0,Gc(),f.stdin=f.stdin,f.stdout=f.stdout,f.stderr=f.stderr,f.stdin?Ic("stdin",f.stdin):Ac("/dev/tty","/dev/stdin"),f.stdout?Ic("stdout",null,f.stdout):Ac("/dev/tty","/dev/stdout"),f.stderr?Ic("stderr",null,f.stderr):Ac("/dev/tty1","/dev/stderr"),p("/dev/stdin","r"),p("/dev/stdout","w"),p("/dev/stderr","w")),Za(ab));Jb=!1;Za(bb);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for("function"== -typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();cb.unshift(a)}Za(cb)}}if(!(0>>0);if(null!=h){var m=this.filename,q=m?k("//"+m):"/";m=aa(!0,!0);q=ba(q,(void 0!==m?m:438)&4095|32768,0);if(h){if("string"===typeof h){for(var v=Array(h.length),B=0,Q=h.length;B>2];G[Ja>>2]=b+a+15&-16;return b}var Ka=[],La; +function ua(a){La.delete(I.get(a));Ka.push(a)} +function va(a){if(!La){La=new WeakMap;for(var b=0;bc;++c)f.parameters.push(d["viii"[c]]);c=new WebAssembly.Function(f,a)}else{d=[1,0,1,96];f={i:127,j:126,f:125,d:124};d.push(3);for(c=0;3>c;++c)d.push(f["iii"[c]]);d.push(0);d[1]=d.length-2;c=new Uint8Array([0,97,115,109,1,0,0,0].concat(d,[2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0]));c=new WebAssembly.Module(c);c=(new WebAssembly.Instance(c,{e:{f:a}})).exports.f}I.set(b,c)}La.set(a,b);a=b}return a}function ra(a){ua(a)}var Ma;e.wasmBinary&&(Ma=e.wasmBinary);var noExitRuntime; +e.noExitRuntime&&(noExitRuntime=e.noExitRuntime);"object"!==typeof WebAssembly&&E("no native wasm support detected"); +function oa(a){var b="i32";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":x[a>>0]=0;break;case "i8":x[a>>0]=0;break;case "i16":Na[a>>1]=0;break;case "i32":G[a>>2]=0;break;case "i64":J=[0,(K=0,1<=+Oa(K)?0>>0:~~+Ra((K-+(~~K>>>0))/4294967296)>>>0:0)];G[a>>2]=J[0];G[a+4>>2]=J[1];break;case "float":Sa[a>>2]=0;break;case "double":Ta[a>>3]=0;break;default:D("invalid type for setValue: "+b)}} +function p(a,b){b=b||"i8";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":return x[a>>0];case "i8":return x[a>>0];case "i16":return Na[a>>1];case "i32":return G[a>>2];case "i64":return G[a>>2];case "float":return Sa[a>>2];case "double":return Ta[a>>3];default:D("invalid type for getValue: "+b)}return null}var Ua,I=new WebAssembly.Table({initial:387,element:"anyfunc"}),Va=!1;function assert(a,b){a||D("Assertion failed: "+b)} +function Wa(a){var b=e["_"+a];assert(b,"Cannot call unknown function "+a+", make sure it is exported");return b} +function Xa(a,b,c,d){var f={string:function(u){var C=0;if(null!==u&&void 0!==u&&0!==u){var H=(u.length<<2)+1;C=t(H);la(u,L,C,H)}return C},array:function(u){var C=t(u.length);x.set(u,C);return C}},g=Wa(a),n=[];a=0;if(d)for(var r=0;r>2]=0;for(a=f+d;g>0]=0;return f}a.subarray||a.slice?L.set(a,f):L.set(new Uint8Array(a),f);return f}var ab="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0; +function bb(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d}function N(a){return a?bb(L,a,void 0):""} +function la(a,b,c,d){if(!(0=n){var r=a.charCodeAt(++g);n=65536+((n&1023)<<10)|r&1023}if(127>=n){if(c>=d)break;b[c++]=n}else{if(2047>=n){if(c+1>=d)break;b[c++]=192|n>>6}else{if(65535>=n){if(c+2>=d)break;b[c++]=224|n>>12}else{if(c+3>=d)break;b[c++]=240|n>>18;b[c++]=128|n>>12&63}b[c++]=128|n>>6&63}b[c++]=128|n&63}}b[c]=0;return c-f} +function ka(a){for(var b=0,c=0;c=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}function cb(a){var b=ka(a)+1,c=$a(b);c&&la(a,x,c,b);return c}var db,x,L,Na,G,Sa,Ta; +function eb(a){db=a;e.HEAP8=x=new Int8Array(a);e.HEAP16=Na=new Int16Array(a);e.HEAP32=G=new Int32Array(a);e.HEAPU8=L=new Uint8Array(a);e.HEAPU16=new Uint16Array(a);e.HEAPU32=new Uint32Array(a);e.HEAPF32=Sa=new Float32Array(a);e.HEAPF64=Ta=new Float64Array(a)}var Ja=63056,fb=e.INITIAL_MEMORY||16777216;e.wasmMemory?Ua=e.wasmMemory:Ua=new WebAssembly.Memory({initial:fb/65536,maximum:32768});Ua&&(db=Ua.buffer);fb=db.byteLength;eb(db);G[Ja>>2]=5306096; +function gb(a){for(;0>2]=a} +function Gb(){for(var a="",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:"/";if("string"!==typeof b)throw new TypeError("Arguments to path.resolve must be strings");if(!b)return"";a=b+"/"+a;b="/"===b.charAt(0)}a=Ab(a.split("/").filter(function(d){return!!d}),!b).join("/");return(b?"/":"")+a||"."}var Hb=[];function Ib(a,b){Hb[a]={input:[],output:[],Ya:b};Jb(a,Kb)} +var Kb={open:function(a){var b=Hb[a.node.rdev];if(!b)throw new O(43);a.tty=b;a.seekable=!1},close:function(a){a.tty.Ya.flush(a.tty)},flush:function(a){a.tty.Ya.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.Ya.ob)throw new O(60);for(var f=0,g=0;g=b||(b=Math.max(b,c*(1048576>c?2:1.125)>>>0),0!=c&&(b=Math.max(b,256)),c=a.Ia,a.Ia=new Uint8Array(b),0b)a.Ia.length=b;else for(;a.Ia.length=a.node.Oa)return 0;a=Math.min(a.node.Oa-f,d);if(8b)throw new O(28);return b},jb:function(a,b,c){P.mb(a.node,b+c);a.node.Oa=Math.max(a.node.Oa,b+c)},$a:function(a,b,c,d,f,g,n){if(32768!==(a.node.mode&61440))throw new O(43);a=a.node.Ia;if(n& +2||a.buffer!==b.buffer){if(0>>0)%U.length}function Yb(a){var b=Xb(a.parent.id,a.name);if(U[b]===a)U[b]=a.Xa;else for(b=U[b];b;){if(b.Xa===a){b.Xa=a.Xa;break}b=b.Xa}} +function Qb(a,b){var c;if(c=(c=Zb(a,"x"))?c:a.Ja.lookup?0:2)throw new O(c,a);for(c=U[Xb(a.id,b)];c;c=c.Xa){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.Ja.lookup(a,b)}function Ob(a,b,c,d){a=new $b(a,b,c,d);b=Xb(a.parent.id,a.name);a.Xa=U[b];return U[b]=a}function R(a){return 16384===(a&61440)}var ac={r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218}; +function bc(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Zb(a,b){if(Ub)return 0;if(-1===b.indexOf("r")||a.mode&292){if(-1!==b.indexOf("w")&&!(a.mode&146)||-1!==b.indexOf("x")&&!(a.mode&73))return 2}else return 2;return 0}function cc(a,b){try{return Qb(a,b),20}catch(c){}return Zb(a,"wx")}function dc(a,b,c){try{var d=Qb(a,b)}catch(f){return f.La}if(a=Zb(a,"wx"))return a;if(c){if(!R(d.mode))return 54;if(d===d.parent||"/"===Wb(d))return 10}else if(R(d.mode))return 31;return 0} +function ec(a){var b=4096;for(a=a||0;a<=b;a++)if(!T[a])return a;throw new O(33);}function fc(a,b){hc||(hc=function(){},hc.prototype={});var c=new hc,d;for(d in a)c[d]=a[d];a=c;b=ec(b);a.fd=b;return T[b]=a}var Nb={open:function(a){a.Ka=Sb[a.node.rdev].Ka;a.Ka.open&&a.Ka.open(a)},Va:function(){throw new O(70);}};function Jb(a,b){Sb[a]={Ka:b}} +function ic(a,b){var c="/"===b,d=!b;if(c&&Rb)throw new O(10);if(!c&&!d){var f=W(b,{nb:!1});b=f.path;f=f.node;if(f.Wa)throw new O(10);if(!R(f.mode))throw new O(54);}b={type:a,Lb:{},pb:b,Db:[]};a=a.Sa(b);a.Sa=b;b.root=a;c?Rb=a:f&&(f.Wa=b,f.Sa&&f.Sa.Db.push(b))}function ba(a,b,c){var d=W(a,{parent:!0}).node;a=Cb(a);if(!a||"."===a||".."===a)throw new O(28);var f=cc(d,a);if(f)throw new O(f);if(!d.Ja.Za)throw new O(63);return d.Ja.Za(d,a,b,c)}function X(a,b){ba(a,(void 0!==b?b:511)&1023|16384,0)} +function jc(a,b,c){"undefined"===typeof c&&(c=b,b=438);ba(a,b|8192,c)}function kc(a,b){if(!Gb(a))throw new O(44);var c=W(b,{parent:!0}).node;if(!c)throw new O(44);b=Cb(b);var d=cc(c,b);if(d)throw new O(d);if(!c.Ja.symlink)throw new O(63);c.Ja.symlink(c,b,a)} +function ta(a){var b=W(a,{parent:!0}).node,c=Cb(a),d=Qb(b,c),f=dc(b,c,!1);if(f)throw new O(f);if(!b.Ja.unlink)throw new O(63);if(d.Wa)throw new O(10);try{V.willDeletePath&&V.willDeletePath(a)}catch(g){E("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.Ja.unlink(b,c);Yb(d);try{if(V.onDeletePath)V.onDeletePath(a)}catch(g){E("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+g.message)}} +function Vb(a){a=W(a).node;if(!a)throw new O(44);if(!a.Ja.readlink)throw new O(28);return Gb(Wb(a.parent),a.Ja.readlink(a))}function lc(a,b){a=W(a,{Ua:!b}).node;if(!a)throw new O(44);if(!a.Ja.Qa)throw new O(63);return a.Ja.Qa(a)}function mc(a){return lc(a,!0)}function ca(a,b){var c;"string"===typeof a?c=W(a,{Ua:!0}).node:c=a;if(!c.Ja.Pa)throw new O(63);c.Ja.Pa(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})} +function nc(a){var b;"string"===typeof a?b=W(a,{Ua:!0}).node:b=a;if(!b.Ja.Pa)throw new O(63);b.Ja.Pa(b,{timestamp:Date.now()})}function oc(a,b){if(0>b)throw new O(28);var c;"string"===typeof a?c=W(a,{Ua:!0}).node:c=a;if(!c.Ja.Pa)throw new O(63);if(R(c.mode))throw new O(31);if(32768!==(c.mode&61440))throw new O(28);if(a=Zb(c,"w"))throw new O(a);c.Ja.Pa(c,{size:b,timestamp:Date.now()})} +function l(a,b,c,d){if(""===a)throw new O(44);if("string"===typeof b){var f=ac[b];if("undefined"===typeof f)throw Error("Unknown file open mode: "+b);b=f}c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var g=a;else{a=k(a);try{g=W(a,{Ua:!(b&131072)}).node}catch(n){}}f=!1;if(b&64)if(g){if(b&128)throw new O(20);}else g=ba(a,c,0),f=!0;if(!g)throw new O(44);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!R(g.mode))throw new O(54);if(!f&&(c=g?40960===(g.mode&61440)?32:R(g.mode)&& +("r"!==bc(b)||b&512)?31:Zb(g,bc(b)):44))throw new O(c);b&512&&oc(g,0);b&=-131713;d=fc({node:g,path:Wb(g),flags:b,seekable:!0,position:0,Ka:g.Ka,Ib:[],error:!1},d);d.Ka.open&&d.Ka.open(d);!e.logReadFiles||b&1||(pc||(pc={}),a in pc||(pc[a]=1,E("FS.trackingDelegate error on read file: "+a)));try{V.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),V.onOpenFile(a,g))}catch(n){E("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+n.message)}return d} +function ea(a){if(null===a.fd)throw new O(8);a.gb&&(a.gb=null);try{a.Ka.close&&a.Ka.close(a)}catch(b){throw b;}finally{T[a.fd]=null}a.fd=null}function qc(a,b,c){if(null===a.fd)throw new O(8);if(!a.seekable||!a.Ka.Va)throw new O(70);if(0!=c&&1!=c&&2!=c)throw new O(28);a.position=a.Ka.Va(a,b,c);a.Ib=[]} +function rc(a,b,c,d,f){if(0>d||0>f)throw new O(28);if(null===a.fd)throw new O(8);if(1===(a.flags&2097155))throw new O(8);if(R(a.node.mode))throw new O(31);if(!a.Ka.read)throw new O(28);var g="undefined"!==typeof f;if(!g)f=a.position;else if(!a.seekable)throw new O(70);b=a.Ka.read(a,b,c,d,f);g||(a.position+=b);return b} +function da(a,b,c,d,f,g){if(0>d||0>f)throw new O(28);if(null===a.fd)throw new O(8);if(0===(a.flags&2097155))throw new O(8);if(R(a.node.mode))throw new O(31);if(!a.Ka.write)throw new O(28);a.seekable&&a.flags&1024&&qc(a,0,2);var n="undefined"!==typeof f;if(!n)f=a.position;else if(!a.seekable)throw new O(70);b=a.Ka.write(a,b,c,d,f,g);n||(a.position+=b);try{if(a.path&&V.onWriteToFile)V.onWriteToFile(a.path)}catch(r){E("FS.trackingDelegate['onWriteToFile']('"+a.path+"') threw an exception: "+r.message)}return b} +function sa(a){var b={encoding:"binary"};b=b||{};b.flags=b.flags||"r";b.encoding=b.encoding||"binary";if("utf8"!==b.encoding&&"binary"!==b.encoding)throw Error('Invalid encoding type "'+b.encoding+'"');var c,d=l(a,b.flags);a=lc(a).size;var f=new Uint8Array(a);rc(d,f,0,a,0);"utf8"===b.encoding?c=bb(f,0):"binary"===b.encoding&&(c=f);ea(d);return c} +function sc(){O||(O=function(a,b){this.node=b;this.Hb=function(c){this.La=c};this.Hb(a);this.message="FS error"},O.prototype=Error(),O.prototype.constructor=O,[44].forEach(function(a){Pb[a]=new O(a);Pb[a].stack=""}))}var tc;function aa(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c} +function Rc(a,b,c){a=k("/dev/"+a);var d=aa(!!b,!!c);Sc||(Sc=64);var f=Sc++<<8|0;Jb(f,{open:function(g){g.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(g,n,r,w){for(var u=0,C=0;C>2]=d.dev;G[c+4>>2]=0;G[c+8>>2]=d.ino;G[c+12>>2]=d.mode;G[c+16>>2]=d.nlink;G[c+20>>2]=d.uid;G[c+24>>2]=d.gid;G[c+28>>2]=d.rdev;G[c+32>>2]=0;J=[d.size>>>0,(K=d.size,1<=+Oa(K)?0>>0:~~+Ra((K-+(~~K>>>0))/4294967296)>>>0:0)];G[c+40>>2]=J[0];G[c+44>>2]=J[1];G[c+48>>2]=4096;G[c+52>>2]=d.blocks;G[c+56>>2]=d.atime.getTime()/1E3|0;G[c+60>>2]=0;G[c+64>>2]=d.mtime.getTime()/ +1E3|0;G[c+68>>2]=0;G[c+72>>2]=d.ctime.getTime()/1E3|0;G[c+76>>2]=0;J=[d.ino>>>0,(K=d.ino,1<=+Oa(K)?0>>0:~~+Ra((K-+(~~K>>>0))/4294967296)>>>0:0)];G[c+80>>2]=J[0];G[c+84>>2]=J[1];return 0}var Wc=void 0;function Xc(){Wc+=4;return G[Wc-4>>2]}function Z(a){a=T[a];if(!a)throw new O(8);return a}var Yc={}; +function Zc(){if(!$c){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:xa||"./this.program"},b;for(b in Yc)a[b]=Yc[b];var c=[];for(b in a)c.push(b+"="+a[b]);$c=c}return $c}var $c;la("GMT",L,63120,4); +function ad(){function a(g){return(g=g.toTimeString().match(/\(([A-Za-z ]+)\)$/))?g[1]:"GMT"}if(!bd){bd=!0;G[cd()>>2]=60*(new Date).getTimezoneOffset();var b=(new Date).getFullYear(),c=new Date(b,0,1);b=new Date(b,6,1);G[dd()>>2]=Number(c.getTimezoneOffset()!=b.getTimezoneOffset());var d=a(c),f=a(b);d=cb(d);f=cb(f);b.getTimezoneOffset()>2]=d,G[ed()+4>>2]=f):(G[ed()>>2]=f,G[ed()+4>>2]=d)}}var bd,fd; +Aa?fd=function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:"undefined"!==typeof dateNow?fd=dateNow:fd=function(){return performance.now()};function gd(a){for(var b=fd();fd()-bf?-28:l(d.path,d.flags,0,f).fd;case 1:case 2:return 0;case 3:return d.flags; +case 4:return f=Xc(),d.flags|=f,0;case 12:return f=Xc(),Na[f+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Eb(28),-1;default:return-28}}catch(g){return"undefined"!==typeof Y&&g instanceof O||D(g),-g.La}},t:function(a,b){try{var c=Z(a);return Vc(lc,c.path,b)}catch(d){return"undefined"!==typeof Y&&d instanceof O||D(d),-d.La}},J:function(a,b,c){try{var d=T[a];if(!d)throw new O(8);if(0===(d.flags&2097155))throw new O(28);oc(d.node,c);return 0}catch(f){return"undefined"!==typeof Y&& +f instanceof O||D(f),-f.La}},F:function(a,b){try{if(0===b)return-28;if(b=c)var d=-28;else{var f=Vb(a),g=Math.min(c,ka(f)),n=x[b+g];la(f,L,b,c+1);x[b+g]=n;d=g}return d}catch(r){return"undefined"!==typeof Y&&r instanceof O||D(r),-r.La}},D:function(a){try{a=N(a);var b=W(a,{parent:!0}).node,c=Cb(a),d=Qb(b,c),f=dc(b,c,!0);if(f)throw new O(f);if(!b.Ja.rmdir)throw new O(63);if(d.Wa)throw new O(10);try{V.willDeletePath&&V.willDeletePath(a)}catch(g){E("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+ +g.message)}b.Ja.rmdir(b,c);Yb(d);try{if(V.onDeletePath)V.onDeletePath(a)}catch(g){E("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+g.message)}return 0}catch(g){return"undefined"!==typeof Y&&g instanceof O||D(g),-g.La}},e:function(a,b){try{return a=N(a),Vc(lc,a,b)}catch(c){return"undefined"!==typeof Y&&c instanceof O||D(c),-c.La}},h:function(a){try{return a=N(a),ta(a),0}catch(b){return"undefined"!==typeof Y&&b instanceof O||D(b),-b.La}},m:function(a,b,c){L.copyWithin(a,b,b+c)}, +c:function(a){a>>>=0;var b=L.length;if(2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>>16);eb(Ua.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},o:function(a,b){var c=0;Zc().forEach(function(d,f){var g=b+c;f=G[a+4*f>>2]=g;for(g=0;g>0]=d.charCodeAt(g);x[f>>0]=0;c+=d.length+1});return 0},p:function(a,b){var c= +Zc();G[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});G[b>>2]=d;return 0},f:function(a){try{var b=Z(a);ea(b);return 0}catch(c){return"undefined"!==typeof Y&&c instanceof O||D(c),c.La}},n:function(a,b){try{var c=Z(a);x[b>>0]=c.tty?2:R(c.mode)?3:40960===(c.mode&61440)?7:4;return 0}catch(d){return"undefined"!==typeof Y&&d instanceof O||D(d),d.La}},l:function(a,b,c,d,f){try{var g=Z(a);a=4294967296*c+(b>>>0);if(-9007199254740992>=a||9007199254740992<=a)return-61;qc(g,a,d);J=[g.position>>> +0,(K=g.position,1<=+Oa(K)?0>>0:~~+Ra((K-+(~~K>>>0))/4294967296)>>>0:0)];G[f>>2]=J[0];G[f+4>>2]=J[1];g.gb&&0===a&&0===d&&(g.gb=null);return 0}catch(n){return"undefined"!==typeof Y&&n instanceof O||D(n),n.La}},E:function(a){try{var b=Z(a);return b.Ka&&b.Ka.fsync?-b.Ka.fsync(b):0}catch(c){return"undefined"!==typeof Y&&c instanceof O||D(c),c.La}},i:function(a,b,c,d){try{a:{for(var f=Z(a),g=a=0;g>2],G[b+(8*g+4)>>2],void 0);if(0>n){var r= +-1;break a}a+=n}r=a}G[d>>2]=r;return 0}catch(w){return"undefined"!==typeof Y&&w instanceof O||D(w),w.La}},g:function(a){var b=Date.now();G[a>>2]=b/1E3|0;G[a+4>>2]=b%1E3*1E3|0;return 0},k:function(a){ad();a=new Date(1E3*G[a>>2]);G[15768]=a.getSeconds();G[15769]=a.getMinutes();G[15770]=a.getHours();G[15771]=a.getDate();G[15772]=a.getMonth();G[15773]=a.getFullYear()-1900;G[15774]=a.getDay();var b=new Date(a.getFullYear(),0,1);G[15775]=(a.getTime()-b.getTime())/864E5|0;G[15777]=-(60*a.getTimezoneOffset()); +var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();b=b.getTimezoneOffset();a=(c!=b&&a.getTimezoneOffset()==Math.min(b,c))|0;G[15776]=a;a=G[ed()+(a?4:0)>>2];G[15778]=a;return 63072},memory:Ua,z:function(a,b){if(0===a)return Eb(28),-1;var c=G[a>>2];a=G[a+4>>2];if(0>a||999999999c)return Eb(28),-1;0!==b&&(G[b>>2]=0,G[b+4>>2]=0);return gd(1E6*c+a/1E3)},A:function(a){switch(a){case 30:return 16384;case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809; +case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32; +case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}Eb(28);return-1}, +table:I,K:function(a){var b=Date.now()/1E3|0;a&&(G[a>>2]=b);return b},r:function(a,b){if(b){var c=1E3*G[b+8>>2];c+=G[b+12>>2]/1E3}else c=Date.now();a=N(a);try{b=c;var d=W(a,{Ua:!0}).node;d.Ja.Pa(d,{timestamp:Math.max(b,c)});return 0}catch(f){a=f;if(!(a instanceof O)){a+=" : ";a:{d=Error();if(!d.stack){try{throw Error();}catch(g){d=g}if(!d.stack){d="(no stack trace available)";break a}}d=d.stack.toString()}e.extraStackTrace&&(d+="\n"+e.extraStackTrace());d=zb(d);throw a+d;}Eb(a.La);return-1}}},kd= +function(){function a(f){e.asm=f.exports;mb--;e.monitorRunDependencies&&e.monitorRunDependencies(mb);0==mb&&(null!==nb&&(clearInterval(nb),nb=null),ob&&(f=ob,ob=null,f()))}function b(f){a(f.instance)}function c(f){return ub().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){E("failed to asynchronously prepare wasm: "+g);D(g)})}var d={a:jd};mb++;e.monitorRunDependencies&&e.monitorRunDependencies(mb);if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(f){return E("Module.instantiateWasm callback failed with error: "+ +f),!1}(function(){if(Ma||"function"!==typeof WebAssembly.instantiateStreaming||rb()||pb("file://")||"function"!==typeof fetch)return c(b);fetch(qb,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){E("wasm streaming compile failed: "+g);E("falling back to ArrayBuffer instantiation");c(b)})})})();return{}}();e.asm=kd; +var vb=e.___wasm_call_ctors=function(){return(vb=e.___wasm_call_ctors=e.asm.L).apply(null,arguments)},id=e._memset=function(){return(id=e._memset=e.asm.M).apply(null,arguments)};e._sqlite3_free=function(){return(e._sqlite3_free=e.asm.N).apply(null,arguments)};var Fb=e.___errno_location=function(){return(Fb=e.___errno_location=e.asm.O).apply(null,arguments)};e._sqlite3_finalize=function(){return(e._sqlite3_finalize=e.asm.P).apply(null,arguments)}; +e._sqlite3_reset=function(){return(e._sqlite3_reset=e.asm.Q).apply(null,arguments)};e._sqlite3_clear_bindings=function(){return(e._sqlite3_clear_bindings=e.asm.R).apply(null,arguments)};e._sqlite3_value_blob=function(){return(e._sqlite3_value_blob=e.asm.S).apply(null,arguments)};e._sqlite3_value_text=function(){return(e._sqlite3_value_text=e.asm.T).apply(null,arguments)};e._sqlite3_value_bytes=function(){return(e._sqlite3_value_bytes=e.asm.U).apply(null,arguments)}; +e._sqlite3_value_double=function(){return(e._sqlite3_value_double=e.asm.V).apply(null,arguments)};e._sqlite3_value_int=function(){return(e._sqlite3_value_int=e.asm.W).apply(null,arguments)};e._sqlite3_value_type=function(){return(e._sqlite3_value_type=e.asm.X).apply(null,arguments)};e._sqlite3_result_blob=function(){return(e._sqlite3_result_blob=e.asm.Y).apply(null,arguments)};e._sqlite3_result_double=function(){return(e._sqlite3_result_double=e.asm.Z).apply(null,arguments)}; +e._sqlite3_result_error=function(){return(e._sqlite3_result_error=e.asm._).apply(null,arguments)};e._sqlite3_result_int=function(){return(e._sqlite3_result_int=e.asm.$).apply(null,arguments)};e._sqlite3_result_int64=function(){return(e._sqlite3_result_int64=e.asm.aa).apply(null,arguments)};e._sqlite3_result_null=function(){return(e._sqlite3_result_null=e.asm.ba).apply(null,arguments)};e._sqlite3_result_text=function(){return(e._sqlite3_result_text=e.asm.ca).apply(null,arguments)}; +e._sqlite3_step=function(){return(e._sqlite3_step=e.asm.da).apply(null,arguments)};e._sqlite3_data_count=function(){return(e._sqlite3_data_count=e.asm.ea).apply(null,arguments)};e._sqlite3_column_blob=function(){return(e._sqlite3_column_blob=e.asm.fa).apply(null,arguments)};e._sqlite3_column_bytes=function(){return(e._sqlite3_column_bytes=e.asm.ga).apply(null,arguments)};e._sqlite3_column_double=function(){return(e._sqlite3_column_double=e.asm.ha).apply(null,arguments)}; +e._sqlite3_column_text=function(){return(e._sqlite3_column_text=e.asm.ia).apply(null,arguments)};e._sqlite3_column_type=function(){return(e._sqlite3_column_type=e.asm.ja).apply(null,arguments)};e._sqlite3_column_name=function(){return(e._sqlite3_column_name=e.asm.ka).apply(null,arguments)};e._sqlite3_bind_blob=function(){return(e._sqlite3_bind_blob=e.asm.la).apply(null,arguments)};e._sqlite3_bind_double=function(){return(e._sqlite3_bind_double=e.asm.ma).apply(null,arguments)}; +e._sqlite3_bind_int=function(){return(e._sqlite3_bind_int=e.asm.na).apply(null,arguments)};e._sqlite3_bind_text=function(){return(e._sqlite3_bind_text=e.asm.oa).apply(null,arguments)};e._sqlite3_bind_parameter_index=function(){return(e._sqlite3_bind_parameter_index=e.asm.pa).apply(null,arguments)};e._sqlite3_errmsg=function(){return(e._sqlite3_errmsg=e.asm.qa).apply(null,arguments)};e._sqlite3_exec=function(){return(e._sqlite3_exec=e.asm.ra).apply(null,arguments)}; +e._sqlite3_prepare_v2=function(){return(e._sqlite3_prepare_v2=e.asm.sa).apply(null,arguments)};e._sqlite3_changes=function(){return(e._sqlite3_changes=e.asm.ta).apply(null,arguments)};e._sqlite3_close_v2=function(){return(e._sqlite3_close_v2=e.asm.ua).apply(null,arguments)};e._sqlite3_create_function_v2=function(){return(e._sqlite3_create_function_v2=e.asm.va).apply(null,arguments)};e._sqlite3_open=function(){return(e._sqlite3_open=e.asm.wa).apply(null,arguments)}; +var $a=e._malloc=function(){return($a=e._malloc=e.asm.xa).apply(null,arguments)},ia=e._free=function(){return(ia=e._free=e.asm.ya).apply(null,arguments)};e._RegisterExtensionFunctions=function(){return(e._RegisterExtensionFunctions=e.asm.za).apply(null,arguments)}; +var ed=e.__get_tzname=function(){return(ed=e.__get_tzname=e.asm.Aa).apply(null,arguments)},dd=e.__get_daylight=function(){return(dd=e.__get_daylight=e.asm.Ba).apply(null,arguments)},cd=e.__get_timezone=function(){return(cd=e.__get_timezone=e.asm.Ca).apply(null,arguments)},hd=e._memalign=function(){return(hd=e._memalign=e.asm.Da).apply(null,arguments)},ja=e.stackSave=function(){return(ja=e.stackSave=e.asm.Ea).apply(null,arguments)},t=e.stackAlloc=function(){return(t=e.stackAlloc=e.asm.Fa).apply(null, +arguments)},qa=e.stackRestore=function(){return(qa=e.stackRestore=e.asm.Ga).apply(null,arguments)};e.dynCall_vi=function(){return(e.dynCall_vi=e.asm.Ha).apply(null,arguments)};e.asm=kd;e.cwrap=function(a,b,c,d){c=c||[];var f=c.every(function(g){return"number"===g});return"string"!==b&&f&&!d?Wa(a):function(){return Xa(a,b,c,arguments)}};e.stackSave=ja;e.stackRestore=qa;e.stackAlloc=t;var ld;ob=function md(){ld||nd();ld||(ob=md)}; +function nd(){function a(){if(!ld&&(ld=!0,e.calledRun=!0,!Va)){e.noFSInit||tc||(tc=!0,sc(),e.stdin=e.stdin,e.stdout=e.stdout,e.stderr=e.stderr,e.stdin?Rc("stdin",e.stdin):kc("/dev/tty","/dev/stdin"),e.stdout?Rc("stdout",null,e.stdout):kc("/dev/tty","/dev/stdout"),e.stderr?Rc("stderr",null,e.stderr):kc("/dev/tty1","/dev/stderr"),l("/dev/stdin","r"),l("/dev/stdout","w"),l("/dev/stderr","w"));gb(ib);Ub=!1;gb(jb);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(e.postRun)for("function"==typeof e.postRun&& +(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();kb.unshift(b)}gb(kb)}}if(!(0