64 Commits

Author SHA1 Message Date
5789d9a7a1 chore: update translations 2025-05-28 13:51:47 +01:00
b854962b07 fix: viewers formatting 2025-05-28 13:24:52 +01:00
0295d49077 refactor: cleanup notifications bbutton signer requests 2025-05-28 13:17:45 +01:00
74c3ad9b9c fix: dont make notepush requests unless notifications is authorized 2025-05-28 12:49:51 +01:00
8bd9ff2a4c fix: scrolling stream cards on stream info modal 2025-05-28 12:41:15 +01:00
8516f2b3c1 refactor: move reactions to chat modal
fix: custom emoji reactions
2025-05-28 12:35:53 +01:00
344f2d31fc fix: mention overlay unfocus 2025-05-28 12:21:11 +01:00
c6168ec094 feat: preview media in modal
closes #38
2025-05-28 12:17:44 +01:00
2ec17c6c41 refactor: minor profile loader improvement 2025-05-28 11:40:53 +01:00
c6b76bc64d fix: close zap modal after zap
closes #37
2025-05-28 11:16:49 +01:00
d3a8c41f93 chore: bump version 2025-05-27 15:19:19 +01:00
04967910fa chore: ios build 2025-05-27 15:13:41 +01:00
9d2bc7456f fix: bundle id 2025-05-27 13:59:43 +01:00
cc53762e4b chore: build ios 2025-05-27 13:59:05 +01:00
0a474a1ca7 fix: name overflow on stream page 2025-05-27 13:53:33 +01:00
e9062f0265 feat: custom emoji picker
closes #14
2025-05-27 12:22:28 +01:00
8dae9a97f2 fix: render zap message as note text 2025-05-27 10:10:48 +01:00
a64cacb13c chore: bump ndk 2025-05-27 10:09:43 +01:00
19d50f2947 feat: 1-tap connection 2025-05-26 16:40:18 +01:00
f36f02e95a fix: unfocus tap outside 2025-05-26 13:58:07 +01:00
484bf67951 feat: disconnect wallet 2025-05-26 13:51:15 +01:00
47bed26df6 feat: simple NWC flow
closes #19
2025-05-26 13:28:00 +01:00
befd7c014b chore: bump version 2025-05-23 17:45:14 +01:00
0a75665bde fix: scroll tags on stream info widget 2025-05-23 16:30:10 +01:00
46b809ff58 refactor: disable reactions due to bad UX
ref #36
2025-05-23 15:54:52 +01:00
8f41ed6d0e feat: launch url for push notifications
closes #32
2025-05-23 12:38:36 +01:00
acbf311972 chore: downgrade flutter 2025-05-22 17:20:23 +01:00
43c3b3fc31 chore: bump version 2025-05-22 17:09:39 +01:00
7838607cfc feat: notify keys 2025-05-22 16:32:42 +01:00
9a0811760c fix: flutter version 2025-05-22 10:59:57 +01:00
5af5bab20c chore: bump ndk 2025-05-22 10:51:29 +01:00
4db0317c0b feat: setup deep link handler
closes #34
2025-05-22 10:46:47 +01:00
4e4061b808 feat: setup env vars 2025-05-22 10:23:47 +01:00
3dbb247890 feat: register notifications (notepush) 2025-05-21 18:45:54 +01:00
825152c6bf refactor: move app entry point 2025-05-21 13:33:15 +01:00
99ec8cfbf7 chore: setup firebase 2025-05-21 13:13:40 +01:00
b8422291a5 feat: add translations 2025-05-20 17:21:08 +01:00
a0b2275bea feat: setup intl
closes #29
2025-05-20 15:48:51 +01:00
182f34ff71 chore: bump version 2025-05-19 16:45:06 +01:00
57a67106fd refactor: rename var for people allowed to mute 2025-05-19 16:44:44 +01:00
b1a1e4131b refactor: replace spacer with spacer widget 2025-05-19 16:42:43 +01:00
9f91135572 fix: hide events from before start of stream 2025-05-19 16:41:26 +01:00
a5736aa3d3 feat: timeouts
closes #13
2025-05-19 16:32:21 +01:00
c865f24b2c fix: badge match event 2025-05-19 14:02:24 +01:00
f8f5860b64 chore: setup for deep linking 2025-05-19 12:48:23 +01:00
a500e0b3da feat: share stream
closes #33
2025-05-19 12:42:35 +01:00
86a8181aea feat: chat badges
closes #15
2025-05-19 11:44:13 +01:00
cb1c995023 fix: send chat to stream relays 2025-05-19 11:14:46 +01:00
46d60994a8 feat: badge awards 2025-05-19 11:11:12 +01:00
3eac1c4bfa feat: show copied to clipboard message on ios
closes #28
2025-05-19 10:47:57 +01:00
e6bad40608 fix: always show open in wallet button 2025-05-19 10:43:13 +01:00
e332dc9c6c fix: auto-raid loop
closes #31
2025-05-19 10:41:49 +01:00
a870aa0888 chore: bump version 2025-05-16 16:56:28 +01:00
8173eab05d fix: stop player when navigating away
closes #24
2025-05-16 16:55:44 +01:00
e91807e80e fix: url parser 2025-05-16 14:28:33 +01:00
c79ea1b872 feat: chat embeds
closes #18
2025-05-16 14:25:16 +01:00
b630b59e53 chore: placeholder fade off / write to cache always 2025-05-16 12:58:45 +01:00
c7435d5772 feat: following section on stream grid
closes #26
2025-05-16 12:46:53 +01:00
b5e0822d6c feat: live timer
closes #23
2025-05-16 12:33:34 +01:00
dcf42e7a78 refactor: use ProxyImg widget 2025-05-16 12:22:31 +01:00
244a0aad38 fix: trim content before converting to spans 2025-05-16 12:07:53 +01:00
556377263d fix: hide zap button for profiles with no lud16 2025-05-16 12:07:02 +01:00
7c3e9afc3e feat: profile editor
closes #5
2025-05-16 12:03:59 +01:00
d85c93b7ed feat: custom amount
chore: improve zap dialog ux
closes #25
2025-05-16 11:04:18 +01:00
149 changed files with 18190 additions and 1217 deletions

1
.env Normal file
View File

@ -0,0 +1 @@
NOTEPUSH_URL="https://notepush.nostrlabs.io"

1
.env.development Normal file
View File

@ -0,0 +1 @@
NOTEPUSH_URL="http://10.0.2.2:8000"

View File

@ -12,6 +12,7 @@ jobs:
uses: subosito/flutter-action@v2 uses: subosito/flutter-action@v2
with: with:
channel: stable channel: stable
flutter-version: 3.29.3
- run: flutter pub get - run: flutter pub get
- run: flutter build appbundle - run: flutter build appbundle
env: env:
@ -52,5 +53,6 @@ jobs:
uses: subosito/flutter-action@v2 uses: subosito/flutter-action@v2
with: with:
channel: stable channel: stable
flutter-version: 3.29.3
- run: flutter pub get - run: flutter pub get
- run: flutter build ios --no-codesign - run: flutter build ios --no-codesign

View File

@ -16,6 +16,7 @@ jobs:
uses: subosito/flutter-action@v2 uses: subosito/flutter-action@v2
with: with:
channel: stable channel: stable
flutter-version: 3.29.3
- run: flutter pub get - run: flutter pub get
- name: Build apk - name: Build apk
env: env:

View File

@ -8,6 +8,9 @@ import java.util.Properties
plugins { plugins {
id("com.android.application") id("com.android.application")
// START: FlutterFire Configuration
id("com.google.gms.google-services")
// END: FlutterFire Configuration
id("kotlin-android") id("kotlin-android")
id("dev.flutter.flutter-gradle-plugin") id("dev.flutter.flutter-gradle-plugin")
} }
@ -82,6 +85,7 @@ android {
ndkVersion = flutter.ndkVersion ndkVersion = flutter.ndkVersion
compileOptions { compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_11 sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11
} }
@ -108,3 +112,7 @@ android {
flutter { flutter {
source = "../.." source = "../.."
} }
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
}

View File

@ -0,0 +1,29 @@
{
"project_info": {
"project_number": "953923151748",
"project_id": "nostrlabs",
"storage_bucket": "nostrlabs.firebasestorage.app"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:953923151748:android:8536cdc7f75edc9f9e9fd1",
"android_client_info": {
"package_name": "io.nostrlabs.zap_stream_flutter"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyAdpxIN8DR1-mh8MCjHU0mDtaUAk6xda6w"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": []
}
}
}
],
"configuration_version": "1"
}

View File

@ -24,6 +24,19 @@
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter> </intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="zap.stream" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="zswc" />
</intent-filter>
</activity> </activity>
<!-- Don't delete the meta-data below. <!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
@ -46,4 +59,10 @@
<data android:mimeType="text/plain"/> <data android:mimeType="text/plain"/>
</intent> </intent>
</queries> </queries>
<meta-data
android:name="firebase_messaging_auto_init_enabled"
android:value="false" />
<meta-data
android:name="firebase_analytics_collection_enabled"
android:value="false" />
</manifest> </manifest>

View File

@ -19,6 +19,9 @@ pluginManagement {
plugins { plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0" id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.7.0" apply false id("com.android.application") version "8.7.0" apply false
// START: FlutterFire Configuration
id("com.google.gms.google-services") version("4.3.15") apply false
// END: FlutterFire Configuration
id("org.jetbrains.kotlin.android") version "1.8.22" apply false id("org.jetbrains.kotlin.android") version "1.8.22" apply false
} }

25
firebase.json Normal file
View File

@ -0,0 +1,25 @@
{
"flutter": {
"platforms": {
"android": {
"default": {
"projectId": "nostrlabs",
"appId": "1:953923151748:android:8536cdc7f75edc9f9e9fd1",
"fileOutput": "android/app/google-services.json"
}
},
"dart": {
"lib/firebase_options.dart": {
"projectId": "nostrlabs",
"configurations": {
"android": "1:953923151748:android:8536cdc7f75edc9f9e9fd1",
"ios": "1:953923151748:ios:30ec9a230e55fe139e9fd1",
"macos": "1:953923151748:ios:19516d42a1cc02229e9fd1",
"web": "1:953923151748:web:f04633c33f9343b19e9fd1",
"windows": "1:953923151748:web:6b9a6be6798644909e9fd1"
}
}
}
}
}
}

View File

@ -1 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig" #include "Generated.xcconfig"

View File

@ -1 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig" #include "Generated.xcconfig"

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>API_KEY</key>
<string>AIzaSyByygErXpki6Q7NXOXTHbRgg3-Tw-KCVO0</string>
<key>GCM_SENDER_ID</key>
<string>953923151748</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>io.nostrlabs.zap-stream</string>
<key>PROJECT_ID</key>
<string>nostrlabs</string>
<key>STORAGE_BUCKET</key>
<string>nostrlabs.firebasestorage.app</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:953923151748:ios:aef9c54f556258d39e9fd1</string>
</dict>
</plist>

43
ios/Podfile Normal file
View File

@ -0,0 +1,43 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '12.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end

208
ios/Podfile.lock Normal file
View File

@ -0,0 +1,208 @@
PODS:
- emoji_picker_flutter (0.0.1):
- Flutter
- Firebase/CoreOnly (11.10.0):
- FirebaseCore (~> 11.10.0)
- Firebase/Messaging (11.10.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 11.10.0)
- firebase_core (3.13.1):
- Firebase/CoreOnly (= 11.10.0)
- Flutter
- firebase_messaging (15.2.6):
- Firebase/Messaging (= 11.10.0)
- firebase_core
- Flutter
- FirebaseCore (11.10.0):
- FirebaseCoreInternal (~> 11.10.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/Logger (~> 8.0)
- FirebaseCoreInternal (11.10.0):
- "GoogleUtilities/NSData+zlib (~> 8.0)"
- FirebaseInstallations (11.10.0):
- FirebaseCore (~> 11.10.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- PromisesObjC (~> 2.4)
- FirebaseMessaging (11.10.0):
- FirebaseCore (~> 11.10.0)
- FirebaseInstallations (~> 11.0)
- GoogleDataTransport (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/Reachability (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- nanopb (~> 3.30910.0)
- Flutter (1.0.0)
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_secure_storage (6.0.0):
- Flutter
- GoogleDataTransport (10.1.0):
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
- GoogleUtilities/AppDelegateSwizzler (8.1.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Privacy
- GoogleUtilities/Environment (8.1.0):
- GoogleUtilities/Privacy
- GoogleUtilities/Logger (8.1.0):
- GoogleUtilities/Environment
- GoogleUtilities/Privacy
- GoogleUtilities/Network (8.1.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Privacy
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (8.1.0)":
- GoogleUtilities/Privacy
- GoogleUtilities/Privacy (8.1.0)
- GoogleUtilities/Reachability (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- GoogleUtilities/UserDefaults (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- image_picker_ios (0.0.1):
- Flutter
- nanopb (3.30910.0):
- nanopb/decode (= 3.30910.0)
- nanopb/encode (= 3.30910.0)
- nanopb/decode (3.30910.0)
- nanopb/encode (3.30910.0)
- ObjectBox (4.2.0)
- objectbox_flutter_libs (0.0.1):
- Flutter
- ObjectBox (= 4.2.0)
- package_info_plus (0.4.5):
- Flutter
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- PromisesObjC (2.4.0)
- protocol_handler_ios (0.0.1):
- Flutter
- rust_lib_ndk (0.0.1):
- Flutter
- share_plus (0.0.1):
- Flutter
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite_darwin (0.0.4):
- Flutter
- FlutterMacOS
- url_launcher_ios (0.0.1):
- Flutter
- video_player_avfoundation (0.0.1):
- Flutter
- FlutterMacOS
- wakelock_plus (0.0.1):
- Flutter
DEPENDENCIES:
- emoji_picker_flutter (from `.symlinks/plugins/emoji_picker_flutter/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- Flutter (from `Flutter`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- objectbox_flutter_libs (from `.symlinks/plugins/objectbox_flutter_libs/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- protocol_handler_ios (from `.symlinks/plugins/protocol_handler_ios/ios`)
- rust_lib_ndk (from `.symlinks/plugins/rust_lib_ndk/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`)
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
SPEC REPOS:
trunk:
- Firebase
- FirebaseCore
- FirebaseCoreInternal
- FirebaseInstallations
- FirebaseMessaging
- GoogleDataTransport
- GoogleUtilities
- nanopb
- ObjectBox
- PromisesObjC
EXTERNAL SOURCES:
emoji_picker_flutter:
:path: ".symlinks/plugins/emoji_picker_flutter/ios"
firebase_core:
:path: ".symlinks/plugins/firebase_core/ios"
firebase_messaging:
:path: ".symlinks/plugins/firebase_messaging/ios"
Flutter:
:path: Flutter
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_secure_storage:
:path: ".symlinks/plugins/flutter_secure_storage/ios"
image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios"
objectbox_flutter_libs:
:path: ".symlinks/plugins/objectbox_flutter_libs/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
protocol_handler_ios:
:path: ".symlinks/plugins/protocol_handler_ios/ios"
rust_lib_ndk:
:path: ".symlinks/plugins/rust_lib_ndk/ios"
share_plus:
:path: ".symlinks/plugins/share_plus/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqflite_darwin:
:path: ".symlinks/plugins/sqflite_darwin/darwin"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
video_player_avfoundation:
:path: ".symlinks/plugins/video_player_avfoundation/darwin"
wakelock_plus:
:path: ".symlinks/plugins/wakelock_plus/ios"
SPEC CHECKSUMS:
emoji_picker_flutter: ece213fc274bdddefb77d502d33080dc54e616cc
Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2
firebase_core: ba71b44041571da878cb624ce0d80250bcbe58ad
firebase_messaging: 13129fe2ca166d1ed2d095062d76cee88943d067
FirebaseCore: 8344daef5e2661eb004b177488d6f9f0f24251b7
FirebaseCoreInternal: ef4505d2afb1d0ebbc33162cb3795382904b5679
FirebaseInstallations: 9980995bdd06ec8081dfb6ab364162bdd64245c3
FirebaseMessaging: 2b9f56aa4ed286e1f0ce2ee1d413aabb8f9f5cb9
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_local_notifications: a5a732f069baa862e728d839dd2ebb904737effb
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
ObjectBox: 2b4c925852ea99f070492f21328bf4002165cbd9
objectbox_flutter_libs: 50402e45f47f385d47fc041aba4607b89c4a3a1f
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
protocol_handler_ios: 59f23ee71f3ec602d67902ca7f669a80957888d5
rust_lib_ndk: bf974d06ca7805c0729bf19e400ba9d8a1d67e22
share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b
wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
PODFILE CHECKSUM: 4305caec6b40dde0ae97be1573c53de1882a07e5
COCOAPODS: 1.16.2

View File

@ -8,9 +8,12 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
283FBE47FA6371E399829C24 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D5D6BBF654182E2B43AEE6CF /* Pods_Runner.framework */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
70887CE2EEA82E287D0F5E32 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CF9F2521979EC3F259E9C06 /* Pods_RunnerTests.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
890FE2C12DE5F810002F606E /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 890FE2C02DE5F810002F606E /* GoogleService-Info.plist */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
@ -42,12 +45,19 @@
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
2CF9F2521979EC3F259E9C06 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
3898346B5A5C027C9FA9F7CE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
424535975AD213D6739D7587 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
609868B63798C72BBCCC36BC /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
725BF2C4E11E8D4BA045D24E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
890FE2BD2DE5F0A1002F606E /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
890FE2C02DE5F810002F606E /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -55,19 +65,53 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
B6A06DA2BDF5319EBC10C29D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
D5D6BBF654182E2B43AEE6CF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
FCD68F499269973BDF0E58C7 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
87AF17021AFC993B1F4EBD74 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
70887CE2EEA82E287D0F5E32 /* Pods_RunnerTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EB1CF9000F007C117D /* Frameworks */ = { 97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
283FBE47FA6371E399829C24 /* Pods_Runner.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
/* End PBXFrameworksBuildPhase section */ /* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */ /* Begin PBXGroup section */
065520562861D7FEFAE4BB7B /* Frameworks */ = {
isa = PBXGroup;
children = (
D5D6BBF654182E2B43AEE6CF /* Pods_Runner.framework */,
2CF9F2521979EC3F259E9C06 /* Pods_RunnerTests.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
20030AF4DA59ECDC7C15CF46 /* Pods */ = {
isa = PBXGroup;
children = (
725BF2C4E11E8D4BA045D24E /* Pods-Runner.debug.xcconfig */,
B6A06DA2BDF5319EBC10C29D /* Pods-Runner.release.xcconfig */,
424535975AD213D6739D7587 /* Pods-Runner.profile.xcconfig */,
3898346B5A5C027C9FA9F7CE /* Pods-RunnerTests.debug.xcconfig */,
609868B63798C72BBCCC36BC /* Pods-RunnerTests.release.xcconfig */,
FCD68F499269973BDF0E58C7 /* Pods-RunnerTests.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
331C8082294A63A400263BE5 /* RunnerTests */ = { 331C8082294A63A400263BE5 /* RunnerTests */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -90,10 +134,13 @@
97C146E51CF9000F007C117D = { 97C146E51CF9000F007C117D = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
890FE2C02DE5F810002F606E /* GoogleService-Info.plist */,
9740EEB11CF90186004384FC /* Flutter */, 9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */, 97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */, 97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */, 331C8082294A63A400263BE5 /* RunnerTests */,
20030AF4DA59ECDC7C15CF46 /* Pods */,
065520562861D7FEFAE4BB7B /* Frameworks */,
); );
sourceTree = "<group>"; sourceTree = "<group>";
}; };
@ -109,6 +156,7 @@
97C146F01CF9000F007C117D /* Runner */ = { 97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
890FE2BD2DE5F0A1002F606E /* Runner.entitlements */,
97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
@ -128,8 +176,10 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = ( buildPhases = (
A1414F384F1233363335534B /* [CP] Check Pods Manifest.lock */,
331C807D294A63A400263BE5 /* Sources */, 331C807D294A63A400263BE5 /* Sources */,
331C807F294A63A400263BE5 /* Resources */, 331C807F294A63A400263BE5 /* Resources */,
87AF17021AFC993B1F4EBD74 /* Frameworks */,
); );
buildRules = ( buildRules = (
); );
@ -145,12 +195,15 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = ( buildPhases = (
69481579FDF721E2538F77B8 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */, 9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */, 97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */, 97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */, 97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */, 9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
EE4EB2C0965EE37F595A4359 /* [CP] Embed Pods Frameworks */,
6A0665F4C04FEAEA070B0BE1 /* [CP] Copy Pods Resources */,
); );
buildRules = ( buildRules = (
); );
@ -214,6 +267,7 @@
files = ( files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
890FE2C12DE5F810002F606E /* GoogleService-Info.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
); );
@ -238,6 +292,49 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
}; };
69481579FDF721E2538F77B8 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
6A0665F4C04FEAEA070B0BE1 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = { 9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1; alwaysOutOfDate = 1;
@ -253,6 +350,49 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
}; };
A1414F384F1233363335534B /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
EE4EB2C0965EE37F595A4359 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */ /* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */
@ -361,14 +501,17 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 24VGVR4CHC;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = io.nostrlabs.zapStreamFlutter; PRODUCT_BUNDLE_IDENTIFIER = "io.nostrlabs.zap-stream";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@ -378,6 +521,7 @@
}; };
331C8088294A63A400263BE5 /* Debug */ = { 331C8088294A63A400263BE5 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 3898346B5A5C027C9FA9F7CE /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
@ -395,6 +539,7 @@
}; };
331C8089294A63A400263BE5 /* Release */ = { 331C8089294A63A400263BE5 /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 609868B63798C72BBCCC36BC /* Pods-RunnerTests.release.xcconfig */;
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
@ -410,6 +555,7 @@
}; };
331C808A294A63A400263BE5 /* Profile */ = { 331C808A294A63A400263BE5 /* Profile */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = FCD68F499269973BDF0E58C7 /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
@ -427,7 +573,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@ -484,7 +630,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@ -540,14 +686,17 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 24VGVR4CHC;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = io.nostrlabs.zapStreamFlutter; PRODUCT_BUNDLE_IDENTIFIER = "io.nostrlabs.zap-stream";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@ -562,14 +711,17 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 24VGVR4CHC;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = io.nostrlabs.zapStreamFlutter; PRODUCT_BUNDLE_IDENTIFIER = "io.nostrlabs.zap-stream";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;

View File

@ -4,4 +4,7 @@
<FileRef <FileRef
location = "group:Runner.xcodeproj"> location = "group:Runner.xcodeproj">
</FileRef> </FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace> </Workspace>

View File

@ -1,122 +1 @@
{ {"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -2,16 +2,43 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string> <string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
<string>Zap Stream Flutter</string> <string>zap.stream</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string> <string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleLocalizations</key>
<array>
<string>ar</string>
<string>cs</string>
<string>da</string>
<string>de</string>
<string>el</string>
<string>en</string>
<string>es</string>
<string>fi</string>
<string>fr</string>
<string>hu</string>
<string>it</string>
<string>ja</string>
<string>ko</string>
<string>nl</string>
<string>pl</string>
<string>pt</string>
<string>ro</string>
<string>ru</string>
<string>sv</string>
<string>tr</string>
<string>uk</string>
<string>zh</string>
</array>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>zap_stream_flutter</string> <string>zap_stream_flutter</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
@ -20,10 +47,32 @@
<string>$(FLUTTER_BUILD_NAME)</string> <string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleURLSchemes</key>
<array>
<string>zswc</string>
</array>
</dict>
</array>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string> <string>$(FLUTTER_BUILD_NUMBER)</string>
<key>FirebaseMessagingAutoInitEnabled</key>
<false/>
<key>LSRequiresIPhoneOS</key> <key>LSRequiresIPhoneOS</key>
<true/> <true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
</array>
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>
<string>LaunchScreen</string> <string>LaunchScreen</string>
<key>UIMainStoryboardFile</key> <key>UIMainStoryboardFile</key>
@ -41,9 +90,5 @@
<string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string> <string>UIInterfaceOrientationLandscapeRight</string>
</array> </array>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict> </dict>
</plist> </plist>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:zap.stream</string>
<string>zswc</string>
</array>
</dict>
</plist>

155
lib/app.dart Normal file
View File

@ -0,0 +1,155 @@
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:go_router/go_router.dart';
import 'package:zap_stream_flutter/const.dart';
import 'package:zap_stream_flutter/i18n/strings.g.dart';
import 'package:zap_stream_flutter/pages/category.dart';
import 'package:zap_stream_flutter/pages/hashtag.dart';
import 'package:zap_stream_flutter/pages/home.dart';
import 'package:zap_stream_flutter/pages/login.dart';
import 'package:zap_stream_flutter/pages/login_input.dart';
import 'package:zap_stream_flutter/pages/new_account.dart';
import 'package:zap_stream_flutter/pages/profile.dart';
import 'package:zap_stream_flutter/pages/settings.dart';
import 'package:zap_stream_flutter/pages/settings_profile.dart';
import 'package:zap_stream_flutter/pages/settings_wallet.dart';
import 'package:zap_stream_flutter/pages/stream.dart';
import 'package:zap_stream_flutter/theme.dart';
import 'package:zap_stream_flutter/utils.dart';
import 'package:zap_stream_flutter/widgets/header.dart';
void runZapStream() {
runApp(
MaterialApp.router(
title: "zap.stream",
supportedLocales: AppLocaleUtils.supportedLocales,
localizationsDelegates: GlobalMaterialLocalizations.delegates,
theme: ThemeData.localize(
ThemeData(colorScheme: ColorScheme.dark(), highlightColor: PRIMARY_1),
TextTheme(),
),
routerConfig: GoRouter(
redirect: (context, state) {
// redirect back to the wallet settings page
if (state.uri.scheme == "zswc") {
return "/settings/wallet";
}
return null;
},
routes: [
ShellRoute(
observers: [routeObserver],
builder:
(context, state, child) => SafeArea(
child: Scaffold(body: child, backgroundColor: Colors.black),
),
routes: [
GoRoute(path: "/", builder: (ctx, state) => HomePage()),
ShellRoute(
builder: (context, state, child) {
return Container(
margin: EdgeInsets.only(top: 50),
padding: EdgeInsets.symmetric(horizontal: 5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 20,
children: [
Center(
child: Image.asset("assets/logo.png", height: 150),
),
child,
],
),
);
},
routes: [
GoRoute(
path: "/login",
builder: (ctx, state) => LoginPage(),
routes: [
GoRoute(
path: "key",
builder: (ctx, state) => LoginInputPage(),
),
GoRoute(
path: "new",
builder: (context, state) => NewAccountPage(),
),
],
),
],
),
GoRoute(
path: StreamPage.path,
builder: (ctx, state) {
if (state.extra is StreamEvent) {
return StreamPage(stream: state.extra as StreamEvent);
} else {
return StreamPage.loader(state.pathParameters["id"]!);
}
},
),
GoRoute(
path: "/p/:id",
builder: (ctx, state) {
return ProfilePage(pubkey: state.pathParameters["id"]!);
},
),
GoRoute(
path: "/t/:id",
builder: (context, state) {
return HashtagPage(tag: state.pathParameters["id"]!);
},
),
GoRoute(
path: "/category/:id",
builder: (context, state) {
return CategoryPage(
category: state.pathParameters["id"]!,
info: state.extra as GameInfo?,
);
},
),
ShellRoute(
builder:
(context, state, child) =>
Column(children: [HeaderWidget(), child]),
routes: [
GoRoute(
path: "/settings",
builder: (context, state) => SettingsPage(),
routes: [
GoRoute(
path: "profile",
builder: (context, state) => SettingsProfilePage(),
),
GoRoute(
path: "wallet",
builder: (context, state) => SettingsWalletPage(),
),
],
),
],
),
GoRoute(
path: "/:id",
redirect: (context, state) {
final id = state.pathParameters["id"]!;
if (id.startsWith("naddr1") ||
id.startsWith("nevent1") ||
id.startsWith("note1")) {
return "/e/$id";
} else if (id.startsWith("npub1") ||
id.startsWith("nprofile1")) {
return "/p/$id";
}
return null;
},
),
],
),
],
),
),
);
}

76
lib/const.dart Normal file
View File

@ -0,0 +1,76 @@
import 'package:amberflutter/amberflutter.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:ndk/ndk.dart';
import 'package:ndk_amber/ndk_amber.dart';
import 'package:ndk_objectbox/ndk_objectbox.dart';
import 'package:ndk_rust_verifier/ndk_rust_verifier.dart';
import 'package:zap_stream_flutter/login.dart';
class NoVerify extends EventVerifier {
@override
Future<bool> verify(Nip01Event event) {
return Future.value(true);
}
}
final ndkCache = DbObjectBox();
final eventVerifier = kDebugMode ? NoVerify() : RustEventVerifier();
var ndk = Ndk(
NdkConfig(
eventVerifier: eventVerifier,
cache: ndkCache,
bootstrapRelays: defaultRelays,
//engine: NdkEngine.JIT,
),
);
const userAgent = "zap.stream/1.0";
const defaultRelays = [
"wss://nos.lol",
"wss://relay.damus.io",
"wss://relay.primal.net",
"wss://relay.snort.social",
"wss://relay.fountain.fm",
];
const searchRelays = ["wss://relay.nostr.band", "wss://search.nos.today"];
const nwcRelays = ["wss://relay.getalby.com/v1"];
final loginData = LoginData();
final RouteObserver<ModalRoute<void>> routeObserver =
RouteObserver<ModalRoute<void>>();
final localNotifications = FlutterLocalNotificationsPlugin();
Future<void> initLogin() async {
// reload / cache login data
loginData.addListener(() {
if (loginData.value != null) {
final pubkey = loginData.value!.pubkey;
if (!ndk.accounts.hasAccount(pubkey)) {
switch (loginData.value!.type) {
case AccountType.privateKey:
ndk.accounts.loginPrivateKey(
pubkey: pubkey,
privkey: loginData.value!.privateKey!,
);
case AccountType.externalSigner:
ndk.accounts.loginExternalSigner(
signer: AmberEventSigner(
publicKey: pubkey,
amberFlutterDS: AmberFlutterDS(Amberflutter()),
),
);
case AccountType.publicKey:
ndk.accounts.loginPublicKey(pubkey: pubkey);
}
}
ndk.metadata.loadMetadata(pubkey);
ndk.follows.getContactList(pubkey);
} else {
ndk.accounts.logout();
}
});
await loginData.load();
}

87
lib/firebase_options.dart Normal file
View File

@ -0,0 +1,87 @@
// File generated by FlutterFire CLI.
// ignore_for_file: type=lint
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
import 'package:flutter/foundation.dart'
show defaultTargetPlatform, kIsWeb, TargetPlatform;
/// Default [FirebaseOptions] for use with your Firebase apps.
///
/// Example:
/// ```dart
/// import 'firebase_options.dart';
/// // ...
/// await Firebase.initializeApp(
/// options: DefaultFirebaseOptions.currentPlatform,
/// );
/// ```
class DefaultFirebaseOptions {
static FirebaseOptions get currentPlatform {
if (kIsWeb) {
return web;
}
switch (defaultTargetPlatform) {
case TargetPlatform.android:
return android;
case TargetPlatform.iOS:
return ios;
case TargetPlatform.macOS:
return macos;
case TargetPlatform.windows:
return windows;
case TargetPlatform.linux:
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for linux - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
default:
throw UnsupportedError(
'DefaultFirebaseOptions are not supported for this platform.',
);
}
}
static const FirebaseOptions web = FirebaseOptions(
apiKey: 'AIzaSyDd9GBruNVBv2qrwv0CGvYeby0ALtTlFKk',
appId: '1:953923151748:web:f04633c33f9343b19e9fd1',
messagingSenderId: '953923151748',
projectId: 'nostrlabs',
authDomain: 'nostrlabs.firebaseapp.com',
storageBucket: 'nostrlabs.firebasestorage.app',
);
static const FirebaseOptions android = FirebaseOptions(
apiKey: 'AIzaSyAdpxIN8DR1-mh8MCjHU0mDtaUAk6xda6w',
appId: '1:953923151748:android:8536cdc7f75edc9f9e9fd1',
messagingSenderId: '953923151748',
projectId: 'nostrlabs',
storageBucket: 'nostrlabs.firebasestorage.app',
);
static const FirebaseOptions ios = FirebaseOptions(
apiKey: 'AIzaSyByygErXpki6Q7NXOXTHbRgg3-Tw-KCVO0',
appId: '1:953923151748:ios:aef9c54f556258d39e9fd1',
messagingSenderId: '953923151748',
projectId: 'nostrlabs',
storageBucket: 'nostrlabs.firebasestorage.app',
iosBundleId: 'io.nostrlabs.zap-stream',
);
static const FirebaseOptions macos = FirebaseOptions(
apiKey: 'AIzaSyByygErXpki6Q7NXOXTHbRgg3-Tw-KCVO0',
appId: '1:953923151748:ios:19516d42a1cc02229e9fd1',
messagingSenderId: '953923151748',
projectId: 'nostrlabs',
storageBucket: 'nostrlabs.firebasestorage.app',
iosBundleId: 'com.example.zapStreamFlutter',
);
static const FirebaseOptions windows = FirebaseOptions(
apiKey: 'AIzaSyDd9GBruNVBv2qrwv0CGvYeby0ALtTlFKk',
appId: '1:953923151748:web:6b9a6be6798644909e9fd1',
messagingSenderId: '953923151748',
projectId: 'nostrlabs',
authDomain: 'nostrlabs.firebaseapp.com',
storageBucket: 'nostrlabs.firebasestorage.app',
);
}

View File

@ -0,0 +1,12 @@
import 'package:flutter/material.dart';
import 'package:zap_stream_flutter/app.dart';
import 'package:zap_stream_flutter/const.dart';
import 'package:zap_stream_flutter/i18n/strings.g.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
LocaleSettings.useDeviceLocale();
await initLogin();
runZapStream();
}

482
lib/i18n/strings.g.dart Normal file
View File

@ -0,0 +1,482 @@
/// Generated file. Do not edit.
///
/// Source: lib/i18n
/// To regenerate, run: `dart run slang`
///
/// Locales: 22
/// Strings: 1628 (74 per locale)
///
/// Built on 2025-05-28 at 12:41 UTC
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'package:slang_flutter/slang_flutter.dart';
export 'package:slang_flutter/slang_flutter.dart';
import 'strings_ar.g.dart' deferred as l_ar;
import 'strings_cs.g.dart' deferred as l_cs;
import 'strings_da.g.dart' deferred as l_da;
import 'strings_de.g.dart' deferred as l_de;
import 'strings_el.g.dart' deferred as l_el;
import 'strings_es.g.dart' deferred as l_es;
import 'strings_fi.g.dart' deferred as l_fi;
import 'strings_fr.g.dart' deferred as l_fr;
import 'strings_hu.g.dart' deferred as l_hu;
import 'strings_it.g.dart' deferred as l_it;
import 'strings_ja.g.dart' deferred as l_ja;
import 'strings_ko.g.dart' deferred as l_ko;
import 'strings_nl.g.dart' deferred as l_nl;
import 'strings_pl.g.dart' deferred as l_pl;
import 'strings_pt.g.dart' deferred as l_pt;
import 'strings_ro.g.dart' deferred as l_ro;
import 'strings_ru.g.dart' deferred as l_ru;
import 'strings_sv.g.dart' deferred as l_sv;
import 'strings_tr.g.dart' deferred as l_tr;
import 'strings_uk.g.dart' deferred as l_uk;
import 'strings_zh.g.dart' deferred as l_zh;
part 'strings_en.g.dart';
/// Supported locales.
///
/// Usage:
/// - LocaleSettings.setLocale(AppLocale.en) // set locale
/// - Locale locale = AppLocale.en.flutterLocale // get flutter locale from enum
/// - if (LocaleSettings.currentLocale == AppLocale.en) // locale check
enum AppLocale with BaseAppLocale<AppLocale, Translations> {
en(languageCode: 'en'),
ar(languageCode: 'ar'),
cs(languageCode: 'cs'),
da(languageCode: 'da'),
de(languageCode: 'de'),
el(languageCode: 'el'),
es(languageCode: 'es'),
fi(languageCode: 'fi'),
fr(languageCode: 'fr'),
hu(languageCode: 'hu'),
it(languageCode: 'it'),
ja(languageCode: 'ja'),
ko(languageCode: 'ko'),
nl(languageCode: 'nl'),
pl(languageCode: 'pl'),
pt(languageCode: 'pt'),
ro(languageCode: 'ro'),
ru(languageCode: 'ru'),
sv(languageCode: 'sv'),
tr(languageCode: 'tr'),
uk(languageCode: 'uk'),
zh(languageCode: 'zh');
const AppLocale({
required this.languageCode,
this.scriptCode, // ignore: unused_element, unused_element_parameter
this.countryCode, // ignore: unused_element, unused_element_parameter
});
@override final String languageCode;
@override final String? scriptCode;
@override final String? countryCode;
@override
Future<Translations> build({
Map<String, Node>? overrides,
PluralResolver? cardinalResolver,
PluralResolver? ordinalResolver,
}) async {
switch (this) {
case AppLocale.en:
return TranslationsEn(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ar:
await l_ar.loadLibrary();
return l_ar.TranslationsAr(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.cs:
await l_cs.loadLibrary();
return l_cs.TranslationsCs(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.da:
await l_da.loadLibrary();
return l_da.TranslationsDa(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.de:
await l_de.loadLibrary();
return l_de.TranslationsDe(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.el:
await l_el.loadLibrary();
return l_el.TranslationsEl(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.es:
await l_es.loadLibrary();
return l_es.TranslationsEs(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.fi:
await l_fi.loadLibrary();
return l_fi.TranslationsFi(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.fr:
await l_fr.loadLibrary();
return l_fr.TranslationsFr(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.hu:
await l_hu.loadLibrary();
return l_hu.TranslationsHu(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.it:
await l_it.loadLibrary();
return l_it.TranslationsIt(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ja:
await l_ja.loadLibrary();
return l_ja.TranslationsJa(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ko:
await l_ko.loadLibrary();
return l_ko.TranslationsKo(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.nl:
await l_nl.loadLibrary();
return l_nl.TranslationsNl(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.pl:
await l_pl.loadLibrary();
return l_pl.TranslationsPl(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.pt:
await l_pt.loadLibrary();
return l_pt.TranslationsPt(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ro:
await l_ro.loadLibrary();
return l_ro.TranslationsRo(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ru:
await l_ru.loadLibrary();
return l_ru.TranslationsRu(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.sv:
await l_sv.loadLibrary();
return l_sv.TranslationsSv(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.tr:
await l_tr.loadLibrary();
return l_tr.TranslationsTr(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.uk:
await l_uk.loadLibrary();
return l_uk.TranslationsUk(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.zh:
await l_zh.loadLibrary();
return l_zh.TranslationsZh(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
}
}
@override
Translations buildSync({
Map<String, Node>? overrides,
PluralResolver? cardinalResolver,
PluralResolver? ordinalResolver,
}) {
switch (this) {
case AppLocale.en:
return TranslationsEn(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ar:
return l_ar.TranslationsAr(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.cs:
return l_cs.TranslationsCs(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.da:
return l_da.TranslationsDa(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.de:
return l_de.TranslationsDe(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.el:
return l_el.TranslationsEl(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.es:
return l_es.TranslationsEs(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.fi:
return l_fi.TranslationsFi(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.fr:
return l_fr.TranslationsFr(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.hu:
return l_hu.TranslationsHu(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.it:
return l_it.TranslationsIt(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ja:
return l_ja.TranslationsJa(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ko:
return l_ko.TranslationsKo(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.nl:
return l_nl.TranslationsNl(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.pl:
return l_pl.TranslationsPl(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.pt:
return l_pt.TranslationsPt(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ro:
return l_ro.TranslationsRo(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ru:
return l_ru.TranslationsRu(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.sv:
return l_sv.TranslationsSv(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.tr:
return l_tr.TranslationsTr(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.uk:
return l_uk.TranslationsUk(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.zh:
return l_zh.TranslationsZh(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
}
}
/// Gets current instance managed by [LocaleSettings].
Translations get translations => LocaleSettings.instance.getTranslations(this);
}
/// Method A: Simple
///
/// No rebuild after locale change.
/// Translation happens during initialization of the widget (call of t).
/// Configurable via 'translate_var'.
///
/// Usage:
/// String a = t.someKey.anotherKey;
/// String b = t['someKey.anotherKey']; // Only for edge cases!
Translations get t => LocaleSettings.instance.currentTranslations;
/// Method B: Advanced
///
/// All widgets using this method will trigger a rebuild when locale changes.
/// Use this if you have e.g. a settings page where the user can select the locale during runtime.
///
/// Step 1:
/// wrap your App with
/// TranslationProvider(
/// child: MyApp()
/// );
///
/// Step 2:
/// final t = Translations.of(context); // Get t variable.
/// String a = t.someKey.anotherKey; // Use t variable.
/// String b = t['someKey.anotherKey']; // Only for edge cases!
class TranslationProvider extends BaseTranslationProvider<AppLocale, Translations> {
TranslationProvider({required super.child}) : super(settings: LocaleSettings.instance);
static InheritedLocaleData<AppLocale, Translations> of(BuildContext context) => InheritedLocaleData.of<AppLocale, Translations>(context);
}
/// Method B shorthand via [BuildContext] extension method.
/// Configurable via 'translate_var'.
///
/// Usage (e.g. in a widget's build method):
/// context.t.someKey.anotherKey
extension BuildContextTranslationsExtension on BuildContext {
Translations get t => TranslationProvider.of(this).translations;
}
/// Manages all translation instances and the current locale
class LocaleSettings extends BaseFlutterLocaleSettings<AppLocale, Translations> {
LocaleSettings._() : super(
utils: AppLocaleUtils.instance,
lazy: true,
);
static final instance = LocaleSettings._();
// static aliases (checkout base methods for documentation)
static AppLocale get currentLocale => instance.currentLocale;
static Stream<AppLocale> getLocaleStream() => instance.getLocaleStream();
static Future<AppLocale> setLocale(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale);
static Future<AppLocale> setLocaleRaw(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRaw(rawLocale, listenToDeviceLocale: listenToDeviceLocale);
static Future<AppLocale> useDeviceLocale() => instance.useDeviceLocale();
static Future<void> setPluralResolver({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolver(
language: language,
locale: locale,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
// synchronous versions
static AppLocale setLocaleSync(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocaleSync(locale, listenToDeviceLocale: listenToDeviceLocale);
static AppLocale setLocaleRawSync(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRawSync(rawLocale, listenToDeviceLocale: listenToDeviceLocale);
static AppLocale useDeviceLocaleSync() => instance.useDeviceLocaleSync();
static void setPluralResolverSync({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolverSync(
language: language,
locale: locale,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
}
/// Provides utility functions without any side effects.
class AppLocaleUtils extends BaseAppLocaleUtils<AppLocale, Translations> {
AppLocaleUtils._() : super(
baseLocale: AppLocale.en,
locales: AppLocale.values,
);
static final instance = AppLocaleUtils._();
// static aliases (checkout base methods for documentation)
static AppLocale parse(String rawLocale) => instance.parse(rawLocale);
static AppLocale parseLocaleParts({required String languageCode, String? scriptCode, String? countryCode}) => instance.parseLocaleParts(languageCode: languageCode, scriptCode: scriptCode, countryCode: countryCode);
static AppLocale findDeviceLocale() => instance.findDeviceLocale();
static List<Locale> get supportedLocales => instance.supportedLocales;
static List<String> get supportedLocalesRaw => instance.supportedLocalesRaw;
}

469
lib/i18n/strings_ar.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsAr extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsAr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.ar,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <ar>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsAr _root = this; // ignore: unused_field
@override
TranslationsAr $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsAr(meta: meta ?? this.$meta);
// Translations
/// نص يطالب المستخدم بالضغط على العنصر النائب للصورة الرمزية لبدء التحميل
@override String get upload_avatar => 'تحميل الصورة الرمزية';
/// التوجه فوق اللافتات العلوية المدرجة من قبل zaps
@override String get most_zapped_streamers => 'معظم اللافتات التي يتم بثها';
/// لم يتم العثور على مستخدم عند البحث
@override String get no_user_found => 'لم يتم العثور على مستخدم';
/// مستخدم مجهول
@override String get anon => 'هوية مخفية';
/// عدد مشاهدي البث
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ar'))(n,
one: '1 مشاهد',
other: '${NumberFormat.decimalPattern('ar').format(n)} المشاهدين',
);
@override late final _TranslationsStreamAr stream = _TranslationsStreamAr._(_root);
@override late final _TranslationsGoalAr goal = _TranslationsGoalAr._(_root);
@override late final _TranslationsButtonAr button = _TranslationsButtonAr._(_root);
@override late final _TranslationsEmbedAr embed = _TranslationsEmbedAr._(_root);
/// العناوين في قوائم البث حسب نوع البث المباشر/المُنتهي/المخطط له وما إلى ذلك.
@override late final _TranslationsStreamListAr stream_list = _TranslationsStreamListAr._(_root);
@override late final _TranslationsZapAr zap = _TranslationsZapAr._(_root);
@override late final _TranslationsProfileAr profile = _TranslationsProfileAr._(_root);
@override late final _TranslationsSettingsAr settings = _TranslationsSettingsAr._(_root);
@override late final _TranslationsLoginAr login = _TranslationsLoginAr._(_root);
}
// Path: stream
class _TranslationsStreamAr extends TranslationsStreamEn {
_TranslationsStreamAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusAr status = _TranslationsStreamStatusAr._(_root);
@override String started({required Object timestamp}) => 'بدأ ${timestamp}';
@override late final _TranslationsStreamChatAr chat = _TranslationsStreamChatAr._(_root);
}
// Path: goal
class _TranslationsGoalAr extends TranslationsGoalEn {
_TranslationsGoalAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'الهدف: ${amount}';
@override String remaining({required Object amount}) => 'المتبقي: ${amount}';
@override String get complete => 'مكتمل';
}
// Path: button
class _TranslationsButtonAr extends TranslationsButtonEn {
_TranslationsButtonAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
/// نص الزر الخاص بزر تسجيل الدخول
@override String get login => 'تسجيل الدخول';
@override String get logout => 'تسجيل الخروج';
@override String get edit_profile => 'تعديل الملف الشخصي';
/// نص الزر الخاص بزر المتابعة
@override String get follow => 'متابعة';
/// نص الزر لزر إلغاء المتابعة
@override String get unfollow => 'الغاء المتابعة';
@override String get mute => 'كتم';
@override String get unmute => 'رفع الكتم';
@override String get share => 'مشاركة';
@override String get save => 'حفظ';
@override String get connect => 'الاتصال';
@override String get settings => 'الإعدادات';
}
// Path: embed
class _TranslationsEmbedAr extends TranslationsEmbedEn {
_TranslationsEmbedAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'مقال بقلم ${name}';
@override String note_by({required Object name}) => 'ملاحظة من ${name}';
@override String live_stream_by({required Object name}) => 'بث مباشر من ${name}';
}
// Path: stream_list
class _TranslationsStreamListAr extends TranslationsStreamListEn {
_TranslationsStreamListAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get following => 'المتابَعون';
@override String get live => 'بث مباشر';
@override String get planned => 'مخطط';
@override String get ended => 'انتهى';
}
// Path: zap
class _TranslationsZapAr extends TranslationsZapEn {
_TranslationsZapAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'زاب ${name}';
@override String get custom_amount => 'المبلغ المخصص';
@override String get confirm => 'تأكيد';
@override String get comment => 'تعليق';
@override String button_zap_ready({required Object amount}) => 'أومض ${amount} ساتوشي';
@override String get button_zap => 'زاب';
@override String get button_open_wallet => 'فتح في المحفظة';
@override String get button_connect_wallet => 'توصيل المحفظة';
@override String get copy => 'نسخ إلى الحافظة';
@override late final _TranslationsZapErrorAr error = _TranslationsZapErrorAr._(_root);
}
// Path: profile
class _TranslationsProfileAr extends TranslationsProfileEn {
_TranslationsProfileAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get past_streams => 'التدفقات السابقة';
}
// Path: settings
class _TranslationsSettingsAr extends TranslationsSettingsEn {
_TranslationsSettingsAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get button_profile => 'تعديل الملف الشخصي';
@override String get button_wallet => 'إعدادات المحفظة';
@override late final _TranslationsSettingsProfileAr profile = _TranslationsSettingsProfileAr._(_root);
@override late final _TranslationsSettingsWalletAr wallet = _TranslationsSettingsWalletAr._(_root);
}
// Path: login
class _TranslationsLoginAr extends TranslationsLoginEn {
_TranslationsLoginAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get username => 'اسم المستخدم';
@override String get amber => 'تسجيل الدخول مع آمبر';
@override String get key => 'تسجيل الدخول بالمفتاح';
@override String get create => 'إنشاء حساب';
@override late final _TranslationsLoginErrorAr error = _TranslationsLoginErrorAr._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusAr extends TranslationsStreamStatusEn {
_TranslationsStreamStatusAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get live => 'بث مباشر';
@override String get ended => 'انتهى';
@override String get planned => 'مخطط';
}
// Path: stream.chat
class _TranslationsStreamChatAr extends TranslationsStreamChatEn {
_TranslationsStreamChatAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get disabled => 'تم تعطيل الدردشة';
@override String disabled_timeout({required Object time}) => 'تنتهي المهلة: ${time}';
/// رسالة دردشة تظهر أحداث المهلة
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' انتهى الوقت '),
user,
const TextSpan(text: ' لـ '),
time,
]);
/// تيار انتهى التذييل في أسفل الدردشة
@override String get ended => 'انتهى البث';
/// رسالة الدردشة التي تُظهر البث المباشر
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' انطلق '),
amount,
const TextSpan(text: ' ساتس'),
]);
@override late final _TranslationsStreamChatWriteAr write = _TranslationsStreamChatWriteAr._(_root);
@override late final _TranslationsStreamChatBadgeAr badge = _TranslationsStreamChatBadgeAr._(_root);
@override late final _TranslationsStreamChatRaidAr raid = _TranslationsStreamChatRaidAr._(_root);
}
// Path: zap.error
class _TranslationsZapErrorAr extends TranslationsZapErrorEn {
_TranslationsZapErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'مبلغ مخصص غير صالح';
@override String get no_wallet => 'لا توجد محفظة برق مثبتة';
@override String get no_lud16 => 'لم يتم العثور على عنوان البرق';
}
// Path: settings.profile
class _TranslationsSettingsProfileAr extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get display_name => 'اسم العرض';
@override String get about => 'نبذة عن';
@override String get nip05 => 'عنوان نوستر';
@override String get lud16 => 'عنوان البرق';
@override late final _TranslationsSettingsProfileErrorAr error = _TranslationsSettingsProfileErrorAr._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletAr extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'توصيل المحفظة (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'محفظة قطع الاتصال';
@override String get connect_1tap => '1-التوصيل بنقرة 1';
@override String get paste => 'لصق عنوان URL';
@override late final _TranslationsSettingsWalletErrorAr error = _TranslationsSettingsWalletErrorAr._(_root);
}
// Path: login.error
class _TranslationsLoginErrorAr extends TranslationsLoginErrorEn {
_TranslationsLoginErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'مفتاح غير صالح';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteAr extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
/// التسمية على مربع إدخال رسالة الدردشة
@override String get label => 'اكتب رسالة';
/// تظهر رسالة إدخال الدردشة عندما يقوم المستخدم بتسجيل الدخول باستخدام مفتاح الحانة فقط
@override String get no_signer => 'لا يمكن كتابة الرسائل باستخدام تسجيل الدخول إلى npub';
/// تظهر رسالة إدخال الدردشة عند تسجيل خروج المستخدم من المحادثة
@override String get login => 'الرجاء تسجيل الدخول لإرسال الرسائل';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeAr extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
/// العنوان فوق قائمة المستخدمين الذين حصلوا على شارة
@override String get awarded_to => 'مُنحت الجائزة لـ';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidAr extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
/// رسالة غارة الدردشة إلى دفق آخر
@override String to({required Object name}) => 'التصفح ${name}';
/// رسالة غارة الدردشة من دفق آخر
@override String from({required Object name}) => 'RAID من ${name}';
/// مؤقت العد التنازلي للقيادة التلقائية
@override String countdown({required Object time}) => 'الإغارة في ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorAr extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get logged_out => 'لا يمكن تحرير ملف التعريف عند تسجيل الخروج';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorAr extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get logged_out => 'لا يمكن الاتصال بالمحفظة عند تسجيل الخروج';
@override String get nwc_auth_event_not_found => 'لم يتم العثور على حدث مصادقة المحفظة';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsAr {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'تحميل الصورة الرمزية';
case 'most_zapped_streamers': return 'معظم اللافتات التي يتم بثها';
case 'no_user_found': return 'لم يتم العثور على مستخدم';
case 'anon': return 'هوية مخفية';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ar'))(n,
one: '1 مشاهد',
other: '${NumberFormat.decimalPattern('ar').format(n)} المشاهدين',
);
case 'stream.status.live': return 'بث مباشر';
case 'stream.status.ended': return 'انتهى';
case 'stream.status.planned': return 'مخطط';
case 'stream.started': return ({required Object timestamp}) => 'بدأ ${timestamp}';
case 'stream.chat.disabled': return 'تم تعطيل الدردشة';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'تنتهي المهلة: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' انتهى الوقت '),
user,
const TextSpan(text: ' لـ '),
time,
]);
case 'stream.chat.ended': return 'انتهى البث';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' انطلق '),
amount,
const TextSpan(text: ' ساتس'),
]);
case 'stream.chat.write.label': return 'اكتب رسالة';
case 'stream.chat.write.no_signer': return 'لا يمكن كتابة الرسائل باستخدام تسجيل الدخول إلى npub';
case 'stream.chat.write.login': return 'الرجاء تسجيل الدخول لإرسال الرسائل';
case 'stream.chat.badge.awarded_to': return 'مُنحت الجائزة لـ';
case 'stream.chat.raid.to': return ({required Object name}) => 'التصفح ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID من ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'الإغارة في ${time}';
case 'goal.title': return ({required Object amount}) => 'الهدف: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'المتبقي: ${amount}';
case 'goal.complete': return 'مكتمل';
case 'button.login': return 'تسجيل الدخول';
case 'button.logout': return 'تسجيل الخروج';
case 'button.edit_profile': return 'تعديل الملف الشخصي';
case 'button.follow': return 'متابعة';
case 'button.unfollow': return 'الغاء المتابعة';
case 'button.mute': return 'كتم';
case 'button.unmute': return 'رفع الكتم';
case 'button.share': return 'مشاركة';
case 'button.save': return 'حفظ';
case 'button.connect': return 'الاتصال';
case 'button.settings': return 'الإعدادات';
case 'embed.article_by': return ({required Object name}) => 'مقال بقلم ${name}';
case 'embed.note_by': return ({required Object name}) => 'ملاحظة من ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'بث مباشر من ${name}';
case 'stream_list.following': return 'المتابَعون';
case 'stream_list.live': return 'بث مباشر';
case 'stream_list.planned': return 'مخطط';
case 'stream_list.ended': return 'انتهى';
case 'zap.title': return ({required Object name}) => 'زاب ${name}';
case 'zap.custom_amount': return 'المبلغ المخصص';
case 'zap.confirm': return 'تأكيد';
case 'zap.comment': return 'تعليق';
case 'zap.button_zap_ready': return ({required Object amount}) => 'أومض ${amount} ساتوشي';
case 'zap.button_zap': return 'زاب';
case 'zap.button_open_wallet': return 'فتح في المحفظة';
case 'zap.button_connect_wallet': return 'توصيل المحفظة';
case 'zap.copy': return 'نسخ إلى الحافظة';
case 'zap.error.invalid_custom_amount': return 'مبلغ مخصص غير صالح';
case 'zap.error.no_wallet': return 'لا توجد محفظة برق مثبتة';
case 'zap.error.no_lud16': return 'لم يتم العثور على عنوان البرق';
case 'profile.past_streams': return 'التدفقات السابقة';
case 'settings.button_profile': return 'تعديل الملف الشخصي';
case 'settings.button_wallet': return 'إعدادات المحفظة';
case 'settings.profile.display_name': return 'اسم العرض';
case 'settings.profile.about': return 'نبذة عن';
case 'settings.profile.nip05': return 'عنوان نوستر';
case 'settings.profile.lud16': return 'عنوان البرق';
case 'settings.profile.error.logged_out': return 'لا يمكن تحرير ملف التعريف عند تسجيل الخروج';
case 'settings.wallet.connect_wallet': return 'توصيل المحفظة (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'محفظة قطع الاتصال';
case 'settings.wallet.connect_1tap': return '1-التوصيل بنقرة 1';
case 'settings.wallet.paste': return 'لصق عنوان URL';
case 'settings.wallet.error.logged_out': return 'لا يمكن الاتصال بالمحفظة عند تسجيل الخروج';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'لم يتم العثور على حدث مصادقة المحفظة';
case 'login.username': return 'اسم المستخدم';
case 'login.amber': return 'تسجيل الدخول مع آمبر';
case 'login.key': return 'تسجيل الدخول بالمفتاح';
case 'login.create': return 'إنشاء حساب';
case 'login.error.invalid_key': return 'مفتاح غير صالح';
default: return null;
}
}
}

469
lib/i18n/strings_cs.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsCs extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsCs({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.cs,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <cs>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsCs _root = this; // ignore: unused_field
@override
TranslationsCs $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsCs(meta: meta ?? this.$meta);
// Translations
/// Text vyzývající uživatele, aby stiskl zástupný symbol avatara pro zahájení nahrávání
@override String get upload_avatar => 'Nahrát avatar';
/// Směřování přes uvedené horní streamery podle zaps
@override String get most_zapped_streamers => 'Nejvíce zapnutých streamerů';
/// Při vyhledávání nebyl nalezen žádný uživatel
@override String get no_user_found => 'Nebyl nalezen žádný uživatel';
/// Anonymní uživatel
@override String get anon => 'Anon';
/// Počet diváků streamu
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n,
one: '1 divák',
other: '${NumberFormat.decimalPattern('cs').format(n)} diváků',
);
@override late final _TranslationsStreamCs stream = _TranslationsStreamCs._(_root);
@override late final _TranslationsGoalCs goal = _TranslationsGoalCs._(_root);
@override late final _TranslationsButtonCs button = _TranslationsButtonCs._(_root);
@override late final _TranslationsEmbedCs embed = _TranslationsEmbedCs._(_root);
/// Nadpisy v seznamech proudů podle typu proudu živě/konec/plánovaně atd.
@override late final _TranslationsStreamListCs stream_list = _TranslationsStreamListCs._(_root);
@override late final _TranslationsZapCs zap = _TranslationsZapCs._(_root);
@override late final _TranslationsProfileCs profile = _TranslationsProfileCs._(_root);
@override late final _TranslationsSettingsCs settings = _TranslationsSettingsCs._(_root);
@override late final _TranslationsLoginCs login = _TranslationsLoginCs._(_root);
}
// Path: stream
class _TranslationsStreamCs extends TranslationsStreamEn {
_TranslationsStreamCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusCs status = _TranslationsStreamStatusCs._(_root);
@override String started({required Object timestamp}) => 'Založeno ${timestamp}';
@override late final _TranslationsStreamChatCs chat = _TranslationsStreamChatCs._(_root);
}
// Path: goal
class _TranslationsGoalCs extends TranslationsGoalEn {
_TranslationsGoalCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Cíl: ${amount}';
@override String remaining({required Object amount}) => 'Zbývá: ${amount}';
@override String get complete => 'KOMPLETNÍ';
}
// Path: button
class _TranslationsButtonCs extends TranslationsButtonEn {
_TranslationsButtonCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
/// Text tlačítka pro přihlašovací tlačítko
@override String get login => 'Přihlášení';
@override String get logout => 'Odhlášení';
@override String get edit_profile => 'Upravit profil';
/// Text tlačítka pro tlačítko sledovat
@override String get follow => 'Sledujte';
/// Text tlačítka pro zrušení sledování
@override String get unfollow => 'Zrušit sledování';
@override String get mute => 'Ztlumit';
@override String get unmute => 'Zrušit ztlumení';
@override String get share => 'Sdílet';
@override String get save => 'Uložit';
@override String get connect => 'Připojení';
@override String get settings => 'Nastavení';
}
// Path: embed
class _TranslationsEmbedCs extends TranslationsEmbedEn {
_TranslationsEmbedCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Článek na ${name}';
@override String note_by({required Object name}) => 'Poznámka ${name}';
@override String live_stream_by({required Object name}) => 'Přímý přenos na adrese ${name}';
}
// Path: stream_list
class _TranslationsStreamListCs extends TranslationsStreamListEn {
_TranslationsStreamListCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get following => 'Po';
@override String get live => 'Živě';
@override String get planned => 'Plánované';
@override String get ended => 'Ukončeno';
}
// Path: zap
class _TranslationsZapCs extends TranslationsZapEn {
_TranslationsZapCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Vlastní částka';
@override String get confirm => 'Potvrďte';
@override String get comment => 'Komentář:';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Otevřít v peněžence';
@override String get button_connect_wallet => 'Připojení peněženky';
@override String get copy => 'Zkopírováno do schránky';
@override late final _TranslationsZapErrorCs error = _TranslationsZapErrorCs._(_root);
}
// Path: profile
class _TranslationsProfileCs extends TranslationsProfileEn {
_TranslationsProfileCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Minulé proudy';
}
// Path: settings
class _TranslationsSettingsCs extends TranslationsSettingsEn {
_TranslationsSettingsCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Upravit profil';
@override String get button_wallet => 'Nastavení peněženky';
@override late final _TranslationsSettingsProfileCs profile = _TranslationsSettingsProfileCs._(_root);
@override late final _TranslationsSettingsWalletCs wallet = _TranslationsSettingsWalletCs._(_root);
}
// Path: login
class _TranslationsLoginCs extends TranslationsLoginEn {
_TranslationsLoginCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get username => 'Uživatelské jméno';
@override String get amber => 'Přihlášení pomocí Amber';
@override String get key => 'Přihlášení pomocí klíče';
@override String get create => 'Vytvořit účet';
@override late final _TranslationsLoginErrorCs error = _TranslationsLoginErrorCs._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusCs extends TranslationsStreamStatusEn {
_TranslationsStreamStatusCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get live => 'LIVE';
@override String get ended => 'KONEC';
@override String get planned => 'PLÁNOVANÉ';
}
// Path: stream.chat
class _TranslationsStreamChatCs extends TranslationsStreamChatEn {
_TranslationsStreamChatCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT ZRUŠEN';
@override String disabled_timeout({required Object time}) => 'Časový limit vyprší: ${time}';
/// Zpráva chatu zobrazující události časového limitu
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' vypršel čas '),
user,
const TextSpan(text: ' pro '),
time,
]);
/// Zápatí v dolní části chatu ukončilo stream
@override String get ended => 'STREAM UKONČEN';
/// Zpráva chatu zobrazující proud zaps
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' Zapped '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteCs write = _TranslationsStreamChatWriteCs._(_root);
@override late final _TranslationsStreamChatBadgeCs badge = _TranslationsStreamChatBadgeCs._(_root);
@override late final _TranslationsStreamChatRaidCs raid = _TranslationsStreamChatRaidCs._(_root);
}
// Path: zap.error
class _TranslationsZapErrorCs extends TranslationsZapErrorEn {
_TranslationsZapErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Neplatná vlastní částka';
@override String get no_wallet => 'Není nainstalována blesková peněženka';
@override String get no_lud16 => 'Nebyla nalezena žádná adresa blesku';
}
// Path: settings.profile
class _TranslationsSettingsProfileCs extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get display_name => 'Zobrazení názvu';
@override String get about => 'O stránkách';
@override String get nip05 => 'Adresa Nostr';
@override String get lud16 => 'Adresa blesku';
@override late final _TranslationsSettingsProfileErrorCs error = _TranslationsSettingsProfileErrorCs._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletCs extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Odpojení peněženky';
@override String get connect_1tap => 'Připojení 1 kohoutku';
@override String get paste => 'Vložit adresu URL';
@override late final _TranslationsSettingsWalletErrorCs error = _TranslationsSettingsWalletErrorCs._(_root);
}
// Path: login.error
class _TranslationsLoginErrorCs extends TranslationsLoginErrorEn {
_TranslationsLoginErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Neplatný klíč';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteCs extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
/// Popisek na vstupním poli zprávy chatu
@override String get label => 'Napište zprávu';
/// Vstupní zpráva chatu se zobrazí, když je uživatel přihlášen pouze pomocí pubkey
@override String get no_signer => 'Nelze psát zprávy s přihlášením npub';
/// Vstupní zpráva chatu zobrazená při odhlášení uživatele
@override String get login => 'Pro odesílání zpráv se prosím přihlaste';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeCs extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
/// Záhlaví nad seznamem uživatelů, kterým byl udělen odznak
@override String get awarded_to => 'Uděleno:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidCs extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
/// Zpráva o nájezdu chatu do jiného proudu
@override String to({required Object name}) => 'RAIDING ${name}';
/// Zpráva o nájezdu chatu z jiného proudu
@override String from({required Object name}) => 'RAID Z ${name}';
/// Časovač odpočítávání pro automatický nájezd
@override String countdown({required Object time}) => 'Nájezdy na ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorCs extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Nelze upravit profil, když je odhlášený';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorCs extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Nelze se připojit k peněžence, když jste odhlášeni';
@override String get nwc_auth_event_not_found => 'Nebyla nalezena žádná událost autentizace peněženky';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsCs {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Nahrát avatar';
case 'most_zapped_streamers': return 'Nejvíce zapnutých streamerů';
case 'no_user_found': return 'Nebyl nalezen žádný uživatel';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n,
one: '1 divák',
other: '${NumberFormat.decimalPattern('cs').format(n)} diváků',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'KONEC';
case 'stream.status.planned': return 'PLÁNOVANÉ';
case 'stream.started': return ({required Object timestamp}) => 'Založeno ${timestamp}';
case 'stream.chat.disabled': return 'CHAT ZRUŠEN';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Časový limit vyprší: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' vypršel čas '),
user,
const TextSpan(text: ' pro '),
time,
]);
case 'stream.chat.ended': return 'STREAM UKONČEN';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' Zapped '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Napište zprávu';
case 'stream.chat.write.no_signer': return 'Nelze psát zprávy s přihlášením npub';
case 'stream.chat.write.login': return 'Pro odesílání zpráv se prosím přihlaste';
case 'stream.chat.badge.awarded_to': return 'Uděleno:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID Z ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Nájezdy na ${time}';
case 'goal.title': return ({required Object amount}) => 'Cíl: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Zbývá: ${amount}';
case 'goal.complete': return 'KOMPLETNÍ';
case 'button.login': return 'Přihlášení';
case 'button.logout': return 'Odhlášení';
case 'button.edit_profile': return 'Upravit profil';
case 'button.follow': return 'Sledujte';
case 'button.unfollow': return 'Zrušit sledování';
case 'button.mute': return 'Ztlumit';
case 'button.unmute': return 'Zrušit ztlumení';
case 'button.share': return 'Sdílet';
case 'button.save': return 'Uložit';
case 'button.connect': return 'Připojení';
case 'button.settings': return 'Nastavení';
case 'embed.article_by': return ({required Object name}) => 'Článek na ${name}';
case 'embed.note_by': return ({required Object name}) => 'Poznámka ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Přímý přenos na adrese ${name}';
case 'stream_list.following': return 'Po';
case 'stream_list.live': return 'Živě';
case 'stream_list.planned': return 'Plánované';
case 'stream_list.ended': return 'Ukončeno';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Vlastní částka';
case 'zap.confirm': return 'Potvrďte';
case 'zap.comment': return 'Komentář:';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Otevřít v peněžence';
case 'zap.button_connect_wallet': return 'Připojení peněženky';
case 'zap.copy': return 'Zkopírováno do schránky';
case 'zap.error.invalid_custom_amount': return 'Neplatná vlastní částka';
case 'zap.error.no_wallet': return 'Není nainstalována blesková peněženka';
case 'zap.error.no_lud16': return 'Nebyla nalezena žádná adresa blesku';
case 'profile.past_streams': return 'Minulé proudy';
case 'settings.button_profile': return 'Upravit profil';
case 'settings.button_wallet': return 'Nastavení peněženky';
case 'settings.profile.display_name': return 'Zobrazení názvu';
case 'settings.profile.about': return 'O stránkách';
case 'settings.profile.nip05': return 'Adresa Nostr';
case 'settings.profile.lud16': return 'Adresa blesku';
case 'settings.profile.error.logged_out': return 'Nelze upravit profil, když je odhlášený';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Odpojení peněženky';
case 'settings.wallet.connect_1tap': return 'Připojení 1 kohoutku';
case 'settings.wallet.paste': return 'Vložit adresu URL';
case 'settings.wallet.error.logged_out': return 'Nelze se připojit k peněžence, když jste odhlášeni';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Nebyla nalezena žádná událost autentizace peněženky';
case 'login.username': return 'Uživatelské jméno';
case 'login.amber': return 'Přihlášení pomocí Amber';
case 'login.key': return 'Přihlášení pomocí klíče';
case 'login.create': return 'Vytvořit účet';
case 'login.error.invalid_key': return 'Neplatný klíč';
default: return null;
}
}
}

469
lib/i18n/strings_da.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsDa extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsDa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.da,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <da>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsDa _root = this; // ignore: unused_field
@override
TranslationsDa $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsDa(meta: meta ?? this.$meta);
// Translations
/// Tekst, der beder brugeren om at trykke på avatar-pladsholderen for at begynde at uploade
@override String get upload_avatar => 'Upload avatar';
/// På vej over listede topstreamere af zaps
@override String get most_zapped_streamers => 'De fleste zappede streamere';
/// Ingen bruger fundet ved søgning
@override String get no_user_found => 'Ingen bruger fundet';
/// En anonym bruger
@override String get anon => 'Anon';
/// Antal seere af streamingen
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n,
one: '1 seer',
other: '${NumberFormat.decimalPattern('da').format(n)} seere',
);
@override late final _TranslationsStreamDa stream = _TranslationsStreamDa._(_root);
@override late final _TranslationsGoalDa goal = _TranslationsGoalDa._(_root);
@override late final _TranslationsButtonDa button = _TranslationsButtonDa._(_root);
@override late final _TranslationsEmbedDa embed = _TranslationsEmbedDa._(_root);
/// Overskrifter på streaminglister efter streamingtype live/afsluttet/planlagt osv.
@override late final _TranslationsStreamListDa stream_list = _TranslationsStreamListDa._(_root);
@override late final _TranslationsZapDa zap = _TranslationsZapDa._(_root);
@override late final _TranslationsProfileDa profile = _TranslationsProfileDa._(_root);
@override late final _TranslationsSettingsDa settings = _TranslationsSettingsDa._(_root);
@override late final _TranslationsLoginDa login = _TranslationsLoginDa._(_root);
}
// Path: stream
class _TranslationsStreamDa extends TranslationsStreamEn {
_TranslationsStreamDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusDa status = _TranslationsStreamStatusDa._(_root);
@override String started({required Object timestamp}) => 'Startet ${timestamp}';
@override late final _TranslationsStreamChatDa chat = _TranslationsStreamChatDa._(_root);
}
// Path: goal
class _TranslationsGoalDa extends TranslationsGoalEn {
_TranslationsGoalDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Mål: ${amount}';
@override String remaining({required Object amount}) => 'Resterende: ${amount}';
@override String get complete => 'KOMPLET';
}
// Path: button
class _TranslationsButtonDa extends TranslationsButtonEn {
_TranslationsButtonDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
/// Knaptekst til login-knappen
@override String get login => 'Login';
@override String get logout => 'Log ud';
@override String get edit_profile => 'Rediger profil';
/// Knaptekst til følg-knappen
@override String get follow => 'Følg med';
/// Knaptekst til unfollow-knappen
@override String get unfollow => 'Ikke følge';
@override String get mute => 'Dæmpet';
@override String get unmute => 'Slå lyden fra';
@override String get share => 'Del';
@override String get save => 'Gemme';
@override String get connect => 'Opret forbindelse';
@override String get settings => 'Indstillinger';
}
// Path: embed
class _TranslationsEmbedDa extends TranslationsEmbedEn {
_TranslationsEmbedDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Artikel af ${name}';
@override String note_by({required Object name}) => 'Note fra ${name}';
@override String live_stream_by({required Object name}) => 'Livestream på ${name}';
}
// Path: stream_list
class _TranslationsStreamListDa extends TranslationsStreamListEn {
_TranslationsStreamListDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get following => 'Efterfølgende';
@override String get live => 'Live';
@override String get planned => 'Planlagt';
@override String get ended => 'Afsluttet';
}
// Path: zap
class _TranslationsZapDa extends TranslationsZapEn {
_TranslationsZapDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Brugerdefineret beløb';
@override String get confirm => 'Bekræft';
@override String get comment => 'Kommentar';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Åbn i tegnebogen';
@override String get button_connect_wallet => 'Forbind tegnebog';
@override String get copy => 'Kopieret til udklipsholder';
@override late final _TranslationsZapErrorDa error = _TranslationsZapErrorDa._(_root);
}
// Path: profile
class _TranslationsProfileDa extends TranslationsProfileEn {
_TranslationsProfileDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Tidligere strømme';
}
// Path: settings
class _TranslationsSettingsDa extends TranslationsSettingsEn {
_TranslationsSettingsDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Rediger profil';
@override String get button_wallet => 'Indstillinger for tegnebog';
@override late final _TranslationsSettingsProfileDa profile = _TranslationsSettingsProfileDa._(_root);
@override late final _TranslationsSettingsWalletDa wallet = _TranslationsSettingsWalletDa._(_root);
}
// Path: login
class _TranslationsLoginDa extends TranslationsLoginEn {
_TranslationsLoginDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get username => 'Brugernavn';
@override String get amber => 'Log ind med Amber';
@override String get key => 'Login med nøgle';
@override String get create => 'Opret konto';
@override late final _TranslationsLoginErrorDa error = _TranslationsLoginErrorDa._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusDa extends TranslationsStreamStatusEn {
_TranslationsStreamStatusDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get live => 'LIVE';
@override String get ended => 'AFSLUTTET';
@override String get planned => 'PLANLAGT';
}
// Path: stream.chat
class _TranslationsStreamChatDa extends TranslationsStreamChatEn {
_TranslationsStreamChatDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DEAKTIVERET';
@override String disabled_timeout({required Object time}) => 'Timeout udløber: ${time}';
/// Chatbesked, der viser timeout-hændelser
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' udløbet '),
user,
const TextSpan(text: ' for '),
time,
]);
/// Stream afsluttede footer i bunden af chatten
@override String get ended => 'STREAM AFSLUTTET';
/// Chatbesked, der viser stream-zaps
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zappet '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteDa write = _TranslationsStreamChatWriteDa._(_root);
@override late final _TranslationsStreamChatBadgeDa badge = _TranslationsStreamChatBadgeDa._(_root);
@override late final _TranslationsStreamChatRaidDa raid = _TranslationsStreamChatRaidDa._(_root);
}
// Path: zap.error
class _TranslationsZapErrorDa extends TranslationsZapErrorEn {
_TranslationsZapErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Ugyldigt brugerdefineret beløb';
@override String get no_wallet => 'Ingen lightning wallet installeret';
@override String get no_lud16 => 'Ingen lyn-adresse fundet';
}
// Path: settings.profile
class _TranslationsSettingsProfileDa extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get display_name => 'Vis navn';
@override String get about => 'Omkring';
@override String get nip05 => 'Nostr-adresse';
@override String get lud16 => 'Adresse for lynnedslag';
@override late final _TranslationsSettingsProfileErrorDa error = _TranslationsSettingsProfileErrorDa._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletDa extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Afbryd forbindelsen til tegnebogen';
@override String get connect_1tap => '1-Tap-forbindelse';
@override String get paste => 'Indsæt URL';
@override late final _TranslationsSettingsWalletErrorDa error = _TranslationsSettingsWalletErrorDa._(_root);
}
// Path: login.error
class _TranslationsLoginErrorDa extends TranslationsLoginErrorEn {
_TranslationsLoginErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Ugyldig nøgle';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteDa extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
/// Label på chatbeskedens inputfelt
@override String get label => 'Skriv en besked';
/// Chat-inputmeddelelse vises, når brugeren kun er logget ind med pubkey
@override String get no_signer => 'Kan ikke skrive beskeder med npub-login';
/// Chat-inputmeddelelse vises, når brugeren er logget ud
@override String get login => 'Log ind for at sende beskeder';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeDa extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
/// Overskrift over liste over brugere, der har fået tildelt et badge
@override String get awarded_to => 'Tildelt til:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidDa extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
/// Chat raid-besked til en anden stream
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid-besked fra en anden stream
@override String from({required Object name}) => 'RAID FRA ${name}';
/// Nedtællingstimer til auto-raiding
@override String countdown({required Object time}) => 'Raiding i ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorDa extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kan ikke redigere profil, når jeg er logget ud';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorDa extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kan ikke oprette forbindelse til wallet, når jeg er logget ud';
@override String get nwc_auth_event_not_found => 'Ingen wallet-auth-begivenhed fundet';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsDa {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Upload avatar';
case 'most_zapped_streamers': return 'De fleste zappede streamere';
case 'no_user_found': return 'Ingen bruger fundet';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n,
one: '1 seer',
other: '${NumberFormat.decimalPattern('da').format(n)} seere',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'AFSLUTTET';
case 'stream.status.planned': return 'PLANLAGT';
case 'stream.started': return ({required Object timestamp}) => 'Startet ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DEAKTIVERET';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout udløber: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' udløbet '),
user,
const TextSpan(text: ' for '),
time,
]);
case 'stream.chat.ended': return 'STREAM AFSLUTTET';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zappet '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Skriv en besked';
case 'stream.chat.write.no_signer': return 'Kan ikke skrive beskeder med npub-login';
case 'stream.chat.write.login': return 'Log ind for at sende beskeder';
case 'stream.chat.badge.awarded_to': return 'Tildelt til:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FRA ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding i ${time}';
case 'goal.title': return ({required Object amount}) => 'Mål: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Resterende: ${amount}';
case 'goal.complete': return 'KOMPLET';
case 'button.login': return 'Login';
case 'button.logout': return 'Log ud';
case 'button.edit_profile': return 'Rediger profil';
case 'button.follow': return 'Følg med';
case 'button.unfollow': return 'Ikke følge';
case 'button.mute': return 'Dæmpet';
case 'button.unmute': return 'Slå lyden fra';
case 'button.share': return 'Del';
case 'button.save': return 'Gemme';
case 'button.connect': return 'Opret forbindelse';
case 'button.settings': return 'Indstillinger';
case 'embed.article_by': return ({required Object name}) => 'Artikel af ${name}';
case 'embed.note_by': return ({required Object name}) => 'Note fra ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Livestream på ${name}';
case 'stream_list.following': return 'Efterfølgende';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planlagt';
case 'stream_list.ended': return 'Afsluttet';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Brugerdefineret beløb';
case 'zap.confirm': return 'Bekræft';
case 'zap.comment': return 'Kommentar';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Åbn i tegnebogen';
case 'zap.button_connect_wallet': return 'Forbind tegnebog';
case 'zap.copy': return 'Kopieret til udklipsholder';
case 'zap.error.invalid_custom_amount': return 'Ugyldigt brugerdefineret beløb';
case 'zap.error.no_wallet': return 'Ingen lightning wallet installeret';
case 'zap.error.no_lud16': return 'Ingen lyn-adresse fundet';
case 'profile.past_streams': return 'Tidligere strømme';
case 'settings.button_profile': return 'Rediger profil';
case 'settings.button_wallet': return 'Indstillinger for tegnebog';
case 'settings.profile.display_name': return 'Vis navn';
case 'settings.profile.about': return 'Omkring';
case 'settings.profile.nip05': return 'Nostr-adresse';
case 'settings.profile.lud16': return 'Adresse for lynnedslag';
case 'settings.profile.error.logged_out': return 'Kan ikke redigere profil, når jeg er logget ud';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Afbryd forbindelsen til tegnebogen';
case 'settings.wallet.connect_1tap': return '1-Tap-forbindelse';
case 'settings.wallet.paste': return 'Indsæt URL';
case 'settings.wallet.error.logged_out': return 'Kan ikke oprette forbindelse til wallet, når jeg er logget ud';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Ingen wallet-auth-begivenhed fundet';
case 'login.username': return 'Brugernavn';
case 'login.amber': return 'Log ind med Amber';
case 'login.key': return 'Login med nøgle';
case 'login.create': return 'Opret konto';
case 'login.error.invalid_key': return 'Ugyldig nøgle';
default: return null;
}
}
}

469
lib/i18n/strings_de.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsDe extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsDe({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.de,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <de>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsDe _root = this; // ignore: unused_field
@override
TranslationsDe $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsDe(meta: meta ?? this.$meta);
// Translations
/// Text, der den Benutzer auffordert, auf den Avatar-Platzhalter zu klicken, um den Upload zu starten
@override String get upload_avatar => 'Avatar hochladen';
/// Überschrift über gelistete Top-Streamer von zaps
@override String get most_zapped_streamers => 'Meistgezappte Streamer';
/// Kein Benutzer bei der Suche gefunden
@override String get no_user_found => 'Kein Benutzer gefunden';
/// Ein anonymer Benutzer
@override String get anon => 'Anon';
/// Anzahl der Betrachter des Streams
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n,
one: '1 Zuschauer',
other: '${NumberFormat.decimalPattern('de').format(n)} Zuschauer',
);
@override late final _TranslationsStreamDe stream = _TranslationsStreamDe._(_root);
@override late final _TranslationsGoalDe goal = _TranslationsGoalDe._(_root);
@override late final _TranslationsButtonDe button = _TranslationsButtonDe._(_root);
@override late final _TranslationsEmbedDe embed = _TranslationsEmbedDe._(_root);
/// Überschriften auf Stream-Listen nach Stream-Typ live/beendet/geplant usw.
@override late final _TranslationsStreamListDe stream_list = _TranslationsStreamListDe._(_root);
@override late final _TranslationsZapDe zap = _TranslationsZapDe._(_root);
@override late final _TranslationsProfileDe profile = _TranslationsProfileDe._(_root);
@override late final _TranslationsSettingsDe settings = _TranslationsSettingsDe._(_root);
@override late final _TranslationsLoginDe login = _TranslationsLoginDe._(_root);
}
// Path: stream
class _TranslationsStreamDe extends TranslationsStreamEn {
_TranslationsStreamDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusDe status = _TranslationsStreamStatusDe._(_root);
@override String started({required Object timestamp}) => 'Gestartet ${timestamp}';
@override late final _TranslationsStreamChatDe chat = _TranslationsStreamChatDe._(_root);
}
// Path: goal
class _TranslationsGoalDe extends TranslationsGoalEn {
_TranslationsGoalDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Ziel: ${amount}';
@override String remaining({required Object amount}) => 'Verbleibend: ${amount}';
@override String get complete => 'COMPLETE';
}
// Path: button
class _TranslationsButtonDe extends TranslationsButtonEn {
_TranslationsButtonDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
/// Schaltflächentext für die Anmeldeschaltfläche
@override String get login => 'Anmelden';
@override String get logout => 'Abmelden';
@override String get edit_profile => 'Profil anpassen';
/// Schaltflächentext für die Schaltfläche "Folgen
@override String get follow => 'Folgen';
/// Schaltflächentext für die "Unfollow"-Schaltfläche
@override String get unfollow => 'Entfolgen';
@override String get mute => 'Stummschalten';
@override String get unmute => 'Entstummen';
@override String get share => 'Teilen';
@override String get save => 'Speichern';
@override String get connect => 'Verbinden Sie';
@override String get settings => 'Einstellungen';
}
// Path: embed
class _TranslationsEmbedDe extends TranslationsEmbedEn {
_TranslationsEmbedDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Artikel von ${name}';
@override String note_by({required Object name}) => 'Note von ${name}';
@override String live_stream_by({required Object name}) => 'Live-Stream von ${name}';
}
// Path: stream_list
class _TranslationsStreamListDe extends TranslationsStreamListEn {
_TranslationsStreamListDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get following => 'Folge ich';
@override String get live => 'Live';
@override String get planned => 'Geplant';
@override String get ended => 'Beendet';
}
// Path: zap
class _TranslationsZapDe extends TranslationsZapEn {
_TranslationsZapDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => '${name} zappen';
@override String get custom_amount => 'Benutzerdefinierter Betrag';
@override String get confirm => 'Bestätigen';
@override String get comment => 'Kommentar';
@override String button_zap_ready({required Object amount}) => '${amount} sats zappen';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'In Brieftasche öffnen';
@override String get button_connect_wallet => 'Brieftasche verbinden';
@override String get copy => 'In die Zwischenablage kopiert';
@override late final _TranslationsZapErrorDe error = _TranslationsZapErrorDe._(_root);
}
// Path: profile
class _TranslationsProfileDe extends TranslationsProfileEn {
_TranslationsProfileDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Vergangene Streams';
}
// Path: settings
class _TranslationsSettingsDe extends TranslationsSettingsEn {
_TranslationsSettingsDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Profil bearbeiten';
@override String get button_wallet => 'Wallet-Einstellungen';
@override late final _TranslationsSettingsProfileDe profile = _TranslationsSettingsProfileDe._(_root);
@override late final _TranslationsSettingsWalletDe wallet = _TranslationsSettingsWalletDe._(_root);
}
// Path: login
class _TranslationsLoginDe extends TranslationsLoginEn {
_TranslationsLoginDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get username => 'Benutzername';
@override String get amber => 'Anmeldung mit Amber';
@override String get key => 'Anmeldung mit Schlüssel';
@override String get create => 'Konto erstellen';
@override late final _TranslationsLoginErrorDe error = _TranslationsLoginErrorDe._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusDe extends TranslationsStreamStatusEn {
_TranslationsStreamStatusDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get live => 'LIVE';
@override String get ended => 'ENDED';
@override String get planned => 'GEPLANT';
}
// Path: stream.chat
class _TranslationsStreamChatDe extends TranslationsStreamChatEn {
_TranslationsStreamChatDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DEAKTIVIERT';
@override String disabled_timeout({required Object time}) => 'Die Zeitüberschreitung läuft ab: ${time}';
/// Chat-Nachricht mit Zeitüberschreitungsereignissen
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Zeitüberschreitung '),
user,
const TextSpan(text: ' für '),
time,
]);
/// Stream beendet Fußzeile am Ende des Chats
@override String get ended => 'STREAM BEENDET';
/// Chatnachricht mit Stream Zaps
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' hat '),
amount,
const TextSpan(text: ' sats gezappt'),
]);
@override late final _TranslationsStreamChatWriteDe write = _TranslationsStreamChatWriteDe._(_root);
@override late final _TranslationsStreamChatBadgeDe badge = _TranslationsStreamChatBadgeDe._(_root);
@override late final _TranslationsStreamChatRaidDe raid = _TranslationsStreamChatRaidDe._(_root);
}
// Path: zap.error
class _TranslationsZapErrorDe extends TranslationsZapErrorEn {
_TranslationsZapErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Ungültiger benutzerdefinierter Betrag';
@override String get no_wallet => 'Keine Lightning-Brieftasche installiert';
@override String get no_lud16 => 'Keine Blitzadresse gefunden';
}
// Path: settings.profile
class _TranslationsSettingsProfileDe extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get display_name => 'Name anzeigen';
@override String get about => 'Über';
@override String get nip05 => 'Nostr-Adresse';
@override String get lud16 => 'Blitz-Adresse';
@override late final _TranslationsSettingsProfileErrorDe error = _TranslationsSettingsProfileErrorDe._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletDe extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Brieftasche abtrennen';
@override String get connect_1tap => '1-Tap-Verbindung';
@override String get paste => 'URL einfügen';
@override late final _TranslationsSettingsWalletErrorDe error = _TranslationsSettingsWalletErrorDe._(_root);
}
// Path: login.error
class _TranslationsLoginErrorDe extends TranslationsLoginErrorEn {
_TranslationsLoginErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Ungültiger Schlüssel';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteDe extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
/// Beschriftung des Eingabefeldes für Chatnachrichten
@override String get label => 'Nachricht schreiben';
/// Chat-Eingabemeldung wird angezeigt, wenn der Benutzer nur mit Pubkey eingeloggt ist
@override String get no_signer => 'Mit npub-Login können keine Nachrichten geschrieben werden';
/// Chat-Eingabemeldung wird angezeigt, wenn der Benutzer abgemeldet ist
@override String get login => 'Bitte anmelden, um Nachrichten zu senden';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeDe extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
/// Überschrift über der Liste der Benutzer, die ein Abzeichen erhalten haben
@override String get awarded_to => 'Verliehen an:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidDe extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
/// Chat-Überfallnachricht an einen anderen Stream
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat-Raid-Nachricht aus einem anderen Stream
@override String from({required Object name}) => 'RAID VON ${name}';
/// Countdown-Timer für automatisches Reiten
@override String countdown({required Object time}) => 'Raubzüge auf ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorDe extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Profil kann nicht bearbeitet werden, wenn es abgemeldet ist';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorDe extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kann keine Verbindung zur Brieftasche herstellen, wenn ich abgemeldet bin';
@override String get nwc_auth_event_not_found => 'Kein Wallet-Authentifizierungsereignis gefunden';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsDe {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Avatar hochladen';
case 'most_zapped_streamers': return 'Meistgezappte Streamer';
case 'no_user_found': return 'Kein Benutzer gefunden';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n,
one: '1 Zuschauer',
other: '${NumberFormat.decimalPattern('de').format(n)} Zuschauer',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'GEPLANT';
case 'stream.started': return ({required Object timestamp}) => 'Gestartet ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DEAKTIVIERT';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Die Zeitüberschreitung läuft ab: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Zeitüberschreitung '),
user,
const TextSpan(text: ' für '),
time,
]);
case 'stream.chat.ended': return 'STREAM BEENDET';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' hat '),
amount,
const TextSpan(text: ' sats gezappt'),
]);
case 'stream.chat.write.label': return 'Nachricht schreiben';
case 'stream.chat.write.no_signer': return 'Mit npub-Login können keine Nachrichten geschrieben werden';
case 'stream.chat.write.login': return 'Bitte anmelden, um Nachrichten zu senden';
case 'stream.chat.badge.awarded_to': return 'Verliehen an:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID VON ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raubzüge auf ${time}';
case 'goal.title': return ({required Object amount}) => 'Ziel: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Verbleibend: ${amount}';
case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Anmelden';
case 'button.logout': return 'Abmelden';
case 'button.edit_profile': return 'Profil anpassen';
case 'button.follow': return 'Folgen';
case 'button.unfollow': return 'Entfolgen';
case 'button.mute': return 'Stummschalten';
case 'button.unmute': return 'Entstummen';
case 'button.share': return 'Teilen';
case 'button.save': return 'Speichern';
case 'button.connect': return 'Verbinden Sie';
case 'button.settings': return 'Einstellungen';
case 'embed.article_by': return ({required Object name}) => 'Artikel von ${name}';
case 'embed.note_by': return ({required Object name}) => 'Note von ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Live-Stream von ${name}';
case 'stream_list.following': return 'Folge ich';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Geplant';
case 'stream_list.ended': return 'Beendet';
case 'zap.title': return ({required Object name}) => '${name} zappen';
case 'zap.custom_amount': return 'Benutzerdefinierter Betrag';
case 'zap.confirm': return 'Bestätigen';
case 'zap.comment': return 'Kommentar';
case 'zap.button_zap_ready': return ({required Object amount}) => '${amount} sats zappen';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'In Brieftasche öffnen';
case 'zap.button_connect_wallet': return 'Brieftasche verbinden';
case 'zap.copy': return 'In die Zwischenablage kopiert';
case 'zap.error.invalid_custom_amount': return 'Ungültiger benutzerdefinierter Betrag';
case 'zap.error.no_wallet': return 'Keine Lightning-Brieftasche installiert';
case 'zap.error.no_lud16': return 'Keine Blitzadresse gefunden';
case 'profile.past_streams': return 'Vergangene Streams';
case 'settings.button_profile': return 'Profil bearbeiten';
case 'settings.button_wallet': return 'Wallet-Einstellungen';
case 'settings.profile.display_name': return 'Name anzeigen';
case 'settings.profile.about': return 'Über';
case 'settings.profile.nip05': return 'Nostr-Adresse';
case 'settings.profile.lud16': return 'Blitz-Adresse';
case 'settings.profile.error.logged_out': return 'Profil kann nicht bearbeitet werden, wenn es abgemeldet ist';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Brieftasche abtrennen';
case 'settings.wallet.connect_1tap': return '1-Tap-Verbindung';
case 'settings.wallet.paste': return 'URL einfügen';
case 'settings.wallet.error.logged_out': return 'Kann keine Verbindung zur Brieftasche herstellen, wenn ich abgemeldet bin';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Kein Wallet-Authentifizierungsereignis gefunden';
case 'login.username': return 'Benutzername';
case 'login.amber': return 'Anmeldung mit Amber';
case 'login.key': return 'Anmeldung mit Schlüssel';
case 'login.create': return 'Konto erstellen';
case 'login.error.invalid_key': return 'Ungültiger Schlüssel';
default: return null;
}
}
}

469
lib/i18n/strings_el.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsEl extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsEl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.el,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <el>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsEl _root = this; // ignore: unused_field
@override
TranslationsEl $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsEl(meta: meta ?? this.$meta);
// Translations
/// Κείμενο που προτρέπει τον χρήστη να πατήσει το εικονίδιο avatar για να ξεκινήσει το ανέβασμα
@override String get upload_avatar => 'Ανέβασμα Avatar';
/// Επικεφαλής πάνω από τα αναφερόμενα κορυφαία streamers από zaps
@override String get most_zapped_streamers => 'Τα περισσότερα Zapped Streamers';
/// Δεν βρέθηκε χρήστης κατά την αναζήτηση
@override String get no_user_found => 'Δεν βρέθηκε χρήστης';
/// Ένας ανώνυμος χρήστης
@override String get anon => 'Anon';
/// Αριθμός θεατών της ροής
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('el'))(n,
one: '1 θεατής',
other: '${NumberFormat.decimalPattern('el').format(n)} θεατές',
);
@override late final _TranslationsStreamEl stream = _TranslationsStreamEl._(_root);
@override late final _TranslationsGoalEl goal = _TranslationsGoalEl._(_root);
@override late final _TranslationsButtonEl button = _TranslationsButtonEl._(_root);
@override late final _TranslationsEmbedEl embed = _TranslationsEmbedEl._(_root);
/// Επικεφαλίδες στις λίστες ροής ανά τύπο ροής ζωντανή/τελειωμένη/προγραμματισμένη κ.λπ.
@override late final _TranslationsStreamListEl stream_list = _TranslationsStreamListEl._(_root);
@override late final _TranslationsZapEl zap = _TranslationsZapEl._(_root);
@override late final _TranslationsProfileEl profile = _TranslationsProfileEl._(_root);
@override late final _TranslationsSettingsEl settings = _TranslationsSettingsEl._(_root);
@override late final _TranslationsLoginEl login = _TranslationsLoginEl._(_root);
}
// Path: stream
class _TranslationsStreamEl extends TranslationsStreamEn {
_TranslationsStreamEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusEl status = _TranslationsStreamStatusEl._(_root);
@override String started({required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
@override late final _TranslationsStreamChatEl chat = _TranslationsStreamChatEl._(_root);
}
// Path: goal
class _TranslationsGoalEl extends TranslationsGoalEn {
_TranslationsGoalEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Στόχος: ${amount}';
@override String remaining({required Object amount}) => 'Υπόλοιπο: ${amount}';
@override String get complete => 'ΠΛΗΡΗΣ';
}
// Path: button
class _TranslationsButtonEl extends TranslationsButtonEn {
_TranslationsButtonEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
/// Κείμενο κουμπιού για το κουμπί σύνδεσης
@override String get login => 'Σύνδεση';
@override String get logout => 'Αποσύνδεση';
@override String get edit_profile => 'Επεξεργασία προφίλ';
/// Κείμενο κουμπιού για το κουμπί follow
@override String get follow => 'Ακολουθήστε το';
/// Κείμενο κουμπιού για το κουμπί unfollow
@override String get unfollow => 'Ακολουθήστε το';
@override String get mute => 'Σίγαση';
@override String get unmute => 'Αποσυνδέστε τη φωνή σας από το';
@override String get share => 'Μοιραστείτε το';
@override String get save => 'Αποθήκευση';
@override String get connect => 'Συνδέστε το';
@override String get settings => 'Ρυθμίσεις';
}
// Path: embed
class _TranslationsEmbedEl extends TranslationsEmbedEn {
_TranslationsEmbedEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Άρθρο από ${name}';
@override String note_by({required Object name}) => 'Σημείωση του ${name}';
@override String live_stream_by({required Object name}) => 'Ζωντανή μετάδοση από το ${name}';
}
// Path: stream_list
class _TranslationsStreamListEl extends TranslationsStreamListEn {
_TranslationsStreamListEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get following => 'Ακολουθώντας το';
@override String get live => 'Ζωντανό';
@override String get planned => 'Προγραμματισμένο';
@override String get ended => 'Τελείωσε';
}
// Path: zap
class _TranslationsZapEl extends TranslationsZapEn {
_TranslationsZapEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Προσαρμοσμένο ποσό';
@override String get confirm => 'Επιβεβαίωση';
@override String get comment => 'Σχόλιο';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Άνοιγμα στο πορτοφόλι';
@override String get button_connect_wallet => 'Connect Wallet';
@override String get copy => 'Αντιγραφή στο πρόχειρο';
@override late final _TranslationsZapErrorEl error = _TranslationsZapErrorEl._(_root);
}
// Path: profile
class _TranslationsProfileEl extends TranslationsProfileEn {
_TranslationsProfileEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Προηγούμενα ρεύματα';
}
// Path: settings
class _TranslationsSettingsEl extends TranslationsSettingsEn {
_TranslationsSettingsEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Επεξεργασία προφίλ';
@override String get button_wallet => 'Ρυθμίσεις πορτοφολιού';
@override late final _TranslationsSettingsProfileEl profile = _TranslationsSettingsProfileEl._(_root);
@override late final _TranslationsSettingsWalletEl wallet = _TranslationsSettingsWalletEl._(_root);
}
// Path: login
class _TranslationsLoginEl extends TranslationsLoginEn {
_TranslationsLoginEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get username => 'Όνομα χρήστη';
@override String get amber => 'Σύνδεση με Amber';
@override String get key => 'Σύνδεση με κλειδί';
@override String get create => 'Δημιουργία λογαριασμού';
@override late final _TranslationsLoginErrorEl error = _TranslationsLoginErrorEl._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusEl extends TranslationsStreamStatusEn {
_TranslationsStreamStatusEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get live => 'LIVE';
@override String get ended => 'ENDED';
@override String get planned => 'ΣΧΕΔΙΑΣΜΟΣ';
}
// Path: stream.chat
class _TranslationsStreamChatEl extends TranslationsStreamChatEn {
_TranslationsStreamChatEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get disabled => 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ';
@override String disabled_timeout({required Object time}) => 'Το χρονικό όριο λήγει: ${time}';
/// Μήνυμα συνομιλίας που εμφανίζει συμβάντα timeout
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' χρονομετρημένη λήξη '),
user,
const TextSpan(text: ' για '),
time,
]);
/// Η ροή τελείωσε το υποσέλιδο στο κάτω μέρος της συνομιλίας
@override String get ended => 'STREAM ΤΕΛΕΙΩΣΕ';
/// Μήνυμα συνομιλίας που δείχνει ροή ροής zaps
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteEl write = _TranslationsStreamChatWriteEl._(_root);
@override late final _TranslationsStreamChatBadgeEl badge = _TranslationsStreamChatBadgeEl._(_root);
@override late final _TranslationsStreamChatRaidEl raid = _TranslationsStreamChatRaidEl._(_root);
}
// Path: zap.error
class _TranslationsZapErrorEl extends TranslationsZapErrorEn {
_TranslationsZapErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Μη έγκυρο προσαρμοσμένο ποσό';
@override String get no_wallet => 'Δεν έχει εγκατασταθεί πορτοφόλι αστραπής';
@override String get no_lud16 => 'Δεν βρέθηκε διεύθυνση κεραυνού';
}
// Path: settings.profile
class _TranslationsSettingsProfileEl extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get display_name => 'Όνομα οθόνης';
@override String get about => 'Σχετικά με το';
@override String get nip05 => 'Διεύθυνση Nostr';
@override String get lud16 => 'Διεύθυνση Lightning';
@override late final _TranslationsSettingsProfileErrorEl error = _TranslationsSettingsProfileErrorEl._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletEl extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Αποσύνδεση πορτοφολιού';
@override String get connect_1tap => 'Σύνδεση 1 βρύσης';
@override String get paste => 'Επικόλληση URL';
@override late final _TranslationsSettingsWalletErrorEl error = _TranslationsSettingsWalletErrorEl._(_root);
}
// Path: login.error
class _TranslationsLoginErrorEl extends TranslationsLoginErrorEn {
_TranslationsLoginErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Μη έγκυρο κλειδί';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteEl extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
/// Ετικέτα στο πλαίσιο εισαγωγής μηνύματος συνομιλίας
@override String get label => 'Γράψτε μήνυμα';
/// Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης είναι συνδεδεμένος μόνο με το κλειδί pubkey
@override String get no_signer => 'Δεν μπορείτε να γράψετε μηνύματα με σύνδεση στο npub';
/// Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης έχει αποσυνδεθεί
@override String get login => 'Παρακαλώ συνδεθείτε για να στείλετε μηνύματα';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeEl extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
/// Επικεφαλίδα πάνω από τη λίστα των χρηστών στους οποίους έχει απονεμηθεί ένα σήμα
@override String get awarded_to => 'Απονέμεται σε:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidEl extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
/// Μήνυμα επιδρομής συνομιλίας σε άλλη ροή
@override String to({required Object name}) => 'RAIDING ${name}';
/// Μήνυμα επιδρομής συνομιλίας από άλλη ροή
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Χρονοδιακόπτης αντίστροφης μέτρησης για αυτόματη ιππασία
@override String countdown({required Object time}) => 'Επιδρομές στο ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorEl extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorEl extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Δεν μπορώ να συνδεθώ με πορτοφόλι όταν έχω αποσυνδεθεί';
@override String get nwc_auth_event_not_found => 'Δεν βρέθηκε συμβάν εξουσιοδότησης πορτοφολιού';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsEl {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Ανέβασμα Avatar';
case 'most_zapped_streamers': return 'Τα περισσότερα Zapped Streamers';
case 'no_user_found': return 'Δεν βρέθηκε χρήστης';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('el'))(n,
one: '1 θεατής',
other: '${NumberFormat.decimalPattern('el').format(n)} θεατές',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'ΣΧΕΔΙΑΣΜΟΣ';
case 'stream.started': return ({required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
case 'stream.chat.disabled': return 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Το χρονικό όριο λήγει: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' χρονομετρημένη λήξη '),
user,
const TextSpan(text: ' για '),
time,
]);
case 'stream.chat.ended': return 'STREAM ΤΕΛΕΙΩΣΕ';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Γράψτε μήνυμα';
case 'stream.chat.write.no_signer': return 'Δεν μπορείτε να γράψετε μηνύματα με σύνδεση στο npub';
case 'stream.chat.write.login': return 'Παρακαλώ συνδεθείτε για να στείλετε μηνύματα';
case 'stream.chat.badge.awarded_to': return 'Απονέμεται σε:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Επιδρομές στο ${time}';
case 'goal.title': return ({required Object amount}) => 'Στόχος: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Υπόλοιπο: ${amount}';
case 'goal.complete': return 'ΠΛΗΡΗΣ';
case 'button.login': return 'Σύνδεση';
case 'button.logout': return 'Αποσύνδεση';
case 'button.edit_profile': return 'Επεξεργασία προφίλ';
case 'button.follow': return 'Ακολουθήστε το';
case 'button.unfollow': return 'Ακολουθήστε το';
case 'button.mute': return 'Σίγαση';
case 'button.unmute': return 'Αποσυνδέστε τη φωνή σας από το';
case 'button.share': return 'Μοιραστείτε το';
case 'button.save': return 'Αποθήκευση';
case 'button.connect': return 'Συνδέστε το';
case 'button.settings': return 'Ρυθμίσεις';
case 'embed.article_by': return ({required Object name}) => 'Άρθρο από ${name}';
case 'embed.note_by': return ({required Object name}) => 'Σημείωση του ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Ζωντανή μετάδοση από το ${name}';
case 'stream_list.following': return 'Ακολουθώντας το';
case 'stream_list.live': return 'Ζωντανό';
case 'stream_list.planned': return 'Προγραμματισμένο';
case 'stream_list.ended': return 'Τελείωσε';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Προσαρμοσμένο ποσό';
case 'zap.confirm': return 'Επιβεβαίωση';
case 'zap.comment': return 'Σχόλιο';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Άνοιγμα στο πορτοφόλι';
case 'zap.button_connect_wallet': return 'Connect Wallet';
case 'zap.copy': return 'Αντιγραφή στο πρόχειρο';
case 'zap.error.invalid_custom_amount': return 'Μη έγκυρο προσαρμοσμένο ποσό';
case 'zap.error.no_wallet': return 'Δεν έχει εγκατασταθεί πορτοφόλι αστραπής';
case 'zap.error.no_lud16': return 'Δεν βρέθηκε διεύθυνση κεραυνού';
case 'profile.past_streams': return 'Προηγούμενα ρεύματα';
case 'settings.button_profile': return 'Επεξεργασία προφίλ';
case 'settings.button_wallet': return 'Ρυθμίσεις πορτοφολιού';
case 'settings.profile.display_name': return 'Όνομα οθόνης';
case 'settings.profile.about': return 'Σχετικά με το';
case 'settings.profile.nip05': return 'Διεύθυνση Nostr';
case 'settings.profile.lud16': return 'Διεύθυνση Lightning';
case 'settings.profile.error.logged_out': return 'Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Αποσύνδεση πορτοφολιού';
case 'settings.wallet.connect_1tap': return 'Σύνδεση 1 βρύσης';
case 'settings.wallet.paste': return 'Επικόλληση URL';
case 'settings.wallet.error.logged_out': return 'Δεν μπορώ να συνδεθώ με πορτοφόλι όταν έχω αποσυνδεθεί';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Δεν βρέθηκε συμβάν εξουσιοδότησης πορτοφολιού';
case 'login.username': return 'Όνομα χρήστη';
case 'login.amber': return 'Σύνδεση με Amber';
case 'login.key': return 'Σύνδεση με κλειδί';
case 'login.create': return 'Δημιουργία λογαριασμού';
case 'login.error.invalid_key': return 'Μη έγκυρο κλειδί';
default: return null;
}
}
}

470
lib/i18n/strings_en.g.dart Normal file
View File

@ -0,0 +1,470 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
part of 'strings.g.dart';
// Path: <root>
typedef TranslationsEn = Translations; // ignore: unused_element
class Translations implements BaseTranslations<AppLocale, Translations> {
/// Returns the current translations of the given [context].
///
/// Usage:
/// final t = Translations.of(context);
static Translations of(BuildContext context) => InheritedLocaleData.of<AppLocale, Translations>(context).translations;
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
Translations({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.en,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <en>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
dynamic operator[](String key) => $meta.getTranslation(key);
late final Translations _root = this; // ignore: unused_field
Translations $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => Translations(meta: meta ?? this.$meta);
// Translations
/// Text prompting user to hit avatar placeholder to begin upload
String get upload_avatar => 'Upload Avatar';
/// Heading over listed top streamers by zaps
String get most_zapped_streamers => 'Most Zapped Streamers';
/// No user found when searching
String get no_user_found => 'No user found';
/// An anonymous user
String get anon => 'Anon';
/// Number of viewers of the stream
String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n,
one: '1 viewer',
other: '${NumberFormat.decimalPattern('en').format(n)} viewers',
);
late final TranslationsStreamEn stream = TranslationsStreamEn.internal(_root);
late final TranslationsGoalEn goal = TranslationsGoalEn.internal(_root);
late final TranslationsButtonEn button = TranslationsButtonEn.internal(_root);
late final TranslationsEmbedEn embed = TranslationsEmbedEn.internal(_root);
/// Headings on stream lists by stream type live/ended/planned etc.
late final TranslationsStreamListEn stream_list = TranslationsStreamListEn.internal(_root);
late final TranslationsZapEn zap = TranslationsZapEn.internal(_root);
late final TranslationsProfileEn profile = TranslationsProfileEn.internal(_root);
late final TranslationsSettingsEn settings = TranslationsSettingsEn.internal(_root);
late final TranslationsLoginEn login = TranslationsLoginEn.internal(_root);
}
// Path: stream
class TranslationsStreamEn {
TranslationsStreamEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
late final TranslationsStreamStatusEn status = TranslationsStreamStatusEn.internal(_root);
String started({required Object timestamp}) => 'Started ${timestamp}';
late final TranslationsStreamChatEn chat = TranslationsStreamChatEn.internal(_root);
}
// Path: goal
class TranslationsGoalEn {
TranslationsGoalEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String title({required Object amount}) => 'Goal: ${amount}';
String remaining({required Object amount}) => 'Remaining: ${amount}';
String get complete => 'COMPLETE';
}
// Path: button
class TranslationsButtonEn {
TranslationsButtonEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// Button text for the login button
String get login => 'Login';
String get logout => 'Logout';
String get edit_profile => 'Edit Profile';
/// Button text for the follow button
String get follow => 'Follow';
/// Button text for the unfollow button
String get unfollow => 'Unfollow';
String get mute => 'Mute';
String get unmute => 'Unmute';
String get share => 'Share';
String get save => 'Save';
String get connect => 'Connect';
String get settings => 'Settings';
}
// Path: embed
class TranslationsEmbedEn {
TranslationsEmbedEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String article_by({required Object name}) => 'Article by ${name}';
String note_by({required Object name}) => 'Note by ${name}';
String live_stream_by({required Object name}) => 'Live stream by ${name}';
}
// Path: stream_list
class TranslationsStreamListEn {
TranslationsStreamListEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get following => 'Following';
String get live => 'Live';
String get planned => 'Planned';
String get ended => 'Ended';
}
// Path: zap
class TranslationsZapEn {
TranslationsZapEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String title({required Object name}) => 'Zap ${name}';
String get custom_amount => 'Custom Amount';
String get confirm => 'Confirm';
String get comment => 'Comment';
String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
String get button_zap => 'Zap';
String get button_open_wallet => 'Open in Wallet';
String get button_connect_wallet => 'Connect Wallet';
String get copy => 'Copied to clipboard';
late final TranslationsZapErrorEn error = TranslationsZapErrorEn.internal(_root);
}
// Path: profile
class TranslationsProfileEn {
TranslationsProfileEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get past_streams => 'Past Streams';
}
// Path: settings
class TranslationsSettingsEn {
TranslationsSettingsEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get button_profile => 'Edit Profile';
String get button_wallet => 'Wallet Settings';
late final TranslationsSettingsProfileEn profile = TranslationsSettingsProfileEn.internal(_root);
late final TranslationsSettingsWalletEn wallet = TranslationsSettingsWalletEn.internal(_root);
}
// Path: login
class TranslationsLoginEn {
TranslationsLoginEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get username => 'Username';
String get amber => 'Login with Amber';
String get key => 'Login with Key';
String get create => 'Create Account';
late final TranslationsLoginErrorEn error = TranslationsLoginErrorEn.internal(_root);
}
// Path: stream.status
class TranslationsStreamStatusEn {
TranslationsStreamStatusEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get live => 'LIVE';
String get ended => 'ENDED';
String get planned => 'PLANNED';
}
// Path: stream.chat
class TranslationsStreamChatEn {
TranslationsStreamChatEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get disabled => 'CHAT DISABLED';
String disabled_timeout({required Object time}) => 'Timeout expires: ${time}';
/// Chat message showing timeout events
TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' for '),
time,
]);
/// Stream ended footer at bottom of chat
String get ended => 'STREAM ENDED';
/// Chat message showing stream zaps
TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
late final TranslationsStreamChatWriteEn write = TranslationsStreamChatWriteEn.internal(_root);
late final TranslationsStreamChatBadgeEn badge = TranslationsStreamChatBadgeEn.internal(_root);
late final TranslationsStreamChatRaidEn raid = TranslationsStreamChatRaidEn.internal(_root);
}
// Path: zap.error
class TranslationsZapErrorEn {
TranslationsZapErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get invalid_custom_amount => 'Invalid custom amount';
String get no_wallet => 'No lightning wallet installed';
String get no_lud16 => 'No lightning address found';
}
// Path: settings.profile
class TranslationsSettingsProfileEn {
TranslationsSettingsProfileEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get display_name => 'Display Name';
String get about => 'About';
String get nip05 => 'Nostr Address';
String get lud16 => 'Lightning Address';
late final TranslationsSettingsProfileErrorEn error = TranslationsSettingsProfileErrorEn.internal(_root);
}
// Path: settings.wallet
class TranslationsSettingsWalletEn {
TranslationsSettingsWalletEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
String get disconnect_wallet => 'Disconnect Wallet';
String get connect_1tap => '1-Tap Connection';
String get paste => 'Paste URL';
late final TranslationsSettingsWalletErrorEn error = TranslationsSettingsWalletErrorEn.internal(_root);
}
// Path: login.error
class TranslationsLoginErrorEn {
TranslationsLoginErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get invalid_key => 'Invalid key';
}
// Path: stream.chat.write
class TranslationsStreamChatWriteEn {
TranslationsStreamChatWriteEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// Label on the chat message input box
String get label => 'Write message';
/// Chat input message shown when the user is logged in only with pubkey
String get no_signer => 'Can\'t write messages with npub login';
/// Chat input message shown when the user is logged out
String get login => 'Please login to send messages';
}
// Path: stream.chat.badge
class TranslationsStreamChatBadgeEn {
TranslationsStreamChatBadgeEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// Heading over list of users who are awarded a badge
String get awarded_to => 'Awarded to:';
}
// Path: stream.chat.raid
class TranslationsStreamChatRaidEn {
TranslationsStreamChatRaidEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// Chat raid message to another stream
String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid message from another stream
String from({required Object name}) => 'RAID FROM ${name}';
/// Countdown timer for auto-raiding
String countdown({required Object time}) => 'Raiding in ${time}';
}
// Path: settings.profile.error
class TranslationsSettingsProfileErrorEn {
TranslationsSettingsProfileErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get logged_out => 'Cant edit profile when logged out';
}
// Path: settings.wallet.error
class TranslationsSettingsWalletErrorEn {
TranslationsSettingsWalletErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get logged_out => 'Cant connect wallet when logged out';
String get nwc_auth_event_not_found => 'No wallet auth event found';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on Translations {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Upload Avatar';
case 'most_zapped_streamers': return 'Most Zapped Streamers';
case 'no_user_found': return 'No user found';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n,
one: '1 viewer',
other: '${NumberFormat.decimalPattern('en').format(n)} viewers',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'PLANNED';
case 'stream.started': return ({required Object timestamp}) => 'Started ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABLED';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout expires: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' for '),
time,
]);
case 'stream.chat.ended': return 'STREAM ENDED';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Write message';
case 'stream.chat.write.no_signer': return 'Can\'t write messages with npub login';
case 'stream.chat.write.login': return 'Please login to send messages';
case 'stream.chat.badge.awarded_to': return 'Awarded to:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding in ${time}';
case 'goal.title': return ({required Object amount}) => 'Goal: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Remaining: ${amount}';
case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Login';
case 'button.logout': return 'Logout';
case 'button.edit_profile': return 'Edit Profile';
case 'button.follow': return 'Follow';
case 'button.unfollow': return 'Unfollow';
case 'button.mute': return 'Mute';
case 'button.unmute': return 'Unmute';
case 'button.share': return 'Share';
case 'button.save': return 'Save';
case 'button.connect': return 'Connect';
case 'button.settings': return 'Settings';
case 'embed.article_by': return ({required Object name}) => 'Article by ${name}';
case 'embed.note_by': return ({required Object name}) => 'Note by ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return 'Following';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planned';
case 'stream_list.ended': return 'Ended';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Custom Amount';
case 'zap.confirm': return 'Confirm';
case 'zap.comment': return 'Comment';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Open in Wallet';
case 'zap.button_connect_wallet': return 'Connect Wallet';
case 'zap.copy': return 'Copied to clipboard';
case 'zap.error.invalid_custom_amount': return 'Invalid custom amount';
case 'zap.error.no_wallet': return 'No lightning wallet installed';
case 'zap.error.no_lud16': return 'No lightning address found';
case 'profile.past_streams': return 'Past Streams';
case 'settings.button_profile': return 'Edit Profile';
case 'settings.button_wallet': return 'Wallet Settings';
case 'settings.profile.display_name': return 'Display Name';
case 'settings.profile.about': return 'About';
case 'settings.profile.nip05': return 'Nostr Address';
case 'settings.profile.lud16': return 'Lightning Address';
case 'settings.profile.error.logged_out': return 'Cant edit profile when logged out';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Disconnect Wallet';
case 'settings.wallet.connect_1tap': return '1-Tap Connection';
case 'settings.wallet.paste': return 'Paste URL';
case 'settings.wallet.error.logged_out': return 'Cant connect wallet when logged out';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'No wallet auth event found';
case 'login.username': return 'Username';
case 'login.amber': return 'Login with Amber';
case 'login.key': return 'Login with Key';
case 'login.create': return 'Create Account';
case 'login.error.invalid_key': return 'Invalid key';
default: return null;
}
}
}

469
lib/i18n/strings_es.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsEs extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsEs({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.es,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <es>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsEs _root = this; // ignore: unused_field
@override
TranslationsEs $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsEs(meta: meta ?? this.$meta);
// Translations
/// Texto que indica al usuario que pulse el marcador de avatar para iniciar la carga
@override String get upload_avatar => 'Subir avatar';
/// Encabezando streamers superiores listados por zaps
@override String get most_zapped_streamers => 'Serpentinas más derribadas';
/// No se ha encontrado ningún usuario al realizar la búsqueda
@override String get no_user_found => 'No se ha encontrado ningún usuario';
/// Un usuario anónimo
@override String get anon => 'Anónimo';
/// Número de espectadores del flujo
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n,
one: '1 espectador',
other: '${NumberFormat.decimalPattern('es').format(n)} espectadores',
);
@override late final _TranslationsStreamEs stream = _TranslationsStreamEs._(_root);
@override late final _TranslationsGoalEs goal = _TranslationsGoalEs._(_root);
@override late final _TranslationsButtonEs button = _TranslationsButtonEs._(_root);
@override late final _TranslationsEmbedEs embed = _TranslationsEmbedEs._(_root);
/// Encabezamientos en las listas de flujos por tipo de flujo en directo/finalizado/planificado, etc.
@override late final _TranslationsStreamListEs stream_list = _TranslationsStreamListEs._(_root);
@override late final _TranslationsZapEs zap = _TranslationsZapEs._(_root);
@override late final _TranslationsProfileEs profile = _TranslationsProfileEs._(_root);
@override late final _TranslationsSettingsEs settings = _TranslationsSettingsEs._(_root);
@override late final _TranslationsLoginEs login = _TranslationsLoginEs._(_root);
}
// Path: stream
class _TranslationsStreamEs extends TranslationsStreamEn {
_TranslationsStreamEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusEs status = _TranslationsStreamStatusEs._(_root);
@override String started({required Object timestamp}) => 'Comenzó ${timestamp}';
@override late final _TranslationsStreamChatEs chat = _TranslationsStreamChatEs._(_root);
}
// Path: goal
class _TranslationsGoalEs extends TranslationsGoalEn {
_TranslationsGoalEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Objetivo: ${amount}';
@override String remaining({required Object amount}) => 'Resto: ${amount}';
@override String get complete => 'COMPLETAR';
}
// Path: button
class _TranslationsButtonEs extends TranslationsButtonEn {
_TranslationsButtonEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
/// Texto del botón de inicio de sesión
@override String get login => 'Iniciar Sesión';
@override String get logout => 'Cerrar sesión';
@override String get edit_profile => 'Editar Perfil';
/// Texto del botón de seguimiento
@override String get follow => 'Seguir';
/// Texto del botón "Dejar de seguir
@override String get unfollow => 'Dejar de seguir';
@override String get mute => 'Silenciar';
@override String get unmute => 'Dejar de silenciar';
@override String get share => 'Compartir';
@override String get save => 'Guardar';
@override String get connect => 'Conectar';
@override String get settings => 'Ajustes';
}
// Path: embed
class _TranslationsEmbedEs extends TranslationsEmbedEn {
_TranslationsEmbedEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Artículo de ${name}';
@override String note_by({required Object name}) => 'Nota de ${name}';
@override String live_stream_by({required Object name}) => 'Transmisión en directo por ${name}';
}
// Path: stream_list
class _TranslationsStreamListEs extends TranslationsStreamListEn {
_TranslationsStreamListEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get following => 'Siguiendo';
@override String get live => 'En directo';
@override String get planned => 'Planificado';
@override String get ended => 'Finalizado';
}
// Path: zap
class _TranslationsZapEs extends TranslationsZapEn {
_TranslationsZapEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Importe personalizado';
@override String get confirm => 'Confirmar';
@override String get comment => 'Comentario';
@override String button_zap_ready({required Object amount}) => 'Zapear ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Abrir en cartera';
@override String get button_connect_wallet => 'Billetera Connect';
@override String get copy => 'Copiado al portapapeles';
@override late final _TranslationsZapErrorEs error = _TranslationsZapErrorEs._(_root);
}
// Path: profile
class _TranslationsProfileEs extends TranslationsProfileEn {
_TranslationsProfileEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Transmisiones anteriores';
}
// Path: settings
class _TranslationsSettingsEs extends TranslationsSettingsEn {
_TranslationsSettingsEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Editar perfil';
@override String get button_wallet => 'Configuración de la cartera';
@override late final _TranslationsSettingsProfileEs profile = _TranslationsSettingsProfileEs._(_root);
@override late final _TranslationsSettingsWalletEs wallet = _TranslationsSettingsWalletEs._(_root);
}
// Path: login
class _TranslationsLoginEs extends TranslationsLoginEn {
_TranslationsLoginEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get username => 'Usuario';
@override String get amber => 'Iniciar sesión con Amber';
@override String get key => 'Inicio de sesión con clave';
@override String get create => 'Crear una cuenta';
@override late final _TranslationsLoginErrorEs error = _TranslationsLoginErrorEs._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusEs extends TranslationsStreamStatusEn {
_TranslationsStreamStatusEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get live => 'EN VIVO';
@override String get ended => 'FIN';
@override String get planned => 'PLANIFICADO';
}
// Path: stream.chat
class _TranslationsStreamChatEs extends TranslationsStreamChatEn {
_TranslationsStreamChatEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DESHABILITADO';
@override String disabled_timeout({required Object time}) => 'El tiempo de espera expira: ${time}';
/// Mensaje de chat que muestra los eventos de tiempo de espera
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' para '),
time,
]);
/// Stream finalizó en la parte inferior del chat
@override String get ended => 'STREAM FINED';
/// Mensaje de chat que muestra zaps de flujo
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapearon '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteEs write = _TranslationsStreamChatWriteEs._(_root);
@override late final _TranslationsStreamChatBadgeEs badge = _TranslationsStreamChatBadgeEs._(_root);
@override late final _TranslationsStreamChatRaidEs raid = _TranslationsStreamChatRaidEs._(_root);
}
// Path: zap.error
class _TranslationsZapErrorEs extends TranslationsZapErrorEn {
_TranslationsZapErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Importe personalizado no válido';
@override String get no_wallet => 'Sin monedero relámpago instalado';
@override String get no_lud16 => 'No se ha encontrado ninguna dirección de rayos';
}
// Path: settings.profile
class _TranslationsSettingsProfileEs extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get display_name => 'Mostrar nombre';
@override String get about => 'Acerca de';
@override String get nip05 => 'Dirección Nostr';
@override String get lud16 => 'Dirección del rayo';
@override late final _TranslationsSettingsProfileErrorEs error = _TranslationsSettingsProfileErrorEs._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletEs extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Cartera Connect (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Desconectar Cartera';
@override String get connect_1tap => 'Conexión de 1 toma';
@override String get paste => 'Pegar URL';
@override late final _TranslationsSettingsWalletErrorEs error = _TranslationsSettingsWalletErrorEs._(_root);
}
// Path: login.error
class _TranslationsLoginErrorEs extends TranslationsLoginErrorEn {
_TranslationsLoginErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Clave no válida';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteEs extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
/// Etiqueta del cuadro de entrada de mensajes de chat
@override String get label => 'Escribir mensaje';
/// Mensaje de entrada en el chat que se muestra cuando el usuario está conectado sólo con pubkey
@override String get no_signer => 'No se pueden escribir mensajes con el login npub';
/// Mensaje de entrada al chat que se muestra cuando el usuario cierra la sesión
@override String get login => 'Inicie sesión para enviar mensajes';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeEs extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
/// Encabezamiento de la lista de usuarios a los que se ha concedido una insignia
@override String get awarded_to => 'Concedido a:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidEs extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
/// Mensaje de raid de chat a otro flujo
@override String to({required Object name}) => 'RAIDING ${name}';
/// Mensaje de incursión en el chat desde otro flujo
@override String from({required Object name}) => 'RAID DESDE ${name}';
/// Temporizador de cuenta atrás para auto-raiding
@override String countdown({required Object time}) => 'Incursiones en ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorEs extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get logged_out => 'No se puede editar el perfil cuando se cierra la sesión';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorEs extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get logged_out => 'No se puede conectar el monedero al cerrar la sesión';
@override String get nwc_auth_event_not_found => 'No se ha encontrado ningún evento de autenticación de cartera';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsEs {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Subir avatar';
case 'most_zapped_streamers': return 'Serpentinas más derribadas';
case 'no_user_found': return 'No se ha encontrado ningún usuario';
case 'anon': return 'Anónimo';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n,
one: '1 espectador',
other: '${NumberFormat.decimalPattern('es').format(n)} espectadores',
);
case 'stream.status.live': return 'EN VIVO';
case 'stream.status.ended': return 'FIN';
case 'stream.status.planned': return 'PLANIFICADO';
case 'stream.started': return ({required Object timestamp}) => 'Comenzó ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DESHABILITADO';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'El tiempo de espera expira: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' para '),
time,
]);
case 'stream.chat.ended': return 'STREAM FINED';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapearon '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Escribir mensaje';
case 'stream.chat.write.no_signer': return 'No se pueden escribir mensajes con el login npub';
case 'stream.chat.write.login': return 'Inicie sesión para enviar mensajes';
case 'stream.chat.badge.awarded_to': return 'Concedido a:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID DESDE ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Incursiones en ${time}';
case 'goal.title': return ({required Object amount}) => 'Objetivo: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Resto: ${amount}';
case 'goal.complete': return 'COMPLETAR';
case 'button.login': return 'Iniciar Sesión';
case 'button.logout': return 'Cerrar sesión';
case 'button.edit_profile': return 'Editar Perfil';
case 'button.follow': return 'Seguir';
case 'button.unfollow': return 'Dejar de seguir';
case 'button.mute': return 'Silenciar';
case 'button.unmute': return 'Dejar de silenciar';
case 'button.share': return 'Compartir';
case 'button.save': return 'Guardar';
case 'button.connect': return 'Conectar';
case 'button.settings': return 'Ajustes';
case 'embed.article_by': return ({required Object name}) => 'Artículo de ${name}';
case 'embed.note_by': return ({required Object name}) => 'Nota de ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Transmisión en directo por ${name}';
case 'stream_list.following': return 'Siguiendo';
case 'stream_list.live': return 'En directo';
case 'stream_list.planned': return 'Planificado';
case 'stream_list.ended': return 'Finalizado';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Importe personalizado';
case 'zap.confirm': return 'Confirmar';
case 'zap.comment': return 'Comentario';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zapear ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Abrir en cartera';
case 'zap.button_connect_wallet': return 'Billetera Connect';
case 'zap.copy': return 'Copiado al portapapeles';
case 'zap.error.invalid_custom_amount': return 'Importe personalizado no válido';
case 'zap.error.no_wallet': return 'Sin monedero relámpago instalado';
case 'zap.error.no_lud16': return 'No se ha encontrado ninguna dirección de rayos';
case 'profile.past_streams': return 'Transmisiones anteriores';
case 'settings.button_profile': return 'Editar perfil';
case 'settings.button_wallet': return 'Configuración de la cartera';
case 'settings.profile.display_name': return 'Mostrar nombre';
case 'settings.profile.about': return 'Acerca de';
case 'settings.profile.nip05': return 'Dirección Nostr';
case 'settings.profile.lud16': return 'Dirección del rayo';
case 'settings.profile.error.logged_out': return 'No se puede editar el perfil cuando se cierra la sesión';
case 'settings.wallet.connect_wallet': return 'Cartera Connect (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Desconectar Cartera';
case 'settings.wallet.connect_1tap': return 'Conexión de 1 toma';
case 'settings.wallet.paste': return 'Pegar URL';
case 'settings.wallet.error.logged_out': return 'No se puede conectar el monedero al cerrar la sesión';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'No se ha encontrado ningún evento de autenticación de cartera';
case 'login.username': return 'Usuario';
case 'login.amber': return 'Iniciar sesión con Amber';
case 'login.key': return 'Inicio de sesión con clave';
case 'login.create': return 'Crear una cuenta';
case 'login.error.invalid_key': return 'Clave no válida';
default: return null;
}
}
}

469
lib/i18n/strings_fi.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsFi extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsFi({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.fi,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <fi>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsFi _root = this; // ignore: unused_field
@override
TranslationsFi $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsFi(meta: meta ?? this.$meta);
// Translations
/// Teksti, joka kehottaa käyttäjää painamaan avatar-merkkiä aloittaakseen lataamisen.
@override String get upload_avatar => 'Lataa avatar';
/// Päällekkäin lueteltujen alkuun streamers by zaps
@override String get most_zapped_streamers => 'Eniten Zapped Streamers';
/// Käyttäjää ei löytynyt haun yhteydessä
@override String get no_user_found => 'Käyttäjää ei löytynyt';
/// Nimetön käyttäjä
@override String get anon => 'Anon';
/// Streamin katsojien määrä
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n,
one: '1 katsoja',
other: '${NumberFormat.decimalPattern('fi').format(n)} katsojat',
);
@override late final _TranslationsStreamFi stream = _TranslationsStreamFi._(_root);
@override late final _TranslationsGoalFi goal = _TranslationsGoalFi._(_root);
@override late final _TranslationsButtonFi button = _TranslationsButtonFi._(_root);
@override late final _TranslationsEmbedFi embed = _TranslationsEmbedFi._(_root);
/// Stream-luetteloiden otsikot stream-tyypeittäin live/päättynyt/suunniteltu jne.
@override late final _TranslationsStreamListFi stream_list = _TranslationsStreamListFi._(_root);
@override late final _TranslationsZapFi zap = _TranslationsZapFi._(_root);
@override late final _TranslationsProfileFi profile = _TranslationsProfileFi._(_root);
@override late final _TranslationsSettingsFi settings = _TranslationsSettingsFi._(_root);
@override late final _TranslationsLoginFi login = _TranslationsLoginFi._(_root);
}
// Path: stream
class _TranslationsStreamFi extends TranslationsStreamEn {
_TranslationsStreamFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusFi status = _TranslationsStreamStatusFi._(_root);
@override String started({required Object timestamp}) => 'Aloitettu ${timestamp}';
@override late final _TranslationsStreamChatFi chat = _TranslationsStreamChatFi._(_root);
}
// Path: goal
class _TranslationsGoalFi extends TranslationsGoalEn {
_TranslationsGoalFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Tavoite: ${amount}';
@override String remaining({required Object amount}) => 'Jäljellä: ${amount}';
@override String get complete => 'TÄYDELLINEN';
}
// Path: button
class _TranslationsButtonFi extends TranslationsButtonEn {
_TranslationsButtonFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
/// Kirjautumispainikkeen teksti
@override String get login => 'Kirjaudu sisään';
@override String get logout => 'Kirjaudu ulos';
@override String get edit_profile => 'Muokkaa profiilia';
/// Seuraa-painikkeen painikkeen teksti
@override String get follow => 'Seuraa';
/// Seuraa-painikkeen teksti
@override String get unfollow => 'Älä seuraa';
@override String get mute => 'Mykistä';
@override String get unmute => 'Poista mykistys';
@override String get share => 'Jaa';
@override String get save => 'Tallenna';
@override String get connect => 'Yhdistä';
@override String get settings => 'Asetukset';
}
// Path: embed
class _TranslationsEmbedFi extends TranslationsEmbedEn {
_TranslationsEmbedFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Artikkeli ${name}';
@override String note_by({required Object name}) => 'Viesti lähettäjältä ${name}';
@override String live_stream_by({required Object name}) => 'Suora lähetys osoitteessa ${name}';
}
// Path: stream_list
class _TranslationsStreamListFi extends TranslationsStreamListEn {
_TranslationsStreamListFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get following => 'Seuraa';
@override String get live => 'Live';
@override String get planned => 'Suunniteltu';
@override String get ended => 'Päättynyt';
}
// Path: zap
class _TranslationsZapFi extends TranslationsZapEn {
_TranslationsZapFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Mukautettu määrä';
@override String get confirm => 'Vahvista';
@override String get comment => 'Kommentoi';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} satsia';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Avaa lompakossa';
@override String get button_connect_wallet => 'Yhdistä lompakko';
@override String get copy => 'Kopioitu leikepöydälle';
@override late final _TranslationsZapErrorFi error = _TranslationsZapErrorFi._(_root);
}
// Path: profile
class _TranslationsProfileFi extends TranslationsProfileEn {
_TranslationsProfileFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Aikaisemmat lähetykset';
}
// Path: settings
class _TranslationsSettingsFi extends TranslationsSettingsEn {
_TranslationsSettingsFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Muokkaa profiilia';
@override String get button_wallet => 'Lompakon asetukset';
@override late final _TranslationsSettingsProfileFi profile = _TranslationsSettingsProfileFi._(_root);
@override late final _TranslationsSettingsWalletFi wallet = _TranslationsSettingsWalletFi._(_root);
}
// Path: login
class _TranslationsLoginFi extends TranslationsLoginEn {
_TranslationsLoginFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get username => 'Käyttäjätunnus';
@override String get amber => 'Kirjaudu sisään Amber kanssa';
@override String get key => 'Kirjaudu sisään avaimella';
@override String get create => 'Luo tili';
@override late final _TranslationsLoginErrorFi error = _TranslationsLoginErrorFi._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusFi extends TranslationsStreamStatusEn {
_TranslationsStreamStatusFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get live => 'LIVE';
@override String get ended => 'ENDED';
@override String get planned => 'SUUNNITELTU';
}
// Path: stream.chat
class _TranslationsStreamChatFi extends TranslationsStreamChatEn {
_TranslationsStreamChatFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT POISTETTU KÄYTÖSTÄ';
@override String disabled_timeout({required Object time}) => 'Aikakatkaisu päättyy: ${time}';
/// Chat-viesti, joka näyttää aikakatkaisutapahtumat
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' ajastettu '),
user,
const TextSpan(text: ' for '),
time,
]);
/// Virta päättyi alatunnisteen alareunaan chatissa
@override String get ended => 'STREAM PÄÄTTYNYT';
/// Chat-viestin näyttäminen stream zaps
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zappasi '),
amount,
const TextSpan(text: ' satsia'),
]);
@override late final _TranslationsStreamChatWriteFi write = _TranslationsStreamChatWriteFi._(_root);
@override late final _TranslationsStreamChatBadgeFi badge = _TranslationsStreamChatBadgeFi._(_root);
@override late final _TranslationsStreamChatRaidFi raid = _TranslationsStreamChatRaidFi._(_root);
}
// Path: zap.error
class _TranslationsZapErrorFi extends TranslationsZapErrorEn {
_TranslationsZapErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Virheellinen mukautettu määrä';
@override String get no_wallet => 'Ei asennettua salamalompakkoa';
@override String get no_lud16 => 'Salamaosoitetta ei löytynyt';
}
// Path: settings.profile
class _TranslationsSettingsProfileFi extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get display_name => 'Näytön nimi';
@override String get about => 'Tietoja';
@override String get nip05 => 'Nostr Osoite';
@override String get lud16 => 'Salama osoite';
@override late final _TranslationsSettingsProfileErrorFi error = _TranslationsSettingsProfileErrorFi._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletFi extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect-lompakko (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Irrota lompakko';
@override String get connect_1tap => '1-Tap-liitäntä';
@override String get paste => 'Liitä URL-osoite';
@override late final _TranslationsSettingsWalletErrorFi error = _TranslationsSettingsWalletErrorFi._(_root);
}
// Path: login.error
class _TranslationsLoginErrorFi extends TranslationsLoginErrorEn {
_TranslationsLoginErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Virheellinen avain';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteFi extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
/// Chat-viestin syöttöruudun tarra
@override String get label => 'Kirjoita viesti';
/// Chat-syöttöviesti näytetään, kun käyttäjä on kirjautunut sisään vain pubkey-avaimella.
@override String get no_signer => 'Ei voi kirjoittaa viestejä npub-kirjautumisella';
/// Chat-syötteen viesti näytetään, kun käyttäjä on kirjautunut ulos.
@override String get login => 'Kirjaudu sisään lähettääksesi viestejä';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeFi extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
/// Merkin saaneiden käyttäjien luettelon otsikko
@override String get awarded_to => 'Myönnetty:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidFi extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
/// Chat-viesti toiseen streamiin
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid viesti toisesta virrasta
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Lähtölaskenta ajastin automaattista ratsastusta varten
@override String countdown({required Object time}) => 'Ryöstöretket osoitteessa ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorFi extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Ei voi muokata profiilia, kun on kirjautunut ulos';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorFi extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Ei voi muodostaa yhteyttä lompakkoon, kun on kirjautunut ulos';
@override String get nwc_auth_event_not_found => 'Ei lompakko-auth-tapahtumaa löydetty';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsFi {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Lataa avatar';
case 'most_zapped_streamers': return 'Eniten Zapped Streamers';
case 'no_user_found': return 'Käyttäjää ei löytynyt';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n,
one: '1 katsoja',
other: '${NumberFormat.decimalPattern('fi').format(n)} katsojat',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'SUUNNITELTU';
case 'stream.started': return ({required Object timestamp}) => 'Aloitettu ${timestamp}';
case 'stream.chat.disabled': return 'CHAT POISTETTU KÄYTÖSTÄ';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Aikakatkaisu päättyy: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' ajastettu '),
user,
const TextSpan(text: ' for '),
time,
]);
case 'stream.chat.ended': return 'STREAM PÄÄTTYNYT';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zappasi '),
amount,
const TextSpan(text: ' satsia'),
]);
case 'stream.chat.write.label': return 'Kirjoita viesti';
case 'stream.chat.write.no_signer': return 'Ei voi kirjoittaa viestejä npub-kirjautumisella';
case 'stream.chat.write.login': return 'Kirjaudu sisään lähettääksesi viestejä';
case 'stream.chat.badge.awarded_to': return 'Myönnetty:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Ryöstöretket osoitteessa ${time}';
case 'goal.title': return ({required Object amount}) => 'Tavoite: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Jäljellä: ${amount}';
case 'goal.complete': return 'TÄYDELLINEN';
case 'button.login': return 'Kirjaudu sisään';
case 'button.logout': return 'Kirjaudu ulos';
case 'button.edit_profile': return 'Muokkaa profiilia';
case 'button.follow': return 'Seuraa';
case 'button.unfollow': return 'Älä seuraa';
case 'button.mute': return 'Mykistä';
case 'button.unmute': return 'Poista mykistys';
case 'button.share': return 'Jaa';
case 'button.save': return 'Tallenna';
case 'button.connect': return 'Yhdistä';
case 'button.settings': return 'Asetukset';
case 'embed.article_by': return ({required Object name}) => 'Artikkeli ${name}';
case 'embed.note_by': return ({required Object name}) => 'Viesti lähettäjältä ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Suora lähetys osoitteessa ${name}';
case 'stream_list.following': return 'Seuraa';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Suunniteltu';
case 'stream_list.ended': return 'Päättynyt';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Mukautettu määrä';
case 'zap.confirm': return 'Vahvista';
case 'zap.comment': return 'Kommentoi';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} satsia';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Avaa lompakossa';
case 'zap.button_connect_wallet': return 'Yhdistä lompakko';
case 'zap.copy': return 'Kopioitu leikepöydälle';
case 'zap.error.invalid_custom_amount': return 'Virheellinen mukautettu määrä';
case 'zap.error.no_wallet': return 'Ei asennettua salamalompakkoa';
case 'zap.error.no_lud16': return 'Salamaosoitetta ei löytynyt';
case 'profile.past_streams': return 'Aikaisemmat lähetykset';
case 'settings.button_profile': return 'Muokkaa profiilia';
case 'settings.button_wallet': return 'Lompakon asetukset';
case 'settings.profile.display_name': return 'Näytön nimi';
case 'settings.profile.about': return 'Tietoja';
case 'settings.profile.nip05': return 'Nostr Osoite';
case 'settings.profile.lud16': return 'Salama osoite';
case 'settings.profile.error.logged_out': return 'Ei voi muokata profiilia, kun on kirjautunut ulos';
case 'settings.wallet.connect_wallet': return 'Connect-lompakko (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Irrota lompakko';
case 'settings.wallet.connect_1tap': return '1-Tap-liitäntä';
case 'settings.wallet.paste': return 'Liitä URL-osoite';
case 'settings.wallet.error.logged_out': return 'Ei voi muodostaa yhteyttä lompakkoon, kun on kirjautunut ulos';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Ei lompakko-auth-tapahtumaa löydetty';
case 'login.username': return 'Käyttäjätunnus';
case 'login.amber': return 'Kirjaudu sisään Amber kanssa';
case 'login.key': return 'Kirjaudu sisään avaimella';
case 'login.create': return 'Luo tili';
case 'login.error.invalid_key': return 'Virheellinen avain';
default: return null;
}
}
}

469
lib/i18n/strings_fr.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsFr extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsFr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.fr,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <fr>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsFr _root = this; // ignore: unused_field
@override
TranslationsFr $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsFr(meta: meta ?? this.$meta);
// Translations
/// Texte invitant l'utilisateur à cliquer sur l'espace réservé à l'avatar pour commencer le téléchargement
@override String get upload_avatar => 'Télécharger l\'avatar';
/// Les têtes d'affiche sont listées par zaps.
@override String get most_zapped_streamers => 'Les Streamers les plus zappés';
/// Aucun utilisateur n'a été trouvé lors de la recherche
@override String get no_user_found => 'Aucun utilisateur trouvé';
/// Un utilisateur anonyme
@override String get anon => 'Anonyme';
/// Nombre de spectateurs du flux
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
one: '1 téléspectateur',
other: '${NumberFormat.decimalPattern('fr').format(n)} téléspectateurs',
);
@override late final _TranslationsStreamFr stream = _TranslationsStreamFr._(_root);
@override late final _TranslationsGoalFr goal = _TranslationsGoalFr._(_root);
@override late final _TranslationsButtonFr button = _TranslationsButtonFr._(_root);
@override late final _TranslationsEmbedFr embed = _TranslationsEmbedFr._(_root);
/// Rubriques sur les listes de flux par type de flux en direct/fini/prévu, etc.
@override late final _TranslationsStreamListFr stream_list = _TranslationsStreamListFr._(_root);
@override late final _TranslationsZapFr zap = _TranslationsZapFr._(_root);
@override late final _TranslationsProfileFr profile = _TranslationsProfileFr._(_root);
@override late final _TranslationsSettingsFr settings = _TranslationsSettingsFr._(_root);
@override late final _TranslationsLoginFr login = _TranslationsLoginFr._(_root);
}
// Path: stream
class _TranslationsStreamFr extends TranslationsStreamEn {
_TranslationsStreamFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusFr status = _TranslationsStreamStatusFr._(_root);
@override String started({required Object timestamp}) => 'Commencé à ${timestamp}';
@override late final _TranslationsStreamChatFr chat = _TranslationsStreamChatFr._(_root);
}
// Path: goal
class _TranslationsGoalFr extends TranslationsGoalEn {
_TranslationsGoalFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Objectif : ${amount}';
@override String remaining({required Object amount}) => 'Reste : ${amount}';
@override String get complete => 'COMPLET';
}
// Path: button
class _TranslationsButtonFr extends TranslationsButtonEn {
_TranslationsButtonFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
/// Texte du bouton de connexion
@override String get login => 'Se Connecter';
@override String get logout => 'Se déconnecter';
@override String get edit_profile => 'Modifier le Profil';
/// Texte du bouton de suivi
@override String get follow => 'Suivre';
/// Texte du bouton pour le bouton "unfollow
@override String get unfollow => 'Ne plus suivre';
@override String get mute => 'Muet';
@override String get unmute => 'Retirer sourdine';
@override String get share => 'Partager';
@override String get save => 'Sauvegarder';
@override String get connect => 'Connecter';
@override String get settings => 'Paramètres';
}
// Path: embed
class _TranslationsEmbedFr extends TranslationsEmbedEn {
_TranslationsEmbedFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Article par ${name}';
@override String note_by({required Object name}) => 'Note par ${name}';
@override String live_stream_by({required Object name}) => 'Retransmission en direct sur ${name}';
}
// Path: stream_list
class _TranslationsStreamListFr extends TranslationsStreamListEn {
_TranslationsStreamListFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get following => 'Abonnements';
@override String get live => 'En direct';
@override String get planned => 'Planifié';
@override String get ended => 'Terminé';
}
// Path: zap
class _TranslationsZapFr extends TranslationsZapEn {
_TranslationsZapFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Montant personnalisé';
@override String get confirm => 'Confirmer';
@override String get comment => 'Commenter';
@override String button_zap_ready({required Object amount}) => 'Zapper ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Ouvrir dans le portefeuille';
@override String get button_connect_wallet => 'Connecter le portefeuille';
@override String get copy => 'Copié dans le presse-papiers';
@override late final _TranslationsZapErrorFr error = _TranslationsZapErrorFr._(_root);
}
// Path: profile
class _TranslationsProfileFr extends TranslationsProfileEn {
_TranslationsProfileFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Streams passés';
}
// Path: settings
class _TranslationsSettingsFr extends TranslationsSettingsEn {
_TranslationsSettingsFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Modifier le profil';
@override String get button_wallet => 'Paramètres du portefeuille';
@override late final _TranslationsSettingsProfileFr profile = _TranslationsSettingsProfileFr._(_root);
@override late final _TranslationsSettingsWalletFr wallet = _TranslationsSettingsWalletFr._(_root);
}
// Path: login
class _TranslationsLoginFr extends TranslationsLoginEn {
_TranslationsLoginFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get username => 'Nom dutilisateur';
@override String get amber => 'Se connecter avec Amber';
@override String get key => 'Connexion avec la clé';
@override String get create => 'Créer un Compte';
@override late final _TranslationsLoginErrorFr error = _TranslationsLoginErrorFr._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusFr extends TranslationsStreamStatusEn {
_TranslationsStreamStatusFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get live => 'VIVRE';
@override String get ended => 'FINI';
@override String get planned => 'PRÉVU';
}
// Path: stream.chat
class _TranslationsStreamChatFr extends TranslationsStreamChatEn {
_TranslationsStreamChatFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DISABLED';
@override String disabled_timeout({required Object time}) => 'Le délai expire : ${time}';
/// Message de chat indiquant les événements de dépassement de délai
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' '),
user,
const TextSpan(text: ' a expiré dans le temps pour '),
time,
]);
/// Stream ended footer at bottom of chat
@override String get ended => 'STREAM ENDED';
/// Message de chat montrant des zaps de flux
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' a zappé '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteFr write = _TranslationsStreamChatWriteFr._(_root);
@override late final _TranslationsStreamChatBadgeFr badge = _TranslationsStreamChatBadgeFr._(_root);
@override late final _TranslationsStreamChatRaidFr raid = _TranslationsStreamChatRaidFr._(_root);
}
// Path: zap.error
class _TranslationsZapErrorFr extends TranslationsZapErrorEn {
_TranslationsZapErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Montant personnalisé non valide';
@override String get no_wallet => 'Pas de porte-monnaie électronique installé';
@override String get no_lud16 => 'Pas d\'adresse éclair trouvée';
}
// Path: settings.profile
class _TranslationsSettingsProfileFr extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get display_name => 'Nom d\'affichage';
@override String get about => 'A propos de';
@override String get nip05 => 'Nostr Adresse';
@override String get lud16 => 'Adresse de la foudre';
@override late final _TranslationsSettingsProfileErrorFr error = _TranslationsSettingsProfileErrorFr._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletFr extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Portefeuille Connect (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Déconnecter le portefeuille';
@override String get connect_1tap => 'Connexion à 1 robinet';
@override String get paste => 'Coller l\'URL';
@override late final _TranslationsSettingsWalletErrorFr error = _TranslationsSettingsWalletErrorFr._(_root);
}
// Path: login.error
class _TranslationsLoginErrorFr extends TranslationsLoginErrorEn {
_TranslationsLoginErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Clé non valide';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteFr extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
/// Étiquette sur la boîte de saisie du message de chat
@override String get label => 'Message écrit';
/// Message d'entrée du chat affiché lorsque l'utilisateur n'est connecté qu'avec pubkey
@override String get no_signer => 'Impossible d\'écrire des messages avec le login npub';
/// Message d'entrée du chat affiché lorsque l'utilisateur est déconnecté
@override String get login => 'Veuillez vous connecter pour envoyer des messages';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeFr extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
/// Titre sur la liste des utilisateurs qui ont reçu un badge
@override String get awarded_to => 'Attribué à :';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidFr extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
/// Message de raid par chat vers un autre flux
@override String to({required Object name}) => 'RAIDING ${name}';
/// Message de raid sur le chat à partir d'un autre flux
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Compte à rebours pour l'auto-raid
@override String countdown({required Object time}) => 'Raid sur ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorFr extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Impossible de modifier le profil lorsque l\'on est déconnecté';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorFr extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Impossible de se connecter au portefeuille lorsque l\'on est déconnecté';
@override String get nwc_auth_event_not_found => 'Aucun événement d\'authentification de portefeuille n\'a été trouvé';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsFr {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Télécharger l\'avatar';
case 'most_zapped_streamers': return 'Les Streamers les plus zappés';
case 'no_user_found': return 'Aucun utilisateur trouvé';
case 'anon': return 'Anonyme';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
one: '1 téléspectateur',
other: '${NumberFormat.decimalPattern('fr').format(n)} téléspectateurs',
);
case 'stream.status.live': return 'VIVRE';
case 'stream.status.ended': return 'FINI';
case 'stream.status.planned': return 'PRÉVU';
case 'stream.started': return ({required Object timestamp}) => 'Commencé à ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABLED';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Le délai expire : ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' '),
user,
const TextSpan(text: ' a expiré dans le temps pour '),
time,
]);
case 'stream.chat.ended': return 'STREAM ENDED';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' a zappé '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Message écrit';
case 'stream.chat.write.no_signer': return 'Impossible d\'écrire des messages avec le login npub';
case 'stream.chat.write.login': return 'Veuillez vous connecter pour envoyer des messages';
case 'stream.chat.badge.awarded_to': return 'Attribué à :';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raid sur ${time}';
case 'goal.title': return ({required Object amount}) => 'Objectif : ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Reste : ${amount}';
case 'goal.complete': return 'COMPLET';
case 'button.login': return 'Se Connecter';
case 'button.logout': return 'Se déconnecter';
case 'button.edit_profile': return 'Modifier le Profil';
case 'button.follow': return 'Suivre';
case 'button.unfollow': return 'Ne plus suivre';
case 'button.mute': return 'Muet';
case 'button.unmute': return 'Retirer sourdine';
case 'button.share': return 'Partager';
case 'button.save': return 'Sauvegarder';
case 'button.connect': return 'Connecter';
case 'button.settings': return 'Paramètres';
case 'embed.article_by': return ({required Object name}) => 'Article par ${name}';
case 'embed.note_by': return ({required Object name}) => 'Note par ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Retransmission en direct sur ${name}';
case 'stream_list.following': return 'Abonnements';
case 'stream_list.live': return 'En direct';
case 'stream_list.planned': return 'Planifié';
case 'stream_list.ended': return 'Terminé';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Montant personnalisé';
case 'zap.confirm': return 'Confirmer';
case 'zap.comment': return 'Commenter';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zapper ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Ouvrir dans le portefeuille';
case 'zap.button_connect_wallet': return 'Connecter le portefeuille';
case 'zap.copy': return 'Copié dans le presse-papiers';
case 'zap.error.invalid_custom_amount': return 'Montant personnalisé non valide';
case 'zap.error.no_wallet': return 'Pas de porte-monnaie électronique installé';
case 'zap.error.no_lud16': return 'Pas d\'adresse éclair trouvée';
case 'profile.past_streams': return 'Streams passés';
case 'settings.button_profile': return 'Modifier le profil';
case 'settings.button_wallet': return 'Paramètres du portefeuille';
case 'settings.profile.display_name': return 'Nom d\'affichage';
case 'settings.profile.about': return 'A propos de';
case 'settings.profile.nip05': return 'Nostr Adresse';
case 'settings.profile.lud16': return 'Adresse de la foudre';
case 'settings.profile.error.logged_out': return 'Impossible de modifier le profil lorsque l\'on est déconnecté';
case 'settings.wallet.connect_wallet': return 'Portefeuille Connect (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Déconnecter le portefeuille';
case 'settings.wallet.connect_1tap': return 'Connexion à 1 robinet';
case 'settings.wallet.paste': return 'Coller l\'URL';
case 'settings.wallet.error.logged_out': return 'Impossible de se connecter au portefeuille lorsque l\'on est déconnecté';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Aucun événement d\'authentification de portefeuille n\'a été trouvé';
case 'login.username': return 'Nom dutilisateur';
case 'login.amber': return 'Se connecter avec Amber';
case 'login.key': return 'Connexion avec la clé';
case 'login.create': return 'Créer un Compte';
case 'login.error.invalid_key': return 'Clé non valide';
default: return null;
}
}
}

471
lib/i18n/strings_hu.g.dart Normal file
View File

@ -0,0 +1,471 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsHu extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsHu({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.hu,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <hu>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsHu _root = this; // ignore: unused_field
@override
TranslationsHu $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsHu(meta: meta ?? this.$meta);
// Translations
/// Szöveg, amely arra kéri a felhasználót, hogy a feltöltés megkezdéséhez nyomja meg az avatar helyőrzőt
@override String get upload_avatar => 'Avatár feltöltése';
/// Irány a felsorolt top streamerek fölött zaps által
@override String get most_zapped_streamers => 'A legtöbb Zapped Streamers';
/// Kereséskor nem talált felhasználó
@override String get no_user_found => 'Nem talált felhasználó';
/// Egy névtelen felhasználó
@override String get anon => 'Névtelen';
/// A stream nézőinek száma
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n,
one: '1 néző',
other: '${NumberFormat.decimalPattern('hu').format(n)} nézők',
);
@override late final _TranslationsStreamHu stream = _TranslationsStreamHu._(_root);
@override late final _TranslationsGoalHu goal = _TranslationsGoalHu._(_root);
@override late final _TranslationsButtonHu button = _TranslationsButtonHu._(_root);
@override late final _TranslationsEmbedHu embed = _TranslationsEmbedHu._(_root);
/// A stream-listák címsorai stream-típusonként élő/befejezett/tervezett stb.
@override late final _TranslationsStreamListHu stream_list = _TranslationsStreamListHu._(_root);
@override late final _TranslationsZapHu zap = _TranslationsZapHu._(_root);
@override late final _TranslationsProfileHu profile = _TranslationsProfileHu._(_root);
@override late final _TranslationsSettingsHu settings = _TranslationsSettingsHu._(_root);
@override late final _TranslationsLoginHu login = _TranslationsLoginHu._(_root);
}
// Path: stream
class _TranslationsStreamHu extends TranslationsStreamEn {
_TranslationsStreamHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusHu status = _TranslationsStreamStatusHu._(_root);
@override String started({required Object timestamp}) => 'Elindult ${timestamp}';
@override late final _TranslationsStreamChatHu chat = _TranslationsStreamChatHu._(_root);
}
// Path: goal
class _TranslationsGoalHu extends TranslationsGoalEn {
_TranslationsGoalHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Cél: ${amount}';
@override String remaining({required Object amount}) => 'Maradék: ${amount}';
@override String get complete => 'TELJES';
}
// Path: button
class _TranslationsButtonHu extends TranslationsButtonEn {
_TranslationsButtonHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
/// A bejelentkezési gomb szövege
@override String get login => 'Bejelentkezés';
@override String get logout => 'Kijelentkezés';
@override String get edit_profile => 'Profil szerkesztése';
/// A követés gomb szövege
@override String get follow => 'Követés';
/// A követés megszüntetése gomb szövege
@override String get unfollow => 'Követés megszüntetése';
@override String get mute => 'Némítás';
@override String get unmute => 'Némítás visszavonása';
@override String get share => 'Megosztás';
@override String get save => 'Mentés';
@override String get connect => 'Csatlakozás';
@override String get settings => 'Beállítások';
}
// Path: embed
class _TranslationsEmbedHu extends TranslationsEmbedEn {
_TranslationsEmbedHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Cikk ${name}';
@override String note_by({required Object name}) => '${name} bejegyzése';
@override String live_stream_by({required Object name}) => 'Élő közvetítés a ${name}oldalon';
}
// Path: stream_list
class _TranslationsStreamListHu extends TranslationsStreamListEn {
_TranslationsStreamListHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get following => 'Követettek bejegyzései';
@override String get live => 'Élő';
@override String get planned => 'Tervezett';
@override String get ended => 'Véget ért';
}
// Path: zap
class _TranslationsZapHu extends TranslationsZapEn {
_TranslationsZapHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Egyéni összeg';
@override String get confirm => 'Megerősítés';
@override String get comment => 'Hozzászólás';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} satoshi';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Megnyitás a pénztárcában';
@override String get button_connect_wallet => 'Connect Wallet';
@override String get copy => 'Vágólapra másolva';
@override late final _TranslationsZapErrorHu error = _TranslationsZapErrorHu._(_root);
}
// Path: profile
class _TranslationsProfileHu extends TranslationsProfileEn {
_TranslationsProfileHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Múltbeli Streamek';
}
// Path: settings
class _TranslationsSettingsHu extends TranslationsSettingsEn {
_TranslationsSettingsHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Profil szerkesztése';
@override String get button_wallet => 'Pénztárca beállítások';
@override late final _TranslationsSettingsProfileHu profile = _TranslationsSettingsProfileHu._(_root);
@override late final _TranslationsSettingsWalletHu wallet = _TranslationsSettingsWalletHu._(_root);
}
// Path: login
class _TranslationsLoginHu extends TranslationsLoginEn {
_TranslationsLoginHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get username => 'Felhasználónév';
@override String get amber => 'Bejelentkezés Amber segítségével';
@override String get key => 'Bejelentkezés kulccsal';
@override String get create => 'Fiók Létrehozása';
@override late final _TranslationsLoginErrorHu error = _TranslationsLoginErrorHu._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusHu extends TranslationsStreamStatusEn {
_TranslationsStreamStatusHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get live => 'ÉLŐ';
@override String get ended => 'ENDED';
@override String get planned => 'TERVEZETT';
}
// Path: stream.chat
class _TranslationsStreamChatHu extends TranslationsStreamChatEn {
_TranslationsStreamChatHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT KIKAPCSOLVA';
@override String disabled_timeout({required Object time}) => 'Az időkorlát lejár: ${time}';
/// Chat üzenet az időkorlátos események megjelenítésével
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' időzített '),
user,
const TextSpan(text: ' a '),
time,
const TextSpan(text: 'számára'),
]);
/// A stream véget ért lábléc a chat alján
@override String get ended => 'STREAM MEGSZÜNTETETT';
/// Csevegőüzenet, amely stream zapokat mutat
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zap-elt '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteHu write = _TranslationsStreamChatWriteHu._(_root);
@override late final _TranslationsStreamChatBadgeHu badge = _TranslationsStreamChatBadgeHu._(_root);
@override late final _TranslationsStreamChatRaidHu raid = _TranslationsStreamChatRaidHu._(_root);
}
// Path: zap.error
class _TranslationsZapErrorHu extends TranslationsZapErrorEn {
_TranslationsZapErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Érvénytelen egyéni összeg';
@override String get no_wallet => 'Nincs telepített villám tárca';
@override String get no_lud16 => 'Nem talált villámcím';
}
// Path: settings.profile
class _TranslationsSettingsProfileHu extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get display_name => 'Megjelenített név';
@override String get about => 'A oldalról';
@override String get nip05 => 'Nostr cím';
@override String get lud16 => 'Villám cím';
@override late final _TranslationsSettingsProfileErrorHu error = _TranslationsSettingsProfileErrorHu._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletHu extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Pénztárca lekapcsolása';
@override String get connect_1tap => '1-Tap csatlakozás';
@override String get paste => 'URL beillesztése';
@override late final _TranslationsSettingsWalletErrorHu error = _TranslationsSettingsWalletErrorHu._(_root);
}
// Path: login.error
class _TranslationsLoginErrorHu extends TranslationsLoginErrorEn {
_TranslationsLoginErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Érvénytelen kulcs';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteHu extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
/// Címke a csevegőüzenet beviteli mezőjén
@override String get label => 'Üzenet írása';
/// A csevegés bemeneti üzenete megjelenik, ha a felhasználó csak pubkey-vel van bejelentkezve
@override String get no_signer => 'Nem tud üzeneteket írni az npub bejelentkezéssel';
/// A felhasználó kijelentkezésekor megjelenő csevegési beviteli üzenet
@override String get login => 'Kérjük, jelentkezzen be az üzenetek küldéséhez';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeHu extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
/// Fejléc a jelvényt kapott felhasználók listája fölött
@override String get awarded_to => 'Elnyerte:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidHu extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
/// Chat raid üzenet egy másik folyamba
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid üzenet egy másik folyamból
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Visszaszámláló időzítő az automatikus lovagláshoz
@override String countdown({required Object time}) => 'Raiding a ${time}oldalon';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorHu extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kijelentkezve nem lehet profilt szerkeszteni';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorHu extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kijelentkezve nem lehet csatlakozni a pénztárcához';
@override String get nwc_auth_event_not_found => 'Nem találtak pénztárca-auth eseményt';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsHu {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Avatár feltöltése';
case 'most_zapped_streamers': return 'A legtöbb Zapped Streamers';
case 'no_user_found': return 'Nem talált felhasználó';
case 'anon': return 'Névtelen';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n,
one: '1 néző',
other: '${NumberFormat.decimalPattern('hu').format(n)} nézők',
);
case 'stream.status.live': return 'ÉLŐ';
case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'TERVEZETT';
case 'stream.started': return ({required Object timestamp}) => 'Elindult ${timestamp}';
case 'stream.chat.disabled': return 'CHAT KIKAPCSOLVA';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Az időkorlát lejár: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' időzített '),
user,
const TextSpan(text: ' a '),
time,
const TextSpan(text: 'számára'),
]);
case 'stream.chat.ended': return 'STREAM MEGSZÜNTETETT';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zap-elt '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Üzenet írása';
case 'stream.chat.write.no_signer': return 'Nem tud üzeneteket írni az npub bejelentkezéssel';
case 'stream.chat.write.login': return 'Kérjük, jelentkezzen be az üzenetek küldéséhez';
case 'stream.chat.badge.awarded_to': return 'Elnyerte:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding a ${time}oldalon';
case 'goal.title': return ({required Object amount}) => 'Cél: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Maradék: ${amount}';
case 'goal.complete': return 'TELJES';
case 'button.login': return 'Bejelentkezés';
case 'button.logout': return 'Kijelentkezés';
case 'button.edit_profile': return 'Profil szerkesztése';
case 'button.follow': return 'Követés';
case 'button.unfollow': return 'Követés megszüntetése';
case 'button.mute': return 'Némítás';
case 'button.unmute': return 'Némítás visszavonása';
case 'button.share': return 'Megosztás';
case 'button.save': return 'Mentés';
case 'button.connect': return 'Csatlakozás';
case 'button.settings': return 'Beállítások';
case 'embed.article_by': return ({required Object name}) => 'Cikk ${name}';
case 'embed.note_by': return ({required Object name}) => '${name} bejegyzése';
case 'embed.live_stream_by': return ({required Object name}) => 'Élő közvetítés a ${name}oldalon';
case 'stream_list.following': return 'Követettek bejegyzései';
case 'stream_list.live': return 'Élő';
case 'stream_list.planned': return 'Tervezett';
case 'stream_list.ended': return 'Véget ért';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Egyéni összeg';
case 'zap.confirm': return 'Megerősítés';
case 'zap.comment': return 'Hozzászólás';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} satoshi';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Megnyitás a pénztárcában';
case 'zap.button_connect_wallet': return 'Connect Wallet';
case 'zap.copy': return 'Vágólapra másolva';
case 'zap.error.invalid_custom_amount': return 'Érvénytelen egyéni összeg';
case 'zap.error.no_wallet': return 'Nincs telepített villám tárca';
case 'zap.error.no_lud16': return 'Nem talált villámcím';
case 'profile.past_streams': return 'Múltbeli Streamek';
case 'settings.button_profile': return 'Profil szerkesztése';
case 'settings.button_wallet': return 'Pénztárca beállítások';
case 'settings.profile.display_name': return 'Megjelenített név';
case 'settings.profile.about': return 'A oldalról';
case 'settings.profile.nip05': return 'Nostr cím';
case 'settings.profile.lud16': return 'Villám cím';
case 'settings.profile.error.logged_out': return 'Kijelentkezve nem lehet profilt szerkeszteni';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Pénztárca lekapcsolása';
case 'settings.wallet.connect_1tap': return '1-Tap csatlakozás';
case 'settings.wallet.paste': return 'URL beillesztése';
case 'settings.wallet.error.logged_out': return 'Kijelentkezve nem lehet csatlakozni a pénztárcához';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Nem találtak pénztárca-auth eseményt';
case 'login.username': return 'Felhasználónév';
case 'login.amber': return 'Bejelentkezés Amber segítségével';
case 'login.key': return 'Bejelentkezés kulccsal';
case 'login.create': return 'Fiók Létrehozása';
case 'login.error.invalid_key': return 'Érvénytelen kulcs';
default: return null;
}
}
}

469
lib/i18n/strings_it.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsIt extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsIt({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.it,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <it>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsIt _root = this; // ignore: unused_field
@override
TranslationsIt $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsIt(meta: meta ?? this.$meta);
// Translations
/// Testo che richiede all'utente di premere il segnaposto dell'avatar per iniziare il caricamento
@override String get upload_avatar => 'Carica Avatar';
/// Direzione sopra elencata top streamers da zaps
@override String get most_zapped_streamers => 'Il maggior numero di streamer bloccati';
/// Nessun utente trovato durante la ricerca
@override String get no_user_found => 'Nessun utente trovato';
/// Un utente anonimo
@override String get anon => 'Anonimo';
/// Numero di spettatori del flusso
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n,
one: '1 spettatore',
other: '${NumberFormat.decimalPattern('it').format(n)} spettatori',
);
@override late final _TranslationsStreamIt stream = _TranslationsStreamIt._(_root);
@override late final _TranslationsGoalIt goal = _TranslationsGoalIt._(_root);
@override late final _TranslationsButtonIt button = _TranslationsButtonIt._(_root);
@override late final _TranslationsEmbedIt embed = _TranslationsEmbedIt._(_root);
/// Titoli sugli elenchi dei flussi per tipo di flusso live/finito/pianificato ecc.
@override late final _TranslationsStreamListIt stream_list = _TranslationsStreamListIt._(_root);
@override late final _TranslationsZapIt zap = _TranslationsZapIt._(_root);
@override late final _TranslationsProfileIt profile = _TranslationsProfileIt._(_root);
@override late final _TranslationsSettingsIt settings = _TranslationsSettingsIt._(_root);
@override late final _TranslationsLoginIt login = _TranslationsLoginIt._(_root);
}
// Path: stream
class _TranslationsStreamIt extends TranslationsStreamEn {
_TranslationsStreamIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusIt status = _TranslationsStreamStatusIt._(_root);
@override String started({required Object timestamp}) => 'Avviato ${timestamp}';
@override late final _TranslationsStreamChatIt chat = _TranslationsStreamChatIt._(_root);
}
// Path: goal
class _TranslationsGoalIt extends TranslationsGoalEn {
_TranslationsGoalIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Obiettivo: ${amount}';
@override String remaining({required Object amount}) => 'Restante: ${amount}';
@override String get complete => 'COMPLETO';
}
// Path: button
class _TranslationsButtonIt extends TranslationsButtonEn {
_TranslationsButtonIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
/// Testo del pulsante per il pulsante di accesso
@override String get login => 'Login';
@override String get logout => 'Logout';
@override String get edit_profile => 'Modifica profilo';
/// Testo del pulsante per il pulsante Segui
@override String get follow => 'Segui';
/// Testo del pulsante per il pulsante unfollow
@override String get unfollow => 'Smetti di seguire';
@override String get mute => 'Silenzia';
@override String get unmute => 'Riattiva';
@override String get share => 'Condividi';
@override String get save => 'Salva';
@override String get connect => 'Collegare';
@override String get settings => 'Impostazioni';
}
// Path: embed
class _TranslationsEmbedIt extends TranslationsEmbedEn {
_TranslationsEmbedIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Articolo di ${name}';
@override String note_by({required Object name}) => 'Nota di ${name}';
@override String live_stream_by({required Object name}) => 'Streaming in diretta da ${name}';
}
// Path: stream_list
class _TranslationsStreamListIt extends TranslationsStreamListEn {
_TranslationsStreamListIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get following => 'Seguiti';
@override String get live => 'Dal vivo';
@override String get planned => 'Pianificato';
@override String get ended => 'Terminato';
}
// Path: zap
class _TranslationsZapIt extends TranslationsZapEn {
_TranslationsZapIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Importo personalizzato';
@override String get confirm => 'Conferma';
@override String get comment => 'Commenta';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Aprire nel portafoglio';
@override String get button_connect_wallet => 'Portafoglio Connect';
@override String get copy => 'Copiato negli appunti';
@override late final _TranslationsZapErrorIt error = _TranslationsZapErrorIt._(_root);
}
// Path: profile
class _TranslationsProfileIt extends TranslationsProfileEn {
_TranslationsProfileIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Flussi passati';
}
// Path: settings
class _TranslationsSettingsIt extends TranslationsSettingsEn {
_TranslationsSettingsIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Modifica profilo';
@override String get button_wallet => 'Impostazioni del portafoglio';
@override late final _TranslationsSettingsProfileIt profile = _TranslationsSettingsProfileIt._(_root);
@override late final _TranslationsSettingsWalletIt wallet = _TranslationsSettingsWalletIt._(_root);
}
// Path: login
class _TranslationsLoginIt extends TranslationsLoginEn {
_TranslationsLoginIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get username => 'Nome utente';
@override String get amber => 'Accesso con Amber';
@override String get key => 'Accesso con chiave';
@override String get create => 'Crea un account';
@override late final _TranslationsLoginErrorIt error = _TranslationsLoginErrorIt._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusIt extends TranslationsStreamStatusEn {
_TranslationsStreamStatusIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get live => 'IN DIRETTA';
@override String get ended => 'FINE';
@override String get planned => 'PREVISTO';
}
// Path: stream.chat
class _TranslationsStreamChatIt extends TranslationsStreamChatEn {
_TranslationsStreamChatIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DISABILITATA';
@override String disabled_timeout({required Object time}) => 'Il timeout scade: ${time}';
/// Messaggio di chat che mostra gli eventi di timeout
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' time out '),
user,
const TextSpan(text: ' per '),
time,
]);
/// Il flusso si è concluso con un piè di pagina in fondo alla chat
@override String get ended => 'STREAM ENDED';
/// Messaggio di chat che mostra gli zap del flusso
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' ha effettuato uno zap di '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteIt write = _TranslationsStreamChatWriteIt._(_root);
@override late final _TranslationsStreamChatBadgeIt badge = _TranslationsStreamChatBadgeIt._(_root);
@override late final _TranslationsStreamChatRaidIt raid = _TranslationsStreamChatRaidIt._(_root);
}
// Path: zap.error
class _TranslationsZapErrorIt extends TranslationsZapErrorEn {
_TranslationsZapErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Importo personalizzato non valido';
@override String get no_wallet => 'Nessun portafoglio Lightning installato';
@override String get no_lud16 => 'Nessun indirizzo di fulmine trovato';
}
// Path: settings.profile
class _TranslationsSettingsProfileIt extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get display_name => 'Nome visualizzato';
@override String get about => 'Circa';
@override String get nip05 => 'Indirizzo';
@override String get lud16 => 'Indirizzo del fulmine';
@override late final _TranslationsSettingsProfileErrorIt error = _TranslationsSettingsProfileErrorIt._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletIt extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Portafoglio Connect (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Disconnettere il portafoglio';
@override String get connect_1tap => 'Connessione a 1 rubinetto';
@override String get paste => 'Incolla URL';
@override late final _TranslationsSettingsWalletErrorIt error = _TranslationsSettingsWalletErrorIt._(_root);
}
// Path: login.error
class _TranslationsLoginErrorIt extends TranslationsLoginErrorEn {
_TranslationsLoginErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Chiave non valida';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteIt extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
/// Etichetta della casella di immissione del messaggio di chat
@override String get label => 'Scrivi il messaggio';
/// Messaggio di ingresso alla chat mostrato quando l'utente è connesso solo con la pubkey
@override String get no_signer => 'Impossibile scrivere messaggi con il login npub';
/// Messaggio di input della chat mostrato quando l'utente è disconnesso
@override String get login => 'Effettuare il login per inviare messaggi';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeIt extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
/// Intestazione dell'elenco degli utenti a cui è stato assegnato un badge
@override String get awarded_to => 'Assegnato a:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidIt extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
/// Messaggio di chat raid in un altro flusso
@override String to({required Object name}) => 'RAIDING ${name}';
/// Messaggio di chat raid da un altro flusso
@override String from({required Object name}) => 'RAID DA ${name}';
/// Timer per il conto alla rovescia per l'auto-raid
@override String countdown({required Object time}) => 'Raid in ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorIt extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Impossibile modificare il profilo quando si è disconnessi';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorIt extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Impossibile connettere il portafoglio quando si è disconnessi';
@override String get nwc_auth_event_not_found => 'Nessun evento wallet auth trovato';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsIt {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Carica Avatar';
case 'most_zapped_streamers': return 'Il maggior numero di streamer bloccati';
case 'no_user_found': return 'Nessun utente trovato';
case 'anon': return 'Anonimo';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n,
one: '1 spettatore',
other: '${NumberFormat.decimalPattern('it').format(n)} spettatori',
);
case 'stream.status.live': return 'IN DIRETTA';
case 'stream.status.ended': return 'FINE';
case 'stream.status.planned': return 'PREVISTO';
case 'stream.started': return ({required Object timestamp}) => 'Avviato ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABILITATA';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Il timeout scade: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' time out '),
user,
const TextSpan(text: ' per '),
time,
]);
case 'stream.chat.ended': return 'STREAM ENDED';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' ha effettuato uno zap di '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Scrivi il messaggio';
case 'stream.chat.write.no_signer': return 'Impossibile scrivere messaggi con il login npub';
case 'stream.chat.write.login': return 'Effettuare il login per inviare messaggi';
case 'stream.chat.badge.awarded_to': return 'Assegnato a:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID DA ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raid in ${time}';
case 'goal.title': return ({required Object amount}) => 'Obiettivo: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Restante: ${amount}';
case 'goal.complete': return 'COMPLETO';
case 'button.login': return 'Login';
case 'button.logout': return 'Logout';
case 'button.edit_profile': return 'Modifica profilo';
case 'button.follow': return 'Segui';
case 'button.unfollow': return 'Smetti di seguire';
case 'button.mute': return 'Silenzia';
case 'button.unmute': return 'Riattiva';
case 'button.share': return 'Condividi';
case 'button.save': return 'Salva';
case 'button.connect': return 'Collegare';
case 'button.settings': return 'Impostazioni';
case 'embed.article_by': return ({required Object name}) => 'Articolo di ${name}';
case 'embed.note_by': return ({required Object name}) => 'Nota di ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Streaming in diretta da ${name}';
case 'stream_list.following': return 'Seguiti';
case 'stream_list.live': return 'Dal vivo';
case 'stream_list.planned': return 'Pianificato';
case 'stream_list.ended': return 'Terminato';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Importo personalizzato';
case 'zap.confirm': return 'Conferma';
case 'zap.comment': return 'Commenta';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Aprire nel portafoglio';
case 'zap.button_connect_wallet': return 'Portafoglio Connect';
case 'zap.copy': return 'Copiato negli appunti';
case 'zap.error.invalid_custom_amount': return 'Importo personalizzato non valido';
case 'zap.error.no_wallet': return 'Nessun portafoglio Lightning installato';
case 'zap.error.no_lud16': return 'Nessun indirizzo di fulmine trovato';
case 'profile.past_streams': return 'Flussi passati';
case 'settings.button_profile': return 'Modifica profilo';
case 'settings.button_wallet': return 'Impostazioni del portafoglio';
case 'settings.profile.display_name': return 'Nome visualizzato';
case 'settings.profile.about': return 'Circa';
case 'settings.profile.nip05': return 'Indirizzo';
case 'settings.profile.lud16': return 'Indirizzo del fulmine';
case 'settings.profile.error.logged_out': return 'Impossibile modificare il profilo quando si è disconnessi';
case 'settings.wallet.connect_wallet': return 'Portafoglio Connect (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Disconnettere il portafoglio';
case 'settings.wallet.connect_1tap': return 'Connessione a 1 rubinetto';
case 'settings.wallet.paste': return 'Incolla URL';
case 'settings.wallet.error.logged_out': return 'Impossibile connettere il portafoglio quando si è disconnessi';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Nessun evento wallet auth trovato';
case 'login.username': return 'Nome utente';
case 'login.amber': return 'Accesso con Amber';
case 'login.key': return 'Accesso con chiave';
case 'login.create': return 'Crea un account';
case 'login.error.invalid_key': return 'Chiave non valida';
default: return null;
}
}
}

469
lib/i18n/strings_ja.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsJa extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsJa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.ja,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <ja>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsJa _root = this; // ignore: unused_field
@override
TranslationsJa $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsJa(meta: meta ?? this.$meta);
// Translations
/// アバターのプレースホルダーを押してアップロードを開始するよう促すテキスト
@override String get upload_avatar => '画像アップロード';
/// ザップによるリストの上のストリーマーに向かう
@override String get most_zapped_streamers => '最もザッピングされたストリーマー';
/// 検索してもユーザーが見つからない
@override String get no_user_found => 'ユーザーが見つかりません';
/// 匿名ユーザー
@override String get anon => '匿名';
/// ストリームの視聴者数
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n,
one: '1 視聴者',
other: '${NumberFormat.decimalPattern('ja').format(n)} 人が視聴中',
);
@override late final _TranslationsStreamJa stream = _TranslationsStreamJa._(_root);
@override late final _TranslationsGoalJa goal = _TranslationsGoalJa._(_root);
@override late final _TranslationsButtonJa button = _TranslationsButtonJa._(_root);
@override late final _TranslationsEmbedJa embed = _TranslationsEmbedJa._(_root);
/// ライブ/終了/予定など、ストリーム・タイプ別のストリーム・リストの見出し。
@override late final _TranslationsStreamListJa stream_list = _TranslationsStreamListJa._(_root);
@override late final _TranslationsZapJa zap = _TranslationsZapJa._(_root);
@override late final _TranslationsProfileJa profile = _TranslationsProfileJa._(_root);
@override late final _TranslationsSettingsJa settings = _TranslationsSettingsJa._(_root);
@override late final _TranslationsLoginJa login = _TranslationsLoginJa._(_root);
}
// Path: stream
class _TranslationsStreamJa extends TranslationsStreamEn {
_TranslationsStreamJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusJa status = _TranslationsStreamStatusJa._(_root);
@override String started({required Object timestamp}) => '${timestamp} を開始';
@override late final _TranslationsStreamChatJa chat = _TranslationsStreamChatJa._(_root);
}
// Path: goal
class _TranslationsGoalJa extends TranslationsGoalEn {
_TranslationsGoalJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => '目標額: ${amount}';
@override String remaining({required Object amount}) => '残り: ${amount}';
@override String get complete => '完了';
}
// Path: button
class _TranslationsButtonJa extends TranslationsButtonEn {
_TranslationsButtonJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
/// ログインボタンのテキスト
@override String get login => 'ログイン';
@override String get logout => 'ログアウト';
@override String get edit_profile => 'プロフィールを編集';
/// フォローボタンのテキスト
@override String get follow => 'フォロー';
/// フォロー解除ボタンのテキスト
@override String get unfollow => 'フォロー解除';
@override String get mute => 'ミュート';
@override String get unmute => 'ミュート解除';
@override String get share => '共有';
@override String get save => '保存';
@override String get connect => '接続';
@override String get settings => '設定';
}
// Path: embed
class _TranslationsEmbedJa extends TranslationsEmbedEn {
_TranslationsEmbedJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => '記事: ${name}';
@override String note_by({required Object name}) => '${name} の投稿';
@override String live_stream_by({required Object name}) => 'ライブ・ストリーム ${name}';
}
// Path: stream_list
class _TranslationsStreamListJa extends TranslationsStreamListEn {
_TranslationsStreamListJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get following => 'フォロー中';
@override String get live => 'ライブ配信中';
@override String get planned => '予定あり';
@override String get ended => '終了しました';
}
// Path: zap
class _TranslationsZapJa extends TranslationsZapEn {
_TranslationsZapJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => '${name} をザップ';
@override String get custom_amount => 'カスタム金額';
@override String get confirm => '確認';
@override String get comment => 'コメント';
@override String button_zap_ready({required Object amount}) => '${amount} satsをザップする';
@override String get button_zap => 'ザップ';
@override String get button_open_wallet => 'ウォレットで開く';
@override String get button_connect_wallet => 'コネクトウォレット';
@override String get copy => 'クリップボードにコピー';
@override late final _TranslationsZapErrorJa error = _TranslationsZapErrorJa._(_root);
}
// Path: profile
class _TranslationsProfileJa extends TranslationsProfileEn {
_TranslationsProfileJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get past_streams => '過去の配信';
}
// Path: settings
class _TranslationsSettingsJa extends TranslationsSettingsEn {
_TranslationsSettingsJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get button_profile => 'プロフィール編集';
@override String get button_wallet => 'ウォレットの設定';
@override late final _TranslationsSettingsProfileJa profile = _TranslationsSettingsProfileJa._(_root);
@override late final _TranslationsSettingsWalletJa wallet = _TranslationsSettingsWalletJa._(_root);
}
// Path: login
class _TranslationsLoginJa extends TranslationsLoginEn {
_TranslationsLoginJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get username => 'ユーザー名';
@override String get amber => '琥珀でログイン';
@override String get key => 'キーでログイン';
@override String get create => 'アカウントを作成する';
@override late final _TranslationsLoginErrorJa error = _TranslationsLoginErrorJa._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusJa extends TranslationsStreamStatusEn {
_TranslationsStreamStatusJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get live => 'ライブ';
@override String get ended => '終了';
@override String get planned => '予定';
}
// Path: stream.chat
class _TranslationsStreamChatJa extends TranslationsStreamChatEn {
_TranslationsStreamChatJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get disabled => 'チャット無効';
@override String disabled_timeout({required Object time}) => 'タイムアウト: ${time}';
/// タイムアウトイベントを表示するチャットメッセージ
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' タイムアウト '),
user,
const TextSpan(text: ' for '),
time,
]);
/// チャットの下にストリーム終了のフッター
@override String get ended => '配信終了';
/// ストリームのザッピングを表示するチャットメッセージ
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ''),
amount,
const TextSpan(text: ' sats をザップしました'),
]);
@override late final _TranslationsStreamChatWriteJa write = _TranslationsStreamChatWriteJa._(_root);
@override late final _TranslationsStreamChatBadgeJa badge = _TranslationsStreamChatBadgeJa._(_root);
@override late final _TranslationsStreamChatRaidJa raid = _TranslationsStreamChatRaidJa._(_root);
}
// Path: zap.error
class _TranslationsZapErrorJa extends TranslationsZapErrorEn {
_TranslationsZapErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => '無効なカスタム金額';
@override String get no_wallet => 'Lightningウォレット未装着';
@override String get no_lud16 => '雷アドレスが見つかりません';
}
// Path: settings.profile
class _TranslationsSettingsProfileJa extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get display_name => '表示名';
@override String get about => 'について';
@override String get nip05 => '住所';
@override String get lud16 => 'ライトニングアドレス';
@override late final _TranslationsSettingsProfileErrorJa error = _TranslationsSettingsProfileErrorJa._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletJa extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'コネクトウォレットNWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'ウォレットの切断';
@override String get connect_1tap => '1タップ接続';
@override String get paste => 'URLを貼り付ける';
@override late final _TranslationsSettingsWalletErrorJa error = _TranslationsSettingsWalletErrorJa._(_root);
}
// Path: login.error
class _TranslationsLoginErrorJa extends TranslationsLoginErrorEn {
_TranslationsLoginErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get invalid_key => '無効なキー';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteJa extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
/// チャットメッセージ入力ボックスのラベル
@override String get label => 'メッセージを書く';
/// ユーザーがpubkeyのみでログインしている場合に表示されるチャット入力メッセージ
@override String get no_signer => 'npubログインでメッセージが書けない';
/// ログアウト時に表示されるチャット入力メッセージ
@override String get login => 'メッセージを送信するにはログインしてください';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeJa extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
/// バッジを授与されたユーザーのリスト上の見出し
@override String get awarded_to => '受賞者';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidJa extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
/// 別のストリームへのチャット襲撃メッセージ
@override String to({required Object name}) => 'RAIDING ${name}';
/// 他のストリームからのチャット襲撃メッセージ
@override String from({required Object name}) => 'RAID FROM ${name}';
/// 自動騎乗のカウントダウン・タイマー
@override String countdown({required Object time}) => '${time}における襲撃';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorJa extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get logged_out => 'ログアウトするとプロフィールが編集できない';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorJa extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get logged_out => 'ログアウト時にウォレットに接続できない';
@override String get nwc_auth_event_not_found => 'ウォレットの認証イベントが見つかりません';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsJa {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return '画像アップロード';
case 'most_zapped_streamers': return '最もザッピングされたストリーマー';
case 'no_user_found': return 'ユーザーが見つかりません';
case 'anon': return '匿名';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n,
one: '1 視聴者',
other: '${NumberFormat.decimalPattern('ja').format(n)} 人が視聴中',
);
case 'stream.status.live': return 'ライブ';
case 'stream.status.ended': return '終了';
case 'stream.status.planned': return '予定';
case 'stream.started': return ({required Object timestamp}) => '${timestamp} を開始';
case 'stream.chat.disabled': return 'チャット無効';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'タイムアウト: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' タイムアウト '),
user,
const TextSpan(text: ' for '),
time,
]);
case 'stream.chat.ended': return '配信終了';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ''),
amount,
const TextSpan(text: ' sats をザップしました'),
]);
case 'stream.chat.write.label': return 'メッセージを書く';
case 'stream.chat.write.no_signer': return 'npubログインでメッセージが書けない';
case 'stream.chat.write.login': return 'メッセージを送信するにはログインしてください';
case 'stream.chat.badge.awarded_to': return '受賞者';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => '${time}における襲撃';
case 'goal.title': return ({required Object amount}) => '目標額: ${amount}';
case 'goal.remaining': return ({required Object amount}) => '残り: ${amount}';
case 'goal.complete': return '完了';
case 'button.login': return 'ログイン';
case 'button.logout': return 'ログアウト';
case 'button.edit_profile': return 'プロフィールを編集';
case 'button.follow': return 'フォロー';
case 'button.unfollow': return 'フォロー解除';
case 'button.mute': return 'ミュート';
case 'button.unmute': return 'ミュート解除';
case 'button.share': return '共有';
case 'button.save': return '保存';
case 'button.connect': return '接続';
case 'button.settings': return '設定';
case 'embed.article_by': return ({required Object name}) => '記事: ${name}';
case 'embed.note_by': return ({required Object name}) => '${name} の投稿';
case 'embed.live_stream_by': return ({required Object name}) => 'ライブ・ストリーム ${name}';
case 'stream_list.following': return 'フォロー中';
case 'stream_list.live': return 'ライブ配信中';
case 'stream_list.planned': return '予定あり';
case 'stream_list.ended': return '終了しました';
case 'zap.title': return ({required Object name}) => '${name} をザップ';
case 'zap.custom_amount': return 'カスタム金額';
case 'zap.confirm': return '確認';
case 'zap.comment': return 'コメント';
case 'zap.button_zap_ready': return ({required Object amount}) => '${amount} satsをザップする';
case 'zap.button_zap': return 'ザップ';
case 'zap.button_open_wallet': return 'ウォレットで開く';
case 'zap.button_connect_wallet': return 'コネクトウォレット';
case 'zap.copy': return 'クリップボードにコピー';
case 'zap.error.invalid_custom_amount': return '無効なカスタム金額';
case 'zap.error.no_wallet': return 'Lightningウォレット未装着';
case 'zap.error.no_lud16': return '雷アドレスが見つかりません';
case 'profile.past_streams': return '過去の配信';
case 'settings.button_profile': return 'プロフィール編集';
case 'settings.button_wallet': return 'ウォレットの設定';
case 'settings.profile.display_name': return '表示名';
case 'settings.profile.about': return 'について';
case 'settings.profile.nip05': return '住所';
case 'settings.profile.lud16': return 'ライトニングアドレス';
case 'settings.profile.error.logged_out': return 'ログアウトするとプロフィールが編集できない';
case 'settings.wallet.connect_wallet': return 'コネクトウォレットNWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'ウォレットの切断';
case 'settings.wallet.connect_1tap': return '1タップ接続';
case 'settings.wallet.paste': return 'URLを貼り付ける';
case 'settings.wallet.error.logged_out': return 'ログアウト時にウォレットに接続できない';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'ウォレットの認証イベントが見つかりません';
case 'login.username': return 'ユーザー名';
case 'login.amber': return '琥珀でログイン';
case 'login.key': return 'キーでログイン';
case 'login.create': return 'アカウントを作成する';
case 'login.error.invalid_key': return '無効なキー';
default: return null;
}
}
}

469
lib/i18n/strings_ko.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsKo extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsKo({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.ko,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <ko>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsKo _root = this; // ignore: unused_field
@override
TranslationsKo $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsKo(meta: meta ?? this.$meta);
// Translations
/// 아바타 플레이스홀더를 눌러 업로드를 시작하라는 메시지를 표시하는 텍스트
@override String get upload_avatar => '아바타 업로드';
/// 나열된 상위 스트리머를 잽별로 살펴보기
@override String get most_zapped_streamers => '가장 많이 재핑된 스트리머';
/// 검색 시 사용자를 찾을 수 없음
@override String get no_user_found => '사용자를 찾을 수 없습니다.';
/// 익명 사용자
@override String get anon => 'Anon';
/// 스트림 시청자 수
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n,
one: '시청자 1명',
other: '${NumberFormat.decimalPattern('ko').format(n)} 시청자',
);
@override late final _TranslationsStreamKo stream = _TranslationsStreamKo._(_root);
@override late final _TranslationsGoalKo goal = _TranslationsGoalKo._(_root);
@override late final _TranslationsButtonKo button = _TranslationsButtonKo._(_root);
@override late final _TranslationsEmbedKo embed = _TranslationsEmbedKo._(_root);
/// 실시간/종료/예정 등 스트림 유형별로 스트림 목록의 제목을 표시합니다.
@override late final _TranslationsStreamListKo stream_list = _TranslationsStreamListKo._(_root);
@override late final _TranslationsZapKo zap = _TranslationsZapKo._(_root);
@override late final _TranslationsProfileKo profile = _TranslationsProfileKo._(_root);
@override late final _TranslationsSettingsKo settings = _TranslationsSettingsKo._(_root);
@override late final _TranslationsLoginKo login = _TranslationsLoginKo._(_root);
}
// Path: stream
class _TranslationsStreamKo extends TranslationsStreamEn {
_TranslationsStreamKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusKo status = _TranslationsStreamStatusKo._(_root);
@override String started({required Object timestamp}) => '시작 ${timestamp}';
@override late final _TranslationsStreamChatKo chat = _TranslationsStreamChatKo._(_root);
}
// Path: goal
class _TranslationsGoalKo extends TranslationsGoalEn {
_TranslationsGoalKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => '목표: ${amount}';
@override String remaining({required Object amount}) => '남음: ${amount}';
@override String get complete => '완료';
}
// Path: button
class _TranslationsButtonKo extends TranslationsButtonEn {
_TranslationsButtonKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
/// 로그인 버튼의 버튼 텍스트
@override String get login => '로그인';
@override String get logout => '로그아웃';
@override String get edit_profile => '프로필 수정';
/// 팔로우 버튼의 버튼 텍스트
@override String get follow => '팔로우';
/// 언팔로우 버튼의 버튼 텍스트
@override String get unfollow => '언팔로우';
@override String get mute => '뮤트';
@override String get unmute => '뮤트 해제';
@override String get share => '공유';
@override String get save => '저장';
@override String get connect => '연결';
@override String get settings => '설정';
}
// Path: embed
class _TranslationsEmbedKo extends TranslationsEmbedEn {
_TranslationsEmbedKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => '작성자: ${name}';
@override String note_by({required Object name}) => '노트 작성됨: ${name}';
@override String live_stream_by({required Object name}) => '라이브 스트리밍: ${name}';
}
// Path: stream_list
class _TranslationsStreamListKo extends TranslationsStreamListEn {
_TranslationsStreamListKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get following => '팔로잉';
@override String get live => '라이브';
@override String get planned => '계획된';
@override String get ended => '종료됨';
}
// Path: zap
class _TranslationsZapKo extends TranslationsZapEn {
_TranslationsZapKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => '사용자 지정 금액';
@override String get confirm => '확인';
@override String get comment => '댓글';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => '지갑에서 열기';
@override String get button_connect_wallet => '지갑 연결';
@override String get copy => '클립보드에 복사';
@override late final _TranslationsZapErrorKo error = _TranslationsZapErrorKo._(_root);
}
// Path: profile
class _TranslationsProfileKo extends TranslationsProfileEn {
_TranslationsProfileKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get past_streams => '과거 스트림';
}
// Path: settings
class _TranslationsSettingsKo extends TranslationsSettingsEn {
_TranslationsSettingsKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get button_profile => '프로필 수정';
@override String get button_wallet => '지갑 설정';
@override late final _TranslationsSettingsProfileKo profile = _TranslationsSettingsProfileKo._(_root);
@override late final _TranslationsSettingsWalletKo wallet = _TranslationsSettingsWalletKo._(_root);
}
// Path: login
class _TranslationsLoginKo extends TranslationsLoginEn {
_TranslationsLoginKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get username => '사용자 이름';
@override String get amber => 'Amber로 로그인';
@override String get key => '키로 로그인';
@override String get create => '계정 만들기';
@override late final _TranslationsLoginErrorKo error = _TranslationsLoginErrorKo._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusKo extends TranslationsStreamStatusEn {
_TranslationsStreamStatusKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get live => '라이브';
@override String get ended => '종료';
@override String get planned => '계획된';
}
// Path: stream.chat
class _TranslationsStreamChatKo extends TranslationsStreamChatEn {
_TranslationsStreamChatKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get disabled => '채팅 사용 안 함';
@override String disabled_timeout({required Object time}) => '시간 초과가 만료되었습니다: ${time}';
/// 시간 초과 이벤트를 표시하는 채팅 메시지
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' 시간 초과됨 '),
user,
const TextSpan(text: ' '),
time,
]);
/// 채팅 하단의 스트림 종료 푸터
@override String get ended => '스트림 종료';
/// 채팅 메시지 스트림 끊김 표시
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' ZAPP '),
amount,
const TextSpan(text: ' SATS'),
]);
@override late final _TranslationsStreamChatWriteKo write = _TranslationsStreamChatWriteKo._(_root);
@override late final _TranslationsStreamChatBadgeKo badge = _TranslationsStreamChatBadgeKo._(_root);
@override late final _TranslationsStreamChatRaidKo raid = _TranslationsStreamChatRaidKo._(_root);
}
// Path: zap.error
class _TranslationsZapErrorKo extends TranslationsZapErrorEn {
_TranslationsZapErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => '잘못된 사용자 지정 금액';
@override String get no_wallet => '라이트닝 월렛이 설치되지 않았습니다.';
@override String get no_lud16 => '번개 주소를 찾을 수 없습니다.';
}
// Path: settings.profile
class _TranslationsSettingsProfileKo extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get display_name => '표시 이름';
@override String get about => '정보';
@override String get nip05 => '노스트르 주소';
@override String get lud16 => '라이트닝 주소';
@override late final _TranslationsSettingsProfileErrorKo error = _TranslationsSettingsProfileErrorKo._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletKo extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get connect_wallet => '지갑 연결(NWC nostr+walletconnect://)';
@override String get disconnect_wallet => '지갑 연결 해제';
@override String get connect_1tap => '1-탭 연결';
@override String get paste => 'URL 붙여넣기';
@override late final _TranslationsSettingsWalletErrorKo error = _TranslationsSettingsWalletErrorKo._(_root);
}
// Path: login.error
class _TranslationsLoginErrorKo extends TranslationsLoginErrorEn {
_TranslationsLoginErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get invalid_key => '잘못된 키';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteKo extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
/// 채팅 메시지 입력 상자의 라벨
@override String get label => '메시지 작성';
/// 사용자가 공개 키로만 로그인한 경우에 표시되는 채팅 입력 메시지
@override String get no_signer => 'npub 로그인으로 메시지를 작성할 수 없습니다.';
/// 사용자가 로그아웃할 때 표시되는 채팅 입력 메시지
@override String get login => '메시지를 보내려면 로그인하세요.';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeKo extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
/// 배지를 받은 사용자 목록으로 이동하기
@override String get awarded_to => '수상 대상';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidKo extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
/// 다른 스트림으로 채팅 레이드 메시지 보내기
@override String to({required Object name}) => 'RAIDing ${name}';
/// 다른 스트림의 채팅 레이드 메시지
@override String from({required Object name}) => 'RAID FROM ${name}';
/// 자동 레이드를 위한 카운트다운 타이머
@override String countdown({required Object time}) => '${time}에서 레이드';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorKo extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get logged_out => '로그아웃 시 프로필 수정 불가';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorKo extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get logged_out => '로그아웃 시 지갑 연결 불가';
@override String get nwc_auth_event_not_found => '지갑 인증 이벤트를 찾을 수 없습니다.';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsKo {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return '아바타 업로드';
case 'most_zapped_streamers': return '가장 많이 재핑된 스트리머';
case 'no_user_found': return '사용자를 찾을 수 없습니다.';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n,
one: '시청자 1명',
other: '${NumberFormat.decimalPattern('ko').format(n)} 시청자',
);
case 'stream.status.live': return '라이브';
case 'stream.status.ended': return '종료';
case 'stream.status.planned': return '계획된';
case 'stream.started': return ({required Object timestamp}) => '시작 ${timestamp}';
case 'stream.chat.disabled': return '채팅 사용 안 함';
case 'stream.chat.disabled_timeout': return ({required Object time}) => '시간 초과가 만료되었습니다: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' 시간 초과됨 '),
user,
const TextSpan(text: ' '),
time,
]);
case 'stream.chat.ended': return '스트림 종료';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' ZAPP '),
amount,
const TextSpan(text: ' SATS'),
]);
case 'stream.chat.write.label': return '메시지 작성';
case 'stream.chat.write.no_signer': return 'npub 로그인으로 메시지를 작성할 수 없습니다.';
case 'stream.chat.write.login': return '메시지를 보내려면 로그인하세요.';
case 'stream.chat.badge.awarded_to': return '수상 대상';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDing ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => '${time}에서 레이드';
case 'goal.title': return ({required Object amount}) => '목표: ${amount}';
case 'goal.remaining': return ({required Object amount}) => '남음: ${amount}';
case 'goal.complete': return '완료';
case 'button.login': return '로그인';
case 'button.logout': return '로그아웃';
case 'button.edit_profile': return '프로필 수정';
case 'button.follow': return '팔로우';
case 'button.unfollow': return '언팔로우';
case 'button.mute': return '뮤트';
case 'button.unmute': return '뮤트 해제';
case 'button.share': return '공유';
case 'button.save': return '저장';
case 'button.connect': return '연결';
case 'button.settings': return '설정';
case 'embed.article_by': return ({required Object name}) => '작성자: ${name}';
case 'embed.note_by': return ({required Object name}) => '노트 작성됨: ${name}';
case 'embed.live_stream_by': return ({required Object name}) => '라이브 스트리밍: ${name}';
case 'stream_list.following': return '팔로잉';
case 'stream_list.live': return '라이브';
case 'stream_list.planned': return '계획된';
case 'stream_list.ended': return '종료됨';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return '사용자 지정 금액';
case 'zap.confirm': return '확인';
case 'zap.comment': return '댓글';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return '지갑에서 열기';
case 'zap.button_connect_wallet': return '지갑 연결';
case 'zap.copy': return '클립보드에 복사';
case 'zap.error.invalid_custom_amount': return '잘못된 사용자 지정 금액';
case 'zap.error.no_wallet': return '라이트닝 월렛이 설치되지 않았습니다.';
case 'zap.error.no_lud16': return '번개 주소를 찾을 수 없습니다.';
case 'profile.past_streams': return '과거 스트림';
case 'settings.button_profile': return '프로필 수정';
case 'settings.button_wallet': return '지갑 설정';
case 'settings.profile.display_name': return '표시 이름';
case 'settings.profile.about': return '정보';
case 'settings.profile.nip05': return '노스트르 주소';
case 'settings.profile.lud16': return '라이트닝 주소';
case 'settings.profile.error.logged_out': return '로그아웃 시 프로필 수정 불가';
case 'settings.wallet.connect_wallet': return '지갑 연결(NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return '지갑 연결 해제';
case 'settings.wallet.connect_1tap': return '1-탭 연결';
case 'settings.wallet.paste': return 'URL 붙여넣기';
case 'settings.wallet.error.logged_out': return '로그아웃 시 지갑 연결 불가';
case 'settings.wallet.error.nwc_auth_event_not_found': return '지갑 인증 이벤트를 찾을 수 없습니다.';
case 'login.username': return '사용자 이름';
case 'login.amber': return 'Amber로 로그인';
case 'login.key': return '키로 로그인';
case 'login.create': return '계정 만들기';
case 'login.error.invalid_key': return '잘못된 키';
default: return null;
}
}
}

469
lib/i18n/strings_nl.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsNl extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsNl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.nl,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <nl>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsNl _root = this; // ignore: unused_field
@override
TranslationsNl $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsNl(meta: meta ?? this.$meta);
// Translations
/// Tekst die de gebruiker vraagt om op de avatar-plaatshouder te klikken om te beginnen met uploaden
@override String get upload_avatar => 'Avatar uploaden';
/// Koers over beursgenoteerde topstreamers door zaps
@override String get most_zapped_streamers => 'Meeste Zapped Streamers';
/// Geen gebruiker gevonden bij het zoeken
@override String get no_user_found => 'Geen gebruiker gevonden';
/// Een anonieme gebruiker
@override String get anon => 'Anon';
/// Aantal kijkers van de stream
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n,
one: '1 kijker',
other: '${NumberFormat.decimalPattern('nl').format(n)} kijkers',
);
@override late final _TranslationsStreamNl stream = _TranslationsStreamNl._(_root);
@override late final _TranslationsGoalNl goal = _TranslationsGoalNl._(_root);
@override late final _TranslationsButtonNl button = _TranslationsButtonNl._(_root);
@override late final _TranslationsEmbedNl embed = _TranslationsEmbedNl._(_root);
/// Rubrieken op streamlijsten per streamtype live/beëindigd/gepland etc.
@override late final _TranslationsStreamListNl stream_list = _TranslationsStreamListNl._(_root);
@override late final _TranslationsZapNl zap = _TranslationsZapNl._(_root);
@override late final _TranslationsProfileNl profile = _TranslationsProfileNl._(_root);
@override late final _TranslationsSettingsNl settings = _TranslationsSettingsNl._(_root);
@override late final _TranslationsLoginNl login = _TranslationsLoginNl._(_root);
}
// Path: stream
class _TranslationsStreamNl extends TranslationsStreamEn {
_TranslationsStreamNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusNl status = _TranslationsStreamStatusNl._(_root);
@override String started({required Object timestamp}) => 'Begonnen met ${timestamp}';
@override late final _TranslationsStreamChatNl chat = _TranslationsStreamChatNl._(_root);
}
// Path: goal
class _TranslationsGoalNl extends TranslationsGoalEn {
_TranslationsGoalNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Doel: ${amount}';
@override String remaining({required Object amount}) => 'Overblijvend: ${amount}';
@override String get complete => 'COMPLETE';
}
// Path: button
class _TranslationsButtonNl extends TranslationsButtonEn {
_TranslationsButtonNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
/// Knoptekst voor de aanmeldknop
@override String get login => 'Inloggen';
@override String get logout => 'Uitloggen';
@override String get edit_profile => 'Bewerk Profiel';
/// Knoptekst voor de volgknop
@override String get follow => 'Volgen';
/// Knoptekst voor de knop Ontvolgen
@override String get unfollow => 'Ontvolgen';
@override String get mute => 'Dempen';
@override String get unmute => 'Niet langer negeren';
@override String get share => 'Deel';
@override String get save => 'Opslaan';
@override String get connect => 'Maak verbinding met';
@override String get settings => 'Instellingen';
}
// Path: embed
class _TranslationsEmbedNl extends TranslationsEmbedEn {
_TranslationsEmbedNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Artikel door ${name}';
@override String note_by({required Object name}) => 'Opmerking door ${name}';
@override String live_stream_by({required Object name}) => 'Live stream via ${name}';
}
// Path: stream_list
class _TranslationsStreamListNl extends TranslationsStreamListEn {
_TranslationsStreamListNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get following => 'Volgt';
@override String get live => 'Live';
@override String get planned => 'Gepland';
@override String get ended => 'Beëindigd';
}
// Path: zap
class _TranslationsZapNl extends TranslationsZapEn {
_TranslationsZapNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Aangepast bedrag';
@override String get confirm => 'Bevestig';
@override String get comment => 'Opmerking';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Openen in portefeuille';
@override String get button_connect_wallet => 'Portemonnee aansluiten';
@override String get copy => 'Gekopieerd naar klembord';
@override late final _TranslationsZapErrorNl error = _TranslationsZapErrorNl._(_root);
}
// Path: profile
class _TranslationsProfileNl extends TranslationsProfileEn {
_TranslationsProfileNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Afgelopen Streams';
}
// Path: settings
class _TranslationsSettingsNl extends TranslationsSettingsEn {
_TranslationsSettingsNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Profiel bewerken';
@override String get button_wallet => 'Portemonnee-instellingen';
@override late final _TranslationsSettingsProfileNl profile = _TranslationsSettingsProfileNl._(_root);
@override late final _TranslationsSettingsWalletNl wallet = _TranslationsSettingsWalletNl._(_root);
}
// Path: login
class _TranslationsLoginNl extends TranslationsLoginEn {
_TranslationsLoginNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get username => 'Gebruikersnaam';
@override String get amber => 'Inloggen met Amber';
@override String get key => 'Inloggen met sleutel';
@override String get create => 'Account aanmaken';
@override late final _TranslationsLoginErrorNl error = _TranslationsLoginErrorNl._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusNl extends TranslationsStreamStatusEn {
_TranslationsStreamStatusNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get live => 'LIVE';
@override String get ended => 'GESLOTEN';
@override String get planned => 'GEPLAND';
}
// Path: stream.chat
class _TranslationsStreamChatNl extends TranslationsStreamChatEn {
_TranslationsStreamChatNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT UITGESCHAKELD';
@override String disabled_timeout({required Object time}) => 'Time-out loopt af: ${time}';
/// Chatbericht met time-outgebeurtenissen
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' voor '),
time,
]);
/// Voettekst einde stream onderaan chat
@override String get ended => 'STREAM BEËINDIGD';
/// Chatbericht met stream zaps
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteNl write = _TranslationsStreamChatWriteNl._(_root);
@override late final _TranslationsStreamChatBadgeNl badge = _TranslationsStreamChatBadgeNl._(_root);
@override late final _TranslationsStreamChatRaidNl raid = _TranslationsStreamChatRaidNl._(_root);
}
// Path: zap.error
class _TranslationsZapErrorNl extends TranslationsZapErrorEn {
_TranslationsZapErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Ongeldig aangepast bedrag';
@override String get no_wallet => 'Geen bliksemportemonnee geïnstalleerd';
@override String get no_lud16 => 'Geen bliksemadres gevonden';
}
// Path: settings.profile
class _TranslationsSettingsProfileNl extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get display_name => 'Naam weergeven';
@override String get about => 'Over';
@override String get nip05 => 'Nostr Adres';
@override String get lud16 => 'Bliksemadres';
@override late final _TranslationsSettingsProfileErrorNl error = _TranslationsSettingsProfileErrorNl._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletNl extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Portemonnee verbinden (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Portefeuille loskoppelen';
@override String get connect_1tap => '1-Tap Aansluiting';
@override String get paste => 'URL plakken';
@override late final _TranslationsSettingsWalletErrorNl error = _TranslationsSettingsWalletErrorNl._(_root);
}
// Path: login.error
class _TranslationsLoginErrorNl extends TranslationsLoginErrorEn {
_TranslationsLoginErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Ongeldige sleutel';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteNl extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
/// Label op het invoerveld voor chatberichten
@override String get label => 'Schrijf bericht';
/// Chatinvoerbericht getoond wanneer de gebruiker alleen is ingelogd met pubkey
@override String get no_signer => 'Kan geen berichten schrijven met npub login';
/// Chatinvoerbericht dat wordt weergegeven wanneer de gebruiker is uitgelogd
@override String get login => 'Log in om berichten te verzenden';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeNl extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
/// Kop boven de lijst met gebruikers die een badge hebben gekregen
@override String get awarded_to => 'Toegekend aan:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidNl extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
/// Chat raid bericht naar een andere stream
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat invalbericht van een andere stream
@override String from({required Object name}) => 'RAID VAN ${name}';
/// Afteltimer voor automatisch rijden
@override String countdown({required Object time}) => 'Overvallen in ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorNl extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kan profiel niet bewerken als ik ben uitgelogd';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorNl extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kan geen verbinding maken met portemonnee als ik ben uitgelogd';
@override String get nwc_auth_event_not_found => 'Geen portemonnee-auth-gebeurtenis gevonden';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsNl {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Avatar uploaden';
case 'most_zapped_streamers': return 'Meeste Zapped Streamers';
case 'no_user_found': return 'Geen gebruiker gevonden';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n,
one: '1 kijker',
other: '${NumberFormat.decimalPattern('nl').format(n)} kijkers',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'GESLOTEN';
case 'stream.status.planned': return 'GEPLAND';
case 'stream.started': return ({required Object timestamp}) => 'Begonnen met ${timestamp}';
case 'stream.chat.disabled': return 'CHAT UITGESCHAKELD';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Time-out loopt af: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' voor '),
time,
]);
case 'stream.chat.ended': return 'STREAM BEËINDIGD';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Schrijf bericht';
case 'stream.chat.write.no_signer': return 'Kan geen berichten schrijven met npub login';
case 'stream.chat.write.login': return 'Log in om berichten te verzenden';
case 'stream.chat.badge.awarded_to': return 'Toegekend aan:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID VAN ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Overvallen in ${time}';
case 'goal.title': return ({required Object amount}) => 'Doel: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Overblijvend: ${amount}';
case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Inloggen';
case 'button.logout': return 'Uitloggen';
case 'button.edit_profile': return 'Bewerk Profiel';
case 'button.follow': return 'Volgen';
case 'button.unfollow': return 'Ontvolgen';
case 'button.mute': return 'Dempen';
case 'button.unmute': return 'Niet langer negeren';
case 'button.share': return 'Deel';
case 'button.save': return 'Opslaan';
case 'button.connect': return 'Maak verbinding met';
case 'button.settings': return 'Instellingen';
case 'embed.article_by': return ({required Object name}) => 'Artikel door ${name}';
case 'embed.note_by': return ({required Object name}) => 'Opmerking door ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Live stream via ${name}';
case 'stream_list.following': return 'Volgt';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Gepland';
case 'stream_list.ended': return 'Beëindigd';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Aangepast bedrag';
case 'zap.confirm': return 'Bevestig';
case 'zap.comment': return 'Opmerking';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Openen in portefeuille';
case 'zap.button_connect_wallet': return 'Portemonnee aansluiten';
case 'zap.copy': return 'Gekopieerd naar klembord';
case 'zap.error.invalid_custom_amount': return 'Ongeldig aangepast bedrag';
case 'zap.error.no_wallet': return 'Geen bliksemportemonnee geïnstalleerd';
case 'zap.error.no_lud16': return 'Geen bliksemadres gevonden';
case 'profile.past_streams': return 'Afgelopen Streams';
case 'settings.button_profile': return 'Profiel bewerken';
case 'settings.button_wallet': return 'Portemonnee-instellingen';
case 'settings.profile.display_name': return 'Naam weergeven';
case 'settings.profile.about': return 'Over';
case 'settings.profile.nip05': return 'Nostr Adres';
case 'settings.profile.lud16': return 'Bliksemadres';
case 'settings.profile.error.logged_out': return 'Kan profiel niet bewerken als ik ben uitgelogd';
case 'settings.wallet.connect_wallet': return 'Portemonnee verbinden (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Portefeuille loskoppelen';
case 'settings.wallet.connect_1tap': return '1-Tap Aansluiting';
case 'settings.wallet.paste': return 'URL plakken';
case 'settings.wallet.error.logged_out': return 'Kan geen verbinding maken met portemonnee als ik ben uitgelogd';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Geen portemonnee-auth-gebeurtenis gevonden';
case 'login.username': return 'Gebruikersnaam';
case 'login.amber': return 'Inloggen met Amber';
case 'login.key': return 'Inloggen met sleutel';
case 'login.create': return 'Account aanmaken';
case 'login.error.invalid_key': return 'Ongeldige sleutel';
default: return null;
}
}
}

469
lib/i18n/strings_pl.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsPl extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsPl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.pl,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <pl>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsPl _root = this; // ignore: unused_field
@override
TranslationsPl $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsPl(meta: meta ?? this.$meta);
// Translations
/// Tekst zachęcający użytkownika do kliknięcia symbolu zastępczego awatara w celu rozpoczęcia przesyłania.
@override String get upload_avatar => 'Prześlij awatar';
/// Przechodzenie nad wymienionymi topowymi streamerami przez zapy
@override String get most_zapped_streamers => 'Większość zapped streamerów';
/// Nie znaleziono użytkownika podczas wyszukiwania
@override String get no_user_found => 'Nie znaleziono użytkownika';
/// Anonimowy użytkownik
@override String get anon => 'Anon';
/// Liczba widzów strumienia
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n,
one: '1 przeglądarka',
other: '{n:decimalPattern} widzów',
);
@override late final _TranslationsStreamPl stream = _TranslationsStreamPl._(_root);
@override late final _TranslationsGoalPl goal = _TranslationsGoalPl._(_root);
@override late final _TranslationsButtonPl button = _TranslationsButtonPl._(_root);
@override late final _TranslationsEmbedPl embed = _TranslationsEmbedPl._(_root);
/// Nagłówki na listach strumieni według typu strumienia na żywo / zakończony / planowany itp.
@override late final _TranslationsStreamListPl stream_list = _TranslationsStreamListPl._(_root);
@override late final _TranslationsZapPl zap = _TranslationsZapPl._(_root);
@override late final _TranslationsProfilePl profile = _TranslationsProfilePl._(_root);
@override late final _TranslationsSettingsPl settings = _TranslationsSettingsPl._(_root);
@override late final _TranslationsLoginPl login = _TranslationsLoginPl._(_root);
}
// Path: stream
class _TranslationsStreamPl extends TranslationsStreamEn {
_TranslationsStreamPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusPl status = _TranslationsStreamStatusPl._(_root);
@override String started({required Object timestamp}) => 'Start ${timestamp}';
@override late final _TranslationsStreamChatPl chat = _TranslationsStreamChatPl._(_root);
}
// Path: goal
class _TranslationsGoalPl extends TranslationsGoalEn {
_TranslationsGoalPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Cel: ${amount}';
@override String remaining({required Object amount}) => 'Pozostałe: ${amount}';
@override String get complete => 'ZAKOŃCZONE';
}
// Path: button
class _TranslationsButtonPl extends TranslationsButtonEn {
_TranslationsButtonPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
/// Tekst przycisku logowania
@override String get login => 'Logowanie';
@override String get logout => 'Wylogowanie';
@override String get edit_profile => 'Edytuj profil';
/// Tekst przycisku dla przycisku śledzenia
@override String get follow => 'Śledź';
/// Tekst przycisku cofnięcia obserwowania
@override String get unfollow => 'Nie obserwuj';
@override String get mute => 'Wyciszenie';
@override String get unmute => 'Wyłącz wyciszenie';
@override String get share => 'Udział';
@override String get save => 'Zapisz';
@override String get connect => 'Połączenie';
@override String get settings => 'Ustawienia';
}
// Path: embed
class _TranslationsEmbedPl extends TranslationsEmbedEn {
_TranslationsEmbedPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Artykuł autorstwa ${name}';
@override String note_by({required Object name}) => 'Uwaga ${name}';
@override String live_stream_by({required Object name}) => 'Transmisja na żywo przez ${name}';
}
// Path: stream_list
class _TranslationsStreamListPl extends TranslationsStreamListEn {
_TranslationsStreamListPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get following => 'Następujący';
@override String get live => 'Na żywo';
@override String get planned => 'Planowane';
@override String get ended => 'Zakończony';
}
// Path: zap
class _TranslationsZapPl extends TranslationsZapEn {
_TranslationsZapPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Kwota niestandardowa';
@override String get confirm => 'Potwierdzenie';
@override String get comment => 'Komentarz';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Otwórz w portfelu';
@override String get button_connect_wallet => 'Connect Wallet';
@override String get copy => 'Skopiowane do schowka';
@override late final _TranslationsZapErrorPl error = _TranslationsZapErrorPl._(_root);
}
// Path: profile
class _TranslationsProfilePl extends TranslationsProfileEn {
_TranslationsProfilePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Poprzednie strumienie';
}
// Path: settings
class _TranslationsSettingsPl extends TranslationsSettingsEn {
_TranslationsSettingsPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Edytuj profil';
@override String get button_wallet => 'Ustawienia portfela';
@override late final _TranslationsSettingsProfilePl profile = _TranslationsSettingsProfilePl._(_root);
@override late final _TranslationsSettingsWalletPl wallet = _TranslationsSettingsWalletPl._(_root);
}
// Path: login
class _TranslationsLoginPl extends TranslationsLoginEn {
_TranslationsLoginPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get username => 'Nazwa użytkownika';
@override String get amber => 'Zaloguj się za pomocą Amber';
@override String get key => 'Logowanie za pomocą klucza';
@override String get create => 'Utwórz konto';
@override late final _TranslationsLoginErrorPl error = _TranslationsLoginErrorPl._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusPl extends TranslationsStreamStatusEn {
_TranslationsStreamStatusPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get live => 'NA ŻYWO';
@override String get ended => 'ZAKOŃCZONY';
@override String get planned => 'PLANOWANE';
}
// Path: stream.chat
class _TranslationsStreamChatPl extends TranslationsStreamChatEn {
_TranslationsStreamChatPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get disabled => 'CZAT WYŁĄCZONY';
@override String disabled_timeout({required Object time}) => 'Upłynął limit czasu: ${time}';
/// Komunikat czatu pokazujący zdarzenia przekroczenia limitu czasu
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' upłynął limit czasu '),
user,
const TextSpan(text: ' dla '),
time,
]);
/// Stream zakończył stopkę na dole czatu
@override String get ended => 'TRANSMISJA ZAKOŃCZONA';
/// Wiadomość na czacie pokazująca zapy strumienia
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWritePl write = _TranslationsStreamChatWritePl._(_root);
@override late final _TranslationsStreamChatBadgePl badge = _TranslationsStreamChatBadgePl._(_root);
@override late final _TranslationsStreamChatRaidPl raid = _TranslationsStreamChatRaidPl._(_root);
}
// Path: zap.error
class _TranslationsZapErrorPl extends TranslationsZapErrorEn {
_TranslationsZapErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Nieprawidłowa kwota niestandardowa';
@override String get no_wallet => 'Brak zainstalowanego portfela Lightning';
@override String get no_lud16 => 'Nie znaleziono adresu pioruna';
}
// Path: settings.profile
class _TranslationsSettingsProfilePl extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfilePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get display_name => 'Wyświetlana nazwa';
@override String get about => 'O';
@override String get nip05 => 'Adres Nostr';
@override String get lud16 => 'Adres błyskawicy';
@override late final _TranslationsSettingsProfileErrorPl error = _TranslationsSettingsProfileErrorPl._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletPl extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Odłącz portfel';
@override String get connect_1tap => 'Połączenie 1-wtykowe';
@override String get paste => 'Wklej adres URL';
@override late final _TranslationsSettingsWalletErrorPl error = _TranslationsSettingsWalletErrorPl._(_root);
}
// Path: login.error
class _TranslationsLoginErrorPl extends TranslationsLoginErrorEn {
_TranslationsLoginErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Nieprawidłowy klucz';
}
// Path: stream.chat.write
class _TranslationsStreamChatWritePl extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWritePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
/// Etykieta w polu wprowadzania wiadomości czatu
@override String get label => 'Napisz wiadomość';
/// Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest zalogowany tylko za pomocą klucza pubkey
@override String get no_signer => 'Nie można pisać wiadomości z loginem npub';
/// Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest wylogowany
@override String get login => 'Zaloguj się, aby wysyłać wiadomości';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgePl extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
/// Nagłówek nad listą użytkowników, którzy otrzymali odznakę
@override String get awarded_to => 'Przyznano:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidPl extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
/// Przesyłanie wiadomości na czacie do innego strumienia
@override String to({required Object name}) => 'RAIDING ${name}';
/// Nalot na czat z innego strumienia
@override String from({required Object name}) => 'RAID Z ${name}';
/// Zegar odliczający czas do automatycznej jazdy
@override String countdown({required Object time}) => 'Naloty w ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorPl extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Nie można edytować profilu po wylogowaniu';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorPl extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Nie można połączyć portfela po wylogowaniu';
@override String get nwc_auth_event_not_found => 'Nie znaleziono zdarzenia autoryzacji portfela';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsPl {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Prześlij awatar';
case 'most_zapped_streamers': return 'Większość zapped streamerów';
case 'no_user_found': return 'Nie znaleziono użytkownika';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n,
one: '1 przeglądarka',
other: '{n:decimalPattern} widzów',
);
case 'stream.status.live': return 'NA ŻYWO';
case 'stream.status.ended': return 'ZAKOŃCZONY';
case 'stream.status.planned': return 'PLANOWANE';
case 'stream.started': return ({required Object timestamp}) => 'Start ${timestamp}';
case 'stream.chat.disabled': return 'CZAT WYŁĄCZONY';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Upłynął limit czasu: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' upłynął limit czasu '),
user,
const TextSpan(text: ' dla '),
time,
]);
case 'stream.chat.ended': return 'TRANSMISJA ZAKOŃCZONA';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Napisz wiadomość';
case 'stream.chat.write.no_signer': return 'Nie można pisać wiadomości z loginem npub';
case 'stream.chat.write.login': return 'Zaloguj się, aby wysyłać wiadomości';
case 'stream.chat.badge.awarded_to': return 'Przyznano:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID Z ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Naloty w ${time}';
case 'goal.title': return ({required Object amount}) => 'Cel: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Pozostałe: ${amount}';
case 'goal.complete': return 'ZAKOŃCZONE';
case 'button.login': return 'Logowanie';
case 'button.logout': return 'Wylogowanie';
case 'button.edit_profile': return 'Edytuj profil';
case 'button.follow': return 'Śledź';
case 'button.unfollow': return 'Nie obserwuj';
case 'button.mute': return 'Wyciszenie';
case 'button.unmute': return 'Wyłącz wyciszenie';
case 'button.share': return 'Udział';
case 'button.save': return 'Zapisz';
case 'button.connect': return 'Połączenie';
case 'button.settings': return 'Ustawienia';
case 'embed.article_by': return ({required Object name}) => 'Artykuł autorstwa ${name}';
case 'embed.note_by': return ({required Object name}) => 'Uwaga ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Transmisja na żywo przez ${name}';
case 'stream_list.following': return 'Następujący';
case 'stream_list.live': return 'Na żywo';
case 'stream_list.planned': return 'Planowane';
case 'stream_list.ended': return 'Zakończony';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Kwota niestandardowa';
case 'zap.confirm': return 'Potwierdzenie';
case 'zap.comment': return 'Komentarz';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Otwórz w portfelu';
case 'zap.button_connect_wallet': return 'Connect Wallet';
case 'zap.copy': return 'Skopiowane do schowka';
case 'zap.error.invalid_custom_amount': return 'Nieprawidłowa kwota niestandardowa';
case 'zap.error.no_wallet': return 'Brak zainstalowanego portfela Lightning';
case 'zap.error.no_lud16': return 'Nie znaleziono adresu pioruna';
case 'profile.past_streams': return 'Poprzednie strumienie';
case 'settings.button_profile': return 'Edytuj profil';
case 'settings.button_wallet': return 'Ustawienia portfela';
case 'settings.profile.display_name': return 'Wyświetlana nazwa';
case 'settings.profile.about': return 'O';
case 'settings.profile.nip05': return 'Adres Nostr';
case 'settings.profile.lud16': return 'Adres błyskawicy';
case 'settings.profile.error.logged_out': return 'Nie można edytować profilu po wylogowaniu';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Odłącz portfel';
case 'settings.wallet.connect_1tap': return 'Połączenie 1-wtykowe';
case 'settings.wallet.paste': return 'Wklej adres URL';
case 'settings.wallet.error.logged_out': return 'Nie można połączyć portfela po wylogowaniu';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Nie znaleziono zdarzenia autoryzacji portfela';
case 'login.username': return 'Nazwa użytkownika';
case 'login.amber': return 'Zaloguj się za pomocą Amber';
case 'login.key': return 'Logowanie za pomocą klucza';
case 'login.create': return 'Utwórz konto';
case 'login.error.invalid_key': return 'Nieprawidłowy klucz';
default: return null;
}
}
}

469
lib/i18n/strings_pt.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsPt extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsPt({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.pt,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <pt>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsPt _root = this; // ignore: unused_field
@override
TranslationsPt $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsPt(meta: meta ?? this.$meta);
// Translations
/// Texto solicitando que o usuário clique no espaço reservado do avatar para iniciar o upload
@override String get upload_avatar => 'Carregar Avatar';
/// Dirigindo-se para as principais serpentinas listadas por zaps
@override String get most_zapped_streamers => 'Streamers mais afetados';
/// Nenhum usuário foi encontrado durante a pesquisa
@override String get no_user_found => 'Nenhum usuário encontrado';
/// Um usuário anônimo
@override String get anon => 'Anônimo';
/// Número de espectadores da transmissão
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n,
one: '1 visualizador',
other: '${NumberFormat.decimalPattern('pt').format(n)} espectadores',
);
@override late final _TranslationsStreamPt stream = _TranslationsStreamPt._(_root);
@override late final _TranslationsGoalPt goal = _TranslationsGoalPt._(_root);
@override late final _TranslationsButtonPt button = _TranslationsButtonPt._(_root);
@override late final _TranslationsEmbedPt embed = _TranslationsEmbedPt._(_root);
/// Cabeçalhos nas listas de transmissões por tipo de transmissão ao vivo/terminada/planejada etc.
@override late final _TranslationsStreamListPt stream_list = _TranslationsStreamListPt._(_root);
@override late final _TranslationsZapPt zap = _TranslationsZapPt._(_root);
@override late final _TranslationsProfilePt profile = _TranslationsProfilePt._(_root);
@override late final _TranslationsSettingsPt settings = _TranslationsSettingsPt._(_root);
@override late final _TranslationsLoginPt login = _TranslationsLoginPt._(_root);
}
// Path: stream
class _TranslationsStreamPt extends TranslationsStreamEn {
_TranslationsStreamPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusPt status = _TranslationsStreamStatusPt._(_root);
@override String started({required Object timestamp}) => 'Iniciado em ${timestamp}';
@override late final _TranslationsStreamChatPt chat = _TranslationsStreamChatPt._(_root);
}
// Path: goal
class _TranslationsGoalPt extends TranslationsGoalEn {
_TranslationsGoalPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Meta: ${amount}';
@override String remaining({required Object amount}) => 'Restante: ${amount}';
@override String get complete => 'COMPLETO';
}
// Path: button
class _TranslationsButtonPt extends TranslationsButtonEn {
_TranslationsButtonPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
/// Texto do botão para o botão de login
@override String get login => 'Entrar';
@override String get logout => 'Sair';
@override String get edit_profile => 'Editar perfil';
/// Texto do botão para o botão Seguir
@override String get follow => 'Seguir';
/// Texto do botão para o botão deixar de seguir
@override String get unfollow => 'Deixar de seguir';
@override String get mute => 'Silenciar';
@override String get unmute => 'Desmutar';
@override String get share => 'Compartilhar';
@override String get save => 'Salvar';
@override String get connect => 'Conectar';
@override String get settings => 'Configurações';
}
// Path: embed
class _TranslationsEmbedPt extends TranslationsEmbedEn {
_TranslationsEmbedPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Artigo de ${name}';
@override String note_by({required Object name}) => 'Nota de ${name}';
@override String live_stream_by({required Object name}) => 'Transmissão ao vivo pelo site ${name}';
}
// Path: stream_list
class _TranslationsStreamListPt extends TranslationsStreamListEn {
_TranslationsStreamListPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get following => 'Seguindo';
@override String get live => 'Ao vivo';
@override String get planned => 'Planejado';
@override String get ended => 'Encerrado';
}
// Path: zap
class _TranslationsZapPt extends TranslationsZapEn {
_TranslationsZapPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Valor personalizado';
@override String get confirm => 'Confirmar';
@override String get comment => 'Comentar';
@override String button_zap_ready({required Object amount}) => 'Enviar Zap de ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Abrir na carteira';
@override String get button_connect_wallet => 'Conectar carteira';
@override String get copy => 'Copiado para a área de transferência';
@override late final _TranslationsZapErrorPt error = _TranslationsZapErrorPt._(_root);
}
// Path: profile
class _TranslationsProfilePt extends TranslationsProfileEn {
_TranslationsProfilePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Transmissões Passadas';
}
// Path: settings
class _TranslationsSettingsPt extends TranslationsSettingsEn {
_TranslationsSettingsPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Editar perfil';
@override String get button_wallet => 'Configurações da carteira';
@override late final _TranslationsSettingsProfilePt profile = _TranslationsSettingsProfilePt._(_root);
@override late final _TranslationsSettingsWalletPt wallet = _TranslationsSettingsWalletPt._(_root);
}
// Path: login
class _TranslationsLoginPt extends TranslationsLoginEn {
_TranslationsLoginPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get username => 'Nome de usuário';
@override String get amber => 'Faça login com o Amber';
@override String get key => 'Login com chave';
@override String get create => 'Criar Conta';
@override late final _TranslationsLoginErrorPt error = _TranslationsLoginErrorPt._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusPt extends TranslationsStreamStatusEn {
_TranslationsStreamStatusPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get live => 'AO VIVO';
@override String get ended => 'FINALIZADO';
@override String get planned => 'PLANEJADO';
}
// Path: stream.chat
class _TranslationsStreamChatPt extends TranslationsStreamChatEn {
_TranslationsStreamChatPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get disabled => 'BATE-PAPO DESATIVADO';
@override String disabled_timeout({required Object time}) => 'O tempo limite expira: ${time}';
/// Mensagem de bate-papo mostrando eventos de tempo limite
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Tempo esgotado '),
user,
const TextSpan(text: ' para '),
time,
]);
/// O rodapé do fluxo terminou na parte inferior do bate-papo
@override String get ended => 'TRANSMISSÃO ENCERRADA';
/// Mensagem de bate-papo mostrando zaps de fluxo
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapeou '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWritePt write = _TranslationsStreamChatWritePt._(_root);
@override late final _TranslationsStreamChatBadgePt badge = _TranslationsStreamChatBadgePt._(_root);
@override late final _TranslationsStreamChatRaidPt raid = _TranslationsStreamChatRaidPt._(_root);
}
// Path: zap.error
class _TranslationsZapErrorPt extends TranslationsZapErrorEn {
_TranslationsZapErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Valor personalizado inválido';
@override String get no_wallet => 'Nenhuma carteira lightning instalada';
@override String get no_lud16 => 'Nenhum endereço de raio encontrado';
}
// Path: settings.profile
class _TranslationsSettingsProfilePt extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfilePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get display_name => 'Nome de exibição';
@override String get about => 'Sobre';
@override String get nip05 => 'Endereço Nostr';
@override String get lud16 => 'Endereço para relâmpagos';
@override late final _TranslationsSettingsProfileErrorPt error = _TranslationsSettingsProfileErrorPt._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletPt extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Carteira Connect (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Desconectar carteira';
@override String get connect_1tap => 'Conexão de 1 torneira';
@override String get paste => 'Colar URL';
@override late final _TranslationsSettingsWalletErrorPt error = _TranslationsSettingsWalletErrorPt._(_root);
}
// Path: login.error
class _TranslationsLoginErrorPt extends TranslationsLoginErrorEn {
_TranslationsLoginErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Chave inválida';
}
// Path: stream.chat.write
class _TranslationsStreamChatWritePt extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWritePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
/// Rótulo na caixa de entrada da mensagem de bate-papo
@override String get label => 'Escrever mensagem';
/// Mensagem de entrada de bate-papo exibida quando o usuário está conectado apenas com a pubkey
@override String get no_signer => 'Não é possível escrever mensagens com o login do npub';
/// Mensagem de entrada de chat exibida quando o usuário está desconectado
@override String get login => 'Faça login para enviar mensagens';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgePt extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
/// Cabeçalho sobre a lista de usuários que receberam um emblema
@override String get awarded_to => 'Prêmio concedido a:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidPt extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
/// Mensagem de invasão de bate-papo para outro fluxo
@override String to({required Object name}) => 'RAIDING ${name}';
/// Mensagem de invasão de bate-papo de outro fluxo
@override String from({required Object name}) => 'RAID DE ${name}';
/// Cronômetro de contagem regressiva para o ataque automático
@override String countdown({required Object time}) => 'Incursões em ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorPt extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Não é possível editar o perfil quando se está desconectado';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorPt extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Não consigo conectar a carteira quando estou desconectado';
@override String get nwc_auth_event_not_found => 'Nenhum evento de autenticação de carteira encontrado';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsPt {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Carregar Avatar';
case 'most_zapped_streamers': return 'Streamers mais afetados';
case 'no_user_found': return 'Nenhum usuário encontrado';
case 'anon': return 'Anônimo';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n,
one: '1 visualizador',
other: '${NumberFormat.decimalPattern('pt').format(n)} espectadores',
);
case 'stream.status.live': return 'AO VIVO';
case 'stream.status.ended': return 'FINALIZADO';
case 'stream.status.planned': return 'PLANEJADO';
case 'stream.started': return ({required Object timestamp}) => 'Iniciado em ${timestamp}';
case 'stream.chat.disabled': return 'BATE-PAPO DESATIVADO';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'O tempo limite expira: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Tempo esgotado '),
user,
const TextSpan(text: ' para '),
time,
]);
case 'stream.chat.ended': return 'TRANSMISSÃO ENCERRADA';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapeou '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Escrever mensagem';
case 'stream.chat.write.no_signer': return 'Não é possível escrever mensagens com o login do npub';
case 'stream.chat.write.login': return 'Faça login para enviar mensagens';
case 'stream.chat.badge.awarded_to': return 'Prêmio concedido a:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID DE ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Incursões em ${time}';
case 'goal.title': return ({required Object amount}) => 'Meta: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Restante: ${amount}';
case 'goal.complete': return 'COMPLETO';
case 'button.login': return 'Entrar';
case 'button.logout': return 'Sair';
case 'button.edit_profile': return 'Editar perfil';
case 'button.follow': return 'Seguir';
case 'button.unfollow': return 'Deixar de seguir';
case 'button.mute': return 'Silenciar';
case 'button.unmute': return 'Desmutar';
case 'button.share': return 'Compartilhar';
case 'button.save': return 'Salvar';
case 'button.connect': return 'Conectar';
case 'button.settings': return 'Configurações';
case 'embed.article_by': return ({required Object name}) => 'Artigo de ${name}';
case 'embed.note_by': return ({required Object name}) => 'Nota de ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Transmissão ao vivo pelo site ${name}';
case 'stream_list.following': return 'Seguindo';
case 'stream_list.live': return 'Ao vivo';
case 'stream_list.planned': return 'Planejado';
case 'stream_list.ended': return 'Encerrado';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Valor personalizado';
case 'zap.confirm': return 'Confirmar';
case 'zap.comment': return 'Comentar';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Enviar Zap de ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Abrir na carteira';
case 'zap.button_connect_wallet': return 'Conectar carteira';
case 'zap.copy': return 'Copiado para a área de transferência';
case 'zap.error.invalid_custom_amount': return 'Valor personalizado inválido';
case 'zap.error.no_wallet': return 'Nenhuma carteira lightning instalada';
case 'zap.error.no_lud16': return 'Nenhum endereço de raio encontrado';
case 'profile.past_streams': return 'Transmissões Passadas';
case 'settings.button_profile': return 'Editar perfil';
case 'settings.button_wallet': return 'Configurações da carteira';
case 'settings.profile.display_name': return 'Nome de exibição';
case 'settings.profile.about': return 'Sobre';
case 'settings.profile.nip05': return 'Endereço Nostr';
case 'settings.profile.lud16': return 'Endereço para relâmpagos';
case 'settings.profile.error.logged_out': return 'Não é possível editar o perfil quando se está desconectado';
case 'settings.wallet.connect_wallet': return 'Carteira Connect (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Desconectar carteira';
case 'settings.wallet.connect_1tap': return 'Conexão de 1 torneira';
case 'settings.wallet.paste': return 'Colar URL';
case 'settings.wallet.error.logged_out': return 'Não consigo conectar a carteira quando estou desconectado';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Nenhum evento de autenticação de carteira encontrado';
case 'login.username': return 'Nome de usuário';
case 'login.amber': return 'Faça login com o Amber';
case 'login.key': return 'Login com chave';
case 'login.create': return 'Criar Conta';
case 'login.error.invalid_key': return 'Chave inválida';
default: return null;
}
}
}

469
lib/i18n/strings_ro.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsRo extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsRo({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.ro,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <ro>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsRo _root = this; // ignore: unused_field
@override
TranslationsRo $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsRo(meta: meta ?? this.$meta);
// Translations
/// Text care solicită utilizatorului să atingă marcajul avatar pentru a începe încărcarea
@override String get upload_avatar => 'Încărcați Avatar';
/// Cap peste streamers de top enumerate de zaps
@override String get most_zapped_streamers => 'Cele mai multe Streamers Zapped';
/// Nu s-a găsit niciun utilizator la căutare
@override String get no_user_found => 'Niciun utilizator găsit';
/// Un utilizator anonim
@override String get anon => 'Anon';
/// Numărul de telespectatori ai fluxului
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n,
one: '1 vizualizator',
other: '${NumberFormat.decimalPattern('ro').format(n)} telespectatori',
);
@override late final _TranslationsStreamRo stream = _TranslationsStreamRo._(_root);
@override late final _TranslationsGoalRo goal = _TranslationsGoalRo._(_root);
@override late final _TranslationsButtonRo button = _TranslationsButtonRo._(_root);
@override late final _TranslationsEmbedRo embed = _TranslationsEmbedRo._(_root);
/// Rubrici pe listele de fluxuri în funcție de tipul fluxului în direct/terminat/planificat etc.
@override late final _TranslationsStreamListRo stream_list = _TranslationsStreamListRo._(_root);
@override late final _TranslationsZapRo zap = _TranslationsZapRo._(_root);
@override late final _TranslationsProfileRo profile = _TranslationsProfileRo._(_root);
@override late final _TranslationsSettingsRo settings = _TranslationsSettingsRo._(_root);
@override late final _TranslationsLoginRo login = _TranslationsLoginRo._(_root);
}
// Path: stream
class _TranslationsStreamRo extends TranslationsStreamEn {
_TranslationsStreamRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusRo status = _TranslationsStreamStatusRo._(_root);
@override String started({required Object timestamp}) => 'A început ${timestamp}';
@override late final _TranslationsStreamChatRo chat = _TranslationsStreamChatRo._(_root);
}
// Path: goal
class _TranslationsGoalRo extends TranslationsGoalEn {
_TranslationsGoalRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Obiectiv: ${amount}';
@override String remaining({required Object amount}) => 'Rămase: ${amount}';
@override String get complete => 'COMPLET';
}
// Path: button
class _TranslationsButtonRo extends TranslationsButtonEn {
_TranslationsButtonRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
/// Textul butonului pentru butonul de conectare
@override String get login => 'Autentificare';
@override String get logout => 'Ieșire';
@override String get edit_profile => 'Editare profil';
/// Textul butonului pentru butonul de urmărire
@override String get follow => 'Urmați';
/// Textul butonului pentru butonul unfollow
@override String get unfollow => 'Unfollow';
@override String get mute => 'Mut';
@override String get unmute => 'Dezactivați';
@override String get share => 'Share';
@override String get save => 'Salvați';
@override String get connect => 'Conectare';
@override String get settings => 'Setări';
}
// Path: embed
class _TranslationsEmbedRo extends TranslationsEmbedEn {
_TranslationsEmbedRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Articol de ${name}';
@override String note_by({required Object name}) => 'Notă de la ${name}';
@override String live_stream_by({required Object name}) => 'Transmisiune live prin ${name}';
}
// Path: stream_list
class _TranslationsStreamListRo extends TranslationsStreamListEn {
_TranslationsStreamListRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get following => 'În urma';
@override String get live => 'În direct';
@override String get planned => 'Planificate';
@override String get ended => 'Încheiat';
}
// Path: zap
class _TranslationsZapRo extends TranslationsZapEn {
_TranslationsZapRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Sumă personalizată';
@override String get confirm => 'Confirmați';
@override String get comment => 'Comentariu';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Deschide în portofel';
@override String get button_connect_wallet => 'Conectați portofelul';
@override String get copy => 'Copiat în clipboard';
@override late final _TranslationsZapErrorRo error = _TranslationsZapErrorRo._(_root);
}
// Path: profile
class _TranslationsProfileRo extends TranslationsProfileEn {
_TranslationsProfileRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Fluxuri trecute';
}
// Path: settings
class _TranslationsSettingsRo extends TranslationsSettingsEn {
_TranslationsSettingsRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Editare profil';
@override String get button_wallet => 'Setări portofel';
@override late final _TranslationsSettingsProfileRo profile = _TranslationsSettingsProfileRo._(_root);
@override late final _TranslationsSettingsWalletRo wallet = _TranslationsSettingsWalletRo._(_root);
}
// Path: login
class _TranslationsLoginRo extends TranslationsLoginEn {
_TranslationsLoginRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get username => 'Nume utilizator';
@override String get amber => 'Conectați-vă cu Amber';
@override String get key => 'Autentificare cu cheie';
@override String get create => 'Creare cont';
@override late final _TranslationsLoginErrorRo error = _TranslationsLoginErrorRo._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusRo extends TranslationsStreamStatusEn {
_TranslationsStreamStatusRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get live => 'ÎN DIRECT';
@override String get ended => 'TERMINAT';
@override String get planned => 'PLANIFICATE';
}
// Path: stream.chat
class _TranslationsStreamChatRo extends TranslationsStreamChatEn {
_TranslationsStreamChatRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DEZACTIVAT';
@override String disabled_timeout({required Object time}) => 'Timpul expiră: ${time}';
/// Mesaj de chat care afișează evenimentele de timeout
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Timed out '),
user,
const TextSpan(text: ' pentru '),
time,
]);
/// Stream a încheiat footer-ul în partea de jos a chat-ului
@override String get ended => 'STREAM ÎNCHEIAT';
/// Mesaj de chat care arată zapsuri de flux
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteRo write = _TranslationsStreamChatWriteRo._(_root);
@override late final _TranslationsStreamChatBadgeRo badge = _TranslationsStreamChatBadgeRo._(_root);
@override late final _TranslationsStreamChatRaidRo raid = _TranslationsStreamChatRaidRo._(_root);
}
// Path: zap.error
class _TranslationsZapErrorRo extends TranslationsZapErrorEn {
_TranslationsZapErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Sumă personalizată invalidă';
@override String get no_wallet => 'Nu este instalat niciun portofel Lightning';
@override String get no_lud16 => 'Nu a fost găsită nicio adresă de fulgere';
}
// Path: settings.profile
class _TranslationsSettingsProfileRo extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get display_name => 'Nume afișat';
@override String get about => 'Despre';
@override String get nip05 => 'Adresa Nostr';
@override String get lud16 => 'Adresa fulgerului';
@override late final _TranslationsSettingsProfileErrorRo error = _TranslationsSettingsProfileErrorRo._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletRo extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Conectați portofelul (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Deconectați portofelul';
@override String get connect_1tap => 'Conexiune 1-Tap';
@override String get paste => 'Lipiți URL';
@override late final _TranslationsSettingsWalletErrorRo error = _TranslationsSettingsWalletErrorRo._(_root);
}
// Path: login.error
class _TranslationsLoginErrorRo extends TranslationsLoginErrorEn {
_TranslationsLoginErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Cheie invalidă';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteRo extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
/// Etichetă pe caseta de introducere a mesajului de chat
@override String get label => 'Scrieți mesajul';
/// Mesajul de intrare în chat afișat atunci când utilizatorul este conectat doar cu pubkey
@override String get no_signer => 'Nu se pot scrie mesaje cu autentificarea npub';
/// Mesajul de intrare în chat afișat atunci când utilizatorul este deconectat
@override String get login => 'Vă rugăm să vă autentificați pentru a trimite mesaje';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeRo extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
/// Antet peste lista de utilizatori care au primit o insignă
@override String get awarded_to => 'Premiat pentru:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidRo extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
/// Chat mesaj raid la un alt flux
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid mesaj din alt flux
@override String from({required Object name}) => 'RAID DE LA ${name}';
/// Cronometru cu numărătoare inversă pentru auto-raid
@override String countdown({required Object time}) => 'Raiduri în ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorRo extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Nu pot edita profilul când sunt deconectat';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorRo extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Nu puteți conecta portofelul atunci când sunteți deconectat';
@override String get nwc_auth_event_not_found => 'Nu a fost găsit niciun eveniment de autorizare a portofelului';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsRo {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Încărcați Avatar';
case 'most_zapped_streamers': return 'Cele mai multe Streamers Zapped';
case 'no_user_found': return 'Niciun utilizator găsit';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n,
one: '1 vizualizator',
other: '${NumberFormat.decimalPattern('ro').format(n)} telespectatori',
);
case 'stream.status.live': return 'ÎN DIRECT';
case 'stream.status.ended': return 'TERMINAT';
case 'stream.status.planned': return 'PLANIFICATE';
case 'stream.started': return ({required Object timestamp}) => 'A început ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DEZACTIVAT';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timpul expiră: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Timed out '),
user,
const TextSpan(text: ' pentru '),
time,
]);
case 'stream.chat.ended': return 'STREAM ÎNCHEIAT';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Scrieți mesajul';
case 'stream.chat.write.no_signer': return 'Nu se pot scrie mesaje cu autentificarea npub';
case 'stream.chat.write.login': return 'Vă rugăm să vă autentificați pentru a trimite mesaje';
case 'stream.chat.badge.awarded_to': return 'Premiat pentru:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID DE LA ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiduri în ${time}';
case 'goal.title': return ({required Object amount}) => 'Obiectiv: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Rămase: ${amount}';
case 'goal.complete': return 'COMPLET';
case 'button.login': return 'Autentificare';
case 'button.logout': return 'Ieșire';
case 'button.edit_profile': return 'Editare profil';
case 'button.follow': return 'Urmați';
case 'button.unfollow': return 'Unfollow';
case 'button.mute': return 'Mut';
case 'button.unmute': return 'Dezactivați';
case 'button.share': return 'Share';
case 'button.save': return 'Salvați';
case 'button.connect': return 'Conectare';
case 'button.settings': return 'Setări';
case 'embed.article_by': return ({required Object name}) => 'Articol de ${name}';
case 'embed.note_by': return ({required Object name}) => 'Notă de la ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Transmisiune live prin ${name}';
case 'stream_list.following': return 'În urma';
case 'stream_list.live': return 'În direct';
case 'stream_list.planned': return 'Planificate';
case 'stream_list.ended': return 'Încheiat';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Sumă personalizată';
case 'zap.confirm': return 'Confirmați';
case 'zap.comment': return 'Comentariu';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Deschide în portofel';
case 'zap.button_connect_wallet': return 'Conectați portofelul';
case 'zap.copy': return 'Copiat în clipboard';
case 'zap.error.invalid_custom_amount': return 'Sumă personalizată invalidă';
case 'zap.error.no_wallet': return 'Nu este instalat niciun portofel Lightning';
case 'zap.error.no_lud16': return 'Nu a fost găsită nicio adresă de fulgere';
case 'profile.past_streams': return 'Fluxuri trecute';
case 'settings.button_profile': return 'Editare profil';
case 'settings.button_wallet': return 'Setări portofel';
case 'settings.profile.display_name': return 'Nume afișat';
case 'settings.profile.about': return 'Despre';
case 'settings.profile.nip05': return 'Adresa Nostr';
case 'settings.profile.lud16': return 'Adresa fulgerului';
case 'settings.profile.error.logged_out': return 'Nu pot edita profilul când sunt deconectat';
case 'settings.wallet.connect_wallet': return 'Conectați portofelul (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Deconectați portofelul';
case 'settings.wallet.connect_1tap': return 'Conexiune 1-Tap';
case 'settings.wallet.paste': return 'Lipiți URL';
case 'settings.wallet.error.logged_out': return 'Nu puteți conecta portofelul atunci când sunteți deconectat';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Nu a fost găsit niciun eveniment de autorizare a portofelului';
case 'login.username': return 'Nume utilizator';
case 'login.amber': return 'Conectați-vă cu Amber';
case 'login.key': return 'Autentificare cu cheie';
case 'login.create': return 'Creare cont';
case 'login.error.invalid_key': return 'Cheie invalidă';
default: return null;
}
}
}

469
lib/i18n/strings_ru.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsRu extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsRu({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.ru,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <ru>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsRu _root = this; // ignore: unused_field
@override
TranslationsRu $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsRu(meta: meta ?? this.$meta);
// Translations
/// Текст, побуждающий пользователя нажать кнопку с изображением аватара, чтобы начать загрузку
@override String get upload_avatar => 'Загрузить аватар';
/// Направляясь по перечисленным верхним стримерам с помощью запс
@override String get most_zapped_streamers => 'Самые прыткие стримеры';
/// Пользователь не найден при поиске
@override String get no_user_found => 'Пользователь не найден';
/// Анонимный пользователь
@override String get anon => 'Аноним';
/// Количество зрителей потока
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n,
one: '1 зритель',
other: '${NumberFormat.decimalPattern('ru').format(n)} зрителей',
);
@override late final _TranslationsStreamRu stream = _TranslationsStreamRu._(_root);
@override late final _TranslationsGoalRu goal = _TranslationsGoalRu._(_root);
@override late final _TranslationsButtonRu button = _TranslationsButtonRu._(_root);
@override late final _TranslationsEmbedRu embed = _TranslationsEmbedRu._(_root);
/// Заголовки в списках потоков по типу потока - живой/законченный/запланированный и т. д.
@override late final _TranslationsStreamListRu stream_list = _TranslationsStreamListRu._(_root);
@override late final _TranslationsZapRu zap = _TranslationsZapRu._(_root);
@override late final _TranslationsProfileRu profile = _TranslationsProfileRu._(_root);
@override late final _TranslationsSettingsRu settings = _TranslationsSettingsRu._(_root);
@override late final _TranslationsLoginRu login = _TranslationsLoginRu._(_root);
}
// Path: stream
class _TranslationsStreamRu extends TranslationsStreamEn {
_TranslationsStreamRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusRu status = _TranslationsStreamStatusRu._(_root);
@override String started({required Object timestamp}) => 'Начало ${timestamp}';
@override late final _TranslationsStreamChatRu chat = _TranslationsStreamChatRu._(_root);
}
// Path: goal
class _TranslationsGoalRu extends TranslationsGoalEn {
_TranslationsGoalRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Цель: ${amount}';
@override String remaining({required Object amount}) => 'Осталось: ${amount}';
@override String get complete => 'КОМПЛЕКТ';
}
// Path: button
class _TranslationsButtonRu extends TranslationsButtonEn {
_TranslationsButtonRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
/// Текст кнопки для входа в систему
@override String get login => 'Логин';
@override String get logout => 'Выйти';
@override String get edit_profile => 'Редактировать профиль';
/// Текст кнопки для кнопки следования
@override String get follow => 'Подписаться';
/// Текст кнопки для кнопки "Развернуть
@override String get unfollow => 'Отписаться';
@override String get mute => 'Заглушить';
@override String get unmute => 'Включить уведомления';
@override String get share => 'Поделиться';
@override String get save => 'Сохранить';
@override String get connect => 'Подключайтесь';
@override String get settings => 'Настройки';
}
// Path: embed
class _TranslationsEmbedRu extends TranslationsEmbedEn {
_TranslationsEmbedRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Статья ${name}';
@override String note_by({required Object name}) => 'Заметка на сайте ${name}';
@override String live_stream_by({required Object name}) => 'Прямая трансляция: ${name}';
}
// Path: stream_list
class _TranslationsStreamListRu extends TranslationsStreamListEn {
_TranslationsStreamListRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get following => 'Подписки';
@override String get live => 'Прямой эфир';
@override String get planned => 'Запланировано';
@override String get ended => 'Завершено';
}
// Path: zap
class _TranslationsZapRu extends TranslationsZapEn {
_TranslationsZapRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Запнуть (${name}';
@override String get custom_amount => 'Пользовательская сумма';
@override String get confirm => 'Подтвердить';
@override String get comment => 'Комментарий';
@override String button_zap_ready({required Object amount}) => 'Запнуть ${amount} сат';
@override String get button_zap => 'Зап';
@override String get button_open_wallet => 'Открыть в кошельке';
@override String get button_connect_wallet => 'Подключить кошелек';
@override String get copy => 'Скопировано в буфер обмена';
@override late final _TranslationsZapErrorRu error = _TranslationsZapErrorRu._(_root);
}
// Path: profile
class _TranslationsProfileRu extends TranslationsProfileEn {
_TranslationsProfileRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Предыдущие трансляции';
}
// Path: settings
class _TranslationsSettingsRu extends TranslationsSettingsEn {
_TranslationsSettingsRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Редактировать профиль';
@override String get button_wallet => 'Настройки кошелька';
@override late final _TranslationsSettingsProfileRu profile = _TranslationsSettingsProfileRu._(_root);
@override late final _TranslationsSettingsWalletRu wallet = _TranslationsSettingsWalletRu._(_root);
}
// Path: login
class _TranslationsLoginRu extends TranslationsLoginEn {
_TranslationsLoginRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get username => 'Имя пользователя';
@override String get amber => 'Войти с помощью Amber';
@override String get key => 'Вход в систему с помощью ключа';
@override String get create => 'Создать аккаунт';
@override late final _TranslationsLoginErrorRu error = _TranslationsLoginErrorRu._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusRu extends TranslationsStreamStatusEn {
_TranslationsStreamStatusRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get live => 'LIVE';
@override String get ended => 'КОНЕЦ';
@override String get planned => 'ПЛАНИРУЕМЫЙ';
}
// Path: stream.chat
class _TranslationsStreamChatRu extends TranslationsStreamChatEn {
_TranslationsStreamChatRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get disabled => 'ЧАТ ОТКЛЮЧЕН';
@override String disabled_timeout({required Object time}) => 'Таймаут истекает: ${time}';
/// Сообщение в чате, показывающее события по тайм-ауту
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' тайм-аут '),
user,
const TextSpan(text: ' для '),
time,
]);
/// Поток закончился в нижней части чата
@override String get ended => 'ТРАНСЛЯЦИЯ ОКОНЧЕНА';
/// Сообщение в чате, отображающее потоковые зазоры
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' запнул '),
amount,
const TextSpan(text: ' сат'),
]);
@override late final _TranslationsStreamChatWriteRu write = _TranslationsStreamChatWriteRu._(_root);
@override late final _TranslationsStreamChatBadgeRu badge = _TranslationsStreamChatBadgeRu._(_root);
@override late final _TranslationsStreamChatRaidRu raid = _TranslationsStreamChatRaidRu._(_root);
}
// Path: zap.error
class _TranslationsZapErrorRu extends TranslationsZapErrorEn {
_TranslationsZapErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Недопустимая пользовательская сумма';
@override String get no_wallet => 'Кошелек молнии не установлен';
@override String get no_lud16 => 'Адрес молнии не найден';
}
// Path: settings.profile
class _TranslationsSettingsProfileRu extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get display_name => 'Отображаемое имя';
@override String get about => 'О сайте';
@override String get nip05 => 'Адрес Ностр';
@override String get lud16 => 'Адрес молнии';
@override late final _TranslationsSettingsProfileErrorRu error = _TranslationsSettingsProfileErrorRu._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletRu extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Кошелек Connect (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Отключить кошелек';
@override String get connect_1tap => '1-кратное соединение';
@override String get paste => 'Вставить URL';
@override late final _TranslationsSettingsWalletErrorRu error = _TranslationsSettingsWalletErrorRu._(_root);
}
// Path: login.error
class _TranslationsLoginErrorRu extends TranslationsLoginErrorEn {
_TranslationsLoginErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Неверный ключ';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteRu extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
/// Надпись на поле ввода сообщения чата
@override String get label => 'Написать сообщение';
/// Сообщение о входе в чат, отображаемое при входе пользователя только с pubkey
@override String get no_signer => 'Невозможно писать сообщения с логином npub';
/// Сообщение о входе в чат, отображаемое при выходе пользователя из системы
@override String get login => 'Пожалуйста, войдите в систему, чтобы отправлять сообщения';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeRu extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
/// Заголовок над списком пользователей, награжденных значком
@override String get awarded_to => 'Награждается:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidRu extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
/// Сообщение о рейде в чате в другой поток
@override String to({required Object name}) => 'RAIDING ${name}';
/// Сообщение о рейде в чате из другого потока
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Таймер обратного отсчета для автопоездки
@override String countdown({required Object time}) => 'Рейды в ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorRu extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Невозможно редактировать профиль при выходе из системы';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorRu extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Невозможно подключить кошелек при выходе из системы';
@override String get nwc_auth_event_not_found => 'Событие аутентификации кошелька не найдено';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsRu {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Загрузить аватар';
case 'most_zapped_streamers': return 'Самые прыткие стримеры';
case 'no_user_found': return 'Пользователь не найден';
case 'anon': return 'Аноним';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n,
one: '1 зритель',
other: '${NumberFormat.decimalPattern('ru').format(n)} зрителей',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'КОНЕЦ';
case 'stream.status.planned': return 'ПЛАНИРУЕМЫЙ';
case 'stream.started': return ({required Object timestamp}) => 'Начало ${timestamp}';
case 'stream.chat.disabled': return 'ЧАТ ОТКЛЮЧЕН';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Таймаут истекает: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' тайм-аут '),
user,
const TextSpan(text: ' для '),
time,
]);
case 'stream.chat.ended': return 'ТРАНСЛЯЦИЯ ОКОНЧЕНА';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' запнул '),
amount,
const TextSpan(text: ' сат'),
]);
case 'stream.chat.write.label': return 'Написать сообщение';
case 'stream.chat.write.no_signer': return 'Невозможно писать сообщения с логином npub';
case 'stream.chat.write.login': return 'Пожалуйста, войдите в систему, чтобы отправлять сообщения';
case 'stream.chat.badge.awarded_to': return 'Награждается:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Рейды в ${time}';
case 'goal.title': return ({required Object amount}) => 'Цель: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Осталось: ${amount}';
case 'goal.complete': return 'КОМПЛЕКТ';
case 'button.login': return 'Логин';
case 'button.logout': return 'Выйти';
case 'button.edit_profile': return 'Редактировать профиль';
case 'button.follow': return 'Подписаться';
case 'button.unfollow': return 'Отписаться';
case 'button.mute': return 'Заглушить';
case 'button.unmute': return 'Включить уведомления';
case 'button.share': return 'Поделиться';
case 'button.save': return 'Сохранить';
case 'button.connect': return 'Подключайтесь';
case 'button.settings': return 'Настройки';
case 'embed.article_by': return ({required Object name}) => 'Статья ${name}';
case 'embed.note_by': return ({required Object name}) => 'Заметка на сайте ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Прямая трансляция: ${name}';
case 'stream_list.following': return 'Подписки';
case 'stream_list.live': return 'Прямой эфир';
case 'stream_list.planned': return 'Запланировано';
case 'stream_list.ended': return 'Завершено';
case 'zap.title': return ({required Object name}) => 'Запнуть (${name}';
case 'zap.custom_amount': return 'Пользовательская сумма';
case 'zap.confirm': return 'Подтвердить';
case 'zap.comment': return 'Комментарий';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Запнуть ${amount} сат';
case 'zap.button_zap': return 'Зап';
case 'zap.button_open_wallet': return 'Открыть в кошельке';
case 'zap.button_connect_wallet': return 'Подключить кошелек';
case 'zap.copy': return 'Скопировано в буфер обмена';
case 'zap.error.invalid_custom_amount': return 'Недопустимая пользовательская сумма';
case 'zap.error.no_wallet': return 'Кошелек молнии не установлен';
case 'zap.error.no_lud16': return 'Адрес молнии не найден';
case 'profile.past_streams': return 'Предыдущие трансляции';
case 'settings.button_profile': return 'Редактировать профиль';
case 'settings.button_wallet': return 'Настройки кошелька';
case 'settings.profile.display_name': return 'Отображаемое имя';
case 'settings.profile.about': return 'О сайте';
case 'settings.profile.nip05': return 'Адрес Ностр';
case 'settings.profile.lud16': return 'Адрес молнии';
case 'settings.profile.error.logged_out': return 'Невозможно редактировать профиль при выходе из системы';
case 'settings.wallet.connect_wallet': return 'Кошелек Connect (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Отключить кошелек';
case 'settings.wallet.connect_1tap': return '1-кратное соединение';
case 'settings.wallet.paste': return 'Вставить URL';
case 'settings.wallet.error.logged_out': return 'Невозможно подключить кошелек при выходе из системы';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Событие аутентификации кошелька не найдено';
case 'login.username': return 'Имя пользователя';
case 'login.amber': return 'Войти с помощью Amber';
case 'login.key': return 'Вход в систему с помощью ключа';
case 'login.create': return 'Создать аккаунт';
case 'login.error.invalid_key': return 'Неверный ключ';
default: return null;
}
}
}

469
lib/i18n/strings_sv.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsSv extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsSv({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.sv,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <sv>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsSv _root = this; // ignore: unused_field
@override
TranslationsSv $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsSv(meta: meta ?? this.$meta);
// Translations
/// Text som uppmanar användaren att trycka på avatarplatshållaren för att påbörja uppladdningen
@override String get upload_avatar => 'Ladda upp avatar';
/// Rubrik över listade toppstreamers av zaps
@override String get most_zapped_streamers => 'De flesta zappade streamers';
/// Ingen användare hittades vid sökning
@override String get no_user_found => 'Ingen användare hittades';
/// En anonym användare
@override String get anon => 'Anon';
/// Antal tittare på streamingen
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n,
one: '1 tittare',
other: '${NumberFormat.decimalPattern('sv').format(n)} tittare',
);
@override late final _TranslationsStreamSv stream = _TranslationsStreamSv._(_root);
@override late final _TranslationsGoalSv goal = _TranslationsGoalSv._(_root);
@override late final _TranslationsButtonSv button = _TranslationsButtonSv._(_root);
@override late final _TranslationsEmbedSv embed = _TranslationsEmbedSv._(_root);
/// Rubriker på strömlistor efter strömtyp live/avslutad/planerad etc.
@override late final _TranslationsStreamListSv stream_list = _TranslationsStreamListSv._(_root);
@override late final _TranslationsZapSv zap = _TranslationsZapSv._(_root);
@override late final _TranslationsProfileSv profile = _TranslationsProfileSv._(_root);
@override late final _TranslationsSettingsSv settings = _TranslationsSettingsSv._(_root);
@override late final _TranslationsLoginSv login = _TranslationsLoginSv._(_root);
}
// Path: stream
class _TranslationsStreamSv extends TranslationsStreamEn {
_TranslationsStreamSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusSv status = _TranslationsStreamStatusSv._(_root);
@override String started({required Object timestamp}) => 'Startade ${timestamp}';
@override late final _TranslationsStreamChatSv chat = _TranslationsStreamChatSv._(_root);
}
// Path: goal
class _TranslationsGoalSv extends TranslationsGoalEn {
_TranslationsGoalSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Mål: ${amount}';
@override String remaining({required Object amount}) => 'Kvarvarande: ${amount}';
@override String get complete => 'KOMPLETT';
}
// Path: button
class _TranslationsButtonSv extends TranslationsButtonEn {
_TranslationsButtonSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
/// Knapptext för inloggningsknappen
@override String get login => 'Logga in';
@override String get logout => 'Logga ut';
@override String get edit_profile => 'Redigera profil';
/// Knapptext för följ-knappen
@override String get follow => 'Följ';
/// Knapptext för avföljningsknappen
@override String get unfollow => 'Sluta följa';
@override String get mute => 'Tysta';
@override String get unmute => 'Avtysta';
@override String get share => 'Dela';
@override String get save => 'Spara';
@override String get connect => 'Anslut';
@override String get settings => 'Inställningar';
}
// Path: embed
class _TranslationsEmbedSv extends TranslationsEmbedEn {
_TranslationsEmbedSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Artikel av ${name}';
@override String note_by({required Object name}) => 'Anteckning av ${name}';
@override String live_stream_by({required Object name}) => 'Direktsändning via ${name}';
}
// Path: stream_list
class _TranslationsStreamListSv extends TranslationsStreamListEn {
_TranslationsStreamListSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get following => 'Följer';
@override String get live => 'Live';
@override String get planned => 'Planerade';
@override String get ended => 'Avslutade';
}
// Path: zap
class _TranslationsZapSv extends TranslationsZapEn {
_TranslationsZapSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Anpassat belopp';
@override String get confirm => 'Bekräfta';
@override String get comment => 'Kommentar';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Öppna i plånboken';
@override String get button_connect_wallet => 'Anslut plånbok';
@override String get copy => 'Kopieras till urklipp';
@override late final _TranslationsZapErrorSv error = _TranslationsZapErrorSv._(_root);
}
// Path: profile
class _TranslationsProfileSv extends TranslationsProfileEn {
_TranslationsProfileSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Tidigare streamar';
}
// Path: settings
class _TranslationsSettingsSv extends TranslationsSettingsEn {
_TranslationsSettingsSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Redigera profil';
@override String get button_wallet => 'Inställningar för plånbok';
@override late final _TranslationsSettingsProfileSv profile = _TranslationsSettingsProfileSv._(_root);
@override late final _TranslationsSettingsWalletSv wallet = _TranslationsSettingsWalletSv._(_root);
}
// Path: login
class _TranslationsLoginSv extends TranslationsLoginEn {
_TranslationsLoginSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get username => 'Användarnamn';
@override String get amber => 'Logga in med Amber';
@override String get key => 'Logga in med nyckel';
@override String get create => 'Skapa konto';
@override late final _TranslationsLoginErrorSv error = _TranslationsLoginErrorSv._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusSv extends TranslationsStreamStatusEn {
_TranslationsStreamStatusSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get live => 'LIVE';
@override String get ended => 'AVSLUTAD';
@override String get planned => 'PLANERADE';
}
// Path: stream.chat
class _TranslationsStreamChatSv extends TranslationsStreamChatEn {
_TranslationsStreamChatSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT AVSTÄNGD';
@override String disabled_timeout({required Object time}) => 'Tidsgränsen går ut: ${time}';
/// Chattmeddelande som visar timeout-händelser
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' tidsbegränsad '),
user,
const TextSpan(text: ' för '),
time,
]);
/// Stream avslutade sidfoten längst ner på chatten
@override String get ended => 'STREAM AVSLUTAD';
/// Chattmeddelande som visar strömavbrott
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteSv write = _TranslationsStreamChatWriteSv._(_root);
@override late final _TranslationsStreamChatBadgeSv badge = _TranslationsStreamChatBadgeSv._(_root);
@override late final _TranslationsStreamChatRaidSv raid = _TranslationsStreamChatRaidSv._(_root);
}
// Path: zap.error
class _TranslationsZapErrorSv extends TranslationsZapErrorEn {
_TranslationsZapErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Ogiltigt anpassat belopp';
@override String get no_wallet => 'Ingen blixtplånbok installerad';
@override String get no_lud16 => 'Ingen blixtadress hittades';
}
// Path: settings.profile
class _TranslationsSettingsProfileSv extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get display_name => 'Visa namn';
@override String get about => 'Om';
@override String get nip05 => 'Nostr Adress';
@override String get lud16 => 'Adress för blixtnedslag';
@override late final _TranslationsSettingsProfileErrorSv error = _TranslationsSettingsProfileErrorSv._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletSv extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect plånbok (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Koppla bort plånboken';
@override String get connect_1tap => '1-Tap-anslutning';
@override String get paste => 'Klistra in URL';
@override late final _TranslationsSettingsWalletErrorSv error = _TranslationsSettingsWalletErrorSv._(_root);
}
// Path: login.error
class _TranslationsLoginErrorSv extends TranslationsLoginErrorEn {
_TranslationsLoginErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Ogiltig nyckel';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteSv extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
/// Etikett på inmatningsrutan för chattmeddelanden
@override String get label => 'Skriv meddelande';
/// Chattinmatningsmeddelande som visas när användaren endast är inloggad med pubkey
@override String get no_signer => 'Det går inte att skriva meddelanden med npub-inloggning';
/// Chattinmatningsmeddelande som visas när användaren är utloggad
@override String get login => 'Logga in för att skicka meddelanden';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeSv extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
/// Rubrik över lista över användare som tilldelats en badge
@override String get awarded_to => 'Tilldelas till:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidSv extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
/// Chatta raidmeddelande till en annan ström
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid-meddelande från en annan ström
@override String from({required Object name}) => 'RAID FRÅN ${name}';
/// Nedräkningstimer för auto-raiding
@override String countdown({required Object time}) => 'Raiding på ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorSv extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kan inte redigera profil när jag är utloggad';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorSv extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kan inte ansluta plånbok när du är inloggad';
@override String get nwc_auth_event_not_found => 'Inget autentiseringshändelse för plånbok hittades';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsSv {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Ladda upp avatar';
case 'most_zapped_streamers': return 'De flesta zappade streamers';
case 'no_user_found': return 'Ingen användare hittades';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n,
one: '1 tittare',
other: '${NumberFormat.decimalPattern('sv').format(n)} tittare',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'AVSLUTAD';
case 'stream.status.planned': return 'PLANERADE';
case 'stream.started': return ({required Object timestamp}) => 'Startade ${timestamp}';
case 'stream.chat.disabled': return 'CHAT AVSTÄNGD';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Tidsgränsen går ut: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' tidsbegränsad '),
user,
const TextSpan(text: ' för '),
time,
]);
case 'stream.chat.ended': return 'STREAM AVSLUTAD';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Skriv meddelande';
case 'stream.chat.write.no_signer': return 'Det går inte att skriva meddelanden med npub-inloggning';
case 'stream.chat.write.login': return 'Logga in för att skicka meddelanden';
case 'stream.chat.badge.awarded_to': return 'Tilldelas till:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FRÅN ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding på ${time}';
case 'goal.title': return ({required Object amount}) => 'Mål: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Kvarvarande: ${amount}';
case 'goal.complete': return 'KOMPLETT';
case 'button.login': return 'Logga in';
case 'button.logout': return 'Logga ut';
case 'button.edit_profile': return 'Redigera profil';
case 'button.follow': return 'Följ';
case 'button.unfollow': return 'Sluta följa';
case 'button.mute': return 'Tysta';
case 'button.unmute': return 'Avtysta';
case 'button.share': return 'Dela';
case 'button.save': return 'Spara';
case 'button.connect': return 'Anslut';
case 'button.settings': return 'Inställningar';
case 'embed.article_by': return ({required Object name}) => 'Artikel av ${name}';
case 'embed.note_by': return ({required Object name}) => 'Anteckning av ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Direktsändning via ${name}';
case 'stream_list.following': return 'Följer';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planerade';
case 'stream_list.ended': return 'Avslutade';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Anpassat belopp';
case 'zap.confirm': return 'Bekräfta';
case 'zap.comment': return 'Kommentar';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Öppna i plånboken';
case 'zap.button_connect_wallet': return 'Anslut plånbok';
case 'zap.copy': return 'Kopieras till urklipp';
case 'zap.error.invalid_custom_amount': return 'Ogiltigt anpassat belopp';
case 'zap.error.no_wallet': return 'Ingen blixtplånbok installerad';
case 'zap.error.no_lud16': return 'Ingen blixtadress hittades';
case 'profile.past_streams': return 'Tidigare streamar';
case 'settings.button_profile': return 'Redigera profil';
case 'settings.button_wallet': return 'Inställningar för plånbok';
case 'settings.profile.display_name': return 'Visa namn';
case 'settings.profile.about': return 'Om';
case 'settings.profile.nip05': return 'Nostr Adress';
case 'settings.profile.lud16': return 'Adress för blixtnedslag';
case 'settings.profile.error.logged_out': return 'Kan inte redigera profil när jag är utloggad';
case 'settings.wallet.connect_wallet': return 'Connect plånbok (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Koppla bort plånboken';
case 'settings.wallet.connect_1tap': return '1-Tap-anslutning';
case 'settings.wallet.paste': return 'Klistra in URL';
case 'settings.wallet.error.logged_out': return 'Kan inte ansluta plånbok när du är inloggad';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Inget autentiseringshändelse för plånbok hittades';
case 'login.username': return 'Användarnamn';
case 'login.amber': return 'Logga in med Amber';
case 'login.key': return 'Logga in med nyckel';
case 'login.create': return 'Skapa konto';
case 'login.error.invalid_key': return 'Ogiltig nyckel';
default: return null;
}
}
}

469
lib/i18n/strings_tr.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsTr extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsTr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.tr,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <tr>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsTr _root = this; // ignore: unused_field
@override
TranslationsTr $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsTr(meta: meta ?? this.$meta);
// Translations
/// Kullanıcının yüklemeye başlamak için avatar yer tutucusuna basmasını isteyen metin
@override String get upload_avatar => 'Avatar Yükle';
/// Zaps tarafından listelenen üst flamalar üzerinde ilerliyor
@override String get most_zapped_streamers => 'En Çok Zaplanan Flamalar';
/// Arama yaparken kullanıcı bulunamadı
@override String get no_user_found => 'Kullanıcı bulunamadı';
/// Anonim bir kullanıcı
@override String get anon => 'Anon';
/// Akışı izleyenlerin sayısı
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n,
one: '1 izleyici',
other: '${NumberFormat.decimalPattern('tr').format(n)} izleyiciler',
);
@override late final _TranslationsStreamTr stream = _TranslationsStreamTr._(_root);
@override late final _TranslationsGoalTr goal = _TranslationsGoalTr._(_root);
@override late final _TranslationsButtonTr button = _TranslationsButtonTr._(_root);
@override late final _TranslationsEmbedTr embed = _TranslationsEmbedTr._(_root);
/// Akış türüne göre akış listelerindeki başlıklar canlı/bitmiş/planlanan vb.
@override late final _TranslationsStreamListTr stream_list = _TranslationsStreamListTr._(_root);
@override late final _TranslationsZapTr zap = _TranslationsZapTr._(_root);
@override late final _TranslationsProfileTr profile = _TranslationsProfileTr._(_root);
@override late final _TranslationsSettingsTr settings = _TranslationsSettingsTr._(_root);
@override late final _TranslationsLoginTr login = _TranslationsLoginTr._(_root);
}
// Path: stream
class _TranslationsStreamTr extends TranslationsStreamEn {
_TranslationsStreamTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusTr status = _TranslationsStreamStatusTr._(_root);
@override String started({required Object timestamp}) => 'Başlatıldı ${timestamp}';
@override late final _TranslationsStreamChatTr chat = _TranslationsStreamChatTr._(_root);
}
// Path: goal
class _TranslationsGoalTr extends TranslationsGoalEn {
_TranslationsGoalTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Hedef: ${amount}';
@override String remaining({required Object amount}) => 'Kalan: ${amount}';
@override String get complete => 'TAMAMLANDI';
}
// Path: button
class _TranslationsButtonTr extends TranslationsButtonEn {
_TranslationsButtonTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
/// Oturum açma düğmesi için düğme metni
@override String get login => 'Giriş';
@override String get logout => 'Oturum Kapatma';
@override String get edit_profile => 'Profil Düzenle';
/// Takip et düğmesi için düğme metni
@override String get follow => 'Takip et';
/// Takibi bırak düğmesi için düğme metni
@override String get unfollow => 'Takibi bırak';
@override String get mute => 'Sessiz';
@override String get unmute => 'Sesi aç';
@override String get share => 'Paylaş';
@override String get save => 'Kaydet';
@override String get connect => 'Bağlan';
@override String get settings => 'Ayarlar';
}
// Path: embed
class _TranslationsEmbedTr extends TranslationsEmbedEn {
_TranslationsEmbedTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Makale ${name}';
@override String note_by({required Object name}) => 'Not: ${name}';
@override String live_stream_by({required Object name}) => 'Canlı yayın: ${name}';
}
// Path: stream_list
class _TranslationsStreamListTr extends TranslationsStreamListEn {
_TranslationsStreamListTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get following => 'Aşağıdaki';
@override String get live => 'Canlı';
@override String get planned => 'Planlanmış';
@override String get ended => 'Bitti';
}
// Path: zap
class _TranslationsZapTr extends TranslationsZapEn {
_TranslationsZapTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Özel Tutar';
@override String get confirm => 'Onaylayın';
@override String get comment => 'Yorum';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Cüzdanda Aç';
@override String get button_connect_wallet => 'Cüzdan Bağlayın';
@override String get copy => 'Panoya kopyalandı';
@override late final _TranslationsZapErrorTr error = _TranslationsZapErrorTr._(_root);
}
// Path: profile
class _TranslationsProfileTr extends TranslationsProfileEn {
_TranslationsProfileTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Geçmiş Akışlar';
}
// Path: settings
class _TranslationsSettingsTr extends TranslationsSettingsEn {
_TranslationsSettingsTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Profil Düzenle';
@override String get button_wallet => 'Cüzdan Ayarları';
@override late final _TranslationsSettingsProfileTr profile = _TranslationsSettingsProfileTr._(_root);
@override late final _TranslationsSettingsWalletTr wallet = _TranslationsSettingsWalletTr._(_root);
}
// Path: login
class _TranslationsLoginTr extends TranslationsLoginEn {
_TranslationsLoginTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get username => 'Kullanıcı Adı';
@override String get amber => 'Amber ile Giriş Yapın';
@override String get key => 'Anahtar ile Giriş Yapın';
@override String get create => 'Hesap Oluştur';
@override late final _TranslationsLoginErrorTr error = _TranslationsLoginErrorTr._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusTr extends TranslationsStreamStatusEn {
_TranslationsStreamStatusTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get live => 'CANLI';
@override String get ended => 'SONLANDI';
@override String get planned => 'PLANLANMIŞ';
}
// Path: stream.chat
class _TranslationsStreamChatTr extends TranslationsStreamChatEn {
_TranslationsStreamChatTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get disabled => 'SOHBET DEVRE DIŞI';
@override String disabled_timeout({required Object time}) => 'Zaman aşımı sona eriyor: ${time}';
/// Zaman aşımı olaylarını gösteren sohbet mesajı
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' zaman aşımına uğradı '),
user,
const TextSpan(text: ' için '),
time,
]);
/// Sohbetin alt kısmında akış sona erdi altbilgisi
@override String get ended => 'YAYIN SONLANDI';
/// Akış zaplarını gösteren sohbet mesajı
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteTr write = _TranslationsStreamChatWriteTr._(_root);
@override late final _TranslationsStreamChatBadgeTr badge = _TranslationsStreamChatBadgeTr._(_root);
@override late final _TranslationsStreamChatRaidTr raid = _TranslationsStreamChatRaidTr._(_root);
}
// Path: zap.error
class _TranslationsZapErrorTr extends TranslationsZapErrorEn {
_TranslationsZapErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Geçersiz özel tutar';
@override String get no_wallet => 'Lightning cüzdan yüklü değil';
@override String get no_lud16 => 'Yıldırım adresi bulunamadı';
}
// Path: settings.profile
class _TranslationsSettingsProfileTr extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get display_name => 'Ekran Adı';
@override String get about => 'Hakkında';
@override String get nip05 => 'Nostr Adres';
@override String get lud16 => 'Yıldırım Adres';
@override late final _TranslationsSettingsProfileErrorTr error = _TranslationsSettingsProfileErrorTr._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletTr extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Cüzdan (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Cüzdan Bağlantısını Kes';
@override String get connect_1tap => '1-Tap Bağlantı';
@override String get paste => 'URL Yapıştır';
@override late final _TranslationsSettingsWalletErrorTr error = _TranslationsSettingsWalletErrorTr._(_root);
}
// Path: login.error
class _TranslationsLoginErrorTr extends TranslationsLoginErrorEn {
_TranslationsLoginErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Geçersiz anahtar';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteTr extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
/// Sohbet mesajı giriş kutusundaki etiket
@override String get label => 'Mesaj yaz';
/// Kullanıcı yalnızca pubkey ile oturum açtığında gösterilen sohbet giriş mesajı
@override String get no_signer => 'Npub girişi ile mesaj yazılamıyor';
/// Kullanıcı oturumu kapatıldığında gösterilen sohbet giriş mesajı
@override String get login => 'Mesaj göndermek için lütfen giriş yapın';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeTr extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
/// Rozet verilen kullanıcıların listesi üzerinde başlık
@override String get awarded_to => 'Ödüllendirildi:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidTr extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
/// Başka bir akışa sohbet baskını mesajı
@override String to({required Object name}) => 'RAIDING ${name}';
/// Başka bir akıştan sohbet baskını mesajı
@override String from({required Object name}) => '${name}ADRESINDEN RAID';
/// Otomatik sürüş için geri sayım sayacı
@override String countdown({required Object time}) => '${time}adresinde baskın';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorTr extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Çıkış yapıldığında profil düzenlenemiyor';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorTr extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Oturumu kapattığımda cüzdana bağlanamıyorum';
@override String get nwc_auth_event_not_found => 'Cüzdan yetkilendirme olayı bulunamadı';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsTr {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Avatar Yükle';
case 'most_zapped_streamers': return 'En Çok Zaplanan Flamalar';
case 'no_user_found': return 'Kullanıcı bulunamadı';
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n,
one: '1 izleyici',
other: '${NumberFormat.decimalPattern('tr').format(n)} izleyiciler',
);
case 'stream.status.live': return 'CANLI';
case 'stream.status.ended': return 'SONLANDI';
case 'stream.status.planned': return 'PLANLANMIŞ';
case 'stream.started': return ({required Object timestamp}) => 'Başlatıldı ${timestamp}';
case 'stream.chat.disabled': return 'SOHBET DEVRE DIŞI';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Zaman aşımı sona eriyor: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' zaman aşımına uğradı '),
user,
const TextSpan(text: ' için '),
time,
]);
case 'stream.chat.ended': return 'YAYIN SONLANDI';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Mesaj yaz';
case 'stream.chat.write.no_signer': return 'Npub girişi ile mesaj yazılamıyor';
case 'stream.chat.write.login': return 'Mesaj göndermek için lütfen giriş yapın';
case 'stream.chat.badge.awarded_to': return 'Ödüllendirildi:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => '${name}ADRESINDEN RAID';
case 'stream.chat.raid.countdown': return ({required Object time}) => '${time}adresinde baskın';
case 'goal.title': return ({required Object amount}) => 'Hedef: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Kalan: ${amount}';
case 'goal.complete': return 'TAMAMLANDI';
case 'button.login': return 'Giriş';
case 'button.logout': return 'Oturum Kapatma';
case 'button.edit_profile': return 'Profil Düzenle';
case 'button.follow': return 'Takip et';
case 'button.unfollow': return 'Takibi bırak';
case 'button.mute': return 'Sessiz';
case 'button.unmute': return 'Sesi aç';
case 'button.share': return 'Paylaş';
case 'button.save': return 'Kaydet';
case 'button.connect': return 'Bağlan';
case 'button.settings': return 'Ayarlar';
case 'embed.article_by': return ({required Object name}) => 'Makale ${name}';
case 'embed.note_by': return ({required Object name}) => 'Not: ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Canlı yayın: ${name}';
case 'stream_list.following': return 'Aşağıdaki';
case 'stream_list.live': return 'Canlı';
case 'stream_list.planned': return 'Planlanmış';
case 'stream_list.ended': return 'Bitti';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Özel Tutar';
case 'zap.confirm': return 'Onaylayın';
case 'zap.comment': return 'Yorum';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Cüzdanda Aç';
case 'zap.button_connect_wallet': return 'Cüzdan Bağlayın';
case 'zap.copy': return 'Panoya kopyalandı';
case 'zap.error.invalid_custom_amount': return 'Geçersiz özel tutar';
case 'zap.error.no_wallet': return 'Lightning cüzdan yüklü değil';
case 'zap.error.no_lud16': return 'Yıldırım adresi bulunamadı';
case 'profile.past_streams': return 'Geçmiş Akışlar';
case 'settings.button_profile': return 'Profil Düzenle';
case 'settings.button_wallet': return 'Cüzdan Ayarları';
case 'settings.profile.display_name': return 'Ekran Adı';
case 'settings.profile.about': return 'Hakkında';
case 'settings.profile.nip05': return 'Nostr Adres';
case 'settings.profile.lud16': return 'Yıldırım Adres';
case 'settings.profile.error.logged_out': return 'Çıkış yapıldığında profil düzenlenemiyor';
case 'settings.wallet.connect_wallet': return 'Connect Cüzdan (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Cüzdan Bağlantısını Kes';
case 'settings.wallet.connect_1tap': return '1-Tap Bağlantı';
case 'settings.wallet.paste': return 'URL Yapıştır';
case 'settings.wallet.error.logged_out': return 'Oturumu kapattığımda cüzdana bağlanamıyorum';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Cüzdan yetkilendirme olayı bulunamadı';
case 'login.username': return 'Kullanıcı Adı';
case 'login.amber': return 'Amber ile Giriş Yapın';
case 'login.key': return 'Anahtar ile Giriş Yapın';
case 'login.create': return 'Hesap Oluştur';
case 'login.error.invalid_key': return 'Geçersiz anahtar';
default: return null;
}
}
}

469
lib/i18n/strings_uk.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsUk extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsUk({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.uk,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <uk>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsUk _root = this; // ignore: unused_field
@override
TranslationsUk $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsUk(meta: meta ?? this.$meta);
// Translations
/// Текст, що пропонує користувачеві натиснути на заповнювач аватара, щоб почати завантаження
@override String get upload_avatar => 'Завантажити аватар';
/// Перехід до переліку найкращих стрімерів за запитами
@override String get most_zapped_streamers => 'Більшість стримерів, які були під напругою';
/// Користувача не знайдено при пошуку
@override String get no_user_found => 'Користувача не знайдено';
/// Анонімний користувач
@override String get anon => 'Анонім.';
/// Кількість глядачів стріму
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uk'))(n,
one: '1 глядач',
other: '${NumberFormat.decimalPattern('uk').format(n)} глядачів',
);
@override late final _TranslationsStreamUk stream = _TranslationsStreamUk._(_root);
@override late final _TranslationsGoalUk goal = _TranslationsGoalUk._(_root);
@override late final _TranslationsButtonUk button = _TranslationsButtonUk._(_root);
@override late final _TranslationsEmbedUk embed = _TranslationsEmbedUk._(_root);
/// Заголовки у списках трансляцій за типом трансляції: наживо/закінчилася/запланована тощо.
@override late final _TranslationsStreamListUk stream_list = _TranslationsStreamListUk._(_root);
@override late final _TranslationsZapUk zap = _TranslationsZapUk._(_root);
@override late final _TranslationsProfileUk profile = _TranslationsProfileUk._(_root);
@override late final _TranslationsSettingsUk settings = _TranslationsSettingsUk._(_root);
@override late final _TranslationsLoginUk login = _TranslationsLoginUk._(_root);
}
// Path: stream
class _TranslationsStreamUk extends TranslationsStreamEn {
_TranslationsStreamUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusUk status = _TranslationsStreamStatusUk._(_root);
@override String started({required Object timestamp}) => 'Запустив ${timestamp}';
@override late final _TranslationsStreamChatUk chat = _TranslationsStreamChatUk._(_root);
}
// Path: goal
class _TranslationsGoalUk extends TranslationsGoalEn {
_TranslationsGoalUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => 'Мета: ${amount}';
@override String remaining({required Object amount}) => 'Залишилося: ${amount}';
@override String get complete => 'ЗАВЕРШИТИ';
}
// Path: button
class _TranslationsButtonUk extends TranslationsButtonEn {
_TranslationsButtonUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
/// Текст для кнопки входу в систему
@override String get login => 'Логін';
@override String get logout => 'Вийти з системи';
@override String get edit_profile => 'Редагувати профіль';
/// Текст для кнопки переходу
@override String get follow => 'Підпишіться';
/// Текст для кнопки відписки
@override String get unfollow => 'Скасувати відповідь';
@override String get mute => 'Вимкнути звук.';
@override String get unmute => 'Увімкнути звук.';
@override String get share => 'Поділіться';
@override String get save => 'Зберегти';
@override String get connect => 'Підключіться';
@override String get settings => 'Налаштування';
}
// Path: embed
class _TranslationsEmbedUk extends TranslationsEmbedEn {
_TranslationsEmbedUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => 'Стаття за посиланням ${name}';
@override String note_by({required Object name}) => 'Примітка ${name}';
@override String live_stream_by({required Object name}) => 'Пряма трансляція на ${name}';
}
// Path: stream_list
class _TranslationsStreamListUk extends TranslationsStreamListEn {
_TranslationsStreamListUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get following => 'Після того, як';
@override String get live => 'Наживо';
@override String get planned => 'Заплановано';
@override String get ended => 'Закінчилося';
}
// Path: zap
class _TranslationsZapUk extends TranslationsZapEn {
_TranslationsZapUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Нестандартна сума';
@override String get confirm => 'Підтвердити';
@override String get comment => 'Коментар';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap!';
@override String get button_open_wallet => 'Відкрити в Гаманці';
@override String get button_connect_wallet => 'Підключити гаманець';
@override String get copy => 'Скопійовано в буфер обміну';
@override late final _TranslationsZapErrorUk error = _TranslationsZapErrorUk._(_root);
}
// Path: profile
class _TranslationsProfileUk extends TranslationsProfileEn {
_TranslationsProfileUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Минулі потоки';
}
// Path: settings
class _TranslationsSettingsUk extends TranslationsSettingsEn {
_TranslationsSettingsUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Редагувати профіль';
@override String get button_wallet => 'Налаштування гаманця';
@override late final _TranslationsSettingsProfileUk profile = _TranslationsSettingsProfileUk._(_root);
@override late final _TranslationsSettingsWalletUk wallet = _TranslationsSettingsWalletUk._(_root);
}
// Path: login
class _TranslationsLoginUk extends TranslationsLoginEn {
_TranslationsLoginUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get username => 'Ім\'я користувача';
@override String get amber => 'Увійдіть за допомогою Amber';
@override String get key => 'Увійдіть за допомогою ключа';
@override String get create => 'Створити обліковий запис';
@override late final _TranslationsLoginErrorUk error = _TranslationsLoginErrorUk._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusUk extends TranslationsStreamStatusEn {
_TranslationsStreamStatusUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get live => 'НАЖИВО';
@override String get ended => 'ЗАКІНЧЕНО';
@override String get planned => 'ЗАПЛАНОВАНО';
}
// Path: stream.chat
class _TranslationsStreamChatUk extends TranslationsStreamChatEn {
_TranslationsStreamChatUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get disabled => 'ЧАТ ВІДКЛЮЧЕНО';
@override String disabled_timeout({required Object time}) => 'Тайм-аут закінчився: ${time}';
/// Повідомлення в чаті про події тайм-ауту
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' таймінг '),
user,
const TextSpan(text: ' для '),
time,
]);
/// Нижній колонтитул кінця потоку внизу чату
@override String get ended => 'СТРІМ ЗАКІНЧИВСЯ';
/// Повідомлення в чаті, що показує затримки потоку
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
@override late final _TranslationsStreamChatWriteUk write = _TranslationsStreamChatWriteUk._(_root);
@override late final _TranslationsStreamChatBadgeUk badge = _TranslationsStreamChatBadgeUk._(_root);
@override late final _TranslationsStreamChatRaidUk raid = _TranslationsStreamChatRaidUk._(_root);
}
// Path: zap.error
class _TranslationsZapErrorUk extends TranslationsZapErrorEn {
_TranslationsZapErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => 'Неправильна сума замовлення';
@override String get no_wallet => 'Не встановлено гаманець-блискавку';
@override String get no_lud16 => 'Адреса блискавки не знайдена';
}
// Path: settings.profile
class _TranslationsSettingsProfileUk extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get display_name => 'Ім\'я користувача';
@override String get about => 'Про';
@override String get nip05 => 'Nostr Адреса';
@override String get lud16 => 'Блискавична адреса';
@override late final _TranslationsSettingsProfileErrorUk error = _TranslationsSettingsProfileErrorUk._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletUk extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Підключити гаманець (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Відключити гаманець';
@override String get connect_1tap => 'Підключення в 1 кран';
@override String get paste => 'Вставити URL-адресу';
@override late final _TranslationsSettingsWalletErrorUk error = _TranslationsSettingsWalletErrorUk._(_root);
}
// Path: login.error
class _TranslationsLoginErrorUk extends TranslationsLoginErrorEn {
_TranslationsLoginErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get invalid_key => 'Неправильний ключ';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteUk extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
/// Мітка у вікні введення повідомлення чату
@override String get label => 'Написати повідомлення';
/// Повідомлення в чаті, що відображається, коли користувач увійшов до системи лише з ключем pubkey
@override String get no_signer => 'Неможливо писати повідомлення з логіном npub';
/// Повідомлення для введення в чаті, що відображається, коли користувач вийшов з системи
@override String get login => 'Будь ласка, авторизуйтесь, щоб надсилати повідомлення';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeUk extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
/// Над списком користувачів, яким присвоєно бейдж
@override String get awarded_to => 'Нагороджується:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidUk extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
/// Повідомлення про рейд чату в інший потік
@override String to({required Object name}) => 'RAIDING ${name}';
/// Повідомлення про наліт на чат з іншого потоку
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Таймер зворотного відліку для авторейду
@override String countdown({required Object time}) => 'Рейд у ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorUk extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Неможливо редагувати профіль, коли ви вийшли з системи';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorUk extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Не вдається підключити гаманець, коли ви вийшли з системи';
@override String get nwc_auth_event_not_found => 'Не знайдено жодної події авторизації гаманця';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsUk {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Завантажити аватар';
case 'most_zapped_streamers': return 'Більшість стримерів, які були під напругою';
case 'no_user_found': return 'Користувача не знайдено';
case 'anon': return 'Анонім.';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uk'))(n,
one: '1 глядач',
other: '${NumberFormat.decimalPattern('uk').format(n)} глядачів',
);
case 'stream.status.live': return 'НАЖИВО';
case 'stream.status.ended': return 'ЗАКІНЧЕНО';
case 'stream.status.planned': return 'ЗАПЛАНОВАНО';
case 'stream.started': return ({required Object timestamp}) => 'Запустив ${timestamp}';
case 'stream.chat.disabled': return 'ЧАТ ВІДКЛЮЧЕНО';
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Тайм-аут закінчився: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' таймінг '),
user,
const TextSpan(text: ' для '),
time,
]);
case 'stream.chat.ended': return 'СТРІМ ЗАКІНЧИВСЯ';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
]);
case 'stream.chat.write.label': return 'Написати повідомлення';
case 'stream.chat.write.no_signer': return 'Неможливо писати повідомлення з логіном npub';
case 'stream.chat.write.login': return 'Будь ласка, авторизуйтесь, щоб надсилати повідомлення';
case 'stream.chat.badge.awarded_to': return 'Нагороджується:';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Рейд у ${time}';
case 'goal.title': return ({required Object amount}) => 'Мета: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Залишилося: ${amount}';
case 'goal.complete': return 'ЗАВЕРШИТИ';
case 'button.login': return 'Логін';
case 'button.logout': return 'Вийти з системи';
case 'button.edit_profile': return 'Редагувати профіль';
case 'button.follow': return 'Підпишіться';
case 'button.unfollow': return 'Скасувати відповідь';
case 'button.mute': return 'Вимкнути звук.';
case 'button.unmute': return 'Увімкнути звук.';
case 'button.share': return 'Поділіться';
case 'button.save': return 'Зберегти';
case 'button.connect': return 'Підключіться';
case 'button.settings': return 'Налаштування';
case 'embed.article_by': return ({required Object name}) => 'Стаття за посиланням ${name}';
case 'embed.note_by': return ({required Object name}) => 'Примітка ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Пряма трансляція на ${name}';
case 'stream_list.following': return 'Після того, як';
case 'stream_list.live': return 'Наживо';
case 'stream_list.planned': return 'Заплановано';
case 'stream_list.ended': return 'Закінчилося';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Нестандартна сума';
case 'zap.confirm': return 'Підтвердити';
case 'zap.comment': return 'Коментар';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap!';
case 'zap.button_open_wallet': return 'Відкрити в Гаманці';
case 'zap.button_connect_wallet': return 'Підключити гаманець';
case 'zap.copy': return 'Скопійовано в буфер обміну';
case 'zap.error.invalid_custom_amount': return 'Неправильна сума замовлення';
case 'zap.error.no_wallet': return 'Не встановлено гаманець-блискавку';
case 'zap.error.no_lud16': return 'Адреса блискавки не знайдена';
case 'profile.past_streams': return 'Минулі потоки';
case 'settings.button_profile': return 'Редагувати профіль';
case 'settings.button_wallet': return 'Налаштування гаманця';
case 'settings.profile.display_name': return 'Ім\'я користувача';
case 'settings.profile.about': return 'Про';
case 'settings.profile.nip05': return 'Nostr Адреса';
case 'settings.profile.lud16': return 'Блискавична адреса';
case 'settings.profile.error.logged_out': return 'Неможливо редагувати профіль, коли ви вийшли з системи';
case 'settings.wallet.connect_wallet': return 'Підключити гаманець (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Відключити гаманець';
case 'settings.wallet.connect_1tap': return 'Підключення в 1 кран';
case 'settings.wallet.paste': return 'Вставити URL-адресу';
case 'settings.wallet.error.logged_out': return 'Не вдається підключити гаманець, коли ви вийшли з системи';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Не знайдено жодної події авторизації гаманця';
case 'login.username': return 'Ім\'я користувача';
case 'login.amber': return 'Увійдіть за допомогою Amber';
case 'login.key': return 'Увійдіть за допомогою ключа';
case 'login.create': return 'Створити обліковий запис';
case 'login.error.invalid_key': return 'Неправильний ключ';
default: return null;
}
}
}

469
lib/i18n/strings_zh.g.dart Normal file
View File

@ -0,0 +1,469 @@
///
/// Generated file. Do not edit.
///
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsZh extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsZh({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
: assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'),
$meta = meta ?? TranslationMetadata(
locale: AppLocale.zh,
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
/// Metadata for the translations of <zh>.
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsZh _root = this; // ignore: unused_field
@override
TranslationsZh $copyWith({TranslationMetadata<AppLocale, Translations>? meta}) => TranslationsZh(meta: meta ?? this.$meta);
// Translations
/// 提示使用者點擊頭像占位符開始上傳的文字
@override String get upload_avatar => '上傳頭像';
/// ヘッドランドから列されている頂幡からずった
@override String get most_zapped_streamers => '最多被擊中的溪流';
/// 搜尋時未找到使用者
@override String get no_user_found => '未找到使用者';
/// 匿名使用者
@override String get anon => '匿名';
/// 串流的觀看者人數
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n,
one: '1 個檢視器',
other: '${NumberFormat.decimalPattern('zh').format(n)} 觀眾',
);
@override late final _TranslationsStreamZh stream = _TranslationsStreamZh._(_root);
@override late final _TranslationsGoalZh goal = _TranslationsGoalZh._(_root);
@override late final _TranslationsButtonZh button = _TranslationsButtonZh._(_root);
@override late final _TranslationsEmbedZh embed = _TranslationsEmbedZh._(_root);
/// 串流清單上的標題依串流類型為現場/結束/計劃中等。
@override late final _TranslationsStreamListZh stream_list = _TranslationsStreamListZh._(_root);
@override late final _TranslationsZapZh zap = _TranslationsZapZh._(_root);
@override late final _TranslationsProfileZh profile = _TranslationsProfileZh._(_root);
@override late final _TranslationsSettingsZh settings = _TranslationsSettingsZh._(_root);
@override late final _TranslationsLoginZh login = _TranslationsLoginZh._(_root);
}
// Path: stream
class _TranslationsStreamZh extends TranslationsStreamEn {
_TranslationsStreamZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusZh status = _TranslationsStreamStatusZh._(_root);
@override String started({required Object timestamp}) => '開始 ${timestamp}';
@override late final _TranslationsStreamChatZh chat = _TranslationsStreamChatZh._(_root);
}
// Path: goal
class _TranslationsGoalZh extends TranslationsGoalEn {
_TranslationsGoalZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String title({required Object amount}) => '目標:${amount}';
@override String remaining({required Object amount}) => '剩餘: ${amount}';
@override String get complete => '完成';
}
// Path: button
class _TranslationsButtonZh extends TranslationsButtonEn {
_TranslationsButtonZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
/// 登入按鈕的按鈕文字
@override String get login => '登錄';
@override String get logout => '登出';
@override String get edit_profile => '編輯個人檔案';
/// 跟蹤按鈕的按鈕文字
@override String get follow => '關注';
/// 取消關注按鈕的按鈕文字
@override String get unfollow => '取消關注';
@override String get mute => '靜音';
@override String get unmute => '解除静音';
@override String get share => '分享';
@override String get save => '保存';
@override String get connect => '連接';
@override String get settings => '設定';
}
// Path: embed
class _TranslationsEmbedZh extends TranslationsEmbedEn {
_TranslationsEmbedZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String article_by({required Object name}) => '文章來源: ${name}';
@override String note_by({required Object name}) => '${name} 的筆記';
@override String live_stream_by({required Object name}) => 'Live stream by ${name}';
}
// Path: stream_list
class _TranslationsStreamListZh extends TranslationsStreamListEn {
_TranslationsStreamListZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get following => '已關注';
@override String get live => '直播';
@override String get planned => '已計畫';
@override String get ended => '已結束';
}
// Path: zap
class _TranslationsZapZh extends TranslationsZapEn {
_TranslationsZapZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String title({required Object name}) => '打閃${name}';
@override String get custom_amount => '自訂金額';
@override String get confirm => '確認';
@override String get comment => '評論';
@override String button_zap_ready({required Object amount}) => '打閃 ${amount}';
@override String get button_zap => '打閃';
@override String get button_open_wallet => '在錢包中開啟';
@override String get button_connect_wallet => '連接錢包';
@override String get copy => '複製到剪貼簿';
@override late final _TranslationsZapErrorZh error = _TranslationsZapErrorZh._(_root);
}
// Path: profile
class _TranslationsProfileZh extends TranslationsProfileEn {
_TranslationsProfileZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get past_streams => '過去的直播';
}
// Path: settings
class _TranslationsSettingsZh extends TranslationsSettingsEn {
_TranslationsSettingsZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get button_profile => '編輯個人資料';
@override String get button_wallet => '錢包設定';
@override late final _TranslationsSettingsProfileZh profile = _TranslationsSettingsProfileZh._(_root);
@override late final _TranslationsSettingsWalletZh wallet = _TranslationsSettingsWalletZh._(_root);
}
// Path: login
class _TranslationsLoginZh extends TranslationsLoginEn {
_TranslationsLoginZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get username => '用戶名';
@override String get amber => '使用 Amber 登入';
@override String get key => '使用鑰匙登入';
@override String get create => '創建帳戶';
@override late final _TranslationsLoginErrorZh error = _TranslationsLoginErrorZh._(_root);
}
// Path: stream.status
class _TranslationsStreamStatusZh extends TranslationsStreamStatusEn {
_TranslationsStreamStatusZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get live => '直播';
@override String get ended => '結束';
@override String get planned => '計劃';
}
// Path: stream.chat
class _TranslationsStreamChatZh extends TranslationsStreamChatEn {
_TranslationsStreamChatZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get disabled => '關閉聊天';
@override String disabled_timeout({required Object time}) => '超時過期: ${time}';
/// 顯示逾時事件的聊天訊息
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' 超時 '),
user,
const TextSpan(text: ' for '),
time,
]);
/// 聊天底部的流結束頁尾
@override String get ended => '串流結束';
/// 聊天訊息顯示串流斷點
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' 打閃了 '),
amount,
const TextSpan(text: ''),
]);
@override late final _TranslationsStreamChatWriteZh write = _TranslationsStreamChatWriteZh._(_root);
@override late final _TranslationsStreamChatBadgeZh badge = _TranslationsStreamChatBadgeZh._(_root);
@override late final _TranslationsStreamChatRaidZh raid = _TranslationsStreamChatRaidZh._(_root);
}
// Path: zap.error
class _TranslationsZapErrorZh extends TranslationsZapErrorEn {
_TranslationsZapErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get invalid_custom_amount => '無效自訂金額';
@override String get no_wallet => '未安裝閃電錢夾';
@override String get no_lud16 => '未找到閃電地址';
}
// Path: settings.profile
class _TranslationsSettingsProfileZh extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get display_name => '顯示名稱';
@override String get about => '關於';
@override String get nip05 => '地址';
@override String get lud16 => '閃電地址';
@override late final _TranslationsSettingsProfileErrorZh error = _TranslationsSettingsProfileErrorZh._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletZh extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => '斷開錢包';
@override String get connect_1tap => '1 抽頭連接';
@override String get paste => '貼上 URL';
@override late final _TranslationsSettingsWalletErrorZh error = _TranslationsSettingsWalletErrorZh._(_root);
}
// Path: login.error
class _TranslationsLoginErrorZh extends TranslationsLoginErrorEn {
_TranslationsLoginErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get invalid_key => '無效按鍵';
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteZh extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
/// 聊天訊息輸入方塊上的標籤
@override String get label => '寫訊息';
/// 當使用者僅使用 pubkey 登入時,會顯示聊天輸入訊息
@override String get no_signer => '無法使用 npub 登入撰寫訊息';
/// 使用者登出時顯示聊天輸入訊息
@override String get login => '請登入以傳送訊息';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeZh extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
/// 被授予徽章的使用者清單上的標題
@override String get awarded_to => '頒發給';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidZh extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
/// 聊天突擊消息到另一個串流
@override String to({required Object name}) => 'RAIDING ${name}';
/// 來自其他串流的聊天突襲訊息
@override String from({required Object name}) => 'RAID FROM ${name}';
/// 自動騎乘倒數計時器
@override String countdown({required Object time}) => '突襲 ${time}';
}
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorZh extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get logged_out => '登出時無法編輯個人資料';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorZh extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get logged_out => '登出時無法連接錢包';
@override String get nwc_auth_event_not_found => '未找到錢包認證事件';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsZh {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return '上傳頭像';
case 'most_zapped_streamers': return '最多被擊中的溪流';
case 'no_user_found': return '未找到使用者';
case 'anon': return '匿名';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n,
one: '1 個檢視器',
other: '${NumberFormat.decimalPattern('zh').format(n)} 觀眾',
);
case 'stream.status.live': return '直播';
case 'stream.status.ended': return '結束';
case 'stream.status.planned': return '計劃';
case 'stream.started': return ({required Object timestamp}) => '開始 ${timestamp}';
case 'stream.chat.disabled': return '關閉聊天';
case 'stream.chat.disabled_timeout': return ({required Object time}) => '超時過期: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' 超時 '),
user,
const TextSpan(text: ' for '),
time,
]);
case 'stream.chat.ended': return '串流結束';
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' 打閃了 '),
amount,
const TextSpan(text: ''),
]);
case 'stream.chat.write.label': return '寫訊息';
case 'stream.chat.write.no_signer': return '無法使用 npub 登入撰寫訊息';
case 'stream.chat.write.login': return '請登入以傳送訊息';
case 'stream.chat.badge.awarded_to': return '頒發給';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => '突襲 ${time}';
case 'goal.title': return ({required Object amount}) => '目標:${amount}';
case 'goal.remaining': return ({required Object amount}) => '剩餘: ${amount}';
case 'goal.complete': return '完成';
case 'button.login': return '登錄';
case 'button.logout': return '登出';
case 'button.edit_profile': return '編輯個人檔案';
case 'button.follow': return '關注';
case 'button.unfollow': return '取消關注';
case 'button.mute': return '靜音';
case 'button.unmute': return '解除静音';
case 'button.share': return '分享';
case 'button.save': return '保存';
case 'button.connect': return '連接';
case 'button.settings': return '設定';
case 'embed.article_by': return ({required Object name}) => '文章來源: ${name}';
case 'embed.note_by': return ({required Object name}) => '${name} 的筆記';
case 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return '已關注';
case 'stream_list.live': return '直播';
case 'stream_list.planned': return '已計畫';
case 'stream_list.ended': return '已結束';
case 'zap.title': return ({required Object name}) => '打閃${name}';
case 'zap.custom_amount': return '自訂金額';
case 'zap.confirm': return '確認';
case 'zap.comment': return '評論';
case 'zap.button_zap_ready': return ({required Object amount}) => '打閃 ${amount}';
case 'zap.button_zap': return '打閃';
case 'zap.button_open_wallet': return '在錢包中開啟';
case 'zap.button_connect_wallet': return '連接錢包';
case 'zap.copy': return '複製到剪貼簿';
case 'zap.error.invalid_custom_amount': return '無效自訂金額';
case 'zap.error.no_wallet': return '未安裝閃電錢夾';
case 'zap.error.no_lud16': return '未找到閃電地址';
case 'profile.past_streams': return '過去的直播';
case 'settings.button_profile': return '編輯個人資料';
case 'settings.button_wallet': return '錢包設定';
case 'settings.profile.display_name': return '顯示名稱';
case 'settings.profile.about': return '關於';
case 'settings.profile.nip05': return '地址';
case 'settings.profile.lud16': return '閃電地址';
case 'settings.profile.error.logged_out': return '登出時無法編輯個人資料';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return '斷開錢包';
case 'settings.wallet.connect_1tap': return '1 抽頭連接';
case 'settings.wallet.paste': return '貼上 URL';
case 'settings.wallet.error.logged_out': return '登出時無法連接錢包';
case 'settings.wallet.error.nwc_auth_event_not_found': return '未找到錢包認證事件';
case 'login.username': return '用戶名';
case 'login.amber': return '使用 Amber 登入';
case 'login.key': return '使用鑰匙登入';
case 'login.create': return '創建帳戶';
case 'login.error.invalid_key': return '無效按鍵';
default: return null;
}
}
}

View File

@ -0,0 +1,134 @@
upload_avatar: تحميل الصورة الرمزية
"@upload_avatar":
description: نص يطالب المستخدم بالضغط على العنصر النائب للصورة الرمزية لبدء التحميل
most_zapped_streamers: معظم اللافتات التي يتم بثها
"@most_zapped_streamers":
description: التوجه فوق اللافتات العلوية المدرجة من قبل zaps
no_user_found: لم يتم العثور على مستخدم
"@no_user_found":
description: لم يتم العثور على مستخدم عند البحث
anon: هوية مخفية
viewers:
one: 1 مشاهد
other: "${n:decimalPattern} المشاهدين"
"@viewers":
description: عدد مشاهدي البث
"@anon":
description: مستخدم مجهول
stream:
status:
live: بث مباشر
ended: انتهى
planned: مخطط
started: بدأ $timestamp
chat:
disabled: تم تعطيل الدردشة
disabled_timeout: "تنتهي المهلة: $time"
timeout(rich): $mod انتهى الوقت $user لـ $time
"@timeout":
description: رسالة دردشة تظهر أحداث المهلة
ended: انتهى البث
"@ended":
description: تيار انتهى التذييل في أسفل الدردشة
zap(rich): $user انطلق $amount ساتس
"@zap":
description: رسالة الدردشة التي تُظهر البث المباشر
write:
label: اكتب رسالة
"@label":
description: التسمية على مربع إدخال رسالة الدردشة
no_signer: لا يمكن كتابة الرسائل باستخدام تسجيل الدخول إلى npub
"@no_signer":
description: تظهر رسالة إدخال الدردشة عندما يقوم المستخدم بتسجيل الدخول باستخدام
مفتاح الحانة فقط
login: الرجاء تسجيل الدخول لإرسال الرسائل
"@login":
description: تظهر رسالة إدخال الدردشة عند تسجيل خروج المستخدم من المحادثة
badge:
awarded_to: مُنحت الجائزة لـ
"@awarded_to":
description: العنوان فوق قائمة المستخدمين الذين حصلوا على شارة
raid:
to: التصفح $name
"@to":
description: رسالة غارة الدردشة إلى دفق آخر
from: RAID من $name
"@from":
description: رسالة غارة الدردشة من دفق آخر
countdown: الإغارة في $time
"@countdown":
description: مؤقت العد التنازلي للقيادة التلقائية
goal:
title: "الهدف: $amount"
remaining: "المتبقي: $amount"
complete: مكتمل
button:
login: تسجيل الدخول
logout: تسجيل الخروج
edit_profile: تعديل الملف الشخصي
"@login":
description: نص الزر الخاص بزر تسجيل الدخول
follow: متابعة
"@follow":
description: نص الزر الخاص بزر المتابعة
unfollow: الغاء المتابعة
"@unfollow":
description: نص الزر لزر إلغاء المتابعة
mute: كتم
unmute: رفع الكتم
share: مشاركة
save: حفظ
connect: الاتصال
settings: الإعدادات
embed:
article_by: مقال بقلم $name
note_by: ملاحظة من $name
live_stream_by: بث مباشر من $name
stream_list:
following: المتابَعون
live: بث مباشر
planned: مخطط
ended: انتهى
"@stream_list":
description: العناوين في قوائم البث حسب نوع البث المباشر/المُنتهي/المخطط له وما إلى ذلك.
zap:
title: زاب $name
custom_amount: المبلغ المخصص
confirm: تأكيد
comment: تعليق
button_zap_ready: أومض $amount ساتوشي
button_zap: زاب
button_open_wallet: فتح في المحفظة
button_connect_wallet: توصيل المحفظة
copy: نسخ إلى الحافظة
error:
invalid_custom_amount: مبلغ مخصص غير صالح
no_wallet: لا توجد محفظة برق مثبتة
no_lud16: لم يتم العثور على عنوان البرق
profile:
past_streams: التدفقات السابقة
settings:
button_profile: تعديل الملف الشخصي
button_wallet: إعدادات المحفظة
profile:
display_name: اسم العرض
about: نبذة عن
nip05: عنوان نوستر
lud16: عنوان البرق
error:
logged_out: لا يمكن تحرير ملف التعريف عند تسجيل الخروج
wallet:
connect_wallet: توصيل المحفظة (NWC nostr+walletconnect://)
disconnect_wallet: محفظة قطع الاتصال
connect_1tap: 1-التوصيل بنقرة 1
paste: لصق عنوان URL
error:
logged_out: لا يمكن الاتصال بالمحفظة عند تسجيل الخروج
nwc_auth_event_not_found: لم يتم العثور على حدث مصادقة المحفظة
login:
username: اسم المستخدم
amber: تسجيل الدخول مع آمبر
key: تسجيل الدخول بالمفتاح
create: إنشاء حساب
error:
invalid_key: مفتاح غير صالح

View File

@ -0,0 +1,135 @@
upload_avatar: Nahrát avatar
"@upload_avatar":
description: Text vyzývající uživatele, aby stiskl zástupný symbol avatara pro
zahájení nahrávání
most_zapped_streamers: Nejvíce zapnutých streamerů
"@most_zapped_streamers":
description: Směřování přes uvedené horní streamery podle zaps
no_user_found: Nebyl nalezen žádný uživatel
"@no_user_found":
description: Při vyhledávání nebyl nalezen žádný uživatel
anon: Anon
viewers:
one: 1 divák
other: ${n:decimalPattern} diváků
"@viewers":
description: Počet diváků streamu
"@anon":
description: Anonymní uživatel
stream:
status:
live: LIVE
ended: KONEC
planned: PLÁNOVANÉ
started: Založeno $timestamp
chat:
disabled: CHAT ZRUŠEN
disabled_timeout: "Časový limit vyprší: $time"
timeout(rich): $mod vypršel čas $user pro $time
"@timeout":
description: Zpráva chatu zobrazující události časového limitu
ended: STREAM UKONČEN
"@ended":
description: Zápatí v dolní části chatu ukončilo stream
zap(rich): $user Zapped $amount sats
"@zap":
description: Zpráva chatu zobrazující proud zaps
write:
label: Napište zprávu
"@label":
description: Popisek na vstupním poli zprávy chatu
no_signer: Nelze psát zprávy s přihlášením npub
"@no_signer":
description: Vstupní zpráva chatu se zobrazí, když je uživatel přihlášen pouze
pomocí pubkey
login: Pro odesílání zpráv se prosím přihlaste
"@login":
description: Vstupní zpráva chatu zobrazená při odhlášení uživatele
badge:
awarded_to: "Uděleno:"
"@awarded_to":
description: Záhlaví nad seznamem uživatelů, kterým byl udělen odznak
raid:
to: RAIDING $name
"@to":
description: Zpráva o nájezdu chatu do jiného proudu
from: RAID Z $name
"@from":
description: Zpráva o nájezdu chatu z jiného proudu
countdown: Nájezdy na $time
"@countdown":
description: Časovač odpočítávání pro automatický nájezd
goal:
title: "Cíl: $amount"
remaining: "Zbývá: $amount"
complete: KOMPLETNÍ
button:
login: Přihlášení
logout: Odhlášení
edit_profile: Upravit profil
"@login":
description: Text tlačítka pro přihlašovací tlačítko
follow: Sledujte
"@follow":
description: Text tlačítka pro tlačítko sledovat
unfollow: Zrušit sledování
"@unfollow":
description: Text tlačítka pro zrušení sledování
mute: Ztlumit
unmute: Zrušit ztlumení
share: Sdílet
save: Uložit
connect: Připojení
settings: Nastavení
embed:
article_by: Článek na $name
note_by: Poznámka $name
live_stream_by: Přímý přenos na adrese $name
stream_list:
following: Po
live: Živě
planned: Plánované
ended: Ukončeno
"@stream_list":
description: Nadpisy v seznamech proudů podle typu proudu živě/konec/plánovaně atd.
zap:
title: Zap $name
custom_amount: Vlastní částka
confirm: Potvrďte
comment: "Komentář:"
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Otevřít v peněžence
button_connect_wallet: Připojení peněženky
copy: Zkopírováno do schránky
error:
invalid_custom_amount: Neplatná vlastní částka
no_wallet: Není nainstalována blesková peněženka
no_lud16: Nebyla nalezena žádná adresa blesku
profile:
past_streams: Minulé proudy
settings:
button_profile: Upravit profil
button_wallet: Nastavení peněženky
profile:
display_name: Zobrazení názvu
about: O stránkách
nip05: Adresa Nostr
lud16: Adresa blesku
error:
logged_out: Nelze upravit profil, když je odhlášený
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Odpojení peněženky
connect_1tap: Připojení 1 kohoutku
paste: Vložit adresu URL
error:
logged_out: Nelze se připojit k peněžence, když jste odhlášeni
nwc_auth_event_not_found: Nebyla nalezena žádná událost autentizace peněženky
login:
username: Uživatelské jméno
amber: Přihlášení pomocí Amber
key: Přihlášení pomocí klíče
create: Vytvořit účet
error:
invalid_key: Neplatný klíč

View File

@ -0,0 +1,135 @@
upload_avatar: Upload avatar
"@upload_avatar":
description: Tekst, der beder brugeren om at trykke på avatar-pladsholderen for
at begynde at uploade
most_zapped_streamers: De fleste zappede streamere
"@most_zapped_streamers":
description: På vej over listede topstreamere af zaps
no_user_found: Ingen bruger fundet
"@no_user_found":
description: Ingen bruger fundet ved søgning
anon: Anon
viewers:
one: 1 seer
other: ${n:decimalPattern} seere
"@viewers":
description: Antal seere af streamingen
"@anon":
description: En anonym bruger
stream:
status:
live: LIVE
ended: AFSLUTTET
planned: PLANLAGT
started: Startet $timestamp
chat:
disabled: CHAT DEAKTIVERET
disabled_timeout: "Timeout udløber: $time"
timeout(rich): $mod udløbet $user for $time
"@timeout":
description: Chatbesked, der viser timeout-hændelser
ended: STREAM AFSLUTTET
"@ended":
description: Stream afsluttede footer i bunden af chatten
zap(rich): $user zappet $amount sats
"@zap":
description: Chatbesked, der viser stream-zaps
write:
label: Skriv en besked
"@label":
description: Label på chatbeskedens inputfelt
no_signer: Kan ikke skrive beskeder med npub-login
"@no_signer":
description: Chat-inputmeddelelse vises, når brugeren kun er logget ind med pubkey
login: Log ind for at sende beskeder
"@login":
description: Chat-inputmeddelelse vises, når brugeren er logget ud
badge:
awarded_to: "Tildelt til:"
"@awarded_to":
description: Overskrift over liste over brugere, der har fået tildelt et badge
raid:
to: RAIDING $name
"@to":
description: Chat raid-besked til en anden stream
from: RAID FRA $name
"@from":
description: Chat raid-besked fra en anden stream
countdown: Raiding i $time
"@countdown":
description: Nedtællingstimer til auto-raiding
goal:
title: "Mål: $amount"
remaining: "Resterende: $amount"
complete: KOMPLET
button:
login: Login
logout: Log ud
edit_profile: Rediger profil
"@login":
description: Knaptekst til login-knappen
follow: Følg med
"@follow":
description: Knaptekst til følg-knappen
unfollow: Ikke følge
"@unfollow":
description: Knaptekst til unfollow-knappen
mute: Dæmpet
unmute: Slå lyden fra
share: Del
save: Gemme
connect: Opret forbindelse
settings: Indstillinger
embed:
article_by: Artikel af $name
note_by: Note fra $name
live_stream_by: Livestream på $name
stream_list:
following: Efterfølgende
live: Live
planned: Planlagt
ended: Afsluttet
"@stream_list":
description: Overskrifter på streaminglister efter streamingtype
live/afsluttet/planlagt osv.
zap:
title: Zap $name
custom_amount: Brugerdefineret beløb
confirm: Bekræft
comment: Kommentar
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Åbn i tegnebogen
button_connect_wallet: Forbind tegnebog
copy: Kopieret til udklipsholder
error:
invalid_custom_amount: Ugyldigt brugerdefineret beløb
no_wallet: Ingen lightning wallet installeret
no_lud16: Ingen lyn-adresse fundet
profile:
past_streams: Tidligere strømme
settings:
button_profile: Rediger profil
button_wallet: Indstillinger for tegnebog
profile:
display_name: Vis navn
about: Omkring
nip05: Nostr-adresse
lud16: Adresse for lynnedslag
error:
logged_out: Kan ikke redigere profil, når jeg er logget ud
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Afbryd forbindelsen til tegnebogen
connect_1tap: 1-Tap-forbindelse
paste: Indsæt URL
error:
logged_out: Kan ikke oprette forbindelse til wallet, når jeg er logget ud
nwc_auth_event_not_found: Ingen wallet-auth-begivenhed fundet
login:
username: Brugernavn
amber: Log ind med Amber
key: Login med nøgle
create: Opret konto
error:
invalid_key: Ugyldig nøgle

View File

@ -0,0 +1,136 @@
upload_avatar: Avatar hochladen
"@upload_avatar":
description: Text, der den Benutzer auffordert, auf den Avatar-Platzhalter zu
klicken, um den Upload zu starten
most_zapped_streamers: Meistgezappte Streamer
"@most_zapped_streamers":
description: Überschrift über gelistete Top-Streamer von zaps
no_user_found: Kein Benutzer gefunden
"@no_user_found":
description: Kein Benutzer bei der Suche gefunden
anon: Anon
viewers:
one: 1 Zuschauer
other: ${n:decimalPattern} Zuschauer
"@viewers":
description: Anzahl der Betrachter des Streams
"@anon":
description: Ein anonymer Benutzer
stream:
status:
live: LIVE
ended: ENDED
planned: GEPLANT
started: Gestartet $timestamp
chat:
disabled: CHAT DEAKTIVIERT
disabled_timeout: "Die Zeitüberschreitung läuft ab: $time"
timeout(rich): $mod Zeitüberschreitung $user für $time
"@timeout":
description: Chat-Nachricht mit Zeitüberschreitungsereignissen
ended: STREAM BEENDET
"@ended":
description: Stream beendet Fußzeile am Ende des Chats
zap(rich): $user hat $amount sats gezappt
"@zap":
description: Chatnachricht mit Stream Zaps
write:
label: Nachricht schreiben
"@label":
description: Beschriftung des Eingabefeldes für Chatnachrichten
no_signer: Mit npub-Login können keine Nachrichten geschrieben werden
"@no_signer":
description: Chat-Eingabemeldung wird angezeigt, wenn der Benutzer nur mit
Pubkey eingeloggt ist
login: Bitte anmelden, um Nachrichten zu senden
"@login":
description: Chat-Eingabemeldung wird angezeigt, wenn der Benutzer abgemeldet ist
badge:
awarded_to: "Verliehen an:"
"@awarded_to":
description: Überschrift über der Liste der Benutzer, die ein Abzeichen erhalten
haben
raid:
to: RAIDING $name
"@to":
description: Chat-Überfallnachricht an einen anderen Stream
from: RAID VON $name
"@from":
description: Chat-Raid-Nachricht aus einem anderen Stream
countdown: Raubzüge auf $time
"@countdown":
description: Countdown-Timer für automatisches Reiten
goal:
title: "Ziel: $amount"
remaining: "Verbleibend: $amount"
complete: COMPLETE
button:
login: Anmelden
logout: Abmelden
edit_profile: Profil anpassen
"@login":
description: Schaltflächentext für die Anmeldeschaltfläche
follow: Folgen
"@follow":
description: Schaltflächentext für die Schaltfläche "Folgen
unfollow: Entfolgen
"@unfollow":
description: Schaltflächentext für die "Unfollow"-Schaltfläche
mute: Stummschalten
unmute: Entstummen
share: Teilen
save: Speichern
connect: Verbinden Sie
settings: Einstellungen
embed:
article_by: Artikel von $name
note_by: Note von $name
live_stream_by: Live-Stream von $name
stream_list:
following: Folge ich
live: Live
planned: Geplant
ended: Beendet
"@stream_list":
description: Überschriften auf Stream-Listen nach Stream-Typ live/beendet/geplant usw.
zap:
title: $name zappen
custom_amount: Benutzerdefinierter Betrag
confirm: Bestätigen
comment: Kommentar
button_zap_ready: $amount sats zappen
button_zap: Zap
button_open_wallet: In Brieftasche öffnen
button_connect_wallet: Brieftasche verbinden
copy: In die Zwischenablage kopiert
error:
invalid_custom_amount: Ungültiger benutzerdefinierter Betrag
no_wallet: Keine Lightning-Brieftasche installiert
no_lud16: Keine Blitzadresse gefunden
profile:
past_streams: Vergangene Streams
settings:
button_profile: Profil bearbeiten
button_wallet: Wallet-Einstellungen
profile:
display_name: Name anzeigen
about: Über
nip05: Nostr-Adresse
lud16: Blitz-Adresse
error:
logged_out: Profil kann nicht bearbeitet werden, wenn es abgemeldet ist
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Brieftasche abtrennen
connect_1tap: 1-Tap-Verbindung
paste: URL einfügen
error:
logged_out: Kann keine Verbindung zur Brieftasche herstellen, wenn ich abgemeldet bin
nwc_auth_event_not_found: Kein Wallet-Authentifizierungsereignis gefunden
login:
username: Benutzername
amber: Anmeldung mit Amber
key: Anmeldung mit Schlüssel
create: Konto erstellen
error:
invalid_key: Ungültiger Schlüssel

View File

@ -0,0 +1,138 @@
upload_avatar: Ανέβασμα Avatar
"@upload_avatar":
description: Κείμενο που προτρέπει τον χρήστη να πατήσει το εικονίδιο avatar για
να ξεκινήσει το ανέβασμα
most_zapped_streamers: Τα περισσότερα Zapped Streamers
"@most_zapped_streamers":
description: Επικεφαλής πάνω από τα αναφερόμενα κορυφαία streamers από zaps
no_user_found: Δεν βρέθηκε χρήστης
"@no_user_found":
description: Δεν βρέθηκε χρήστης κατά την αναζήτηση
anon: Anon
viewers:
one: 1 θεατής
other: ${n:decimalPattern} θεατές
"@viewers":
description: Αριθμός θεατών της ροής
"@anon":
description: Ένας ανώνυμος χρήστης
stream:
status:
live: LIVE
ended: ENDED
planned: ΣΧΕΔΙΑΣΜΟΣ
started: Ξεκίνησε $timestamp
chat:
disabled: ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ
disabled_timeout: "Το χρονικό όριο λήγει: $time"
timeout(rich): $mod χρονομετρημένη λήξη $user για $time
"@timeout":
description: Μήνυμα συνομιλίας που εμφανίζει συμβάντα timeout
ended: STREAM ΤΕΛΕΙΩΣΕ
"@ended":
description: Η ροή τελείωσε το υποσέλιδο στο κάτω μέρος της συνομιλίας
zap(rich): $user zapped $amount sats
"@zap":
description: Μήνυμα συνομιλίας που δείχνει ροή ροής zaps
write:
label: Γράψτε μήνυμα
"@label":
description: Ετικέτα στο πλαίσιο εισαγωγής μηνύματος συνομιλίας
no_signer: Δεν μπορείτε να γράψετε μηνύματα με σύνδεση στο npub
"@no_signer":
description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης είναι
συνδεδεμένος μόνο με το κλειδί pubkey
login: Παρακαλώ συνδεθείτε για να στείλετε μηνύματα
"@login":
description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης έχει
αποσυνδεθεί
badge:
awarded_to: "Απονέμεται σε:"
"@awarded_to":
description: Επικεφαλίδα πάνω από τη λίστα των χρηστών στους οποίους έχει
απονεμηθεί ένα σήμα
raid:
to: RAIDING $name
"@to":
description: Μήνυμα επιδρομής συνομιλίας σε άλλη ροή
from: RAID FROM $name
"@from":
description: Μήνυμα επιδρομής συνομιλίας από άλλη ροή
countdown: Επιδρομές στο $time
"@countdown":
description: Χρονοδιακόπτης αντίστροφης μέτρησης για αυτόματη ιππασία
goal:
title: "Στόχος: $amount"
remaining: "Υπόλοιπο: $amount"
complete: ΠΛΗΡΗΣ
button:
login: Σύνδεση
logout: Αποσύνδεση
edit_profile: Επεξεργασία προφίλ
"@login":
description: Κείμενο κουμπιού για το κουμπί σύνδεσης
follow: Ακολουθήστε το
"@follow":
description: Κείμενο κουμπιού για το κουμπί follow
unfollow: Ακολουθήστε το
"@unfollow":
description: Κείμενο κουμπιού για το κουμπί unfollow
mute: Σίγαση
unmute: Αποσυνδέστε τη φωνή σας από το
share: Μοιραστείτε το
save: Αποθήκευση
connect: Συνδέστε το
settings: Ρυθμίσεις
embed:
article_by: Άρθρο από $name
note_by: Σημείωση του $name
live_stream_by: Ζωντανή μετάδοση από το $name
stream_list:
following: Ακολουθώντας το
live: Ζωντανό
planned: Προγραμματισμένο
ended: Τελείωσε
"@stream_list":
description: Επικεφαλίδες στις λίστες ροής ανά τύπο ροής
ζωντανή/τελειωμένη/προγραμματισμένη κ.λπ.
zap:
title: Zap $name
custom_amount: Προσαρμοσμένο ποσό
confirm: Επιβεβαίωση
comment: Σχόλιο
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Άνοιγμα στο πορτοφόλι
button_connect_wallet: Connect Wallet
copy: Αντιγραφή στο πρόχειρο
error:
invalid_custom_amount: Μη έγκυρο προσαρμοσμένο ποσό
no_wallet: Δεν έχει εγκατασταθεί πορτοφόλι αστραπής
no_lud16: Δεν βρέθηκε διεύθυνση κεραυνού
profile:
past_streams: Προηγούμενα ρεύματα
settings:
button_profile: Επεξεργασία προφίλ
button_wallet: Ρυθμίσεις πορτοφολιού
profile:
display_name: Όνομα οθόνης
about: Σχετικά με το
nip05: Διεύθυνση Nostr
lud16: Διεύθυνση Lightning
error:
logged_out: Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Αποσύνδεση πορτοφολιού
connect_1tap: Σύνδεση 1 βρύσης
paste: Επικόλληση URL
error:
logged_out: Δεν μπορώ να συνδεθώ με πορτοφόλι όταν έχω αποσυνδεθεί
nwc_auth_event_not_found: Δεν βρέθηκε συμβάν εξουσιοδότησης πορτοφολιού
login:
username: Όνομα χρήστη
amber: Σύνδεση με Amber
key: Σύνδεση με κλειδί
create: Δημιουργία λογαριασμού
error:
invalid_key: Μη έγκυρο κλειδί

View File

@ -0,0 +1,133 @@
upload_avatar: Upload Avatar
"@upload_avatar":
description: Text prompting user to hit avatar placeholder to begin upload
most_zapped_streamers: Most Zapped Streamers
"@most_zapped_streamers":
description: Heading over listed top streamers by zaps
no_user_found: No user found
"@no_user_found":
description: No user found when searching
anon: Anon
viewers:
one: 1 viewer
other: ${n:decimalPattern} viewers
"@viewers":
description: Number of viewers of the stream
"@anon":
description: An anonymous user
stream:
status:
live: LIVE
ended: ENDED
planned: PLANNED
started: Started $timestamp
chat:
disabled: CHAT DISABLED
disabled_timeout: "Timeout expires: $time"
timeout(rich): $mod timed out $user for ${time}
"@timeout":
description: Chat message showing timeout events
ended: STREAM ENDED
"@ended":
description: Stream ended footer at bottom of chat
zap(rich): $user zapped $amount sats
"@zap":
description: Chat message showing stream zaps
write:
label: Write message
"@label":
description: Label on the chat message input box
no_signer: Can't write messages with npub login
"@no_signer":
description: Chat input message shown when the user is logged in only with pubkey
login: Please login to send messages
"@login":
description: Chat input message shown when the user is logged out
badge:
awarded_to: "Awarded to:"
"@awarded_to":
description: Heading over list of users who are awarded a badge
raid:
to: RAIDING ${name}
"@to":
description: Chat raid message to another stream
from: RAID FROM ${name}
"@from":
description: Chat raid message from another stream
countdown: Raiding in ${time}
"@countdown":
description: Countdown timer for auto-raiding
goal:
title: "Goal: $amount"
remaining: "Remaining: $amount"
complete: COMPLETE
button:
login: Login
logout: Logout
edit_profile: Edit Profile
"@login":
description: Button text for the login button
follow: Follow
"@follow":
description: Button text for the follow button
unfollow: Unfollow
"@unfollow":
description: Button text for the unfollow button
mute: Mute
unmute: Unmute
share: Share
save: Save
connect: Connect
settings: Settings
embed:
article_by: Article by ${name}
note_by: Note by $name
live_stream_by: Live stream by ${name}
stream_list:
following: Following
live: Live
planned: Planned
ended: Ended
"@stream_list":
description: Headings on stream lists by stream type live/ended/planned etc.
zap:
title: Zap $name
custom_amount: Custom Amount
confirm: Confirm
comment: Comment
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Open in Wallet
button_connect_wallet: Connect Wallet
copy: Copied to clipboard
error:
invalid_custom_amount: Invalid custom amount
no_wallet: No lightning wallet installed
no_lud16: No lightning address found
profile:
past_streams: Past Streams
settings:
button_profile: Edit Profile
button_wallet: Wallet Settings
profile:
display_name: Display Name
about: About
nip05: Nostr Address
lud16: Lightning Address
error:
logged_out: Cant edit profile when logged out
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Disconnect Wallet
connect_1tap: 1-Tap Connection
paste: Paste URL
error:
logged_out: Cant connect wallet when logged out
nwc_auth_event_not_found: No wallet auth event found
login:
username: Username
amber: Login with Amber
key: Login with Key
create: Create Account
error:
invalid_key: Invalid key

View File

@ -0,0 +1,138 @@
upload_avatar: Subir avatar
"@upload_avatar":
description: Texto que indica al usuario que pulse el marcador de avatar para
iniciar la carga
most_zapped_streamers: Serpentinas más derribadas
"@most_zapped_streamers":
description: Encabezando streamers superiores listados por zaps
no_user_found: No se ha encontrado ningún usuario
"@no_user_found":
description: No se ha encontrado ningún usuario al realizar la búsqueda
anon: Anónimo
viewers:
one: 1 espectador
other: ${n:decimalPattern} espectadores
"@viewers":
description: Número de espectadores del flujo
"@anon":
description: Un usuario anónimo
stream:
status:
live: EN VIVO
ended: FIN
planned: PLANIFICADO
started: Comenzó $timestamp
chat:
disabled: CHAT DESHABILITADO
disabled_timeout: "El tiempo de espera expira: $time"
timeout(rich): $mod timed out $user para $time
"@timeout":
description: Mensaje de chat que muestra los eventos de tiempo de espera
ended: STREAM FINED
"@ended":
description: Stream finalizó en la parte inferior del chat
zap(rich): $user zapearon $amount sats
"@zap":
description: Mensaje de chat que muestra zaps de flujo
write:
label: Escribir mensaje
"@label":
description: Etiqueta del cuadro de entrada de mensajes de chat
no_signer: No se pueden escribir mensajes con el login npub
"@no_signer":
description: Mensaje de entrada en el chat que se muestra cuando el usuario está
conectado sólo con pubkey
login: Inicie sesión para enviar mensajes
"@login":
description: Mensaje de entrada al chat que se muestra cuando el usuario cierra
la sesión
badge:
awarded_to: "Concedido a:"
"@awarded_to":
description: Encabezamiento de la lista de usuarios a los que se ha concedido
una insignia
raid:
to: RAIDING $name
"@to":
description: Mensaje de raid de chat a otro flujo
from: RAID DESDE $name
"@from":
description: Mensaje de incursión en el chat desde otro flujo
countdown: Incursiones en $time
"@countdown":
description: Temporizador de cuenta atrás para auto-raiding
goal:
title: "Objetivo: $amount"
remaining: "Resto: $amount"
complete: COMPLETAR
button:
login: Iniciar Sesión
logout: Cerrar sesión
edit_profile: Editar Perfil
"@login":
description: Texto del botón de inicio de sesión
follow: Seguir
"@follow":
description: Texto del botón de seguimiento
unfollow: Dejar de seguir
"@unfollow":
description: Texto del botón "Dejar de seguir
mute: Silenciar
unmute: Dejar de silenciar
share: Compartir
save: Guardar
connect: Conectar
settings: Ajustes
embed:
article_by: Artículo de $name
note_by: Nota de $name
live_stream_by: Transmisión en directo por $name
stream_list:
following: Siguiendo
live: En directo
planned: Planificado
ended: Finalizado
"@stream_list":
description: Encabezamientos en las listas de flujos por tipo de flujo en
directo/finalizado/planificado, etc.
zap:
title: Zap $name
custom_amount: Importe personalizado
confirm: Confirmar
comment: Comentario
button_zap_ready: Zapear $amount sats
button_zap: Zap
button_open_wallet: Abrir en cartera
button_connect_wallet: Billetera Connect
copy: Copiado al portapapeles
error:
invalid_custom_amount: Importe personalizado no válido
no_wallet: Sin monedero relámpago instalado
no_lud16: No se ha encontrado ninguna dirección de rayos
profile:
past_streams: Transmisiones anteriores
settings:
button_profile: Editar perfil
button_wallet: Configuración de la cartera
profile:
display_name: Mostrar nombre
about: Acerca de
nip05: Dirección Nostr
lud16: Dirección del rayo
error:
logged_out: No se puede editar el perfil cuando se cierra la sesión
wallet:
connect_wallet: Cartera Connect (NWC nostr+walletconnect://)
disconnect_wallet: Desconectar Cartera
connect_1tap: Conexión de 1 toma
paste: Pegar URL
error:
logged_out: No se puede conectar el monedero al cerrar la sesión
nwc_auth_event_not_found: No se ha encontrado ningún evento de autenticación de cartera
login:
username: Usuario
amber: Iniciar sesión con Amber
key: Inicio de sesión con clave
create: Crear una cuenta
error:
invalid_key: Clave no válida

View File

@ -0,0 +1,136 @@
upload_avatar: Lataa avatar
"@upload_avatar":
description: Teksti, joka kehottaa käyttäjää painamaan avatar-merkkiä
aloittaakseen lataamisen.
most_zapped_streamers: Eniten Zapped Streamers
"@most_zapped_streamers":
description: Päällekkäin lueteltujen alkuun streamers by zaps
no_user_found: Käyttäjää ei löytynyt
"@no_user_found":
description: Käyttäjää ei löytynyt haun yhteydessä
anon: Anon
viewers:
one: 1 katsoja
other: ${n:decimalPattern} katsojat
"@viewers":
description: Streamin katsojien määrä
"@anon":
description: Nimetön käyttäjä
stream:
status:
live: LIVE
ended: ENDED
planned: SUUNNITELTU
started: Aloitettu $timestamp
chat:
disabled: CHAT POISTETTU KÄYTÖSTÄ
disabled_timeout: "Aikakatkaisu päättyy: $time"
timeout(rich): $mod ajastettu $user for $time
"@timeout":
description: Chat-viesti, joka näyttää aikakatkaisutapahtumat
ended: STREAM PÄÄTTYNYT
"@ended":
description: Virta päättyi alatunnisteen alareunaan chatissa
zap(rich): $user zappasi $amount satsia
"@zap":
description: Chat-viestin näyttäminen stream zaps
write:
label: Kirjoita viesti
"@label":
description: Chat-viestin syöttöruudun tarra
no_signer: Ei voi kirjoittaa viestejä npub-kirjautumisella
"@no_signer":
description: Chat-syöttöviesti näytetään, kun käyttäjä on kirjautunut sisään
vain pubkey-avaimella.
login: Kirjaudu sisään lähettääksesi viestejä
"@login":
description: Chat-syötteen viesti näytetään, kun käyttäjä on kirjautunut ulos.
badge:
awarded_to: "Myönnetty:"
"@awarded_to":
description: Merkin saaneiden käyttäjien luettelon otsikko
raid:
to: RAIDING $name
"@to":
description: Chat-viesti toiseen streamiin
from: RAID FROM $name
"@from":
description: Chat raid viesti toisesta virrasta
countdown: Ryöstöretket osoitteessa $time
"@countdown":
description: Lähtölaskenta ajastin automaattista ratsastusta varten
goal:
title: "Tavoite: $amount"
remaining: "Jäljellä: $amount"
complete: TÄYDELLINEN
button:
login: Kirjaudu sisään
logout: Kirjaudu ulos
edit_profile: Muokkaa profiilia
"@login":
description: Kirjautumispainikkeen teksti
follow: Seuraa
"@follow":
description: Seuraa-painikkeen painikkeen teksti
unfollow: Älä seuraa
"@unfollow":
description: Seuraa-painikkeen teksti
mute: Mykistä
unmute: Poista mykistys
share: Jaa
save: Tallenna
connect: Yhdistä
settings: Asetukset
embed:
article_by: Artikkeli $name
note_by: Viesti lähettäjältä $name
live_stream_by: Suora lähetys osoitteessa $name
stream_list:
following: Seuraa
live: Live
planned: Suunniteltu
ended: Päättynyt
"@stream_list":
description: Stream-luetteloiden otsikot stream-tyypeittäin
live/päättynyt/suunniteltu jne.
zap:
title: Zap $name
custom_amount: Mukautettu määrä
confirm: Vahvista
comment: Kommentoi
button_zap_ready: Zap $amount satsia
button_zap: Zap
button_open_wallet: Avaa lompakossa
button_connect_wallet: Yhdistä lompakko
copy: Kopioitu leikepöydälle
error:
invalid_custom_amount: Virheellinen mukautettu määrä
no_wallet: Ei asennettua salamalompakkoa
no_lud16: Salamaosoitetta ei löytynyt
profile:
past_streams: Aikaisemmat lähetykset
settings:
button_profile: Muokkaa profiilia
button_wallet: Lompakon asetukset
profile:
display_name: Näytön nimi
about: Tietoja
nip05: Nostr Osoite
lud16: Salama osoite
error:
logged_out: Ei voi muokata profiilia, kun on kirjautunut ulos
wallet:
connect_wallet: Connect-lompakko (NWC nostr+walletconnect://)
disconnect_wallet: Irrota lompakko
connect_1tap: 1-Tap-liitäntä
paste: Liitä URL-osoite
error:
logged_out: Ei voi muodostaa yhteyttä lompakkoon, kun on kirjautunut ulos
nwc_auth_event_not_found: Ei lompakko-auth-tapahtumaa löydetty
login:
username: Käyttäjätunnus
amber: Kirjaudu sisään Amber kanssa
key: Kirjaudu sisään avaimella
create: Luo tili
error:
invalid_key: Virheellinen avain

View File

@ -0,0 +1,135 @@
upload_avatar: Télécharger l'avatar
"@upload_avatar":
description: Texte invitant l'utilisateur à cliquer sur l'espace réservé à
l'avatar pour commencer le téléchargement
most_zapped_streamers: Les Streamers les plus zappés
"@most_zapped_streamers":
description: Les têtes d'affiche sont listées par zaps.
no_user_found: Aucun utilisateur trouvé
"@no_user_found":
description: Aucun utilisateur n'a été trouvé lors de la recherche
anon: Anonyme
viewers:
one: 1 téléspectateur
other: "${n:decimalPattern} téléspectateurs"
"@viewers":
description: Nombre de spectateurs du flux
"@anon":
description: Un utilisateur anonyme
stream:
status:
live: VIVRE
ended: FINI
planned: PRÉVU
started: Commencé à $timestamp
chat:
disabled: CHAT DISABLED
disabled_timeout: "Le délai expire : $time"
timeout(rich): $mod $user a expiré dans le temps pour $time
"@timeout":
description: Message de chat indiquant les événements de dépassement de délai
ended: STREAM ENDED
"@ended":
description: Stream ended footer at bottom of chat
zap(rich): $user a zappé $amount sats
"@zap":
description: Message de chat montrant des zaps de flux
write:
label: Message écrit
"@label":
description: Étiquette sur la boîte de saisie du message de chat
no_signer: Impossible d'écrire des messages avec le login npub
"@no_signer":
description: Message d'entrée du chat affiché lorsque l'utilisateur n'est
connecté qu'avec pubkey
login: Veuillez vous connecter pour envoyer des messages
"@login":
description: Message d'entrée du chat affiché lorsque l'utilisateur est déconnecté
badge:
awarded_to: "Attribué à :"
"@awarded_to":
description: Titre sur la liste des utilisateurs qui ont reçu un badge
raid:
to: RAIDING $name
"@to":
description: Message de raid par chat vers un autre flux
from: RAID FROM $name
"@from":
description: Message de raid sur le chat à partir d'un autre flux
countdown: Raid sur $time
"@countdown":
description: Compte à rebours pour l'auto-raid
goal:
title: "Objectif : $amount"
remaining: "Reste : $amount"
complete: COMPLET
button:
login: Se Connecter
logout: Se déconnecter
edit_profile: Modifier le Profil
"@login":
description: Texte du bouton de connexion
follow: Suivre
"@follow":
description: Texte du bouton de suivi
unfollow: Ne plus suivre
"@unfollow":
description: Texte du bouton pour le bouton "unfollow
mute: Muet
unmute: Retirer sourdine
share: Partager
save: Sauvegarder
connect: Connecter
settings: Paramètres
embed:
article_by: Article par $name
note_by: Note par $name
live_stream_by: Retransmission en direct sur $name
stream_list:
following: Abonnements
live: En direct
planned: Planifié
ended: Terminé
"@stream_list":
description: Rubriques sur les listes de flux par type de flux en direct/fini/prévu, etc.
zap:
title: Zap $name
custom_amount: Montant personnalisé
confirm: Confirmer
comment: Commenter
button_zap_ready: Zapper $amount sats
button_zap: Zap
button_open_wallet: Ouvrir dans le portefeuille
button_connect_wallet: Connecter le portefeuille
copy: Copié dans le presse-papiers
error:
invalid_custom_amount: Montant personnalisé non valide
no_wallet: Pas de porte-monnaie électronique installé
no_lud16: Pas d'adresse éclair trouvée
profile:
past_streams: Streams passés
settings:
button_profile: Modifier le profil
button_wallet: Paramètres du portefeuille
profile:
display_name: Nom d'affichage
about: A propos de
nip05: Nostr Adresse
lud16: Adresse de la foudre
error:
logged_out: Impossible de modifier le profil lorsque l'on est déconnecté
wallet:
connect_wallet: Portefeuille Connect (NWC nostr+walletconnect://)
disconnect_wallet: Déconnecter le portefeuille
connect_1tap: Connexion à 1 robinet
paste: Coller l'URL
error:
logged_out: Impossible de se connecter au portefeuille lorsque l'on est déconnecté
nwc_auth_event_not_found: Aucun événement d'authentification de portefeuille n'a été trouvé
login:
username: Nom dutilisateur
amber: Se connecter avec Amber
key: Connexion avec la clé
create: Créer un Compte
error:
invalid_key: Clé non valide

View File

@ -0,0 +1,135 @@
upload_avatar: Avatár feltöltése
"@upload_avatar":
description: Szöveg, amely arra kéri a felhasználót, hogy a feltöltés
megkezdéséhez nyomja meg az avatar helyőrzőt
most_zapped_streamers: A legtöbb Zapped Streamers
"@most_zapped_streamers":
description: Irány a felsorolt top streamerek fölött zaps által
no_user_found: Nem talált felhasználó
"@no_user_found":
description: Kereséskor nem talált felhasználó
anon: Névtelen
viewers:
one: 1 néző
other: ${n:decimalPattern} nézők
"@viewers":
description: A stream nézőinek száma
"@anon":
description: Egy névtelen felhasználó
stream:
status:
live: ÉLŐ
ended: ENDED
planned: TERVEZETT
started: Elindult $timestamp
chat:
disabled: CHAT KIKAPCSOLVA
disabled_timeout: "Az időkorlát lejár: $time"
timeout(rich): $mod időzített $user a ${time}számára
"@timeout":
description: Chat üzenet az időkorlátos események megjelenítésével
ended: STREAM MEGSZÜNTETETT
"@ended":
description: A stream véget ért lábléc a chat alján
zap(rich): $user zap-elt $amount sats
"@zap":
description: Csevegőüzenet, amely stream zapokat mutat
write:
label: Üzenet írása
"@label":
description: Címke a csevegőüzenet beviteli mezőjén
no_signer: Nem tud üzeneteket írni az npub bejelentkezéssel
"@no_signer":
description: A csevegés bemeneti üzenete megjelenik, ha a felhasználó csak
pubkey-vel van bejelentkezve
login: Kérjük, jelentkezzen be az üzenetek küldéséhez
"@login":
description: A felhasználó kijelentkezésekor megjelenő csevegési beviteli üzenet
badge:
awarded_to: "Elnyerte:"
"@awarded_to":
description: Fejléc a jelvényt kapott felhasználók listája fölött
raid:
to: RAIDING ${name}
"@to":
description: Chat raid üzenet egy másik folyamba
from: RAID FROM $name
"@from":
description: Chat raid üzenet egy másik folyamból
countdown: Raiding a ${time}oldalon
"@countdown":
description: Visszaszámláló időzítő az automatikus lovagláshoz
goal:
title: "Cél: $amount"
remaining: "Maradék: $amount"
complete: TELJES
button:
login: Bejelentkezés
logout: Kijelentkezés
edit_profile: Profil szerkesztése
"@login":
description: A bejelentkezési gomb szövege
follow: Követés
"@follow":
description: A követés gomb szövege
unfollow: Követés megszüntetése
"@unfollow":
description: A követés megszüntetése gomb szövege
mute: Némítás
unmute: Némítás visszavonása
share: Megosztás
save: Mentés
connect: Csatlakozás
settings: Beállítások
embed:
article_by: Cikk ${name}
note_by: $name bejegyzése
live_stream_by: Élő közvetítés a ${name}oldalon
stream_list:
following: Követettek bejegyzései
live: Élő
planned: Tervezett
ended: Véget ért
"@stream_list":
description: A stream-listák címsorai stream-típusonként élő/befejezett/tervezett stb.
zap:
title: Zap $name
custom_amount: Egyéni összeg
confirm: Megerősítés
comment: Hozzászólás
button_zap_ready: Zap $amount satoshi
button_zap: Zap
button_open_wallet: Megnyitás a pénztárcában
button_connect_wallet: Connect Wallet
copy: Vágólapra másolva
error:
invalid_custom_amount: Érvénytelen egyéni összeg
no_wallet: Nincs telepített villám tárca
no_lud16: Nem talált villámcím
profile:
past_streams: Múltbeli Streamek
settings:
button_profile: Profil szerkesztése
button_wallet: Pénztárca beállítások
profile:
display_name: Megjelenített név
about: A oldalról
nip05: Nostr cím
lud16: Villám cím
error:
logged_out: Kijelentkezve nem lehet profilt szerkeszteni
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Pénztárca lekapcsolása
connect_1tap: 1-Tap csatlakozás
paste: URL beillesztése
error:
logged_out: Kijelentkezve nem lehet csatlakozni a pénztárcához
nwc_auth_event_not_found: Nem találtak pénztárca-auth eseményt
login:
username: Felhasználónév
amber: Bejelentkezés Amber segítségével
key: Bejelentkezés kulccsal
create: Fiók Létrehozása
error:
invalid_key: Érvénytelen kulcs

View File

@ -0,0 +1,136 @@
upload_avatar: Carica Avatar
"@upload_avatar":
description: Testo che richiede all'utente di premere il segnaposto dell'avatar
per iniziare il caricamento
most_zapped_streamers: Il maggior numero di streamer bloccati
"@most_zapped_streamers":
description: Direzione sopra elencata top streamers da zaps
no_user_found: Nessun utente trovato
"@no_user_found":
description: Nessun utente trovato durante la ricerca
anon: Anonimo
viewers:
one: 1 spettatore
other: ${n:decimalPattern} spettatori
"@viewers":
description: Numero di spettatori del flusso
"@anon":
description: Un utente anonimo
stream:
status:
live: IN DIRETTA
ended: FINE
planned: PREVISTO
started: Avviato $timestamp
chat:
disabled: CHAT DISABILITATA
disabled_timeout: "Il timeout scade: $time"
timeout(rich): $mod time out $user per $time
"@timeout":
description: Messaggio di chat che mostra gli eventi di timeout
ended: STREAM ENDED
"@ended":
description: Il flusso si è concluso con un piè di pagina in fondo alla chat
zap(rich): $user ha effettuato uno zap di $amount sats
"@zap":
description: Messaggio di chat che mostra gli zap del flusso
write:
label: Scrivi il messaggio
"@label":
description: Etichetta della casella di immissione del messaggio di chat
no_signer: Impossibile scrivere messaggi con il login npub
"@no_signer":
description: Messaggio di ingresso alla chat mostrato quando l'utente è connesso
solo con la pubkey
login: Effettuare il login per inviare messaggi
"@login":
description: Messaggio di input della chat mostrato quando l'utente è disconnesso
badge:
awarded_to: "Assegnato a:"
"@awarded_to":
description: Intestazione dell'elenco degli utenti a cui è stato assegnato un badge
raid:
to: RAIDING $name
"@to":
description: Messaggio di chat raid in un altro flusso
from: RAID DA $name
"@from":
description: Messaggio di chat raid da un altro flusso
countdown: Raid in $time
"@countdown":
description: Timer per il conto alla rovescia per l'auto-raid
goal:
title: "Obiettivo: $amount"
remaining: "Restante: $amount"
complete: COMPLETO
button:
login: Login
logout: Logout
edit_profile: Modifica profilo
"@login":
description: Testo del pulsante per il pulsante di accesso
follow: Segui
"@follow":
description: Testo del pulsante per il pulsante Segui
unfollow: Smetti di seguire
"@unfollow":
description: Testo del pulsante per il pulsante unfollow
mute: Silenzia
unmute: Riattiva
share: Condividi
save: Salva
connect: Collegare
settings: Impostazioni
embed:
article_by: Articolo di $name
note_by: Nota di $name
live_stream_by: Streaming in diretta da $name
stream_list:
following: Seguiti
live: Dal vivo
planned: Pianificato
ended: Terminato
"@stream_list":
description: Titoli sugli elenchi dei flussi per tipo di flusso
live/finito/pianificato ecc.
zap:
title: Zap $name
custom_amount: Importo personalizzato
confirm: Conferma
comment: Commenta
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Aprire nel portafoglio
button_connect_wallet: Portafoglio Connect
copy: Copiato negli appunti
error:
invalid_custom_amount: Importo personalizzato non valido
no_wallet: Nessun portafoglio Lightning installato
no_lud16: Nessun indirizzo di fulmine trovato
profile:
past_streams: Flussi passati
settings:
button_profile: Modifica profilo
button_wallet: Impostazioni del portafoglio
profile:
display_name: Nome visualizzato
about: Circa
nip05: Indirizzo
lud16: Indirizzo del fulmine
error:
logged_out: Impossibile modificare il profilo quando si è disconnessi
wallet:
connect_wallet: Portafoglio Connect (NWC nostr+walletconnect://)
disconnect_wallet: Disconnettere il portafoglio
connect_1tap: Connessione a 1 rubinetto
paste: Incolla URL
error:
logged_out: Impossibile connettere il portafoglio quando si è disconnessi
nwc_auth_event_not_found: Nessun evento wallet auth trovato
login:
username: Nome utente
amber: Accesso con Amber
key: Accesso con chiave
create: Crea un account
error:
invalid_key: Chiave non valida

View File

@ -0,0 +1,133 @@
upload_avatar: 画像アップロード
"@upload_avatar":
description: アバターのプレースホルダーを押してアップロードを開始するよう促すテキスト
most_zapped_streamers: 最もザッピングされたストリーマー
"@most_zapped_streamers":
description: ザップによるリストの上のストリーマーに向かう
no_user_found: ユーザーが見つかりません
"@no_user_found":
description: 検索してもユーザーが見つからない
anon: 匿名
viewers:
one: 1 視聴者
other: ${n:decimalPattern} 人が視聴中
"@viewers":
description: ストリームの視聴者数
"@anon":
description: 匿名ユーザー
stream:
status:
live: ライブ
ended: 終了
planned: 予定
started: $timestamp を開始
chat:
disabled: チャット無効
disabled_timeout: タイムアウト: $time
timeout(rich): $mod タイムアウト $user for $time
"@timeout":
description: タイムアウトイベントを表示するチャットメッセージ
ended: 配信終了
"@ended":
description: チャットの下にストリーム終了のフッター
zap(rich): $user が $amount sats をザップしました
"@zap":
description: ストリームのザッピングを表示するチャットメッセージ
write:
label: メッセージを書く
"@label":
description: チャットメッセージ入力ボックスのラベル
no_signer: npubログインでメッセージが書けない
"@no_signer":
description: ユーザーがpubkeyのみでログインしている場合に表示されるチャット入力メッセージ
login: メッセージを送信するにはログインしてください
"@login":
description: ログアウト時に表示されるチャット入力メッセージ
badge:
awarded_to: 受賞者
"@awarded_to":
description: バッジを授与されたユーザーのリスト上の見出し
raid:
to: RAIDING $name
"@to":
description: 別のストリームへのチャット襲撃メッセージ
from: RAID FROM $name
"@from":
description: 他のストリームからのチャット襲撃メッセージ
countdown: $timeにおける襲撃
"@countdown":
description: 自動騎乗のカウントダウン・タイマー
goal:
title: 目標額: $amount
remaining: 残り: $amount
complete: 完了
button:
login: ログイン
logout: ログアウト
edit_profile: プロフィールを編集
"@login":
description: ログインボタンのテキスト
follow: フォロー
"@follow":
description: フォローボタンのテキスト
unfollow: フォロー解除
"@unfollow":
description: フォロー解除ボタンのテキスト
mute: ミュート
unmute: ミュート解除
share: 共有
save: 保存
connect: 接続
settings: 設定
embed:
article_by: 記事: $name
note_by: $name の投稿
live_stream_by: ライブ・ストリーム $name
stream_list:
following: フォロー中
live: ライブ配信中
planned: 予定あり
ended: 終了しました
"@stream_list":
description: ライブ/終了/予定など、ストリーム・タイプ別のストリーム・リストの見出し。
zap:
title: $name をザップ
custom_amount: カスタム金額
confirm: 確認
comment: コメント
button_zap_ready: $amount satsをザップする
button_zap: ザップ
button_open_wallet: ウォレットで開く
button_connect_wallet: コネクトウォレット
copy: クリップボードにコピー
error:
invalid_custom_amount: 無効なカスタム金額
no_wallet: Lightningウォレット未装着
no_lud16: 雷アドレスが見つかりません
profile:
past_streams: 過去の配信
settings:
button_profile: プロフィール編集
button_wallet: ウォレットの設定
profile:
display_name: 表示名
about: について
nip05: 住所
lud16: ライトニングアドレス
error:
logged_out: ログアウトするとプロフィールが編集できない
wallet:
connect_wallet: コネクトウォレットNWC nostr+walletconnect://)
disconnect_wallet: ウォレットの切断
connect_1tap: 1タップ接続
paste: URLを貼り付ける
error:
logged_out: ログアウト時にウォレットに接続できない
nwc_auth_event_not_found: ウォレットの認証イベントが見つかりません
login:
username: ユーザー名
amber: 琥珀でログイン
key: キーでログイン
create: アカウントを作成する
error:
invalid_key: 無効なキー

View File

@ -0,0 +1,133 @@
upload_avatar: 아바타 업로드
"@upload_avatar":
description: 아바타 플레이스홀더를 눌러 업로드를 시작하라는 메시지를 표시하는 텍스트
most_zapped_streamers: 가장 많이 재핑된 스트리머
"@most_zapped_streamers":
description: 나열된 상위 스트리머를 잽별로 살펴보기
no_user_found: 사용자를 찾을 수 없습니다.
"@no_user_found":
description: 검색 시 사용자를 찾을 수 없음
anon: Anon
viewers:
one: 시청자 1명
other: "${n:decimalPattern} 시청자"
"@viewers":
description: 스트림 시청자 수
"@anon":
description: 익명 사용자
stream:
status:
live: 라이브
ended: 종료
planned: 계획된
started: 시작 $timestamp
chat:
disabled: 채팅 사용 안 함
disabled_timeout: "시간 초과가 만료되었습니다: $time"
timeout(rich): $mod 시간 초과됨 $user $time
"@timeout":
description: 시간 초과 이벤트를 표시하는 채팅 메시지
ended: 스트림 종료
"@ended":
description: 채팅 하단의 스트림 종료 푸터
zap(rich): $user ZAPP $amount SATS
"@zap":
description: 채팅 메시지 스트림 끊김 표시
write:
label: 메시지 작성
"@label":
description: 채팅 메시지 입력 상자의 라벨
no_signer: npub 로그인으로 메시지를 작성할 수 없습니다.
"@no_signer":
description: 사용자가 공개 키로만 로그인한 경우에 표시되는 채팅 입력 메시지
login: 메시지를 보내려면 로그인하세요.
"@login":
description: 사용자가 로그아웃할 때 표시되는 채팅 입력 메시지
badge:
awarded_to: 수상 대상
"@awarded_to":
description: 배지를 받은 사용자 목록으로 이동하기
raid:
to: RAIDing $name
"@to":
description: 다른 스트림으로 채팅 레이드 메시지 보내기
from: RAID FROM $name
"@from":
description: 다른 스트림의 채팅 레이드 메시지
countdown: $time에서 레이드
"@countdown":
description: 자동 레이드를 위한 카운트다운 타이머
goal:
title: "목표: $amount"
remaining: "남음: $amount"
complete: 완료
button:
login: 로그인
logout: 로그아웃
edit_profile: 프로필 수정
"@login":
description: 로그인 버튼의 버튼 텍스트
follow: 팔로우
"@follow":
description: 팔로우 버튼의 버튼 텍스트
unfollow: 언팔로우
"@unfollow":
description: 언팔로우 버튼의 버튼 텍스트
mute: 뮤트
unmute: 뮤트 해제
share: 공유
save: 저장
connect: 연결
settings: 설정
embed:
article_by: "작성자: $name"
note_by: "노트 작성됨: $name"
live_stream_by: "라이브 스트리밍: $name"
stream_list:
following: 팔로잉
live: 라이브
planned: 계획된
ended: 종료됨
"@stream_list":
description: 실시간/종료/예정 등 스트림 유형별로 스트림 목록의 제목을 표시합니다.
zap:
title: Zap $name
custom_amount: 사용자 지정 금액
confirm: 확인
comment: 댓글
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: 지갑에서 열기
button_connect_wallet: 지갑 연결
copy: 클립보드에 복사
error:
invalid_custom_amount: 잘못된 사용자 지정 금액
no_wallet: 라이트닝 월렛이 설치되지 않았습니다.
no_lud16: 번개 주소를 찾을 수 없습니다.
profile:
past_streams: 과거 스트림
settings:
button_profile: 프로필 수정
button_wallet: 지갑 설정
profile:
display_name: 표시 이름
about: 정보
nip05: 노스트르 주소
lud16: 라이트닝 주소
error:
logged_out: 로그아웃 시 프로필 수정 불가
wallet:
connect_wallet: 지갑 연결(NWC nostr+walletconnect://)
disconnect_wallet: 지갑 연결 해제
connect_1tap: 1-탭 연결
paste: URL 붙여넣기
error:
logged_out: 로그아웃 시 지갑 연결 불가
nwc_auth_event_not_found: 지갑 인증 이벤트를 찾을 수 없습니다.
login:
username: 사용자 이름
amber: Amber로 로그인
key: 키로 로그인
create: 계정 만들기
error:
invalid_key: 잘못된 키

View File

@ -0,0 +1,136 @@
upload_avatar: Avatar uploaden
"@upload_avatar":
description: Tekst die de gebruiker vraagt om op de avatar-plaatshouder te
klikken om te beginnen met uploaden
most_zapped_streamers: Meeste Zapped Streamers
"@most_zapped_streamers":
description: Koers over beursgenoteerde topstreamers door zaps
no_user_found: Geen gebruiker gevonden
"@no_user_found":
description: Geen gebruiker gevonden bij het zoeken
anon: Anon
viewers:
one: 1 kijker
other: ${n:decimalPattern} kijkers
"@viewers":
description: Aantal kijkers van de stream
"@anon":
description: Een anonieme gebruiker
stream:
status:
live: LIVE
ended: GESLOTEN
planned: GEPLAND
started: Begonnen met $timestamp
chat:
disabled: CHAT UITGESCHAKELD
disabled_timeout: "Time-out loopt af: $time"
timeout(rich): $mod timed out $user voor $time
"@timeout":
description: Chatbericht met time-outgebeurtenissen
ended: STREAM BEËINDIGD
"@ended":
description: Voettekst einde stream onderaan chat
zap(rich): $user zapped $amount sats
"@zap":
description: Chatbericht met stream zaps
write:
label: Schrijf bericht
"@label":
description: Label op het invoerveld voor chatberichten
no_signer: Kan geen berichten schrijven met npub login
"@no_signer":
description: Chatinvoerbericht getoond wanneer de gebruiker alleen is ingelogd
met pubkey
login: Log in om berichten te verzenden
"@login":
description: Chatinvoerbericht dat wordt weergegeven wanneer de gebruiker is
uitgelogd
badge:
awarded_to: "Toegekend aan:"
"@awarded_to":
description: Kop boven de lijst met gebruikers die een badge hebben gekregen
raid:
to: RAIDING $name
"@to":
description: Chat raid bericht naar een andere stream
from: RAID VAN $name
"@from":
description: Chat invalbericht van een andere stream
countdown: Overvallen in $time
"@countdown":
description: Afteltimer voor automatisch rijden
goal:
title: "Doel: $amount"
remaining: "Overblijvend: $amount"
complete: COMPLETE
button:
login: Inloggen
logout: Uitloggen
edit_profile: Bewerk Profiel
"@login":
description: Knoptekst voor de aanmeldknop
follow: Volgen
"@follow":
description: Knoptekst voor de volgknop
unfollow: Ontvolgen
"@unfollow":
description: Knoptekst voor de knop Ontvolgen
mute: Dempen
unmute: Niet langer negeren
share: Deel
save: Opslaan
connect: Maak verbinding met
settings: Instellingen
embed:
article_by: Artikel door $name
note_by: Opmerking door $name
live_stream_by: Live stream via $name
stream_list:
following: Volgt
live: Live
planned: Gepland
ended: Beëindigd
"@stream_list":
description: Rubrieken op streamlijsten per streamtype live/beëindigd/gepland etc.
zap:
title: Zap $name
custom_amount: Aangepast bedrag
confirm: Bevestig
comment: Opmerking
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Openen in portefeuille
button_connect_wallet: Portemonnee aansluiten
copy: Gekopieerd naar klembord
error:
invalid_custom_amount: Ongeldig aangepast bedrag
no_wallet: Geen bliksemportemonnee geïnstalleerd
no_lud16: Geen bliksemadres gevonden
profile:
past_streams: Afgelopen Streams
settings:
button_profile: Profiel bewerken
button_wallet: Portemonnee-instellingen
profile:
display_name: Naam weergeven
about: Over
nip05: Nostr Adres
lud16: Bliksemadres
error:
logged_out: Kan profiel niet bewerken als ik ben uitgelogd
wallet:
connect_wallet: Portemonnee verbinden (NWC nostr+walletconnect://)
disconnect_wallet: Portefeuille loskoppelen
connect_1tap: 1-Tap Aansluiting
paste: URL plakken
error:
logged_out: Kan geen verbinding maken met portemonnee als ik ben uitgelogd
nwc_auth_event_not_found: Geen portemonnee-auth-gebeurtenis gevonden
login:
username: Gebruikersnaam
amber: Inloggen met Amber
key: Inloggen met sleutel
create: Account aanmaken
error:
invalid_key: Ongeldige sleutel

View File

@ -0,0 +1,136 @@
upload_avatar: Prześlij awatar
"@upload_avatar":
description: Tekst zachęcający użytkownika do kliknięcia symbolu zastępczego
awatara w celu rozpoczęcia przesyłania.
most_zapped_streamers: Większość zapped streamerów
"@most_zapped_streamers":
description: Przechodzenie nad wymienionymi topowymi streamerami przez zapy
no_user_found: Nie znaleziono użytkownika
"@no_user_found":
description: Nie znaleziono użytkownika podczas wyszukiwania
anon: Anon
viewers:
one: 1 przeglądarka
other: "{n:decimalPattern} widzów"
"@viewers":
description: Liczba widzów strumienia
"@anon":
description: Anonimowy użytkownik
stream:
status:
live: NA ŻYWO
ended: ZAKOŃCZONY
planned: PLANOWANE
started: Start $timestamp
chat:
disabled: CZAT WYŁĄCZONY
disabled_timeout: "Upłynął limit czasu: $time"
timeout(rich): $mod upłynął limit czasu $user dla $time
"@timeout":
description: Komunikat czatu pokazujący zdarzenia przekroczenia limitu czasu
ended: TRANSMISJA ZAKOŃCZONA
"@ended":
description: Stream zakończył stopkę na dole czatu
zap(rich): $user zapped $amount sats
"@zap":
description: Wiadomość na czacie pokazująca zapy strumienia
write:
label: Napisz wiadomość
"@label":
description: Etykieta w polu wprowadzania wiadomości czatu
no_signer: Nie można pisać wiadomości z loginem npub
"@no_signer":
description: Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest
zalogowany tylko za pomocą klucza pubkey
login: Zaloguj się, aby wysyłać wiadomości
"@login":
description: Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest wylogowany
badge:
awarded_to: "Przyznano:"
"@awarded_to":
description: Nagłówek nad listą użytkowników, którzy otrzymali odznakę
raid:
to: RAIDING $name
"@to":
description: Przesyłanie wiadomości na czacie do innego strumienia
from: RAID Z $name
"@from":
description: Nalot na czat z innego strumienia
countdown: Naloty w $time
"@countdown":
description: Zegar odliczający czas do automatycznej jazdy
goal:
title: "Cel: $amount"
remaining: "Pozostałe: $amount"
complete: ZAKOŃCZONE
button:
login: Logowanie
logout: Wylogowanie
edit_profile: Edytuj profil
"@login":
description: Tekst przycisku logowania
follow: Śledź
"@follow":
description: Tekst przycisku dla przycisku śledzenia
unfollow: Nie obserwuj
"@unfollow":
description: Tekst przycisku cofnięcia obserwowania
mute: Wyciszenie
unmute: Wyłącz wyciszenie
share: Udział
save: Zapisz
connect: Połączenie
settings: Ustawienia
embed:
article_by: Artykuł autorstwa $name
note_by: Uwaga $name
live_stream_by: Transmisja na żywo przez $name
stream_list:
following: Następujący
live: Na żywo
planned: Planowane
ended: Zakończony
"@stream_list":
description: Nagłówki na listach strumieni według typu strumienia na żywo /
zakończony / planowany itp.
zap:
title: Zap $name
custom_amount: Kwota niestandardowa
confirm: Potwierdzenie
comment: Komentarz
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Otwórz w portfelu
button_connect_wallet: Connect Wallet
copy: Skopiowane do schowka
error:
invalid_custom_amount: Nieprawidłowa kwota niestandardowa
no_wallet: Brak zainstalowanego portfela Lightning
no_lud16: Nie znaleziono adresu pioruna
profile:
past_streams: Poprzednie strumienie
settings:
button_profile: Edytuj profil
button_wallet: Ustawienia portfela
profile:
display_name: Wyświetlana nazwa
about: O
nip05: Adres Nostr
lud16: Adres błyskawicy
error:
logged_out: Nie można edytować profilu po wylogowaniu
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Odłącz portfel
connect_1tap: Połączenie 1-wtykowe
paste: Wklej adres URL
error:
logged_out: Nie można połączyć portfela po wylogowaniu
nwc_auth_event_not_found: Nie znaleziono zdarzenia autoryzacji portfela
login:
username: Nazwa użytkownika
amber: Zaloguj się za pomocą Amber
key: Logowanie za pomocą klucza
create: Utwórz konto
error:
invalid_key: Nieprawidłowy klucz

View File

@ -0,0 +1,136 @@
upload_avatar: Carregar Avatar
"@upload_avatar":
description: Texto solicitando que o usuário clique no espaço reservado do
avatar para iniciar o upload
most_zapped_streamers: Streamers mais afetados
"@most_zapped_streamers":
description: Dirigindo-se para as principais serpentinas listadas por zaps
no_user_found: Nenhum usuário encontrado
"@no_user_found":
description: Nenhum usuário foi encontrado durante a pesquisa
anon: Anônimo
viewers:
one: 1 visualizador
other: ${n:decimalPattern} espectadores
"@viewers":
description: Número de espectadores da transmissão
"@anon":
description: Um usuário anônimo
stream:
status:
live: AO VIVO
ended: FINALIZADO
planned: PLANEJADO
started: Iniciado em $timestamp
chat:
disabled: BATE-PAPO DESATIVADO
disabled_timeout: "O tempo limite expira: $time"
timeout(rich): $mod Tempo esgotado $user para $time
"@timeout":
description: Mensagem de bate-papo mostrando eventos de tempo limite
ended: TRANSMISSÃO ENCERRADA
"@ended":
description: O rodapé do fluxo terminou na parte inferior do bate-papo
zap(rich): $user zapeou $amount sats
"@zap":
description: Mensagem de bate-papo mostrando zaps de fluxo
write:
label: Escrever mensagem
"@label":
description: Rótulo na caixa de entrada da mensagem de bate-papo
no_signer: Não é possível escrever mensagens com o login do npub
"@no_signer":
description: Mensagem de entrada de bate-papo exibida quando o usuário está
conectado apenas com a pubkey
login: Faça login para enviar mensagens
"@login":
description: Mensagem de entrada de chat exibida quando o usuário está desconectado
badge:
awarded_to: "Prêmio concedido a:"
"@awarded_to":
description: Cabeçalho sobre a lista de usuários que receberam um emblema
raid:
to: RAIDING $name
"@to":
description: Mensagem de invasão de bate-papo para outro fluxo
from: RAID DE $name
"@from":
description: Mensagem de invasão de bate-papo de outro fluxo
countdown: Incursões em $time
"@countdown":
description: Cronômetro de contagem regressiva para o ataque automático
goal:
title: "Meta: $amount"
remaining: "Restante: $amount"
complete: COMPLETO
button:
login: Entrar
logout: Sair
edit_profile: Editar perfil
"@login":
description: Texto do botão para o botão de login
follow: Seguir
"@follow":
description: Texto do botão para o botão Seguir
unfollow: Deixar de seguir
"@unfollow":
description: Texto do botão para o botão deixar de seguir
mute: Silenciar
unmute: Desmutar
share: Compartilhar
save: Salvar
connect: Conectar
settings: Configurações
embed:
article_by: Artigo de $name
note_by: Nota de $name
live_stream_by: Transmissão ao vivo pelo site $name
stream_list:
following: Seguindo
live: Ao vivo
planned: Planejado
ended: Encerrado
"@stream_list":
description: Cabeçalhos nas listas de transmissões por tipo de transmissão ao
vivo/terminada/planejada etc.
zap:
title: Zap $name
custom_amount: Valor personalizado
confirm: Confirmar
comment: Comentar
button_zap_ready: Enviar Zap de $amount sats
button_zap: Zap
button_open_wallet: Abrir na carteira
button_connect_wallet: Conectar carteira
copy: Copiado para a área de transferência
error:
invalid_custom_amount: Valor personalizado inválido
no_wallet: Nenhuma carteira lightning instalada
no_lud16: Nenhum endereço de raio encontrado
profile:
past_streams: Transmissões Passadas
settings:
button_profile: Editar perfil
button_wallet: Configurações da carteira
profile:
display_name: Nome de exibição
about: Sobre
nip05: Endereço Nostr
lud16: Endereço para relâmpagos
error:
logged_out: Não é possível editar o perfil quando se está desconectado
wallet:
connect_wallet: Carteira Connect (NWC nostr+walletconnect://)
disconnect_wallet: Desconectar carteira
connect_1tap: Conexão de 1 torneira
paste: Colar URL
error:
logged_out: Não consigo conectar a carteira quando estou desconectado
nwc_auth_event_not_found: Nenhum evento de autenticação de carteira encontrado
login:
username: Nome de usuário
amber: Faça login com o Amber
key: Login com chave
create: Criar Conta
error:
invalid_key: Chave inválida

View File

@ -0,0 +1,137 @@
upload_avatar: Încărcați Avatar
"@upload_avatar":
description: Text care solicită utilizatorului să atingă marcajul avatar pentru
a începe încărcarea
most_zapped_streamers: Cele mai multe Streamers Zapped
"@most_zapped_streamers":
description: Cap peste streamers de top enumerate de zaps
no_user_found: Niciun utilizator găsit
"@no_user_found":
description: Nu s-a găsit niciun utilizator la căutare
anon: Anon
viewers:
one: 1 vizualizator
other: ${n:decimalPattern} telespectatori
"@viewers":
description: Numărul de telespectatori ai fluxului
"@anon":
description: Un utilizator anonim
stream:
status:
live: ÎN DIRECT
ended: TERMINAT
planned: PLANIFICATE
started: A început $timestamp
chat:
disabled: CHAT DEZACTIVAT
disabled_timeout: "Timpul expiră: $time"
timeout(rich): $mod Timed out $user pentru $time
"@timeout":
description: Mesaj de chat care afișează evenimentele de timeout
ended: STREAM ÎNCHEIAT
"@ended":
description: Stream a încheiat footer-ul în partea de jos a chat-ului
zap(rich): $user zapped $amount sats
"@zap":
description: Mesaj de chat care arată zapsuri de flux
write:
label: Scrieți mesajul
"@label":
description: Etichetă pe caseta de introducere a mesajului de chat
no_signer: Nu se pot scrie mesaje cu autentificarea npub
"@no_signer":
description: Mesajul de intrare în chat afișat atunci când utilizatorul este
conectat doar cu pubkey
login: Vă rugăm să vă autentificați pentru a trimite mesaje
"@login":
description: Mesajul de intrare în chat afișat atunci când utilizatorul este
deconectat
badge:
awarded_to: "Premiat pentru:"
"@awarded_to":
description: Antet peste lista de utilizatori care au primit o insignă
raid:
to: RAIDING $name
"@to":
description: Chat mesaj raid la un alt flux
from: RAID DE LA $name
"@from":
description: Chat raid mesaj din alt flux
countdown: Raiduri în $time
"@countdown":
description: Cronometru cu numărătoare inversă pentru auto-raid
goal:
title: "Obiectiv: $amount"
remaining: "Rămase: $amount"
complete: COMPLET
button:
login: Autentificare
logout: Ieșire
edit_profile: Editare profil
"@login":
description: Textul butonului pentru butonul de conectare
follow: Urmați
"@follow":
description: Textul butonului pentru butonul de urmărire
unfollow: Unfollow
"@unfollow":
description: Textul butonului pentru butonul unfollow
mute: Mut
unmute: Dezactivați
share: Share
save: Salvați
connect: Conectare
settings: Setări
embed:
article_by: Articol de $name
note_by: Notă de la $name
live_stream_by: Transmisiune live prin $name
stream_list:
following: În urma
live: În direct
planned: Planificate
ended: Încheiat
"@stream_list":
description: Rubrici pe listele de fluxuri în funcție de tipul fluxului în
direct/terminat/planificat etc.
zap:
title: Zap $name
custom_amount: Sumă personalizată
confirm: Confirmați
comment: Comentariu
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Deschide în portofel
button_connect_wallet: Conectați portofelul
copy: Copiat în clipboard
error:
invalid_custom_amount: Sumă personalizată invalidă
no_wallet: Nu este instalat niciun portofel Lightning
no_lud16: Nu a fost găsită nicio adresă de fulgere
profile:
past_streams: Fluxuri trecute
settings:
button_profile: Editare profil
button_wallet: Setări portofel
profile:
display_name: Nume afișat
about: Despre
nip05: Adresa Nostr
lud16: Adresa fulgerului
error:
logged_out: Nu pot edita profilul când sunt deconectat
wallet:
connect_wallet: Conectați portofelul (NWC nostr+walletconnect://)
disconnect_wallet: Deconectați portofelul
connect_1tap: Conexiune 1-Tap
paste: Lipiți URL
error:
logged_out: Nu puteți conecta portofelul atunci când sunteți deconectat
nwc_auth_event_not_found: Nu a fost găsit niciun eveniment de autorizare a portofelului
login:
username: Nume utilizator
amber: Conectați-vă cu Amber
key: Autentificare cu cheie
create: Creare cont
error:
invalid_key: Cheie invalidă

View File

@ -0,0 +1,137 @@
upload_avatar: Загрузить аватар
"@upload_avatar":
description: Текст, побуждающий пользователя нажать кнопку с изображением
аватара, чтобы начать загрузку
most_zapped_streamers: Самые прыткие стримеры
"@most_zapped_streamers":
description: Направляясь по перечисленным верхним стримерам с помощью запс
no_user_found: Пользователь не найден
"@no_user_found":
description: Пользователь не найден при поиске
anon: Аноним
viewers:
one: 1 зритель
other: ${n:decimalPattern} зрителей
"@viewers":
description: Количество зрителей потока
"@anon":
description: Анонимный пользователь
stream:
status:
live: LIVE
ended: КОНЕЦ
planned: ПЛАНИРУЕМЫЙ
started: Начало $timestamp
chat:
disabled: ЧАТ ОТКЛЮЧЕН
disabled_timeout: "Таймаут истекает: $time"
timeout(rich): $mod тайм-аут $user для $time
"@timeout":
description: Сообщение в чате, показывающее события по тайм-ауту
ended: ТРАНСЛЯЦИЯ ОКОНЧЕНА
"@ended":
description: Поток закончился в нижней части чата
zap(rich): $user запнул $amount сат
"@zap":
description: Сообщение в чате, отображающее потоковые зазоры
write:
label: Написать сообщение
"@label":
description: Надпись на поле ввода сообщения чата
no_signer: Невозможно писать сообщения с логином npub
"@no_signer":
description: Сообщение о входе в чат, отображаемое при входе пользователя только
с pubkey
login: Пожалуйста, войдите в систему, чтобы отправлять сообщения
"@login":
description: Сообщение о входе в чат, отображаемое при выходе пользователя из
системы
badge:
awarded_to: "Награждается:"
"@awarded_to":
description: Заголовок над списком пользователей, награжденных значком
raid:
to: RAIDING $name
"@to":
description: Сообщение о рейде в чате в другой поток
from: RAID FROM $name
"@from":
description: Сообщение о рейде в чате из другого потока
countdown: Рейды в $time
"@countdown":
description: Таймер обратного отсчета для автопоездки
goal:
title: "Цель: $amount"
remaining: "Осталось: $amount"
complete: КОМПЛЕКТ
button:
login: Логин
logout: Выйти
edit_profile: Редактировать профиль
"@login":
description: Текст кнопки для входа в систему
follow: Подписаться
"@follow":
description: Текст кнопки для кнопки следования
unfollow: Отписаться
"@unfollow":
description: Текст кнопки для кнопки "Развернуть
mute: Заглушить
unmute: Включить уведомления
share: Поделиться
save: Сохранить
connect: Подключайтесь
settings: Настройки
embed:
article_by: Статья $name
note_by: Заметка на сайте $name
live_stream_by: "Прямая трансляция: $name"
stream_list:
following: Подписки
live: Прямой эфир
planned: Запланировано
ended: Завершено
"@stream_list":
description: Заголовки в списках потоков по типу потока -
живой/законченный/запланированный и т. д.
zap:
title: Запнуть ($name
custom_amount: Пользовательская сумма
confirm: Подтвердить
comment: Комментарий
button_zap_ready: Запнуть $amount сат
button_zap: Зап
button_open_wallet: Открыть в кошельке
button_connect_wallet: Подключить кошелек
copy: Скопировано в буфер обмена
error:
invalid_custom_amount: Недопустимая пользовательская сумма
no_wallet: Кошелек молнии не установлен
no_lud16: Адрес молнии не найден
profile:
past_streams: Предыдущие трансляции
settings:
button_profile: Редактировать профиль
button_wallet: Настройки кошелька
profile:
display_name: Отображаемое имя
about: О сайте
nip05: Адрес Ностр
lud16: Адрес молнии
error:
logged_out: Невозможно редактировать профиль при выходе из системы
wallet:
connect_wallet: Кошелек Connect (NWC nostr+walletconnect://)
disconnect_wallet: Отключить кошелек
connect_1tap: 1-кратное соединение
paste: Вставить URL
error:
logged_out: Невозможно подключить кошелек при выходе из системы
nwc_auth_event_not_found: Событие аутентификации кошелька не найдено
login:
username: Имя пользователя
amber: Войти с помощью Amber
key: Вход в систему с помощью ключа
create: Создать аккаунт
error:
invalid_key: Неверный ключ

View File

@ -0,0 +1,135 @@
upload_avatar: Ladda upp avatar
"@upload_avatar":
description: Text som uppmanar användaren att trycka på avatarplatshållaren för
att påbörja uppladdningen
most_zapped_streamers: De flesta zappade streamers
"@most_zapped_streamers":
description: Rubrik över listade toppstreamers av zaps
no_user_found: Ingen användare hittades
"@no_user_found":
description: Ingen användare hittades vid sökning
anon: Anon
viewers:
one: 1 tittare
other: ${n:decimalPattern} tittare
"@viewers":
description: Antal tittare på streamingen
"@anon":
description: En anonym användare
stream:
status:
live: LIVE
ended: AVSLUTAD
planned: PLANERADE
started: Startade $timestamp
chat:
disabled: CHAT AVSTÄNGD
disabled_timeout: "Tidsgränsen går ut: $time"
timeout(rich): $mod tidsbegränsad $user för $time
"@timeout":
description: Chattmeddelande som visar timeout-händelser
ended: STREAM AVSLUTAD
"@ended":
description: Stream avslutade sidfoten längst ner på chatten
zap(rich): $user zapped $amount sats
"@zap":
description: Chattmeddelande som visar strömavbrott
write:
label: Skriv meddelande
"@label":
description: Etikett på inmatningsrutan för chattmeddelanden
no_signer: Det går inte att skriva meddelanden med npub-inloggning
"@no_signer":
description: Chattinmatningsmeddelande som visas när användaren endast är
inloggad med pubkey
login: Logga in för att skicka meddelanden
"@login":
description: Chattinmatningsmeddelande som visas när användaren är utloggad
badge:
awarded_to: "Tilldelas till:"
"@awarded_to":
description: Rubrik över lista över användare som tilldelats en badge
raid:
to: RAIDING $name
"@to":
description: Chatta raidmeddelande till en annan ström
from: RAID FRÅN $name
"@from":
description: Chat raid-meddelande från en annan ström
countdown: Raiding på $time
"@countdown":
description: Nedräkningstimer för auto-raiding
goal:
title: "Mål: $amount"
remaining: "Kvarvarande: $amount"
complete: KOMPLETT
button:
login: Logga in
logout: Logga ut
edit_profile: Redigera profil
"@login":
description: Knapptext för inloggningsknappen
follow: Följ
"@follow":
description: Knapptext för följ-knappen
unfollow: Sluta följa
"@unfollow":
description: Knapptext för avföljningsknappen
mute: Tysta
unmute: Avtysta
share: Dela
save: Spara
connect: Anslut
settings: Inställningar
embed:
article_by: Artikel av $name
note_by: Anteckning av $name
live_stream_by: Direktsändning via $name
stream_list:
following: Följer
live: Live
planned: Planerade
ended: Avslutade
"@stream_list":
description: Rubriker på strömlistor efter strömtyp live/avslutad/planerad etc.
zap:
title: Zap $name
custom_amount: Anpassat belopp
confirm: Bekräfta
comment: Kommentar
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Öppna i plånboken
button_connect_wallet: Anslut plånbok
copy: Kopieras till urklipp
error:
invalid_custom_amount: Ogiltigt anpassat belopp
no_wallet: Ingen blixtplånbok installerad
no_lud16: Ingen blixtadress hittades
profile:
past_streams: Tidigare streamar
settings:
button_profile: Redigera profil
button_wallet: Inställningar för plånbok
profile:
display_name: Visa namn
about: Om
nip05: Nostr Adress
lud16: Adress för blixtnedslag
error:
logged_out: Kan inte redigera profil när jag är utloggad
wallet:
connect_wallet: Connect plånbok (NWC nostr+walletconnect://)
disconnect_wallet: Koppla bort plånboken
connect_1tap: 1-Tap-anslutning
paste: Klistra in URL
error:
logged_out: Kan inte ansluta plånbok när du är inloggad
nwc_auth_event_not_found: Inget autentiseringshändelse för plånbok hittades
login:
username: Användarnamn
amber: Logga in med Amber
key: Logga in med nyckel
create: Skapa konto
error:
invalid_key: Ogiltig nyckel

View File

@ -0,0 +1,135 @@
upload_avatar: Avatar Yükle
"@upload_avatar":
description: Kullanıcının yüklemeye başlamak için avatar yer tutucusuna
basmasını isteyen metin
most_zapped_streamers: En Çok Zaplanan Flamalar
"@most_zapped_streamers":
description: Zaps tarafından listelenen üst flamalar üzerinde ilerliyor
no_user_found: Kullanıcı bulunamadı
"@no_user_found":
description: Arama yaparken kullanıcı bulunamadı
anon: Anon
viewers:
one: 1 izleyici
other: ${n:decimalPattern} izleyiciler
"@viewers":
description: Akışı izleyenlerin sayısı
"@anon":
description: Anonim bir kullanıcı
stream:
status:
live: CANLI
ended: SONLANDI
planned: PLANLANMIŞ
started: Başlatıldı $timestamp
chat:
disabled: SOHBET DEVRE DIŞI
disabled_timeout: "Zaman aşımı sona eriyor: $time"
timeout(rich): $mod zaman aşımına uğradı $user için $time
"@timeout":
description: Zaman aşımı olaylarını gösteren sohbet mesajı
ended: YAYIN SONLANDI
"@ended":
description: Sohbetin alt kısmında akış sona erdi altbilgisi
zap(rich): $user zapped $amount sats
"@zap":
description: Akış zaplarını gösteren sohbet mesajı
write:
label: Mesaj yaz
"@label":
description: Sohbet mesajı giriş kutusundaki etiket
no_signer: Npub girişi ile mesaj yazılamıyor
"@no_signer":
description: Kullanıcı yalnızca pubkey ile oturum açtığında gösterilen sohbet
giriş mesajı
login: Mesaj göndermek için lütfen giriş yapın
"@login":
description: Kullanıcı oturumu kapatıldığında gösterilen sohbet giriş mesajı
badge:
awarded_to: "Ödüllendirildi:"
"@awarded_to":
description: Rozet verilen kullanıcıların listesi üzerinde başlık
raid:
to: RAIDING ${name}
"@to":
description: Başka bir akışa sohbet baskını mesajı
from: ${name}ADRESINDEN RAID
"@from":
description: Başka bir akıştan sohbet baskını mesajı
countdown: ${time}adresinde baskın
"@countdown":
description: Otomatik sürüş için geri sayım sayacı
goal:
title: "Hedef: $amount"
remaining: "Kalan: $amount"
complete: TAMAMLANDI
button:
login: Giriş
logout: Oturum Kapatma
edit_profile: Profil Düzenle
"@login":
description: Oturum açma düğmesi için düğme metni
follow: Takip et
"@follow":
description: Takip et düğmesi için düğme metni
unfollow: Takibi bırak
"@unfollow":
description: Takibi bırak düğmesi için düğme metni
mute: Sessiz
unmute: Sesi aç
share: Paylaş
save: Kaydet
connect: Bağlan
settings: Ayarlar
embed:
article_by: Makale $name
note_by: "Not: $name"
live_stream_by: "Canlı yayın: $name"
stream_list:
following: Aşağıdaki
live: Canlı
planned: Planlanmış
ended: Bitti
"@stream_list":
description: Akış türüne göre akış listelerindeki başlıklar canlı/bitmiş/planlanan vb.
zap:
title: Zap $name
custom_amount: Özel Tutar
confirm: Onaylayın
comment: Yorum
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Cüzdanda Aç
button_connect_wallet: Cüzdan Bağlayın
copy: Panoya kopyalandı
error:
invalid_custom_amount: Geçersiz özel tutar
no_wallet: Lightning cüzdan yüklü değil
no_lud16: Yıldırım adresi bulunamadı
profile:
past_streams: Geçmiş Akışlar
settings:
button_profile: Profil Düzenle
button_wallet: Cüzdan Ayarları
profile:
display_name: Ekran Adı
about: Hakkında
nip05: Nostr Adres
lud16: Yıldırım Adres
error:
logged_out: Çıkış yapıldığında profil düzenlenemiyor
wallet:
connect_wallet: Connect Cüzdan (NWC nostr+walletconnect://)
disconnect_wallet: Cüzdan Bağlantısını Kes
connect_1tap: 1-Tap Bağlantı
paste: URL Yapıştır
error:
logged_out: Oturumu kapattığımda cüzdana bağlanamıyorum
nwc_auth_event_not_found: Cüzdan yetkilendirme olayı bulunamadı
login:
username: Kullanıcı Adı
amber: Amber ile Giriş Yapın
key: Anahtar ile Giriş Yapın
create: Hesap Oluştur
error:
invalid_key: Geçersiz anahtar

View File

@ -0,0 +1,137 @@
upload_avatar: Завантажити аватар
"@upload_avatar":
description: Текст, що пропонує користувачеві натиснути на заповнювач аватара,
щоб почати завантаження
most_zapped_streamers: Більшість стримерів, які були під напругою
"@most_zapped_streamers":
description: Перехід до переліку найкращих стрімерів за запитами
no_user_found: Користувача не знайдено
"@no_user_found":
description: Користувача не знайдено при пошуку
anon: Анонім.
viewers:
one: 1 глядач
other: ${n:decimalPattern} глядачів
"@viewers":
description: Кількість глядачів стріму
"@anon":
description: Анонімний користувач
stream:
status:
live: НАЖИВО
ended: ЗАКІНЧЕНО
planned: ЗАПЛАНОВАНО
started: Запустив $timestamp
chat:
disabled: ЧАТ ВІДКЛЮЧЕНО
disabled_timeout: "Тайм-аут закінчився: $time"
timeout(rich): $mod таймінг $user для $time
"@timeout":
description: Повідомлення в чаті про події тайм-ауту
ended: СТРІМ ЗАКІНЧИВСЯ
"@ended":
description: Нижній колонтитул кінця потоку внизу чату
zap(rich): $user zapped $amount sats
"@zap":
description: Повідомлення в чаті, що показує затримки потоку
write:
label: Написати повідомлення
"@label":
description: Мітка у вікні введення повідомлення чату
no_signer: Неможливо писати повідомлення з логіном npub
"@no_signer":
description: Повідомлення в чаті, що відображається, коли користувач увійшов до
системи лише з ключем pubkey
login: Будь ласка, авторизуйтесь, щоб надсилати повідомлення
"@login":
description: Повідомлення для введення в чаті, що відображається, коли
користувач вийшов з системи
badge:
awarded_to: "Нагороджується:"
"@awarded_to":
description: Над списком користувачів, яким присвоєно бейдж
raid:
to: RAIDING $name
"@to":
description: Повідомлення про рейд чату в інший потік
from: RAID FROM $name
"@from":
description: Повідомлення про наліт на чат з іншого потоку
countdown: Рейд у $time
"@countdown":
description: Таймер зворотного відліку для авторейду
goal:
title: "Мета: $amount"
remaining: "Залишилося: $amount"
complete: ЗАВЕРШИТИ
button:
login: Логін
logout: Вийти з системи
edit_profile: Редагувати профіль
"@login":
description: Текст для кнопки входу в систему
follow: Підпишіться
"@follow":
description: Текст для кнопки переходу
unfollow: Скасувати відповідь
"@unfollow":
description: Текст для кнопки відписки
mute: Вимкнути звук.
unmute: Увімкнути звук.
share: Поділіться
save: Зберегти
connect: Підключіться
settings: Налаштування
embed:
article_by: Стаття за посиланням $name
note_by: Примітка $name
live_stream_by: Пряма трансляція на $name
stream_list:
following: Після того, як
live: Наживо
planned: Заплановано
ended: Закінчилося
"@stream_list":
description: "Заголовки у списках трансляцій за типом трансляції:
наживо/закінчилася/запланована тощо."
zap:
title: Zap $name
custom_amount: Нестандартна сума
confirm: Підтвердити
comment: Коментар
button_zap_ready: Zap $amount sats
button_zap: Zap!
button_open_wallet: Відкрити в Гаманці
button_connect_wallet: Підключити гаманець
copy: Скопійовано в буфер обміну
error:
invalid_custom_amount: Неправильна сума замовлення
no_wallet: Не встановлено гаманець-блискавку
no_lud16: Адреса блискавки не знайдена
profile:
past_streams: Минулі потоки
settings:
button_profile: Редагувати профіль
button_wallet: Налаштування гаманця
profile:
display_name: Ім'я користувача
about: Про
nip05: Nostr Адреса
lud16: Блискавична адреса
error:
logged_out: Неможливо редагувати профіль, коли ви вийшли з системи
wallet:
connect_wallet: Підключити гаманець (NWC nostr+walletconnect://)
disconnect_wallet: Відключити гаманець
connect_1tap: Підключення в 1 кран
paste: Вставити URL-адресу
error:
logged_out: Не вдається підключити гаманець, коли ви вийшли з системи
nwc_auth_event_not_found: Не знайдено жодної події авторизації гаманця
login:
username: Ім'я користувача
amber: Увійдіть за допомогою Amber
key: Увійдіть за допомогою ключа
create: Створити обліковий запис
error:
invalid_key: Неправильний ключ

View File

@ -0,0 +1,133 @@
upload_avatar: 上傳頭像
"@upload_avatar":
description: 提示使用者點擊頭像占位符開始上傳的文字
most_zapped_streamers: 最多被擊中的溪流
"@most_zapped_streamers":
description: ヘッドランドから列されている頂幡からずった
no_user_found: 未找到使用者
"@no_user_found":
description: 搜尋時未找到使用者
anon: 匿名
viewers:
one: 1 個檢視器
other: ${n:decimalPattern} 觀眾
"@viewers":
description: 串流的觀看者人數
"@anon":
description: 匿名使用者
stream:
status:
live: 直播
ended: 結束
planned: 計劃
started: 開始 $timestamp
chat:
disabled: 關閉聊天
disabled_timeout: 超時過期: $time
timeout(rich): $mod 超時 $user for $time
"@timeout":
description: 顯示逾時事件的聊天訊息
ended: 串流結束
"@ended":
description: 聊天底部的流結束頁尾
zap(rich): $user 打閃了 $amount 聰
"@zap":
description: 聊天訊息顯示串流斷點
write:
label: 寫訊息
"@label":
description: 聊天訊息輸入方塊上的標籤
no_signer: 無法使用 npub 登入撰寫訊息
"@no_signer":
description: 當使用者僅使用 pubkey 登入時,會顯示聊天輸入訊息
login: 請登入以傳送訊息
"@login":
description: 使用者登出時顯示聊天輸入訊息
badge:
awarded_to: 頒發給
"@awarded_to":
description: 被授予徽章的使用者清單上的標題
raid:
to: RAIDING $name
"@to":
description: 聊天突擊消息到另一個串流
from: RAID FROM $name
"@from":
description: 來自其他串流的聊天突襲訊息
countdown: 突襲 $time
"@countdown":
description: 自動騎乘倒數計時器
goal:
title: 目標:$amount
remaining: 剩餘: $amount
complete: 完成
button:
login: 登錄
logout: 登出
edit_profile: 編輯個人檔案
"@login":
description: 登入按鈕的按鈕文字
follow: 關注
"@follow":
description: 跟蹤按鈕的按鈕文字
unfollow: 取消關注
"@unfollow":
description: 取消關注按鈕的按鈕文字
mute: 靜音
unmute: 解除静音
share: 分享
save: 保存
connect: 連接
settings: 設定
embed:
article_by: 文章來源: $name
note_by: $name 的筆記
live_stream_by: Live stream by $name
stream_list:
following: 已關注
live: 直播
planned: 已計畫
ended: 已結束
"@stream_list":
description: 串流清單上的標題依串流類型為現場/結束/計劃中等。
zap:
title: 打閃$name
custom_amount: 自訂金額
confirm: 確認
comment: 評論
button_zap_ready: 打閃 $amount 聰
button_zap: 打閃
button_open_wallet: 在錢包中開啟
button_connect_wallet: 連接錢包
copy: 複製到剪貼簿
error:
invalid_custom_amount: 無效自訂金額
no_wallet: 未安裝閃電錢夾
no_lud16: 未找到閃電地址
profile:
past_streams: 過去的直播
settings:
button_profile: 編輯個人資料
button_wallet: 錢包設定
profile:
display_name: 顯示名稱
about: 關於
nip05: 地址
lud16: 閃電地址
error:
logged_out: 登出時無法編輯個人資料
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: 斷開錢包
connect_1tap: 1 抽頭連接
paste: 貼上 URL
error:
logged_out: 登出時無法連接錢包
nwc_auth_event_not_found: 未找到錢包認證事件
login:
username: 用戶名
amber: 使用 Amber 登入
key: 使用鑰匙登入
create: 創建帳戶
error:
invalid_key: 無效按鍵

View File

@ -1,7 +1,10 @@
import 'dart:convert'; import 'dart:convert';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:convert/convert.dart'; import 'package:convert/convert.dart';
import 'package:crypto/crypto.dart'; import 'package:crypto/crypto.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_svg/svg.dart';
import 'package:zap_stream_flutter/theme.dart';
class ImgProxySettings { class ImgProxySettings {
final String url; final String url;
@ -12,11 +15,12 @@ class ImgProxySettings {
static ImgProxySettings static() { static ImgProxySettings static() {
return ImgProxySettings( return ImgProxySettings(
url: "https://imgproxy.v0l.io", url: "https://imgproxy.v0l.io",
key: key:
"a82fcf26aa0ccb55dfc6b4bd6a1c90744d3be0f38429f21a8828b43449ce7cebe6bdc2b09a827311bef37b18ce35cb1e6b1c60387a254541afa9e5b4264ae942", "a82fcf26aa0ccb55dfc6b4bd6a1c90744d3be0f38429f21a8828b43449ce7cebe6bdc2b09a827311bef37b18ce35cb1e6b1c60387a254541afa9e5b4264ae942",
salt: salt:
"a897770d9abf163de055e9617891214e75a9016d748f8ef865e6ffbcb9ed932295659549773a22a019a5f06d0b440c320be411e3fddfe784e199e4f03d74bd9b"); "a897770d9abf163de055e9617891214e75a9016d748f8ef865e6ffbcb9ed932295659549773a22a019a5f06d0b440c320be411e3fddfe784e199e4f03d74bd9b",
);
} }
} }
@ -35,8 +39,14 @@ String signUrl(String u, ImgProxySettings settings) {
return urlSafe(base64.encode(result.bytes)); return urlSafe(base64.encode(result.bytes));
} }
String proxyImg(BuildContext context, String url, String proxyImg(
{ImgProxySettings? settings, int? resize, String? sha256, double? dpr}) { BuildContext context,
String url, {
ImgProxySettings? settings,
int? resize,
String? sha256,
double? dpr,
}) {
final s = settings ?? ImgProxySettings.static(); final s = settings ?? ImgProxySettings.static();
if (url.startsWith("data:") || url.startsWith("blob:") || url.isEmpty) { if (url.startsWith("data:") || url.startsWith("blob:") || url.isEmpty) {
@ -64,3 +74,46 @@ String proxyImg(BuildContext context, String url,
return '${s.url}/$sig$path'; return '${s.url}/$sig$path';
} }
class ProxyImg extends StatelessWidget {
final String? url;
/// Size of the placeholder & error images
final double? placeholderSize;
/// request imgproxy to resize the image
final int? resize;
final double? width;
final double? height;
const ProxyImg({
super.key,
required this.url,
this.placeholderSize,
this.resize,
this.width,
this.height,
});
@override
Widget build(BuildContext context) {
return CachedNetworkImage(
imageUrl: proxyImg(context, url ?? "", resize: resize),
width: width,
height: height,
fit: BoxFit.cover,
placeholderFadeInDuration: Duration.zero,
fadeOutDuration: Duration.zero,
placeholder:
(ctx, url) =>
SvgPicture.asset("assets/svg/logo.svg", height: placeholderSize),
errorWidget:
(context, url, error) => SvgPicture.asset(
"assets/svg/logo.svg",
height: placeholderSize,
colorFilter: ColorFilter.mode(WARNING, BlendMode.srcATop),
),
);
}
}

View File

@ -1,24 +1,82 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:developer' as developer; import 'dart:developer' as developer;
import 'package:collection/collection.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:ndk/domain_layer/entities/account.dart'; import 'package:ndk/ndk.dart';
import 'package:ndk/shared/nips/nip01/bip340.dart'; import 'package:ndk/shared/nips/nip01/bip340.dart';
import 'package:ndk/shared/nips/nip19/nip19.dart'; import 'package:ndk/shared/nips/nip19/nip19.dart';
import 'package:zap_stream_flutter/const.dart';
import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/utils.dart';
enum WalletType { nwc }
class WalletConfig {
final WalletType type;
final String data;
final String? privateKey;
WalletConfig({required this.type, required this.data, this.privateKey});
Map<String, dynamic> toJson() {
return {"type": type.name, "data": data, "privateKey": privateKey};
}
static WalletConfig fromJson(Map<String, dynamic> json) {
final type = WalletType.values.firstWhereOrNull(
(v) => v.name == json["type"],
);
if (type == null) {
throw "Invalid wallet type: ${json["type"]}";
}
return WalletConfig(
type: type,
data: json["data"],
privateKey: json["privateKey"],
);
}
}
abstract class SimpleWallet {
Future<String> payInvoice(String pr);
}
class NWCWrapper extends SimpleWallet {
final NwcConnection _conn;
NWCWrapper({required NwcConnection conn}) : _conn = conn;
@override
Future<String> payInvoice(String pr) async {
final rsp = await ndk.nwc.payInvoice(
_conn,
invoice: pr,
timeout: Duration(seconds: 60),
);
if (rsp.preimage == null) {
throw "Payment failed, preimage missing";
} else {
return rsp.preimage!;
}
}
}
class LoginAccount { class LoginAccount {
final AccountType type; final AccountType type;
final String pubkey; final String pubkey;
final String? privateKey; final String? privateKey;
final List<String>? signerRelays; final List<String>? signerRelays;
final WalletConfig? wallet;
LoginAccount._({ SimpleWallet? _cachedWallet;
LoginAccount({
required this.type, required this.type,
required this.pubkey, required this.pubkey,
this.privateKey, this.privateKey,
this.signerRelays, this.signerRelays,
this.wallet,
}); });
static LoginAccount nip19(String key) { static LoginAccount nip19(String key) {
@ -26,7 +84,7 @@ class LoginAccount {
final pubkey = final pubkey =
Nip19.isKey("nsec", key) ? Bip340.getPublicKey(keyData) : keyData; Nip19.isKey("nsec", key) ? Bip340.getPublicKey(keyData) : keyData;
final privateKey = Nip19.isKey("npub", key) ? null : keyData; final privateKey = Nip19.isKey("npub", key) ? null : keyData;
return LoginAccount._( return LoginAccount(
type: type:
Nip19.isKey("npub", key) Nip19.isKey("npub", key)
? AccountType.publicKey ? AccountType.publicKey
@ -37,7 +95,7 @@ class LoginAccount {
} }
static LoginAccount privateKeyHex(String key) { static LoginAccount privateKeyHex(String key) {
return LoginAccount._( return LoginAccount(
type: AccountType.privateKey, type: AccountType.privateKey,
privateKey: key, privateKey: key,
pubkey: Bip340.getPublicKey(key), pubkey: Bip340.getPublicKey(key),
@ -45,7 +103,7 @@ class LoginAccount {
} }
static LoginAccount externalPublicKeyHex(String key) { static LoginAccount externalPublicKeyHex(String key) {
return LoginAccount._(type: AccountType.externalSigner, pubkey: key); return LoginAccount(type: AccountType.externalSigner, pubkey: key);
} }
static LoginAccount bunker( static LoginAccount bunker(
@ -53,7 +111,7 @@ class LoginAccount {
String pubkey, String pubkey,
List<String> relays, List<String> relays,
) { ) {
return LoginAccount._( return LoginAccount(
type: AccountType.externalSigner, type: AccountType.externalSigner,
pubkey: pubkey, pubkey: pubkey,
privateKey: privateKey, privateKey: privateKey,
@ -65,6 +123,7 @@ class LoginAccount {
"type": acc?.type.name, "type": acc?.type.name,
"pubKey": acc?.pubkey, "pubKey": acc?.pubkey,
"privateKey": acc?.privateKey, "privateKey": acc?.privateKey,
"wallet": acc?.wallet?.toJson(),
}; };
static LoginAccount? fromJson(Map<String, dynamic> json) { static LoginAccount? fromJson(Map<String, dynamic> json) {
@ -78,16 +137,38 @@ class LoginAccount {
throw "Invalid privateKey, length != 64"; throw "Invalid privateKey, length != 64";
} }
} }
return LoginAccount._( return LoginAccount(
type: AccountType.values.firstWhere( type: AccountType.values.firstWhere(
(v) => v.toString().endsWith(json["type"] as String), (v) => v.toString().endsWith(json["type"] as String),
), ),
pubkey: json["pubKey"], pubkey: json["pubKey"],
privateKey: json["privateKey"], privateKey: json["privateKey"],
wallet:
json.containsKey("wallet") && json["wallet"] != null
? WalletConfig.fromJson(json["wallet"])
: null,
); );
} }
return null; return null;
} }
Future<SimpleWallet?> getWallet() async {
if (_cachedWallet == null && wallet != null) {
switch (wallet!.type) {
case WalletType.nwc:
{
try {
final conn = await ndk.nwc.connect(wallet!.data);
_cachedWallet = NWCWrapper(conn: conn);
} catch (e) {
developer.log("Failed to setup wallet: $e");
}
break;
}
}
}
return _cachedWallet;
}
} }
class LoginData extends ValueNotifier<LoginAccount?> { class LoginData extends ValueNotifier<LoginAccount?> {

View File

@ -1,179 +1,24 @@
import 'package:amberflutter/amberflutter.dart'; import 'dart:developer' as developer;
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:ndk/ndk.dart'; import 'package:zap_stream_flutter/app.dart';
import 'package:ndk_amber/ndk_amber.dart'; import 'package:zap_stream_flutter/const.dart';
import 'package:ndk_objectbox/ndk_objectbox.dart'; import 'package:zap_stream_flutter/i18n/strings.g.dart';
import 'package:ndk_rust_verifier/ndk_rust_verifier.dart'; import 'package:zap_stream_flutter/notifications.dart';
import 'package:zap_stream_flutter/pages/category.dart';
import 'package:zap_stream_flutter/pages/hashtag.dart';
import 'package:zap_stream_flutter/pages/login.dart';
import 'package:zap_stream_flutter/pages/login_input.dart';
import 'package:zap_stream_flutter/pages/new_account.dart';
import 'package:zap_stream_flutter/pages/profile.dart';
import 'package:zap_stream_flutter/pages/stream.dart';
import 'package:zap_stream_flutter/theme.dart';
import 'package:zap_stream_flutter/utils.dart';
import 'login.dart';
import 'pages/home.dart';
import 'pages/layout.dart';
class NoVerify extends EventVerifier {
@override
Future<bool> verify(Nip01Event event) {
return Future.value(true);
}
}
final ndkCache = DbObjectBox();
final eventVerifier = kDebugMode ? NoVerify() : RustEventVerifier();
var ndk = Ndk(
NdkConfig(
eventVerifier: eventVerifier,
cache: ndkCache,
bootstrapRelays: defaultRelays,
//engine: NdkEngine.JIT,
),
);
const userAgent = "zap.stream/1.0";
const defaultRelays = [
"wss://nos.lol",
"wss://relay.damus.io",
"wss://relay.primal.net",
"wss://relay.snort.social",
"wss://relay.fountain.fm",
];
const searchRelays = ["wss://relay.nostr.band", "wss://search.nos.today"];
final loginData = LoginData();
Future<void> main() async { Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await LocaleSettings.useDeviceLocale();
//await LocaleSettings.setLocaleRaw("zh");
await dotenv.load(fileName: kDebugMode ? ".env.development" : ".env");
// reload / cache login data await initLogin();
loginData.addListener(() {
if (loginData.value != null) { setupNotifications().catchError((e) {
final pubkey = loginData.value!.pubkey; developer.log("Failed to setup notifications: $e");
if (!ndk.accounts.hasAccount(pubkey)) {
switch (loginData.value!.type) {
case AccountType.privateKey:
ndk.accounts.loginPrivateKey(
pubkey: pubkey,
privkey: loginData.value!.privateKey!,
);
case AccountType.externalSigner:
ndk.accounts.loginExternalSigner(
signer: AmberEventSigner(
publicKey: pubkey,
amberFlutterDS: AmberFlutterDS(Amberflutter()),
),
);
case AccountType.publicKey:
ndk.accounts.loginPublicKey(pubkey: pubkey);
}
}
ndk.metadata.loadMetadata(pubkey);
ndk.follows.getContactList(pubkey);
} else {
ndk.accounts.logout();
}
}); });
await loginData.load(); runZapStream();
runApp(
MaterialApp.router(
theme: ThemeData.localize(
ThemeData(colorScheme: ColorScheme.dark(), highlightColor: PRIMARY_1),
TextTheme(),
),
routerConfig: GoRouter(
routes: [
StatefulShellRoute.indexedStack(
builder:
(context, state, navigationShell) =>
SafeArea(child: LayoutScreen(navigationShell)),
branches: [
StatefulShellBranch(
routes: [
GoRoute(path: "/", builder: (ctx, state) => HomePage()),
ShellRoute(
builder: (context, state, child) {
return Container(
margin: EdgeInsets.only(top: 50),
padding: EdgeInsets.symmetric(horizontal: 5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 20,
children: [
Center(
child: Image.asset(
"assets/logo.png",
height: 150,
),
),
child,
],
),
);
},
routes: [
GoRoute(
path: "/login",
builder: (ctx, state) => LoginPage(),
routes: [
GoRoute(
path: "key",
builder: (ctx, state) => LoginInputPage(),
),
GoRoute(
path: "new",
builder: (context, state) => NewAccountPage(),
),
],
),
],
),
GoRoute(
path: "/e/:id",
builder: (ctx, state) {
if (state.extra is StreamEvent) {
return StreamPage(stream: state.extra as StreamEvent);
} else {
throw UnimplementedError();
}
},
),
GoRoute(
path: "/p/:id",
builder: (ctx, state) {
return ProfilePage(pubkey: state.pathParameters["id"]!);
},
),
GoRoute(
path: "/t/:id",
builder: (context, state) {
return HashtagPage(tag: state.pathParameters["id"]!);
},
),
GoRoute(
path: "/category/:id",
builder: (context, state) {
return CategoryPage(
category: state.pathParameters["id"]!,
info: state.extra as GameInfo?,
);
},
),
],
),
],
),
],
),
),
);
} }

265
lib/notifications.dart Normal file
View File

@ -0,0 +1,265 @@
import 'dart:convert';
import 'dart:developer' as developer;
import 'dart:io';
import 'package:convert/convert.dart';
import 'package:crypto/crypto.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:ndk/ndk.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:zap_stream_flutter/const.dart';
import 'package:http/http.dart' as http;
import 'package:zap_stream_flutter/firebase_options.dart';
import 'package:zap_stream_flutter/utils.dart';
class Notepush {
final String base;
final EventSigner signer;
Notepush(this.base, {required this.signer});
Future<String> register(String token) async {
final pubkey = signer.getPublicKey();
final url =
"$base/user-info/$pubkey/${Uri.encodeComponent(token)}?backend=fcm";
final rsp = await _sendPutRequest(url);
return rsp.body;
}
Future<List<String>> getWatchedKeys() async {
final pubkey = signer.getPublicKey();
final url = "$base/user-info/$pubkey/notify";
final rsp = await _sendGetRequest(url);
final List<dynamic> obj = JsonCodec().decode(rsp.body);
return List<String>.from(obj);
}
Future<void> watchPubkey(String target, List<int> kinds) async {
final pubkey = signer.getPublicKey();
final url = "$base/user-info/$pubkey/notify/$target";
await _sendPutRequest(url, body: {"kinds": kinds});
}
Future<void> removeWatchPubkey(String target) async {
final pubkey = signer.getPublicKey();
final url = "$base/user-info/$pubkey/notify/$target";
await _sendDeleteRequest(url);
}
Future<void> setNotificationSettings(String token, List<int> kinds) async {
final pubkey = signer.getPublicKey();
final url =
"$base/user-info/$pubkey/${Uri.encodeComponent(token)}/preference";
await _sendPutRequest(url, body: {"kinds": kinds});
}
Future<http.Response> _sendPutRequest(String url, {Object? body}) async {
final jsonBody = body != null ? JsonCodec().encode(body) : null;
final auth = await _makeAuth("PUT", url, body: jsonBody);
final rsp = await http
.put(
Uri.parse(url),
body: jsonBody,
headers: {
"authorization": "Nostr $auth",
"accept": "application/json",
"content-type": "application/json",
},
)
.timeout(Duration(seconds: 10));
developer.log(rsp.body);
return rsp;
}
Future<http.Response> _sendGetRequest(String url, {Object? body}) async {
final jsonBody = body != null ? JsonCodec().encode(body) : null;
final auth = await _makeAuth("GET", url, body: jsonBody);
final rsp = await http
.get(
Uri.parse(url),
headers: {
"authorization": "Nostr $auth",
"accept": "application/json",
"content-type": "application/json",
},
)
.timeout(Duration(seconds: 10));
developer.log(rsp.body);
return rsp;
}
Future<http.Response> _sendDeleteRequest(String url, {Object? body}) async {
final jsonBody = body != null ? JsonCodec().encode(body) : null;
final auth = await _makeAuth("DELETE", url, body: jsonBody);
final rsp = await http
.delete(
Uri.parse(url),
headers: {
"authorization": "Nostr $auth",
"accept": "application/json",
"content-type": "application/json",
},
)
.timeout(Duration(seconds: 10));
developer.log(rsp.body);
return rsp;
}
Future<String> _makeAuth(String method, String url, {String? body}) async {
final pubkey = signer.getPublicKey();
var tags = [
["u", url],
["method", method],
];
if (body != null) {
final hash = hex.encode(sha256.convert(utf8.encode(body)).bytes);
tags.add(["payload", hash]);
}
final authEvent = Nip01Event(
pubKey: pubkey,
kind: 27235,
tags: tags,
content: "",
);
await signer.sign(authEvent);
return authEvent.toBase64();
}
}
Notepush? getNotificationService() {
final signer = ndk.accounts.getLoggedAccount()?.signer;
return signer != null
? Notepush(dotenv.env["NOTEPUSH_URL"]!, signer: signer)
: null;
}
class NotificationsState {
final AuthorizationStatus status;
final List<String> notifyKeys;
NotificationsState({required this.status, required this.notifyKeys});
NotificationsState copyWith({
AuthorizationStatus? newStatus,
List<String>? newNotifyKeys,
}) {
return NotificationsState(
status: newStatus ?? status,
notifyKeys: newNotifyKeys ?? notifyKeys,
);
}
static Future<NotificationsState> init(AuthorizationStatus status) async {
if (status == AuthorizationStatus.authorized) {
final svc = getNotificationService();
if (svc != null) {
try {
final keys = await svc.getWatchedKeys();
return NotificationsState(status: status, notifyKeys: keys);
} catch (e) {
developer.log("Failed to init NotificationsState: $e");
}
}
}
return NotificationsState(status: status, notifyKeys: []);
}
}
class NotificationsStore extends ValueNotifier<NotificationsState?> {
NotificationsStore(super.value);
Future<void> reload() async {
if (value != null && value!.status == AuthorizationStatus.authorized) {
final svc = getNotificationService();
if (svc != null) {
final keys = await svc.getWatchedKeys();
value = value!.copyWith(newNotifyKeys: keys);
}
}
}
}
// global notifications store
final notifications = NotificationsStore(null);
Future<void> setupNotifications() async {
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
final signer = ndk.accounts.getLoggedAccount()?.signer;
if (signer != null) {
final pusher = Notepush(dotenv.env["NOTEPUSH_URL"]!, signer: signer);
final fbase = FirebaseMessaging.instance;
FirebaseMessaging.onMessage.listen((msg) {
developer.log(msg.notification?.body ?? "");
final notification = msg.notification;
if (notification != null && notification.android != null) {
FlutterLocalNotificationsPlugin().show(
notification.hashCode,
notification.title,
notification.body,
NotificationDetails(
android: AndroidNotificationDetails(
notification.android!.channelId ?? "fcm",
"fcm",
),
),
);
}
});
FirebaseMessaging.onMessageOpenedApp.listen((msg) {
try {
final notification = msg.notification;
final String? json = msg.data["nostr_event"];
if (notification != null && json != null) {
// Just launch the URL because we support deep links
final event = Nip01Event.fromJson(JsonCodec().decode(json));
final stream = StreamEvent(event);
launchUrl(Uri.parse("https://zap.stream/${stream.link}"));
}
} catch (e) {
developer.log("Failed to process push notification\n ${e.toString()}");
}
});
final settings = await fbase.requestPermission(provisional: true);
await fbase.setAutoInitEnabled(true);
await fbase.setForegroundNotificationPresentationOptions(
alert: true,
badge: true,
sound: true,
);
if (Platform.isIOS) {
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken == null) {
throw "APNS token not availble";
}
}
await localNotifications.initialize(
InitializationSettings(
android: AndroidInitializationSettings("@mipmap/ic_launcher"),
iOS: DarwinInitializationSettings(),
),
);
fbase.onTokenRefresh.listen((token) async {
developer.log("NEW TOKEN: $token");
await pusher.register(token);
await pusher.setNotificationSettings(token, [30_311]);
});
final fcmToken = await FirebaseMessaging.instance.getToken();
if (fcmToken == null) {
throw "Push token is null";
}
await pusher.register(fcmToken);
await pusher.setNotificationSettings(fcmToken, [30_311]);
notifications.value = await NotificationsState.init(
settings.authorizationStatus,
);
}
}

View File

@ -1,4 +1,3 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:ndk/ndk.dart'; import 'package:ndk/ndk.dart';
@ -44,10 +43,7 @@ class CategoryPage extends StatelessWidget {
info!.coverImage!, info!.coverImage!,
fit: BoxFit.contain, fit: BoxFit.contain,
) )
: CachedNetworkImage( : ProxyImg(url: info!.coverImage!),
imageUrl: proxyImg(context, info!.coverImage!),
fit: BoxFit.cover,
),
), ),
Expanded( Expanded(
child: Column( child: Column(

View File

@ -27,7 +27,7 @@ class HashtagPage extends StatelessWidget {
RxFilter<Nip01Event>( RxFilter<Nip01Event>(
Key("tags-page:$tag"), Key("tags-page:$tag"),
filters: [ filters: [
Filter(kinds: [30_311], limit: 50, tTags: [tag.toLowerCase()]), Filter(kinds: [30_311], limit: 100, tTags: [tag.toLowerCase()]),
], ],
builder: (ctx, state) { builder: (ctx, state) {
if (state == null) { if (state == null) {

View File

@ -19,7 +19,7 @@ class HomePage extends StatelessWidget {
RxFilter<Nip01Event>( RxFilter<Nip01Event>(
Key("home-page"), Key("home-page"),
filters: [ filters: [
Filter(kinds: [30_311], limit: 50), Filter(kinds: [30_311], limit: 100),
], ],
builder: (ctx, state) { builder: (ctx, state) {
if (state == null) { if (state == null) {

View File

@ -1,16 +0,0 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
class LayoutScreen extends StatelessWidget {
final StatefulNavigationShell navigationShell;
const LayoutScreen(this.navigationShell, {super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: navigationShell,
backgroundColor: Colors.black,
);
}
}

View File

@ -3,8 +3,9 @@ import 'dart:io';
import 'package:amberflutter/amberflutter.dart'; import 'package:amberflutter/amberflutter.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:zap_stream_flutter/i18n/strings.g.dart';
import 'package:zap_stream_flutter/login.dart'; import 'package:zap_stream_flutter/login.dart';
import 'package:zap_stream_flutter/main.dart'; import 'package:zap_stream_flutter/const.dart';
import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/theme.dart';
import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/utils.dart';
import 'package:zap_stream_flutter/widgets/button.dart'; import 'package:zap_stream_flutter/widgets/button.dart';
@ -22,8 +23,8 @@ class LoginPage extends StatelessWidget {
builder: (ctx, state) { builder: (ctx, state) {
if (state.data ?? false) { if (state.data ?? false) {
return BasicButton.text( return BasicButton.text(
"Login with Amber", t.login.amber,
onTap: () async { onTap: (context) async {
final amber = Amberflutter(); final amber = Amberflutter();
final result = await amber.getPublicKey(); final result = await amber.getPublicKey();
if (result['signature'] != null) { if (result['signature'] != null) {
@ -40,10 +41,7 @@ class LoginPage extends StatelessWidget {
} }
}, },
), ),
BasicButton.text( BasicButton.text(t.login.key, onTap: (context) => context.push("/login/key")),
"Login with Key",
onTap: () => context.push("/login/key"),
),
Container( Container(
margin: EdgeInsets.symmetric(vertical: 20), margin: EdgeInsets.symmetric(vertical: 20),
height: 1, height: 1,
@ -52,8 +50,8 @@ class LoginPage extends StatelessWidget {
), ),
), ),
BasicButton.text( BasicButton.text(
"Create Account", t.login.create,
onTap: () => context.push("/login/new"), onTap: (context) => context.push("/login/new"),
), ),
], ],
); );

View File

@ -1,7 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:zap_stream_flutter/const.dart';
import 'package:zap_stream_flutter/i18n/strings.g.dart';
import 'package:zap_stream_flutter/login.dart'; import 'package:zap_stream_flutter/login.dart';
import 'package:zap_stream_flutter/main.dart';
import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/theme.dart';
import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/utils.dart';
import 'package:zap_stream_flutter/widgets/button.dart'; import 'package:zap_stream_flutter/widgets/button.dart';
@ -27,8 +28,8 @@ class _LoginInputPage extends State<LoginInputPage> {
decoration: InputDecoration(labelText: "npub/nsec"), decoration: InputDecoration(labelText: "npub/nsec"),
), ),
BasicButton.text( BasicButton.text(
"Login", t.button.login,
onTap: () async { onTap: (context) async {
try { try {
if (_controller.text.startsWith("bunker://")) { if (_controller.text.startsWith("bunker://")) {
// not supported yet in ndk // not supported yet in ndk
@ -43,7 +44,7 @@ class _LoginInputPage extends State<LoginInputPage> {
loginData.value = LoginAccount.nip19(_controller.text); loginData.value = LoginAccount.nip19(_controller.text);
context.go("/"); context.go("/");
} else { } else {
throw "Invalid key"; throw t.login.error.invalid_key;
} }
} catch (e) { } catch (e) {
setState(() { setState(() {

View File

@ -1,13 +1,13 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:image_picker/image_picker.dart';
import 'package:ndk/ndk.dart'; import 'package:ndk/ndk.dart';
import 'package:ndk/shared/nips/nip01/bip340.dart'; import 'package:ndk/shared/nips/nip01/bip340.dart';
import 'package:ndk/shared/nips/nip01/key_pair.dart'; import 'package:ndk/shared/nips/nip01/key_pair.dart';
import 'package:zap_stream_flutter/i18n/strings.g.dart';
import 'package:zap_stream_flutter/login.dart'; import 'package:zap_stream_flutter/login.dart';
import 'package:zap_stream_flutter/main.dart'; import 'package:zap_stream_flutter/const.dart';
import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/theme.dart';
import 'package:zap_stream_flutter/widgets/avatar_upload.dart';
import 'package:zap_stream_flutter/widgets/button.dart'; import 'package:zap_stream_flutter/widgets/button.dart';
class NewAccountPage extends StatefulWidget { class NewAccountPage extends StatefulWidget {
@ -19,28 +19,12 @@ class NewAccountPage extends StatefulWidget {
class _NewAccountPage extends State<NewAccountPage> { class _NewAccountPage extends State<NewAccountPage> {
final TextEditingController _name = TextEditingController(); final TextEditingController _name = TextEditingController();
final FocusNode _nameFocus = FocusNode();
String? _avatar; String? _avatar;
String? _error; String? _error;
bool _loading = false;
final KeyPair _privateKey = Bip340.generatePrivateKey(); final KeyPair _privateKey = Bip340.generatePrivateKey();
Future<void> _uploadAvatar() async {
ndk.accounts.loginPrivateKey(
pubkey: _privateKey.publicKey,
privkey: _privateKey.privateKey!,
);
final file = await ImagePicker().pickImage(source: ImageSource.gallery);
if (file != null) {
final upload = await ndk.blossom.uploadBlob(
serverUrls: ["https://nostr.download"],
data: await file.readAsBytes(),
);
setState(() {
_avatar = upload.first.descriptor!.url;
});
}
}
Future<void> _login() async { Future<void> _login() async {
if (ndk.accounts.isNotLoggedIn) { if (ndk.accounts.isNotLoggedIn) {
ndk.accounts.loginPrivateKey( ndk.accounts.loginPrivateKey(
@ -63,55 +47,58 @@ class _NewAccountPage extends State<NewAccountPage> {
return Column( return Column(
spacing: 20, spacing: 20,
children: [ children: [
GestureDetector( AvatarUpload(
onTap: () { onUploadStart: () async {
_uploadAvatar().catchError((e) { if (ndk.accounts.isNotLoggedIn) {
setState(() { ndk.accounts.loginPrivateKey(
if (e is String) { pubkey: _privateKey.publicKey,
_error = e; privkey: _privateKey.privateKey!,
} );
}); }
},
onUpload: (i) {
setState(() {
_avatar = i;
}); });
}, },
child: Container(
width: 200,
height: 200,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(200)),
color: Color.fromARGB(100, 50, 50, 50),
),
child:
_avatar == null
? Center(child: Text("Upload Avatar"))
: CachedNetworkImage(imageUrl: _avatar!),
),
), ),
TextField( TextField(
controller: _name, controller: _name,
decoration: InputDecoration(labelText: "Username"), readOnly: _loading,
focusNode: _nameFocus,
decoration: InputDecoration(labelText: t.login.username),
), ),
BasicButton.text( ValueListenableBuilder(
"Login", valueListenable: _name,
onTap: () { builder: (context, value, child) {
_login() return BasicButton.text(
.then((_) { t.button.login,
loginData.value = LoginAccount.privateKeyHex( disabled: _loading || value.text.isEmpty,
_privateKey.privateKey!, onTap: (context) {
); setState(() {
if (context.mounted) { _loading = true;
context.go("/"); _nameFocus.unfocus();
}
})
.catchError((e) {
setState(() {
if (e is String) {
_error = e;
}
});
}); });
_login()
.then((_) {
loginData.value = LoginAccount.privateKeyHex(
_privateKey.privateKey!,
);
if (context.mounted) {
context.go("/");
}
})
.catchError((e) {
setState(() {
_loading = false;
_error = e is String ? e : e.toString();
});
});
},
);
}, },
), ),
if (_loading) CircularProgressIndicator(),
if (_error != null) if (_error != null)
Text( Text(
_error!, _error!,

Some files were not shown because too many files have changed in this diff Show More