Compare commits
16 Commits
v0.9.0
...
f553ecdab3
Author | SHA1 | Date | |
---|---|---|---|
f553ecdab3
|
|||
b7764d82c9
|
|||
1575c7dd09
|
|||
3914768eeb
|
|||
edfb5bb80d
|
|||
33ad784e87
|
|||
0422341bf8
|
|||
8af62e0b32
|
|||
cd6c50f9bd
|
|||
428771462d
|
|||
917147605b
|
|||
8e3a4cbd41
|
|||
c66127cac2
|
|||
ab9fdd6b71
|
|||
99c163a51a
|
|||
fb4821ffdd
|
4
.github/workflows/build.yml
vendored
@ -12,7 +12,7 @@ jobs:
|
|||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
channel: stable
|
channel: stable
|
||||||
flutter-version: 3.29.3
|
flutter-version: 3.32.0
|
||||||
- run: flutter pub get
|
- run: flutter pub get
|
||||||
- run: flutter build appbundle
|
- run: flutter build appbundle
|
||||||
env:
|
env:
|
||||||
@ -53,6 +53,6 @@ jobs:
|
|||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
channel: stable
|
channel: stable
|
||||||
flutter-version: 3.29.3
|
flutter-version: 3.32.0
|
||||||
- run: flutter pub get
|
- run: flutter pub get
|
||||||
- run: flutter build ios --no-codesign
|
- run: flutter build ios --no-codesign
|
2
.github/workflows/release.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
|||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
channel: stable
|
channel: stable
|
||||||
flutter-version: 3.29.3
|
flutter-version: 3.32.0
|
||||||
- run: flutter pub get
|
- run: flutter pub get
|
||||||
- name: Build apk
|
- name: Build apk
|
||||||
env:
|
env:
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import com.android.build.api.dsl.ApkSigningConfig
|
import com.android.build.api.dsl.ApkSigningConfig
|
||||||
import com.android.build.api.dsl.SigningConfig
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.toHex
|
import org.jetbrains.kotlin.gradle.targets.js.toHex
|
||||||
import java.io.FileInputStream
|
import java.io.FileInputStream
|
||||||
import java.util.Base64
|
import java.util.Base64
|
||||||
@ -8,11 +7,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")
|
||||||
|
id("com.google.gms.google-services")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getKeystoreFile(base64String: String?, hash: String, fileName: String): File {
|
fun getKeystoreFile(base64String: String?, hash: String, fileName: String): File {
|
||||||
|
@ -3,6 +3,5 @@
|
|||||||
the Flutter tool needs it to communicate with the running application
|
the Flutter tool needs it to communicate with the running application
|
||||||
to allow setting breakpoints, to provide hot reload, etc.
|
to allow setting breakpoints, to provide hot reload, etc.
|
||||||
-->
|
-->
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -1,52 +1,79 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
|
||||||
|
<uses-feature
|
||||||
|
android:name="android.hardware.camera"
|
||||||
|
android:required="false" />
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||||
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:label="zap.stream"
|
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:label="zap.stream">
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name="com.ryanheise.audioservice.AudioServiceActivity"
|
||||||
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
|
android:hardwareAccelerated="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop"
|
||||||
android:taskAffinity=""
|
android:taskAffinity=""
|
||||||
android:theme="@style/LaunchTheme"
|
android:theme="@style/LaunchTheme"
|
||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
|
||||||
android:hardwareAccelerated="true"
|
|
||||||
android:windowSoftInputMode="adjustResize">
|
android:windowSoftInputMode="adjustResize">
|
||||||
<!-- Specifies an Android theme to apply to this Activity as soon as
|
|
||||||
the Android process has started. This theme is visible to the user
|
|
||||||
while the Flutter UI initializes. After that, this theme continues
|
|
||||||
to determine the Window background behind the Flutter UI. -->
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="io.flutter.embedding.android.NormalTheme"
|
android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
android:resource="@style/NormalTheme"
|
android:resource="@style/NormalTheme" />
|
||||||
/>
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<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">
|
<intent-filter android:autoVerify="true">
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
<data android:scheme="http" android:host="zap.stream" />
|
|
||||||
|
<data android:host="zap.stream" />
|
||||||
|
<data android:scheme="http" />
|
||||||
<data android:scheme="https" />
|
<data android:scheme="https" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
|
||||||
<data android:scheme="zswc" />
|
<data android:scheme="zswc" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<!-- Don't delete the meta-data below.
|
<service
|
||||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
android:name="com.ryanheise.audioservice.AudioService"
|
||||||
|
android:exported="true"
|
||||||
|
android:foregroundServiceType="mediaPlayback"
|
||||||
|
android:permission="android.permission.FOREGROUND_SERVICE"
|
||||||
|
tools:ignore="Instantiatable">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.media.browse.MediaBrowserService" />
|
||||||
|
</intent-filter>
|
||||||
|
</service>
|
||||||
|
<receiver
|
||||||
|
android:name="com.ryanheise.audioservice.MediaButtonReceiver"
|
||||||
|
android:exported="true"
|
||||||
|
tools:ignore="Instantiatable">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MEDIA_BUTTON" />
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2" />
|
android:value="2" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
|
||||||
|
|
||||||
<!-- Required to query activities that can process text, see:
|
<!-- Required to query activities that can process text, see:
|
||||||
https://developer.android.com/training/package-visibility and
|
https://developer.android.com/training/package-visibility and
|
||||||
@ -55,10 +82,11 @@
|
|||||||
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
|
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
<action android:name="android.intent.action.PROCESS_TEXT" />
|
||||||
<data android:mimeType="text/plain"/>
|
<data android:mimeType="text/plain" />
|
||||||
</intent>
|
</intent>
|
||||||
</queries>
|
</queries>
|
||||||
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="firebase_messaging_auto_init_enabled"
|
android:name="firebase_messaging_auto_init_enabled"
|
||||||
android:value="false" />
|
android:value="false" />
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="33"
|
||||||
|
android:viewportHeight="23"
|
||||||
|
android:tint="#FFFFFF">
|
||||||
|
<group android:scaleX="0.777027"
|
||||||
|
android:scaleY="0.5415643"
|
||||||
|
android:translateX="3.679054"
|
||||||
|
android:translateY="5.272011">
|
||||||
|
<path
|
||||||
|
android:pathData="M32.788,1.721C32.356,0.677 31.344,0 30.216,0H10.68C10.674,0 10.667,0 10.661,0C10.655,0 10.648,0 10.642,0C6.542,0 3.21,3.332 3.21,7.425C3.21,9.578 4.138,11.582 5.704,12.975L0.812,17.867C0.013,18.666 -0.225,19.858 0.207,20.896C0.638,21.94 1.65,22.617 2.778,22.617H22.314C22.32,22.617 22.327,22.617 22.34,22.617C22.346,22.617 22.353,22.617 22.366,22.617C26.458,22.617 29.791,19.285 29.791,15.192C29.791,13.039 28.862,11.035 27.296,9.642L32.188,4.75C32.981,3.951 33.22,2.759 32.788,1.721ZM2.714,19.858C2.694,19.813 2.707,19.8 2.733,19.775L8.109,14.399L22.391,19.452C22.404,19.459 22.424,19.465 22.437,19.465C22.456,19.472 22.475,19.478 22.494,19.491C22.527,19.51 22.552,19.542 22.572,19.581C22.578,19.588 22.578,19.594 22.585,19.601C22.591,19.613 22.591,19.626 22.591,19.639C22.591,19.652 22.598,19.665 22.598,19.678C22.598,19.794 22.469,19.897 22.327,19.897H2.785C2.753,19.91 2.733,19.91 2.714,19.858ZM25.208,18.956C25.208,18.95 25.201,18.937 25.201,18.93C25.176,18.827 25.143,18.73 25.105,18.634C25.098,18.621 25.098,18.608 25.092,18.595C25.053,18.492 25.002,18.395 24.95,18.299C24.944,18.286 24.931,18.266 24.924,18.253C24.815,18.06 24.686,17.88 24.538,17.712C24.525,17.699 24.512,17.686 24.499,17.673C24.422,17.596 24.344,17.519 24.26,17.448C24.248,17.441 24.235,17.428 24.228,17.422C24.151,17.358 24.067,17.299 23.977,17.242C23.964,17.235 23.951,17.222 23.938,17.216C23.848,17.158 23.751,17.106 23.655,17.055C23.635,17.042 23.61,17.035 23.59,17.022C23.493,16.977 23.39,16.932 23.281,16.9L16.674,14.56L9.037,11.86L9.011,11.853C9.004,11.853 9.004,11.853 8.998,11.847C8.811,11.776 8.624,11.692 8.437,11.595C6.884,10.777 5.924,9.178 5.924,7.425C5.924,5.891 6.658,4.525 7.799,3.661C7.799,3.667 7.806,3.68 7.806,3.687C7.831,3.783 7.864,3.88 7.902,3.977C7.915,4.009 7.928,4.041 7.941,4.074C7.973,4.144 8.005,4.209 8.038,4.28C8.051,4.312 8.07,4.344 8.083,4.37C8.128,4.454 8.179,4.531 8.237,4.608C8.263,4.641 8.283,4.673 8.308,4.705C8.353,4.763 8.399,4.821 8.45,4.873C8.469,4.899 8.489,4.924 8.515,4.944C8.579,5.015 8.656,5.079 8.727,5.143C8.753,5.169 8.779,5.189 8.811,5.208C8.882,5.266 8.953,5.317 9.03,5.369C9.043,5.382 9.056,5.388 9.075,5.401C9.166,5.459 9.262,5.511 9.359,5.556C9.385,5.569 9.411,5.582 9.436,5.595C9.539,5.64 9.643,5.685 9.746,5.717L24.009,10.764C24.016,10.764 24.022,10.77 24.022,10.77C24.209,10.841 24.389,10.919 24.563,11.015C26.117,11.834 27.077,13.432 27.077,15.185C27.084,16.726 26.342,18.092 25.208,18.956ZM30.267,2.836L24.892,8.211C24.879,8.205 24.86,8.199 24.847,8.192L10.622,3.165C10.603,3.158 10.584,3.152 10.571,3.145H10.564C10.545,3.139 10.532,3.132 10.513,3.12C10.506,3.113 10.5,3.107 10.493,3.1C10.48,3.094 10.474,3.081 10.467,3.074C10.461,3.068 10.455,3.055 10.455,3.049C10.448,3.036 10.442,3.023 10.435,3.01C10.435,3.004 10.429,2.991 10.429,2.978C10.429,2.965 10.422,2.946 10.422,2.926C10.422,2.913 10.429,2.907 10.429,2.894C10.448,2.797 10.564,2.714 10.687,2.714H30.229C30.261,2.714 30.28,2.714 30.3,2.759C30.306,2.797 30.293,2.817 30.267,2.836Z"
|
||||||
|
android:fillColor="#ffffff"/>
|
||||||
|
</group>
|
||||||
|
</vector>
|
BIN
android/app/src/main/res/drawable-hdpi/ic_stat_name.png
Normal file
After Width: | Height: | Size: 531 B |
BIN
android/app/src/main/res/drawable-mdpi/ic_stat_name.png
Normal file
After Width: | Height: | Size: 366 B |
BIN
android/app/src/main/res/drawable-xhdpi/ic_stat_name.png
Normal file
After Width: | Height: | Size: 702 B |
BIN
android/app/src/main/res/drawable-xxhdpi/ic_stat_name.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/logo.jpg
Normal file
After Width: | Height: | Size: 8.2 KiB |
@ -1,4 +1,14 @@
|
|||||||
PODS:
|
PODS:
|
||||||
|
- apivideo_live_stream (0.0.1):
|
||||||
|
- ApiVideoLiveStream (= 1.4.1)
|
||||||
|
- Flutter
|
||||||
|
- ApiVideoLiveStream (1.4.1):
|
||||||
|
- HaishinKit (= 1.7.3)
|
||||||
|
- audio_service (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- FlutterMacOS
|
||||||
|
- audio_session (0.0.1):
|
||||||
|
- Flutter
|
||||||
- emoji_picker_flutter (0.0.1):
|
- emoji_picker_flutter (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- Firebase/CoreOnly (11.10.0):
|
- Firebase/CoreOnly (11.10.0):
|
||||||
@ -65,17 +75,22 @@ PODS:
|
|||||||
- GoogleUtilities/UserDefaults (8.1.0):
|
- GoogleUtilities/UserDefaults (8.1.0):
|
||||||
- GoogleUtilities/Logger
|
- GoogleUtilities/Logger
|
||||||
- GoogleUtilities/Privacy
|
- GoogleUtilities/Privacy
|
||||||
|
- HaishinKit (1.7.3):
|
||||||
|
- Logboard (~> 2.4.1)
|
||||||
- image_picker_ios (0.0.1):
|
- image_picker_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- Logboard (2.4.2)
|
||||||
- nanopb (3.30910.0):
|
- nanopb (3.30910.0):
|
||||||
- nanopb/decode (= 3.30910.0)
|
- nanopb/decode (= 3.30910.0)
|
||||||
- nanopb/encode (= 3.30910.0)
|
- nanopb/encode (= 3.30910.0)
|
||||||
- nanopb/decode (3.30910.0)
|
- nanopb/decode (3.30910.0)
|
||||||
- nanopb/encode (3.30910.0)
|
- nanopb/encode (3.30910.0)
|
||||||
- ObjectBox (4.2.0)
|
- native_device_orientation (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- ObjectBox (4.3.0)
|
||||||
- objectbox_flutter_libs (0.0.1):
|
- objectbox_flutter_libs (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- ObjectBox (= 4.2.0)
|
- ObjectBox (= 4.3.0)
|
||||||
- package_info_plus (0.4.5):
|
- package_info_plus (0.4.5):
|
||||||
- Flutter
|
- Flutter
|
||||||
- path_provider_foundation (0.0.1):
|
- path_provider_foundation (0.0.1):
|
||||||
@ -103,6 +118,9 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
|
- apivideo_live_stream (from `.symlinks/plugins/apivideo_live_stream/ios`)
|
||||||
|
- audio_service (from `.symlinks/plugins/audio_service/darwin`)
|
||||||
|
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
||||||
- emoji_picker_flutter (from `.symlinks/plugins/emoji_picker_flutter/ios`)
|
- emoji_picker_flutter (from `.symlinks/plugins/emoji_picker_flutter/ios`)
|
||||||
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
|
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
|
||||||
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
|
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
|
||||||
@ -110,6 +128,7 @@ DEPENDENCIES:
|
|||||||
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
|
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
|
||||||
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
|
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
|
||||||
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
||||||
|
- native_device_orientation (from `.symlinks/plugins/native_device_orientation/ios`)
|
||||||
- objectbox_flutter_libs (from `.symlinks/plugins/objectbox_flutter_libs/ios`)
|
- objectbox_flutter_libs (from `.symlinks/plugins/objectbox_flutter_libs/ios`)
|
||||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
||||||
@ -124,6 +143,7 @@ DEPENDENCIES:
|
|||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
trunk:
|
trunk:
|
||||||
|
- ApiVideoLiveStream
|
||||||
- Firebase
|
- Firebase
|
||||||
- FirebaseCore
|
- FirebaseCore
|
||||||
- FirebaseCoreInternal
|
- FirebaseCoreInternal
|
||||||
@ -131,11 +151,19 @@ SPEC REPOS:
|
|||||||
- FirebaseMessaging
|
- FirebaseMessaging
|
||||||
- GoogleDataTransport
|
- GoogleDataTransport
|
||||||
- GoogleUtilities
|
- GoogleUtilities
|
||||||
|
- HaishinKit
|
||||||
|
- Logboard
|
||||||
- nanopb
|
- nanopb
|
||||||
- ObjectBox
|
- ObjectBox
|
||||||
- PromisesObjC
|
- PromisesObjC
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
|
apivideo_live_stream:
|
||||||
|
:path: ".symlinks/plugins/apivideo_live_stream/ios"
|
||||||
|
audio_service:
|
||||||
|
:path: ".symlinks/plugins/audio_service/darwin"
|
||||||
|
audio_session:
|
||||||
|
:path: ".symlinks/plugins/audio_session/ios"
|
||||||
emoji_picker_flutter:
|
emoji_picker_flutter:
|
||||||
:path: ".symlinks/plugins/emoji_picker_flutter/ios"
|
:path: ".symlinks/plugins/emoji_picker_flutter/ios"
|
||||||
firebase_core:
|
firebase_core:
|
||||||
@ -150,6 +178,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/flutter_secure_storage/ios"
|
:path: ".symlinks/plugins/flutter_secure_storage/ios"
|
||||||
image_picker_ios:
|
image_picker_ios:
|
||||||
:path: ".symlinks/plugins/image_picker_ios/ios"
|
:path: ".symlinks/plugins/image_picker_ios/ios"
|
||||||
|
native_device_orientation:
|
||||||
|
:path: ".symlinks/plugins/native_device_orientation/ios"
|
||||||
objectbox_flutter_libs:
|
objectbox_flutter_libs:
|
||||||
:path: ".symlinks/plugins/objectbox_flutter_libs/ios"
|
:path: ".symlinks/plugins/objectbox_flutter_libs/ios"
|
||||||
package_info_plus:
|
package_info_plus:
|
||||||
@ -174,6 +204,10 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/wakelock_plus/ios"
|
:path: ".symlinks/plugins/wakelock_plus/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
|
apivideo_live_stream: caab45dd35fb3b140d423c099d0f6672378e7abe
|
||||||
|
ApiVideoLiveStream: 8f9dce7f6d15d5e4bb3c7a25e406bf2a36337a5a
|
||||||
|
audio_service: aa99a6ba2ae7565996015322b0bb024e1d25c6fd
|
||||||
|
audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0
|
||||||
emoji_picker_flutter: ece213fc274bdddefb77d502d33080dc54e616cc
|
emoji_picker_flutter: ece213fc274bdddefb77d502d33080dc54e616cc
|
||||||
Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2
|
Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2
|
||||||
firebase_core: ba71b44041571da878cb624ce0d80250bcbe58ad
|
firebase_core: ba71b44041571da878cb624ce0d80250bcbe58ad
|
||||||
@ -187,10 +221,13 @@ SPEC CHECKSUMS:
|
|||||||
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
|
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
|
||||||
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
|
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
|
||||||
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
|
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
|
||||||
|
HaishinKit: 326e27c4d06427ba53bffc68e516a92033293051
|
||||||
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
|
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
|
||||||
|
Logboard: 759d82599c439945d430d5a0958455b5a1974a0c
|
||||||
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
|
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
|
||||||
ObjectBox: 2b4c925852ea99f070492f21328bf4002165cbd9
|
native_device_orientation: d6a4dc6887cd8a5ce1049962367aec60139ea0f1
|
||||||
objectbox_flutter_libs: 50402e45f47f385d47fc041aba4607b89c4a3a1f
|
ObjectBox: 7760fa9072adcffe102a6adf4646ca84ba70ab6b
|
||||||
|
objectbox_flutter_libs: 4014e38f57250b074b99893ae84579aba8f02876
|
||||||
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
|
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
|
||||||
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
|
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
|
||||||
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
||||||
|
@ -322,14 +322,10 @@
|
|||||||
inputFileListPaths = (
|
inputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
);
|
);
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "[CP] Copy Pods Resources";
|
name = "[CP] Copy Pods Resources";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
);
|
);
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
|
||||||
@ -380,14 +376,10 @@
|
|||||||
inputFileListPaths = (
|
inputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
);
|
);
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "[CP] Embed Pods Frameworks";
|
name = "[CP] Embed Pods Frameworks";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
);
|
);
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
<MacroExpansion>
|
<MacroExpansion>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
@ -54,6 +55,7 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 771 B After Width: | Height: | Size: 460 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 784 B |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.3 KiB |
@ -72,6 +72,7 @@
|
|||||||
<array>
|
<array>
|
||||||
<string>fetch</string>
|
<string>fetch</string>
|
||||||
<string>remote-notification</string>
|
<string>remote-notification</string>
|
||||||
|
<string>audio</string>
|
||||||
</array>
|
</array>
|
||||||
<key>UILaunchStoryboardName</key>
|
<key>UILaunchStoryboardName</key>
|
||||||
<string>LaunchScreen</string>
|
<string>LaunchScreen</string>
|
||||||
@ -90,5 +91,9 @@
|
|||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>NSCameraUsageDescription</key>
|
||||||
|
<string>Live streaming</string>
|
||||||
|
<key>NSMicrophoneUsageDescription</key>
|
||||||
|
<string>Live streaming</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
260
lib/api.dart
Normal file
@ -0,0 +1,260 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
import 'dart:developer' as developer;
|
||||||
|
|
||||||
|
import 'package:convert/convert.dart';
|
||||||
|
import 'package:crypto/crypto.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:ndk/ndk.dart';
|
||||||
|
import 'package:zap_stream_flutter/const.dart';
|
||||||
|
|
||||||
|
class IngestEndpoint {
|
||||||
|
final String name;
|
||||||
|
final String url;
|
||||||
|
final String key;
|
||||||
|
final IngestCost cost;
|
||||||
|
final List<String> capabilities;
|
||||||
|
|
||||||
|
const IngestEndpoint({
|
||||||
|
required this.name,
|
||||||
|
required this.url,
|
||||||
|
required this.key,
|
||||||
|
required this.cost,
|
||||||
|
required this.capabilities,
|
||||||
|
});
|
||||||
|
|
||||||
|
static IngestEndpoint fromJson(Map<String, dynamic> json) {
|
||||||
|
return IngestEndpoint(
|
||||||
|
name: json["name"],
|
||||||
|
url: json["url"],
|
||||||
|
key: json["key"],
|
||||||
|
cost: IngestCost.fromJson(json["cost"]),
|
||||||
|
capabilities: List<String>.from(json["capabilities"]),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => name.hashCode;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if (other is IngestEndpoint) {
|
||||||
|
return other.name == name;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class IngestCost {
|
||||||
|
final String unit;
|
||||||
|
final double rate;
|
||||||
|
|
||||||
|
const IngestCost({required this.unit, required this.rate});
|
||||||
|
|
||||||
|
static IngestCost fromJson(Map<String, dynamic> json) {
|
||||||
|
return IngestCost(unit: json["unit"], rate: json["rate"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TosAccepted {
|
||||||
|
final bool accepted;
|
||||||
|
final String? link;
|
||||||
|
|
||||||
|
const TosAccepted({required this.accepted, required this.link});
|
||||||
|
|
||||||
|
static TosAccepted fromJson(Map<String, dynamic> json) {
|
||||||
|
return TosAccepted(accepted: json["accepted"], link: json["link"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AccountInfo {
|
||||||
|
final double balance;
|
||||||
|
final List<IngestEndpoint> endpoints;
|
||||||
|
final TosAccepted tos;
|
||||||
|
final EventInfo? details;
|
||||||
|
|
||||||
|
const AccountInfo({
|
||||||
|
required this.balance,
|
||||||
|
required this.endpoints,
|
||||||
|
required this.tos,
|
||||||
|
this.details,
|
||||||
|
});
|
||||||
|
|
||||||
|
static AccountInfo fromJson(Map<String, dynamic> json) {
|
||||||
|
final balance = json["balance"] as int;
|
||||||
|
final endpoints = json["endpoints"] as Iterable<dynamic>;
|
||||||
|
return AccountInfo(
|
||||||
|
balance: balance.toDouble(),
|
||||||
|
endpoints: endpoints.map((e) => IngestEndpoint.fromJson(e)).toList(),
|
||||||
|
tos: TosAccepted.fromJson(json["tos"]),
|
||||||
|
details:
|
||||||
|
json.containsKey("details")
|
||||||
|
? EventInfo.fromJson(json["details"])
|
||||||
|
: null,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class EventInfo {
|
||||||
|
final String? id;
|
||||||
|
final String? title;
|
||||||
|
final String? summary;
|
||||||
|
final String? image;
|
||||||
|
final String? contentWarning;
|
||||||
|
final String? goal;
|
||||||
|
final List<String>? tags;
|
||||||
|
|
||||||
|
EventInfo({
|
||||||
|
required this.id,
|
||||||
|
required this.title,
|
||||||
|
required this.summary,
|
||||||
|
required this.image,
|
||||||
|
required this.contentWarning,
|
||||||
|
required this.goal,
|
||||||
|
required this.tags,
|
||||||
|
});
|
||||||
|
|
||||||
|
static EventInfo fromJson(Map<String, dynamic> json) {
|
||||||
|
return EventInfo(
|
||||||
|
id: json["id"],
|
||||||
|
title: json["title"],
|
||||||
|
summary: json["summary"],
|
||||||
|
image: json["image"],
|
||||||
|
contentWarning: json["content_warning"],
|
||||||
|
goal: json["goal"],
|
||||||
|
tags: json.containsKey("tags") ? List<String>.from(json["tags"]) : null,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ZapStreamApi {
|
||||||
|
final String base;
|
||||||
|
final EventSigner signer;
|
||||||
|
|
||||||
|
ZapStreamApi(this.base, this.signer);
|
||||||
|
|
||||||
|
static ZapStreamApi instance() {
|
||||||
|
return ZapStreamApi(apiUrl, ndk.accounts.getLoggedAccount()!.signer);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<AccountInfo> getAccountInfo() async {
|
||||||
|
final url = "$base/account";
|
||||||
|
final rsp = await _sendGetRequest(url);
|
||||||
|
return AccountInfo.fromJson(JsonCodec().decode(rsp.body));
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> updateDefaultStreamInfo({
|
||||||
|
String? title,
|
||||||
|
String? summary,
|
||||||
|
String? image,
|
||||||
|
String? contentWarning,
|
||||||
|
String? goal,
|
||||||
|
List<String>? tags,
|
||||||
|
}) async {
|
||||||
|
final url = "$base/event";
|
||||||
|
await _sendPatchRequest(
|
||||||
|
url,
|
||||||
|
body: {
|
||||||
|
"title": title,
|
||||||
|
"summary": summary,
|
||||||
|
"image": image,
|
||||||
|
"content_warning": contentWarning,
|
||||||
|
"goal": goal,
|
||||||
|
"tags": tags,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> acceptTos() async {
|
||||||
|
await _sendPatchRequest("$base/account", body: {"accept_tos": true});
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<http.Response> _sendPatchRequest(String url, {Object? body}) async {
|
||||||
|
final jsonBody = body != null ? JsonCodec().encode(body) : null;
|
||||||
|
final auth = await _makeAuth("PATCH", url, body: jsonBody);
|
||||||
|
final rsp = await http
|
||||||
|
.patch(
|
||||||
|
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> _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();
|
||||||
|
}
|
||||||
|
}
|
11
lib/app.dart
@ -6,6 +6,7 @@ import 'package:zap_stream_flutter/i18n/strings.g.dart';
|
|||||||
import 'package:zap_stream_flutter/pages/category.dart';
|
import 'package:zap_stream_flutter/pages/category.dart';
|
||||||
import 'package:zap_stream_flutter/pages/hashtag.dart';
|
import 'package:zap_stream_flutter/pages/hashtag.dart';
|
||||||
import 'package:zap_stream_flutter/pages/home.dart';
|
import 'package:zap_stream_flutter/pages/home.dart';
|
||||||
|
import 'package:zap_stream_flutter/pages/live.dart';
|
||||||
import 'package:zap_stream_flutter/pages/login.dart';
|
import 'package:zap_stream_flutter/pages/login.dart';
|
||||||
import 'package:zap_stream_flutter/pages/login_input.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/new_account.dart';
|
||||||
@ -25,7 +26,11 @@ void runZapStream() {
|
|||||||
supportedLocales: AppLocaleUtils.supportedLocales,
|
supportedLocales: AppLocaleUtils.supportedLocales,
|
||||||
localizationsDelegates: GlobalMaterialLocalizations.delegates,
|
localizationsDelegates: GlobalMaterialLocalizations.delegates,
|
||||||
theme: ThemeData.localize(
|
theme: ThemeData.localize(
|
||||||
ThemeData(colorScheme: ColorScheme.dark(), highlightColor: PRIMARY_1),
|
ThemeData(
|
||||||
|
colorScheme: ColorScheme.dark(),
|
||||||
|
highlightColor: PRIMARY_1,
|
||||||
|
useMaterial3: true,
|
||||||
|
),
|
||||||
TextTheme(),
|
TextTheme(),
|
||||||
),
|
),
|
||||||
routerConfig: GoRouter(
|
routerConfig: GoRouter(
|
||||||
@ -131,6 +136,10 @@ void runZapStream() {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
GoRoute(
|
||||||
|
path: "/live",
|
||||||
|
builder: (context, state) => LivePage(),
|
||||||
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: "/:id",
|
path: "/:id",
|
||||||
redirect: (context, state) {
|
redirect: (context, state) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:amberflutter/amberflutter.dart';
|
import 'package:amberflutter/amberflutter.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||||
import 'package:ndk/ndk.dart';
|
import 'package:ndk/ndk.dart';
|
||||||
import 'package:ndk_amber/ndk_amber.dart';
|
import 'package:ndk_amber/ndk_amber.dart';
|
||||||
@ -17,7 +18,7 @@ class NoVerify extends EventVerifier {
|
|||||||
|
|
||||||
final ndkCache = DbObjectBox();
|
final ndkCache = DbObjectBox();
|
||||||
final eventVerifier = kDebugMode ? NoVerify() : RustEventVerifier();
|
final eventVerifier = kDebugMode ? NoVerify() : RustEventVerifier();
|
||||||
var ndk = Ndk(
|
final ndk = Ndk(
|
||||||
NdkConfig(
|
NdkConfig(
|
||||||
eventVerifier: eventVerifier,
|
eventVerifier: eventVerifier,
|
||||||
cache: ndkCache,
|
cache: ndkCache,
|
||||||
@ -36,6 +37,7 @@ const defaultRelays = [
|
|||||||
];
|
];
|
||||||
const searchRelays = ["wss://relay.nostr.band", "wss://search.nos.today"];
|
const searchRelays = ["wss://relay.nostr.band", "wss://search.nos.today"];
|
||||||
const nwcRelays = ["wss://relay.getalby.com/v1"];
|
const nwcRelays = ["wss://relay.getalby.com/v1"];
|
||||||
|
final apiUrl = dotenv.env["API_URL"] ?? "https://api.zap.stream/api/nostr";
|
||||||
|
|
||||||
final loginData = LoginData();
|
final loginData = LoginData();
|
||||||
final RouteObserver<ModalRoute<void>> routeObserver =
|
final RouteObserver<ModalRoute<void>> routeObserver =
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
/// To regenerate, run: `dart run slang`
|
/// To regenerate, run: `dart run slang`
|
||||||
///
|
///
|
||||||
/// Locales: 22
|
/// Locales: 22
|
||||||
/// Strings: 1628 (74 per locale)
|
/// Strings: 2010 (91 per locale)
|
||||||
///
|
///
|
||||||
/// Built on 2025-05-28 at 12:41 UTC
|
/// Built on 2025-05-30 at 13:17 UTC
|
||||||
|
|
||||||
// coverage:ignore-file
|
// coverage:ignore-file
|
||||||
// ignore_for_file: type=lint, unused_import
|
// ignore_for_file: type=lint, unused_import
|
||||||
|
@ -51,10 +51,12 @@ class TranslationsAr extends Translations {
|
|||||||
/// مستخدم مجهول
|
/// مستخدم مجهول
|
||||||
@override String get anon => 'هوية مخفية';
|
@override String get anon => 'هوية مخفية';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('ar').format(n)} دولار ساتس';
|
||||||
|
|
||||||
/// عدد مشاهدي البث
|
/// عدد مشاهدي البث
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ar'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ar'))(n,
|
||||||
one: '1 مشاهد',
|
one: '1 مشاهد',
|
||||||
other: '${NumberFormat.decimalPattern('ar').format(n)} المشاهدين',
|
other: '{n:decimalPattern} المشاهدين',
|
||||||
);
|
);
|
||||||
|
|
||||||
@override late final _TranslationsStreamAr stream = _TranslationsStreamAr._(_root);
|
@override late final _TranslationsStreamAr stream = _TranslationsStreamAr._(_root);
|
||||||
@ -69,6 +71,7 @@ class TranslationsAr extends Translations {
|
|||||||
@override late final _TranslationsProfileAr profile = _TranslationsProfileAr._(_root);
|
@override late final _TranslationsProfileAr profile = _TranslationsProfileAr._(_root);
|
||||||
@override late final _TranslationsSettingsAr settings = _TranslationsSettingsAr._(_root);
|
@override late final _TranslationsSettingsAr settings = _TranslationsSettingsAr._(_root);
|
||||||
@override late final _TranslationsLoginAr login = _TranslationsLoginAr._(_root);
|
@override late final _TranslationsLoginAr login = _TranslationsLoginAr._(_root);
|
||||||
|
@override late final _TranslationsLiveAr live = _TranslationsLiveAr._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamAr extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusAr status = _TranslationsStreamStatusAr._(_root);
|
@override late final _TranslationsStreamStatusAr status = _TranslationsStreamStatusAr._(_root);
|
||||||
@override String started({required Object timestamp}) => 'بدأ ${timestamp}';
|
@override String started({required Object timestamp}) => 'بدأ ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} بدأ البث المباشر!';
|
||||||
@override late final _TranslationsStreamChatAr chat = _TranslationsStreamChatAr._(_root);
|
@override late final _TranslationsStreamChatAr chat = _TranslationsStreamChatAr._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginAr extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorAr error = _TranslationsLoginErrorAr._(_root);
|
@override late final _TranslationsLoginErrorAr error = _TranslationsLoginErrorAr._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveAr extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveAr._(TranslationsAr root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsAr _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'ابدأ البث المباشر';
|
||||||
|
@override String get configure_stream => 'تكوين الدفق';
|
||||||
|
@override String get endpoint => 'نقطة النهاية';
|
||||||
|
@override String get accept_tos => 'قبول شروط الخدمة';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ar'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'العنوان';
|
||||||
|
@override String get summary => 'الملخص';
|
||||||
|
@override String get image => 'صورة الغلاف';
|
||||||
|
@override String get tags => 'الوسوم';
|
||||||
|
@override String get nsfw => 'محتوى غير لائق جنسيًا';
|
||||||
|
@override String get nsfw_description => 'تحقق هنا إذا كان هذا البث يحتوي على محتوى إباحي أو عري.';
|
||||||
|
@override late final _TranslationsLiveErrorAr error = _TranslationsLiveErrorAr._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusAr extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusAr extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusAr._(TranslationsAr root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusAr._(TranslationsAr root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletAr extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'محفظة قطع الاتصال';
|
@override String get disconnect_wallet => 'محفظة قطع الاتصال';
|
||||||
@override String get connect_1tap => '1-التوصيل بنقرة 1';
|
@override String get connect_1tap => '1-التوصيل بنقرة 1';
|
||||||
@override String get paste => 'لصق عنوان URL';
|
@override String get paste => 'لصق عنوان URL';
|
||||||
|
@override String get balance => 'الرصيد';
|
||||||
|
@override String get name => 'المحفظة';
|
||||||
@override late final _TranslationsSettingsWalletErrorAr error = _TranslationsSettingsWalletErrorAr._(_root);
|
@override late final _TranslationsSettingsWalletErrorAr error = _TranslationsSettingsWalletErrorAr._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorAr extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'مفتاح غير صالح';
|
@override String get invalid_key => 'مفتاح غير صالح';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorAr extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsAr _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'فشل البث';
|
||||||
|
@override String get connection_error => 'خطأ في الاتصال';
|
||||||
|
@override String get start_failed => 'فشل بدء البث فشل، يرجى التحقق من رصيدك';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteAr extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteAr extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteAr._(TranslationsAr root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteAr._(TranslationsAr root) : this._root = root, super.internal(root);
|
||||||
@ -379,14 +421,16 @@ extension on TranslationsAr {
|
|||||||
case 'most_zapped_streamers': return 'معظم اللافتات التي يتم بثها';
|
case 'most_zapped_streamers': return 'معظم اللافتات التي يتم بثها';
|
||||||
case 'no_user_found': return 'لم يتم العثور على مستخدم';
|
case 'no_user_found': return 'لم يتم العثور على مستخدم';
|
||||||
case 'anon': return 'هوية مخفية';
|
case 'anon': return 'هوية مخفية';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('ar').format(n)} دولار ساتس';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ar'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ar'))(n,
|
||||||
one: '1 مشاهد',
|
one: '1 مشاهد',
|
||||||
other: '${NumberFormat.decimalPattern('ar').format(n)} المشاهدين',
|
other: '{n:decimalPattern} المشاهدين',
|
||||||
);
|
);
|
||||||
case 'stream.status.live': return 'بث مباشر';
|
case 'stream.status.live': return 'بث مباشر';
|
||||||
case 'stream.status.ended': return 'انتهى';
|
case 'stream.status.ended': return 'انتهى';
|
||||||
case 'stream.status.planned': return 'مخطط';
|
case 'stream.status.planned': return 'مخطط';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'بدأ ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'بدأ ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} بدأ البث المباشر!';
|
||||||
case 'stream.chat.disabled': return 'تم تعطيل الدردشة';
|
case 'stream.chat.disabled': return 'تم تعطيل الدردشة';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'تنتهي المهلة: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsAr {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'محفظة قطع الاتصال';
|
case 'settings.wallet.disconnect_wallet': return 'محفظة قطع الاتصال';
|
||||||
case 'settings.wallet.connect_1tap': return '1-التوصيل بنقرة 1';
|
case 'settings.wallet.connect_1tap': return '1-التوصيل بنقرة 1';
|
||||||
case 'settings.wallet.paste': return 'لصق عنوان URL';
|
case 'settings.wallet.paste': return 'لصق عنوان URL';
|
||||||
|
case 'settings.wallet.balance': return 'الرصيد';
|
||||||
|
case 'settings.wallet.name': return 'المحفظة';
|
||||||
case 'settings.wallet.error.logged_out': return 'لا يمكن الاتصال بالمحفظة عند تسجيل الخروج';
|
case 'settings.wallet.error.logged_out': return 'لا يمكن الاتصال بالمحفظة عند تسجيل الخروج';
|
||||||
case 'settings.wallet.error.nwc_auth_event_not_found': return 'لم يتم العثور على حدث مصادقة المحفظة';
|
case 'settings.wallet.error.nwc_auth_event_not_found': return 'لم يتم العثور على حدث مصادقة المحفظة';
|
||||||
case 'login.username': return 'اسم المستخدم';
|
case 'login.username': return 'اسم المستخدم';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsAr {
|
|||||||
case 'login.key': return 'تسجيل الدخول بالمفتاح';
|
case 'login.key': return 'تسجيل الدخول بالمفتاح';
|
||||||
case 'login.create': return 'إنشاء حساب';
|
case 'login.create': return 'إنشاء حساب';
|
||||||
case 'login.error.invalid_key': return 'مفتاح غير صالح';
|
case 'login.error.invalid_key': return 'مفتاح غير صالح';
|
||||||
|
case 'live.start': return 'ابدأ البث المباشر';
|
||||||
|
case 'live.configure_stream': return 'تكوين الدفق';
|
||||||
|
case 'live.endpoint': return 'نقطة النهاية';
|
||||||
|
case 'live.accept_tos': return 'قبول شروط الخدمة';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ar'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'العنوان';
|
||||||
|
case 'live.summary': return 'الملخص';
|
||||||
|
case 'live.image': return 'صورة الغلاف';
|
||||||
|
case 'live.tags': return 'الوسوم';
|
||||||
|
case 'live.nsfw': return 'محتوى غير لائق جنسيًا';
|
||||||
|
case 'live.nsfw_description': return 'تحقق هنا إذا كان هذا البث يحتوي على محتوى إباحي أو عري.';
|
||||||
|
case 'live.error.failed': return 'فشل البث';
|
||||||
|
case 'live.error.connection_error': return 'خطأ في الاتصال';
|
||||||
|
case 'live.error.start_failed': return 'فشل بدء البث فشل، يرجى التحقق من رصيدك';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsCs extends Translations {
|
|||||||
/// Anonymní uživatel
|
/// Anonymní uživatel
|
||||||
@override String get anon => 'Anon';
|
@override String get anon => 'Anon';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('cs').format(n)} sats';
|
||||||
|
|
||||||
/// Počet diváků streamu
|
/// Počet diváků streamu
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n,
|
||||||
one: '1 divák',
|
one: '1 divák',
|
||||||
@ -69,6 +71,7 @@ class TranslationsCs extends Translations {
|
|||||||
@override late final _TranslationsProfileCs profile = _TranslationsProfileCs._(_root);
|
@override late final _TranslationsProfileCs profile = _TranslationsProfileCs._(_root);
|
||||||
@override late final _TranslationsSettingsCs settings = _TranslationsSettingsCs._(_root);
|
@override late final _TranslationsSettingsCs settings = _TranslationsSettingsCs._(_root);
|
||||||
@override late final _TranslationsLoginCs login = _TranslationsLoginCs._(_root);
|
@override late final _TranslationsLoginCs login = _TranslationsLoginCs._(_root);
|
||||||
|
@override late final _TranslationsLiveCs live = _TranslationsLiveCs._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamCs extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusCs status = _TranslationsStreamStatusCs._(_root);
|
@override late final _TranslationsStreamStatusCs status = _TranslationsStreamStatusCs._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Založeno ${timestamp}';
|
@override String started({required Object timestamp}) => 'Založeno ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} byl spuštěn!';
|
||||||
@override late final _TranslationsStreamChatCs chat = _TranslationsStreamChatCs._(_root);
|
@override late final _TranslationsStreamChatCs chat = _TranslationsStreamChatCs._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginCs extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorCs error = _TranslationsLoginErrorCs._(_root);
|
@override late final _TranslationsLoginErrorCs error = _TranslationsLoginErrorCs._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveCs extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveCs._(TranslationsCs root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsCs _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'PŘEJÍT NA ŽIVOT';
|
||||||
|
@override String get configure_stream => 'Konfigurace streamu';
|
||||||
|
@override String get endpoint => 'Koncový bod';
|
||||||
|
@override String get accept_tos => 'Přijmout TOS';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Název';
|
||||||
|
@override String get summary => 'Souhrn';
|
||||||
|
@override String get image => 'Obrázek na obálce';
|
||||||
|
@override String get tags => 'Štítky';
|
||||||
|
@override String get nsfw => 'Obsah NSFW';
|
||||||
|
@override String get nsfw_description => 'Zde zkontrolujte, zda tento stream obsahuje nahotu nebo pornografický obsah.';
|
||||||
|
@override late final _TranslationsLiveErrorCs error = _TranslationsLiveErrorCs._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusCs extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusCs extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusCs._(TranslationsCs root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusCs._(TranslationsCs root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletCs extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Odpojení peněženky';
|
@override String get disconnect_wallet => 'Odpojení peněženky';
|
||||||
@override String get connect_1tap => 'Připojení 1 kohoutku';
|
@override String get connect_1tap => 'Připojení 1 kohoutku';
|
||||||
@override String get paste => 'Vložit adresu URL';
|
@override String get paste => 'Vložit adresu URL';
|
||||||
|
@override String get balance => 'Bilance';
|
||||||
|
@override String get name => 'Peněženka';
|
||||||
@override late final _TranslationsSettingsWalletErrorCs error = _TranslationsSettingsWalletErrorCs._(_root);
|
@override late final _TranslationsSettingsWalletErrorCs error = _TranslationsSettingsWalletErrorCs._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorCs extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Neplatný klíč';
|
@override String get invalid_key => 'Neplatný klíč';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorCs extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsCs _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Stream se nezdařil';
|
||||||
|
@override String get connection_error => 'Chyba připojení';
|
||||||
|
@override String get start_failed => 'Spuštění streamu se nezdařilo, zkontrolujte prosím zůstatek';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteCs extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteCs extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteCs._(TranslationsCs root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteCs._(TranslationsCs root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsCs {
|
|||||||
case 'most_zapped_streamers': return 'Nejvíce zapnutých streamerů';
|
case 'most_zapped_streamers': return 'Nejvíce zapnutých streamerů';
|
||||||
case 'no_user_found': return 'Nebyl nalezen žádný uživatel';
|
case 'no_user_found': return 'Nebyl nalezen žádný uživatel';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anon';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('cs').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n,
|
||||||
one: '1 divák',
|
one: '1 divák',
|
||||||
other: '${NumberFormat.decimalPattern('cs').format(n)} diváků',
|
other: '${NumberFormat.decimalPattern('cs').format(n)} diváků',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsCs {
|
|||||||
case 'stream.status.ended': return 'KONEC';
|
case 'stream.status.ended': return 'KONEC';
|
||||||
case 'stream.status.planned': return 'PLÁNOVANÉ';
|
case 'stream.status.planned': return 'PLÁNOVANÉ';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Založeno ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Založeno ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} byl spuštěn!';
|
||||||
case 'stream.chat.disabled': return 'CHAT ZRUŠEN';
|
case 'stream.chat.disabled': return 'CHAT ZRUŠEN';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Časový limit vyprší: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsCs {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Odpojení peněženky';
|
case 'settings.wallet.disconnect_wallet': return 'Odpojení peněženky';
|
||||||
case 'settings.wallet.connect_1tap': return 'Připojení 1 kohoutku';
|
case 'settings.wallet.connect_1tap': return 'Připojení 1 kohoutku';
|
||||||
case 'settings.wallet.paste': return 'Vložit adresu URL';
|
case 'settings.wallet.paste': return 'Vložit adresu URL';
|
||||||
|
case 'settings.wallet.balance': return 'Bilance';
|
||||||
|
case 'settings.wallet.name': return 'Peněženka';
|
||||||
case 'settings.wallet.error.logged_out': return 'Nelze se připojit k peněžence, když jste odhlášeni';
|
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 '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.username': return 'Uživatelské jméno';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsCs {
|
|||||||
case 'login.key': return 'Přihlášení pomocí klíče';
|
case 'login.key': return 'Přihlášení pomocí klíče';
|
||||||
case 'login.create': return 'Vytvořit účet';
|
case 'login.create': return 'Vytvořit účet';
|
||||||
case 'login.error.invalid_key': return 'Neplatný klíč';
|
case 'login.error.invalid_key': return 'Neplatný klíč';
|
||||||
|
case 'live.start': return 'PŘEJÍT NA ŽIVOT';
|
||||||
|
case 'live.configure_stream': return 'Konfigurace streamu';
|
||||||
|
case 'live.endpoint': return 'Koncový bod';
|
||||||
|
case 'live.accept_tos': return 'Přijmout TOS';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Název';
|
||||||
|
case 'live.summary': return 'Souhrn';
|
||||||
|
case 'live.image': return 'Obrázek na obálce';
|
||||||
|
case 'live.tags': return 'Štítky';
|
||||||
|
case 'live.nsfw': return 'Obsah NSFW';
|
||||||
|
case 'live.nsfw_description': return 'Zde zkontrolujte, zda tento stream obsahuje nahotu nebo pornografický obsah.';
|
||||||
|
case 'live.error.failed': return 'Stream se nezdařil';
|
||||||
|
case 'live.error.connection_error': return 'Chyba připojení';
|
||||||
|
case 'live.error.start_failed': return 'Spuštění streamu se nezdařilo, zkontrolujte prosím zůstatek';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsDa extends Translations {
|
|||||||
/// En anonym bruger
|
/// En anonym bruger
|
||||||
@override String get anon => 'Anon';
|
@override String get anon => 'Anon';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('da').format(n)} sats';
|
||||||
|
|
||||||
/// Antal seere af streamingen
|
/// Antal seere af streamingen
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n,
|
||||||
one: '1 seer',
|
one: '1 seer',
|
||||||
@ -69,6 +71,7 @@ class TranslationsDa extends Translations {
|
|||||||
@override late final _TranslationsProfileDa profile = _TranslationsProfileDa._(_root);
|
@override late final _TranslationsProfileDa profile = _TranslationsProfileDa._(_root);
|
||||||
@override late final _TranslationsSettingsDa settings = _TranslationsSettingsDa._(_root);
|
@override late final _TranslationsSettingsDa settings = _TranslationsSettingsDa._(_root);
|
||||||
@override late final _TranslationsLoginDa login = _TranslationsLoginDa._(_root);
|
@override late final _TranslationsLoginDa login = _TranslationsLoginDa._(_root);
|
||||||
|
@override late final _TranslationsLiveDa live = _TranslationsLiveDa._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamDa extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusDa status = _TranslationsStreamStatusDa._(_root);
|
@override late final _TranslationsStreamStatusDa status = _TranslationsStreamStatusDa._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Startet ${timestamp}';
|
@override String started({required Object timestamp}) => 'Startet ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} gik live!';
|
||||||
@override late final _TranslationsStreamChatDa chat = _TranslationsStreamChatDa._(_root);
|
@override late final _TranslationsStreamChatDa chat = _TranslationsStreamChatDa._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginDa extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorDa error = _TranslationsLoginErrorDa._(_root);
|
@override late final _TranslationsLoginErrorDa error = _TranslationsLoginErrorDa._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveDa extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveDa._(TranslationsDa root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsDa _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'GO LIVE';
|
||||||
|
@override String get configure_stream => 'Konfigurer stream';
|
||||||
|
@override String get endpoint => 'Slutpunkt';
|
||||||
|
@override String get accept_tos => 'Accepter TOS';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Titel';
|
||||||
|
@override String get summary => 'Sammenfatning';
|
||||||
|
@override String get image => 'Forsidebillede';
|
||||||
|
@override String get tags => 'Tags';
|
||||||
|
@override String get nsfw => 'NSFW-indhold';
|
||||||
|
@override String get nsfw_description => 'Tjek her, om denne stream indeholder nøgenhed eller pornografisk indhold.';
|
||||||
|
@override late final _TranslationsLiveErrorDa error = _TranslationsLiveErrorDa._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusDa extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusDa extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusDa._(TranslationsDa root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusDa._(TranslationsDa root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletDa extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Afbryd forbindelsen til tegnebogen';
|
@override String get disconnect_wallet => 'Afbryd forbindelsen til tegnebogen';
|
||||||
@override String get connect_1tap => '1-Tap-forbindelse';
|
@override String get connect_1tap => '1-Tap-forbindelse';
|
||||||
@override String get paste => 'Indsæt URL';
|
@override String get paste => 'Indsæt URL';
|
||||||
|
@override String get balance => 'Balance';
|
||||||
|
@override String get name => 'Tegnebog';
|
||||||
@override late final _TranslationsSettingsWalletErrorDa error = _TranslationsSettingsWalletErrorDa._(_root);
|
@override late final _TranslationsSettingsWalletErrorDa error = _TranslationsSettingsWalletErrorDa._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorDa extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Ugyldig nøgle';
|
@override String get invalid_key => 'Ugyldig nøgle';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorDa extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsDa _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Strømmen mislykkedes';
|
||||||
|
@override String get connection_error => 'Forbindelsesfejl';
|
||||||
|
@override String get start_failed => 'Stream-start mislykkedes, tjek venligst din saldo';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteDa extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteDa extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteDa._(TranslationsDa root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteDa._(TranslationsDa root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsDa {
|
|||||||
case 'most_zapped_streamers': return 'De fleste zappede streamere';
|
case 'most_zapped_streamers': return 'De fleste zappede streamere';
|
||||||
case 'no_user_found': return 'Ingen bruger fundet';
|
case 'no_user_found': return 'Ingen bruger fundet';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anon';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('da').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n,
|
||||||
one: '1 seer',
|
one: '1 seer',
|
||||||
other: '${NumberFormat.decimalPattern('da').format(n)} seere',
|
other: '${NumberFormat.decimalPattern('da').format(n)} seere',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsDa {
|
|||||||
case 'stream.status.ended': return 'AFSLUTTET';
|
case 'stream.status.ended': return 'AFSLUTTET';
|
||||||
case 'stream.status.planned': return 'PLANLAGT';
|
case 'stream.status.planned': return 'PLANLAGT';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Startet ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Startet ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} gik live!';
|
||||||
case 'stream.chat.disabled': return 'CHAT DEAKTIVERET';
|
case 'stream.chat.disabled': return 'CHAT DEAKTIVERET';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout udløber: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsDa {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Afbryd forbindelsen til tegnebogen';
|
case 'settings.wallet.disconnect_wallet': return 'Afbryd forbindelsen til tegnebogen';
|
||||||
case 'settings.wallet.connect_1tap': return '1-Tap-forbindelse';
|
case 'settings.wallet.connect_1tap': return '1-Tap-forbindelse';
|
||||||
case 'settings.wallet.paste': return 'Indsæt URL';
|
case 'settings.wallet.paste': return 'Indsæt URL';
|
||||||
|
case 'settings.wallet.balance': return 'Balance';
|
||||||
|
case 'settings.wallet.name': return 'Tegnebog';
|
||||||
case 'settings.wallet.error.logged_out': return 'Kan ikke oprette forbindelse til wallet, når jeg er logget ud';
|
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 'settings.wallet.error.nwc_auth_event_not_found': return 'Ingen wallet-auth-begivenhed fundet';
|
||||||
case 'login.username': return 'Brugernavn';
|
case 'login.username': return 'Brugernavn';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsDa {
|
|||||||
case 'login.key': return 'Login med nøgle';
|
case 'login.key': return 'Login med nøgle';
|
||||||
case 'login.create': return 'Opret konto';
|
case 'login.create': return 'Opret konto';
|
||||||
case 'login.error.invalid_key': return 'Ugyldig nøgle';
|
case 'login.error.invalid_key': return 'Ugyldig nøgle';
|
||||||
|
case 'live.start': return 'GO LIVE';
|
||||||
|
case 'live.configure_stream': return 'Konfigurer stream';
|
||||||
|
case 'live.endpoint': return 'Slutpunkt';
|
||||||
|
case 'live.accept_tos': return 'Accepter TOS';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Titel';
|
||||||
|
case 'live.summary': return 'Sammenfatning';
|
||||||
|
case 'live.image': return 'Forsidebillede';
|
||||||
|
case 'live.tags': return 'Tags';
|
||||||
|
case 'live.nsfw': return 'NSFW-indhold';
|
||||||
|
case 'live.nsfw_description': return 'Tjek her, om denne stream indeholder nøgenhed eller pornografisk indhold.';
|
||||||
|
case 'live.error.failed': return 'Strømmen mislykkedes';
|
||||||
|
case 'live.error.connection_error': return 'Forbindelsesfejl';
|
||||||
|
case 'live.error.start_failed': return 'Stream-start mislykkedes, tjek venligst din saldo';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ class TranslationsDe extends Translations {
|
|||||||
/// Text, der den Benutzer auffordert, auf den Avatar-Platzhalter zu klicken, um den Upload zu starten
|
/// Text, der den Benutzer auffordert, auf den Avatar-Platzhalter zu klicken, um den Upload zu starten
|
||||||
@override String get upload_avatar => 'Avatar hochladen';
|
@override String get upload_avatar => 'Avatar hochladen';
|
||||||
|
|
||||||
/// Überschrift über gelistete Top-Streamer von zaps
|
/// Überschrift über gelistete Top-Streamer nach Zaps
|
||||||
@override String get most_zapped_streamers => 'Meistgezappte Streamer';
|
@override String get most_zapped_streamers => 'Meistgezappte Streamer';
|
||||||
|
|
||||||
/// Kein Benutzer bei der Suche gefunden
|
/// Kein Benutzer bei der Suche gefunden
|
||||||
@ -51,7 +51,9 @@ class TranslationsDe extends Translations {
|
|||||||
/// Ein anonymer Benutzer
|
/// Ein anonymer Benutzer
|
||||||
@override String get anon => 'Anon';
|
@override String get anon => 'Anon';
|
||||||
|
|
||||||
/// Anzahl der Betrachter des Streams
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('de').format(n)} sats';
|
||||||
|
|
||||||
|
/// Anzahl der Zuschauer des Streams
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n,
|
||||||
one: '1 Zuschauer',
|
one: '1 Zuschauer',
|
||||||
other: '${NumberFormat.decimalPattern('de').format(n)} Zuschauer',
|
other: '${NumberFormat.decimalPattern('de').format(n)} Zuschauer',
|
||||||
@ -69,6 +71,7 @@ class TranslationsDe extends Translations {
|
|||||||
@override late final _TranslationsProfileDe profile = _TranslationsProfileDe._(_root);
|
@override late final _TranslationsProfileDe profile = _TranslationsProfileDe._(_root);
|
||||||
@override late final _TranslationsSettingsDe settings = _TranslationsSettingsDe._(_root);
|
@override late final _TranslationsSettingsDe settings = _TranslationsSettingsDe._(_root);
|
||||||
@override late final _TranslationsLoginDe login = _TranslationsLoginDe._(_root);
|
@override late final _TranslationsLoginDe login = _TranslationsLoginDe._(_root);
|
||||||
|
@override late final _TranslationsLiveDe live = _TranslationsLiveDe._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamDe extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusDe status = _TranslationsStreamStatusDe._(_root);
|
@override late final _TranslationsStreamStatusDe status = _TranslationsStreamStatusDe._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Gestartet ${timestamp}';
|
@override String started({required Object timestamp}) => 'Gestartet ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} ging live!';
|
||||||
@override late final _TranslationsStreamChatDe chat = _TranslationsStreamChatDe._(_root);
|
@override late final _TranslationsStreamChatDe chat = _TranslationsStreamChatDe._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginDe extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorDe error = _TranslationsLoginErrorDe._(_root);
|
@override late final _TranslationsLoginErrorDe error = _TranslationsLoginErrorDe._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveDe extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveDe._(TranslationsDe root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsDe _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'LIVE GEHEN';
|
||||||
|
@override String get configure_stream => 'Stream konfigurieren';
|
||||||
|
@override String get endpoint => 'Endpunkt';
|
||||||
|
@override String get accept_tos => 'TOS akzeptieren';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Titel';
|
||||||
|
@override String get summary => 'Zusammenfassung';
|
||||||
|
@override String get image => 'Titelbild';
|
||||||
|
@override String get tags => 'Tags';
|
||||||
|
@override String get nsfw => 'NSFW-Inhalt';
|
||||||
|
@override String get nsfw_description => 'Prüfen Sie hier, ob dieser Stream Nacktheit oder pornografische Inhalte enthält.';
|
||||||
|
@override late final _TranslationsLiveErrorDe error = _TranslationsLiveErrorDe._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusDe extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusDe extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusDe._(TranslationsDe root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusDe._(TranslationsDe root) : this._root = root, super.internal(root);
|
||||||
@ -212,7 +240,7 @@ class _TranslationsStreamStatusDe extends TranslationsStreamStatusEn {
|
|||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
@override String get live => 'LIVE';
|
@override String get live => 'LIVE';
|
||||||
@override String get ended => 'ENDED';
|
@override String get ended => 'BEENDET';
|
||||||
@override String get planned => 'GEPLANT';
|
@override String get planned => 'GEPLANT';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,21 +252,21 @@ class _TranslationsStreamChatDe extends TranslationsStreamChatEn {
|
|||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
@override String get disabled => 'CHAT DEAKTIVIERT';
|
@override String get disabled => 'CHAT DEAKTIVIERT';
|
||||||
@override String disabled_timeout({required Object time}) => 'Die Zeitüberschreitung läuft ab: ${time}';
|
@override String disabled_timeout({required Object time}) => 'Timeout läuft ab: ${time}';
|
||||||
|
|
||||||
/// Chat-Nachricht mit Zeitüberschreitungsereignissen
|
/// Chat-Nachricht mit Timeout-Ereignissen
|
||||||
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
mod,
|
mod,
|
||||||
const TextSpan(text: ' Zeitüberschreitung '),
|
const TextSpan(text: ' gibt '),
|
||||||
user,
|
user,
|
||||||
const TextSpan(text: ' für '),
|
const TextSpan(text: ' einen Timeout für '),
|
||||||
time,
|
time,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/// Stream beendet Fußzeile am Ende des Chats
|
/// Stream beendet Fußzeile am Ende des Chats
|
||||||
@override String get ended => 'STREAM BEENDET';
|
@override String get ended => 'STREAM BEENDET';
|
||||||
|
|
||||||
/// Chatnachricht mit Stream Zaps
|
/// Chat-Nachricht mit Stream-Zaps
|
||||||
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
|
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
|
||||||
user,
|
user,
|
||||||
const TextSpan(text: ' hat '),
|
const TextSpan(text: ' hat '),
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletDe extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Brieftasche abtrennen';
|
@override String get disconnect_wallet => 'Brieftasche abtrennen';
|
||||||
@override String get connect_1tap => '1-Tap-Verbindung';
|
@override String get connect_1tap => '1-Tap-Verbindung';
|
||||||
@override String get paste => 'URL einfügen';
|
@override String get paste => 'URL einfügen';
|
||||||
|
@override String get balance => 'Bilanz';
|
||||||
|
@override String get name => 'Brieftasche';
|
||||||
@override late final _TranslationsSettingsWalletErrorDe error = _TranslationsSettingsWalletErrorDe._(_root);
|
@override late final _TranslationsSettingsWalletErrorDe error = _TranslationsSettingsWalletErrorDe._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorDe extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Ungültiger Schlüssel';
|
@override String get invalid_key => 'Ungültiger Schlüssel';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorDe extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsDe _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Stream fehlgeschlagen';
|
||||||
|
@override String get connection_error => 'Verbindungsfehler';
|
||||||
|
@override String get start_failed => 'Streamstart fehlgeschlagen, bitte überprüfen Sie Ihr Guthaben';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteDe extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteDe extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteDe._(TranslationsDe root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteDe._(TranslationsDe root) : this._root = root, super.internal(root);
|
||||||
@ -379,21 +421,23 @@ extension on TranslationsDe {
|
|||||||
case 'most_zapped_streamers': return 'Meistgezappte Streamer';
|
case 'most_zapped_streamers': return 'Meistgezappte Streamer';
|
||||||
case 'no_user_found': return 'Kein Benutzer gefunden';
|
case 'no_user_found': return 'Kein Benutzer gefunden';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anon';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('de').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n,
|
||||||
one: '1 Zuschauer',
|
one: '1 Zuschauer',
|
||||||
other: '${NumberFormat.decimalPattern('de').format(n)} Zuschauer',
|
other: '${NumberFormat.decimalPattern('de').format(n)} Zuschauer',
|
||||||
);
|
);
|
||||||
case 'stream.status.live': return 'LIVE';
|
case 'stream.status.live': return 'LIVE';
|
||||||
case 'stream.status.ended': return 'ENDED';
|
case 'stream.status.ended': return 'BEENDET';
|
||||||
case 'stream.status.planned': return 'GEPLANT';
|
case 'stream.status.planned': return 'GEPLANT';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Gestartet ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Gestartet ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} ging live!';
|
||||||
case 'stream.chat.disabled': return 'CHAT DEAKTIVIERT';
|
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.disabled_timeout': return ({required Object time}) => 'Timeout läuft ab: ${time}';
|
||||||
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
mod,
|
mod,
|
||||||
const TextSpan(text: ' Zeitüberschreitung '),
|
const TextSpan(text: ' gibt '),
|
||||||
user,
|
user,
|
||||||
const TextSpan(text: ' für '),
|
const TextSpan(text: ' einen Timeout für '),
|
||||||
time,
|
time,
|
||||||
]);
|
]);
|
||||||
case 'stream.chat.ended': return 'STREAM BEENDET';
|
case 'stream.chat.ended': return 'STREAM BEENDET';
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsDe {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Brieftasche abtrennen';
|
case 'settings.wallet.disconnect_wallet': return 'Brieftasche abtrennen';
|
||||||
case 'settings.wallet.connect_1tap': return '1-Tap-Verbindung';
|
case 'settings.wallet.connect_1tap': return '1-Tap-Verbindung';
|
||||||
case 'settings.wallet.paste': return 'URL einfügen';
|
case 'settings.wallet.paste': return 'URL einfügen';
|
||||||
|
case 'settings.wallet.balance': return 'Bilanz';
|
||||||
|
case 'settings.wallet.name': return 'Brieftasche';
|
||||||
case 'settings.wallet.error.logged_out': return 'Kann keine Verbindung zur Brieftasche herstellen, wenn ich abgemeldet bin';
|
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 'settings.wallet.error.nwc_auth_event_not_found': return 'Kein Wallet-Authentifizierungsereignis gefunden';
|
||||||
case 'login.username': return 'Benutzername';
|
case 'login.username': return 'Benutzername';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsDe {
|
|||||||
case 'login.key': return 'Anmeldung mit Schlüssel';
|
case 'login.key': return 'Anmeldung mit Schlüssel';
|
||||||
case 'login.create': return 'Konto erstellen';
|
case 'login.create': return 'Konto erstellen';
|
||||||
case 'login.error.invalid_key': return 'Ungültiger Schlüssel';
|
case 'login.error.invalid_key': return 'Ungültiger Schlüssel';
|
||||||
|
case 'live.start': return 'LIVE GEHEN';
|
||||||
|
case 'live.configure_stream': return 'Stream konfigurieren';
|
||||||
|
case 'live.endpoint': return 'Endpunkt';
|
||||||
|
case 'live.accept_tos': return 'TOS akzeptieren';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Titel';
|
||||||
|
case 'live.summary': return 'Zusammenfassung';
|
||||||
|
case 'live.image': return 'Titelbild';
|
||||||
|
case 'live.tags': return 'Tags';
|
||||||
|
case 'live.nsfw': return 'NSFW-Inhalt';
|
||||||
|
case 'live.nsfw_description': return 'Prüfen Sie hier, ob dieser Stream Nacktheit oder pornografische Inhalte enthält.';
|
||||||
|
case 'live.error.failed': return 'Stream fehlgeschlagen';
|
||||||
|
case 'live.error.connection_error': return 'Verbindungsfehler';
|
||||||
|
case 'live.error.start_failed': return 'Streamstart fehlgeschlagen, bitte überprüfen Sie Ihr Guthaben';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsEl extends Translations {
|
|||||||
/// Ένας ανώνυμος χρήστης
|
/// Ένας ανώνυμος χρήστης
|
||||||
@override String get anon => 'Anon';
|
@override String get anon => 'Anon';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('el').format(n)} sats';
|
||||||
|
|
||||||
/// Αριθμός θεατών της ροής
|
/// Αριθμός θεατών της ροής
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('el'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('el'))(n,
|
||||||
one: '1 θεατής',
|
one: '1 θεατής',
|
||||||
@ -69,6 +71,7 @@ class TranslationsEl extends Translations {
|
|||||||
@override late final _TranslationsProfileEl profile = _TranslationsProfileEl._(_root);
|
@override late final _TranslationsProfileEl profile = _TranslationsProfileEl._(_root);
|
||||||
@override late final _TranslationsSettingsEl settings = _TranslationsSettingsEl._(_root);
|
@override late final _TranslationsSettingsEl settings = _TranslationsSettingsEl._(_root);
|
||||||
@override late final _TranslationsLoginEl login = _TranslationsLoginEl._(_root);
|
@override late final _TranslationsLoginEl login = _TranslationsLoginEl._(_root);
|
||||||
|
@override late final _TranslationsLiveEl live = _TranslationsLiveEl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamEl extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusEl status = _TranslationsStreamStatusEl._(_root);
|
@override late final _TranslationsStreamStatusEl status = _TranslationsStreamStatusEl._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
|
@override String started({required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} βγήκε ζωντανά!';
|
||||||
@override late final _TranslationsStreamChatEl chat = _TranslationsStreamChatEl._(_root);
|
@override late final _TranslationsStreamChatEl chat = _TranslationsStreamChatEl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginEl extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorEl error = _TranslationsLoginErrorEl._(_root);
|
@override late final _TranslationsLoginErrorEl error = _TranslationsLoginErrorEl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveEl extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveEl._(TranslationsEl root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsEl _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'GO LIVE';
|
||||||
|
@override String get configure_stream => 'Διαμόρφωση ροής';
|
||||||
|
@override String get endpoint => 'Τελικό σημείο';
|
||||||
|
@override String get accept_tos => 'Αποδοχή TOS';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('el'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Τίτλος';
|
||||||
|
@override String get summary => 'Περίληψη';
|
||||||
|
@override String get image => 'Εικόνα εξωφύλλου';
|
||||||
|
@override String get tags => 'Ετικέτες';
|
||||||
|
@override String get nsfw => 'Περιεχόμενο NSFW';
|
||||||
|
@override String get nsfw_description => 'Ελέγξτε εδώ αν αυτή η ροή περιέχει γυμνό ή πορνογραφικό περιεχόμενο.';
|
||||||
|
@override late final _TranslationsLiveErrorEl error = _TranslationsLiveErrorEl._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusEl extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusEl extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusEl._(TranslationsEl root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusEl._(TranslationsEl root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletEl extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Αποσύνδεση πορτοφολιού';
|
@override String get disconnect_wallet => 'Αποσύνδεση πορτοφολιού';
|
||||||
@override String get connect_1tap => 'Σύνδεση 1 βρύσης';
|
@override String get connect_1tap => 'Σύνδεση 1 βρύσης';
|
||||||
@override String get paste => 'Επικόλληση URL';
|
@override String get paste => 'Επικόλληση URL';
|
||||||
|
@override String get balance => 'Υπόλοιπο';
|
||||||
|
@override String get name => 'Πορτοφόλι';
|
||||||
@override late final _TranslationsSettingsWalletErrorEl error = _TranslationsSettingsWalletErrorEl._(_root);
|
@override late final _TranslationsSettingsWalletErrorEl error = _TranslationsSettingsWalletErrorEl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorEl extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Μη έγκυρο κλειδί';
|
@override String get invalid_key => 'Μη έγκυρο κλειδί';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorEl extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsEl _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Το ρεύμα απέτυχε';
|
||||||
|
@override String get connection_error => 'Σφάλμα σύνδεσης';
|
||||||
|
@override String get start_failed => 'Η εκκίνηση της ροής απέτυχε, παρακαλούμε ελέγξτε το υπόλοιπό σας';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteEl extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteEl extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteEl._(TranslationsEl root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteEl._(TranslationsEl root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsEl {
|
|||||||
case 'most_zapped_streamers': return 'Τα περισσότερα Zapped Streamers';
|
case 'most_zapped_streamers': return 'Τα περισσότερα Zapped Streamers';
|
||||||
case 'no_user_found': return 'Δεν βρέθηκε χρήστης';
|
case 'no_user_found': return 'Δεν βρέθηκε χρήστης';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anon';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('el').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('el'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('el'))(n,
|
||||||
one: '1 θεατής',
|
one: '1 θεατής',
|
||||||
other: '${NumberFormat.decimalPattern('el').format(n)} θεατές',
|
other: '${NumberFormat.decimalPattern('el').format(n)} θεατές',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsEl {
|
|||||||
case 'stream.status.ended': return 'ENDED';
|
case 'stream.status.ended': return 'ENDED';
|
||||||
case 'stream.status.planned': return 'ΣΧΕΔΙΑΣΜΟΣ';
|
case 'stream.status.planned': return 'ΣΧΕΔΙΑΣΜΟΣ';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} βγήκε ζωντανά!';
|
||||||
case 'stream.chat.disabled': return 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ';
|
case 'stream.chat.disabled': return 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Το χρονικό όριο λήγει: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsEl {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Αποσύνδεση πορτοφολιού';
|
case 'settings.wallet.disconnect_wallet': return 'Αποσύνδεση πορτοφολιού';
|
||||||
case 'settings.wallet.connect_1tap': return 'Σύνδεση 1 βρύσης';
|
case 'settings.wallet.connect_1tap': return 'Σύνδεση 1 βρύσης';
|
||||||
case 'settings.wallet.paste': return 'Επικόλληση URL';
|
case 'settings.wallet.paste': return 'Επικόλληση URL';
|
||||||
|
case 'settings.wallet.balance': return 'Υπόλοιπο';
|
||||||
|
case 'settings.wallet.name': return 'Πορτοφόλι';
|
||||||
case 'settings.wallet.error.logged_out': return 'Δεν μπορώ να συνδεθώ με πορτοφόλι όταν έχω αποσυνδεθεί';
|
case 'settings.wallet.error.logged_out': return 'Δεν μπορώ να συνδεθώ με πορτοφόλι όταν έχω αποσυνδεθεί';
|
||||||
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Δεν βρέθηκε συμβάν εξουσιοδότησης πορτοφολιού';
|
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Δεν βρέθηκε συμβάν εξουσιοδότησης πορτοφολιού';
|
||||||
case 'login.username': return 'Όνομα χρήστη';
|
case 'login.username': return 'Όνομα χρήστη';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsEl {
|
|||||||
case 'login.key': return 'Σύνδεση με κλειδί';
|
case 'login.key': return 'Σύνδεση με κλειδί';
|
||||||
case 'login.create': return 'Δημιουργία λογαριασμού';
|
case 'login.create': return 'Δημιουργία λογαριασμού';
|
||||||
case 'login.error.invalid_key': return 'Μη έγκυρο κλειδί';
|
case 'login.error.invalid_key': return 'Μη έγκυρο κλειδί';
|
||||||
|
case 'live.start': return 'GO LIVE';
|
||||||
|
case 'live.configure_stream': return 'Διαμόρφωση ροής';
|
||||||
|
case 'live.endpoint': return 'Τελικό σημείο';
|
||||||
|
case 'live.accept_tos': return 'Αποδοχή TOS';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('el'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Τίτλος';
|
||||||
|
case 'live.summary': return 'Περίληψη';
|
||||||
|
case 'live.image': return 'Εικόνα εξωφύλλου';
|
||||||
|
case 'live.tags': return 'Ετικέτες';
|
||||||
|
case 'live.nsfw': return 'Περιεχόμενο NSFW';
|
||||||
|
case 'live.nsfw_description': return 'Ελέγξτε εδώ αν αυτή η ροή περιέχει γυμνό ή πορνογραφικό περιεχόμενο.';
|
||||||
|
case 'live.error.failed': return 'Το ρεύμα απέτυχε';
|
||||||
|
case 'live.error.connection_error': return 'Σφάλμα σύνδεσης';
|
||||||
|
case 'live.error.start_failed': return 'Η εκκίνηση της ροής απέτυχε, παρακαλούμε ελέγξτε το υπόλοιπό σας';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,8 @@ class Translations implements BaseTranslations<AppLocale, Translations> {
|
|||||||
/// An anonymous user
|
/// An anonymous user
|
||||||
String get anon => 'Anon';
|
String get anon => 'Anon';
|
||||||
|
|
||||||
|
String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('en').format(n)} sats';
|
||||||
|
|
||||||
/// Number of viewers of the stream
|
/// Number of viewers of the stream
|
||||||
String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n,
|
String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n,
|
||||||
one: '1 viewer',
|
one: '1 viewer',
|
||||||
@ -70,6 +72,7 @@ class Translations implements BaseTranslations<AppLocale, Translations> {
|
|||||||
late final TranslationsProfileEn profile = TranslationsProfileEn.internal(_root);
|
late final TranslationsProfileEn profile = TranslationsProfileEn.internal(_root);
|
||||||
late final TranslationsSettingsEn settings = TranslationsSettingsEn.internal(_root);
|
late final TranslationsSettingsEn settings = TranslationsSettingsEn.internal(_root);
|
||||||
late final TranslationsLoginEn login = TranslationsLoginEn.internal(_root);
|
late final TranslationsLoginEn login = TranslationsLoginEn.internal(_root);
|
||||||
|
late final TranslationsLiveEn live = TranslationsLiveEn.internal(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -81,6 +84,7 @@ class TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
late final TranslationsStreamStatusEn status = TranslationsStreamStatusEn.internal(_root);
|
late final TranslationsStreamStatusEn status = TranslationsStreamStatusEn.internal(_root);
|
||||||
String started({required Object timestamp}) => 'Started ${timestamp}';
|
String started({required Object timestamp}) => 'Started ${timestamp}';
|
||||||
|
String notification({required Object name}) => '${name} went live!';
|
||||||
late final TranslationsStreamChatEn chat = TranslationsStreamChatEn.internal(_root);
|
late final TranslationsStreamChatEn chat = TranslationsStreamChatEn.internal(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,6 +209,30 @@ class TranslationsLoginEn {
|
|||||||
late final TranslationsLoginErrorEn error = TranslationsLoginErrorEn.internal(_root);
|
late final TranslationsLoginErrorEn error = TranslationsLoginErrorEn.internal(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class TranslationsLiveEn {
|
||||||
|
TranslationsLiveEn.internal(this._root);
|
||||||
|
|
||||||
|
final Translations _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
String get start => 'GO LIVE';
|
||||||
|
String get configure_stream => 'Configure Stream';
|
||||||
|
String get endpoint => 'Endpoint';
|
||||||
|
String get accept_tos => 'Accept TOS';
|
||||||
|
String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
String get title => 'Title';
|
||||||
|
String get summary => 'Summary';
|
||||||
|
String get image => 'Cover Image';
|
||||||
|
String get tags => 'Tags';
|
||||||
|
String get nsfw => 'NSFW Content';
|
||||||
|
String get nsfw_description => 'Check here if this stream contains nudity or pornographic content.';
|
||||||
|
late final TranslationsLiveErrorEn error = TranslationsLiveErrorEn.internal(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class TranslationsStreamStatusEn {
|
class TranslationsStreamStatusEn {
|
||||||
TranslationsStreamStatusEn.internal(this._root);
|
TranslationsStreamStatusEn.internal(this._root);
|
||||||
@ -289,6 +317,8 @@ class TranslationsSettingsWalletEn {
|
|||||||
String get disconnect_wallet => 'Disconnect Wallet';
|
String get disconnect_wallet => 'Disconnect Wallet';
|
||||||
String get connect_1tap => '1-Tap Connection';
|
String get connect_1tap => '1-Tap Connection';
|
||||||
String get paste => 'Paste URL';
|
String get paste => 'Paste URL';
|
||||||
|
String get balance => 'Balance';
|
||||||
|
String get name => 'Wallet';
|
||||||
late final TranslationsSettingsWalletErrorEn error = TranslationsSettingsWalletErrorEn.internal(_root);
|
late final TranslationsSettingsWalletErrorEn error = TranslationsSettingsWalletErrorEn.internal(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,6 +332,18 @@ class TranslationsLoginErrorEn {
|
|||||||
String get invalid_key => 'Invalid key';
|
String get invalid_key => 'Invalid key';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class TranslationsLiveErrorEn {
|
||||||
|
TranslationsLiveErrorEn.internal(this._root);
|
||||||
|
|
||||||
|
final Translations _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
String get failed => 'Stream failed';
|
||||||
|
String get connection_error => 'Connection Error';
|
||||||
|
String get start_failed => 'Stream start failed, please check your balance';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class TranslationsStreamChatWriteEn {
|
class TranslationsStreamChatWriteEn {
|
||||||
TranslationsStreamChatWriteEn.internal(this._root);
|
TranslationsStreamChatWriteEn.internal(this._root);
|
||||||
@ -380,6 +422,7 @@ extension on Translations {
|
|||||||
case 'most_zapped_streamers': return 'Most Zapped Streamers';
|
case 'most_zapped_streamers': return 'Most Zapped Streamers';
|
||||||
case 'no_user_found': return 'No user found';
|
case 'no_user_found': return 'No user found';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anon';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('en').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n,
|
||||||
one: '1 viewer',
|
one: '1 viewer',
|
||||||
other: '${NumberFormat.decimalPattern('en').format(n)} viewers',
|
other: '${NumberFormat.decimalPattern('en').format(n)} viewers',
|
||||||
@ -388,6 +431,7 @@ extension on Translations {
|
|||||||
case 'stream.status.ended': return 'ENDED';
|
case 'stream.status.ended': return 'ENDED';
|
||||||
case 'stream.status.planned': return 'PLANNED';
|
case 'stream.status.planned': return 'PLANNED';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Started ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Started ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} went live!';
|
||||||
case 'stream.chat.disabled': return 'CHAT DISABLED';
|
case 'stream.chat.disabled': return 'CHAT DISABLED';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout expires: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -456,6 +500,8 @@ extension on Translations {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Disconnect Wallet';
|
case 'settings.wallet.disconnect_wallet': return 'Disconnect Wallet';
|
||||||
case 'settings.wallet.connect_1tap': return '1-Tap Connection';
|
case 'settings.wallet.connect_1tap': return '1-Tap Connection';
|
||||||
case 'settings.wallet.paste': return 'Paste URL';
|
case 'settings.wallet.paste': return 'Paste URL';
|
||||||
|
case 'settings.wallet.balance': return 'Balance';
|
||||||
|
case 'settings.wallet.name': return 'Wallet';
|
||||||
case 'settings.wallet.error.logged_out': return 'Cant connect wallet when logged out';
|
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 'settings.wallet.error.nwc_auth_event_not_found': return 'No wallet auth event found';
|
||||||
case 'login.username': return 'Username';
|
case 'login.username': return 'Username';
|
||||||
@ -463,6 +509,23 @@ extension on Translations {
|
|||||||
case 'login.key': return 'Login with Key';
|
case 'login.key': return 'Login with Key';
|
||||||
case 'login.create': return 'Create Account';
|
case 'login.create': return 'Create Account';
|
||||||
case 'login.error.invalid_key': return 'Invalid key';
|
case 'login.error.invalid_key': return 'Invalid key';
|
||||||
|
case 'live.start': return 'GO LIVE';
|
||||||
|
case 'live.configure_stream': return 'Configure Stream';
|
||||||
|
case 'live.endpoint': return 'Endpoint';
|
||||||
|
case 'live.accept_tos': return 'Accept TOS';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Title';
|
||||||
|
case 'live.summary': return 'Summary';
|
||||||
|
case 'live.image': return 'Cover Image';
|
||||||
|
case 'live.tags': return 'Tags';
|
||||||
|
case 'live.nsfw': return 'NSFW Content';
|
||||||
|
case 'live.nsfw_description': return 'Check here if this stream contains nudity or pornographic content.';
|
||||||
|
case 'live.error.failed': return 'Stream failed';
|
||||||
|
case 'live.error.connection_error': return 'Connection Error';
|
||||||
|
case 'live.error.start_failed': return 'Stream start failed, please check your balance';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsEs extends Translations {
|
|||||||
/// Un usuario anónimo
|
/// Un usuario anónimo
|
||||||
@override String get anon => 'Anónimo';
|
@override String get anon => 'Anónimo';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('es').format(n)} sats';
|
||||||
|
|
||||||
/// Número de espectadores del flujo
|
/// Número de espectadores del flujo
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n,
|
||||||
one: '1 espectador',
|
one: '1 espectador',
|
||||||
@ -69,6 +71,7 @@ class TranslationsEs extends Translations {
|
|||||||
@override late final _TranslationsProfileEs profile = _TranslationsProfileEs._(_root);
|
@override late final _TranslationsProfileEs profile = _TranslationsProfileEs._(_root);
|
||||||
@override late final _TranslationsSettingsEs settings = _TranslationsSettingsEs._(_root);
|
@override late final _TranslationsSettingsEs settings = _TranslationsSettingsEs._(_root);
|
||||||
@override late final _TranslationsLoginEs login = _TranslationsLoginEs._(_root);
|
@override late final _TranslationsLoginEs login = _TranslationsLoginEs._(_root);
|
||||||
|
@override late final _TranslationsLiveEs live = _TranslationsLiveEs._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamEs extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusEs status = _TranslationsStreamStatusEs._(_root);
|
@override late final _TranslationsStreamStatusEs status = _TranslationsStreamStatusEs._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Comenzó ${timestamp}';
|
@override String started({required Object timestamp}) => 'Comenzó ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} ¡se ha puesto en marcha!';
|
||||||
@override late final _TranslationsStreamChatEs chat = _TranslationsStreamChatEs._(_root);
|
@override late final _TranslationsStreamChatEs chat = _TranslationsStreamChatEs._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginEs extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorEs error = _TranslationsLoginErrorEs._(_root);
|
@override late final _TranslationsLoginErrorEs error = _TranslationsLoginErrorEs._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveEs extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveEs._(TranslationsEs root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsEs _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'EN VIVO';
|
||||||
|
@override String get configure_stream => 'Configurar Stream';
|
||||||
|
@override String get endpoint => 'Punto final';
|
||||||
|
@override String get accept_tos => 'Aceptar TOS';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Título';
|
||||||
|
@override String get summary => 'Resumen';
|
||||||
|
@override String get image => 'Imagen de portada';
|
||||||
|
@override String get tags => 'Etiquetas';
|
||||||
|
@override String get nsfw => 'Contenido NSFW';
|
||||||
|
@override String get nsfw_description => 'Compruebe aquí si este flujo contiene desnudos o contenido pornográfico.';
|
||||||
|
@override late final _TranslationsLiveErrorEs error = _TranslationsLiveErrorEs._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusEs extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusEs extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusEs._(TranslationsEs root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusEs._(TranslationsEs root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletEs extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Desconectar Cartera';
|
@override String get disconnect_wallet => 'Desconectar Cartera';
|
||||||
@override String get connect_1tap => 'Conexión de 1 toma';
|
@override String get connect_1tap => 'Conexión de 1 toma';
|
||||||
@override String get paste => 'Pegar URL';
|
@override String get paste => 'Pegar URL';
|
||||||
|
@override String get balance => 'Saldo';
|
||||||
|
@override String get name => 'Cartera';
|
||||||
@override late final _TranslationsSettingsWalletErrorEs error = _TranslationsSettingsWalletErrorEs._(_root);
|
@override late final _TranslationsSettingsWalletErrorEs error = _TranslationsSettingsWalletErrorEs._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorEs extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Clave no válida';
|
@override String get invalid_key => 'Clave no válida';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorEs extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsEs _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Corriente fallida';
|
||||||
|
@override String get connection_error => 'Error de conexión';
|
||||||
|
@override String get start_failed => 'Error en el inicio de la transmisión, compruebe su saldo';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteEs extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteEs extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteEs._(TranslationsEs root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteEs._(TranslationsEs root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsEs {
|
|||||||
case 'most_zapped_streamers': return 'Serpentinas más derribadas';
|
case 'most_zapped_streamers': return 'Serpentinas más derribadas';
|
||||||
case 'no_user_found': return 'No se ha encontrado ningún usuario';
|
case 'no_user_found': return 'No se ha encontrado ningún usuario';
|
||||||
case 'anon': return 'Anónimo';
|
case 'anon': return 'Anónimo';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('es').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n,
|
||||||
one: '1 espectador',
|
one: '1 espectador',
|
||||||
other: '${NumberFormat.decimalPattern('es').format(n)} espectadores',
|
other: '${NumberFormat.decimalPattern('es').format(n)} espectadores',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsEs {
|
|||||||
case 'stream.status.ended': return 'FIN';
|
case 'stream.status.ended': return 'FIN';
|
||||||
case 'stream.status.planned': return 'PLANIFICADO';
|
case 'stream.status.planned': return 'PLANIFICADO';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Comenzó ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Comenzó ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} ¡se ha puesto en marcha!';
|
||||||
case 'stream.chat.disabled': return 'CHAT DESHABILITADO';
|
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.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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsEs {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Desconectar Cartera';
|
case 'settings.wallet.disconnect_wallet': return 'Desconectar Cartera';
|
||||||
case 'settings.wallet.connect_1tap': return 'Conexión de 1 toma';
|
case 'settings.wallet.connect_1tap': return 'Conexión de 1 toma';
|
||||||
case 'settings.wallet.paste': return 'Pegar URL';
|
case 'settings.wallet.paste': return 'Pegar URL';
|
||||||
|
case 'settings.wallet.balance': return 'Saldo';
|
||||||
|
case 'settings.wallet.name': return 'Cartera';
|
||||||
case 'settings.wallet.error.logged_out': return 'No se puede conectar el monedero al cerrar la sesión';
|
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 '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.username': return 'Usuario';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsEs {
|
|||||||
case 'login.key': return 'Inicio de sesión con clave';
|
case 'login.key': return 'Inicio de sesión con clave';
|
||||||
case 'login.create': return 'Crear una cuenta';
|
case 'login.create': return 'Crear una cuenta';
|
||||||
case 'login.error.invalid_key': return 'Clave no válida';
|
case 'login.error.invalid_key': return 'Clave no válida';
|
||||||
|
case 'live.start': return 'EN VIVO';
|
||||||
|
case 'live.configure_stream': return 'Configurar Stream';
|
||||||
|
case 'live.endpoint': return 'Punto final';
|
||||||
|
case 'live.accept_tos': return 'Aceptar TOS';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Título';
|
||||||
|
case 'live.summary': return 'Resumen';
|
||||||
|
case 'live.image': return 'Imagen de portada';
|
||||||
|
case 'live.tags': return 'Etiquetas';
|
||||||
|
case 'live.nsfw': return 'Contenido NSFW';
|
||||||
|
case 'live.nsfw_description': return 'Compruebe aquí si este flujo contiene desnudos o contenido pornográfico.';
|
||||||
|
case 'live.error.failed': return 'Corriente fallida';
|
||||||
|
case 'live.error.connection_error': return 'Error de conexión';
|
||||||
|
case 'live.error.start_failed': return 'Error en el inicio de la transmisión, compruebe su saldo';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsFi extends Translations {
|
|||||||
/// Nimetön käyttäjä
|
/// Nimetön käyttäjä
|
||||||
@override String get anon => 'Anon';
|
@override String get anon => 'Anon';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('fi').format(n)} sats';
|
||||||
|
|
||||||
/// Streamin katsojien määrä
|
/// Streamin katsojien määrä
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n,
|
||||||
one: '1 katsoja',
|
one: '1 katsoja',
|
||||||
@ -69,6 +71,7 @@ class TranslationsFi extends Translations {
|
|||||||
@override late final _TranslationsProfileFi profile = _TranslationsProfileFi._(_root);
|
@override late final _TranslationsProfileFi profile = _TranslationsProfileFi._(_root);
|
||||||
@override late final _TranslationsSettingsFi settings = _TranslationsSettingsFi._(_root);
|
@override late final _TranslationsSettingsFi settings = _TranslationsSettingsFi._(_root);
|
||||||
@override late final _TranslationsLoginFi login = _TranslationsLoginFi._(_root);
|
@override late final _TranslationsLoginFi login = _TranslationsLoginFi._(_root);
|
||||||
|
@override late final _TranslationsLiveFi live = _TranslationsLiveFi._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamFi extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusFi status = _TranslationsStreamStatusFi._(_root);
|
@override late final _TranslationsStreamStatusFi status = _TranslationsStreamStatusFi._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Aloitettu ${timestamp}';
|
@override String started({required Object timestamp}) => 'Aloitettu ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} meni suoraksi!';
|
||||||
@override late final _TranslationsStreamChatFi chat = _TranslationsStreamChatFi._(_root);
|
@override late final _TranslationsStreamChatFi chat = _TranslationsStreamChatFi._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginFi extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorFi error = _TranslationsLoginErrorFi._(_root);
|
@override late final _TranslationsLoginErrorFi error = _TranslationsLoginErrorFi._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveFi extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveFi._(TranslationsFi root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsFi _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'GO LIVE';
|
||||||
|
@override String get configure_stream => 'Määritä Stream';
|
||||||
|
@override String get endpoint => 'Loppupiste';
|
||||||
|
@override String get accept_tos => 'Hyväksy TOS';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Otsikko';
|
||||||
|
@override String get summary => 'Yhteenveto';
|
||||||
|
@override String get image => 'Kansikuva';
|
||||||
|
@override String get tags => 'Tunnisteet';
|
||||||
|
@override String get nsfw => 'NSFW-sisältö';
|
||||||
|
@override String get nsfw_description => 'Tarkista täältä, jos tämä stream sisältää alastomuutta tai pornografista sisältöä.';
|
||||||
|
@override late final _TranslationsLiveErrorFi error = _TranslationsLiveErrorFi._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusFi extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusFi extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusFi._(TranslationsFi root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusFi._(TranslationsFi root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletFi extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Irrota lompakko';
|
@override String get disconnect_wallet => 'Irrota lompakko';
|
||||||
@override String get connect_1tap => '1-Tap-liitäntä';
|
@override String get connect_1tap => '1-Tap-liitäntä';
|
||||||
@override String get paste => 'Liitä URL-osoite';
|
@override String get paste => 'Liitä URL-osoite';
|
||||||
|
@override String get balance => 'Balance';
|
||||||
|
@override String get name => 'Lompakko';
|
||||||
@override late final _TranslationsSettingsWalletErrorFi error = _TranslationsSettingsWalletErrorFi._(_root);
|
@override late final _TranslationsSettingsWalletErrorFi error = _TranslationsSettingsWalletErrorFi._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorFi extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Virheellinen avain';
|
@override String get invalid_key => 'Virheellinen avain';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorFi extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsFi _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Stream epäonnistui';
|
||||||
|
@override String get connection_error => 'Yhteysvirhe';
|
||||||
|
@override String get start_failed => 'Virran käynnistys epäonnistui, tarkista saldosi';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteFi extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteFi extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteFi._(TranslationsFi root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteFi._(TranslationsFi root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsFi {
|
|||||||
case 'most_zapped_streamers': return 'Eniten Zapped Streamers';
|
case 'most_zapped_streamers': return 'Eniten Zapped Streamers';
|
||||||
case 'no_user_found': return 'Käyttäjää ei löytynyt';
|
case 'no_user_found': return 'Käyttäjää ei löytynyt';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anon';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('fi').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n,
|
||||||
one: '1 katsoja',
|
one: '1 katsoja',
|
||||||
other: '${NumberFormat.decimalPattern('fi').format(n)} katsojat',
|
other: '${NumberFormat.decimalPattern('fi').format(n)} katsojat',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsFi {
|
|||||||
case 'stream.status.ended': return 'ENDED';
|
case 'stream.status.ended': return 'ENDED';
|
||||||
case 'stream.status.planned': return 'SUUNNITELTU';
|
case 'stream.status.planned': return 'SUUNNITELTU';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Aloitettu ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Aloitettu ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} meni suoraksi!';
|
||||||
case 'stream.chat.disabled': return 'CHAT POISTETTU KÄYTÖSTÄ';
|
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.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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsFi {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Irrota lompakko';
|
case 'settings.wallet.disconnect_wallet': return 'Irrota lompakko';
|
||||||
case 'settings.wallet.connect_1tap': return '1-Tap-liitäntä';
|
case 'settings.wallet.connect_1tap': return '1-Tap-liitäntä';
|
||||||
case 'settings.wallet.paste': return 'Liitä URL-osoite';
|
case 'settings.wallet.paste': return 'Liitä URL-osoite';
|
||||||
|
case 'settings.wallet.balance': return 'Balance';
|
||||||
|
case 'settings.wallet.name': return 'Lompakko';
|
||||||
case 'settings.wallet.error.logged_out': return 'Ei voi muodostaa yhteyttä lompakkoon, kun on kirjautunut ulos';
|
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 '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.username': return 'Käyttäjätunnus';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsFi {
|
|||||||
case 'login.key': return 'Kirjaudu sisään avaimella';
|
case 'login.key': return 'Kirjaudu sisään avaimella';
|
||||||
case 'login.create': return 'Luo tili';
|
case 'login.create': return 'Luo tili';
|
||||||
case 'login.error.invalid_key': return 'Virheellinen avain';
|
case 'login.error.invalid_key': return 'Virheellinen avain';
|
||||||
|
case 'live.start': return 'GO LIVE';
|
||||||
|
case 'live.configure_stream': return 'Määritä Stream';
|
||||||
|
case 'live.endpoint': return 'Loppupiste';
|
||||||
|
case 'live.accept_tos': return 'Hyväksy TOS';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Otsikko';
|
||||||
|
case 'live.summary': return 'Yhteenveto';
|
||||||
|
case 'live.image': return 'Kansikuva';
|
||||||
|
case 'live.tags': return 'Tunnisteet';
|
||||||
|
case 'live.nsfw': return 'NSFW-sisältö';
|
||||||
|
case 'live.nsfw_description': return 'Tarkista täältä, jos tämä stream sisältää alastomuutta tai pornografista sisältöä.';
|
||||||
|
case 'live.error.failed': return 'Stream epäonnistui';
|
||||||
|
case 'live.error.connection_error': return 'Yhteysvirhe';
|
||||||
|
case 'live.error.start_failed': return 'Virran käynnistys epäonnistui, tarkista saldosi';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsFr extends Translations {
|
|||||||
/// Un utilisateur anonyme
|
/// Un utilisateur anonyme
|
||||||
@override String get anon => 'Anonyme';
|
@override String get anon => 'Anonyme';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('fr').format(n)} sats';
|
||||||
|
|
||||||
/// Nombre de spectateurs du flux
|
/// Nombre de spectateurs du flux
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
|
||||||
one: '1 téléspectateur',
|
one: '1 téléspectateur',
|
||||||
@ -69,6 +71,7 @@ class TranslationsFr extends Translations {
|
|||||||
@override late final _TranslationsProfileFr profile = _TranslationsProfileFr._(_root);
|
@override late final _TranslationsProfileFr profile = _TranslationsProfileFr._(_root);
|
||||||
@override late final _TranslationsSettingsFr settings = _TranslationsSettingsFr._(_root);
|
@override late final _TranslationsSettingsFr settings = _TranslationsSettingsFr._(_root);
|
||||||
@override late final _TranslationsLoginFr login = _TranslationsLoginFr._(_root);
|
@override late final _TranslationsLoginFr login = _TranslationsLoginFr._(_root);
|
||||||
|
@override late final _TranslationsLiveFr live = _TranslationsLiveFr._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamFr extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusFr status = _TranslationsStreamStatusFr._(_root);
|
@override late final _TranslationsStreamStatusFr status = _TranslationsStreamStatusFr._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Commencé à ${timestamp}';
|
@override String started({required Object timestamp}) => 'Commencé à ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} est en ligne !';
|
||||||
@override late final _TranslationsStreamChatFr chat = _TranslationsStreamChatFr._(_root);
|
@override late final _TranslationsStreamChatFr chat = _TranslationsStreamChatFr._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginFr extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorFr error = _TranslationsLoginErrorFr._(_root);
|
@override late final _TranslationsLoginErrorFr error = _TranslationsLoginErrorFr._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveFr extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveFr._(TranslationsFr root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsFr _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'GO LIVE';
|
||||||
|
@override String get configure_stream => 'Configurer le flux';
|
||||||
|
@override String get endpoint => 'Point final';
|
||||||
|
@override String get accept_tos => 'Accepter les CGU';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Titre';
|
||||||
|
@override String get summary => 'Résumé';
|
||||||
|
@override String get image => 'Image de couverture';
|
||||||
|
@override String get tags => 'Tags';
|
||||||
|
@override String get nsfw => 'Contenu NSFW';
|
||||||
|
@override String get nsfw_description => 'Cochez cette case si ce flux contient de la nudité ou du contenu pornographique.';
|
||||||
|
@override late final _TranslationsLiveErrorFr error = _TranslationsLiveErrorFr._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusFr extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusFr extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusFr._(TranslationsFr root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusFr._(TranslationsFr root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletFr extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Déconnecter le portefeuille';
|
@override String get disconnect_wallet => 'Déconnecter le portefeuille';
|
||||||
@override String get connect_1tap => 'Connexion à 1 robinet';
|
@override String get connect_1tap => 'Connexion à 1 robinet';
|
||||||
@override String get paste => 'Coller l\'URL';
|
@override String get paste => 'Coller l\'URL';
|
||||||
|
@override String get balance => 'Équilibre';
|
||||||
|
@override String get name => 'Portefeuille';
|
||||||
@override late final _TranslationsSettingsWalletErrorFr error = _TranslationsSettingsWalletErrorFr._(_root);
|
@override late final _TranslationsSettingsWalletErrorFr error = _TranslationsSettingsWalletErrorFr._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorFr extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Clé non valide';
|
@override String get invalid_key => 'Clé non valide';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorFr extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsFr _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Échec du flux';
|
||||||
|
@override String get connection_error => 'Erreur de connexion';
|
||||||
|
@override String get start_failed => 'Le démarrage du flux a échoué, veuillez vérifier votre solde';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteFr extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteFr extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteFr._(TranslationsFr root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteFr._(TranslationsFr root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsFr {
|
|||||||
case 'most_zapped_streamers': return 'Les Streamers les plus zappés';
|
case 'most_zapped_streamers': return 'Les Streamers les plus zappés';
|
||||||
case 'no_user_found': return 'Aucun utilisateur trouvé';
|
case 'no_user_found': return 'Aucun utilisateur trouvé';
|
||||||
case 'anon': return 'Anonyme';
|
case 'anon': return 'Anonyme';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('fr').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
|
||||||
one: '1 téléspectateur',
|
one: '1 téléspectateur',
|
||||||
other: '${NumberFormat.decimalPattern('fr').format(n)} téléspectateurs',
|
other: '${NumberFormat.decimalPattern('fr').format(n)} téléspectateurs',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsFr {
|
|||||||
case 'stream.status.ended': return 'FINI';
|
case 'stream.status.ended': return 'FINI';
|
||||||
case 'stream.status.planned': return 'PRÉVU';
|
case 'stream.status.planned': return 'PRÉVU';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Commencé à ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Commencé à ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} est en ligne !';
|
||||||
case 'stream.chat.disabled': return 'CHAT DISABLED';
|
case 'stream.chat.disabled': return 'CHAT DISABLED';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Le délai expire : ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsFr {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Déconnecter le portefeuille';
|
case 'settings.wallet.disconnect_wallet': return 'Déconnecter le portefeuille';
|
||||||
case 'settings.wallet.connect_1tap': return 'Connexion à 1 robinet';
|
case 'settings.wallet.connect_1tap': return 'Connexion à 1 robinet';
|
||||||
case 'settings.wallet.paste': return 'Coller l\'URL';
|
case 'settings.wallet.paste': return 'Coller l\'URL';
|
||||||
|
case 'settings.wallet.balance': return 'Équilibre';
|
||||||
|
case 'settings.wallet.name': return 'Portefeuille';
|
||||||
case 'settings.wallet.error.logged_out': return 'Impossible de se connecter au portefeuille lorsque l\'on est déconnecté';
|
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 '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 d’utilisateur';
|
case 'login.username': return 'Nom d’utilisateur';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsFr {
|
|||||||
case 'login.key': return 'Connexion avec la clé';
|
case 'login.key': return 'Connexion avec la clé';
|
||||||
case 'login.create': return 'Créer un Compte';
|
case 'login.create': return 'Créer un Compte';
|
||||||
case 'login.error.invalid_key': return 'Clé non valide';
|
case 'login.error.invalid_key': return 'Clé non valide';
|
||||||
|
case 'live.start': return 'GO LIVE';
|
||||||
|
case 'live.configure_stream': return 'Configurer le flux';
|
||||||
|
case 'live.endpoint': return 'Point final';
|
||||||
|
case 'live.accept_tos': return 'Accepter les CGU';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Titre';
|
||||||
|
case 'live.summary': return 'Résumé';
|
||||||
|
case 'live.image': return 'Image de couverture';
|
||||||
|
case 'live.tags': return 'Tags';
|
||||||
|
case 'live.nsfw': return 'Contenu NSFW';
|
||||||
|
case 'live.nsfw_description': return 'Cochez cette case si ce flux contient de la nudité ou du contenu pornographique.';
|
||||||
|
case 'live.error.failed': return 'Échec du flux';
|
||||||
|
case 'live.error.connection_error': return 'Erreur de connexion';
|
||||||
|
case 'live.error.start_failed': return 'Le démarrage du flux a échoué, veuillez vérifier votre solde';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,6 +80,7 @@ class _TranslationsStreamHu extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusHu status = _TranslationsStreamStatusHu._(_root);
|
@override late final _TranslationsStreamStatusHu status = _TranslationsStreamStatusHu._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Elindult ${timestamp}';
|
@override String started({required Object timestamp}) => 'Elindult ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} elindult!';
|
||||||
@override late final _TranslationsStreamChatHu chat = _TranslationsStreamChatHu._(_root);
|
@override late final _TranslationsStreamChatHu chat = _TranslationsStreamChatHu._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +133,7 @@ class _TranslationsEmbedHu extends TranslationsEmbedEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override String article_by({required Object name}) => 'Cikk ${name}';
|
@override String article_by({required Object name}) => 'Cikk ${name}';
|
||||||
@override String note_by({required Object name}) => '${name} bejegyzése';
|
@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';
|
@override String live_stream_by({required Object name}) => 'Élő közvetítés a ${name} oldalon';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream_list
|
// Path: stream_list
|
||||||
@ -347,7 +348,7 @@ class _TranslationsStreamChatRaidHu extends TranslationsStreamChatRaidEn {
|
|||||||
@override String from({required Object name}) => 'RAID FROM ${name}';
|
@override String from({required Object name}) => 'RAID FROM ${name}';
|
||||||
|
|
||||||
/// Visszaszámláló időzítő az automatikus lovagláshoz
|
/// Visszaszámláló időzítő az automatikus lovagláshoz
|
||||||
@override String countdown({required Object time}) => 'Raiding a ${time}oldalon';
|
@override String countdown({required Object time}) => 'Raiding a ${time} oldalon';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: settings.profile.error
|
// Path: settings.profile.error
|
||||||
@ -388,6 +389,7 @@ extension on TranslationsHu {
|
|||||||
case 'stream.status.ended': return 'ENDED';
|
case 'stream.status.ended': return 'ENDED';
|
||||||
case 'stream.status.planned': return 'TERVEZETT';
|
case 'stream.status.planned': return 'TERVEZETT';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Elindult ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Elindult ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} elindult!';
|
||||||
case 'stream.chat.disabled': return 'CHAT KIKAPCSOLVA';
|
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.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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -411,7 +413,7 @@ extension on TranslationsHu {
|
|||||||
case 'stream.chat.badge.awarded_to': return 'Elnyerte:';
|
case 'stream.chat.badge.awarded_to': return 'Elnyerte:';
|
||||||
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
|
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.from': return ({required Object name}) => 'RAID FROM ${name}';
|
||||||
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding a ${time}oldalon';
|
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.title': return ({required Object amount}) => 'Cél: ${amount}';
|
||||||
case 'goal.remaining': return ({required Object amount}) => 'Maradék: ${amount}';
|
case 'goal.remaining': return ({required Object amount}) => 'Maradék: ${amount}';
|
||||||
case 'goal.complete': return 'TELJES';
|
case 'goal.complete': return 'TELJES';
|
||||||
@ -428,7 +430,7 @@ extension on TranslationsHu {
|
|||||||
case 'button.settings': return 'Beállítások';
|
case 'button.settings': return 'Beállítások';
|
||||||
case 'embed.article_by': return ({required Object name}) => 'Cikk ${name}';
|
case 'embed.article_by': return ({required Object name}) => 'Cikk ${name}';
|
||||||
case 'embed.note_by': return ({required Object name}) => '${name} bejegyzése';
|
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 '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.following': return 'Követettek bejegyzései';
|
||||||
case 'stream_list.live': return 'Élő';
|
case 'stream_list.live': return 'Élő';
|
||||||
case 'stream_list.planned': return 'Tervezett';
|
case 'stream_list.planned': return 'Tervezett';
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsIt extends Translations {
|
|||||||
/// Un utente anonimo
|
/// Un utente anonimo
|
||||||
@override String get anon => 'Anonimo';
|
@override String get anon => 'Anonimo';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('it').format(n)} sats';
|
||||||
|
|
||||||
/// Numero di spettatori del flusso
|
/// Numero di spettatori del flusso
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n,
|
||||||
one: '1 spettatore',
|
one: '1 spettatore',
|
||||||
@ -69,6 +71,7 @@ class TranslationsIt extends Translations {
|
|||||||
@override late final _TranslationsProfileIt profile = _TranslationsProfileIt._(_root);
|
@override late final _TranslationsProfileIt profile = _TranslationsProfileIt._(_root);
|
||||||
@override late final _TranslationsSettingsIt settings = _TranslationsSettingsIt._(_root);
|
@override late final _TranslationsSettingsIt settings = _TranslationsSettingsIt._(_root);
|
||||||
@override late final _TranslationsLoginIt login = _TranslationsLoginIt._(_root);
|
@override late final _TranslationsLoginIt login = _TranslationsLoginIt._(_root);
|
||||||
|
@override late final _TranslationsLiveIt live = _TranslationsLiveIt._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamIt extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusIt status = _TranslationsStreamStatusIt._(_root);
|
@override late final _TranslationsStreamStatusIt status = _TranslationsStreamStatusIt._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Avviato ${timestamp}';
|
@override String started({required Object timestamp}) => 'Avviato ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} è andato in onda!';
|
||||||
@override late final _TranslationsStreamChatIt chat = _TranslationsStreamChatIt._(_root);
|
@override late final _TranslationsStreamChatIt chat = _TranslationsStreamChatIt._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginIt extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorIt error = _TranslationsLoginErrorIt._(_root);
|
@override late final _TranslationsLoginErrorIt error = _TranslationsLoginErrorIt._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveIt extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveIt._(TranslationsIt root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsIt _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'VAI IN DIRETTA';
|
||||||
|
@override String get configure_stream => 'Configurare il flusso';
|
||||||
|
@override String get endpoint => 'Punto finale';
|
||||||
|
@override String get accept_tos => 'Accettare i TOS';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Titolo';
|
||||||
|
@override String get summary => 'Sintesi';
|
||||||
|
@override String get image => 'Immagine di copertina';
|
||||||
|
@override String get tags => 'Tag';
|
||||||
|
@override String get nsfw => 'Contenuto NSFW';
|
||||||
|
@override String get nsfw_description => 'Controllare qui se questo streaming contiene nudità o contenuti pornografici.';
|
||||||
|
@override late final _TranslationsLiveErrorIt error = _TranslationsLiveErrorIt._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusIt extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusIt extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusIt._(TranslationsIt root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusIt._(TranslationsIt root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletIt extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Disconnettere il portafoglio';
|
@override String get disconnect_wallet => 'Disconnettere il portafoglio';
|
||||||
@override String get connect_1tap => 'Connessione a 1 rubinetto';
|
@override String get connect_1tap => 'Connessione a 1 rubinetto';
|
||||||
@override String get paste => 'Incolla URL';
|
@override String get paste => 'Incolla URL';
|
||||||
|
@override String get balance => 'Equilibrio';
|
||||||
|
@override String get name => 'Portafoglio';
|
||||||
@override late final _TranslationsSettingsWalletErrorIt error = _TranslationsSettingsWalletErrorIt._(_root);
|
@override late final _TranslationsSettingsWalletErrorIt error = _TranslationsSettingsWalletErrorIt._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorIt extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Chiave non valida';
|
@override String get invalid_key => 'Chiave non valida';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorIt extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsIt _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Flusso fallito';
|
||||||
|
@override String get connection_error => 'Errore di connessione';
|
||||||
|
@override String get start_failed => 'Avvio del flusso fallito, controllare il saldo';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteIt extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteIt extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteIt._(TranslationsIt root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteIt._(TranslationsIt root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsIt {
|
|||||||
case 'most_zapped_streamers': return 'Il maggior numero di streamer bloccati';
|
case 'most_zapped_streamers': return 'Il maggior numero di streamer bloccati';
|
||||||
case 'no_user_found': return 'Nessun utente trovato';
|
case 'no_user_found': return 'Nessun utente trovato';
|
||||||
case 'anon': return 'Anonimo';
|
case 'anon': return 'Anonimo';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('it').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n,
|
||||||
one: '1 spettatore',
|
one: '1 spettatore',
|
||||||
other: '${NumberFormat.decimalPattern('it').format(n)} spettatori',
|
other: '${NumberFormat.decimalPattern('it').format(n)} spettatori',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsIt {
|
|||||||
case 'stream.status.ended': return 'FINE';
|
case 'stream.status.ended': return 'FINE';
|
||||||
case 'stream.status.planned': return 'PREVISTO';
|
case 'stream.status.planned': return 'PREVISTO';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Avviato ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Avviato ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} è andato in onda!';
|
||||||
case 'stream.chat.disabled': return 'CHAT DISABILITATA';
|
case 'stream.chat.disabled': return 'CHAT DISABILITATA';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Il timeout scade: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsIt {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Disconnettere il portafoglio';
|
case 'settings.wallet.disconnect_wallet': return 'Disconnettere il portafoglio';
|
||||||
case 'settings.wallet.connect_1tap': return 'Connessione a 1 rubinetto';
|
case 'settings.wallet.connect_1tap': return 'Connessione a 1 rubinetto';
|
||||||
case 'settings.wallet.paste': return 'Incolla URL';
|
case 'settings.wallet.paste': return 'Incolla URL';
|
||||||
|
case 'settings.wallet.balance': return 'Equilibrio';
|
||||||
|
case 'settings.wallet.name': return 'Portafoglio';
|
||||||
case 'settings.wallet.error.logged_out': return 'Impossibile connettere il portafoglio quando si è disconnessi';
|
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 'settings.wallet.error.nwc_auth_event_not_found': return 'Nessun evento wallet auth trovato';
|
||||||
case 'login.username': return 'Nome utente';
|
case 'login.username': return 'Nome utente';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsIt {
|
|||||||
case 'login.key': return 'Accesso con chiave';
|
case 'login.key': return 'Accesso con chiave';
|
||||||
case 'login.create': return 'Crea un account';
|
case 'login.create': return 'Crea un account';
|
||||||
case 'login.error.invalid_key': return 'Chiave non valida';
|
case 'login.error.invalid_key': return 'Chiave non valida';
|
||||||
|
case 'live.start': return 'VAI IN DIRETTA';
|
||||||
|
case 'live.configure_stream': return 'Configurare il flusso';
|
||||||
|
case 'live.endpoint': return 'Punto finale';
|
||||||
|
case 'live.accept_tos': return 'Accettare i TOS';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Titolo';
|
||||||
|
case 'live.summary': return 'Sintesi';
|
||||||
|
case 'live.image': return 'Immagine di copertina';
|
||||||
|
case 'live.tags': return 'Tag';
|
||||||
|
case 'live.nsfw': return 'Contenuto NSFW';
|
||||||
|
case 'live.nsfw_description': return 'Controllare qui se questo streaming contiene nudità o contenuti pornografici.';
|
||||||
|
case 'live.error.failed': return 'Flusso fallito';
|
||||||
|
case 'live.error.connection_error': return 'Errore di connessione';
|
||||||
|
case 'live.error.start_failed': return 'Avvio del flusso fallito, controllare il saldo';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsJa extends Translations {
|
|||||||
/// 匿名ユーザー
|
/// 匿名ユーザー
|
||||||
@override String get anon => '匿名';
|
@override String get anon => '匿名';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('ja').format(n)} サッツ';
|
||||||
|
|
||||||
/// ストリームの視聴者数
|
/// ストリームの視聴者数
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n,
|
||||||
one: '1 視聴者',
|
one: '1 視聴者',
|
||||||
@ -69,6 +71,7 @@ class TranslationsJa extends Translations {
|
|||||||
@override late final _TranslationsProfileJa profile = _TranslationsProfileJa._(_root);
|
@override late final _TranslationsProfileJa profile = _TranslationsProfileJa._(_root);
|
||||||
@override late final _TranslationsSettingsJa settings = _TranslationsSettingsJa._(_root);
|
@override late final _TranslationsSettingsJa settings = _TranslationsSettingsJa._(_root);
|
||||||
@override late final _TranslationsLoginJa login = _TranslationsLoginJa._(_root);
|
@override late final _TranslationsLoginJa login = _TranslationsLoginJa._(_root);
|
||||||
|
@override late final _TranslationsLiveJa live = _TranslationsLiveJa._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamJa extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusJa status = _TranslationsStreamStatusJa._(_root);
|
@override late final _TranslationsStreamStatusJa status = _TranslationsStreamStatusJa._(_root);
|
||||||
@override String started({required Object timestamp}) => '${timestamp} を開始';
|
@override String started({required Object timestamp}) => '${timestamp} を開始';
|
||||||
|
@override String notification({required Object name}) => '${name} がライブを開始した!';
|
||||||
@override late final _TranslationsStreamChatJa chat = _TranslationsStreamChatJa._(_root);
|
@override late final _TranslationsStreamChatJa chat = _TranslationsStreamChatJa._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginJa extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorJa error = _TranslationsLoginErrorJa._(_root);
|
@override late final _TranslationsLoginErrorJa error = _TranslationsLoginErrorJa._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveJa extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveJa._(TranslationsJa root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsJa _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'ライブ中継';
|
||||||
|
@override String get configure_stream => 'ストリームの設定';
|
||||||
|
@override String get endpoint => 'エンドポイント';
|
||||||
|
@override String get accept_tos => 'TOSを受け入れる';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'タイトル';
|
||||||
|
@override String get summary => '概要';
|
||||||
|
@override String get image => '表紙画像';
|
||||||
|
@override String get tags => 'タグ';
|
||||||
|
@override String get nsfw => 'NSFWコンテンツ';
|
||||||
|
@override String get nsfw_description => 'このストリームにヌードやポルノが含まれている場合は、ここをチェックしてください。';
|
||||||
|
@override late final _TranslationsLiveErrorJa error = _TranslationsLiveErrorJa._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusJa extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusJa extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusJa._(TranslationsJa root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusJa._(TranslationsJa root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletJa extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'ウォレットの切断';
|
@override String get disconnect_wallet => 'ウォレットの切断';
|
||||||
@override String get connect_1tap => '1タップ接続';
|
@override String get connect_1tap => '1タップ接続';
|
||||||
@override String get paste => 'URLを貼り付ける';
|
@override String get paste => 'URLを貼り付ける';
|
||||||
|
@override String get balance => 'バランス';
|
||||||
|
@override String get name => '財布';
|
||||||
@override late final _TranslationsSettingsWalletErrorJa error = _TranslationsSettingsWalletErrorJa._(_root);
|
@override late final _TranslationsSettingsWalletErrorJa error = _TranslationsSettingsWalletErrorJa._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorJa extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => '無効なキー';
|
@override String get invalid_key => '無効なキー';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorJa extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsJa _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'ストリーム失敗';
|
||||||
|
@override String get connection_error => '接続エラー';
|
||||||
|
@override String get start_failed => 'ストリームの開始に失敗しました。';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteJa extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteJa extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteJa._(TranslationsJa root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteJa._(TranslationsJa root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsJa {
|
|||||||
case 'most_zapped_streamers': return '最もザッピングされたストリーマー';
|
case 'most_zapped_streamers': return '最もザッピングされたストリーマー';
|
||||||
case 'no_user_found': return 'ユーザーが見つかりません';
|
case 'no_user_found': return 'ユーザーが見つかりません';
|
||||||
case 'anon': return '匿名';
|
case 'anon': return '匿名';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('ja').format(n)} サッツ';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n,
|
||||||
one: '1 視聴者',
|
one: '1 視聴者',
|
||||||
other: '${NumberFormat.decimalPattern('ja').format(n)} 人が視聴中',
|
other: '${NumberFormat.decimalPattern('ja').format(n)} 人が視聴中',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsJa {
|
|||||||
case 'stream.status.ended': return '終了';
|
case 'stream.status.ended': return '終了';
|
||||||
case 'stream.status.planned': return '予定';
|
case 'stream.status.planned': return '予定';
|
||||||
case 'stream.started': return ({required Object timestamp}) => '${timestamp} を開始';
|
case 'stream.started': return ({required Object timestamp}) => '${timestamp} を開始';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} がライブを開始した!';
|
||||||
case 'stream.chat.disabled': return 'チャット無効';
|
case 'stream.chat.disabled': return 'チャット無効';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'タイムアウト: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsJa {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'ウォレットの切断';
|
case 'settings.wallet.disconnect_wallet': return 'ウォレットの切断';
|
||||||
case 'settings.wallet.connect_1tap': return '1タップ接続';
|
case 'settings.wallet.connect_1tap': return '1タップ接続';
|
||||||
case 'settings.wallet.paste': return 'URLを貼り付ける';
|
case 'settings.wallet.paste': return 'URLを貼り付ける';
|
||||||
|
case 'settings.wallet.balance': return 'バランス';
|
||||||
|
case 'settings.wallet.name': return '財布';
|
||||||
case 'settings.wallet.error.logged_out': return 'ログアウト時にウォレットに接続できない';
|
case 'settings.wallet.error.logged_out': return 'ログアウト時にウォレットに接続できない';
|
||||||
case 'settings.wallet.error.nwc_auth_event_not_found': return 'ウォレットの認証イベントが見つかりません';
|
case 'settings.wallet.error.nwc_auth_event_not_found': return 'ウォレットの認証イベントが見つかりません';
|
||||||
case 'login.username': return 'ユーザー名';
|
case 'login.username': return 'ユーザー名';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsJa {
|
|||||||
case 'login.key': return 'キーでログイン';
|
case 'login.key': return 'キーでログイン';
|
||||||
case 'login.create': return 'アカウントを作成する';
|
case 'login.create': return 'アカウントを作成する';
|
||||||
case 'login.error.invalid_key': return '無効なキー';
|
case 'login.error.invalid_key': return '無効なキー';
|
||||||
|
case 'live.start': return 'ライブ中継';
|
||||||
|
case 'live.configure_stream': return 'ストリームの設定';
|
||||||
|
case 'live.endpoint': return 'エンドポイント';
|
||||||
|
case 'live.accept_tos': return 'TOSを受け入れる';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'タイトル';
|
||||||
|
case 'live.summary': return '概要';
|
||||||
|
case 'live.image': return '表紙画像';
|
||||||
|
case 'live.tags': return 'タグ';
|
||||||
|
case 'live.nsfw': return 'NSFWコンテンツ';
|
||||||
|
case 'live.nsfw_description': return 'このストリームにヌードやポルノが含まれている場合は、ここをチェックしてください。';
|
||||||
|
case 'live.error.failed': return 'ストリーム失敗';
|
||||||
|
case 'live.error.connection_error': return '接続エラー';
|
||||||
|
case 'live.error.start_failed': return 'ストリームの開始に失敗しました。';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,10 +51,12 @@ class TranslationsKo extends Translations {
|
|||||||
/// 익명 사용자
|
/// 익명 사용자
|
||||||
@override String get anon => 'Anon';
|
@override String get anon => 'Anon';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('ko').format(n)} sats';
|
||||||
|
|
||||||
/// 스트림 시청자 수
|
/// 스트림 시청자 수
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n,
|
||||||
one: '시청자 1명',
|
one: '시청자 1명',
|
||||||
other: '${NumberFormat.decimalPattern('ko').format(n)} 시청자',
|
other: '{n:decimalPattern} 시청자',
|
||||||
);
|
);
|
||||||
|
|
||||||
@override late final _TranslationsStreamKo stream = _TranslationsStreamKo._(_root);
|
@override late final _TranslationsStreamKo stream = _TranslationsStreamKo._(_root);
|
||||||
@ -69,6 +71,7 @@ class TranslationsKo extends Translations {
|
|||||||
@override late final _TranslationsProfileKo profile = _TranslationsProfileKo._(_root);
|
@override late final _TranslationsProfileKo profile = _TranslationsProfileKo._(_root);
|
||||||
@override late final _TranslationsSettingsKo settings = _TranslationsSettingsKo._(_root);
|
@override late final _TranslationsSettingsKo settings = _TranslationsSettingsKo._(_root);
|
||||||
@override late final _TranslationsLoginKo login = _TranslationsLoginKo._(_root);
|
@override late final _TranslationsLoginKo login = _TranslationsLoginKo._(_root);
|
||||||
|
@override late final _TranslationsLiveKo live = _TranslationsLiveKo._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamKo extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusKo status = _TranslationsStreamStatusKo._(_root);
|
@override late final _TranslationsStreamStatusKo status = _TranslationsStreamStatusKo._(_root);
|
||||||
@override String started({required Object timestamp}) => '시작 ${timestamp}';
|
@override String started({required Object timestamp}) => '시작 ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} 라이브가 시작되었습니다!';
|
||||||
@override late final _TranslationsStreamChatKo chat = _TranslationsStreamChatKo._(_root);
|
@override late final _TranslationsStreamChatKo chat = _TranslationsStreamChatKo._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginKo extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorKo error = _TranslationsLoginErrorKo._(_root);
|
@override late final _TranslationsLoginErrorKo error = _TranslationsLoginErrorKo._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveKo extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveKo._(TranslationsKo root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsKo _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => '라이브 시작하기';
|
||||||
|
@override String get configure_stream => '스트림 구성';
|
||||||
|
@override String get endpoint => '엔드포인트';
|
||||||
|
@override String get accept_tos => 'TOS 수락';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => '제목';
|
||||||
|
@override String get summary => '요약';
|
||||||
|
@override String get image => '표지 이미지';
|
||||||
|
@override String get tags => '태그';
|
||||||
|
@override String get nsfw => 'NSFW 콘텐츠';
|
||||||
|
@override String get nsfw_description => '이 스트림에 노출 또는 음란 콘텐츠가 포함되어 있는지 여기에서 확인하세요.';
|
||||||
|
@override late final _TranslationsLiveErrorKo error = _TranslationsLiveErrorKo._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusKo extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusKo extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusKo._(TranslationsKo root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusKo._(TranslationsKo root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletKo extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => '지갑 연결 해제';
|
@override String get disconnect_wallet => '지갑 연결 해제';
|
||||||
@override String get connect_1tap => '1-탭 연결';
|
@override String get connect_1tap => '1-탭 연결';
|
||||||
@override String get paste => 'URL 붙여넣기';
|
@override String get paste => 'URL 붙여넣기';
|
||||||
|
@override String get balance => '잔액';
|
||||||
|
@override String get name => '지갑';
|
||||||
@override late final _TranslationsSettingsWalletErrorKo error = _TranslationsSettingsWalletErrorKo._(_root);
|
@override late final _TranslationsSettingsWalletErrorKo error = _TranslationsSettingsWalletErrorKo._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorKo extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => '잘못된 키';
|
@override String get invalid_key => '잘못된 키';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorKo extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsKo _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => '스트림 실패';
|
||||||
|
@override String get connection_error => '연결 오류';
|
||||||
|
@override String get start_failed => '스트림 시작에 실패했습니다. 잔액을 확인해 주세요.';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteKo extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteKo extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteKo._(TranslationsKo root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteKo._(TranslationsKo root) : this._root = root, super.internal(root);
|
||||||
@ -379,14 +421,16 @@ extension on TranslationsKo {
|
|||||||
case 'most_zapped_streamers': return '가장 많이 재핑된 스트리머';
|
case 'most_zapped_streamers': return '가장 많이 재핑된 스트리머';
|
||||||
case 'no_user_found': return '사용자를 찾을 수 없습니다.';
|
case 'no_user_found': return '사용자를 찾을 수 없습니다.';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anon';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('ko').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n,
|
||||||
one: '시청자 1명',
|
one: '시청자 1명',
|
||||||
other: '${NumberFormat.decimalPattern('ko').format(n)} 시청자',
|
other: '{n:decimalPattern} 시청자',
|
||||||
);
|
);
|
||||||
case 'stream.status.live': return '라이브';
|
case 'stream.status.live': return '라이브';
|
||||||
case 'stream.status.ended': return '종료';
|
case 'stream.status.ended': return '종료';
|
||||||
case 'stream.status.planned': return '계획된';
|
case 'stream.status.planned': return '계획된';
|
||||||
case 'stream.started': return ({required Object timestamp}) => '시작 ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => '시작 ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} 라이브가 시작되었습니다!';
|
||||||
case 'stream.chat.disabled': return '채팅 사용 안 함';
|
case 'stream.chat.disabled': return '채팅 사용 안 함';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => '시간 초과가 만료되었습니다: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsKo {
|
|||||||
case 'settings.wallet.disconnect_wallet': return '지갑 연결 해제';
|
case 'settings.wallet.disconnect_wallet': return '지갑 연결 해제';
|
||||||
case 'settings.wallet.connect_1tap': return '1-탭 연결';
|
case 'settings.wallet.connect_1tap': return '1-탭 연결';
|
||||||
case 'settings.wallet.paste': return 'URL 붙여넣기';
|
case 'settings.wallet.paste': return 'URL 붙여넣기';
|
||||||
|
case 'settings.wallet.balance': return '잔액';
|
||||||
|
case 'settings.wallet.name': return '지갑';
|
||||||
case 'settings.wallet.error.logged_out': return '로그아웃 시 지갑 연결 불가';
|
case 'settings.wallet.error.logged_out': return '로그아웃 시 지갑 연결 불가';
|
||||||
case 'settings.wallet.error.nwc_auth_event_not_found': return '지갑 인증 이벤트를 찾을 수 없습니다.';
|
case 'settings.wallet.error.nwc_auth_event_not_found': return '지갑 인증 이벤트를 찾을 수 없습니다.';
|
||||||
case 'login.username': return '사용자 이름';
|
case 'login.username': return '사용자 이름';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsKo {
|
|||||||
case 'login.key': return '키로 로그인';
|
case 'login.key': return '키로 로그인';
|
||||||
case 'login.create': return '계정 만들기';
|
case 'login.create': return '계정 만들기';
|
||||||
case 'login.error.invalid_key': return '잘못된 키';
|
case 'login.error.invalid_key': return '잘못된 키';
|
||||||
|
case 'live.start': return '라이브 시작하기';
|
||||||
|
case 'live.configure_stream': return '스트림 구성';
|
||||||
|
case 'live.endpoint': return '엔드포인트';
|
||||||
|
case 'live.accept_tos': return 'TOS 수락';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return '제목';
|
||||||
|
case 'live.summary': return '요약';
|
||||||
|
case 'live.image': return '표지 이미지';
|
||||||
|
case 'live.tags': return '태그';
|
||||||
|
case 'live.nsfw': return 'NSFW 콘텐츠';
|
||||||
|
case 'live.nsfw_description': return '이 스트림에 노출 또는 음란 콘텐츠가 포함되어 있는지 여기에서 확인하세요.';
|
||||||
|
case 'live.error.failed': return '스트림 실패';
|
||||||
|
case 'live.error.connection_error': return '연결 오류';
|
||||||
|
case 'live.error.start_failed': return '스트림 시작에 실패했습니다. 잔액을 확인해 주세요.';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsNl extends Translations {
|
|||||||
/// Een anonieme gebruiker
|
/// Een anonieme gebruiker
|
||||||
@override String get anon => 'Anon';
|
@override String get anon => 'Anon';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('nl').format(n)} sats';
|
||||||
|
|
||||||
/// Aantal kijkers van de stream
|
/// Aantal kijkers van de stream
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n,
|
||||||
one: '1 kijker',
|
one: '1 kijker',
|
||||||
@ -69,6 +71,7 @@ class TranslationsNl extends Translations {
|
|||||||
@override late final _TranslationsProfileNl profile = _TranslationsProfileNl._(_root);
|
@override late final _TranslationsProfileNl profile = _TranslationsProfileNl._(_root);
|
||||||
@override late final _TranslationsSettingsNl settings = _TranslationsSettingsNl._(_root);
|
@override late final _TranslationsSettingsNl settings = _TranslationsSettingsNl._(_root);
|
||||||
@override late final _TranslationsLoginNl login = _TranslationsLoginNl._(_root);
|
@override late final _TranslationsLoginNl login = _TranslationsLoginNl._(_root);
|
||||||
|
@override late final _TranslationsLiveNl live = _TranslationsLiveNl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamNl extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusNl status = _TranslationsStreamStatusNl._(_root);
|
@override late final _TranslationsStreamStatusNl status = _TranslationsStreamStatusNl._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Begonnen met ${timestamp}';
|
@override String started({required Object timestamp}) => 'Begonnen met ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} ging live!';
|
||||||
@override late final _TranslationsStreamChatNl chat = _TranslationsStreamChatNl._(_root);
|
@override late final _TranslationsStreamChatNl chat = _TranslationsStreamChatNl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginNl extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorNl error = _TranslationsLoginErrorNl._(_root);
|
@override late final _TranslationsLoginErrorNl error = _TranslationsLoginErrorNl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveNl extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveNl._(TranslationsNl root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsNl _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'LIVE GAAN';
|
||||||
|
@override String get configure_stream => 'Stream configureren';
|
||||||
|
@override String get endpoint => 'Eindpunt';
|
||||||
|
@override String get accept_tos => 'TOS accepteren';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Titel';
|
||||||
|
@override String get summary => 'Samenvatting';
|
||||||
|
@override String get image => 'Afbeelding omslag';
|
||||||
|
@override String get tags => 'Tags';
|
||||||
|
@override String get nsfw => 'NSFW-inhoud';
|
||||||
|
@override String get nsfw_description => 'Controleer hier of deze stream naaktheid of pornografische inhoud bevat.';
|
||||||
|
@override late final _TranslationsLiveErrorNl error = _TranslationsLiveErrorNl._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusNl extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusNl extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusNl._(TranslationsNl root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusNl._(TranslationsNl root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletNl extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Portefeuille loskoppelen';
|
@override String get disconnect_wallet => 'Portefeuille loskoppelen';
|
||||||
@override String get connect_1tap => '1-Tap Aansluiting';
|
@override String get connect_1tap => '1-Tap Aansluiting';
|
||||||
@override String get paste => 'URL plakken';
|
@override String get paste => 'URL plakken';
|
||||||
|
@override String get balance => 'Saldo';
|
||||||
|
@override String get name => 'Portemonnee';
|
||||||
@override late final _TranslationsSettingsWalletErrorNl error = _TranslationsSettingsWalletErrorNl._(_root);
|
@override late final _TranslationsSettingsWalletErrorNl error = _TranslationsSettingsWalletErrorNl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorNl extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Ongeldige sleutel';
|
@override String get invalid_key => 'Ongeldige sleutel';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorNl extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsNl _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Stream mislukt';
|
||||||
|
@override String get connection_error => 'Fout bij verbinding';
|
||||||
|
@override String get start_failed => 'Stream start mislukt, controleer uw saldo';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteNl extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteNl extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteNl._(TranslationsNl root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteNl._(TranslationsNl root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsNl {
|
|||||||
case 'most_zapped_streamers': return 'Meeste Zapped Streamers';
|
case 'most_zapped_streamers': return 'Meeste Zapped Streamers';
|
||||||
case 'no_user_found': return 'Geen gebruiker gevonden';
|
case 'no_user_found': return 'Geen gebruiker gevonden';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anon';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('nl').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n,
|
||||||
one: '1 kijker',
|
one: '1 kijker',
|
||||||
other: '${NumberFormat.decimalPattern('nl').format(n)} kijkers',
|
other: '${NumberFormat.decimalPattern('nl').format(n)} kijkers',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsNl {
|
|||||||
case 'stream.status.ended': return 'GESLOTEN';
|
case 'stream.status.ended': return 'GESLOTEN';
|
||||||
case 'stream.status.planned': return 'GEPLAND';
|
case 'stream.status.planned': return 'GEPLAND';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Begonnen met ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Begonnen met ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} ging live!';
|
||||||
case 'stream.chat.disabled': return 'CHAT UITGESCHAKELD';
|
case 'stream.chat.disabled': return 'CHAT UITGESCHAKELD';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Time-out loopt af: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsNl {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Portefeuille loskoppelen';
|
case 'settings.wallet.disconnect_wallet': return 'Portefeuille loskoppelen';
|
||||||
case 'settings.wallet.connect_1tap': return '1-Tap Aansluiting';
|
case 'settings.wallet.connect_1tap': return '1-Tap Aansluiting';
|
||||||
case 'settings.wallet.paste': return 'URL plakken';
|
case 'settings.wallet.paste': return 'URL plakken';
|
||||||
|
case 'settings.wallet.balance': return 'Saldo';
|
||||||
|
case 'settings.wallet.name': return 'Portemonnee';
|
||||||
case 'settings.wallet.error.logged_out': return 'Kan geen verbinding maken met portemonnee als ik ben uitgelogd';
|
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 'settings.wallet.error.nwc_auth_event_not_found': return 'Geen portemonnee-auth-gebeurtenis gevonden';
|
||||||
case 'login.username': return 'Gebruikersnaam';
|
case 'login.username': return 'Gebruikersnaam';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsNl {
|
|||||||
case 'login.key': return 'Inloggen met sleutel';
|
case 'login.key': return 'Inloggen met sleutel';
|
||||||
case 'login.create': return 'Account aanmaken';
|
case 'login.create': return 'Account aanmaken';
|
||||||
case 'login.error.invalid_key': return 'Ongeldige sleutel';
|
case 'login.error.invalid_key': return 'Ongeldige sleutel';
|
||||||
|
case 'live.start': return 'LIVE GAAN';
|
||||||
|
case 'live.configure_stream': return 'Stream configureren';
|
||||||
|
case 'live.endpoint': return 'Eindpunt';
|
||||||
|
case 'live.accept_tos': return 'TOS accepteren';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Titel';
|
||||||
|
case 'live.summary': return 'Samenvatting';
|
||||||
|
case 'live.image': return 'Afbeelding omslag';
|
||||||
|
case 'live.tags': return 'Tags';
|
||||||
|
case 'live.nsfw': return 'NSFW-inhoud';
|
||||||
|
case 'live.nsfw_description': return 'Controleer hier of deze stream naaktheid of pornografische inhoud bevat.';
|
||||||
|
case 'live.error.failed': return 'Stream mislukt';
|
||||||
|
case 'live.error.connection_error': return 'Fout bij verbinding';
|
||||||
|
case 'live.error.start_failed': return 'Stream start mislukt, controleer uw saldo';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsPl extends Translations {
|
|||||||
/// Anonimowy użytkownik
|
/// Anonimowy użytkownik
|
||||||
@override String get anon => 'Anon';
|
@override String get anon => 'Anon';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('pl').format(n)} sats';
|
||||||
|
|
||||||
/// Liczba widzów strumienia
|
/// Liczba widzów strumienia
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n,
|
||||||
one: '1 przeglądarka',
|
one: '1 przeglądarka',
|
||||||
@ -69,6 +71,7 @@ class TranslationsPl extends Translations {
|
|||||||
@override late final _TranslationsProfilePl profile = _TranslationsProfilePl._(_root);
|
@override late final _TranslationsProfilePl profile = _TranslationsProfilePl._(_root);
|
||||||
@override late final _TranslationsSettingsPl settings = _TranslationsSettingsPl._(_root);
|
@override late final _TranslationsSettingsPl settings = _TranslationsSettingsPl._(_root);
|
||||||
@override late final _TranslationsLoginPl login = _TranslationsLoginPl._(_root);
|
@override late final _TranslationsLoginPl login = _TranslationsLoginPl._(_root);
|
||||||
|
@override late final _TranslationsLivePl live = _TranslationsLivePl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamPl extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusPl status = _TranslationsStreamStatusPl._(_root);
|
@override late final _TranslationsStreamStatusPl status = _TranslationsStreamStatusPl._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Start ${timestamp}';
|
@override String started({required Object timestamp}) => 'Start ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} został uruchomiony!';
|
||||||
@override late final _TranslationsStreamChatPl chat = _TranslationsStreamChatPl._(_root);
|
@override late final _TranslationsStreamChatPl chat = _TranslationsStreamChatPl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginPl extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorPl error = _TranslationsLoginErrorPl._(_root);
|
@override late final _TranslationsLoginErrorPl error = _TranslationsLoginErrorPl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLivePl extends TranslationsLiveEn {
|
||||||
|
_TranslationsLivePl._(TranslationsPl root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsPl _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'GO LIVE';
|
||||||
|
@override String get configure_stream => 'Konfiguracja strumienia';
|
||||||
|
@override String get endpoint => 'Punkt końcowy';
|
||||||
|
@override String get accept_tos => 'Zaakceptuj Regulamin';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Tytuł';
|
||||||
|
@override String get summary => 'Podsumowanie';
|
||||||
|
@override String get image => 'Obraz na okładce';
|
||||||
|
@override String get tags => 'Tagi';
|
||||||
|
@override String get nsfw => 'Treści NSFW';
|
||||||
|
@override String get nsfw_description => 'Sprawdź tutaj, czy ten stream zawiera nagość lub treści pornograficzne.';
|
||||||
|
@override late final _TranslationsLiveErrorPl error = _TranslationsLiveErrorPl._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusPl extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusPl extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusPl._(TranslationsPl root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusPl._(TranslationsPl root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletPl extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Odłącz portfel';
|
@override String get disconnect_wallet => 'Odłącz portfel';
|
||||||
@override String get connect_1tap => 'Połączenie 1-wtykowe';
|
@override String get connect_1tap => 'Połączenie 1-wtykowe';
|
||||||
@override String get paste => 'Wklej adres URL';
|
@override String get paste => 'Wklej adres URL';
|
||||||
|
@override String get balance => 'Równowaga';
|
||||||
|
@override String get name => 'Portfel';
|
||||||
@override late final _TranslationsSettingsWalletErrorPl error = _TranslationsSettingsWalletErrorPl._(_root);
|
@override late final _TranslationsSettingsWalletErrorPl error = _TranslationsSettingsWalletErrorPl._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorPl extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Nieprawidłowy klucz';
|
@override String get invalid_key => 'Nieprawidłowy klucz';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorPl extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsPl _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Strumień nie powiódł się';
|
||||||
|
@override String get connection_error => 'Błąd połączenia';
|
||||||
|
@override String get start_failed => 'Uruchomienie strumienia nie powiodło się, sprawdź saldo';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWritePl extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWritePl extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWritePl._(TranslationsPl root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWritePl._(TranslationsPl root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsPl {
|
|||||||
case 'most_zapped_streamers': return 'Większość zapped streamerów';
|
case 'most_zapped_streamers': return 'Większość zapped streamerów';
|
||||||
case 'no_user_found': return 'Nie znaleziono użytkownika';
|
case 'no_user_found': return 'Nie znaleziono użytkownika';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anon';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('pl').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n,
|
||||||
one: '1 przeglądarka',
|
one: '1 przeglądarka',
|
||||||
other: '{n:decimalPattern} widzów',
|
other: '{n:decimalPattern} widzów',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsPl {
|
|||||||
case 'stream.status.ended': return 'ZAKOŃCZONY';
|
case 'stream.status.ended': return 'ZAKOŃCZONY';
|
||||||
case 'stream.status.planned': return 'PLANOWANE';
|
case 'stream.status.planned': return 'PLANOWANE';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Start ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Start ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} został uruchomiony!';
|
||||||
case 'stream.chat.disabled': return 'CZAT WYŁĄCZONY';
|
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.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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsPl {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Odłącz portfel';
|
case 'settings.wallet.disconnect_wallet': return 'Odłącz portfel';
|
||||||
case 'settings.wallet.connect_1tap': return 'Połączenie 1-wtykowe';
|
case 'settings.wallet.connect_1tap': return 'Połączenie 1-wtykowe';
|
||||||
case 'settings.wallet.paste': return 'Wklej adres URL';
|
case 'settings.wallet.paste': return 'Wklej adres URL';
|
||||||
|
case 'settings.wallet.balance': return 'Równowaga';
|
||||||
|
case 'settings.wallet.name': return 'Portfel';
|
||||||
case 'settings.wallet.error.logged_out': return 'Nie można połączyć portfela po wylogowaniu';
|
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 'settings.wallet.error.nwc_auth_event_not_found': return 'Nie znaleziono zdarzenia autoryzacji portfela';
|
||||||
case 'login.username': return 'Nazwa użytkownika';
|
case 'login.username': return 'Nazwa użytkownika';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsPl {
|
|||||||
case 'login.key': return 'Logowanie za pomocą klucza';
|
case 'login.key': return 'Logowanie za pomocą klucza';
|
||||||
case 'login.create': return 'Utwórz konto';
|
case 'login.create': return 'Utwórz konto';
|
||||||
case 'login.error.invalid_key': return 'Nieprawidłowy klucz';
|
case 'login.error.invalid_key': return 'Nieprawidłowy klucz';
|
||||||
|
case 'live.start': return 'GO LIVE';
|
||||||
|
case 'live.configure_stream': return 'Konfiguracja strumienia';
|
||||||
|
case 'live.endpoint': return 'Punkt końcowy';
|
||||||
|
case 'live.accept_tos': return 'Zaakceptuj Regulamin';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Tytuł';
|
||||||
|
case 'live.summary': return 'Podsumowanie';
|
||||||
|
case 'live.image': return 'Obraz na okładce';
|
||||||
|
case 'live.tags': return 'Tagi';
|
||||||
|
case 'live.nsfw': return 'Treści NSFW';
|
||||||
|
case 'live.nsfw_description': return 'Sprawdź tutaj, czy ten stream zawiera nagość lub treści pornograficzne.';
|
||||||
|
case 'live.error.failed': return 'Strumień nie powiódł się';
|
||||||
|
case 'live.error.connection_error': return 'Błąd połączenia';
|
||||||
|
case 'live.error.start_failed': return 'Uruchomienie strumienia nie powiodło się, sprawdź saldo';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsPt extends Translations {
|
|||||||
/// Um usuário anônimo
|
/// Um usuário anônimo
|
||||||
@override String get anon => 'Anônimo';
|
@override String get anon => 'Anônimo';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('pt').format(n)} sats';
|
||||||
|
|
||||||
/// Número de espectadores da transmissão
|
/// Número de espectadores da transmissão
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n,
|
||||||
one: '1 visualizador',
|
one: '1 visualizador',
|
||||||
@ -69,6 +71,7 @@ class TranslationsPt extends Translations {
|
|||||||
@override late final _TranslationsProfilePt profile = _TranslationsProfilePt._(_root);
|
@override late final _TranslationsProfilePt profile = _TranslationsProfilePt._(_root);
|
||||||
@override late final _TranslationsSettingsPt settings = _TranslationsSettingsPt._(_root);
|
@override late final _TranslationsSettingsPt settings = _TranslationsSettingsPt._(_root);
|
||||||
@override late final _TranslationsLoginPt login = _TranslationsLoginPt._(_root);
|
@override late final _TranslationsLoginPt login = _TranslationsLoginPt._(_root);
|
||||||
|
@override late final _TranslationsLivePt live = _TranslationsLivePt._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamPt extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusPt status = _TranslationsStreamStatusPt._(_root);
|
@override late final _TranslationsStreamStatusPt status = _TranslationsStreamStatusPt._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Iniciado em ${timestamp}';
|
@override String started({required Object timestamp}) => 'Iniciado em ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} foi ao ar!';
|
||||||
@override late final _TranslationsStreamChatPt chat = _TranslationsStreamChatPt._(_root);
|
@override late final _TranslationsStreamChatPt chat = _TranslationsStreamChatPt._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginPt extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorPt error = _TranslationsLoginErrorPt._(_root);
|
@override late final _TranslationsLoginErrorPt error = _TranslationsLoginErrorPt._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLivePt extends TranslationsLiveEn {
|
||||||
|
_TranslationsLivePt._(TranslationsPt root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsPt _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'GO LIVE';
|
||||||
|
@override String get configure_stream => 'Configurar fluxo';
|
||||||
|
@override String get endpoint => 'Ponto final';
|
||||||
|
@override String get accept_tos => 'Aceitar os Termos de Serviço';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Título';
|
||||||
|
@override String get summary => 'Resumo';
|
||||||
|
@override String get image => 'Imagem da capa';
|
||||||
|
@override String get tags => 'Tags';
|
||||||
|
@override String get nsfw => 'Conteúdo NSFW';
|
||||||
|
@override String get nsfw_description => 'Verifique aqui se essa transmissão contém nudez ou conteúdo pornográfico.';
|
||||||
|
@override late final _TranslationsLiveErrorPt error = _TranslationsLiveErrorPt._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusPt extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusPt extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusPt._(TranslationsPt root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusPt._(TranslationsPt root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletPt extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Desconectar carteira';
|
@override String get disconnect_wallet => 'Desconectar carteira';
|
||||||
@override String get connect_1tap => 'Conexão de 1 torneira';
|
@override String get connect_1tap => 'Conexão de 1 torneira';
|
||||||
@override String get paste => 'Colar URL';
|
@override String get paste => 'Colar URL';
|
||||||
|
@override String get balance => 'Equilíbrio';
|
||||||
|
@override String get name => 'Carteira';
|
||||||
@override late final _TranslationsSettingsWalletErrorPt error = _TranslationsSettingsWalletErrorPt._(_root);
|
@override late final _TranslationsSettingsWalletErrorPt error = _TranslationsSettingsWalletErrorPt._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorPt extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Chave inválida';
|
@override String get invalid_key => 'Chave inválida';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorPt extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsPt _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'O fluxo falhou';
|
||||||
|
@override String get connection_error => 'Erro de conexão';
|
||||||
|
@override String get start_failed => 'Falha no início do fluxo, verifique seu saldo';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWritePt extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWritePt extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWritePt._(TranslationsPt root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWritePt._(TranslationsPt root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsPt {
|
|||||||
case 'most_zapped_streamers': return 'Streamers mais afetados';
|
case 'most_zapped_streamers': return 'Streamers mais afetados';
|
||||||
case 'no_user_found': return 'Nenhum usuário encontrado';
|
case 'no_user_found': return 'Nenhum usuário encontrado';
|
||||||
case 'anon': return 'Anônimo';
|
case 'anon': return 'Anônimo';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('pt').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n,
|
||||||
one: '1 visualizador',
|
one: '1 visualizador',
|
||||||
other: '${NumberFormat.decimalPattern('pt').format(n)} espectadores',
|
other: '${NumberFormat.decimalPattern('pt').format(n)} espectadores',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsPt {
|
|||||||
case 'stream.status.ended': return 'FINALIZADO';
|
case 'stream.status.ended': return 'FINALIZADO';
|
||||||
case 'stream.status.planned': return 'PLANEJADO';
|
case 'stream.status.planned': return 'PLANEJADO';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Iniciado em ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Iniciado em ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} foi ao ar!';
|
||||||
case 'stream.chat.disabled': return 'BATE-PAPO DESATIVADO';
|
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.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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsPt {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Desconectar carteira';
|
case 'settings.wallet.disconnect_wallet': return 'Desconectar carteira';
|
||||||
case 'settings.wallet.connect_1tap': return 'Conexão de 1 torneira';
|
case 'settings.wallet.connect_1tap': return 'Conexão de 1 torneira';
|
||||||
case 'settings.wallet.paste': return 'Colar URL';
|
case 'settings.wallet.paste': return 'Colar URL';
|
||||||
|
case 'settings.wallet.balance': return 'Equilíbrio';
|
||||||
|
case 'settings.wallet.name': return 'Carteira';
|
||||||
case 'settings.wallet.error.logged_out': return 'Não consigo conectar a carteira quando estou desconectado';
|
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 '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.username': return 'Nome de usuário';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsPt {
|
|||||||
case 'login.key': return 'Login com chave';
|
case 'login.key': return 'Login com chave';
|
||||||
case 'login.create': return 'Criar Conta';
|
case 'login.create': return 'Criar Conta';
|
||||||
case 'login.error.invalid_key': return 'Chave inválida';
|
case 'login.error.invalid_key': return 'Chave inválida';
|
||||||
|
case 'live.start': return 'GO LIVE';
|
||||||
|
case 'live.configure_stream': return 'Configurar fluxo';
|
||||||
|
case 'live.endpoint': return 'Ponto final';
|
||||||
|
case 'live.accept_tos': return 'Aceitar os Termos de Serviço';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Título';
|
||||||
|
case 'live.summary': return 'Resumo';
|
||||||
|
case 'live.image': return 'Imagem da capa';
|
||||||
|
case 'live.tags': return 'Tags';
|
||||||
|
case 'live.nsfw': return 'Conteúdo NSFW';
|
||||||
|
case 'live.nsfw_description': return 'Verifique aqui se essa transmissão contém nudez ou conteúdo pornográfico.';
|
||||||
|
case 'live.error.failed': return 'O fluxo falhou';
|
||||||
|
case 'live.error.connection_error': return 'Erro de conexão';
|
||||||
|
case 'live.error.start_failed': return 'Falha no início do fluxo, verifique seu saldo';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsRo extends Translations {
|
|||||||
/// Un utilizator anonim
|
/// Un utilizator anonim
|
||||||
@override String get anon => 'Anon';
|
@override String get anon => 'Anon';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('ro').format(n)} sats';
|
||||||
|
|
||||||
/// Numărul de telespectatori ai fluxului
|
/// Numărul de telespectatori ai fluxului
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n,
|
||||||
one: '1 vizualizator',
|
one: '1 vizualizator',
|
||||||
@ -69,6 +71,7 @@ class TranslationsRo extends Translations {
|
|||||||
@override late final _TranslationsProfileRo profile = _TranslationsProfileRo._(_root);
|
@override late final _TranslationsProfileRo profile = _TranslationsProfileRo._(_root);
|
||||||
@override late final _TranslationsSettingsRo settings = _TranslationsSettingsRo._(_root);
|
@override late final _TranslationsSettingsRo settings = _TranslationsSettingsRo._(_root);
|
||||||
@override late final _TranslationsLoginRo login = _TranslationsLoginRo._(_root);
|
@override late final _TranslationsLoginRo login = _TranslationsLoginRo._(_root);
|
||||||
|
@override late final _TranslationsLiveRo live = _TranslationsLiveRo._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamRo extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusRo status = _TranslationsStreamStatusRo._(_root);
|
@override late final _TranslationsStreamStatusRo status = _TranslationsStreamStatusRo._(_root);
|
||||||
@override String started({required Object timestamp}) => 'A început ${timestamp}';
|
@override String started({required Object timestamp}) => 'A început ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} a intrat în direct!';
|
||||||
@override late final _TranslationsStreamChatRo chat = _TranslationsStreamChatRo._(_root);
|
@override late final _TranslationsStreamChatRo chat = _TranslationsStreamChatRo._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginRo extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorRo error = _TranslationsLoginErrorRo._(_root);
|
@override late final _TranslationsLoginErrorRo error = _TranslationsLoginErrorRo._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveRo extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveRo._(TranslationsRo root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsRo _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'GO LIVE';
|
||||||
|
@override String get configure_stream => 'Configurați fluxul';
|
||||||
|
@override String get endpoint => 'Punct final';
|
||||||
|
@override String get accept_tos => 'Acceptați TOS';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Titlu';
|
||||||
|
@override String get summary => 'Rezumat';
|
||||||
|
@override String get image => 'Imagine de copertă';
|
||||||
|
@override String get tags => 'Etichete';
|
||||||
|
@override String get nsfw => 'Conținut NSFW';
|
||||||
|
@override String get nsfw_description => 'Bifați aici dacă acest flux conține nuditate sau conținut pornografic.';
|
||||||
|
@override late final _TranslationsLiveErrorRo error = _TranslationsLiveErrorRo._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusRo extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusRo extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusRo._(TranslationsRo root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusRo._(TranslationsRo root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletRo extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Deconectați portofelul';
|
@override String get disconnect_wallet => 'Deconectați portofelul';
|
||||||
@override String get connect_1tap => 'Conexiune 1-Tap';
|
@override String get connect_1tap => 'Conexiune 1-Tap';
|
||||||
@override String get paste => 'Lipiți URL';
|
@override String get paste => 'Lipiți URL';
|
||||||
|
@override String get balance => 'Echilibru';
|
||||||
|
@override String get name => 'Portofel';
|
||||||
@override late final _TranslationsSettingsWalletErrorRo error = _TranslationsSettingsWalletErrorRo._(_root);
|
@override late final _TranslationsSettingsWalletErrorRo error = _TranslationsSettingsWalletErrorRo._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorRo extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Cheie invalidă';
|
@override String get invalid_key => 'Cheie invalidă';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorRo extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsRo _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Fluxul a eșuat';
|
||||||
|
@override String get connection_error => 'Eroare de conectare';
|
||||||
|
@override String get start_failed => 'Pornirea fluxului a eșuat, vă rugăm să verificați soldul';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteRo extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteRo extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteRo._(TranslationsRo root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteRo._(TranslationsRo root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsRo {
|
|||||||
case 'most_zapped_streamers': return 'Cele mai multe Streamers Zapped';
|
case 'most_zapped_streamers': return 'Cele mai multe Streamers Zapped';
|
||||||
case 'no_user_found': return 'Niciun utilizator găsit';
|
case 'no_user_found': return 'Niciun utilizator găsit';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anon';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('ro').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n,
|
||||||
one: '1 vizualizator',
|
one: '1 vizualizator',
|
||||||
other: '${NumberFormat.decimalPattern('ro').format(n)} telespectatori',
|
other: '${NumberFormat.decimalPattern('ro').format(n)} telespectatori',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsRo {
|
|||||||
case 'stream.status.ended': return 'TERMINAT';
|
case 'stream.status.ended': return 'TERMINAT';
|
||||||
case 'stream.status.planned': return 'PLANIFICATE';
|
case 'stream.status.planned': return 'PLANIFICATE';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'A început ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'A început ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} a intrat în direct!';
|
||||||
case 'stream.chat.disabled': return 'CHAT DEZACTIVAT';
|
case 'stream.chat.disabled': return 'CHAT DEZACTIVAT';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timpul expiră: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsRo {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Deconectați portofelul';
|
case 'settings.wallet.disconnect_wallet': return 'Deconectați portofelul';
|
||||||
case 'settings.wallet.connect_1tap': return 'Conexiune 1-Tap';
|
case 'settings.wallet.connect_1tap': return 'Conexiune 1-Tap';
|
||||||
case 'settings.wallet.paste': return 'Lipiți URL';
|
case 'settings.wallet.paste': return 'Lipiți URL';
|
||||||
|
case 'settings.wallet.balance': return 'Echilibru';
|
||||||
|
case 'settings.wallet.name': return 'Portofel';
|
||||||
case 'settings.wallet.error.logged_out': return 'Nu puteți conecta portofelul atunci când sunteți deconectat';
|
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 '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.username': return 'Nume utilizator';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsRo {
|
|||||||
case 'login.key': return 'Autentificare cu cheie';
|
case 'login.key': return 'Autentificare cu cheie';
|
||||||
case 'login.create': return 'Creare cont';
|
case 'login.create': return 'Creare cont';
|
||||||
case 'login.error.invalid_key': return 'Cheie invalidă';
|
case 'login.error.invalid_key': return 'Cheie invalidă';
|
||||||
|
case 'live.start': return 'GO LIVE';
|
||||||
|
case 'live.configure_stream': return 'Configurați fluxul';
|
||||||
|
case 'live.endpoint': return 'Punct final';
|
||||||
|
case 'live.accept_tos': return 'Acceptați TOS';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Titlu';
|
||||||
|
case 'live.summary': return 'Rezumat';
|
||||||
|
case 'live.image': return 'Imagine de copertă';
|
||||||
|
case 'live.tags': return 'Etichete';
|
||||||
|
case 'live.nsfw': return 'Conținut NSFW';
|
||||||
|
case 'live.nsfw_description': return 'Bifați aici dacă acest flux conține nuditate sau conținut pornografic.';
|
||||||
|
case 'live.error.failed': return 'Fluxul a eșuat';
|
||||||
|
case 'live.error.connection_error': return 'Eroare de conectare';
|
||||||
|
case 'live.error.start_failed': return 'Pornirea fluxului a eșuat, vă rugăm să verificați soldul';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsRu extends Translations {
|
|||||||
/// Анонимный пользователь
|
/// Анонимный пользователь
|
||||||
@override String get anon => 'Аноним';
|
@override String get anon => 'Аноним';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('ru').format(n)} sats';
|
||||||
|
|
||||||
/// Количество зрителей потока
|
/// Количество зрителей потока
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n,
|
||||||
one: '1 зритель',
|
one: '1 зритель',
|
||||||
@ -69,6 +71,7 @@ class TranslationsRu extends Translations {
|
|||||||
@override late final _TranslationsProfileRu profile = _TranslationsProfileRu._(_root);
|
@override late final _TranslationsProfileRu profile = _TranslationsProfileRu._(_root);
|
||||||
@override late final _TranslationsSettingsRu settings = _TranslationsSettingsRu._(_root);
|
@override late final _TranslationsSettingsRu settings = _TranslationsSettingsRu._(_root);
|
||||||
@override late final _TranslationsLoginRu login = _TranslationsLoginRu._(_root);
|
@override late final _TranslationsLoginRu login = _TranslationsLoginRu._(_root);
|
||||||
|
@override late final _TranslationsLiveRu live = _TranslationsLiveRu._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamRu extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusRu status = _TranslationsStreamStatusRu._(_root);
|
@override late final _TranslationsStreamStatusRu status = _TranslationsStreamStatusRu._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Начало ${timestamp}';
|
@override String started({required Object timestamp}) => 'Начало ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} запустился!';
|
||||||
@override late final _TranslationsStreamChatRu chat = _TranslationsStreamChatRu._(_root);
|
@override late final _TranslationsStreamChatRu chat = _TranslationsStreamChatRu._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginRu extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorRu error = _TranslationsLoginErrorRu._(_root);
|
@override late final _TranslationsLoginErrorRu error = _TranslationsLoginErrorRu._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveRu extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveRu._(TranslationsRu root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsRu _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'ПЕРЕЙТИ В ПРЯМОЙ ЭФИР';
|
||||||
|
@override String get configure_stream => 'Настроить поток';
|
||||||
|
@override String get endpoint => 'Конечная точка';
|
||||||
|
@override String get accept_tos => 'Принять TOS';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Название';
|
||||||
|
@override String get summary => 'Резюме';
|
||||||
|
@override String get image => 'Изображение на обложке';
|
||||||
|
@override String get tags => 'Теги';
|
||||||
|
@override String get nsfw => 'NSFW-контент';
|
||||||
|
@override String get nsfw_description => 'Отметьте здесь, если этот поток содержит наготу или порнографические материалы.';
|
||||||
|
@override late final _TranslationsLiveErrorRu error = _TranslationsLiveErrorRu._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusRu extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusRu extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusRu._(TranslationsRu root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusRu._(TranslationsRu root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletRu extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Отключить кошелек';
|
@override String get disconnect_wallet => 'Отключить кошелек';
|
||||||
@override String get connect_1tap => '1-кратное соединение';
|
@override String get connect_1tap => '1-кратное соединение';
|
||||||
@override String get paste => 'Вставить URL';
|
@override String get paste => 'Вставить URL';
|
||||||
|
@override String get balance => 'Баланс';
|
||||||
|
@override String get name => 'Кошелек';
|
||||||
@override late final _TranslationsSettingsWalletErrorRu error = _TranslationsSettingsWalletErrorRu._(_root);
|
@override late final _TranslationsSettingsWalletErrorRu error = _TranslationsSettingsWalletErrorRu._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorRu extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Неверный ключ';
|
@override String get invalid_key => 'Неверный ключ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorRu extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsRu _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Сбой потока';
|
||||||
|
@override String get connection_error => 'Ошибка подключения';
|
||||||
|
@override String get start_failed => 'Запуск потока не удался, пожалуйста, проверьте баланс';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteRu extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteRu extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteRu._(TranslationsRu root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteRu._(TranslationsRu root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsRu {
|
|||||||
case 'most_zapped_streamers': return 'Самые прыткие стримеры';
|
case 'most_zapped_streamers': return 'Самые прыткие стримеры';
|
||||||
case 'no_user_found': return 'Пользователь не найден';
|
case 'no_user_found': return 'Пользователь не найден';
|
||||||
case 'anon': return 'Аноним';
|
case 'anon': return 'Аноним';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('ru').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n,
|
||||||
one: '1 зритель',
|
one: '1 зритель',
|
||||||
other: '${NumberFormat.decimalPattern('ru').format(n)} зрителей',
|
other: '${NumberFormat.decimalPattern('ru').format(n)} зрителей',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsRu {
|
|||||||
case 'stream.status.ended': return 'КОНЕЦ';
|
case 'stream.status.ended': return 'КОНЕЦ';
|
||||||
case 'stream.status.planned': return 'ПЛАНИРУЕМЫЙ';
|
case 'stream.status.planned': return 'ПЛАНИРУЕМЫЙ';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Начало ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Начало ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} запустился!';
|
||||||
case 'stream.chat.disabled': return 'ЧАТ ОТКЛЮЧЕН';
|
case 'stream.chat.disabled': return 'ЧАТ ОТКЛЮЧЕН';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Таймаут истекает: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsRu {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Отключить кошелек';
|
case 'settings.wallet.disconnect_wallet': return 'Отключить кошелек';
|
||||||
case 'settings.wallet.connect_1tap': return '1-кратное соединение';
|
case 'settings.wallet.connect_1tap': return '1-кратное соединение';
|
||||||
case 'settings.wallet.paste': return 'Вставить URL';
|
case 'settings.wallet.paste': return 'Вставить URL';
|
||||||
|
case 'settings.wallet.balance': return 'Баланс';
|
||||||
|
case 'settings.wallet.name': return 'Кошелек';
|
||||||
case 'settings.wallet.error.logged_out': return 'Невозможно подключить кошелек при выходе из системы';
|
case 'settings.wallet.error.logged_out': return 'Невозможно подключить кошелек при выходе из системы';
|
||||||
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Событие аутентификации кошелька не найдено';
|
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Событие аутентификации кошелька не найдено';
|
||||||
case 'login.username': return 'Имя пользователя';
|
case 'login.username': return 'Имя пользователя';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsRu {
|
|||||||
case 'login.key': return 'Вход в систему с помощью ключа';
|
case 'login.key': return 'Вход в систему с помощью ключа';
|
||||||
case 'login.create': return 'Создать аккаунт';
|
case 'login.create': return 'Создать аккаунт';
|
||||||
case 'login.error.invalid_key': return 'Неверный ключ';
|
case 'login.error.invalid_key': return 'Неверный ключ';
|
||||||
|
case 'live.start': return 'ПЕРЕЙТИ В ПРЯМОЙ ЭФИР';
|
||||||
|
case 'live.configure_stream': return 'Настроить поток';
|
||||||
|
case 'live.endpoint': return 'Конечная точка';
|
||||||
|
case 'live.accept_tos': return 'Принять TOS';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Название';
|
||||||
|
case 'live.summary': return 'Резюме';
|
||||||
|
case 'live.image': return 'Изображение на обложке';
|
||||||
|
case 'live.tags': return 'Теги';
|
||||||
|
case 'live.nsfw': return 'NSFW-контент';
|
||||||
|
case 'live.nsfw_description': return 'Отметьте здесь, если этот поток содержит наготу или порнографические материалы.';
|
||||||
|
case 'live.error.failed': return 'Сбой потока';
|
||||||
|
case 'live.error.connection_error': return 'Ошибка подключения';
|
||||||
|
case 'live.error.start_failed': return 'Запуск потока не удался, пожалуйста, проверьте баланс';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,19 +39,21 @@ class TranslationsSv extends Translations {
|
|||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
|
|
||||||
/// Text som uppmanar användaren att trycka på avatarplatshållaren för att påbörja uppladdningen
|
/// Text som uppmanar användaren att trycka på avatar platshållaren för att påbörja uppladdningen
|
||||||
@override String get upload_avatar => 'Ladda upp avatar';
|
@override String get upload_avatar => 'Ladda upp avatar';
|
||||||
|
|
||||||
/// Rubrik över listade toppstreamers av zaps
|
/// Rubrik över listade topp streamers av zaps
|
||||||
@override String get most_zapped_streamers => 'De flesta zappade streamers';
|
@override String get most_zapped_streamers => 'De flest zappade streamers';
|
||||||
|
|
||||||
/// Ingen användare hittades vid sökning
|
/// Ingen användare hittades vid sökning
|
||||||
@override String get no_user_found => 'Ingen användare hittades';
|
@override String get no_user_found => 'Ingen användare hittades';
|
||||||
|
|
||||||
/// En anonym användare
|
/// En anonym användare
|
||||||
@override String get anon => 'Anon';
|
@override String get anon => 'Anno';
|
||||||
|
|
||||||
/// Antal tittare på streamingen
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('sv').format(n)} sats';
|
||||||
|
|
||||||
|
/// Antal tittare på strömmingen
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n,
|
||||||
one: '1 tittare',
|
one: '1 tittare',
|
||||||
other: '${NumberFormat.decimalPattern('sv').format(n)} tittare',
|
other: '${NumberFormat.decimalPattern('sv').format(n)} tittare',
|
||||||
@ -69,6 +71,7 @@ class TranslationsSv extends Translations {
|
|||||||
@override late final _TranslationsProfileSv profile = _TranslationsProfileSv._(_root);
|
@override late final _TranslationsProfileSv profile = _TranslationsProfileSv._(_root);
|
||||||
@override late final _TranslationsSettingsSv settings = _TranslationsSettingsSv._(_root);
|
@override late final _TranslationsSettingsSv settings = _TranslationsSettingsSv._(_root);
|
||||||
@override late final _TranslationsLoginSv login = _TranslationsLoginSv._(_root);
|
@override late final _TranslationsLoginSv login = _TranslationsLoginSv._(_root);
|
||||||
|
@override late final _TranslationsLiveSv live = _TranslationsLiveSv._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -79,7 +82,8 @@ class _TranslationsStreamSv extends TranslationsStreamEn {
|
|||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusSv status = _TranslationsStreamStatusSv._(_root);
|
@override late final _TranslationsStreamStatusSv status = _TranslationsStreamStatusSv._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Startade ${timestamp}';
|
@override String started({required Object timestamp}) => 'Startad ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} gick live!';
|
||||||
@override late final _TranslationsStreamChatSv chat = _TranslationsStreamChatSv._(_root);
|
@override late final _TranslationsStreamChatSv chat = _TranslationsStreamChatSv._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,7 +116,7 @@ class _TranslationsButtonSv extends TranslationsButtonEn {
|
|||||||
/// Knapptext för följ-knappen
|
/// Knapptext för följ-knappen
|
||||||
@override String get follow => 'Följ';
|
@override String get follow => 'Följ';
|
||||||
|
|
||||||
/// Knapptext för avföljningsknappen
|
/// Knapptext för sluta följa knappen
|
||||||
@override String get unfollow => 'Sluta följa';
|
@override String get unfollow => 'Sluta följa';
|
||||||
|
|
||||||
@override String get mute => 'Tysta';
|
@override String get mute => 'Tysta';
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginSv extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorSv error = _TranslationsLoginErrorSv._(_root);
|
@override late final _TranslationsLoginErrorSv error = _TranslationsLoginErrorSv._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveSv extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveSv._(TranslationsSv root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsSv _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'GÅ DIREKT';
|
||||||
|
@override String get configure_stream => 'Konfigurera ström';
|
||||||
|
@override String get endpoint => 'Slutpunkt';
|
||||||
|
@override String get accept_tos => 'Acceptera TOS';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Titel';
|
||||||
|
@override String get summary => 'Sammanfattning';
|
||||||
|
@override String get image => 'Omslagsbild';
|
||||||
|
@override String get tags => 'Etiketter';
|
||||||
|
@override String get nsfw => 'NSFW-innehåll';
|
||||||
|
@override String get nsfw_description => 'Markera här om denna stream innehåller nakenhet eller pornografiskt innehåll.';
|
||||||
|
@override late final _TranslationsLiveErrorSv error = _TranslationsLiveErrorSv._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusSv extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusSv extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusSv._(TranslationsSv root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusSv._(TranslationsSv root) : this._root = root, super.internal(root);
|
||||||
@ -235,7 +263,7 @@ class _TranslationsStreamChatSv extends TranslationsStreamChatEn {
|
|||||||
time,
|
time,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/// Stream avslutade sidfoten längst ner på chatten
|
/// Streama slutade sidfot längst ned i chatten
|
||||||
@override String get ended => 'STREAM AVSLUTAD';
|
@override String get ended => 'STREAM AVSLUTAD';
|
||||||
|
|
||||||
/// Chattmeddelande som visar strömavbrott
|
/// Chattmeddelande som visar strömavbrott
|
||||||
@ -272,8 +300,8 @@ class _TranslationsSettingsProfileSv extends TranslationsSettingsProfileEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override String get display_name => 'Visa namn';
|
@override String get display_name => 'Visa namn';
|
||||||
@override String get about => 'Om';
|
@override String get about => 'Om';
|
||||||
@override String get nip05 => 'Nostr Adress';
|
@override String get nip05 => 'Nostr adress';
|
||||||
@override String get lud16 => 'Adress för blixtnedslag';
|
@override String get lud16 => 'Lightning-adress';
|
||||||
@override late final _TranslationsSettingsProfileErrorSv error = _TranslationsSettingsProfileErrorSv._(_root);
|
@override late final _TranslationsSettingsProfileErrorSv error = _TranslationsSettingsProfileErrorSv._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,10 +312,12 @@ class _TranslationsSettingsWalletSv extends TranslationsSettingsWalletEn {
|
|||||||
final TranslationsSv _root; // ignore: unused_field
|
final TranslationsSv _root; // ignore: unused_field
|
||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
@override String get connect_wallet => 'Connect plånbok (NWC nostr+walletconnect://)';
|
@override String get connect_wallet => 'Anslut plånbok (NWC nostr+walletconnect://)';
|
||||||
@override String get disconnect_wallet => 'Koppla bort plånboken';
|
@override String get disconnect_wallet => 'Koppla bort plånboken';
|
||||||
@override String get connect_1tap => '1-Tap-anslutning';
|
@override String get connect_1tap => '1-tryck anslutning';
|
||||||
@override String get paste => 'Klistra in URL';
|
@override String get paste => 'Klistra in URL';
|
||||||
|
@override String get balance => 'Balans';
|
||||||
|
@override String get name => 'Plånbok';
|
||||||
@override late final _TranslationsSettingsWalletErrorSv error = _TranslationsSettingsWalletErrorSv._(_root);
|
@override late final _TranslationsSettingsWalletErrorSv error = _TranslationsSettingsWalletErrorSv._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorSv extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Ogiltig nyckel';
|
@override String get invalid_key => 'Ogiltig nyckel';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorSv extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsSv _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Strömmen misslyckades';
|
||||||
|
@override String get connection_error => 'Anslutningsfel';
|
||||||
|
@override String get start_failed => 'Stream start misslyckades, vänligen kontrollera ditt saldo';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteSv extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteSv extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteSv._(TranslationsSv root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteSv._(TranslationsSv root) : this._root = root, super.internal(root);
|
||||||
@ -312,8 +354,8 @@ class _TranslationsStreamChatWriteSv extends TranslationsStreamChatWriteEn {
|
|||||||
/// Etikett på inmatningsrutan för chattmeddelanden
|
/// Etikett på inmatningsrutan för chattmeddelanden
|
||||||
@override String get label => 'Skriv meddelande';
|
@override String get label => 'Skriv meddelande';
|
||||||
|
|
||||||
/// Chattinmatningsmeddelande som visas när användaren endast är inloggad med pubkey
|
/// Chattinmatningsmeddelande som visas när användaren endast är inloggad med publik nyckel
|
||||||
@override String get no_signer => 'Det går inte att skriva meddelanden med npub-inloggning';
|
@override String get no_signer => 'Det går inte att skriva meddelanden med n-pub inloggning';
|
||||||
|
|
||||||
/// Chattinmatningsmeddelande som visas när användaren är utloggad
|
/// Chattinmatningsmeddelande som visas när användaren är utloggad
|
||||||
@override String get login => 'Logga in för att skicka meddelanden';
|
@override String get login => 'Logga in för att skicka meddelanden';
|
||||||
@ -327,7 +369,7 @@ class _TranslationsStreamChatBadgeSv extends TranslationsStreamChatBadgeEn {
|
|||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
|
|
||||||
/// Rubrik över lista över användare som tilldelats en badge
|
/// Rubrik över listan över användare som tilldelas ett märke
|
||||||
@override String get awarded_to => 'Tilldelas till:';
|
@override String get awarded_to => 'Tilldelas till:';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -339,14 +381,14 @@ class _TranslationsStreamChatRaidSv extends TranslationsStreamChatRaidEn {
|
|||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
|
|
||||||
/// Chatta raidmeddelande till en annan ström
|
/// Chatt raid meddelande till en annan ström
|
||||||
@override String to({required Object name}) => 'RAIDING ${name}';
|
@override String to({required Object name}) => 'RAIDING ${name}';
|
||||||
|
|
||||||
/// Chat raid-meddelande från en annan ström
|
/// Chatt raid meddelande från en annan ström
|
||||||
@override String from({required Object name}) => 'RAID FRÅN ${name}';
|
@override String from({required Object name}) => 'RAID FRÅN ${name}';
|
||||||
|
|
||||||
/// Nedräkningstimer för auto-raiding
|
/// Nedräkningstimer för auto- radiering
|
||||||
@override String countdown({required Object time}) => 'Raiding på ${time}';
|
@override String countdown({required Object time}) => 'Radiering i ${time}';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: settings.profile.error
|
// Path: settings.profile.error
|
||||||
@ -366,7 +408,7 @@ class _TranslationsSettingsWalletErrorSv extends TranslationsSettingsWalletError
|
|||||||
final TranslationsSv _root; // ignore: unused_field
|
final TranslationsSv _root; // ignore: unused_field
|
||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
@override String get logged_out => 'Kan inte ansluta plånbok när du är inloggad';
|
@override String get logged_out => 'Kan inte ansluta plånbok när du är utloggad';
|
||||||
@override String get nwc_auth_event_not_found => 'Inget autentiseringshändelse för plånbok hittades';
|
@override String get nwc_auth_event_not_found => 'Inget autentiseringshändelse för plånbok hittades';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,9 +418,10 @@ extension on TranslationsSv {
|
|||||||
dynamic _flatMapFunction(String path) {
|
dynamic _flatMapFunction(String path) {
|
||||||
switch (path) {
|
switch (path) {
|
||||||
case 'upload_avatar': return 'Ladda upp avatar';
|
case 'upload_avatar': return 'Ladda upp avatar';
|
||||||
case 'most_zapped_streamers': return 'De flesta zappade streamers';
|
case 'most_zapped_streamers': return 'De flest zappade streamers';
|
||||||
case 'no_user_found': return 'Ingen användare hittades';
|
case 'no_user_found': return 'Ingen användare hittades';
|
||||||
case 'anon': return 'Anon';
|
case 'anon': return 'Anno';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('sv').format(n)} sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n,
|
||||||
one: '1 tittare',
|
one: '1 tittare',
|
||||||
other: '${NumberFormat.decimalPattern('sv').format(n)} tittare',
|
other: '${NumberFormat.decimalPattern('sv').format(n)} tittare',
|
||||||
@ -386,7 +429,8 @@ extension on TranslationsSv {
|
|||||||
case 'stream.status.live': return 'LIVE';
|
case 'stream.status.live': return 'LIVE';
|
||||||
case 'stream.status.ended': return 'AVSLUTAD';
|
case 'stream.status.ended': return 'AVSLUTAD';
|
||||||
case 'stream.status.planned': return 'PLANERADE';
|
case 'stream.status.planned': return 'PLANERADE';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Startade ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Startad ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} gick live!';
|
||||||
case 'stream.chat.disabled': return 'CHAT AVSTÄNGD';
|
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.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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -404,12 +448,12 @@ extension on TranslationsSv {
|
|||||||
const TextSpan(text: ' sats'),
|
const TextSpan(text: ' sats'),
|
||||||
]);
|
]);
|
||||||
case 'stream.chat.write.label': return 'Skriv meddelande';
|
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.no_signer': return 'Det går inte att skriva meddelanden med n-pub inloggning';
|
||||||
case 'stream.chat.write.login': return 'Logga in för att skicka meddelanden';
|
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.badge.awarded_to': return 'Tilldelas till:';
|
||||||
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
|
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.from': return ({required Object name}) => 'RAID FRÅN ${name}';
|
||||||
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding på ${time}';
|
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Radiering i ${time}';
|
||||||
case 'goal.title': return ({required Object amount}) => 'Mål: ${amount}';
|
case 'goal.title': return ({required Object amount}) => 'Mål: ${amount}';
|
||||||
case 'goal.remaining': return ({required Object amount}) => 'Kvarvarande: ${amount}';
|
case 'goal.remaining': return ({required Object amount}) => 'Kvarvarande: ${amount}';
|
||||||
case 'goal.complete': return 'KOMPLETT';
|
case 'goal.complete': return 'KOMPLETT';
|
||||||
@ -448,20 +492,39 @@ extension on TranslationsSv {
|
|||||||
case 'settings.button_wallet': return 'Inställningar för plånbok';
|
case 'settings.button_wallet': return 'Inställningar för plånbok';
|
||||||
case 'settings.profile.display_name': return 'Visa namn';
|
case 'settings.profile.display_name': return 'Visa namn';
|
||||||
case 'settings.profile.about': return 'Om';
|
case 'settings.profile.about': return 'Om';
|
||||||
case 'settings.profile.nip05': return 'Nostr Adress';
|
case 'settings.profile.nip05': return 'Nostr adress';
|
||||||
case 'settings.profile.lud16': return 'Adress för blixtnedslag';
|
case 'settings.profile.lud16': return 'Lightning-adress';
|
||||||
case 'settings.profile.error.logged_out': return 'Kan inte redigera profil när jag är utloggad';
|
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.connect_wallet': return 'Anslut plånbok (NWC nostr+walletconnect://)';
|
||||||
case 'settings.wallet.disconnect_wallet': return 'Koppla bort plånboken';
|
case 'settings.wallet.disconnect_wallet': return 'Koppla bort plånboken';
|
||||||
case 'settings.wallet.connect_1tap': return '1-Tap-anslutning';
|
case 'settings.wallet.connect_1tap': return '1-tryck anslutning';
|
||||||
case 'settings.wallet.paste': return 'Klistra in URL';
|
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.balance': return 'Balans';
|
||||||
|
case 'settings.wallet.name': return 'Plånbok';
|
||||||
|
case 'settings.wallet.error.logged_out': return 'Kan inte ansluta plånbok när du är utloggad';
|
||||||
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Inget autentiseringshändelse för plånbok hittades';
|
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.username': return 'Användarnamn';
|
||||||
case 'login.amber': return 'Logga in med Amber';
|
case 'login.amber': return 'Logga in med Amber';
|
||||||
case 'login.key': return 'Logga in med nyckel';
|
case 'login.key': return 'Logga in med nyckel';
|
||||||
case 'login.create': return 'Skapa konto';
|
case 'login.create': return 'Skapa konto';
|
||||||
case 'login.error.invalid_key': return 'Ogiltig nyckel';
|
case 'login.error.invalid_key': return 'Ogiltig nyckel';
|
||||||
|
case 'live.start': return 'GÅ DIREKT';
|
||||||
|
case 'live.configure_stream': return 'Konfigurera ström';
|
||||||
|
case 'live.endpoint': return 'Slutpunkt';
|
||||||
|
case 'live.accept_tos': return 'Acceptera TOS';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Titel';
|
||||||
|
case 'live.summary': return 'Sammanfattning';
|
||||||
|
case 'live.image': return 'Omslagsbild';
|
||||||
|
case 'live.tags': return 'Etiketter';
|
||||||
|
case 'live.nsfw': return 'NSFW-innehåll';
|
||||||
|
case 'live.nsfw_description': return 'Markera här om denna stream innehåller nakenhet eller pornografiskt innehåll.';
|
||||||
|
case 'live.error.failed': return 'Strömmen misslyckades';
|
||||||
|
case 'live.error.connection_error': return 'Anslutningsfel';
|
||||||
|
case 'live.error.start_failed': return 'Stream start misslyckades, vänligen kontrollera ditt saldo';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,6 +80,7 @@ class _TranslationsStreamTr extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusTr status = _TranslationsStreamStatusTr._(_root);
|
@override late final _TranslationsStreamStatusTr status = _TranslationsStreamStatusTr._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Başlatıldı ${timestamp}';
|
@override String started({required Object timestamp}) => 'Başlatıldı ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} yayına girdi!';
|
||||||
@override late final _TranslationsStreamChatTr chat = _TranslationsStreamChatTr._(_root);
|
@override late final _TranslationsStreamChatTr chat = _TranslationsStreamChatTr._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,8 +232,9 @@ class _TranslationsStreamChatTr extends TranslationsStreamChatEn {
|
|||||||
mod,
|
mod,
|
||||||
const TextSpan(text: ' zaman aşımına uğradı '),
|
const TextSpan(text: ' zaman aşımına uğradı '),
|
||||||
user,
|
user,
|
||||||
const TextSpan(text: ' için '),
|
const TextSpan(text: ' '),
|
||||||
time,
|
time,
|
||||||
|
const TextSpan(text: 'için'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/// Sohbetin alt kısmında akış sona erdi altbilgisi
|
/// Sohbetin alt kısmında akış sona erdi altbilgisi
|
||||||
@ -343,7 +345,7 @@ class _TranslationsStreamChatRaidTr extends TranslationsStreamChatRaidEn {
|
|||||||
@override String to({required Object name}) => 'RAIDING ${name}';
|
@override String to({required Object name}) => 'RAIDING ${name}';
|
||||||
|
|
||||||
/// Başka bir akıştan sohbet baskını mesajı
|
/// Başka bir akıştan sohbet baskını mesajı
|
||||||
@override String from({required Object name}) => '${name}ADRESINDEN RAID';
|
@override String from({required Object name}) => '${name} ADRESINDEN RAID';
|
||||||
|
|
||||||
/// Otomatik sürüş için geri sayım sayacı
|
/// Otomatik sürüş için geri sayım sayacı
|
||||||
@override String countdown({required Object time}) => '${time}adresinde baskın';
|
@override String countdown({required Object time}) => '${time}adresinde baskın';
|
||||||
@ -387,14 +389,16 @@ extension on TranslationsTr {
|
|||||||
case 'stream.status.ended': return 'SONLANDI';
|
case 'stream.status.ended': return 'SONLANDI';
|
||||||
case 'stream.status.planned': return 'PLANLANMIŞ';
|
case 'stream.status.planned': return 'PLANLANMIŞ';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Başlatıldı ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Başlatıldı ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} yayına girdi!';
|
||||||
case 'stream.chat.disabled': return 'SOHBET DEVRE DIŞI';
|
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.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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
mod,
|
mod,
|
||||||
const TextSpan(text: ' zaman aşımına uğradı '),
|
const TextSpan(text: ' zaman aşımına uğradı '),
|
||||||
user,
|
user,
|
||||||
const TextSpan(text: ' için '),
|
const TextSpan(text: ' '),
|
||||||
time,
|
time,
|
||||||
|
const TextSpan(text: 'için'),
|
||||||
]);
|
]);
|
||||||
case 'stream.chat.ended': return 'YAYIN SONLANDI';
|
case 'stream.chat.ended': return 'YAYIN SONLANDI';
|
||||||
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
|
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
|
||||||
@ -408,7 +412,7 @@ extension on TranslationsTr {
|
|||||||
case 'stream.chat.write.login': return 'Mesaj göndermek için lütfen giriş yapın';
|
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.badge.awarded_to': return 'Ödüllendirildi:';
|
||||||
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
|
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.from': return ({required Object name}) => '${name} ADRESINDEN RAID';
|
||||||
case 'stream.chat.raid.countdown': return ({required Object time}) => '${time}adresinde baskın';
|
case 'stream.chat.raid.countdown': return ({required Object time}) => '${time}adresinde baskın';
|
||||||
case 'goal.title': return ({required Object amount}) => 'Hedef: ${amount}';
|
case 'goal.title': return ({required Object amount}) => 'Hedef: ${amount}';
|
||||||
case 'goal.remaining': return ({required Object amount}) => 'Kalan: ${amount}';
|
case 'goal.remaining': return ({required Object amount}) => 'Kalan: ${amount}';
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsUk extends Translations {
|
|||||||
/// Анонімний користувач
|
/// Анонімний користувач
|
||||||
@override String get anon => 'Анонім.';
|
@override String get anon => 'Анонім.';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('uk').format(n)} сатів';
|
||||||
|
|
||||||
/// Кількість глядачів стріму
|
/// Кількість глядачів стріму
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uk'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uk'))(n,
|
||||||
one: '1 глядач',
|
one: '1 глядач',
|
||||||
@ -69,6 +71,7 @@ class TranslationsUk extends Translations {
|
|||||||
@override late final _TranslationsProfileUk profile = _TranslationsProfileUk._(_root);
|
@override late final _TranslationsProfileUk profile = _TranslationsProfileUk._(_root);
|
||||||
@override late final _TranslationsSettingsUk settings = _TranslationsSettingsUk._(_root);
|
@override late final _TranslationsSettingsUk settings = _TranslationsSettingsUk._(_root);
|
||||||
@override late final _TranslationsLoginUk login = _TranslationsLoginUk._(_root);
|
@override late final _TranslationsLoginUk login = _TranslationsLoginUk._(_root);
|
||||||
|
@override late final _TranslationsLiveUk live = _TranslationsLiveUk._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamUk extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusUk status = _TranslationsStreamStatusUk._(_root);
|
@override late final _TranslationsStreamStatusUk status = _TranslationsStreamStatusUk._(_root);
|
||||||
@override String started({required Object timestamp}) => 'Запустив ${timestamp}';
|
@override String started({required Object timestamp}) => 'Запустив ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} запрацював!';
|
||||||
@override late final _TranslationsStreamChatUk chat = _TranslationsStreamChatUk._(_root);
|
@override late final _TranslationsStreamChatUk chat = _TranslationsStreamChatUk._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginUk extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorUk error = _TranslationsLoginErrorUk._(_root);
|
@override late final _TranslationsLoginErrorUk error = _TranslationsLoginErrorUk._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveUk extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveUk._(TranslationsUk root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsUk _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => 'GO LIVE';
|
||||||
|
@override String get configure_stream => 'Налаштувати потік';
|
||||||
|
@override String get endpoint => 'Кінцева точка';
|
||||||
|
@override String get accept_tos => 'Прийміть ТЗ';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uk'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => 'Назва';
|
||||||
|
@override String get summary => 'Підсумок';
|
||||||
|
@override String get image => 'Зображення обкладинки';
|
||||||
|
@override String get tags => 'Теги';
|
||||||
|
@override String get nsfw => 'Нецензурна лексика';
|
||||||
|
@override String get nsfw_description => 'Перевірте тут, чи містить цей потік оголену натуру або порнографічний контент.';
|
||||||
|
@override late final _TranslationsLiveErrorUk error = _TranslationsLiveErrorUk._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusUk extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusUk extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusUk._(TranslationsUk root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusUk._(TranslationsUk root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletUk extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => 'Відключити гаманець';
|
@override String get disconnect_wallet => 'Відключити гаманець';
|
||||||
@override String get connect_1tap => 'Підключення в 1 кран';
|
@override String get connect_1tap => 'Підключення в 1 кран';
|
||||||
@override String get paste => 'Вставити URL-адресу';
|
@override String get paste => 'Вставити URL-адресу';
|
||||||
|
@override String get balance => 'Баланс';
|
||||||
|
@override String get name => 'Гаманець';
|
||||||
@override late final _TranslationsSettingsWalletErrorUk error = _TranslationsSettingsWalletErrorUk._(_root);
|
@override late final _TranslationsSettingsWalletErrorUk error = _TranslationsSettingsWalletErrorUk._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorUk extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => 'Неправильний ключ';
|
@override String get invalid_key => 'Неправильний ключ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorUk extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsUk _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => 'Потік не вдалося запустити';
|
||||||
|
@override String get connection_error => 'Помилка з\'єднання';
|
||||||
|
@override String get start_failed => 'Не вдалося запустити трансляцію, будь ласка, перевірте свій баланс';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteUk extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteUk extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteUk._(TranslationsUk root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteUk._(TranslationsUk root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsUk {
|
|||||||
case 'most_zapped_streamers': return 'Більшість стримерів, які були під напругою';
|
case 'most_zapped_streamers': return 'Більшість стримерів, які були під напругою';
|
||||||
case 'no_user_found': return 'Користувача не знайдено';
|
case 'no_user_found': return 'Користувача не знайдено';
|
||||||
case 'anon': return 'Анонім.';
|
case 'anon': return 'Анонім.';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('uk').format(n)} сатів';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uk'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uk'))(n,
|
||||||
one: '1 глядач',
|
one: '1 глядач',
|
||||||
other: '${NumberFormat.decimalPattern('uk').format(n)} глядачів',
|
other: '${NumberFormat.decimalPattern('uk').format(n)} глядачів',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsUk {
|
|||||||
case 'stream.status.ended': return 'ЗАКІНЧЕНО';
|
case 'stream.status.ended': return 'ЗАКІНЧЕНО';
|
||||||
case 'stream.status.planned': return 'ЗАПЛАНОВАНО';
|
case 'stream.status.planned': return 'ЗАПЛАНОВАНО';
|
||||||
case 'stream.started': return ({required Object timestamp}) => 'Запустив ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => 'Запустив ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} запрацював!';
|
||||||
case 'stream.chat.disabled': return 'ЧАТ ВІДКЛЮЧЕНО';
|
case 'stream.chat.disabled': return 'ЧАТ ВІДКЛЮЧЕНО';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Тайм-аут закінчився: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsUk {
|
|||||||
case 'settings.wallet.disconnect_wallet': return 'Відключити гаманець';
|
case 'settings.wallet.disconnect_wallet': return 'Відключити гаманець';
|
||||||
case 'settings.wallet.connect_1tap': return 'Підключення в 1 кран';
|
case 'settings.wallet.connect_1tap': return 'Підключення в 1 кран';
|
||||||
case 'settings.wallet.paste': return 'Вставити URL-адресу';
|
case 'settings.wallet.paste': return 'Вставити URL-адресу';
|
||||||
|
case 'settings.wallet.balance': return 'Баланс';
|
||||||
|
case 'settings.wallet.name': return 'Гаманець';
|
||||||
case 'settings.wallet.error.logged_out': return 'Не вдається підключити гаманець, коли ви вийшли з системи';
|
case 'settings.wallet.error.logged_out': return 'Не вдається підключити гаманець, коли ви вийшли з системи';
|
||||||
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Не знайдено жодної події авторизації гаманця';
|
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Не знайдено жодної події авторизації гаманця';
|
||||||
case 'login.username': return 'Ім\'я користувача';
|
case 'login.username': return 'Ім\'я користувача';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsUk {
|
|||||||
case 'login.key': return 'Увійдіть за допомогою ключа';
|
case 'login.key': return 'Увійдіть за допомогою ключа';
|
||||||
case 'login.create': return 'Створити обліковий запис';
|
case 'login.create': return 'Створити обліковий запис';
|
||||||
case 'login.error.invalid_key': return 'Неправильний ключ';
|
case 'login.error.invalid_key': return 'Неправильний ключ';
|
||||||
|
case 'live.start': return 'GO LIVE';
|
||||||
|
case 'live.configure_stream': return 'Налаштувати потік';
|
||||||
|
case 'live.endpoint': return 'Кінцева точка';
|
||||||
|
case 'live.accept_tos': return 'Прийміть ТЗ';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uk'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return 'Назва';
|
||||||
|
case 'live.summary': return 'Підсумок';
|
||||||
|
case 'live.image': return 'Зображення обкладинки';
|
||||||
|
case 'live.tags': return 'Теги';
|
||||||
|
case 'live.nsfw': return 'Нецензурна лексика';
|
||||||
|
case 'live.nsfw_description': return 'Перевірте тут, чи містить цей потік оголену натуру або порнографічний контент.';
|
||||||
|
case 'live.error.failed': return 'Потік не вдалося запустити';
|
||||||
|
case 'live.error.connection_error': return 'Помилка з\'єднання';
|
||||||
|
case 'live.error.start_failed': return 'Не вдалося запустити трансляцію, будь ласка, перевірте свій баланс';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class TranslationsZh extends Translations {
|
|||||||
/// 匿名使用者
|
/// 匿名使用者
|
||||||
@override String get anon => '匿名';
|
@override String get anon => '匿名';
|
||||||
|
|
||||||
|
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('zh').format(n)} Sats';
|
||||||
|
|
||||||
/// 串流的觀看者人數
|
/// 串流的觀看者人數
|
||||||
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n,
|
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n,
|
||||||
one: '1 個檢視器',
|
one: '1 個檢視器',
|
||||||
@ -69,6 +71,7 @@ class TranslationsZh extends Translations {
|
|||||||
@override late final _TranslationsProfileZh profile = _TranslationsProfileZh._(_root);
|
@override late final _TranslationsProfileZh profile = _TranslationsProfileZh._(_root);
|
||||||
@override late final _TranslationsSettingsZh settings = _TranslationsSettingsZh._(_root);
|
@override late final _TranslationsSettingsZh settings = _TranslationsSettingsZh._(_root);
|
||||||
@override late final _TranslationsLoginZh login = _TranslationsLoginZh._(_root);
|
@override late final _TranslationsLoginZh login = _TranslationsLoginZh._(_root);
|
||||||
|
@override late final _TranslationsLiveZh live = _TranslationsLiveZh._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Path: stream
|
// Path: stream
|
||||||
@ -80,6 +83,7 @@ class _TranslationsStreamZh extends TranslationsStreamEn {
|
|||||||
// Translations
|
// Translations
|
||||||
@override late final _TranslationsStreamStatusZh status = _TranslationsStreamStatusZh._(_root);
|
@override late final _TranslationsStreamStatusZh status = _TranslationsStreamStatusZh._(_root);
|
||||||
@override String started({required Object timestamp}) => '開始 ${timestamp}';
|
@override String started({required Object timestamp}) => '開始 ${timestamp}';
|
||||||
|
@override String notification({required Object name}) => '${name} 已啟用!';
|
||||||
@override late final _TranslationsStreamChatZh chat = _TranslationsStreamChatZh._(_root);
|
@override late final _TranslationsStreamChatZh chat = _TranslationsStreamChatZh._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,6 +208,30 @@ class _TranslationsLoginZh extends TranslationsLoginEn {
|
|||||||
@override late final _TranslationsLoginErrorZh error = _TranslationsLoginErrorZh._(_root);
|
@override late final _TranslationsLoginErrorZh error = _TranslationsLoginErrorZh._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live
|
||||||
|
class _TranslationsLiveZh extends TranslationsLiveEn {
|
||||||
|
_TranslationsLiveZh._(TranslationsZh root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsZh _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get start => '開始直播';
|
||||||
|
@override String get configure_stream => '設定串流';
|
||||||
|
@override String get endpoint => '終點';
|
||||||
|
@override String get accept_tos => '接受服務條款';
|
||||||
|
@override String balance_left({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
@override String get title => '標題';
|
||||||
|
@override String get summary => '摘要';
|
||||||
|
@override String get image => '封面圖片';
|
||||||
|
@override String get tags => '標籤';
|
||||||
|
@override String get nsfw => 'NSFW 內容';
|
||||||
|
@override String get nsfw_description => '請檢查此串流是否包含裸體或色情內容。';
|
||||||
|
@override late final _TranslationsLiveErrorZh error = _TranslationsLiveErrorZh._(_root);
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.status
|
// Path: stream.status
|
||||||
class _TranslationsStreamStatusZh extends TranslationsStreamStatusEn {
|
class _TranslationsStreamStatusZh extends TranslationsStreamStatusEn {
|
||||||
_TranslationsStreamStatusZh._(TranslationsZh root) : this._root = root, super.internal(root);
|
_TranslationsStreamStatusZh._(TranslationsZh root) : this._root = root, super.internal(root);
|
||||||
@ -288,6 +316,8 @@ class _TranslationsSettingsWalletZh extends TranslationsSettingsWalletEn {
|
|||||||
@override String get disconnect_wallet => '斷開錢包';
|
@override String get disconnect_wallet => '斷開錢包';
|
||||||
@override String get connect_1tap => '1 抽頭連接';
|
@override String get connect_1tap => '1 抽頭連接';
|
||||||
@override String get paste => '貼上 URL';
|
@override String get paste => '貼上 URL';
|
||||||
|
@override String get balance => '平衡';
|
||||||
|
@override String get name => '錢包';
|
||||||
@override late final _TranslationsSettingsWalletErrorZh error = _TranslationsSettingsWalletErrorZh._(_root);
|
@override late final _TranslationsSettingsWalletErrorZh error = _TranslationsSettingsWalletErrorZh._(_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,18 @@ class _TranslationsLoginErrorZh extends TranslationsLoginErrorEn {
|
|||||||
@override String get invalid_key => '無效按鍵';
|
@override String get invalid_key => '無效按鍵';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Path: live.error
|
||||||
|
class _TranslationsLiveErrorZh extends TranslationsLiveErrorEn {
|
||||||
|
_TranslationsLiveErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
|
||||||
|
|
||||||
|
final TranslationsZh _root; // ignore: unused_field
|
||||||
|
|
||||||
|
// Translations
|
||||||
|
@override String get failed => '串流失敗';
|
||||||
|
@override String get connection_error => '連線錯誤';
|
||||||
|
@override String get start_failed => '串流啟動失敗,請檢查您的餘額';
|
||||||
|
}
|
||||||
|
|
||||||
// Path: stream.chat.write
|
// Path: stream.chat.write
|
||||||
class _TranslationsStreamChatWriteZh extends TranslationsStreamChatWriteEn {
|
class _TranslationsStreamChatWriteZh extends TranslationsStreamChatWriteEn {
|
||||||
_TranslationsStreamChatWriteZh._(TranslationsZh root) : this._root = root, super.internal(root);
|
_TranslationsStreamChatWriteZh._(TranslationsZh root) : this._root = root, super.internal(root);
|
||||||
@ -379,6 +421,7 @@ extension on TranslationsZh {
|
|||||||
case 'most_zapped_streamers': return '最多被擊中的溪流';
|
case 'most_zapped_streamers': return '最多被擊中的溪流';
|
||||||
case 'no_user_found': return '未找到使用者';
|
case 'no_user_found': return '未找到使用者';
|
||||||
case 'anon': return '匿名';
|
case 'anon': return '匿名';
|
||||||
|
case 'full_amount_sats': return ({required num n}) => '${NumberFormat.decimalPattern('zh').format(n)} Sats';
|
||||||
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n,
|
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n,
|
||||||
one: '1 個檢視器',
|
one: '1 個檢視器',
|
||||||
other: '${NumberFormat.decimalPattern('zh').format(n)} 觀眾',
|
other: '${NumberFormat.decimalPattern('zh').format(n)} 觀眾',
|
||||||
@ -387,6 +430,7 @@ extension on TranslationsZh {
|
|||||||
case 'stream.status.ended': return '結束';
|
case 'stream.status.ended': return '結束';
|
||||||
case 'stream.status.planned': return '計劃';
|
case 'stream.status.planned': return '計劃';
|
||||||
case 'stream.started': return ({required Object timestamp}) => '開始 ${timestamp}';
|
case 'stream.started': return ({required Object timestamp}) => '開始 ${timestamp}';
|
||||||
|
case 'stream.notification': return ({required Object name}) => '${name} 已啟用!';
|
||||||
case 'stream.chat.disabled': return '關閉聊天';
|
case 'stream.chat.disabled': return '關閉聊天';
|
||||||
case 'stream.chat.disabled_timeout': return ({required Object time}) => '超時過期: ${time}';
|
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: [
|
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
|
||||||
@ -455,6 +499,8 @@ extension on TranslationsZh {
|
|||||||
case 'settings.wallet.disconnect_wallet': return '斷開錢包';
|
case 'settings.wallet.disconnect_wallet': return '斷開錢包';
|
||||||
case 'settings.wallet.connect_1tap': return '1 抽頭連接';
|
case 'settings.wallet.connect_1tap': return '1 抽頭連接';
|
||||||
case 'settings.wallet.paste': return '貼上 URL';
|
case 'settings.wallet.paste': return '貼上 URL';
|
||||||
|
case 'settings.wallet.balance': return '平衡';
|
||||||
|
case 'settings.wallet.name': return '錢包';
|
||||||
case 'settings.wallet.error.logged_out': return '登出時無法連接錢包';
|
case 'settings.wallet.error.logged_out': return '登出時無法連接錢包';
|
||||||
case 'settings.wallet.error.nwc_auth_event_not_found': return '未找到錢包認證事件';
|
case 'settings.wallet.error.nwc_auth_event_not_found': return '未找到錢包認證事件';
|
||||||
case 'login.username': return '用戶名';
|
case 'login.username': return '用戶名';
|
||||||
@ -462,6 +508,23 @@ extension on TranslationsZh {
|
|||||||
case 'login.key': return '使用鑰匙登入';
|
case 'login.key': return '使用鑰匙登入';
|
||||||
case 'login.create': return '創建帳戶';
|
case 'login.create': return '創建帳戶';
|
||||||
case 'login.error.invalid_key': return '無效按鍵';
|
case 'login.error.invalid_key': return '無效按鍵';
|
||||||
|
case 'live.start': return '開始直播';
|
||||||
|
case 'live.configure_stream': return '設定串流';
|
||||||
|
case 'live.endpoint': return '終點';
|
||||||
|
case 'live.accept_tos': return '接受服務條款';
|
||||||
|
case 'live.balance_left': return ({required num n, required Object time}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n,
|
||||||
|
zero: '∞',
|
||||||
|
other: '~${time}',
|
||||||
|
);
|
||||||
|
case 'live.title': return '標題';
|
||||||
|
case 'live.summary': return '摘要';
|
||||||
|
case 'live.image': return '封面圖片';
|
||||||
|
case 'live.tags': return '標籤';
|
||||||
|
case 'live.nsfw': return 'NSFW 內容';
|
||||||
|
case 'live.nsfw_description': return '請檢查此串流是否包含裸體或色情內容。';
|
||||||
|
case 'live.error.failed': return '串流失敗';
|
||||||
|
case 'live.error.connection_error': return '連線錯誤';
|
||||||
|
case 'live.error.start_failed': return '串流啟動失敗,請檢查您的餘額';
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,9 +8,10 @@ no_user_found: لم يتم العثور على مستخدم
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: لم يتم العثور على مستخدم عند البحث
|
description: لم يتم العثور على مستخدم عند البحث
|
||||||
anon: هوية مخفية
|
anon: هوية مخفية
|
||||||
|
full_amount_sats: "${n:decimalPattern} دولار ساتس"
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 مشاهد
|
one: 1 مشاهد
|
||||||
other: "${n:decimalPattern} المشاهدين"
|
other: "{n:decimalPattern} المشاهدين"
|
||||||
"@viewers":
|
"@viewers":
|
||||||
description: عدد مشاهدي البث
|
description: عدد مشاهدي البث
|
||||||
"@anon":
|
"@anon":
|
||||||
@ -21,10 +22,11 @@ stream:
|
|||||||
ended: انتهى
|
ended: انتهى
|
||||||
planned: مخطط
|
planned: مخطط
|
||||||
started: بدأ $timestamp
|
started: بدأ $timestamp
|
||||||
|
notification: ${name} بدأ البث المباشر!
|
||||||
chat:
|
chat:
|
||||||
disabled: تم تعطيل الدردشة
|
disabled: تم تعطيل الدردشة
|
||||||
disabled_timeout: "تنتهي المهلة: $time"
|
disabled_timeout: "تنتهي المهلة: $time"
|
||||||
timeout(rich): $mod انتهى الوقت $user لـ $time
|
timeout(rich): $mod انتهى الوقت $user لـ ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: رسالة دردشة تظهر أحداث المهلة
|
description: رسالة دردشة تظهر أحداث المهلة
|
||||||
ended: انتهى البث
|
ended: انتهى البث
|
||||||
@ -122,6 +124,8 @@ settings:
|
|||||||
disconnect_wallet: محفظة قطع الاتصال
|
disconnect_wallet: محفظة قطع الاتصال
|
||||||
connect_1tap: 1-التوصيل بنقرة 1
|
connect_1tap: 1-التوصيل بنقرة 1
|
||||||
paste: لصق عنوان URL
|
paste: لصق عنوان URL
|
||||||
|
balance: الرصيد
|
||||||
|
name: المحفظة
|
||||||
error:
|
error:
|
||||||
logged_out: لا يمكن الاتصال بالمحفظة عند تسجيل الخروج
|
logged_out: لا يمكن الاتصال بالمحفظة عند تسجيل الخروج
|
||||||
nwc_auth_event_not_found: لم يتم العثور على حدث مصادقة المحفظة
|
nwc_auth_event_not_found: لم يتم العثور على حدث مصادقة المحفظة
|
||||||
@ -132,3 +136,21 @@ login:
|
|||||||
create: إنشاء حساب
|
create: إنشاء حساب
|
||||||
error:
|
error:
|
||||||
invalid_key: مفتاح غير صالح
|
invalid_key: مفتاح غير صالح
|
||||||
|
live:
|
||||||
|
start: ابدأ البث المباشر
|
||||||
|
configure_stream: تكوين الدفق
|
||||||
|
endpoint: نقطة النهاية
|
||||||
|
accept_tos: قبول شروط الخدمة
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: العنوان
|
||||||
|
summary: الملخص
|
||||||
|
image: صورة الغلاف
|
||||||
|
tags: الوسوم
|
||||||
|
nsfw: محتوى غير لائق جنسيًا
|
||||||
|
nsfw_description: تحقق هنا إذا كان هذا البث يحتوي على محتوى إباحي أو عري.
|
||||||
|
error:
|
||||||
|
failed: فشل البث
|
||||||
|
connection_error: خطأ في الاتصال
|
||||||
|
start_failed: فشل بدء البث فشل، يرجى التحقق من رصيدك
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Nebyl nalezen žádný uživatel
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Při vyhledávání nebyl nalezen žádný uživatel
|
description: Při vyhledávání nebyl nalezen žádný uživatel
|
||||||
anon: Anon
|
anon: Anon
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 divák
|
one: 1 divák
|
||||||
other: ${n:decimalPattern} diváků
|
other: ${n:decimalPattern} diváků
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: KONEC
|
ended: KONEC
|
||||||
planned: PLÁNOVANÉ
|
planned: PLÁNOVANÉ
|
||||||
started: Založeno $timestamp
|
started: Založeno $timestamp
|
||||||
|
notification: ${name} byl spuštěn!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT ZRUŠEN
|
disabled: CHAT ZRUŠEN
|
||||||
disabled_timeout: "Časový limit vyprší: $time"
|
disabled_timeout: "Časový limit vyprší: $time"
|
||||||
timeout(rich): $mod vypršel čas $user pro $time
|
timeout(rich): $mod vypršel čas $user pro ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Zpráva chatu zobrazující události časového limitu
|
description: Zpráva chatu zobrazující události časového limitu
|
||||||
ended: STREAM UKONČEN
|
ended: STREAM UKONČEN
|
||||||
@ -123,6 +125,8 @@ settings:
|
|||||||
disconnect_wallet: Odpojení peněženky
|
disconnect_wallet: Odpojení peněženky
|
||||||
connect_1tap: Připojení 1 kohoutku
|
connect_1tap: Připojení 1 kohoutku
|
||||||
paste: Vložit adresu URL
|
paste: Vložit adresu URL
|
||||||
|
balance: Bilance
|
||||||
|
name: Peněženka
|
||||||
error:
|
error:
|
||||||
logged_out: Nelze se připojit k peněžence, když jste odhlášeni
|
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
|
nwc_auth_event_not_found: Nebyla nalezena žádná událost autentizace peněženky
|
||||||
@ -133,3 +137,21 @@ login:
|
|||||||
create: Vytvořit účet
|
create: Vytvořit účet
|
||||||
error:
|
error:
|
||||||
invalid_key: Neplatný klíč
|
invalid_key: Neplatný klíč
|
||||||
|
live:
|
||||||
|
start: PŘEJÍT NA ŽIVOT
|
||||||
|
configure_stream: Konfigurace streamu
|
||||||
|
endpoint: Koncový bod
|
||||||
|
accept_tos: Přijmout TOS
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Název
|
||||||
|
summary: Souhrn
|
||||||
|
image: Obrázek na obálce
|
||||||
|
tags: Štítky
|
||||||
|
nsfw: Obsah NSFW
|
||||||
|
nsfw_description: Zde zkontrolujte, zda tento stream obsahuje nahotu nebo pornografický obsah.
|
||||||
|
error:
|
||||||
|
failed: Stream se nezdařil
|
||||||
|
connection_error: Chyba připojení
|
||||||
|
start_failed: Spuštění streamu se nezdařilo, zkontrolujte prosím zůstatek
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Ingen bruger fundet
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Ingen bruger fundet ved søgning
|
description: Ingen bruger fundet ved søgning
|
||||||
anon: Anon
|
anon: Anon
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 seer
|
one: 1 seer
|
||||||
other: ${n:decimalPattern} seere
|
other: ${n:decimalPattern} seere
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: AFSLUTTET
|
ended: AFSLUTTET
|
||||||
planned: PLANLAGT
|
planned: PLANLAGT
|
||||||
started: Startet $timestamp
|
started: Startet $timestamp
|
||||||
|
notification: ${name} gik live!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT DEAKTIVERET
|
disabled: CHAT DEAKTIVERET
|
||||||
disabled_timeout: "Timeout udløber: $time"
|
disabled_timeout: "Timeout udløber: $time"
|
||||||
timeout(rich): $mod udløbet $user for $time
|
timeout(rich): $mod udløbet $user for ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Chatbesked, der viser timeout-hændelser
|
description: Chatbesked, der viser timeout-hændelser
|
||||||
ended: STREAM AFSLUTTET
|
ended: STREAM AFSLUTTET
|
||||||
@ -123,6 +125,8 @@ settings:
|
|||||||
disconnect_wallet: Afbryd forbindelsen til tegnebogen
|
disconnect_wallet: Afbryd forbindelsen til tegnebogen
|
||||||
connect_1tap: 1-Tap-forbindelse
|
connect_1tap: 1-Tap-forbindelse
|
||||||
paste: Indsæt URL
|
paste: Indsæt URL
|
||||||
|
balance: Balance
|
||||||
|
name: Tegnebog
|
||||||
error:
|
error:
|
||||||
logged_out: Kan ikke oprette forbindelse til wallet, når jeg er logget ud
|
logged_out: Kan ikke oprette forbindelse til wallet, når jeg er logget ud
|
||||||
nwc_auth_event_not_found: Ingen wallet-auth-begivenhed fundet
|
nwc_auth_event_not_found: Ingen wallet-auth-begivenhed fundet
|
||||||
@ -133,3 +137,21 @@ login:
|
|||||||
create: Opret konto
|
create: Opret konto
|
||||||
error:
|
error:
|
||||||
invalid_key: Ugyldig nøgle
|
invalid_key: Ugyldig nøgle
|
||||||
|
live:
|
||||||
|
start: GO LIVE
|
||||||
|
configure_stream: Konfigurer stream
|
||||||
|
endpoint: Slutpunkt
|
||||||
|
accept_tos: Accepter TOS
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Titel
|
||||||
|
summary: Sammenfatning
|
||||||
|
image: Forsidebillede
|
||||||
|
tags: Tags
|
||||||
|
nsfw: NSFW-indhold
|
||||||
|
nsfw_description: Tjek her, om denne stream indeholder nøgenhed eller pornografisk indhold.
|
||||||
|
error:
|
||||||
|
failed: Strømmen mislykkedes
|
||||||
|
connection_error: Forbindelsesfejl
|
||||||
|
start_failed: Stream-start mislykkedes, tjek venligst din saldo
|
||||||
|
@ -4,36 +4,38 @@ upload_avatar: Avatar hochladen
|
|||||||
klicken, um den Upload zu starten
|
klicken, um den Upload zu starten
|
||||||
most_zapped_streamers: Meistgezappte Streamer
|
most_zapped_streamers: Meistgezappte Streamer
|
||||||
"@most_zapped_streamers":
|
"@most_zapped_streamers":
|
||||||
description: Überschrift über gelistete Top-Streamer von zaps
|
description: Überschrift über gelistete Top-Streamer nach Zaps
|
||||||
no_user_found: Kein Benutzer gefunden
|
no_user_found: Kein Benutzer gefunden
|
||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Kein Benutzer bei der Suche gefunden
|
description: Kein Benutzer bei der Suche gefunden
|
||||||
anon: Anon
|
anon: Anon
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 Zuschauer
|
one: 1 Zuschauer
|
||||||
other: ${n:decimalPattern} Zuschauer
|
other: ${n:decimalPattern} Zuschauer
|
||||||
"@viewers":
|
"@viewers":
|
||||||
description: Anzahl der Betrachter des Streams
|
description: Anzahl der Zuschauer des Streams
|
||||||
"@anon":
|
"@anon":
|
||||||
description: Ein anonymer Benutzer
|
description: Ein anonymer Benutzer
|
||||||
stream:
|
stream:
|
||||||
status:
|
status:
|
||||||
live: LIVE
|
live: LIVE
|
||||||
ended: ENDED
|
ended: BEENDET
|
||||||
planned: GEPLANT
|
planned: GEPLANT
|
||||||
started: Gestartet $timestamp
|
started: Gestartet $timestamp
|
||||||
|
notification: ${name} ging live!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT DEAKTIVIERT
|
disabled: CHAT DEAKTIVIERT
|
||||||
disabled_timeout: "Die Zeitüberschreitung läuft ab: $time"
|
disabled_timeout: "Timeout läuft ab: $time"
|
||||||
timeout(rich): $mod Zeitüberschreitung $user für $time
|
timeout(rich): $mod gibt $user einen Timeout für ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Chat-Nachricht mit Zeitüberschreitungsereignissen
|
description: Chat-Nachricht mit Timeout-Ereignissen
|
||||||
ended: STREAM BEENDET
|
ended: STREAM BEENDET
|
||||||
"@ended":
|
"@ended":
|
||||||
description: Stream beendet Fußzeile am Ende des Chats
|
description: Stream beendet Fußzeile am Ende des Chats
|
||||||
zap(rich): $user hat $amount sats gezappt
|
zap(rich): $user hat $amount sats gezappt
|
||||||
"@zap":
|
"@zap":
|
||||||
description: Chatnachricht mit Stream Zaps
|
description: Chat-Nachricht mit Stream-Zaps
|
||||||
write:
|
write:
|
||||||
label: Nachricht schreiben
|
label: Nachricht schreiben
|
||||||
"@label":
|
"@label":
|
||||||
@ -124,6 +126,8 @@ settings:
|
|||||||
disconnect_wallet: Brieftasche abtrennen
|
disconnect_wallet: Brieftasche abtrennen
|
||||||
connect_1tap: 1-Tap-Verbindung
|
connect_1tap: 1-Tap-Verbindung
|
||||||
paste: URL einfügen
|
paste: URL einfügen
|
||||||
|
balance: Bilanz
|
||||||
|
name: Brieftasche
|
||||||
error:
|
error:
|
||||||
logged_out: Kann keine Verbindung zur Brieftasche herstellen, wenn ich abgemeldet bin
|
logged_out: Kann keine Verbindung zur Brieftasche herstellen, wenn ich abgemeldet bin
|
||||||
nwc_auth_event_not_found: Kein Wallet-Authentifizierungsereignis gefunden
|
nwc_auth_event_not_found: Kein Wallet-Authentifizierungsereignis gefunden
|
||||||
@ -134,3 +138,22 @@ login:
|
|||||||
create: Konto erstellen
|
create: Konto erstellen
|
||||||
error:
|
error:
|
||||||
invalid_key: Ungültiger Schlüssel
|
invalid_key: Ungültiger Schlüssel
|
||||||
|
live:
|
||||||
|
start: LIVE GEHEN
|
||||||
|
configure_stream: Stream konfigurieren
|
||||||
|
endpoint: Endpunkt
|
||||||
|
accept_tos: TOS akzeptieren
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Titel
|
||||||
|
summary: Zusammenfassung
|
||||||
|
image: Titelbild
|
||||||
|
tags: Tags
|
||||||
|
nsfw: NSFW-Inhalt
|
||||||
|
nsfw_description: Prüfen Sie hier, ob dieser Stream Nacktheit oder
|
||||||
|
pornografische Inhalte enthält.
|
||||||
|
error:
|
||||||
|
failed: Stream fehlgeschlagen
|
||||||
|
connection_error: Verbindungsfehler
|
||||||
|
start_failed: Streamstart fehlgeschlagen, bitte überprüfen Sie Ihr Guthaben
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Δεν βρέθηκε χρήστης
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Δεν βρέθηκε χρήστης κατά την αναζήτηση
|
description: Δεν βρέθηκε χρήστης κατά την αναζήτηση
|
||||||
anon: Anon
|
anon: Anon
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 θεατής
|
one: 1 θεατής
|
||||||
other: ${n:decimalPattern} θεατές
|
other: ${n:decimalPattern} θεατές
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: ENDED
|
ended: ENDED
|
||||||
planned: ΣΧΕΔΙΑΣΜΟΣ
|
planned: ΣΧΕΔΙΑΣΜΟΣ
|
||||||
started: Ξεκίνησε $timestamp
|
started: Ξεκίνησε $timestamp
|
||||||
|
notification: ${name} βγήκε ζωντανά!
|
||||||
chat:
|
chat:
|
||||||
disabled: ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ
|
disabled: ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ
|
||||||
disabled_timeout: "Το χρονικό όριο λήγει: $time"
|
disabled_timeout: "Το χρονικό όριο λήγει: $time"
|
||||||
timeout(rich): $mod χρονομετρημένη λήξη $user για $time
|
timeout(rich): $mod χρονομετρημένη λήξη $user για ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Μήνυμα συνομιλίας που εμφανίζει συμβάντα timeout
|
description: Μήνυμα συνομιλίας που εμφανίζει συμβάντα timeout
|
||||||
ended: STREAM ΤΕΛΕΙΩΣΕ
|
ended: STREAM ΤΕΛΕΙΩΣΕ
|
||||||
@ -126,6 +128,8 @@ settings:
|
|||||||
disconnect_wallet: Αποσύνδεση πορτοφολιού
|
disconnect_wallet: Αποσύνδεση πορτοφολιού
|
||||||
connect_1tap: Σύνδεση 1 βρύσης
|
connect_1tap: Σύνδεση 1 βρύσης
|
||||||
paste: Επικόλληση URL
|
paste: Επικόλληση URL
|
||||||
|
balance: Υπόλοιπο
|
||||||
|
name: Πορτοφόλι
|
||||||
error:
|
error:
|
||||||
logged_out: Δεν μπορώ να συνδεθώ με πορτοφόλι όταν έχω αποσυνδεθεί
|
logged_out: Δεν μπορώ να συνδεθώ με πορτοφόλι όταν έχω αποσυνδεθεί
|
||||||
nwc_auth_event_not_found: Δεν βρέθηκε συμβάν εξουσιοδότησης πορτοφολιού
|
nwc_auth_event_not_found: Δεν βρέθηκε συμβάν εξουσιοδότησης πορτοφολιού
|
||||||
@ -136,3 +140,21 @@ login:
|
|||||||
create: Δημιουργία λογαριασμού
|
create: Δημιουργία λογαριασμού
|
||||||
error:
|
error:
|
||||||
invalid_key: Μη έγκυρο κλειδί
|
invalid_key: Μη έγκυρο κλειδί
|
||||||
|
live:
|
||||||
|
start: GO LIVE
|
||||||
|
configure_stream: Διαμόρφωση ροής
|
||||||
|
endpoint: Τελικό σημείο
|
||||||
|
accept_tos: Αποδοχή TOS
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Τίτλος
|
||||||
|
summary: Περίληψη
|
||||||
|
image: Εικόνα εξωφύλλου
|
||||||
|
tags: Ετικέτες
|
||||||
|
nsfw: Περιεχόμενο NSFW
|
||||||
|
nsfw_description: Ελέγξτε εδώ αν αυτή η ροή περιέχει γυμνό ή πορνογραφικό περιεχόμενο.
|
||||||
|
error:
|
||||||
|
failed: Το ρεύμα απέτυχε
|
||||||
|
connection_error: Σφάλμα σύνδεσης
|
||||||
|
start_failed: Η εκκίνηση της ροής απέτυχε, παρακαλούμε ελέγξτε το υπόλοιπό σας
|
||||||
|
@ -8,6 +8,7 @@ no_user_found: No user found
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: No user found when searching
|
description: No user found when searching
|
||||||
anon: Anon
|
anon: Anon
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 viewer
|
one: 1 viewer
|
||||||
other: ${n:decimalPattern} viewers
|
other: ${n:decimalPattern} viewers
|
||||||
@ -21,6 +22,7 @@ stream:
|
|||||||
ended: ENDED
|
ended: ENDED
|
||||||
planned: PLANNED
|
planned: PLANNED
|
||||||
started: Started $timestamp
|
started: Started $timestamp
|
||||||
|
notification: ${name} went live!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT DISABLED
|
disabled: CHAT DISABLED
|
||||||
disabled_timeout: "Timeout expires: $time"
|
disabled_timeout: "Timeout expires: $time"
|
||||||
@ -121,6 +123,8 @@ settings:
|
|||||||
disconnect_wallet: Disconnect Wallet
|
disconnect_wallet: Disconnect Wallet
|
||||||
connect_1tap: 1-Tap Connection
|
connect_1tap: 1-Tap Connection
|
||||||
paste: Paste URL
|
paste: Paste URL
|
||||||
|
balance: Balance
|
||||||
|
name: Wallet
|
||||||
error:
|
error:
|
||||||
logged_out: Cant connect wallet when logged out
|
logged_out: Cant connect wallet when logged out
|
||||||
nwc_auth_event_not_found: No wallet auth event found
|
nwc_auth_event_not_found: No wallet auth event found
|
||||||
@ -131,3 +135,21 @@ login:
|
|||||||
create: Create Account
|
create: Create Account
|
||||||
error:
|
error:
|
||||||
invalid_key: Invalid key
|
invalid_key: Invalid key
|
||||||
|
live:
|
||||||
|
start: GO LIVE
|
||||||
|
configure_stream: Configure Stream
|
||||||
|
endpoint: Endpoint
|
||||||
|
accept_tos: Accept TOS
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Title
|
||||||
|
summary: Summary
|
||||||
|
image: Cover Image
|
||||||
|
tags: Tags
|
||||||
|
nsfw: NSFW Content
|
||||||
|
nsfw_description: Check here if this stream contains nudity or pornographic content.
|
||||||
|
error:
|
||||||
|
failed: Stream failed
|
||||||
|
connection_error: Connection Error
|
||||||
|
start_failed: Stream start failed, please check your balance
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: No se ha encontrado ningún usuario
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: No se ha encontrado ningún usuario al realizar la búsqueda
|
description: No se ha encontrado ningún usuario al realizar la búsqueda
|
||||||
anon: Anónimo
|
anon: Anónimo
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 espectador
|
one: 1 espectador
|
||||||
other: ${n:decimalPattern} espectadores
|
other: ${n:decimalPattern} espectadores
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: FIN
|
ended: FIN
|
||||||
planned: PLANIFICADO
|
planned: PLANIFICADO
|
||||||
started: Comenzó $timestamp
|
started: Comenzó $timestamp
|
||||||
|
notification: ${name} ¡se ha puesto en marcha!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT DESHABILITADO
|
disabled: CHAT DESHABILITADO
|
||||||
disabled_timeout: "El tiempo de espera expira: $time"
|
disabled_timeout: "El tiempo de espera expira: $time"
|
||||||
timeout(rich): $mod timed out $user para $time
|
timeout(rich): $mod timed out $user para ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Mensaje de chat que muestra los eventos de tiempo de espera
|
description: Mensaje de chat que muestra los eventos de tiempo de espera
|
||||||
ended: STREAM FINED
|
ended: STREAM FINED
|
||||||
@ -126,6 +128,8 @@ settings:
|
|||||||
disconnect_wallet: Desconectar Cartera
|
disconnect_wallet: Desconectar Cartera
|
||||||
connect_1tap: Conexión de 1 toma
|
connect_1tap: Conexión de 1 toma
|
||||||
paste: Pegar URL
|
paste: Pegar URL
|
||||||
|
balance: Saldo
|
||||||
|
name: Cartera
|
||||||
error:
|
error:
|
||||||
logged_out: No se puede conectar el monedero al cerrar la sesión
|
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
|
nwc_auth_event_not_found: No se ha encontrado ningún evento de autenticación de cartera
|
||||||
@ -136,3 +140,21 @@ login:
|
|||||||
create: Crear una cuenta
|
create: Crear una cuenta
|
||||||
error:
|
error:
|
||||||
invalid_key: Clave no válida
|
invalid_key: Clave no válida
|
||||||
|
live:
|
||||||
|
start: EN VIVO
|
||||||
|
configure_stream: Configurar Stream
|
||||||
|
endpoint: Punto final
|
||||||
|
accept_tos: Aceptar TOS
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Título
|
||||||
|
summary: Resumen
|
||||||
|
image: Imagen de portada
|
||||||
|
tags: Etiquetas
|
||||||
|
nsfw: Contenido NSFW
|
||||||
|
nsfw_description: Compruebe aquí si este flujo contiene desnudos o contenido pornográfico.
|
||||||
|
error:
|
||||||
|
failed: Corriente fallida
|
||||||
|
connection_error: Error de conexión
|
||||||
|
start_failed: Error en el inicio de la transmisión, compruebe su saldo
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Käyttäjää ei löytynyt
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Käyttäjää ei löytynyt haun yhteydessä
|
description: Käyttäjää ei löytynyt haun yhteydessä
|
||||||
anon: Anon
|
anon: Anon
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 katsoja
|
one: 1 katsoja
|
||||||
other: ${n:decimalPattern} katsojat
|
other: ${n:decimalPattern} katsojat
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: ENDED
|
ended: ENDED
|
||||||
planned: SUUNNITELTU
|
planned: SUUNNITELTU
|
||||||
started: Aloitettu $timestamp
|
started: Aloitettu $timestamp
|
||||||
|
notification: ${name} meni suoraksi!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT POISTETTU KÄYTÖSTÄ
|
disabled: CHAT POISTETTU KÄYTÖSTÄ
|
||||||
disabled_timeout: "Aikakatkaisu päättyy: $time"
|
disabled_timeout: "Aikakatkaisu päättyy: $time"
|
||||||
timeout(rich): $mod ajastettu $user for $time
|
timeout(rich): $mod ajastettu $user for ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Chat-viesti, joka näyttää aikakatkaisutapahtumat
|
description: Chat-viesti, joka näyttää aikakatkaisutapahtumat
|
||||||
ended: STREAM PÄÄTTYNYT
|
ended: STREAM PÄÄTTYNYT
|
||||||
@ -124,6 +126,8 @@ settings:
|
|||||||
disconnect_wallet: Irrota lompakko
|
disconnect_wallet: Irrota lompakko
|
||||||
connect_1tap: 1-Tap-liitäntä
|
connect_1tap: 1-Tap-liitäntä
|
||||||
paste: Liitä URL-osoite
|
paste: Liitä URL-osoite
|
||||||
|
balance: Balance
|
||||||
|
name: Lompakko
|
||||||
error:
|
error:
|
||||||
logged_out: Ei voi muodostaa yhteyttä lompakkoon, kun on kirjautunut ulos
|
logged_out: Ei voi muodostaa yhteyttä lompakkoon, kun on kirjautunut ulos
|
||||||
nwc_auth_event_not_found: Ei lompakko-auth-tapahtumaa löydetty
|
nwc_auth_event_not_found: Ei lompakko-auth-tapahtumaa löydetty
|
||||||
@ -134,3 +138,22 @@ login:
|
|||||||
create: Luo tili
|
create: Luo tili
|
||||||
error:
|
error:
|
||||||
invalid_key: Virheellinen avain
|
invalid_key: Virheellinen avain
|
||||||
|
live:
|
||||||
|
start: GO LIVE
|
||||||
|
configure_stream: Määritä Stream
|
||||||
|
endpoint: Loppupiste
|
||||||
|
accept_tos: Hyväksy TOS
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Otsikko
|
||||||
|
summary: Yhteenveto
|
||||||
|
image: Kansikuva
|
||||||
|
tags: Tunnisteet
|
||||||
|
nsfw: NSFW-sisältö
|
||||||
|
nsfw_description: Tarkista täältä, jos tämä stream sisältää alastomuutta tai
|
||||||
|
pornografista sisältöä.
|
||||||
|
error:
|
||||||
|
failed: Stream epäonnistui
|
||||||
|
connection_error: Yhteysvirhe
|
||||||
|
start_failed: Virran käynnistys epäonnistui, tarkista saldosi
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Aucun utilisateur trouvé
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Aucun utilisateur n'a été trouvé lors de la recherche
|
description: Aucun utilisateur n'a été trouvé lors de la recherche
|
||||||
anon: Anonyme
|
anon: Anonyme
|
||||||
|
full_amount_sats: "${n:decimalPattern} sats"
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 téléspectateur
|
one: 1 téléspectateur
|
||||||
other: "${n:decimalPattern} téléspectateurs"
|
other: "${n:decimalPattern} téléspectateurs"
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: FINI
|
ended: FINI
|
||||||
planned: PRÉVU
|
planned: PRÉVU
|
||||||
started: Commencé à $timestamp
|
started: Commencé à $timestamp
|
||||||
|
notification: ${name} est en ligne !
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT DISABLED
|
disabled: CHAT DISABLED
|
||||||
disabled_timeout: "Le délai expire : $time"
|
disabled_timeout: "Le délai expire : $time"
|
||||||
timeout(rich): $mod $user a expiré dans le temps pour $time
|
timeout(rich): $mod $user a expiré dans le temps pour ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Message de chat indiquant les événements de dépassement de délai
|
description: Message de chat indiquant les événements de dépassement de délai
|
||||||
ended: STREAM ENDED
|
ended: STREAM ENDED
|
||||||
@ -123,6 +125,8 @@ settings:
|
|||||||
disconnect_wallet: Déconnecter le portefeuille
|
disconnect_wallet: Déconnecter le portefeuille
|
||||||
connect_1tap: Connexion à 1 robinet
|
connect_1tap: Connexion à 1 robinet
|
||||||
paste: Coller l'URL
|
paste: Coller l'URL
|
||||||
|
balance: Équilibre
|
||||||
|
name: Portefeuille
|
||||||
error:
|
error:
|
||||||
logged_out: Impossible de se connecter au portefeuille lorsque l'on est déconnecté
|
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é
|
nwc_auth_event_not_found: Aucun événement d'authentification de portefeuille n'a été trouvé
|
||||||
@ -133,3 +137,22 @@ login:
|
|||||||
create: Créer un Compte
|
create: Créer un Compte
|
||||||
error:
|
error:
|
||||||
invalid_key: Clé non valide
|
invalid_key: Clé non valide
|
||||||
|
live:
|
||||||
|
start: GO LIVE
|
||||||
|
configure_stream: Configurer le flux
|
||||||
|
endpoint: Point final
|
||||||
|
accept_tos: Accepter les CGU
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Titre
|
||||||
|
summary: Résumé
|
||||||
|
image: Image de couverture
|
||||||
|
tags: Tags
|
||||||
|
nsfw: Contenu NSFW
|
||||||
|
nsfw_description: Cochez cette case si ce flux contient de la nudité ou du
|
||||||
|
contenu pornographique.
|
||||||
|
error:
|
||||||
|
failed: Échec du flux
|
||||||
|
connection_error: Erreur de connexion
|
||||||
|
start_failed: Le démarrage du flux a échoué, veuillez vérifier votre solde
|
||||||
|
@ -22,6 +22,7 @@ stream:
|
|||||||
ended: ENDED
|
ended: ENDED
|
||||||
planned: TERVEZETT
|
planned: TERVEZETT
|
||||||
started: Elindult $timestamp
|
started: Elindult $timestamp
|
||||||
|
notification: ${name} elindult!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT KIKAPCSOLVA
|
disabled: CHAT KIKAPCSOLVA
|
||||||
disabled_timeout: "Az időkorlát lejár: $time"
|
disabled_timeout: "Az időkorlát lejár: $time"
|
||||||
@ -56,7 +57,7 @@ stream:
|
|||||||
from: RAID FROM $name
|
from: RAID FROM $name
|
||||||
"@from":
|
"@from":
|
||||||
description: Chat raid üzenet egy másik folyamból
|
description: Chat raid üzenet egy másik folyamból
|
||||||
countdown: Raiding a ${time}oldalon
|
countdown: Raiding a ${time} oldalon
|
||||||
"@countdown":
|
"@countdown":
|
||||||
description: Visszaszámláló időzítő az automatikus lovagláshoz
|
description: Visszaszámláló időzítő az automatikus lovagláshoz
|
||||||
goal:
|
goal:
|
||||||
@ -84,7 +85,7 @@ button:
|
|||||||
embed:
|
embed:
|
||||||
article_by: Cikk ${name}
|
article_by: Cikk ${name}
|
||||||
note_by: $name bejegyzése
|
note_by: $name bejegyzése
|
||||||
live_stream_by: Élő közvetítés a ${name}oldalon
|
live_stream_by: Élő közvetítés a ${name} oldalon
|
||||||
stream_list:
|
stream_list:
|
||||||
following: Követettek bejegyzései
|
following: Követettek bejegyzései
|
||||||
live: Élő
|
live: Élő
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Nessun utente trovato
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Nessun utente trovato durante la ricerca
|
description: Nessun utente trovato durante la ricerca
|
||||||
anon: Anonimo
|
anon: Anonimo
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 spettatore
|
one: 1 spettatore
|
||||||
other: ${n:decimalPattern} spettatori
|
other: ${n:decimalPattern} spettatori
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: FINE
|
ended: FINE
|
||||||
planned: PREVISTO
|
planned: PREVISTO
|
||||||
started: Avviato $timestamp
|
started: Avviato $timestamp
|
||||||
|
notification: ${name} è andato in onda!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT DISABILITATA
|
disabled: CHAT DISABILITATA
|
||||||
disabled_timeout: "Il timeout scade: $time"
|
disabled_timeout: "Il timeout scade: $time"
|
||||||
timeout(rich): $mod time out $user per $time
|
timeout(rich): $mod time out $user per ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Messaggio di chat che mostra gli eventi di timeout
|
description: Messaggio di chat che mostra gli eventi di timeout
|
||||||
ended: STREAM ENDED
|
ended: STREAM ENDED
|
||||||
@ -124,6 +126,8 @@ settings:
|
|||||||
disconnect_wallet: Disconnettere il portafoglio
|
disconnect_wallet: Disconnettere il portafoglio
|
||||||
connect_1tap: Connessione a 1 rubinetto
|
connect_1tap: Connessione a 1 rubinetto
|
||||||
paste: Incolla URL
|
paste: Incolla URL
|
||||||
|
balance: Equilibrio
|
||||||
|
name: Portafoglio
|
||||||
error:
|
error:
|
||||||
logged_out: Impossibile connettere il portafoglio quando si è disconnessi
|
logged_out: Impossibile connettere il portafoglio quando si è disconnessi
|
||||||
nwc_auth_event_not_found: Nessun evento wallet auth trovato
|
nwc_auth_event_not_found: Nessun evento wallet auth trovato
|
||||||
@ -134,3 +138,21 @@ login:
|
|||||||
create: Crea un account
|
create: Crea un account
|
||||||
error:
|
error:
|
||||||
invalid_key: Chiave non valida
|
invalid_key: Chiave non valida
|
||||||
|
live:
|
||||||
|
start: VAI IN DIRETTA
|
||||||
|
configure_stream: Configurare il flusso
|
||||||
|
endpoint: Punto finale
|
||||||
|
accept_tos: Accettare i TOS
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Titolo
|
||||||
|
summary: Sintesi
|
||||||
|
image: Immagine di copertina
|
||||||
|
tags: Tag
|
||||||
|
nsfw: Contenuto NSFW
|
||||||
|
nsfw_description: Controllare qui se questo streaming contiene nudità o contenuti pornografici.
|
||||||
|
error:
|
||||||
|
failed: Flusso fallito
|
||||||
|
connection_error: Errore di connessione
|
||||||
|
start_failed: Avvio del flusso fallito, controllare il saldo
|
||||||
|
@ -8,6 +8,7 @@ no_user_found: ユーザーが見つかりません
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: 検索してもユーザーが見つからない
|
description: 検索してもユーザーが見つからない
|
||||||
anon: 匿名
|
anon: 匿名
|
||||||
|
full_amount_sats: "${n:decimalPattern} サッツ"
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 視聴者
|
one: 1 視聴者
|
||||||
other: ${n:decimalPattern} 人が視聴中
|
other: ${n:decimalPattern} 人が視聴中
|
||||||
@ -21,10 +22,11 @@ stream:
|
|||||||
ended: 終了
|
ended: 終了
|
||||||
planned: 予定
|
planned: 予定
|
||||||
started: $timestamp を開始
|
started: $timestamp を開始
|
||||||
|
notification: ${name} がライブを開始した!
|
||||||
chat:
|
chat:
|
||||||
disabled: チャット無効
|
disabled: チャット無効
|
||||||
disabled_timeout: タイムアウト: $time
|
disabled_timeout: タイムアウト: $time
|
||||||
timeout(rich): $mod タイムアウト $user for $time
|
timeout(rich): $mod タイムアウト $user for ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: タイムアウトイベントを表示するチャットメッセージ
|
description: タイムアウトイベントを表示するチャットメッセージ
|
||||||
ended: 配信終了
|
ended: 配信終了
|
||||||
@ -121,6 +123,8 @@ settings:
|
|||||||
disconnect_wallet: ウォレットの切断
|
disconnect_wallet: ウォレットの切断
|
||||||
connect_1tap: 1タップ接続
|
connect_1tap: 1タップ接続
|
||||||
paste: URLを貼り付ける
|
paste: URLを貼り付ける
|
||||||
|
balance: バランス
|
||||||
|
name: 財布
|
||||||
error:
|
error:
|
||||||
logged_out: ログアウト時にウォレットに接続できない
|
logged_out: ログアウト時にウォレットに接続できない
|
||||||
nwc_auth_event_not_found: ウォレットの認証イベントが見つかりません
|
nwc_auth_event_not_found: ウォレットの認証イベントが見つかりません
|
||||||
@ -131,3 +135,21 @@ login:
|
|||||||
create: アカウントを作成する
|
create: アカウントを作成する
|
||||||
error:
|
error:
|
||||||
invalid_key: 無効なキー
|
invalid_key: 無効なキー
|
||||||
|
live:
|
||||||
|
start: ライブ中継
|
||||||
|
configure_stream: ストリームの設定
|
||||||
|
endpoint: エンドポイント
|
||||||
|
accept_tos: TOSを受け入れる
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: タイトル
|
||||||
|
summary: 概要
|
||||||
|
image: 表紙画像
|
||||||
|
tags: タグ
|
||||||
|
nsfw: NSFWコンテンツ
|
||||||
|
nsfw_description: このストリームにヌードやポルノが含まれている場合は、ここをチェックしてください。
|
||||||
|
error:
|
||||||
|
failed: ストリーム失敗
|
||||||
|
connection_error: 接続エラー
|
||||||
|
start_failed: ストリームの開始に失敗しました。
|
||||||
|
@ -8,9 +8,10 @@ no_user_found: 사용자를 찾을 수 없습니다.
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: 검색 시 사용자를 찾을 수 없음
|
description: 검색 시 사용자를 찾을 수 없음
|
||||||
anon: Anon
|
anon: Anon
|
||||||
|
full_amount_sats: "${n:decimalPattern} sats"
|
||||||
viewers:
|
viewers:
|
||||||
one: 시청자 1명
|
one: 시청자 1명
|
||||||
other: "${n:decimalPattern} 시청자"
|
other: "{n:decimalPattern} 시청자"
|
||||||
"@viewers":
|
"@viewers":
|
||||||
description: 스트림 시청자 수
|
description: 스트림 시청자 수
|
||||||
"@anon":
|
"@anon":
|
||||||
@ -21,10 +22,11 @@ stream:
|
|||||||
ended: 종료
|
ended: 종료
|
||||||
planned: 계획된
|
planned: 계획된
|
||||||
started: 시작 $timestamp
|
started: 시작 $timestamp
|
||||||
|
notification: ${name} 라이브가 시작되었습니다!
|
||||||
chat:
|
chat:
|
||||||
disabled: 채팅 사용 안 함
|
disabled: 채팅 사용 안 함
|
||||||
disabled_timeout: "시간 초과가 만료되었습니다: $time"
|
disabled_timeout: "시간 초과가 만료되었습니다: $time"
|
||||||
timeout(rich): $mod 시간 초과됨 $user $time
|
timeout(rich): $mod 시간 초과됨 $user ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: 시간 초과 이벤트를 표시하는 채팅 메시지
|
description: 시간 초과 이벤트를 표시하는 채팅 메시지
|
||||||
ended: 스트림 종료
|
ended: 스트림 종료
|
||||||
@ -121,6 +123,8 @@ settings:
|
|||||||
disconnect_wallet: 지갑 연결 해제
|
disconnect_wallet: 지갑 연결 해제
|
||||||
connect_1tap: 1-탭 연결
|
connect_1tap: 1-탭 연결
|
||||||
paste: URL 붙여넣기
|
paste: URL 붙여넣기
|
||||||
|
balance: 잔액
|
||||||
|
name: 지갑
|
||||||
error:
|
error:
|
||||||
logged_out: 로그아웃 시 지갑 연결 불가
|
logged_out: 로그아웃 시 지갑 연결 불가
|
||||||
nwc_auth_event_not_found: 지갑 인증 이벤트를 찾을 수 없습니다.
|
nwc_auth_event_not_found: 지갑 인증 이벤트를 찾을 수 없습니다.
|
||||||
@ -131,3 +135,21 @@ login:
|
|||||||
create: 계정 만들기
|
create: 계정 만들기
|
||||||
error:
|
error:
|
||||||
invalid_key: 잘못된 키
|
invalid_key: 잘못된 키
|
||||||
|
live:
|
||||||
|
start: 라이브 시작하기
|
||||||
|
configure_stream: 스트림 구성
|
||||||
|
endpoint: 엔드포인트
|
||||||
|
accept_tos: TOS 수락
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: 제목
|
||||||
|
summary: 요약
|
||||||
|
image: 표지 이미지
|
||||||
|
tags: 태그
|
||||||
|
nsfw: NSFW 콘텐츠
|
||||||
|
nsfw_description: 이 스트림에 노출 또는 음란 콘텐츠가 포함되어 있는지 여기에서 확인하세요.
|
||||||
|
error:
|
||||||
|
failed: 스트림 실패
|
||||||
|
connection_error: 연결 오류
|
||||||
|
start_failed: 스트림 시작에 실패했습니다. 잔액을 확인해 주세요.
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Geen gebruiker gevonden
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Geen gebruiker gevonden bij het zoeken
|
description: Geen gebruiker gevonden bij het zoeken
|
||||||
anon: Anon
|
anon: Anon
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 kijker
|
one: 1 kijker
|
||||||
other: ${n:decimalPattern} kijkers
|
other: ${n:decimalPattern} kijkers
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: GESLOTEN
|
ended: GESLOTEN
|
||||||
planned: GEPLAND
|
planned: GEPLAND
|
||||||
started: Begonnen met $timestamp
|
started: Begonnen met $timestamp
|
||||||
|
notification: ${name} ging live!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT UITGESCHAKELD
|
disabled: CHAT UITGESCHAKELD
|
||||||
disabled_timeout: "Time-out loopt af: $time"
|
disabled_timeout: "Time-out loopt af: $time"
|
||||||
timeout(rich): $mod timed out $user voor $time
|
timeout(rich): $mod timed out $user voor ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Chatbericht met time-outgebeurtenissen
|
description: Chatbericht met time-outgebeurtenissen
|
||||||
ended: STREAM BEËINDIGD
|
ended: STREAM BEËINDIGD
|
||||||
@ -124,6 +126,8 @@ settings:
|
|||||||
disconnect_wallet: Portefeuille loskoppelen
|
disconnect_wallet: Portefeuille loskoppelen
|
||||||
connect_1tap: 1-Tap Aansluiting
|
connect_1tap: 1-Tap Aansluiting
|
||||||
paste: URL plakken
|
paste: URL plakken
|
||||||
|
balance: Saldo
|
||||||
|
name: Portemonnee
|
||||||
error:
|
error:
|
||||||
logged_out: Kan geen verbinding maken met portemonnee als ik ben uitgelogd
|
logged_out: Kan geen verbinding maken met portemonnee als ik ben uitgelogd
|
||||||
nwc_auth_event_not_found: Geen portemonnee-auth-gebeurtenis gevonden
|
nwc_auth_event_not_found: Geen portemonnee-auth-gebeurtenis gevonden
|
||||||
@ -134,3 +138,21 @@ login:
|
|||||||
create: Account aanmaken
|
create: Account aanmaken
|
||||||
error:
|
error:
|
||||||
invalid_key: Ongeldige sleutel
|
invalid_key: Ongeldige sleutel
|
||||||
|
live:
|
||||||
|
start: LIVE GAAN
|
||||||
|
configure_stream: Stream configureren
|
||||||
|
endpoint: Eindpunt
|
||||||
|
accept_tos: TOS accepteren
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Titel
|
||||||
|
summary: Samenvatting
|
||||||
|
image: Afbeelding omslag
|
||||||
|
tags: Tags
|
||||||
|
nsfw: NSFW-inhoud
|
||||||
|
nsfw_description: Controleer hier of deze stream naaktheid of pornografische inhoud bevat.
|
||||||
|
error:
|
||||||
|
failed: Stream mislukt
|
||||||
|
connection_error: Fout bij verbinding
|
||||||
|
start_failed: Stream start mislukt, controleer uw saldo
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Nie znaleziono użytkownika
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Nie znaleziono użytkownika podczas wyszukiwania
|
description: Nie znaleziono użytkownika podczas wyszukiwania
|
||||||
anon: Anon
|
anon: Anon
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 przeglądarka
|
one: 1 przeglądarka
|
||||||
other: "{n:decimalPattern} widzów"
|
other: "{n:decimalPattern} widzów"
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: ZAKOŃCZONY
|
ended: ZAKOŃCZONY
|
||||||
planned: PLANOWANE
|
planned: PLANOWANE
|
||||||
started: Start $timestamp
|
started: Start $timestamp
|
||||||
|
notification: ${name} został uruchomiony!
|
||||||
chat:
|
chat:
|
||||||
disabled: CZAT WYŁĄCZONY
|
disabled: CZAT WYŁĄCZONY
|
||||||
disabled_timeout: "Upłynął limit czasu: $time"
|
disabled_timeout: "Upłynął limit czasu: $time"
|
||||||
timeout(rich): $mod upłynął limit czasu $user dla $time
|
timeout(rich): $mod upłynął limit czasu $user dla ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Komunikat czatu pokazujący zdarzenia przekroczenia limitu czasu
|
description: Komunikat czatu pokazujący zdarzenia przekroczenia limitu czasu
|
||||||
ended: TRANSMISJA ZAKOŃCZONA
|
ended: TRANSMISJA ZAKOŃCZONA
|
||||||
@ -124,6 +126,8 @@ settings:
|
|||||||
disconnect_wallet: Odłącz portfel
|
disconnect_wallet: Odłącz portfel
|
||||||
connect_1tap: Połączenie 1-wtykowe
|
connect_1tap: Połączenie 1-wtykowe
|
||||||
paste: Wklej adres URL
|
paste: Wklej adres URL
|
||||||
|
balance: Równowaga
|
||||||
|
name: Portfel
|
||||||
error:
|
error:
|
||||||
logged_out: Nie można połączyć portfela po wylogowaniu
|
logged_out: Nie można połączyć portfela po wylogowaniu
|
||||||
nwc_auth_event_not_found: Nie znaleziono zdarzenia autoryzacji portfela
|
nwc_auth_event_not_found: Nie znaleziono zdarzenia autoryzacji portfela
|
||||||
@ -134,3 +138,21 @@ login:
|
|||||||
create: Utwórz konto
|
create: Utwórz konto
|
||||||
error:
|
error:
|
||||||
invalid_key: Nieprawidłowy klucz
|
invalid_key: Nieprawidłowy klucz
|
||||||
|
live:
|
||||||
|
start: GO LIVE
|
||||||
|
configure_stream: Konfiguracja strumienia
|
||||||
|
endpoint: Punkt końcowy
|
||||||
|
accept_tos: Zaakceptuj Regulamin
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Tytuł
|
||||||
|
summary: Podsumowanie
|
||||||
|
image: Obraz na okładce
|
||||||
|
tags: Tagi
|
||||||
|
nsfw: Treści NSFW
|
||||||
|
nsfw_description: Sprawdź tutaj, czy ten stream zawiera nagość lub treści pornograficzne.
|
||||||
|
error:
|
||||||
|
failed: Strumień nie powiódł się
|
||||||
|
connection_error: Błąd połączenia
|
||||||
|
start_failed: Uruchomienie strumienia nie powiodło się, sprawdź saldo
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Nenhum usuário encontrado
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Nenhum usuário foi encontrado durante a pesquisa
|
description: Nenhum usuário foi encontrado durante a pesquisa
|
||||||
anon: Anônimo
|
anon: Anônimo
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 visualizador
|
one: 1 visualizador
|
||||||
other: ${n:decimalPattern} espectadores
|
other: ${n:decimalPattern} espectadores
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: FINALIZADO
|
ended: FINALIZADO
|
||||||
planned: PLANEJADO
|
planned: PLANEJADO
|
||||||
started: Iniciado em $timestamp
|
started: Iniciado em $timestamp
|
||||||
|
notification: ${name} foi ao ar!
|
||||||
chat:
|
chat:
|
||||||
disabled: BATE-PAPO DESATIVADO
|
disabled: BATE-PAPO DESATIVADO
|
||||||
disabled_timeout: "O tempo limite expira: $time"
|
disabled_timeout: "O tempo limite expira: $time"
|
||||||
timeout(rich): $mod Tempo esgotado $user para $time
|
timeout(rich): $mod Tempo esgotado $user para ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Mensagem de bate-papo mostrando eventos de tempo limite
|
description: Mensagem de bate-papo mostrando eventos de tempo limite
|
||||||
ended: TRANSMISSÃO ENCERRADA
|
ended: TRANSMISSÃO ENCERRADA
|
||||||
@ -124,6 +126,8 @@ settings:
|
|||||||
disconnect_wallet: Desconectar carteira
|
disconnect_wallet: Desconectar carteira
|
||||||
connect_1tap: Conexão de 1 torneira
|
connect_1tap: Conexão de 1 torneira
|
||||||
paste: Colar URL
|
paste: Colar URL
|
||||||
|
balance: Equilíbrio
|
||||||
|
name: Carteira
|
||||||
error:
|
error:
|
||||||
logged_out: Não consigo conectar a carteira quando estou desconectado
|
logged_out: Não consigo conectar a carteira quando estou desconectado
|
||||||
nwc_auth_event_not_found: Nenhum evento de autenticação de carteira encontrado
|
nwc_auth_event_not_found: Nenhum evento de autenticação de carteira encontrado
|
||||||
@ -134,3 +138,21 @@ login:
|
|||||||
create: Criar Conta
|
create: Criar Conta
|
||||||
error:
|
error:
|
||||||
invalid_key: Chave inválida
|
invalid_key: Chave inválida
|
||||||
|
live:
|
||||||
|
start: GO LIVE
|
||||||
|
configure_stream: Configurar fluxo
|
||||||
|
endpoint: Ponto final
|
||||||
|
accept_tos: Aceitar os Termos de Serviço
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Título
|
||||||
|
summary: Resumo
|
||||||
|
image: Imagem da capa
|
||||||
|
tags: Tags
|
||||||
|
nsfw: Conteúdo NSFW
|
||||||
|
nsfw_description: Verifique aqui se essa transmissão contém nudez ou conteúdo pornográfico.
|
||||||
|
error:
|
||||||
|
failed: O fluxo falhou
|
||||||
|
connection_error: Erro de conexão
|
||||||
|
start_failed: Falha no início do fluxo, verifique seu saldo
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Niciun utilizator găsit
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Nu s-a găsit niciun utilizator la căutare
|
description: Nu s-a găsit niciun utilizator la căutare
|
||||||
anon: Anon
|
anon: Anon
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 vizualizator
|
one: 1 vizualizator
|
||||||
other: ${n:decimalPattern} telespectatori
|
other: ${n:decimalPattern} telespectatori
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: TERMINAT
|
ended: TERMINAT
|
||||||
planned: PLANIFICATE
|
planned: PLANIFICATE
|
||||||
started: A început $timestamp
|
started: A început $timestamp
|
||||||
|
notification: ${name} a intrat în direct!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT DEZACTIVAT
|
disabled: CHAT DEZACTIVAT
|
||||||
disabled_timeout: "Timpul expiră: $time"
|
disabled_timeout: "Timpul expiră: $time"
|
||||||
timeout(rich): $mod Timed out $user pentru $time
|
timeout(rich): $mod Timed out $user pentru ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Mesaj de chat care afișează evenimentele de timeout
|
description: Mesaj de chat care afișează evenimentele de timeout
|
||||||
ended: STREAM ÎNCHEIAT
|
ended: STREAM ÎNCHEIAT
|
||||||
@ -125,6 +127,8 @@ settings:
|
|||||||
disconnect_wallet: Deconectați portofelul
|
disconnect_wallet: Deconectați portofelul
|
||||||
connect_1tap: Conexiune 1-Tap
|
connect_1tap: Conexiune 1-Tap
|
||||||
paste: Lipiți URL
|
paste: Lipiți URL
|
||||||
|
balance: Echilibru
|
||||||
|
name: Portofel
|
||||||
error:
|
error:
|
||||||
logged_out: Nu puteți conecta portofelul atunci când sunteți deconectat
|
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
|
nwc_auth_event_not_found: Nu a fost găsit niciun eveniment de autorizare a portofelului
|
||||||
@ -135,3 +139,21 @@ login:
|
|||||||
create: Creare cont
|
create: Creare cont
|
||||||
error:
|
error:
|
||||||
invalid_key: Cheie invalidă
|
invalid_key: Cheie invalidă
|
||||||
|
live:
|
||||||
|
start: GO LIVE
|
||||||
|
configure_stream: Configurați fluxul
|
||||||
|
endpoint: Punct final
|
||||||
|
accept_tos: Acceptați TOS
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Titlu
|
||||||
|
summary: Rezumat
|
||||||
|
image: Imagine de copertă
|
||||||
|
tags: Etichete
|
||||||
|
nsfw: Conținut NSFW
|
||||||
|
nsfw_description: Bifați aici dacă acest flux conține nuditate sau conținut pornografic.
|
||||||
|
error:
|
||||||
|
failed: Fluxul a eșuat
|
||||||
|
connection_error: Eroare de conectare
|
||||||
|
start_failed: Pornirea fluxului a eșuat, vă rugăm să verificați soldul
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Пользователь не найден
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Пользователь не найден при поиске
|
description: Пользователь не найден при поиске
|
||||||
anon: Аноним
|
anon: Аноним
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 зритель
|
one: 1 зритель
|
||||||
other: ${n:decimalPattern} зрителей
|
other: ${n:decimalPattern} зрителей
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: КОНЕЦ
|
ended: КОНЕЦ
|
||||||
planned: ПЛАНИРУЕМЫЙ
|
planned: ПЛАНИРУЕМЫЙ
|
||||||
started: Начало $timestamp
|
started: Начало $timestamp
|
||||||
|
notification: ${name} запустился!
|
||||||
chat:
|
chat:
|
||||||
disabled: ЧАТ ОТКЛЮЧЕН
|
disabled: ЧАТ ОТКЛЮЧЕН
|
||||||
disabled_timeout: "Таймаут истекает: $time"
|
disabled_timeout: "Таймаут истекает: $time"
|
||||||
timeout(rich): $mod тайм-аут $user для $time
|
timeout(rich): $mod тайм-аут $user для ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Сообщение в чате, показывающее события по тайм-ауту
|
description: Сообщение в чате, показывающее события по тайм-ауту
|
||||||
ended: ТРАНСЛЯЦИЯ ОКОНЧЕНА
|
ended: ТРАНСЛЯЦИЯ ОКОНЧЕНА
|
||||||
@ -125,6 +127,8 @@ settings:
|
|||||||
disconnect_wallet: Отключить кошелек
|
disconnect_wallet: Отключить кошелек
|
||||||
connect_1tap: 1-кратное соединение
|
connect_1tap: 1-кратное соединение
|
||||||
paste: Вставить URL
|
paste: Вставить URL
|
||||||
|
balance: Баланс
|
||||||
|
name: Кошелек
|
||||||
error:
|
error:
|
||||||
logged_out: Невозможно подключить кошелек при выходе из системы
|
logged_out: Невозможно подключить кошелек при выходе из системы
|
||||||
nwc_auth_event_not_found: Событие аутентификации кошелька не найдено
|
nwc_auth_event_not_found: Событие аутентификации кошелька не найдено
|
||||||
@ -135,3 +139,22 @@ login:
|
|||||||
create: Создать аккаунт
|
create: Создать аккаунт
|
||||||
error:
|
error:
|
||||||
invalid_key: Неверный ключ
|
invalid_key: Неверный ключ
|
||||||
|
live:
|
||||||
|
start: ПЕРЕЙТИ В ПРЯМОЙ ЭФИР
|
||||||
|
configure_stream: Настроить поток
|
||||||
|
endpoint: Конечная точка
|
||||||
|
accept_tos: Принять TOS
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Название
|
||||||
|
summary: Резюме
|
||||||
|
image: Изображение на обложке
|
||||||
|
tags: Теги
|
||||||
|
nsfw: NSFW-контент
|
||||||
|
nsfw_description: Отметьте здесь, если этот поток содержит наготу или
|
||||||
|
порнографические материалы.
|
||||||
|
error:
|
||||||
|
failed: Сбой потока
|
||||||
|
connection_error: Ошибка подключения
|
||||||
|
start_failed: Запуск потока не удался, пожалуйста, проверьте баланс
|
||||||
|
@ -1,19 +1,20 @@
|
|||||||
upload_avatar: Ladda upp avatar
|
upload_avatar: Ladda upp avatar
|
||||||
"@upload_avatar":
|
"@upload_avatar":
|
||||||
description: Text som uppmanar användaren att trycka på avatarplatshållaren för
|
description: Text som uppmanar användaren att trycka på avatar platshållaren för
|
||||||
att påbörja uppladdningen
|
att påbörja uppladdningen
|
||||||
most_zapped_streamers: De flesta zappade streamers
|
most_zapped_streamers: De flest zappade streamers
|
||||||
"@most_zapped_streamers":
|
"@most_zapped_streamers":
|
||||||
description: Rubrik över listade toppstreamers av zaps
|
description: Rubrik över listade topp streamers av zaps
|
||||||
no_user_found: Ingen användare hittades
|
no_user_found: Ingen användare hittades
|
||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Ingen användare hittades vid sökning
|
description: Ingen användare hittades vid sökning
|
||||||
anon: Anon
|
anon: Anno
|
||||||
|
full_amount_sats: ${n:decimalPattern} sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 tittare
|
one: 1 tittare
|
||||||
other: ${n:decimalPattern} tittare
|
other: ${n:decimalPattern} tittare
|
||||||
"@viewers":
|
"@viewers":
|
||||||
description: Antal tittare på streamingen
|
description: Antal tittare på strömmingen
|
||||||
"@anon":
|
"@anon":
|
||||||
description: En anonym användare
|
description: En anonym användare
|
||||||
stream:
|
stream:
|
||||||
@ -21,16 +22,17 @@ stream:
|
|||||||
live: LIVE
|
live: LIVE
|
||||||
ended: AVSLUTAD
|
ended: AVSLUTAD
|
||||||
planned: PLANERADE
|
planned: PLANERADE
|
||||||
started: Startade $timestamp
|
started: Startad $timestamp
|
||||||
|
notification: ${name} gick live!
|
||||||
chat:
|
chat:
|
||||||
disabled: CHAT AVSTÄNGD
|
disabled: CHAT AVSTÄNGD
|
||||||
disabled_timeout: "Tidsgränsen går ut: $time"
|
disabled_timeout: "Tidsgränsen går ut: $time"
|
||||||
timeout(rich): $mod tidsbegränsad $user för $time
|
timeout(rich): $mod tidsbegränsad $user för ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Chattmeddelande som visar timeout-händelser
|
description: Chattmeddelande som visar timeout-händelser
|
||||||
ended: STREAM AVSLUTAD
|
ended: STREAM AVSLUTAD
|
||||||
"@ended":
|
"@ended":
|
||||||
description: Stream avslutade sidfoten längst ner på chatten
|
description: Streama slutade sidfot längst ned i chatten
|
||||||
zap(rich): $user zapped $amount sats
|
zap(rich): $user zapped $amount sats
|
||||||
"@zap":
|
"@zap":
|
||||||
description: Chattmeddelande som visar strömavbrott
|
description: Chattmeddelande som visar strömavbrott
|
||||||
@ -38,27 +40,27 @@ stream:
|
|||||||
label: Skriv meddelande
|
label: Skriv meddelande
|
||||||
"@label":
|
"@label":
|
||||||
description: Etikett på inmatningsrutan för chattmeddelanden
|
description: Etikett på inmatningsrutan för chattmeddelanden
|
||||||
no_signer: Det går inte att skriva meddelanden med npub-inloggning
|
no_signer: Det går inte att skriva meddelanden med n-pub inloggning
|
||||||
"@no_signer":
|
"@no_signer":
|
||||||
description: Chattinmatningsmeddelande som visas när användaren endast är
|
description: Chattinmatningsmeddelande som visas när användaren endast är
|
||||||
inloggad med pubkey
|
inloggad med publik nyckel
|
||||||
login: Logga in för att skicka meddelanden
|
login: Logga in för att skicka meddelanden
|
||||||
"@login":
|
"@login":
|
||||||
description: Chattinmatningsmeddelande som visas när användaren är utloggad
|
description: Chattinmatningsmeddelande som visas när användaren är utloggad
|
||||||
badge:
|
badge:
|
||||||
awarded_to: "Tilldelas till:"
|
awarded_to: "Tilldelas till:"
|
||||||
"@awarded_to":
|
"@awarded_to":
|
||||||
description: Rubrik över lista över användare som tilldelats en badge
|
description: Rubrik över listan över användare som tilldelas ett märke
|
||||||
raid:
|
raid:
|
||||||
to: RAIDING $name
|
to: RAIDING ${name}
|
||||||
"@to":
|
"@to":
|
||||||
description: Chatta raidmeddelande till en annan ström
|
description: Chatt raid meddelande till en annan ström
|
||||||
from: RAID FRÅN $name
|
from: RAID FRÅN ${name}
|
||||||
"@from":
|
"@from":
|
||||||
description: Chat raid-meddelande från en annan ström
|
description: Chatt raid meddelande från en annan ström
|
||||||
countdown: Raiding på $time
|
countdown: Radiering i ${time}
|
||||||
"@countdown":
|
"@countdown":
|
||||||
description: Nedräkningstimer för auto-raiding
|
description: Nedräkningstimer för auto- radiering
|
||||||
goal:
|
goal:
|
||||||
title: "Mål: $amount"
|
title: "Mål: $amount"
|
||||||
remaining: "Kvarvarande: $amount"
|
remaining: "Kvarvarande: $amount"
|
||||||
@ -74,7 +76,7 @@ button:
|
|||||||
description: Knapptext för följ-knappen
|
description: Knapptext för följ-knappen
|
||||||
unfollow: Sluta följa
|
unfollow: Sluta följa
|
||||||
"@unfollow":
|
"@unfollow":
|
||||||
description: Knapptext för avföljningsknappen
|
description: Knapptext för sluta följa knappen
|
||||||
mute: Tysta
|
mute: Tysta
|
||||||
unmute: Avtysta
|
unmute: Avtysta
|
||||||
share: Dela
|
share: Dela
|
||||||
@ -82,9 +84,9 @@ button:
|
|||||||
connect: Anslut
|
connect: Anslut
|
||||||
settings: Inställningar
|
settings: Inställningar
|
||||||
embed:
|
embed:
|
||||||
article_by: Artikel av $name
|
article_by: Artikel av ${name}
|
||||||
note_by: Anteckning av $name
|
note_by: Anteckning av $name
|
||||||
live_stream_by: Direktsändning via $name
|
live_stream_by: Direktsändning via ${name}
|
||||||
stream_list:
|
stream_list:
|
||||||
following: Följer
|
following: Följer
|
||||||
live: Live
|
live: Live
|
||||||
@ -114,17 +116,19 @@ settings:
|
|||||||
profile:
|
profile:
|
||||||
display_name: Visa namn
|
display_name: Visa namn
|
||||||
about: Om
|
about: Om
|
||||||
nip05: Nostr Adress
|
nip05: Nostr adress
|
||||||
lud16: Adress för blixtnedslag
|
lud16: Lightning-adress
|
||||||
error:
|
error:
|
||||||
logged_out: Kan inte redigera profil när jag är utloggad
|
logged_out: Kan inte redigera profil när jag är utloggad
|
||||||
wallet:
|
wallet:
|
||||||
connect_wallet: Connect plånbok (NWC nostr+walletconnect://)
|
connect_wallet: Anslut plånbok (NWC nostr+walletconnect://)
|
||||||
disconnect_wallet: Koppla bort plånboken
|
disconnect_wallet: Koppla bort plånboken
|
||||||
connect_1tap: 1-Tap-anslutning
|
connect_1tap: 1-tryck anslutning
|
||||||
paste: Klistra in URL
|
paste: Klistra in URL
|
||||||
|
balance: Balans
|
||||||
|
name: Plånbok
|
||||||
error:
|
error:
|
||||||
logged_out: Kan inte ansluta plånbok när du är inloggad
|
logged_out: Kan inte ansluta plånbok när du är utloggad
|
||||||
nwc_auth_event_not_found: Inget autentiseringshändelse för plånbok hittades
|
nwc_auth_event_not_found: Inget autentiseringshändelse för plånbok hittades
|
||||||
login:
|
login:
|
||||||
username: Användarnamn
|
username: Användarnamn
|
||||||
@ -133,3 +137,21 @@ login:
|
|||||||
create: Skapa konto
|
create: Skapa konto
|
||||||
error:
|
error:
|
||||||
invalid_key: Ogiltig nyckel
|
invalid_key: Ogiltig nyckel
|
||||||
|
live:
|
||||||
|
start: GÅ DIREKT
|
||||||
|
configure_stream: Konfigurera ström
|
||||||
|
endpoint: Slutpunkt
|
||||||
|
accept_tos: Acceptera TOS
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Titel
|
||||||
|
summary: Sammanfattning
|
||||||
|
image: Omslagsbild
|
||||||
|
tags: Etiketter
|
||||||
|
nsfw: NSFW-innehåll
|
||||||
|
nsfw_description: Markera här om denna stream innehåller nakenhet eller pornografiskt innehåll.
|
||||||
|
error:
|
||||||
|
failed: Strömmen misslyckades
|
||||||
|
connection_error: Anslutningsfel
|
||||||
|
start_failed: Stream start misslyckades, vänligen kontrollera ditt saldo
|
||||||
|
@ -22,10 +22,11 @@ stream:
|
|||||||
ended: SONLANDI
|
ended: SONLANDI
|
||||||
planned: PLANLANMIŞ
|
planned: PLANLANMIŞ
|
||||||
started: Başlatıldı $timestamp
|
started: Başlatıldı $timestamp
|
||||||
|
notification: ${name} yayına girdi!
|
||||||
chat:
|
chat:
|
||||||
disabled: SOHBET DEVRE DIŞI
|
disabled: SOHBET DEVRE DIŞI
|
||||||
disabled_timeout: "Zaman aşımı sona eriyor: $time"
|
disabled_timeout: "Zaman aşımı sona eriyor: $time"
|
||||||
timeout(rich): $mod zaman aşımına uğradı $user için $time
|
timeout(rich): $mod zaman aşımına uğradı $user ${time}için
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Zaman aşımı olaylarını gösteren sohbet mesajı
|
description: Zaman aşımı olaylarını gösteren sohbet mesajı
|
||||||
ended: YAYIN SONLANDI
|
ended: YAYIN SONLANDI
|
||||||
@ -53,7 +54,7 @@ stream:
|
|||||||
to: RAIDING ${name}
|
to: RAIDING ${name}
|
||||||
"@to":
|
"@to":
|
||||||
description: Başka bir akışa sohbet baskını mesajı
|
description: Başka bir akışa sohbet baskını mesajı
|
||||||
from: ${name}ADRESINDEN RAID
|
from: ${name} ADRESINDEN RAID
|
||||||
"@from":
|
"@from":
|
||||||
description: Başka bir akıştan sohbet baskını mesajı
|
description: Başka bir akıştan sohbet baskını mesajı
|
||||||
countdown: ${time}adresinde baskın
|
countdown: ${time}adresinde baskın
|
||||||
|
@ -9,6 +9,7 @@ no_user_found: Користувача не знайдено
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: Користувача не знайдено при пошуку
|
description: Користувача не знайдено при пошуку
|
||||||
anon: Анонім.
|
anon: Анонім.
|
||||||
|
full_amount_sats: ${n:decimalPattern} сатів
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 глядач
|
one: 1 глядач
|
||||||
other: ${n:decimalPattern} глядачів
|
other: ${n:decimalPattern} глядачів
|
||||||
@ -22,10 +23,11 @@ stream:
|
|||||||
ended: ЗАКІНЧЕНО
|
ended: ЗАКІНЧЕНО
|
||||||
planned: ЗАПЛАНОВАНО
|
planned: ЗАПЛАНОВАНО
|
||||||
started: Запустив $timestamp
|
started: Запустив $timestamp
|
||||||
|
notification: ${name} запрацював!
|
||||||
chat:
|
chat:
|
||||||
disabled: ЧАТ ВІДКЛЮЧЕНО
|
disabled: ЧАТ ВІДКЛЮЧЕНО
|
||||||
disabled_timeout: "Тайм-аут закінчився: $time"
|
disabled_timeout: "Тайм-аут закінчився: $time"
|
||||||
timeout(rich): $mod таймінг $user для $time
|
timeout(rich): $mod таймінг $user для ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: Повідомлення в чаті про події тайм-ауту
|
description: Повідомлення в чаті про події тайм-ауту
|
||||||
ended: СТРІМ ЗАКІНЧИВСЯ
|
ended: СТРІМ ЗАКІНЧИВСЯ
|
||||||
@ -125,6 +127,8 @@ settings:
|
|||||||
disconnect_wallet: Відключити гаманець
|
disconnect_wallet: Відключити гаманець
|
||||||
connect_1tap: Підключення в 1 кран
|
connect_1tap: Підключення в 1 кран
|
||||||
paste: Вставити URL-адресу
|
paste: Вставити URL-адресу
|
||||||
|
balance: Баланс
|
||||||
|
name: Гаманець
|
||||||
error:
|
error:
|
||||||
logged_out: Не вдається підключити гаманець, коли ви вийшли з системи
|
logged_out: Не вдається підключити гаманець, коли ви вийшли з системи
|
||||||
nwc_auth_event_not_found: Не знайдено жодної події авторизації гаманця
|
nwc_auth_event_not_found: Не знайдено жодної події авторизації гаманця
|
||||||
@ -135,3 +139,22 @@ login:
|
|||||||
create: Створити обліковий запис
|
create: Створити обліковий запис
|
||||||
error:
|
error:
|
||||||
invalid_key: Неправильний ключ
|
invalid_key: Неправильний ключ
|
||||||
|
live:
|
||||||
|
start: GO LIVE
|
||||||
|
configure_stream: Налаштувати потік
|
||||||
|
endpoint: Кінцева точка
|
||||||
|
accept_tos: Прийміть ТЗ
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: Назва
|
||||||
|
summary: Підсумок
|
||||||
|
image: Зображення обкладинки
|
||||||
|
tags: Теги
|
||||||
|
nsfw: Нецензурна лексика
|
||||||
|
nsfw_description: Перевірте тут, чи містить цей потік оголену натуру або
|
||||||
|
порнографічний контент.
|
||||||
|
error:
|
||||||
|
failed: Потік не вдалося запустити
|
||||||
|
connection_error: Помилка з'єднання
|
||||||
|
start_failed: Не вдалося запустити трансляцію, будь ласка, перевірте свій баланс
|
||||||
|
@ -8,6 +8,7 @@ no_user_found: 未找到使用者
|
|||||||
"@no_user_found":
|
"@no_user_found":
|
||||||
description: 搜尋時未找到使用者
|
description: 搜尋時未找到使用者
|
||||||
anon: 匿名
|
anon: 匿名
|
||||||
|
full_amount_sats: ${n:decimalPattern} Sats
|
||||||
viewers:
|
viewers:
|
||||||
one: 1 個檢視器
|
one: 1 個檢視器
|
||||||
other: ${n:decimalPattern} 觀眾
|
other: ${n:decimalPattern} 觀眾
|
||||||
@ -21,10 +22,11 @@ stream:
|
|||||||
ended: 結束
|
ended: 結束
|
||||||
planned: 計劃
|
planned: 計劃
|
||||||
started: 開始 $timestamp
|
started: 開始 $timestamp
|
||||||
|
notification: ${name} 已啟用!
|
||||||
chat:
|
chat:
|
||||||
disabled: 關閉聊天
|
disabled: 關閉聊天
|
||||||
disabled_timeout: 超時過期: $time
|
disabled_timeout: 超時過期: $time
|
||||||
timeout(rich): $mod 超時 $user for $time
|
timeout(rich): $mod 超時 $user for ${time}
|
||||||
"@timeout":
|
"@timeout":
|
||||||
description: 顯示逾時事件的聊天訊息
|
description: 顯示逾時事件的聊天訊息
|
||||||
ended: 串流結束
|
ended: 串流結束
|
||||||
@ -121,6 +123,8 @@ settings:
|
|||||||
disconnect_wallet: 斷開錢包
|
disconnect_wallet: 斷開錢包
|
||||||
connect_1tap: 1 抽頭連接
|
connect_1tap: 1 抽頭連接
|
||||||
paste: 貼上 URL
|
paste: 貼上 URL
|
||||||
|
balance: 平衡
|
||||||
|
name: 錢包
|
||||||
error:
|
error:
|
||||||
logged_out: 登出時無法連接錢包
|
logged_out: 登出時無法連接錢包
|
||||||
nwc_auth_event_not_found: 未找到錢包認證事件
|
nwc_auth_event_not_found: 未找到錢包認證事件
|
||||||
@ -131,3 +135,21 @@ login:
|
|||||||
create: 創建帳戶
|
create: 創建帳戶
|
||||||
error:
|
error:
|
||||||
invalid_key: 無效按鍵
|
invalid_key: 無效按鍵
|
||||||
|
live:
|
||||||
|
start: 開始直播
|
||||||
|
configure_stream: 設定串流
|
||||||
|
endpoint: 終點
|
||||||
|
accept_tos: 接受服務條款
|
||||||
|
balance_left:
|
||||||
|
zero: ∞
|
||||||
|
other: ~${time}
|
||||||
|
title: 標題
|
||||||
|
summary: 摘要
|
||||||
|
image: 封面圖片
|
||||||
|
tags: 標籤
|
||||||
|
nsfw: NSFW 內容
|
||||||
|
nsfw_description: 請檢查此串流是否包含裸體或色情內容。
|
||||||
|
error:
|
||||||
|
failed: 串流失敗
|
||||||
|
connection_error: 連線錯誤
|
||||||
|
start_failed: 串流啟動失敗,請檢查您的餘額
|
||||||
|
@ -38,8 +38,16 @@ class WalletConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class WalletInfo {
|
||||||
|
final String name;
|
||||||
|
final int balance;
|
||||||
|
|
||||||
|
const WalletInfo({required this.name, required this.balance});
|
||||||
|
}
|
||||||
|
|
||||||
abstract class SimpleWallet {
|
abstract class SimpleWallet {
|
||||||
Future<String> payInvoice(String pr);
|
Future<String> payInvoice(String pr);
|
||||||
|
Future<WalletInfo> getInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
class NWCWrapper extends SimpleWallet {
|
class NWCWrapper extends SimpleWallet {
|
||||||
@ -60,6 +68,13 @@ class NWCWrapper extends SimpleWallet {
|
|||||||
return rsp.preimage!;
|
return rsp.preimage!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<WalletInfo> getInfo() async {
|
||||||
|
final info = await ndk.nwc.getInfo(_conn);
|
||||||
|
final balance = await ndk.nwc.getBalance(_conn);
|
||||||
|
return WalletInfo(name: info.alias, balance: balance.balanceSats);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class LoginAccount {
|
class LoginAccount {
|
||||||
@ -68,6 +83,7 @@ class LoginAccount {
|
|||||||
final String? privateKey;
|
final String? privateKey;
|
||||||
final List<String>? signerRelays;
|
final List<String>? signerRelays;
|
||||||
final WalletConfig? wallet;
|
final WalletConfig? wallet;
|
||||||
|
final String? streamEndpoint;
|
||||||
|
|
||||||
SimpleWallet? _cachedWallet;
|
SimpleWallet? _cachedWallet;
|
||||||
|
|
||||||
@ -77,6 +93,7 @@ class LoginAccount {
|
|||||||
this.privateKey,
|
this.privateKey,
|
||||||
this.signerRelays,
|
this.signerRelays,
|
||||||
this.wallet,
|
this.wallet,
|
||||||
|
this.streamEndpoint,
|
||||||
});
|
});
|
||||||
|
|
||||||
static LoginAccount nip19(String key) {
|
static LoginAccount nip19(String key) {
|
||||||
@ -124,6 +141,7 @@ class LoginAccount {
|
|||||||
"pubKey": acc?.pubkey,
|
"pubKey": acc?.pubkey,
|
||||||
"privateKey": acc?.privateKey,
|
"privateKey": acc?.privateKey,
|
||||||
"wallet": acc?.wallet?.toJson(),
|
"wallet": acc?.wallet?.toJson(),
|
||||||
|
"streamEndpoint": acc?.streamEndpoint,
|
||||||
};
|
};
|
||||||
|
|
||||||
static LoginAccount? fromJson(Map<String, dynamic> json) {
|
static LoginAccount? fromJson(Map<String, dynamic> json) {
|
||||||
@ -147,6 +165,7 @@ class LoginAccount {
|
|||||||
json.containsKey("wallet") && json["wallet"] != null
|
json.containsKey("wallet") && json["wallet"] != null
|
||||||
? WalletConfig.fromJson(json["wallet"])
|
? WalletConfig.fromJson(json["wallet"])
|
||||||
: null,
|
: null,
|
||||||
|
streamEndpoint: json["streamEndpoint"],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -200,4 +219,21 @@ class LoginData extends ValueNotifier<LoginAccount?> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void configure({
|
||||||
|
List<String>? signerRelays,
|
||||||
|
WalletConfig? wallet,
|
||||||
|
String? streamEndpoint,
|
||||||
|
}) {
|
||||||
|
if (value != null) {
|
||||||
|
value = LoginAccount(
|
||||||
|
type: value!.type,
|
||||||
|
pubkey: value!.pubkey,
|
||||||
|
privateKey: value!.privateKey,
|
||||||
|
signerRelays: signerRelays ?? value!.signerRelays,
|
||||||
|
wallet: wallet,
|
||||||
|
streamEndpoint: streamEndpoint ?? value!.streamEndpoint,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'dart:developer' as developer;
|
import 'dart:developer' as developer;
|
||||||
|
|
||||||
|
import 'package:audio_service/audio_service.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
@ -7,6 +8,9 @@ import 'package:zap_stream_flutter/app.dart';
|
|||||||
import 'package:zap_stream_flutter/const.dart';
|
import 'package:zap_stream_flutter/const.dart';
|
||||||
import 'package:zap_stream_flutter/i18n/strings.g.dart';
|
import 'package:zap_stream_flutter/i18n/strings.g.dart';
|
||||||
import 'package:zap_stream_flutter/notifications.dart';
|
import 'package:zap_stream_flutter/notifications.dart';
|
||||||
|
import 'package:zap_stream_flutter/player.dart';
|
||||||
|
|
||||||
|
late final MainPlayer mainPlayer;
|
||||||
|
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
@ -20,5 +24,14 @@ Future<void> main() async {
|
|||||||
developer.log("Failed to setup notifications: $e");
|
developer.log("Failed to setup notifications: $e");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mainPlayer = await AudioService.init(
|
||||||
|
builder: () => MainPlayer(),
|
||||||
|
config: AudioServiceConfig(
|
||||||
|
androidNotificationChannelId: "io.nostrlabs.zap_stream_flutter.player",
|
||||||
|
androidNotificationChannelName: "Player Status",
|
||||||
|
androidNotificationOngoing: true
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
runZapStream();
|
runZapStream();
|
||||||
}
|
}
|
||||||
|
@ -10,11 +10,14 @@ import 'package:flutter/foundation.dart';
|
|||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||||
import 'package:ndk/ndk.dart';
|
import 'package:ndk/ndk.dart';
|
||||||
|
import 'package:ndk_objectbox/ndk_objectbox.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
import 'package:zap_stream_flutter/const.dart';
|
import 'package:zap_stream_flutter/const.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:zap_stream_flutter/firebase_options.dart';
|
import 'package:zap_stream_flutter/firebase_options.dart';
|
||||||
|
import 'package:zap_stream_flutter/i18n/strings.g.dart';
|
||||||
import 'package:zap_stream_flutter/utils.dart';
|
import 'package:zap_stream_flutter/utils.dart';
|
||||||
|
import 'package:zap_stream_flutter/widgets/profile.dart';
|
||||||
|
|
||||||
class Notepush {
|
class Notepush {
|
||||||
final String base;
|
final String base;
|
||||||
@ -183,6 +186,82 @@ class NotificationsStore extends ValueNotifier<NotificationsState?> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _initLocalNotifications() async {
|
||||||
|
await localNotifications.initialize(
|
||||||
|
InitializationSettings(
|
||||||
|
android: AndroidInitializationSettings("@drawable/ic_stat_name"),
|
||||||
|
iOS: DarwinInitializationSettings(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@pragma('vm:entry-point')
|
||||||
|
Future<void> _onBackgroundNotification(RemoteMessage msg) async {
|
||||||
|
await LocaleSettings.useDeviceLocale();
|
||||||
|
final cache = DbObjectBox(attach: true);
|
||||||
|
await _initLocalNotifications();
|
||||||
|
await _handleNotification(msg, cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onNotification(RemoteMessage msg) async {
|
||||||
|
await _handleNotification(msg, ndkCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _handleNotification(RemoteMessage msg, DbObjectBox cache) async {
|
||||||
|
final notification = msg.notification;
|
||||||
|
if (notification != null && notification.android != null) {
|
||||||
|
final String? json = msg.data["nostr_event"];
|
||||||
|
|
||||||
|
final event =
|
||||||
|
json != null ? Nip01Event.fromJson(JsonCodec().decode(json)) : null;
|
||||||
|
await _showNotification(notification, ndkCache, event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _showNotification(
|
||||||
|
RemoteNotification notification,
|
||||||
|
DbObjectBox cache,
|
||||||
|
Nip01Event? event,
|
||||||
|
) async {
|
||||||
|
final stream = event != null ? StreamEvent(event) : null;
|
||||||
|
final hostProfile =
|
||||||
|
stream != null ? await cache.loadMetadata(stream.info.host) : null;
|
||||||
|
final newTitle =
|
||||||
|
hostProfile != null
|
||||||
|
? t.stream.notification(
|
||||||
|
name: ProfileNameWidget.nameFromProfile(hostProfile),
|
||||||
|
)
|
||||||
|
: null;
|
||||||
|
|
||||||
|
localNotifications.show(
|
||||||
|
notification.hashCode,
|
||||||
|
newTitle ?? notification.title,
|
||||||
|
stream?.info.title ?? notification.body,
|
||||||
|
NotificationDetails(
|
||||||
|
android: AndroidNotificationDetails(
|
||||||
|
notification.android!.channelId ?? "fcm",
|
||||||
|
"Push Notifications",
|
||||||
|
category: AndroidNotificationCategory.social,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onOpenMessage(RemoteMessage msg) async {
|
||||||
|
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()}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// global notifications store
|
// global notifications store
|
||||||
final notifications = NotificationsStore(null);
|
final notifications = NotificationsStore(null);
|
||||||
|
|
||||||
@ -191,75 +270,48 @@ Future<void> setupNotifications() async {
|
|||||||
|
|
||||||
final signer = ndk.accounts.getLoggedAccount()?.signer;
|
final signer = ndk.accounts.getLoggedAccount()?.signer;
|
||||||
if (signer != null) {
|
if (signer != null) {
|
||||||
final pusher = Notepush(dotenv.env["NOTEPUSH_URL"]!, signer: signer);
|
await configureNotifications(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,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> configureNotifications(EventSigner signer) async {
|
||||||
|
FirebaseMessaging.onMessage.listen(_onNotification);
|
||||||
|
//FirebaseMessaging.onBackgroundMessage(_onBackgroundNotification);
|
||||||
|
FirebaseMessaging.onMessageOpenedApp.listen(_onOpenMessage);
|
||||||
|
|
||||||
|
final settings = await FirebaseMessaging.instance.requestPermission(
|
||||||
|
provisional: true,
|
||||||
|
);
|
||||||
|
await FirebaseMessaging.instance.setAutoInitEnabled(true);
|
||||||
|
await FirebaseMessaging.instance.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 _initLocalNotifications();
|
||||||
|
|
||||||
|
final pusher = Notepush(dotenv.env["NOTEPUSH_URL"]!, signer: signer);
|
||||||
|
FirebaseMessaging.instance.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,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
429
lib/pages/live.dart
Normal file
@ -0,0 +1,429 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
import 'dart:developer' as developer;
|
||||||
|
|
||||||
|
import 'package:apivideo_live_stream/apivideo_live_stream.dart';
|
||||||
|
import 'package:collection/collection.dart';
|
||||||
|
import 'package:duration/duration.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:ndk/ndk.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
import 'package:wakelock_plus/wakelock_plus.dart';
|
||||||
|
import 'package:zap_stream_flutter/api.dart';
|
||||||
|
import 'package:zap_stream_flutter/const.dart';
|
||||||
|
import 'package:zap_stream_flutter/i18n/strings.g.dart';
|
||||||
|
import 'package:zap_stream_flutter/rx_filter.dart';
|
||||||
|
import 'package:zap_stream_flutter/theme.dart';
|
||||||
|
import 'package:zap_stream_flutter/utils.dart';
|
||||||
|
import 'package:zap_stream_flutter/widgets/button.dart';
|
||||||
|
import 'package:zap_stream_flutter/widgets/chat.dart';
|
||||||
|
import 'package:zap_stream_flutter/widgets/pill.dart';
|
||||||
|
import 'package:zap_stream_flutter/widgets/stream_config.dart';
|
||||||
|
|
||||||
|
Future<bool?> showExitStreamDialog(BuildContext context) {
|
||||||
|
return showDialog<bool>(
|
||||||
|
context: context,
|
||||||
|
barrierDismissible: false,
|
||||||
|
useRootNavigator: false,
|
||||||
|
builder: (context) {
|
||||||
|
return Dialog(
|
||||||
|
child: Container(
|
||||||
|
padding: EdgeInsets.all(10),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
spacing: 16,
|
||||||
|
children: [
|
||||||
|
Text("Exit live stream?", style: TextStyle(fontSize: 24)),
|
||||||
|
Row(
|
||||||
|
spacing: 16,
|
||||||
|
children: [
|
||||||
|
Flexible(
|
||||||
|
child: BasicButton.text(
|
||||||
|
"Yes, stop stream",
|
||||||
|
onTap: (context) => context.pop(true),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Flexible(
|
||||||
|
child: BasicButton.text(
|
||||||
|
"No",
|
||||||
|
onTap: (context) => context.pop(false),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
class LivePage extends StatefulWidget {
|
||||||
|
const LivePage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<StatefulWidget> createState() => _LivePage();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LivePage extends State<LivePage>
|
||||||
|
implements ApiVideoLiveStreamEventsListener {
|
||||||
|
late final ApiVideoLiveStreamController _controller;
|
||||||
|
late final ZapStreamApi _api;
|
||||||
|
AccountInfo? _account;
|
||||||
|
late final Timer _accountTimer;
|
||||||
|
bool _streaming = false;
|
||||||
|
|
||||||
|
Future<void> _reloadAccount() async {
|
||||||
|
final info = await _api.getAccountInfo();
|
||||||
|
setState(() {
|
||||||
|
_account = info;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
_controller = ApiVideoLiveStreamController(
|
||||||
|
initialAudioConfig: AudioConfig(),
|
||||||
|
initialVideoConfig: VideoConfig.withDefaultBitrate(),
|
||||||
|
);
|
||||||
|
_controller.initialize();
|
||||||
|
_api = ZapStreamApi.instance();
|
||||||
|
_reloadAccount();
|
||||||
|
_accountTimer = Timer.periodic(Duration(seconds: 30), (_) async {
|
||||||
|
await _reloadAccount();
|
||||||
|
});
|
||||||
|
_controller.addEventsListener(this);
|
||||||
|
WakelockPlus.enable();
|
||||||
|
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_accountTimer.cancel();
|
||||||
|
_controller.stopStreaming();
|
||||||
|
_controller.dispose();
|
||||||
|
WakelockPlus.disable();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showError(BuildContext context, String msg, {Exception? error}) {
|
||||||
|
if (error != null) {
|
||||||
|
developer.log(error.toString());
|
||||||
|
}
|
||||||
|
if (!context.mounted) return;
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(
|
||||||
|
backgroundColor: WARNING,
|
||||||
|
content: Text(msg, style: TextStyle(fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
String _calcTimeRemaining(IngestEndpoint endpoint, double balance) {
|
||||||
|
if (endpoint.cost.rate == 0) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
final units = balance / endpoint.cost.rate;
|
||||||
|
if (endpoint.cost.unit == "min") {
|
||||||
|
return Duration(
|
||||||
|
seconds: (units * 60).clamp(0, double.infinity).floor(),
|
||||||
|
).pretty(abbreviated: true);
|
||||||
|
}
|
||||||
|
return "0s";
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final mq = MediaQuery.of(context);
|
||||||
|
return PopScope(
|
||||||
|
canPop: false,
|
||||||
|
onPopInvokedWithResult: (didPop, result) async {
|
||||||
|
if (_streaming) {
|
||||||
|
final go = await showExitStreamDialog(context);
|
||||||
|
if (context.mounted) {
|
||||||
|
if (go == true) {
|
||||||
|
context.go("/");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
context.go("/");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: ValueListenableBuilder(
|
||||||
|
valueListenable: loginData,
|
||||||
|
builder: (context, state, _) {
|
||||||
|
final endpoint = _account?.endpoints.firstWhereOrNull(
|
||||||
|
(e) => e.name == state?.streamEndpoint,
|
||||||
|
);
|
||||||
|
final balance = _account?.balance ?? 0;
|
||||||
|
|
||||||
|
return RxFilter<Nip01Event>(
|
||||||
|
Key("live-stream"),
|
||||||
|
filters: [
|
||||||
|
Filter(
|
||||||
|
kinds: [30_311],
|
||||||
|
limit: 100,
|
||||||
|
pTags: [loginData.value!.pubkey],
|
||||||
|
),
|
||||||
|
Filter(
|
||||||
|
kinds: [30_311],
|
||||||
|
limit: 100,
|
||||||
|
authors: [loginData.value!.pubkey],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
builder: (context, streamState) {
|
||||||
|
final ev = streamState
|
||||||
|
?.sortedBy((e) => e.createdAt)
|
||||||
|
.firstWhereOrNull((e) => e.getFirstTag("status") == "live");
|
||||||
|
|
||||||
|
final stream = ev != null ? StreamEvent(ev) : null;
|
||||||
|
return Stack(
|
||||||
|
children: [
|
||||||
|
ApiVideoCameraPreview(controller: _controller),
|
||||||
|
Positioned(
|
||||||
|
top: 10,
|
||||||
|
left: 10,
|
||||||
|
width: mq.size.width - 20,
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
PillWidget(
|
||||||
|
color: LAYER_2,
|
||||||
|
child: Row(
|
||||||
|
spacing: 4,
|
||||||
|
children: [
|
||||||
|
Text(t.full_amount_sats(n: balance)),
|
||||||
|
if (endpoint != null)
|
||||||
|
Text(
|
||||||
|
t.live.balance_left(
|
||||||
|
n: endpoint.cost.rate,
|
||||||
|
time: _calcTimeRemaining(endpoint, balance),
|
||||||
|
),
|
||||||
|
style: TextStyle(color: LAYER_5),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if ((stream?.info.participants ?? 0) > 0)
|
||||||
|
PillWidget(
|
||||||
|
color: LAYER_2,
|
||||||
|
child: Text(
|
||||||
|
t.viewers(n: stream?.info.participants ?? 0),
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 14,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (_account != null)
|
||||||
|
Positioned(
|
||||||
|
width: mq.size.width,
|
||||||
|
bottom: 15,
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
IconButton.filled(
|
||||||
|
iconSize: 40,
|
||||||
|
style: ButtonStyle(
|
||||||
|
iconColor: WidgetStateColor.resolveWith(
|
||||||
|
(_) => FONT_COLOR,
|
||||||
|
),
|
||||||
|
backgroundColor: WidgetStateColor.resolveWith(
|
||||||
|
(_) => LAYER_3,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
_controller.switchCamera();
|
||||||
|
},
|
||||||
|
icon: Icon(Icons.cameraswitch_rounded),
|
||||||
|
),
|
||||||
|
Spacer(),
|
||||||
|
if (_account != null && !_account!.tos.accepted)
|
||||||
|
Column(
|
||||||
|
spacing: 16,
|
||||||
|
children: [
|
||||||
|
BasicButton.text(
|
||||||
|
"Read TOS",
|
||||||
|
onTap: (context) {
|
||||||
|
if (_account?.tos.link != null) {
|
||||||
|
launchUrl(Uri.parse(_account!.tos.link!));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
BasicButton.text(
|
||||||
|
t.live.accept_tos,
|
||||||
|
color: WARNING,
|
||||||
|
onTap: (context) {
|
||||||
|
_api
|
||||||
|
.acceptTos()
|
||||||
|
.then((_) {
|
||||||
|
_reloadAccount();
|
||||||
|
})
|
||||||
|
.catchError((e) {
|
||||||
|
_showError(
|
||||||
|
context,
|
||||||
|
e.toString(),
|
||||||
|
error: e,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
else if (state?.streamEndpoint == null ||
|
||||||
|
endpoint == null)
|
||||||
|
BasicButton.text(
|
||||||
|
t.live.configure_stream,
|
||||||
|
color: WARNING,
|
||||||
|
),
|
||||||
|
if (endpoint != null)
|
||||||
|
IconButton.filled(
|
||||||
|
iconSize: 40,
|
||||||
|
style: ButtonStyle(
|
||||||
|
iconColor: WidgetStateColor.resolveWith(
|
||||||
|
(_) => WARNING,
|
||||||
|
),
|
||||||
|
backgroundColor: WidgetStateColor.resolveWith(
|
||||||
|
(_) => LAYER_3,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
onPressed: () async {
|
||||||
|
if (_streaming) {
|
||||||
|
_controller.stopStreaming().catchError((e) {
|
||||||
|
_showError(context, e.toString(), error: e);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
_controller
|
||||||
|
.startStreaming(
|
||||||
|
streamKey: endpoint.key,
|
||||||
|
url: endpoint.url,
|
||||||
|
)
|
||||||
|
.catchError((e) {
|
||||||
|
_showError(
|
||||||
|
context,
|
||||||
|
t.live.error.start_failed,
|
||||||
|
error: e,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
icon: Icon(
|
||||||
|
_streaming ? Icons.stop : Icons.circle,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Spacer(),
|
||||||
|
IconButton.filled(
|
||||||
|
iconSize: 40,
|
||||||
|
style: ButtonStyle(
|
||||||
|
iconColor: WidgetStateColor.resolveWith(
|
||||||
|
(_) => FONT_COLOR,
|
||||||
|
),
|
||||||
|
backgroundColor: WidgetStateColor.resolveWith(
|
||||||
|
(_) => LAYER_3,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
showModalBottomSheet(
|
||||||
|
context: context,
|
||||||
|
constraints: BoxConstraints.expand(),
|
||||||
|
builder: (context) {
|
||||||
|
return StreamConfigWidget(
|
||||||
|
api: _api,
|
||||||
|
account: _account!,
|
||||||
|
hideEndpointConfig: _streaming,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
).then((_) {
|
||||||
|
_reloadAccount();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
icon: Icon(Icons.settings),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (_account != null && stream != null)
|
||||||
|
Positioned(
|
||||||
|
bottom: 80,
|
||||||
|
child: Container(
|
||||||
|
width: mq.size.width,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 10),
|
||||||
|
constraints: BoxConstraints(
|
||||||
|
maxHeight: mq.size.height * 0.3,
|
||||||
|
minHeight: 200,
|
||||||
|
),
|
||||||
|
child: ShaderMask(
|
||||||
|
shaderCallback: (Rect bounds) {
|
||||||
|
return LinearGradient(
|
||||||
|
begin: Alignment.bottomCenter,
|
||||||
|
end: Alignment.topCenter,
|
||||||
|
colors: [
|
||||||
|
Colors.white.withAlpha(255),
|
||||||
|
Colors.white.withAlpha(200),
|
||||||
|
Colors.white.withAlpha(0),
|
||||||
|
],
|
||||||
|
stops: [0.0, 0.7, 1.0],
|
||||||
|
).createShader(bounds);
|
||||||
|
},
|
||||||
|
blendMode: BlendMode.dstIn,
|
||||||
|
child: ChatWidget(
|
||||||
|
stream: stream,
|
||||||
|
showGoals: false,
|
||||||
|
showTopZappers: false,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
get onConnectionFailed => (s) {
|
||||||
|
developer.log(s, name: "onConnectionFailed");
|
||||||
|
_showError(context, t.live.error.connection_error);
|
||||||
|
};
|
||||||
|
|
||||||
|
@override
|
||||||
|
get onConnectionSuccess => () {
|
||||||
|
developer.log("Connected", name: "onConnectionSuccess");
|
||||||
|
setState(() {
|
||||||
|
_streaming = true;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
@override
|
||||||
|
get onDisconnection => () {
|
||||||
|
developer.log("Disconnected", name: "onDisconnection");
|
||||||
|
setState(() {
|
||||||
|
_streaming = false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
@override
|
||||||
|
get onError => (e) {
|
||||||
|
developer.log(e.toString(), name: "onError");
|
||||||
|
if (e is PlatformException) {
|
||||||
|
if (e.details is String &&
|
||||||
|
(e.details as String).contains("Connection error")) {
|
||||||
|
_showError(context, t.live.error.connection_error, error: e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
@override
|
||||||
|
get onVideoSizeChanged => (s) {
|
||||||
|
developer.log(s.toString(), name: "onVideoSizeChanged");
|
||||||
|
};
|
||||||
|
}
|
@ -38,6 +38,7 @@ class _NewAccountPage extends State<NewAccountPage> {
|
|||||||
pubKey: _privateKey.publicKey,
|
pubKey: _privateKey.publicKey,
|
||||||
name: _name.text,
|
name: _name.text,
|
||||||
picture: _avatar,
|
picture: _avatar,
|
||||||
|
lud16: "${_privateKey.publicKey}@zap.stream",
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ import 'package:zap_stream_flutter/widgets/button.dart';
|
|||||||
import 'package:zap_stream_flutter/widgets/button_follow.dart';
|
import 'package:zap_stream_flutter/widgets/button_follow.dart';
|
||||||
import 'package:zap_stream_flutter/widgets/header.dart';
|
import 'package:zap_stream_flutter/widgets/header.dart';
|
||||||
import 'package:zap_stream_flutter/widgets/nostr_text.dart';
|
import 'package:zap_stream_flutter/widgets/nostr_text.dart';
|
||||||
|
import 'package:zap_stream_flutter/widgets/notifications_button.dart';
|
||||||
import 'package:zap_stream_flutter/widgets/profile.dart';
|
import 'package:zap_stream_flutter/widgets/profile.dart';
|
||||||
import 'package:zap_stream_flutter/widgets/stream_grid.dart';
|
import 'package:zap_stream_flutter/widgets/stream_grid.dart';
|
||||||
|
|
||||||
@ -91,7 +92,14 @@ class ProfilePage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
if (!isMe) FollowButton(pubkey: hexPubkey),
|
if (!isMe)
|
||||||
|
Row(
|
||||||
|
spacing: 8,
|
||||||
|
children: [
|
||||||
|
FollowButton(pubkey: hexPubkey),
|
||||||
|
NotificationsButtonWidget(pubkey: hexPubkey),
|
||||||
|
],
|
||||||
|
),
|
||||||
Text(
|
Text(
|
||||||
t.profile.past_streams,
|
t.profile.past_streams,
|
||||||
style: TextStyle(fontSize: 20, fontWeight: FontWeight.w600),
|
style: TextStyle(fontSize: 20, fontWeight: FontWeight.w600),
|
||||||
|
@ -87,7 +87,7 @@ class _Inner extends State<SettingsWalletPage> with ProtocolListener {
|
|||||||
queryParameters: {
|
queryParameters: {
|
||||||
"relay": nwcRelays,
|
"relay": nwcRelays,
|
||||||
"name": "zap.stream",
|
"name": "zap.stream",
|
||||||
"request_methods": "pay_invoice",
|
"request_methods": "pay_invoice get_info get_balance",
|
||||||
"icon": "https://zap.stream/logo.png",
|
"icon": "https://zap.stream/logo.png",
|
||||||
"return_to": nwaHandlerUrl,
|
"return_to": nwaHandlerUrl,
|
||||||
},
|
},
|
||||||
@ -100,13 +100,7 @@ class _Inner extends State<SettingsWalletPage> with ProtocolListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_setWallet(WalletConfig? cfg) {
|
_setWallet(WalletConfig? cfg) {
|
||||||
loginData.value = LoginAccount(
|
loginData.configure(wallet: cfg);
|
||||||
type: loginData.value!.type,
|
|
||||||
pubkey: loginData.value!.pubkey,
|
|
||||||
privateKey: loginData.value!.privateKey,
|
|
||||||
signerRelays: loginData.value!.signerRelays,
|
|
||||||
wallet: cfg,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -174,13 +168,43 @@ class _Inner extends State<SettingsWalletPage> with ProtocolListener {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return BasicButton.text(
|
return FutureBuilder(
|
||||||
t.settings.wallet.disconnect_wallet,
|
future: () async {
|
||||||
onTap: (context) {
|
final wallet = await state!.getWallet();
|
||||||
_setWallet(null);
|
return await wallet?.getInfo();
|
||||||
if (context.mounted) {
|
}(),
|
||||||
context.pop();
|
builder: (context, state) {
|
||||||
}
|
return Column(
|
||||||
|
spacing: 8,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"Wallet: ${state.data?.name ?? ""}",
|
||||||
|
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 24),
|
||||||
|
),
|
||||||
|
Text.rich(
|
||||||
|
TextSpan(
|
||||||
|
style: TextStyle(fontWeight: FontWeight.w500),
|
||||||
|
children: [
|
||||||
|
TextSpan(text: t.settings.wallet.balance),
|
||||||
|
TextSpan(text: ": "),
|
||||||
|
TextSpan(
|
||||||
|
text: t.full_amount_sats(n: state.data?.balance ?? 0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
BasicButton.text(
|
||||||
|
t.settings.wallet.disconnect_wallet,
|
||||||
|
onTap: (context) {
|
||||||
|
_setWallet(null);
|
||||||
|
if (context.mounted) {
|
||||||
|
context.pop();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ import 'package:zap_stream_flutter/widgets/notifications_button.dart';
|
|||||||
import 'package:zap_stream_flutter/widgets/pill.dart';
|
import 'package:zap_stream_flutter/widgets/pill.dart';
|
||||||
import 'package:zap_stream_flutter/widgets/profile.dart';
|
import 'package:zap_stream_flutter/widgets/profile.dart';
|
||||||
import 'package:zap_stream_flutter/widgets/stream_info.dart';
|
import 'package:zap_stream_flutter/widgets/stream_info.dart';
|
||||||
import 'package:zap_stream_flutter/widgets/video_player.dart';
|
import 'package:zap_stream_flutter/widgets/video_player_main.dart';
|
||||||
import 'package:zap_stream_flutter/widgets/zap.dart';
|
import 'package:zap_stream_flutter/widgets/zap.dart';
|
||||||
|
|
||||||
class StreamPage extends StatefulWidget {
|
class StreamPage extends StatefulWidget {
|
||||||
@ -141,11 +141,11 @@ class _StreamPage extends State<StreamPage> with RouteAware {
|
|||||||
aspectRatio: 16 / 9,
|
aspectRatio: 16 / 9,
|
||||||
child:
|
child:
|
||||||
(stream.info.stream != null && !_offScreen)
|
(stream.info.stream != null && !_offScreen)
|
||||||
? VideoPlayerWidget(
|
? MainVideoPlayerWidget(
|
||||||
url: stream.info.stream!,
|
url: stream.info.stream!,
|
||||||
placeholder: stream.info.image,
|
placeholder: stream.info.image,
|
||||||
aspectRatio: 16 / 9,
|
|
||||||
isLive: true,
|
isLive: true,
|
||||||
|
title: stream.info.title,
|
||||||
)
|
)
|
||||||
: (stream.info.image?.isNotEmpty ?? false)
|
: (stream.info.image?.isNotEmpty ?? false)
|
||||||
? ProxyImg(url: stream.info.image)
|
? ProxyImg(url: stream.info.image)
|
||||||
@ -159,7 +159,7 @@ class _StreamPage extends State<StreamPage> with RouteAware {
|
|||||||
ProfileWidget.pubkey(
|
ProfileWidget.pubkey(
|
||||||
stream.info.host,
|
stream.info.host,
|
||||||
children: [
|
children: [
|
||||||
NotificationsButtonWidget(stream: widget.stream),
|
NotificationsButtonWidget(pubkey: widget.stream.info.host),
|
||||||
BasicButton(
|
BasicButton(
|
||||||
Row(
|
Row(
|
||||||
children: [Icon(Icons.bolt, size: 14), Text(t.zap.button_zap)],
|
children: [Icon(Icons.bolt, size: 14), Text(t.zap.button_zap)],
|
||||||
|
101
lib/player.dart
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
import 'package:audio_service/audio_service.dart';
|
||||||
|
import 'package:chewie/chewie.dart';
|
||||||
|
import 'package:video_player/video_player.dart';
|
||||||
|
import 'package:zap_stream_flutter/const.dart';
|
||||||
|
import 'package:zap_stream_flutter/imgproxy.dart';
|
||||||
|
|
||||||
|
class MainPlayer extends BaseAudioHandler {
|
||||||
|
VideoPlayerController? _controller;
|
||||||
|
ChewieController? _chewieController;
|
||||||
|
|
||||||
|
ChewieController? get chewie {
|
||||||
|
return _chewieController;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> play() async {
|
||||||
|
await _chewieController?.play();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> pause() async {
|
||||||
|
await _chewieController?.pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> stop() async {
|
||||||
|
await _chewieController?.pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadUrl(
|
||||||
|
String url, {
|
||||||
|
String? title,
|
||||||
|
bool? autoPlay,
|
||||||
|
double? aspectRatio,
|
||||||
|
bool? isLive,
|
||||||
|
String? placeholder,
|
||||||
|
String? artist,
|
||||||
|
}) {
|
||||||
|
if (_chewieController != null) {
|
||||||
|
_chewieController!.dispose();
|
||||||
|
_controller!.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
_controller = VideoPlayerController.networkUrl(
|
||||||
|
Uri.parse(url),
|
||||||
|
httpHeaders: Map.from({"user-agent": userAgent}),
|
||||||
|
videoPlayerOptions: VideoPlayerOptions(allowBackgroundPlayback: true),
|
||||||
|
);
|
||||||
|
_chewieController = ChewieController(
|
||||||
|
videoPlayerController: _controller!,
|
||||||
|
autoPlay: autoPlay ?? true,
|
||||||
|
aspectRatio: aspectRatio,
|
||||||
|
isLive: isLive ?? false,
|
||||||
|
autoInitialize: true,
|
||||||
|
allowedScreenSleep: false,
|
||||||
|
placeholder:
|
||||||
|
(placeholder?.isNotEmpty ?? false)
|
||||||
|
? ProxyImg(url: placeholder!)
|
||||||
|
: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
// insert media item
|
||||||
|
mediaItem.add(
|
||||||
|
MediaItem(
|
||||||
|
id: url.hashCode.toString(),
|
||||||
|
title: title ?? url,
|
||||||
|
artist: artist,
|
||||||
|
isLive: _chewieController!.isLive,
|
||||||
|
artUri:
|
||||||
|
(placeholder?.isNotEmpty ?? false) ? Uri.parse(placeholder!) : null,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
_chewieController!.videoPlayerController.addListener(updatePlayerState);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updatePlayerState() {
|
||||||
|
final isPlaying =
|
||||||
|
_chewieController?.videoPlayerController.value.isPlaying ?? false;
|
||||||
|
|
||||||
|
playbackState.add(
|
||||||
|
playbackState.value.copyWith(
|
||||||
|
controls: [
|
||||||
|
if (playbackState.value.playing)
|
||||||
|
MediaControl.pause
|
||||||
|
else
|
||||||
|
MediaControl.play,
|
||||||
|
MediaControl.stop,
|
||||||
|
],
|
||||||
|
playing: isPlaying,
|
||||||
|
processingState: switch (_chewieController
|
||||||
|
?.videoPlayerController
|
||||||
|
.value
|
||||||
|
.isInitialized) {
|
||||||
|
true => AudioProcessingState.ready,
|
||||||
|
false => AudioProcessingState.idle,
|
||||||
|
_ => AudioProcessingState.completed,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -375,14 +375,6 @@ Map<String, TopZaps> topZapReceiver(Iterable<ZapReceipt> zaps) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
String formatSecondsToHHMMSS(int seconds) {
|
|
||||||
int hours = seconds ~/ 3600;
|
|
||||||
int minutes = (seconds % 3600) ~/ 60;
|
|
||||||
int remainingSeconds = seconds % 60;
|
|
||||||
|
|
||||||
return '${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}:${remainingSeconds.toString().padLeft(2, '0')}';
|
|
||||||
}
|
|
||||||
|
|
||||||
String bech32ToHex(String bech32) {
|
String bech32ToHex(String bech32) {
|
||||||
final decoder = Bech32Decoder();
|
final decoder = Bech32Decoder();
|
||||||
final data = decoder.convert(bech32, 10_000);
|
final data = decoder.convert(bech32, 10_000);
|
||||||
|
@ -3,6 +3,7 @@ import 'package:zap_stream_flutter/theme.dart';
|
|||||||
|
|
||||||
class BasicButton extends StatelessWidget {
|
class BasicButton extends StatelessWidget {
|
||||||
final Widget? child;
|
final Widget? child;
|
||||||
|
final Color? color;
|
||||||
final BoxDecoration? decoration;
|
final BoxDecoration? decoration;
|
||||||
final EdgeInsetsGeometry? padding;
|
final EdgeInsetsGeometry? padding;
|
||||||
final EdgeInsetsGeometry? margin;
|
final EdgeInsetsGeometry? margin;
|
||||||
@ -12,6 +13,7 @@ class BasicButton extends StatelessWidget {
|
|||||||
const BasicButton(
|
const BasicButton(
|
||||||
this.child, {
|
this.child, {
|
||||||
super.key,
|
super.key,
|
||||||
|
this.color,
|
||||||
this.decoration,
|
this.decoration,
|
||||||
this.padding,
|
this.padding,
|
||||||
this.margin,
|
this.margin,
|
||||||
@ -21,6 +23,7 @@ class BasicButton extends StatelessWidget {
|
|||||||
|
|
||||||
static Widget text(
|
static Widget text(
|
||||||
String text, {
|
String text, {
|
||||||
|
Color? color,
|
||||||
BoxDecoration? decoration,
|
BoxDecoration? decoration,
|
||||||
EdgeInsetsGeometry? padding,
|
EdgeInsetsGeometry? padding,
|
||||||
EdgeInsetsGeometry? margin,
|
EdgeInsetsGeometry? margin,
|
||||||
@ -46,6 +49,7 @@ class BasicButton extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
disabled: disabled,
|
disabled: disabled,
|
||||||
|
color: color,
|
||||||
decoration: decoration,
|
decoration: decoration,
|
||||||
padding: padding ?? EdgeInsets.symmetric(vertical: 4, horizontal: 12),
|
padding: padding ?? EdgeInsets.symmetric(vertical: 4, horizontal: 12),
|
||||||
margin: margin,
|
margin: margin,
|
||||||
@ -55,12 +59,17 @@ class BasicButton extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
assert(
|
||||||
|
!(color != null && decoration != null),
|
||||||
|
"Cant set both 'color' and 'decoration'",
|
||||||
|
);
|
||||||
final defaultBr = BorderRadius.all(Radius.circular(100));
|
final defaultBr = BorderRadius.all(Radius.circular(100));
|
||||||
final inner = Container(
|
final inner = Container(
|
||||||
padding: padding,
|
padding: padding,
|
||||||
margin: margin,
|
margin: margin,
|
||||||
decoration:
|
decoration:
|
||||||
decoration ?? BoxDecoration(color: LAYER_2, borderRadius: defaultBr),
|
decoration ??
|
||||||
|
BoxDecoration(color: color ?? LAYER_2, borderRadius: defaultBr),
|
||||||
child: Center(child: child),
|
child: Center(child: child),
|
||||||
);
|
);
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
|
@ -18,8 +18,17 @@ import 'package:zap_stream_flutter/widgets/profile.dart';
|
|||||||
|
|
||||||
class ChatWidget extends StatelessWidget {
|
class ChatWidget extends StatelessWidget {
|
||||||
final StreamEvent stream;
|
final StreamEvent stream;
|
||||||
|
final bool? showGoals;
|
||||||
|
final bool? showTopZappers;
|
||||||
|
final bool? showRaids;
|
||||||
|
|
||||||
const ChatWidget({super.key, required this.stream});
|
const ChatWidget({
|
||||||
|
super.key,
|
||||||
|
required this.stream,
|
||||||
|
this.showGoals,
|
||||||
|
this.showTopZappers,
|
||||||
|
this.showRaids,
|
||||||
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -31,7 +40,8 @@ class ChatWidget extends StatelessWidget {
|
|||||||
|
|
||||||
var filters = [
|
var filters = [
|
||||||
Filter(kinds: [1311, 9735], limit: 200, aTags: [stream.aTag]),
|
Filter(kinds: [1311, 9735], limit: 200, aTags: [stream.aTag]),
|
||||||
Filter(kinds: [1312, 1313], limit: 200, aTags: [stream.aTag]),
|
if (showRaids ?? true)
|
||||||
|
Filter(kinds: [1312, 1313], limit: 200, aTags: [stream.aTag]),
|
||||||
Filter(kinds: [Nip51List.kMute], authors: moderators),
|
Filter(kinds: [Nip51List.kMute], authors: moderators),
|
||||||
Filter(kinds: [1314], authors: moderators),
|
Filter(kinds: [1314], authors: moderators),
|
||||||
Filter(kinds: [8], authors: [stream.info.host]),
|
Filter(kinds: [8], authors: [stream.info.host]),
|
||||||
@ -108,10 +118,13 @@ class ChatWidget extends StatelessWidget {
|
|||||||
spacing: 8,
|
spacing: 8,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
if (zaps.isNotEmpty) _TopZappersWidget(events: zaps),
|
if (zaps.isNotEmpty && (showTopZappers ?? true))
|
||||||
if (stream.info.goal != null) GoalWidget.id(stream.info.goal!),
|
_TopZappersWidget(events: zaps),
|
||||||
|
if (stream.info.goal != null && (showGoals ?? true))
|
||||||
|
GoalWidget.id(stream.info.goal!),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
|
padding: EdgeInsets.only(top: 80),
|
||||||
reverse: true,
|
reverse: true,
|
||||||
itemCount: filteredChat.length,
|
itemCount: filteredChat.length,
|
||||||
itemBuilder: (ctx, idx) {
|
itemBuilder: (ctx, idx) {
|
||||||
|
@ -24,6 +24,7 @@ class __WriteMessageWidget extends State<WriteMessageWidget> {
|
|||||||
OverlayEntry? _entry;
|
OverlayEntry? _entry;
|
||||||
late FocusNode _focusNode;
|
late FocusNode _focusNode;
|
||||||
List<List<String>> _tags = List.empty(growable: true);
|
List<List<String>> _tags = List.empty(growable: true);
|
||||||
|
final GlobalKey _positioned = GlobalKey();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -69,7 +70,8 @@ class __WriteMessageWidget extends State<WriteMessageWidget> {
|
|||||||
_entry = null;
|
_entry = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final pos = context.findRenderObject() as RenderBox?;
|
final pos = _positioned.currentContext!.findRenderObject() as RenderBox?;
|
||||||
|
final posGlobal = pos?.localToGlobal(Offset.zero);
|
||||||
_entry = OverlayEntry(
|
_entry = OverlayEntry(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return ValueListenableBuilder(
|
return ValueListenableBuilder(
|
||||||
@ -85,12 +87,13 @@ class __WriteMessageWidget extends State<WriteMessageWidget> {
|
|||||||
if (search.isEmpty) {
|
if (search.isEmpty) {
|
||||||
return SizedBox();
|
return SizedBox();
|
||||||
}
|
}
|
||||||
|
final mq = MediaQuery.of(context);
|
||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
Positioned(
|
Positioned(
|
||||||
left: 0,
|
left: posGlobal?.dx,
|
||||||
bottom: (pos?.paintBounds.bottom ?? 0),
|
bottom: mq.size.height - (posGlobal?.dy ?? 0) - 30,
|
||||||
width: MediaQuery.of(context).size.width,
|
width: pos?.size.width,
|
||||||
child: Container(
|
child: Container(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 4, vertical: 8),
|
padding: EdgeInsets.symmetric(horizontal: 4, vertical: 8),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@ -162,15 +165,17 @@ class __WriteMessageWidget extends State<WriteMessageWidget> {
|
|||||||
_entry = null;
|
_entry = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final pos = context.findRenderObject() as RenderBox?;
|
final pos = _positioned.currentContext!.findRenderObject() as RenderBox?;
|
||||||
|
final posGlobal = pos?.localToGlobal(Offset.zero);
|
||||||
_entry = OverlayEntry(
|
_entry = OverlayEntry(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
|
final mq = MediaQuery.of(context);
|
||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
Positioned(
|
Positioned(
|
||||||
left: 0,
|
left: posGlobal?.dx,
|
||||||
bottom: (pos?.paintBounds.bottom ?? 0),
|
bottom: mq.size.height - (posGlobal?.dy ?? 0) - 30,
|
||||||
width: MediaQuery.of(context).size.width,
|
width: pos?.size.width,
|
||||||
child: Container(
|
child: Container(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 4, vertical: 8),
|
padding: EdgeInsets.symmetric(horizontal: 4, vertical: 8),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@ -239,9 +244,13 @@ class __WriteMessageWidget extends State<WriteMessageWidget> {
|
|||||||
final isLogin = ndk.accounts.isLoggedIn;
|
final isLogin = ndk.accounts.isLoggedIn;
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
|
key: _positioned,
|
||||||
margin: EdgeInsets.fromLTRB(4, 8, 4, 0),
|
margin: EdgeInsets.fromLTRB(4, 8, 4, 0),
|
||||||
padding: EdgeInsets.symmetric(horizontal: 8),
|
padding: EdgeInsets.symmetric(horizontal: 8),
|
||||||
decoration: BoxDecoration(color: LAYER_2, borderRadius: DEFAULT_BR),
|
decoration: BoxDecoration(
|
||||||
|
color: LAYER_2.withAlpha(200),
|
||||||
|
borderRadius: DEFAULT_BR,
|
||||||
|
),
|
||||||
child:
|
child:
|
||||||
canSign
|
canSign
|
||||||
? Row(
|
? Row(
|
||||||
|
@ -27,7 +27,19 @@ class ChatZapWidget extends StatelessWidget {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
_zapperRowZap(context, parsed),
|
_zapperRowZap(context, parsed),
|
||||||
if (parsed.comment?.isNotEmpty ?? false) NoteText(event: zap),
|
if (parsed.comment?.isNotEmpty ?? false)
|
||||||
|
RichText(
|
||||||
|
text: TextSpan(
|
||||||
|
children: textToSpans(
|
||||||
|
context,
|
||||||
|
parsed.comment ?? "",
|
||||||
|
[],
|
||||||
|
parsed.sender ?? "",
|
||||||
|
showEmbeds: false,
|
||||||
|
embedMedia: false,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -6,6 +6,7 @@ import 'package:zap_stream_flutter/i18n/strings.g.dart';
|
|||||||
import 'package:zap_stream_flutter/const.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.dart';
|
import 'package:zap_stream_flutter/widgets/avatar.dart';
|
||||||
|
import 'package:zap_stream_flutter/widgets/button.dart';
|
||||||
|
|
||||||
class HeaderWidget extends StatefulWidget {
|
class HeaderWidget extends StatefulWidget {
|
||||||
const HeaderWidget({super.key});
|
const HeaderWidget({super.key});
|
||||||
@ -39,12 +40,36 @@ class LoginButtonWidget extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
if (ndk.accounts.isLoggedIn) {
|
if (ndk.accounts.isLoggedIn) {
|
||||||
return GestureDetector(
|
return Row(
|
||||||
onTap:
|
spacing: 8,
|
||||||
() => context.go(
|
children: [
|
||||||
"/p/${Nip19.encodePubKey(ndk.accounts.getPublicKey()!)}",
|
BasicButton(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 10),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(color: WARNING),
|
||||||
|
borderRadius: DEFAULT_BR,
|
||||||
),
|
),
|
||||||
child: AvatarWidget.pubkey(ndk.accounts.getPublicKey()!),
|
Row(
|
||||||
|
spacing: 4,
|
||||||
|
children: [
|
||||||
|
Icon(Icons.videocam),
|
||||||
|
Text(
|
||||||
|
t.live.start,
|
||||||
|
style: TextStyle(fontWeight: FontWeight.bold),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
onTap: (context) => context.push("/live"),
|
||||||
|
),
|
||||||
|
|
||||||
|
GestureDetector(
|
||||||
|
onTap:
|
||||||
|
() => context.push(
|
||||||
|
"/p/${Nip19.encodePubKey(ndk.accounts.getPublicKey()!)}",
|
||||||
|
),
|
||||||
|
child: AvatarWidget.pubkey(ndk.accounts.getPublicKey()!),
|
||||||
|
),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
@ -59,10 +84,7 @@ class LoginButtonWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
spacing: 8,
|
spacing: 8,
|
||||||
children: [
|
children: [Text(t.button.login), Icon(Icons.login, size: 16)],
|
||||||
Text(t.button.login),
|
|
||||||
Icon(Icons.login, size: 16),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'package:duration/duration.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.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/widgets/pill.dart';
|
import 'package:zap_stream_flutter/widgets/pill.dart';
|
||||||
|
|
||||||
class LiveTimerWidget extends StatefulWidget {
|
class LiveTimerWidget extends StatefulWidget {
|
||||||
@ -37,12 +37,13 @@ class _LiveTimerWidget extends State<LiveTimerWidget> {
|
|||||||
return PillWidget(
|
return PillWidget(
|
||||||
color: LAYER_2,
|
color: LAYER_2,
|
||||||
child: Text(
|
child: Text(
|
||||||
formatSecondsToHHMMSS(
|
Duration(
|
||||||
((DateTime.now().millisecondsSinceEpoch -
|
seconds:
|
||||||
widget.started.millisecondsSinceEpoch) /
|
((DateTime.now().millisecondsSinceEpoch -
|
||||||
1000)
|
widget.started.millisecondsSinceEpoch) /
|
||||||
.toInt(),
|
1000)
|
||||||
),
|
.toInt(),
|
||||||
|
).pretty(abbreviated: true),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|