42 Commits

Author SHA1 Message Date
97a6708ae2 chore: bump version 2025-06-03 14:27:20 +01:00
6bb19ce1f5 feat: protrait video style 2025-06-03 13:54:56 +01:00
f15e693a54 fix: update default & current stream info 2025-06-03 10:29:40 +01:00
8605761dff feat: improve variant display and stream editing
closes #45
2025-06-03 10:25:26 +01:00
f553ecdab3 fix: notifications icon 2025-05-31 12:02:01 +01:00
b7764d82c9 fix: zap comments missing 2025-05-30 17:08:00 +01:00
1575c7dd09 fix: ios 2025-05-30 14:56:18 +01:00
3914768eeb chore: update translations 2025-05-30 14:17:39 +01:00
edfb5bb80d chore: bump version 2025-05-30 14:06:58 +01:00
33ad784e87 fix: missing stream hides live page 2025-05-30 14:03:28 +01:00
0422341bf8 chore: bump flutter version 2025-05-30 13:59:46 +01:00
8af62e0b32 chore: bump ndk 2025-05-30 13:53:40 +01:00
cd6c50f9bd feat: add notifications button to profile page 2025-05-30 13:51:07 +01:00
428771462d feat: live streaming
closes #43
2025-05-30 13:48:37 +01:00
917147605b feat: default ln address to zap.stream for new accounts 2025-05-29 14:31:13 +01:00
8e3a4cbd41 feat: wallet balance
closes #42
2025-05-29 12:32:10 +01:00
c66127cac2 feat: improve notifications 2025-05-29 11:03:15 +01:00
ab9fdd6b71 chore: bump version 2025-05-29 09:51:00 +01:00
99c163a51a fix: allow background player option 2025-05-28 16:40:34 +01:00
fb4821ffdd feat: background playback (wip)
https://github.com/ryanheise/audio_service/issues/1124
2025-05-28 16:28:24 +01:00
5789d9a7a1 chore: update translations 2025-05-28 13:51:47 +01:00
b854962b07 fix: viewers formatting 2025-05-28 13:24:52 +01:00
0295d49077 refactor: cleanup notifications bbutton signer requests 2025-05-28 13:17:45 +01:00
74c3ad9b9c fix: dont make notepush requests unless notifications is authorized 2025-05-28 12:49:51 +01:00
8bd9ff2a4c fix: scrolling stream cards on stream info modal 2025-05-28 12:41:15 +01:00
8516f2b3c1 refactor: move reactions to chat modal
fix: custom emoji reactions
2025-05-28 12:35:53 +01:00
344f2d31fc fix: mention overlay unfocus 2025-05-28 12:21:11 +01:00
c6168ec094 feat: preview media in modal
closes #38
2025-05-28 12:17:44 +01:00
2ec17c6c41 refactor: minor profile loader improvement 2025-05-28 11:40:53 +01:00
c6b76bc64d fix: close zap modal after zap
closes #37
2025-05-28 11:16:49 +01:00
d3a8c41f93 chore: bump version 2025-05-27 15:19:19 +01:00
04967910fa chore: ios build 2025-05-27 15:13:41 +01:00
9d2bc7456f fix: bundle id 2025-05-27 13:59:43 +01:00
cc53762e4b chore: build ios 2025-05-27 13:59:05 +01:00
0a474a1ca7 fix: name overflow on stream page 2025-05-27 13:53:33 +01:00
e9062f0265 feat: custom emoji picker
closes #14
2025-05-27 12:22:28 +01:00
8dae9a97f2 fix: render zap message as note text 2025-05-27 10:10:48 +01:00
a64cacb13c chore: bump ndk 2025-05-27 10:09:43 +01:00
19d50f2947 feat: 1-tap connection 2025-05-26 16:40:18 +01:00
f36f02e95a fix: unfocus tap outside 2025-05-26 13:58:07 +01:00
484bf67951 feat: disconnect wallet 2025-05-26 13:51:15 +01:00
47bed26df6 feat: simple NWC flow
closes #19
2025-05-26 13:28:00 +01:00
152 changed files with 8735 additions and 6258 deletions

View File

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

View File

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

View File

@ -1,5 +1,4 @@
import com.android.build.api.dsl.ApkSigningConfig
import com.android.build.api.dsl.SigningConfig
import org.jetbrains.kotlin.gradle.targets.js.toHex
import java.io.FileInputStream
import java.util.Base64
@ -8,11 +7,9 @@ import java.util.Properties
plugins {
id("com.android.application")
// START: FlutterFire Configuration
id("com.google.gms.google-services")
// END: FlutterFire Configuration
id("kotlin-android")
id("dev.flutter.flutter-gradle-plugin")
id("com.google.gms.google-services")
}
fun getKeystoreFile(base64String: String?, hash: String, fileName: String): File {

View File

@ -3,6 +3,5 @@
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>

View File

@ -1,46 +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
android:label="zap.stream"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
android:icon="@mipmap/ic_launcher"
android:label="zap.stream">
<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:hardwareAccelerated="true"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
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
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="zap.stream" />
<data android:host="zap.stream" />
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="zswc" />
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<service
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
android:name="flutterEmbedding"
android:value="2" />
</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:
https://developer.android.com/training/package-visibility and
@ -49,10 +82,11 @@
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<data android:mimeType="text/plain"/>
<action android:name="android.intent.action.PROCESS_TEXT" />
<data android:mimeType="text/plain" />
</intent>
</queries>
<meta-data
android:name="firebase_messaging_auto_init_enabled"
android:value="false" />

View File

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
assets/logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

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

View File

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

View File

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

43
ios/Podfile Normal file
View File

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

245
ios/Podfile.lock Normal file
View File

@ -0,0 +1,245 @@
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):
- Flutter
- Firebase/CoreOnly (11.10.0):
- FirebaseCore (~> 11.10.0)
- Firebase/Messaging (11.10.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 11.10.0)
- firebase_core (3.13.1):
- Firebase/CoreOnly (= 11.10.0)
- Flutter
- firebase_messaging (15.2.6):
- Firebase/Messaging (= 11.10.0)
- firebase_core
- Flutter
- FirebaseCore (11.10.0):
- FirebaseCoreInternal (~> 11.10.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/Logger (~> 8.0)
- FirebaseCoreInternal (11.10.0):
- "GoogleUtilities/NSData+zlib (~> 8.0)"
- FirebaseInstallations (11.10.0):
- FirebaseCore (~> 11.10.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- PromisesObjC (~> 2.4)
- FirebaseMessaging (11.10.0):
- FirebaseCore (~> 11.10.0)
- FirebaseInstallations (~> 11.0)
- GoogleDataTransport (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/Reachability (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- nanopb (~> 3.30910.0)
- Flutter (1.0.0)
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_secure_storage (6.0.0):
- Flutter
- GoogleDataTransport (10.1.0):
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
- GoogleUtilities/AppDelegateSwizzler (8.1.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Privacy
- GoogleUtilities/Environment (8.1.0):
- GoogleUtilities/Privacy
- GoogleUtilities/Logger (8.1.0):
- GoogleUtilities/Environment
- GoogleUtilities/Privacy
- GoogleUtilities/Network (8.1.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Privacy
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (8.1.0)":
- GoogleUtilities/Privacy
- GoogleUtilities/Privacy (8.1.0)
- GoogleUtilities/Reachability (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- GoogleUtilities/UserDefaults (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- HaishinKit (1.7.3):
- Logboard (~> 2.4.1)
- image_picker_ios (0.0.1):
- Flutter
- Logboard (2.4.2)
- nanopb (3.30910.0):
- nanopb/decode (= 3.30910.0)
- nanopb/encode (= 3.30910.0)
- nanopb/decode (3.30910.0)
- nanopb/encode (3.30910.0)
- native_device_orientation (0.0.1):
- Flutter
- ObjectBox (4.3.0)
- objectbox_flutter_libs (0.0.1):
- Flutter
- ObjectBox (= 4.3.0)
- package_info_plus (0.4.5):
- Flutter
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- PromisesObjC (2.4.0)
- protocol_handler_ios (0.0.1):
- Flutter
- rust_lib_ndk (0.0.1):
- Flutter
- share_plus (0.0.1):
- Flutter
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite_darwin (0.0.4):
- Flutter
- FlutterMacOS
- url_launcher_ios (0.0.1):
- Flutter
- video_player_avfoundation (0.0.1):
- Flutter
- FlutterMacOS
- wakelock_plus (0.0.1):
- Flutter
DEPENDENCIES:
- 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`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- Flutter (from `Flutter`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- native_device_orientation (from `.symlinks/plugins/native_device_orientation/ios`)
- objectbox_flutter_libs (from `.symlinks/plugins/objectbox_flutter_libs/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- protocol_handler_ios (from `.symlinks/plugins/protocol_handler_ios/ios`)
- rust_lib_ndk (from `.symlinks/plugins/rust_lib_ndk/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`)
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
SPEC REPOS:
trunk:
- ApiVideoLiveStream
- Firebase
- FirebaseCore
- FirebaseCoreInternal
- FirebaseInstallations
- FirebaseMessaging
- GoogleDataTransport
- GoogleUtilities
- HaishinKit
- Logboard
- nanopb
- ObjectBox
- PromisesObjC
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:
:path: ".symlinks/plugins/emoji_picker_flutter/ios"
firebase_core:
:path: ".symlinks/plugins/firebase_core/ios"
firebase_messaging:
:path: ".symlinks/plugins/firebase_messaging/ios"
Flutter:
:path: Flutter
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_secure_storage:
:path: ".symlinks/plugins/flutter_secure_storage/ios"
image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios"
native_device_orientation:
:path: ".symlinks/plugins/native_device_orientation/ios"
objectbox_flutter_libs:
:path: ".symlinks/plugins/objectbox_flutter_libs/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
protocol_handler_ios:
:path: ".symlinks/plugins/protocol_handler_ios/ios"
rust_lib_ndk:
:path: ".symlinks/plugins/rust_lib_ndk/ios"
share_plus:
:path: ".symlinks/plugins/share_plus/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqflite_darwin:
:path: ".symlinks/plugins/sqflite_darwin/darwin"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
video_player_avfoundation:
:path: ".symlinks/plugins/video_player_avfoundation/darwin"
wakelock_plus:
:path: ".symlinks/plugins/wakelock_plus/ios"
SPEC CHECKSUMS:
apivideo_live_stream: caab45dd35fb3b140d423c099d0f6672378e7abe
ApiVideoLiveStream: 8f9dce7f6d15d5e4bb3c7a25e406bf2a36337a5a
audio_service: aa99a6ba2ae7565996015322b0bb024e1d25c6fd
audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0
emoji_picker_flutter: ece213fc274bdddefb77d502d33080dc54e616cc
Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2
firebase_core: ba71b44041571da878cb624ce0d80250bcbe58ad
firebase_messaging: 13129fe2ca166d1ed2d095062d76cee88943d067
FirebaseCore: 8344daef5e2661eb004b177488d6f9f0f24251b7
FirebaseCoreInternal: ef4505d2afb1d0ebbc33162cb3795382904b5679
FirebaseInstallations: 9980995bdd06ec8081dfb6ab364162bdd64245c3
FirebaseMessaging: 2b9f56aa4ed286e1f0ce2ee1d413aabb8f9f5cb9
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_local_notifications: a5a732f069baa862e728d839dd2ebb904737effb
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
HaishinKit: 326e27c4d06427ba53bffc68e516a92033293051
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
Logboard: 759d82599c439945d430d5a0958455b5a1974a0c
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
native_device_orientation: d6a4dc6887cd8a5ce1049962367aec60139ea0f1
ObjectBox: 7760fa9072adcffe102a6adf4646ca84ba70ab6b
objectbox_flutter_libs: 4014e38f57250b074b99893ae84579aba8f02876
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
protocol_handler_ios: 59f23ee71f3ec602d67902ca7f669a80957888d5
rust_lib_ndk: bf974d06ca7805c0729bf19e400ba9d8a1d67e22
share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b
wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
PODFILE CHECKSUM: 4305caec6b40dde0ae97be1573c53de1882a07e5
COCOAPODS: 1.16.2

View File

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

View File

@ -26,6 +26,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
@ -54,6 +55,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 784 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

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

View File

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

262
lib/api.dart Normal file
View File

@ -0,0 +1,262 @@
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? id,
String? title,
String? summary,
String? image,
String? contentWarning,
String? goal,
List<String>? tags,
}) async {
final url = "$base/event";
await _sendPatchRequest(
url,
body: {
"id": id,
"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();
}
}

View File

@ -6,11 +6,14 @@ import 'package:zap_stream_flutter/i18n/strings.g.dart';
import 'package:zap_stream_flutter/pages/category.dart';
import 'package:zap_stream_flutter/pages/hashtag.dart';
import 'package:zap_stream_flutter/pages/home.dart';
import 'package:zap_stream_flutter/pages/live.dart';
import 'package:zap_stream_flutter/pages/login.dart';
import 'package:zap_stream_flutter/pages/login_input.dart';
import 'package:zap_stream_flutter/pages/new_account.dart';
import 'package:zap_stream_flutter/pages/profile.dart';
import 'package:zap_stream_flutter/pages/settings.dart';
import 'package:zap_stream_flutter/pages/settings_profile.dart';
import 'package:zap_stream_flutter/pages/settings_wallet.dart';
import 'package:zap_stream_flutter/pages/stream.dart';
import 'package:zap_stream_flutter/theme.dart';
import 'package:zap_stream_flutter/utils.dart';
@ -23,10 +26,21 @@ void runZapStream() {
supportedLocales: AppLocaleUtils.supportedLocales,
localizationsDelegates: GlobalMaterialLocalizations.delegates,
theme: ThemeData.localize(
ThemeData(colorScheme: ColorScheme.dark(), highlightColor: PRIMARY_1),
ThemeData(
colorScheme: ColorScheme.dark(),
highlightColor: PRIMARY_1,
useMaterial3: true,
),
TextTheme(),
),
routerConfig: GoRouter(
redirect: (context, state) {
// redirect back to the wallet settings page
if (state.uri.scheme == "zswc") {
return "/settings/wallet";
}
return null;
},
routes: [
ShellRoute(
observers: [routeObserver],
@ -102,23 +116,30 @@ void runZapStream() {
},
),
ShellRoute(
observers: [routeObserver],
builder:
(context, state, child) =>
Column(children: [HeaderWidget(), child]),
routes: [
GoRoute(
path: "/settings",
builder: (context, state) => SizedBox(),
builder: (context, state) => SettingsPage(),
routes: [
GoRoute(
path: "profile",
builder: (context, state) => SettingsProfilePage(),
),
GoRoute(
path: "wallet",
builder: (context, state) => SettingsWalletPage(),
),
],
),
],
),
GoRoute(
path: "/live",
builder: (context, state) => LivePage(),
),
GoRoute(
path: "/:id",
redirect: (context, state) {

View File

@ -1,6 +1,7 @@
import 'package:amberflutter/amberflutter.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:ndk/ndk.dart';
import 'package:ndk_amber/ndk_amber.dart';
@ -17,7 +18,7 @@ class NoVerify extends EventVerifier {
final ndkCache = DbObjectBox();
final eventVerifier = kDebugMode ? NoVerify() : RustEventVerifier();
var ndk = Ndk(
final ndk = Ndk(
NdkConfig(
eventVerifier: eventVerifier,
cache: ndkCache,
@ -35,6 +36,8 @@ const defaultRelays = [
"wss://relay.fountain.fm",
];
const searchRelays = ["wss://relay.nostr.band", "wss://search.nos.today"];
const nwcRelays = ["wss://relay.getalby.com/v1"];
final apiUrl = dotenv.env["API_URL"] ?? "https://api.zap.stream/api/nostr";
final loginData = LoginData();
final RouteObserver<ModalRoute<void>> routeObserver =

View File

@ -59,11 +59,11 @@ class DefaultFirebaseOptions {
static const FirebaseOptions ios = FirebaseOptions(
apiKey: 'AIzaSyByygErXpki6Q7NXOXTHbRgg3-Tw-KCVO0',
appId: '1:953923151748:ios:30ec9a230e55fe139e9fd1',
appId: '1:953923151748:ios:aef9c54f556258d39e9fd1',
messagingSenderId: '953923151748',
projectId: 'nostrlabs',
storageBucket: 'nostrlabs.firebasestorage.app',
iosBundleId: 'io.nostrlabs.zapStreamFlutter',
iosBundleId: 'io.nostrlabs.zap-stream',
);
static const FirebaseOptions macos = FirebaseOptions(
@ -83,4 +83,5 @@ class DefaultFirebaseOptions {
authDomain: 'nostrlabs.firebaseapp.com',
storageBucket: 'nostrlabs.firebasestorage.app',
);
}
}

View File

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

View File

@ -3,24 +3,21 @@
/// Source: lib/i18n
/// To regenerate, run: `dart run slang`
///
/// Locales: 28
/// Strings: 1764 (63 per locale)
/// Locales: 22
/// Strings: 2011 (91 per locale)
///
/// Built on 2025-05-20 at 16:08 UTC
/// Built on 2025-06-03 at 10:11 UTC
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'package:slang_flutter/slang_flutter.dart';
export 'package:slang_flutter/slang_flutter.dart';
import 'strings_af.g.dart' deferred as l_af;
import 'strings_ar.g.dart' deferred as l_ar;
import 'strings_ca.g.dart' deferred as l_ca;
import 'strings_cs.g.dart' deferred as l_cs;
import 'strings_da.g.dart' deferred as l_da;
import 'strings_de.g.dart' deferred as l_de;
@ -28,22 +25,18 @@ import 'strings_el.g.dart' deferred as l_el;
import 'strings_es.g.dart' deferred as l_es;
import 'strings_fi.g.dart' deferred as l_fi;
import 'strings_fr.g.dart' deferred as l_fr;
import 'strings_he.g.dart' deferred as l_he;
import 'strings_hu.g.dart' deferred as l_hu;
import 'strings_it.g.dart' deferred as l_it;
import 'strings_ja.g.dart' deferred as l_ja;
import 'strings_ko.g.dart' deferred as l_ko;
import 'strings_nl.g.dart' deferred as l_nl;
import 'strings_no.g.dart' deferred as l_no;
import 'strings_pl.g.dart' deferred as l_pl;
import 'strings_pt.g.dart' deferred as l_pt;
import 'strings_ro.g.dart' deferred as l_ro;
import 'strings_ru.g.dart' deferred as l_ru;
import 'strings_sr.g.dart' deferred as l_sr;
import 'strings_sv.g.dart' deferred as l_sv;
import 'strings_tr.g.dart' deferred as l_tr;
import 'strings_uk.g.dart' deferred as l_uk;
import 'strings_vi.g.dart' deferred as l_vi;
import 'strings_zh.g.dart' deferred as l_zh;
part 'strings_en.g.dart';
@ -55,9 +48,7 @@ part 'strings_en.g.dart';
/// - if (LocaleSettings.currentLocale == AppLocale.en) // locale check
enum AppLocale with BaseAppLocale<AppLocale, Translations> {
en(languageCode: 'en'),
af(languageCode: 'af'),
ar(languageCode: 'ar'),
ca(languageCode: 'ca'),
cs(languageCode: 'cs'),
da(languageCode: 'da'),
de(languageCode: 'de'),
@ -65,22 +56,18 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
es(languageCode: 'es'),
fi(languageCode: 'fi'),
fr(languageCode: 'fr'),
he(languageCode: 'he'),
hu(languageCode: 'hu'),
it(languageCode: 'it'),
ja(languageCode: 'ja'),
ko(languageCode: 'ko'),
nl(languageCode: 'nl'),
no(languageCode: 'no'),
pl(languageCode: 'pl'),
pt(languageCode: 'pt'),
ro(languageCode: 'ro'),
ru(languageCode: 'ru'),
sr(languageCode: 'sr'),
sv(languageCode: 'sv'),
tr(languageCode: 'tr'),
uk(languageCode: 'uk'),
vi(languageCode: 'vi'),
zh(languageCode: 'zh');
const AppLocale({
@ -106,13 +93,6 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.af:
await l_af.loadLibrary();
return l_af.TranslationsAf(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ar:
await l_ar.loadLibrary();
return l_ar.TranslationsAr(
@ -120,13 +100,6 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ca:
await l_ca.loadLibrary();
return l_ca.TranslationsCa(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.cs:
await l_cs.loadLibrary();
return l_cs.TranslationsCs(
@ -176,13 +149,6 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.he:
await l_he.loadLibrary();
return l_he.TranslationsHe(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.hu:
await l_hu.loadLibrary();
return l_hu.TranslationsHu(
@ -218,13 +184,6 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.no:
await l_no.loadLibrary();
return l_no.TranslationsNo(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.pl:
await l_pl.loadLibrary();
return l_pl.TranslationsPl(
@ -253,13 +212,6 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.sr:
await l_sr.loadLibrary();
return l_sr.TranslationsSr(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.sv:
await l_sv.loadLibrary();
return l_sv.TranslationsSv(
@ -281,13 +233,6 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.vi:
await l_vi.loadLibrary();
return l_vi.TranslationsVi(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.zh:
await l_zh.loadLibrary();
return l_zh.TranslationsZh(
@ -311,24 +256,12 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.af:
return l_af.TranslationsAf(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ar:
return l_ar.TranslationsAr(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.ca:
return l_ca.TranslationsCa(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.cs:
return l_cs.TranslationsCs(
overrides: overrides,
@ -371,12 +304,6 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.he:
return l_he.TranslationsHe(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.hu:
return l_hu.TranslationsHu(
overrides: overrides,
@ -407,12 +334,6 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.no:
return l_no.TranslationsNo(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.pl:
return l_pl.TranslationsPl(
overrides: overrides,
@ -437,12 +358,6 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.sr:
return l_sr.TranslationsSr(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.sv:
return l_sv.TranslationsSv(
overrides: overrides,
@ -461,12 +376,6 @@ enum AppLocale with BaseAppLocale<AppLocale, Translations> {
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.vi:
return l_vi.TranslationsVi(
overrides: overrides,
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
);
case AppLocale.zh:
return l_zh.TranslationsZh(
overrides: overrides,

View File

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

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsAr implements Translations {
class TranslationsAr extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsAr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsAr implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsAr implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsAr _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsAr implements Translations {
/// مستخدم مجهول
@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,
one: '1 مشاهد',
other: '${n} المشاهدون',
other: '{n:decimalPattern} المشاهدين',
);
@override late final _TranslationsStreamAr stream = _TranslationsStreamAr._(_root);
@ -66,36 +69,39 @@ class TranslationsAr implements Translations {
@override late final _TranslationsZapAr zap = _TranslationsZapAr._(_root);
@override late final _TranslationsProfileAr profile = _TranslationsProfileAr._(_root);
@override late final _TranslationsSettingsAr settings = _TranslationsSettingsAr._(_root);
@override late final _TranslationsLoginAr login = _TranslationsLoginAr._(_root);
@override late final _TranslationsLiveAr live = _TranslationsLiveAr._(_root);
}
// Path: stream
class _TranslationsStreamAr implements TranslationsStreamEn {
_TranslationsStreamAr._(this._root);
class _TranslationsStreamAr extends TranslationsStreamEn {
_TranslationsStreamAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusAr status = _TranslationsStreamStatusAr._(_root);
@override String started({ required Object timestamp}) => 'بدأ ${timestamp}';
@override String started({required Object timestamp}) => 'بدأ ${timestamp}';
@override String notification({required Object name}) => '${name} بدأ البث المباشر!';
@override late final _TranslationsStreamChatAr chat = _TranslationsStreamChatAr._(_root);
}
// Path: goal
class _TranslationsGoalAr implements TranslationsGoalEn {
_TranslationsGoalAr._(this._root);
class _TranslationsGoalAr extends TranslationsGoalEn {
_TranslationsGoalAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'الهدف: ${amount}';
@override String remaining({ required Object amount}) => 'المتبقي: ${amount}';
@override String title({required Object amount}) => 'الهدف: ${amount}';
@override String remaining({required Object amount}) => 'المتبقي: ${amount}';
@override String get complete => 'مكتمل';
}
// Path: button
class _TranslationsButtonAr implements TranslationsButtonEn {
_TranslationsButtonAr._(this._root);
class _TranslationsButtonAr extends TranslationsButtonEn {
_TranslationsButtonAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonAr implements TranslationsButtonEn {
@override String get unmute => 'رفع الكتم';
@override String get share => 'مشاركة';
@override String get save => 'حفظ';
@override String get connect => 'الاتصال';
@override String get settings => 'الإعدادات';
}
// Path: embed
class _TranslationsEmbedAr implements TranslationsEmbedEn {
_TranslationsEmbedAr._(this._root);
class _TranslationsEmbedAr extends TranslationsEmbedEn {
_TranslationsEmbedAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'مقال بقلم ${name}';
@override String note_by({ required Object name}) => 'ملاحظة من ${name}';
@override String live_stream_by({ required Object name}) => 'بث مباشر من ${name}';
@override String article_by({required Object name}) => 'مقال بقلم ${name}';
@override String note_by({required Object name}) => 'ملاحظة من ${name}';
@override String live_stream_by({required Object name}) => 'بث مباشر من ${name}';
}
// Path: stream_list
class _TranslationsStreamListAr implements TranslationsStreamListEn {
_TranslationsStreamListAr._(this._root);
class _TranslationsStreamListAr extends TranslationsStreamListEn {
_TranslationsStreamListAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListAr implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapAr implements TranslationsZapEn {
_TranslationsZapAr._(this._root);
class _TranslationsZapAr extends TranslationsZapEn {
_TranslationsZapAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'زاب ${name}';
@override String title({required Object name}) => 'زاب ${name}';
@override String get custom_amount => 'المبلغ المخصص';
@override String get confirm => 'تأكيد';
@override String get comment => 'تعليق';
@override String button_zap_ready({ required Object amount}) => 'أومض ${amount} ساتوشي';
@override String button_zap_ready({required Object amount}) => 'أومض ${amount} ساتوشي';
@override String get button_zap => 'زاب';
@override String get button_open_wallet => 'فتح في المحفظة';
@override String get button_connect_wallet => 'توصيل المحفظة';
@override String get copy => 'نسخ إلى الحافظة';
@override late final _TranslationsZapErrorAr error = _TranslationsZapErrorAr._(_root);
}
// Path: profile
class _TranslationsProfileAr implements TranslationsProfileEn {
_TranslationsProfileAr._(this._root);
class _TranslationsProfileAr extends TranslationsProfileEn {
_TranslationsProfileAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get past_streams => 'التدفقات السابقة';
@override late final _TranslationsProfileEditAr edit = _TranslationsProfileEditAr._(_root);
}
// Path: settings
class _TranslationsSettingsAr extends TranslationsSettingsEn {
_TranslationsSettingsAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get button_profile => 'تعديل الملف الشخصي';
@override String get button_wallet => 'إعدادات المحفظة';
@override late final _TranslationsSettingsProfileAr profile = _TranslationsSettingsProfileAr._(_root);
@override late final _TranslationsSettingsWalletAr wallet = _TranslationsSettingsWalletAr._(_root);
}
// Path: login
class _TranslationsLoginAr implements TranslationsLoginEn {
_TranslationsLoginAr._(this._root);
class _TranslationsLoginAr extends TranslationsLoginEn {
_TranslationsLoginAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginAr implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusAr implements TranslationsStreamStatusEn {
_TranslationsStreamStatusAr._(this._root);
class _TranslationsStreamStatusAr extends TranslationsStreamStatusEn {
_TranslationsStreamStatusAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusAr implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatAr implements TranslationsStreamChatEn {
_TranslationsStreamChatAr._(this._root);
class _TranslationsStreamChatAr extends TranslationsStreamChatEn {
_TranslationsStreamChatAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get disabled => 'تم تعطيل الدردشة';
@override String disabled_timeout({ required Object time}) => 'تنتهي المهلة: ${time}';
@override String disabled_timeout({required Object time}) => 'تنتهي المهلة: ${time}';
/// رسالة دردشة تظهر أحداث المهلة
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' انتهى الوقت '),
user,
const TextSpan(text: ' لـ '),
time,
], style: style, recognizer: recognizer);
]);
/// تيار انتهى التذييل في أسفل الدردشة
@override String get ended => 'انتهى البث';
/// رسالة الدردشة التي تُظهر البث المباشر
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' انطلق '),
amount,
const TextSpan(text: ' ساتس'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteAr write = _TranslationsStreamChatWriteAr._(_root);
@override late final _TranslationsStreamChatBadgeAr badge = _TranslationsStreamChatBadgeAr._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatAr implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorAr implements TranslationsZapErrorEn {
_TranslationsZapErrorAr._(this._root);
class _TranslationsZapErrorAr extends TranslationsZapErrorEn {
_TranslationsZapErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorAr implements TranslationsZapErrorEn {
@override String get no_lud16 => 'لم يتم العثور على عنوان البرق';
}
// Path: profile.edit
class _TranslationsProfileEditAr implements TranslationsProfileEditEn {
_TranslationsProfileEditAr._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileAr extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get display_name => 'اسم العرض';
@override String get about => 'نبذة';
@override String get about => 'نبذة عن';
@override String get nip05 => 'عنوان نوستر';
@override String get lud16 => 'عنوان البرق';
@override late final _TranslationsProfileEditErrorAr error = _TranslationsProfileEditErrorAr._(_root);
@override late final _TranslationsSettingsProfileErrorAr error = _TranslationsSettingsProfileErrorAr._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletAr extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'توصيل المحفظة (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'محفظة قطع الاتصال';
@override String get connect_1tap => '1-التوصيل بنقرة 1';
@override String get paste => 'لصق عنوان URL';
@override String get balance => 'الرصيد';
@override String get name => 'المحفظة';
@override late final _TranslationsSettingsWalletErrorAr error = _TranslationsSettingsWalletErrorAr._(_root);
}
// Path: login.error
class _TranslationsLoginErrorAr implements TranslationsLoginErrorEn {
_TranslationsLoginErrorAr._(this._root);
class _TranslationsLoginErrorAr extends TranslationsLoginErrorEn {
_TranslationsLoginErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorAr implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteAr implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteAr._(this._root);
class _TranslationsStreamChatWriteAr extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteAr implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeAr implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeAr._(this._root);
class _TranslationsStreamChatBadgeAr extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeAr implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidAr implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidAr._(this._root);
class _TranslationsStreamChatRaidAr extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
/// رسالة غارة الدردشة إلى دفق آخر
@override String to({ required Object name}) => 'التصفح ${name}';
@override String to({required Object name}) => 'التصفح ${name}';
/// رسالة غارة الدردشة من دفق آخر
@override String from({ required Object name}) => 'RAID من ${name}';
@override String from({required Object name}) => 'RAID من ${name}';
/// مؤقت العد التنازلي للقيادة التلقائية
@override String countdown({ required Object time}) => 'الإغارة في ${time}';
@override String countdown({required Object time}) => 'الإغارة في ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorAr implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorAr._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorAr extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorAr implements TranslationsProfileEditErrorEn
@override String get logged_out => 'لا يمكن تحرير ملف التعريف عند تسجيل الخروج';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorAr extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field
// Translations
@override String get logged_out => 'لا يمكن الاتصال بالمحفظة عند تسجيل الخروج';
@override String get nwc_auth_event_not_found => 'لم يتم العثور على حدث مصادقة المحفظة';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsAr {
@ -337,39 +421,41 @@ extension on TranslationsAr {
case 'most_zapped_streamers': return 'معظم اللافتات التي يتم بثها';
case 'no_user_found': 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,
one: '1 مشاهد',
other: '${n} المشاهدون',
other: '{n:decimalPattern} المشاهدين',
);
case 'stream.status.live': return 'بث مباشر';
case 'stream.status.ended': return 'انتهى';
case 'stream.status.planned': return 'مخطط';
case 'stream.started': return ({ required Object timestamp}) => 'بدأ ${timestamp}';
case 'stream.started': return ({required Object timestamp}) => 'بدأ ${timestamp}';
case 'stream.notification': return ({required Object name}) => '${name} بدأ البث المباشر!';
case 'stream.chat.disabled': return 'تم تعطيل الدردشة';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'تنتهي المهلة: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'تنتهي المهلة: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' انتهى الوقت '),
user,
const TextSpan(text: ' لـ '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'انتهى البث';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' انطلق '),
amount,
const TextSpan(text: ' ساتس'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'اكتب رسالة';
case 'stream.chat.write.no_signer': return 'لا يمكن كتابة الرسائل باستخدام تسجيل الدخول إلى npub';
case 'stream.chat.write.login': return 'الرجاء تسجيل الدخول لإرسال الرسائل';
case 'stream.chat.badge.awarded_to': return 'مُنحت الجائزة لـ';
case 'stream.chat.raid.to': return ({ required Object name}) => 'التصفح ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID من ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'الإغارة في ${time}';
case 'goal.title': return ({ required Object amount}) => 'الهدف: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'المتبقي: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'التصفح ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID من ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'الإغارة في ${time}';
case 'goal.title': return ({required Object amount}) => 'الهدف: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'المتبقي: ${amount}';
case 'goal.complete': return 'مكتمل';
case 'button.login': return 'تسجيل الدخول';
case 'button.logout': return 'تسجيل الخروج';
@ -380,35 +466,65 @@ extension on TranslationsAr {
case 'button.unmute': return 'رفع الكتم';
case 'button.share': return 'مشاركة';
case 'button.save': return 'حفظ';
case 'embed.article_by': return ({ required Object name}) => 'مقال بقلم ${name}';
case 'embed.note_by': return ({ required Object name}) => 'ملاحظة من ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'بث مباشر من ${name}';
case 'button.connect': return 'الاتصال';
case 'button.settings': return 'الإعدادات';
case 'embed.article_by': return ({required Object name}) => 'مقال بقلم ${name}';
case 'embed.note_by': return ({required Object name}) => 'ملاحظة من ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'بث مباشر من ${name}';
case 'stream_list.following': return 'المتابَعون';
case 'stream_list.live': return 'بث مباشر';
case 'stream_list.planned': return 'مخطط';
case 'stream_list.ended': return 'انتهى';
case 'zap.title': return ({ required Object name}) => 'زاب ${name}';
case 'zap.title': return ({required Object name}) => 'زاب ${name}';
case 'zap.custom_amount': return 'المبلغ المخصص';
case 'zap.confirm': return 'تأكيد';
case 'zap.comment': return 'تعليق';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'أومض ${amount} ساتوشي';
case 'zap.button_zap_ready': return ({required Object amount}) => 'أومض ${amount} ساتوشي';
case 'zap.button_zap': return 'زاب';
case 'zap.button_open_wallet': return 'فتح في المحفظة';
case 'zap.button_connect_wallet': return 'توصيل المحفظة';
case 'zap.copy': return 'نسخ إلى الحافظة';
case 'zap.error.invalid_custom_amount': return 'مبلغ مخصص غير صالح';
case 'zap.error.no_wallet': return 'لا توجد محفظة برق مثبتة';
case 'zap.error.no_lud16': return 'لم يتم العثور على عنوان البرق';
case 'profile.past_streams': return 'التدفقات السابقة';
case 'profile.edit.display_name': return 'اسم العرض';
case 'profile.edit.about': return 'نبذة';
case 'profile.edit.nip05': return 'عنوان نوستر';
case 'profile.edit.lud16': return 'عنوان البرق';
case 'profile.edit.error.logged_out': return 'لا يمكن تحرير ملف التعريف عند تسجيل الخروج';
case 'settings.button_profile': return 'تعديل الملف الشخصي';
case 'settings.button_wallet': return 'إعدادات المحفظة';
case 'settings.profile.display_name': return 'اسم العرض';
case 'settings.profile.about': return 'نبذة عن';
case 'settings.profile.nip05': return 'عنوان نوستر';
case 'settings.profile.lud16': return 'عنوان البرق';
case 'settings.profile.error.logged_out': return 'لا يمكن تحرير ملف التعريف عند تسجيل الخروج';
case 'settings.wallet.connect_wallet': return 'توصيل المحفظة (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'محفظة قطع الاتصال';
case 'settings.wallet.connect_1tap': return '1-التوصيل بنقرة 1';
case 'settings.wallet.paste': return 'لصق عنوان URL';
case 'settings.wallet.balance': return 'الرصيد';
case 'settings.wallet.name': return 'المحفظة';
case 'settings.wallet.error.logged_out': return 'لا يمكن الاتصال بالمحفظة عند تسجيل الخروج';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'لم يتم العثور على حدث مصادقة المحفظة';
case 'login.username': return 'اسم المستخدم';
case 'login.amber': return 'تسجيل الدخول مع آمبر';
case 'login.key': return 'تسجيل الدخول بالمفتاح';
case 'login.create': return 'إنشاء حساب';
case 'login.error.invalid_key': return 'مفتاح غير صالح';
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;
}
}

View File

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

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsCs implements Translations {
class TranslationsCs extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsCs({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsCs implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsCs implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsCs _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsCs implements Translations {
/// Anonymní uživatel
@override String get anon => 'Anon';
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('cs').format(n)} sats';
/// Počet diváků streamu
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n,
one: '1 divák',
other: '${n} diváci',
other: '${NumberFormat.decimalPattern('cs').format(n)} divá',
);
@override late final _TranslationsStreamCs stream = _TranslationsStreamCs._(_root);
@ -66,36 +69,39 @@ class TranslationsCs implements Translations {
@override late final _TranslationsZapCs zap = _TranslationsZapCs._(_root);
@override late final _TranslationsProfileCs profile = _TranslationsProfileCs._(_root);
@override late final _TranslationsSettingsCs settings = _TranslationsSettingsCs._(_root);
@override late final _TranslationsLoginCs login = _TranslationsLoginCs._(_root);
@override late final _TranslationsLiveCs live = _TranslationsLiveCs._(_root);
}
// Path: stream
class _TranslationsStreamCs implements TranslationsStreamEn {
_TranslationsStreamCs._(this._root);
class _TranslationsStreamCs extends TranslationsStreamEn {
_TranslationsStreamCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusCs status = _TranslationsStreamStatusCs._(_root);
@override String started({ required Object timestamp}) => 'Založeno ${timestamp}';
@override 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);
}
// Path: goal
class _TranslationsGoalCs implements TranslationsGoalEn {
_TranslationsGoalCs._(this._root);
class _TranslationsGoalCs extends TranslationsGoalEn {
_TranslationsGoalCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Cíl: ${amount}';
@override String remaining({ required Object amount}) => 'Zbývá: ${amount}';
@override String title({required Object amount}) => 'Cíl: ${amount}';
@override String remaining({required Object amount}) => 'Zbývá: ${amount}';
@override String get complete => 'KOMPLETNÍ';
}
// Path: button
class _TranslationsButtonCs implements TranslationsButtonEn {
_TranslationsButtonCs._(this._root);
class _TranslationsButtonCs extends TranslationsButtonEn {
_TranslationsButtonCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonCs implements TranslationsButtonEn {
@override String get unmute => 'Zrušit ztlumení';
@override String get share => 'Sdílet';
@override String get save => 'Uložit';
@override String get connect => 'Připojení';
@override String get settings => 'Nastavení';
}
// Path: embed
class _TranslationsEmbedCs implements TranslationsEmbedEn {
_TranslationsEmbedCs._(this._root);
class _TranslationsEmbedCs extends TranslationsEmbedEn {
_TranslationsEmbedCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Článek na ${name}';
@override String note_by({ required Object name}) => 'Poznámka ${name}';
@override String live_stream_by({ required Object name}) => 'Přímý přenos na adrese ${name}';
@override String article_by({required Object name}) => 'Článek na ${name}';
@override String note_by({required Object name}) => 'Poznámka ${name}';
@override String live_stream_by({required Object name}) => 'Přímý přenos na adrese ${name}';
}
// Path: stream_list
class _TranslationsStreamListCs implements TranslationsStreamListEn {
_TranslationsStreamListCs._(this._root);
class _TranslationsStreamListCs extends TranslationsStreamListEn {
_TranslationsStreamListCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListCs implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapCs implements TranslationsZapEn {
_TranslationsZapCs._(this._root);
class _TranslationsZapCs extends TranslationsZapEn {
_TranslationsZapCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Vlastní částka';
@override String get confirm => 'Potvrďte';
@override String get comment => 'Komentář:';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Otevřít v peněžence';
@override String get button_connect_wallet => 'Připojení peněženky';
@override String get copy => 'Zkopírováno do schránky';
@override late final _TranslationsZapErrorCs error = _TranslationsZapErrorCs._(_root);
}
// Path: profile
class _TranslationsProfileCs implements TranslationsProfileEn {
_TranslationsProfileCs._(this._root);
class _TranslationsProfileCs extends TranslationsProfileEn {
_TranslationsProfileCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Minulé proudy';
@override late final _TranslationsProfileEditCs edit = _TranslationsProfileEditCs._(_root);
}
// Path: settings
class _TranslationsSettingsCs extends TranslationsSettingsEn {
_TranslationsSettingsCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Upravit profil';
@override String get button_wallet => 'Nastavení peněženky';
@override late final _TranslationsSettingsProfileCs profile = _TranslationsSettingsProfileCs._(_root);
@override late final _TranslationsSettingsWalletCs wallet = _TranslationsSettingsWalletCs._(_root);
}
// Path: login
class _TranslationsLoginCs implements TranslationsLoginEn {
_TranslationsLoginCs._(this._root);
class _TranslationsLoginCs extends TranslationsLoginEn {
_TranslationsLoginCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginCs implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusCs implements TranslationsStreamStatusEn {
_TranslationsStreamStatusCs._(this._root);
class _TranslationsStreamStatusCs extends TranslationsStreamStatusEn {
_TranslationsStreamStatusCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusCs implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatCs implements TranslationsStreamChatEn {
_TranslationsStreamChatCs._(this._root);
class _TranslationsStreamChatCs extends TranslationsStreamChatEn {
_TranslationsStreamChatCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT ZRUŠEN';
@override String disabled_timeout({ required Object time}) => 'Časový limit vyprší: ${time}';
@override String disabled_timeout({required Object time}) => 'Časový limit vyprší: ${time}';
/// Zpráva chatu zobrazující události časového limitu
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' vypršel čas '),
user,
const TextSpan(text: ' pro '),
time,
], style: style, recognizer: recognizer);
]);
/// Zápatí v dolní části chatu ukončilo stream
@override String get ended => 'STREAM UKONČEN';
/// Zpráva chatu zobrazující proud zaps
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' Zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteCs write = _TranslationsStreamChatWriteCs._(_root);
@override late final _TranslationsStreamChatBadgeCs badge = _TranslationsStreamChatBadgeCs._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatCs implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorCs implements TranslationsZapErrorEn {
_TranslationsZapErrorCs._(this._root);
class _TranslationsZapErrorCs extends TranslationsZapErrorEn {
_TranslationsZapErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
@ -246,9 +291,9 @@ class _TranslationsZapErrorCs implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Nebyla nalezena žádná adresa blesku';
}
// Path: profile.edit
class _TranslationsProfileEditCs implements TranslationsProfileEditEn {
_TranslationsProfileEditCs._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileCs extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
@ -257,12 +302,28 @@ class _TranslationsProfileEditCs implements TranslationsProfileEditEn {
@override String get about => 'O stránkách';
@override String get nip05 => 'Adresa Nostr';
@override String get lud16 => 'Adresa blesku';
@override late final _TranslationsProfileEditErrorCs error = _TranslationsProfileEditErrorCs._(_root);
@override late final _TranslationsSettingsProfileErrorCs error = _TranslationsSettingsProfileErrorCs._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletCs extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Odpojení peněženky';
@override String get connect_1tap => 'Připojení 1 kohoutku';
@override String get paste => 'Vložit adresu URL';
@override String get balance => 'Bilance';
@override String get name => 'Peněženka';
@override late final _TranslationsSettingsWalletErrorCs error = _TranslationsSettingsWalletErrorCs._(_root);
}
// Path: login.error
class _TranslationsLoginErrorCs implements TranslationsLoginErrorEn {
_TranslationsLoginErrorCs._(this._root);
class _TranslationsLoginErrorCs extends TranslationsLoginErrorEn {
_TranslationsLoginErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorCs implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteCs implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteCs._(this._root);
class _TranslationsStreamChatWriteCs extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteCs implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeCs implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeCs._(this._root);
class _TranslationsStreamChatBadgeCs extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeCs implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidCs implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidCs._(this._root);
class _TranslationsStreamChatRaidCs extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
/// Zpráva o nájezdu chatu do jiného proudu
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Zpráva o nájezdu chatu z jiného proudu
@override String from({ required Object name}) => 'RAID Z ${name}';
@override String from({required Object name}) => 'RAID Z ${name}';
/// Časovač odpočítávání pro automatický nájezd
@override String countdown({ required Object time}) => 'Nájezdy na ${time}';
@override String countdown({required Object time}) => 'Nájezdy na ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorCs implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorCs._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorCs extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorCs implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Nelze upravit profil, když je odhlášený';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorCs extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Nelze se připojit k peněžence, když jste odhlášeni';
@override String get nwc_auth_event_not_found => 'Nebyla nalezena žádná událost autentizace peněženky';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsCs {
@ -337,39 +421,41 @@ extension on TranslationsCs {
case 'most_zapped_streamers': return 'Nejvíce zapnutých streamerů';
case 'no_user_found': return 'Nebyl nalezen žádný uživatel';
case 'anon': return 'Anon';
case '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,
one: '1 divák',
other: '${n} diváci',
other: '${NumberFormat.decimalPattern('cs').format(n)} divá',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'KONEC';
case 'stream.status.planned': return 'PLÁNOVANÉ';
case 'stream.started': return ({ required Object timestamp}) => 'Založeno ${timestamp}';
case 'stream.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_timeout': return ({ required Object time}) => 'Časový limit vyprší: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Časový limit vyprší: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' vypršel čas '),
user,
const TextSpan(text: ' pro '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM UKONČEN';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' Zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Napište zprávu';
case 'stream.chat.write.no_signer': return 'Nelze psát zprávy s přihlášením npub';
case 'stream.chat.write.login': return 'Pro odesílání zpráv se prosím přihlaste';
case 'stream.chat.badge.awarded_to': return 'Uděleno:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID Z ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Nájezdy na ${time}';
case 'goal.title': return ({ required Object amount}) => 'Cíl: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Zbývá: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID Z ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Nájezdy na ${time}';
case 'goal.title': return ({required Object amount}) => 'Cíl: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Zbývá: ${amount}';
case 'goal.complete': return 'KOMPLETNÍ';
case 'button.login': return 'Přihlášení';
case 'button.logout': return 'Odhlášení';
@ -380,35 +466,65 @@ extension on TranslationsCs {
case 'button.unmute': return 'Zrušit ztlumení';
case 'button.share': return 'Sdílet';
case 'button.save': return 'Uložit';
case 'embed.article_by': return ({ required Object name}) => 'Článek na ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Poznámka ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Přímý přenos na adrese ${name}';
case 'button.connect': return 'Připojení';
case 'button.settings': return 'Nastavení';
case 'embed.article_by': return ({required Object name}) => 'Článek na ${name}';
case 'embed.note_by': return ({required Object name}) => 'Poznámka ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Přímý přenos na adrese ${name}';
case 'stream_list.following': return 'Po';
case 'stream_list.live': return 'Živě';
case 'stream_list.planned': return 'Plánované';
case 'stream_list.ended': return 'Ukončeno';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Vlastní částka';
case 'zap.confirm': return 'Potvrďte';
case 'zap.comment': return 'Komentář:';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Otevřít v peněžence';
case 'zap.button_connect_wallet': return 'Připojení peněženky';
case 'zap.copy': return 'Zkopírováno do schránky';
case 'zap.error.invalid_custom_amount': return 'Neplatná vlastní částka';
case 'zap.error.no_wallet': return 'Není nainstalována blesková peněženka';
case 'zap.error.no_lud16': return 'Nebyla nalezena žádná adresa blesku';
case 'profile.past_streams': return 'Minulé proudy';
case 'profile.edit.display_name': return 'Zobrazení názvu';
case 'profile.edit.about': return 'O stránkách';
case 'profile.edit.nip05': return 'Adresa Nostr';
case 'profile.edit.lud16': return 'Adresa blesku';
case 'profile.edit.error.logged_out': return 'Nelze upravit profil, když je odhlášený';
case 'settings.button_profile': return 'Upravit profil';
case 'settings.button_wallet': return 'Nastavení peněženky';
case 'settings.profile.display_name': return 'Zobrazení názvu';
case 'settings.profile.about': return 'O stránkách';
case 'settings.profile.nip05': return 'Adresa Nostr';
case 'settings.profile.lud16': return 'Adresa blesku';
case 'settings.profile.error.logged_out': return 'Nelze upravit profil, když je odhlášený';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Odpojení peněženky';
case 'settings.wallet.connect_1tap': return 'Připojení 1 kohoutku';
case 'settings.wallet.paste': return 'Vložit adresu URL';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'Nebyla nalezena žádná událost autentizace peněženky';
case 'login.username': return 'Uživatelské jméno';
case 'login.amber': return 'Přihlášení pomocí Amber';
case 'login.key': return 'Přihlášení pomocí klíče';
case 'login.create': return 'Vytvořit účet';
case 'login.error.invalid_key': return 'Neplatný klíč';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsDa implements Translations {
class TranslationsDa extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsDa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsDa implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsDa implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsDa _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsDa implements Translations {
/// En anonym bruger
@override String get anon => 'Anon';
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('da').format(n)} sats';
/// Antal seere af streamingen
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n,
one: '1 seer',
other: '${n} Seere',
other: '${NumberFormat.decimalPattern('da').format(n)} seere',
);
@override late final _TranslationsStreamDa stream = _TranslationsStreamDa._(_root);
@ -66,36 +69,39 @@ class TranslationsDa implements Translations {
@override late final _TranslationsZapDa zap = _TranslationsZapDa._(_root);
@override late final _TranslationsProfileDa profile = _TranslationsProfileDa._(_root);
@override late final _TranslationsSettingsDa settings = _TranslationsSettingsDa._(_root);
@override late final _TranslationsLoginDa login = _TranslationsLoginDa._(_root);
@override late final _TranslationsLiveDa live = _TranslationsLiveDa._(_root);
}
// Path: stream
class _TranslationsStreamDa implements TranslationsStreamEn {
_TranslationsStreamDa._(this._root);
class _TranslationsStreamDa extends TranslationsStreamEn {
_TranslationsStreamDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusDa status = _TranslationsStreamStatusDa._(_root);
@override String started({ required Object timestamp}) => 'Startet ${timestamp}';
@override String started({required Object timestamp}) => 'Startet ${timestamp}';
@override String notification({required Object name}) => '${name} gik live!';
@override late final _TranslationsStreamChatDa chat = _TranslationsStreamChatDa._(_root);
}
// Path: goal
class _TranslationsGoalDa implements TranslationsGoalEn {
_TranslationsGoalDa._(this._root);
class _TranslationsGoalDa extends TranslationsGoalEn {
_TranslationsGoalDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Mål: ${amount}';
@override String remaining({ required Object amount}) => 'Resterende: ${amount}';
@override String title({required Object amount}) => 'Mål: ${amount}';
@override String remaining({required Object amount}) => 'Resterende: ${amount}';
@override String get complete => 'KOMPLET';
}
// Path: button
class _TranslationsButtonDa implements TranslationsButtonEn {
_TranslationsButtonDa._(this._root);
class _TranslationsButtonDa extends TranslationsButtonEn {
_TranslationsButtonDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonDa implements TranslationsButtonEn {
@override String get unmute => 'Slå lyden fra';
@override String get share => 'Del';
@override String get save => 'Gemme';
@override String get connect => 'Opret forbindelse';
@override String get settings => 'Indstillinger';
}
// Path: embed
class _TranslationsEmbedDa implements TranslationsEmbedEn {
_TranslationsEmbedDa._(this._root);
class _TranslationsEmbedDa extends TranslationsEmbedEn {
_TranslationsEmbedDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Artikel af ${name}';
@override String note_by({ required Object name}) => 'Note fra ${name}';
@override String live_stream_by({ required Object name}) => 'Livestream på ${name}';
@override String article_by({required Object name}) => 'Artikel af ${name}';
@override String note_by({required Object name}) => 'Note fra ${name}';
@override String live_stream_by({required Object name}) => 'Livestream på ${name}';
}
// Path: stream_list
class _TranslationsStreamListDa implements TranslationsStreamListEn {
_TranslationsStreamListDa._(this._root);
class _TranslationsStreamListDa extends TranslationsStreamListEn {
_TranslationsStreamListDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListDa implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapDa implements TranslationsZapEn {
_TranslationsZapDa._(this._root);
class _TranslationsZapDa extends TranslationsZapEn {
_TranslationsZapDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Brugerdefineret beløb';
@override String get confirm => 'Bekræft';
@override String get comment => 'Kommentar';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Åbn i tegnebogen';
@override String get button_connect_wallet => 'Forbind tegnebog';
@override String get copy => 'Kopieret til udklipsholder';
@override late final _TranslationsZapErrorDa error = _TranslationsZapErrorDa._(_root);
}
// Path: profile
class _TranslationsProfileDa implements TranslationsProfileEn {
_TranslationsProfileDa._(this._root);
class _TranslationsProfileDa extends TranslationsProfileEn {
_TranslationsProfileDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Tidligere strømme';
@override late final _TranslationsProfileEditDa edit = _TranslationsProfileEditDa._(_root);
}
// Path: settings
class _TranslationsSettingsDa extends TranslationsSettingsEn {
_TranslationsSettingsDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Rediger profil';
@override String get button_wallet => 'Indstillinger for tegnebog';
@override late final _TranslationsSettingsProfileDa profile = _TranslationsSettingsProfileDa._(_root);
@override late final _TranslationsSettingsWalletDa wallet = _TranslationsSettingsWalletDa._(_root);
}
// Path: login
class _TranslationsLoginDa implements TranslationsLoginEn {
_TranslationsLoginDa._(this._root);
class _TranslationsLoginDa extends TranslationsLoginEn {
_TranslationsLoginDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginDa implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusDa implements TranslationsStreamStatusEn {
_TranslationsStreamStatusDa._(this._root);
class _TranslationsStreamStatusDa extends TranslationsStreamStatusEn {
_TranslationsStreamStatusDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusDa implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatDa implements TranslationsStreamChatEn {
_TranslationsStreamChatDa._(this._root);
class _TranslationsStreamChatDa extends TranslationsStreamChatEn {
_TranslationsStreamChatDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DEAKTIVERET';
@override String disabled_timeout({ required Object time}) => 'Timeout udløber: ${time}';
@override String disabled_timeout({required Object time}) => 'Timeout udløber: ${time}';
/// Chatbesked, der viser timeout-hændelser
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' udløbet '),
user,
const TextSpan(text: ' for '),
time,
], style: style, recognizer: recognizer);
]);
/// Stream afsluttede footer i bunden af chatten
@override String get ended => 'STREAM AFSLUTTET';
/// Chatbesked, der viser stream-zaps
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zappet '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteDa write = _TranslationsStreamChatWriteDa._(_root);
@override late final _TranslationsStreamChatBadgeDa badge = _TranslationsStreamChatBadgeDa._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatDa implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorDa implements TranslationsZapErrorEn {
_TranslationsZapErrorDa._(this._root);
class _TranslationsZapErrorDa extends TranslationsZapErrorEn {
_TranslationsZapErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
@ -246,9 +291,9 @@ class _TranslationsZapErrorDa implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Ingen lyn-adresse fundet';
}
// Path: profile.edit
class _TranslationsProfileEditDa implements TranslationsProfileEditEn {
_TranslationsProfileEditDa._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileDa extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
@ -257,12 +302,28 @@ class _TranslationsProfileEditDa implements TranslationsProfileEditEn {
@override String get about => 'Omkring';
@override String get nip05 => 'Nostr-adresse';
@override String get lud16 => 'Adresse for lynnedslag';
@override late final _TranslationsProfileEditErrorDa error = _TranslationsProfileEditErrorDa._(_root);
@override late final _TranslationsSettingsProfileErrorDa error = _TranslationsSettingsProfileErrorDa._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletDa extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Afbryd forbindelsen til tegnebogen';
@override String get connect_1tap => '1-Tap-forbindelse';
@override String get paste => 'Indsæt URL';
@override String get balance => 'Balance';
@override String get name => 'Tegnebog';
@override late final _TranslationsSettingsWalletErrorDa error = _TranslationsSettingsWalletErrorDa._(_root);
}
// Path: login.error
class _TranslationsLoginErrorDa implements TranslationsLoginErrorEn {
_TranslationsLoginErrorDa._(this._root);
class _TranslationsLoginErrorDa extends TranslationsLoginErrorEn {
_TranslationsLoginErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorDa implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteDa implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteDa._(this._root);
class _TranslationsStreamChatWriteDa extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteDa implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeDa implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeDa._(this._root);
class _TranslationsStreamChatBadgeDa extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeDa implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidDa implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidDa._(this._root);
class _TranslationsStreamChatRaidDa extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
/// Chat raid-besked til en anden stream
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid-besked fra en anden stream
@override String from({ required Object name}) => 'RAID FRA ${name}';
@override String from({required Object name}) => 'RAID FRA ${name}';
/// Nedtællingstimer til auto-raiding
@override String countdown({ required Object time}) => 'Raiding i ${time}';
@override String countdown({required Object time}) => 'Raiding i ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorDa implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorDa._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorDa extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorDa implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Kan ikke redigere profil, når jeg er logget ud';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorDa extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kan ikke oprette forbindelse til wallet, når jeg er logget ud';
@override String get nwc_auth_event_not_found => 'Ingen wallet-auth-begivenhed fundet';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsDa {
@ -337,39 +421,41 @@ extension on TranslationsDa {
case 'most_zapped_streamers': return 'De fleste zappede streamere';
case 'no_user_found': return 'Ingen bruger fundet';
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,
one: '1 seer',
other: '${n} Seere',
other: '${NumberFormat.decimalPattern('da').format(n)} seere',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'AFSLUTTET';
case 'stream.status.planned': return 'PLANLAGT';
case 'stream.started': return ({ required Object timestamp}) => 'Startet ${timestamp}';
case 'stream.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_timeout': return ({ required Object time}) => 'Timeout udløber: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout udløber: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' udløbet '),
user,
const TextSpan(text: ' for '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM AFSLUTTET';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zappet '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Skriv en besked';
case 'stream.chat.write.no_signer': return 'Kan ikke skrive beskeder med npub-login';
case 'stream.chat.write.login': return 'Log ind for at sende beskeder';
case 'stream.chat.badge.awarded_to': return 'Tildelt til:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FRA ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding i ${time}';
case 'goal.title': return ({ required Object amount}) => 'Mål: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Resterende: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FRA ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding i ${time}';
case 'goal.title': return ({required Object amount}) => 'Mål: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Resterende: ${amount}';
case 'goal.complete': return 'KOMPLET';
case 'button.login': return 'Login';
case 'button.logout': return 'Log ud';
@ -380,35 +466,65 @@ extension on TranslationsDa {
case 'button.unmute': return 'Slå lyden fra';
case 'button.share': return 'Del';
case 'button.save': return 'Gemme';
case 'embed.article_by': return ({ required Object name}) => 'Artikel af ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note fra ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Livestream på ${name}';
case 'button.connect': return 'Opret forbindelse';
case 'button.settings': return 'Indstillinger';
case 'embed.article_by': return ({required Object name}) => 'Artikel af ${name}';
case 'embed.note_by': return ({required Object name}) => 'Note fra ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Livestream på ${name}';
case 'stream_list.following': return 'Efterfølgende';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planlagt';
case 'stream_list.ended': return 'Afsluttet';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Brugerdefineret beløb';
case 'zap.confirm': return 'Bekræft';
case 'zap.comment': return 'Kommentar';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Åbn i tegnebogen';
case 'zap.button_connect_wallet': return 'Forbind tegnebog';
case 'zap.copy': return 'Kopieret til udklipsholder';
case 'zap.error.invalid_custom_amount': return 'Ugyldigt brugerdefineret beløb';
case 'zap.error.no_wallet': return 'Ingen lightning wallet installeret';
case 'zap.error.no_lud16': return 'Ingen lyn-adresse fundet';
case 'profile.past_streams': return 'Tidligere strømme';
case 'profile.edit.display_name': return 'Vis navn';
case 'profile.edit.about': return 'Omkring';
case 'profile.edit.nip05': return 'Nostr-adresse';
case 'profile.edit.lud16': return 'Adresse for lynnedslag';
case 'profile.edit.error.logged_out': return 'Kan ikke redigere profil, når jeg er logget ud';
case 'settings.button_profile': return 'Rediger profil';
case 'settings.button_wallet': return 'Indstillinger for tegnebog';
case 'settings.profile.display_name': return 'Vis navn';
case 'settings.profile.about': return 'Omkring';
case 'settings.profile.nip05': return 'Nostr-adresse';
case 'settings.profile.lud16': return 'Adresse for lynnedslag';
case 'settings.profile.error.logged_out': return 'Kan ikke redigere profil, når jeg er logget ud';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Afbryd forbindelsen til tegnebogen';
case 'settings.wallet.connect_1tap': return '1-Tap-forbindelse';
case 'settings.wallet.paste': return 'Indsæt URL';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'Ingen wallet-auth-begivenhed fundet';
case 'login.username': return 'Brugernavn';
case 'login.amber': return 'Log ind med Amber';
case 'login.key': return 'Login med nøgle';
case 'login.create': return 'Opret konto';
case 'login.error.invalid_key': return 'Ugyldig nøgle';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsDe implements Translations {
class TranslationsDe extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsDe({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsDe implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsDe implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsDe _root = this; // ignore: unused_field
@ -41,7 +42,7 @@ class TranslationsDe implements Translations {
/// Text, der den Benutzer auffordert, auf den Avatar-Platzhalter zu klicken, um den Upload zu starten
@override String get upload_avatar => 'Avatar hochladen';
/// Überschrift über gelistete Top-Streamer von zaps
/// Überschrift über gelistete Top-Streamer nach Zaps
@override String get most_zapped_streamers => 'Meistgezappte Streamer';
/// Kein Benutzer bei der Suche gefunden
@ -50,10 +51,12 @@ class TranslationsDe implements Translations {
/// Ein anonymer Benutzer
@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,
one: '1 Zuschauer',
other: '${n} Zuschauer',
other: '${NumberFormat.decimalPattern('de').format(n)} Zuschauer',
);
@override late final _TranslationsStreamDe stream = _TranslationsStreamDe._(_root);
@ -66,36 +69,39 @@ class TranslationsDe implements Translations {
@override late final _TranslationsZapDe zap = _TranslationsZapDe._(_root);
@override late final _TranslationsProfileDe profile = _TranslationsProfileDe._(_root);
@override late final _TranslationsSettingsDe settings = _TranslationsSettingsDe._(_root);
@override late final _TranslationsLoginDe login = _TranslationsLoginDe._(_root);
@override late final _TranslationsLiveDe live = _TranslationsLiveDe._(_root);
}
// Path: stream
class _TranslationsStreamDe implements TranslationsStreamEn {
_TranslationsStreamDe._(this._root);
class _TranslationsStreamDe extends TranslationsStreamEn {
_TranslationsStreamDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusDe status = _TranslationsStreamStatusDe._(_root);
@override String started({ required Object timestamp}) => 'Gestartet ${timestamp}';
@override String started({required Object timestamp}) => 'Gestartet ${timestamp}';
@override String notification({required Object name}) => '${name} ging live!';
@override late final _TranslationsStreamChatDe chat = _TranslationsStreamChatDe._(_root);
}
// Path: goal
class _TranslationsGoalDe implements TranslationsGoalEn {
_TranslationsGoalDe._(this._root);
class _TranslationsGoalDe extends TranslationsGoalEn {
_TranslationsGoalDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Ziel: ${amount}';
@override String remaining({ required Object amount}) => 'Verbleibend: ${amount}';
@override String title({required Object amount}) => 'Ziel: ${amount}';
@override String remaining({required Object amount}) => 'Verbleibend: ${amount}';
@override String get complete => 'COMPLETE';
}
// Path: button
class _TranslationsButtonDe implements TranslationsButtonEn {
_TranslationsButtonDe._(this._root);
class _TranslationsButtonDe extends TranslationsButtonEn {
_TranslationsButtonDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonDe implements TranslationsButtonEn {
@override String get unmute => 'Entstummen';
@override String get share => 'Teilen';
@override String get save => 'Speichern';
@override String get connect => 'Verbinden Sie';
@override String get settings => 'Einstellungen';
}
// Path: embed
class _TranslationsEmbedDe implements TranslationsEmbedEn {
_TranslationsEmbedDe._(this._root);
class _TranslationsEmbedDe extends TranslationsEmbedEn {
_TranslationsEmbedDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Artikel von ${name}';
@override String note_by({ required Object name}) => 'Note von ${name}';
@override String live_stream_by({ required Object name}) => 'Live-Stream von ${name}';
@override String article_by({required Object name}) => 'Artikel von ${name}';
@override String note_by({required Object name}) => 'Note von ${name}';
@override String live_stream_by({required Object name}) => 'Live-Stream von ${name}';
}
// Path: stream_list
class _TranslationsStreamListDe implements TranslationsStreamListEn {
_TranslationsStreamListDe._(this._root);
class _TranslationsStreamListDe extends TranslationsStreamListEn {
_TranslationsStreamListDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListDe implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapDe implements TranslationsZapEn {
_TranslationsZapDe._(this._root);
class _TranslationsZapDe extends TranslationsZapEn {
_TranslationsZapDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => '${name} zappen';
@override String title({required Object name}) => '${name} zappen';
@override String get custom_amount => 'Benutzerdefinierter Betrag';
@override String get confirm => 'Bestätigen';
@override String get comment => 'Kommentar';
@override String button_zap_ready({ required Object amount}) => '${amount} sats zappen';
@override String button_zap_ready({required Object amount}) => '${amount} sats zappen';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'In Brieftasche öffnen';
@override String get button_connect_wallet => 'Brieftasche verbinden';
@override String get copy => 'In die Zwischenablage kopiert';
@override late final _TranslationsZapErrorDe error = _TranslationsZapErrorDe._(_root);
}
// Path: profile
class _TranslationsProfileDe implements TranslationsProfileEn {
_TranslationsProfileDe._(this._root);
class _TranslationsProfileDe extends TranslationsProfileEn {
_TranslationsProfileDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Vergangene Streams';
@override late final _TranslationsProfileEditDe edit = _TranslationsProfileEditDe._(_root);
}
// Path: settings
class _TranslationsSettingsDe extends TranslationsSettingsEn {
_TranslationsSettingsDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Profil bearbeiten';
@override String get button_wallet => 'Wallet-Einstellungen';
@override late final _TranslationsSettingsProfileDe profile = _TranslationsSettingsProfileDe._(_root);
@override late final _TranslationsSettingsWalletDe wallet = _TranslationsSettingsWalletDe._(_root);
}
// Path: login
class _TranslationsLoginDe implements TranslationsLoginEn {
_TranslationsLoginDe._(this._root);
class _TranslationsLoginDe extends TranslationsLoginEn {
_TranslationsLoginDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
@ -187,47 +208,71 @@ class _TranslationsLoginDe implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusDe implements TranslationsStreamStatusEn {
_TranslationsStreamStatusDe._(this._root);
class _TranslationsStreamStatusDe extends TranslationsStreamStatusEn {
_TranslationsStreamStatusDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get live => 'LIVE';
@override String get ended => 'ENDED';
@override String get ended => 'BEENDET';
@override String get planned => 'GEPLANT';
}
// Path: stream.chat
class _TranslationsStreamChatDe implements TranslationsStreamChatEn {
_TranslationsStreamChatDe._(this._root);
class _TranslationsStreamChatDe extends TranslationsStreamChatEn {
_TranslationsStreamChatDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DEAKTIVIERT';
@override String disabled_timeout({ required Object time}) => 'Die Zeitüberschreitung läuft ab: ${time}';
@override String disabled_timeout({required Object time}) => 'Timeout läuft ab: ${time}';
/// Chat-Nachricht mit Zeitüberschreitungsereignissen
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
/// Chat-Nachricht mit Timeout-Ereignissen
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Zeitüberschreitung '),
const TextSpan(text: ' gibt '),
user,
const TextSpan(text: ' für '),
const TextSpan(text: ' einen Timeout für '),
time,
], style: style, recognizer: recognizer);
]);
/// Stream beendet Fußzeile am Ende des Chats
@override String get ended => 'STREAM BEENDET';
/// Chatnachricht mit Stream Zaps
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
/// Chat-Nachricht mit Stream-Zaps
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' hat '),
amount,
const TextSpan(text: ' sats gezappt'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteDe write = _TranslationsStreamChatWriteDe._(_root);
@override late final _TranslationsStreamChatBadgeDe badge = _TranslationsStreamChatBadgeDe._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatDe implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorDe implements TranslationsZapErrorEn {
_TranslationsZapErrorDe._(this._root);
class _TranslationsZapErrorDe extends TranslationsZapErrorEn {
_TranslationsZapErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
@ -246,9 +291,9 @@ class _TranslationsZapErrorDe implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Keine Blitzadresse gefunden';
}
// Path: profile.edit
class _TranslationsProfileEditDe implements TranslationsProfileEditEn {
_TranslationsProfileEditDe._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileDe extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
@ -256,13 +301,29 @@ class _TranslationsProfileEditDe implements TranslationsProfileEditEn {
@override String get display_name => 'Name anzeigen';
@override String get about => 'Über';
@override String get nip05 => 'Nostr-Adresse';
@override String get lud16 => 'Lightning-Adresse';
@override late final _TranslationsProfileEditErrorDe error = _TranslationsProfileEditErrorDe._(_root);
@override String get lud16 => 'Blitz-Adresse';
@override late final _TranslationsSettingsProfileErrorDe error = _TranslationsSettingsProfileErrorDe._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletDe extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Brieftasche abtrennen';
@override String get connect_1tap => '1-Tap-Verbindung';
@override String get paste => 'URL einfügen';
@override String get balance => 'Bilanz';
@override String get name => 'Brieftasche';
@override late final _TranslationsSettingsWalletErrorDe error = _TranslationsSettingsWalletErrorDe._(_root);
}
// Path: login.error
class _TranslationsLoginErrorDe implements TranslationsLoginErrorEn {
_TranslationsLoginErrorDe._(this._root);
class _TranslationsLoginErrorDe extends TranslationsLoginErrorEn {
_TranslationsLoginErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorDe implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteDe implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteDe._(this._root);
class _TranslationsStreamChatWriteDe extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteDe implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeDe implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeDe._(this._root);
class _TranslationsStreamChatBadgeDe extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeDe implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidDe implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidDe._(this._root);
class _TranslationsStreamChatRaidDe extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
/// Chat-Überfallnachricht an einen anderen Stream
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat-Raid-Nachricht aus einem anderen Stream
@override String from({ required Object name}) => 'RAID VON ${name}';
@override String from({required Object name}) => 'RAID VON ${name}';
/// Countdown-Timer für automatisches Reiten
@override String countdown({ required Object time}) => 'Raubzüge auf ${time}';
@override String countdown({required Object time}) => 'Raubzüge auf ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorDe implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorDe._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorDe extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorDe implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Profil kann nicht bearbeitet werden, wenn es abgemeldet ist';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorDe extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kann keine Verbindung zur Brieftasche herstellen, wenn ich abgemeldet bin';
@override String get nwc_auth_event_not_found => 'Kein Wallet-Authentifizierungsereignis gefunden';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsDe {
@ -337,39 +421,41 @@ extension on TranslationsDe {
case 'most_zapped_streamers': return 'Meistgezappte Streamer';
case 'no_user_found': return 'Kein Benutzer gefunden';
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,
one: '1 Zuschauer',
other: '${n} Zuschauer',
other: '${NumberFormat.decimalPattern('de').format(n)} Zuschauer',
);
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.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_timeout': return ({ required Object time}) => 'Die Zeitüberschreitung läuft ab: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
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: [
mod,
const TextSpan(text: ' Zeitüberschreitung '),
const TextSpan(text: ' gibt '),
user,
const TextSpan(text: ' für '),
const TextSpan(text: ' einen Timeout für '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM BEENDET';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' hat '),
amount,
const TextSpan(text: ' sats gezappt'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Nachricht schreiben';
case 'stream.chat.write.no_signer': return 'Mit npub-Login können keine Nachrichten geschrieben werden';
case 'stream.chat.write.login': return 'Bitte anmelden, um Nachrichten zu senden';
case 'stream.chat.badge.awarded_to': return 'Verliehen an:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID VON ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raubzüge auf ${time}';
case 'goal.title': return ({ required Object amount}) => 'Ziel: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Verbleibend: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID VON ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raubzüge auf ${time}';
case 'goal.title': return ({required Object amount}) => 'Ziel: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Verbleibend: ${amount}';
case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Anmelden';
case 'button.logout': return 'Abmelden';
@ -380,35 +466,65 @@ extension on TranslationsDe {
case 'button.unmute': return 'Entstummen';
case 'button.share': return 'Teilen';
case 'button.save': return 'Speichern';
case 'embed.article_by': return ({ required Object name}) => 'Artikel von ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note von ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Live-Stream von ${name}';
case 'button.connect': return 'Verbinden Sie';
case 'button.settings': return 'Einstellungen';
case 'embed.article_by': return ({required Object name}) => 'Artikel von ${name}';
case 'embed.note_by': return ({required Object name}) => 'Note von ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Live-Stream von ${name}';
case 'stream_list.following': return 'Folge ich';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Geplant';
case 'stream_list.ended': return 'Beendet';
case 'zap.title': return ({ required Object name}) => '${name} zappen';
case 'zap.title': return ({required Object name}) => '${name} zappen';
case 'zap.custom_amount': return 'Benutzerdefinierter Betrag';
case 'zap.confirm': return 'Bestätigen';
case 'zap.comment': return 'Kommentar';
case 'zap.button_zap_ready': return ({ required Object amount}) => '${amount} sats zappen';
case 'zap.button_zap_ready': return ({required Object amount}) => '${amount} sats zappen';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'In Brieftasche öffnen';
case 'zap.button_connect_wallet': return 'Brieftasche verbinden';
case 'zap.copy': return 'In die Zwischenablage kopiert';
case 'zap.error.invalid_custom_amount': return 'Ungültiger benutzerdefinierter Betrag';
case 'zap.error.no_wallet': return 'Keine Lightning-Brieftasche installiert';
case 'zap.error.no_lud16': return 'Keine Blitzadresse gefunden';
case 'profile.past_streams': return 'Vergangene Streams';
case 'profile.edit.display_name': return 'Name anzeigen';
case 'profile.edit.about': return 'Über';
case 'profile.edit.nip05': return 'Nostr-Adresse';
case 'profile.edit.lud16': return 'Lightning-Adresse';
case 'profile.edit.error.logged_out': return 'Profil kann nicht bearbeitet werden, wenn es abgemeldet ist';
case 'settings.button_profile': return 'Profil bearbeiten';
case 'settings.button_wallet': return 'Wallet-Einstellungen';
case 'settings.profile.display_name': return 'Name anzeigen';
case 'settings.profile.about': return 'Über';
case 'settings.profile.nip05': return 'Nostr-Adresse';
case 'settings.profile.lud16': return 'Blitz-Adresse';
case 'settings.profile.error.logged_out': return 'Profil kann nicht bearbeitet werden, wenn es abgemeldet ist';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Brieftasche abtrennen';
case 'settings.wallet.connect_1tap': return '1-Tap-Verbindung';
case 'settings.wallet.paste': return 'URL einfügen';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'Kein Wallet-Authentifizierungsereignis gefunden';
case 'login.username': return 'Benutzername';
case 'login.amber': return 'Anmeldung mit Amber';
case 'login.key': return 'Anmeldung mit Schlüssel';
case 'login.create': return 'Konto erstellen';
case 'login.error.invalid_key': return 'Ungültiger Schlüssel';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsEl implements Translations {
class TranslationsEl extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsEl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsEl implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsEl implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsEl _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsEl implements Translations {
/// Ένας ανώνυμος χρήστης
@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,
one: '1 θεατής',
other: '${n} θεατές',
other: '${NumberFormat.decimalPattern('el').format(n)} θεατές',
);
@override late final _TranslationsStreamEl stream = _TranslationsStreamEl._(_root);
@ -66,36 +69,39 @@ class TranslationsEl implements Translations {
@override late final _TranslationsZapEl zap = _TranslationsZapEl._(_root);
@override late final _TranslationsProfileEl profile = _TranslationsProfileEl._(_root);
@override late final _TranslationsSettingsEl settings = _TranslationsSettingsEl._(_root);
@override late final _TranslationsLoginEl login = _TranslationsLoginEl._(_root);
@override late final _TranslationsLiveEl live = _TranslationsLiveEl._(_root);
}
// Path: stream
class _TranslationsStreamEl implements TranslationsStreamEn {
_TranslationsStreamEl._(this._root);
class _TranslationsStreamEl extends TranslationsStreamEn {
_TranslationsStreamEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusEl status = _TranslationsStreamStatusEl._(_root);
@override String started({ required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
@override String started({required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
@override String notification({required Object name}) => '${name} βγήκε ζωντανά!';
@override late final _TranslationsStreamChatEl chat = _TranslationsStreamChatEl._(_root);
}
// Path: goal
class _TranslationsGoalEl implements TranslationsGoalEn {
_TranslationsGoalEl._(this._root);
class _TranslationsGoalEl extends TranslationsGoalEn {
_TranslationsGoalEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Στόχος: ${amount}';
@override String remaining({ required Object amount}) => 'Υπόλοιπο: ${amount}';
@override String title({required Object amount}) => 'Στόχος: ${amount}';
@override String remaining({required Object amount}) => 'Υπόλοιπο: ${amount}';
@override String get complete => 'ΠΛΗΡΗΣ';
}
// Path: button
class _TranslationsButtonEl implements TranslationsButtonEn {
_TranslationsButtonEl._(this._root);
class _TranslationsButtonEl extends TranslationsButtonEn {
_TranslationsButtonEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonEl implements TranslationsButtonEn {
@override String get unmute => 'Αποσυνδέστε τη φωνή σας από το';
@override String get share => 'Μοιραστείτε το';
@override String get save => 'Αποθήκευση';
@override String get connect => 'Συνδέστε το';
@override String get settings => 'Ρυθμίσεις';
}
// Path: embed
class _TranslationsEmbedEl implements TranslationsEmbedEn {
_TranslationsEmbedEl._(this._root);
class _TranslationsEmbedEl extends TranslationsEmbedEn {
_TranslationsEmbedEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Άρθρο από ${name}';
@override String note_by({ required Object name}) => 'Σημείωση του ${name}';
@override String live_stream_by({ required Object name}) => 'Ζωντανή μετάδοση από το ${name}';
@override String article_by({required Object name}) => 'Άρθρο από ${name}';
@override String note_by({required Object name}) => 'Σημείωση του ${name}';
@override String live_stream_by({required Object name}) => 'Ζωντανή μετάδοση από το ${name}';
}
// Path: stream_list
class _TranslationsStreamListEl implements TranslationsStreamListEn {
_TranslationsStreamListEl._(this._root);
class _TranslationsStreamListEl extends TranslationsStreamListEn {
_TranslationsStreamListEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListEl implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapEl implements TranslationsZapEn {
_TranslationsZapEl._(this._root);
class _TranslationsZapEl extends TranslationsZapEn {
_TranslationsZapEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Προσαρμοσμένο ποσό';
@override String get confirm => 'Επιβεβαίωση';
@override String get comment => 'Σχόλιο';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Άνοιγμα στο πορτοφόλι';
@override String get button_connect_wallet => 'Connect Wallet';
@override String get copy => 'Αντιγραφή στο πρόχειρο';
@override late final _TranslationsZapErrorEl error = _TranslationsZapErrorEl._(_root);
}
// Path: profile
class _TranslationsProfileEl implements TranslationsProfileEn {
_TranslationsProfileEl._(this._root);
class _TranslationsProfileEl extends TranslationsProfileEn {
_TranslationsProfileEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Προηγούμενα ρεύματα';
@override late final _TranslationsProfileEditEl edit = _TranslationsProfileEditEl._(_root);
}
// Path: settings
class _TranslationsSettingsEl extends TranslationsSettingsEn {
_TranslationsSettingsEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Επεξεργασία προφίλ';
@override String get button_wallet => 'Ρυθμίσεις πορτοφολιού';
@override late final _TranslationsSettingsProfileEl profile = _TranslationsSettingsProfileEl._(_root);
@override late final _TranslationsSettingsWalletEl wallet = _TranslationsSettingsWalletEl._(_root);
}
// Path: login
class _TranslationsLoginEl implements TranslationsLoginEn {
_TranslationsLoginEl._(this._root);
class _TranslationsLoginEl extends TranslationsLoginEn {
_TranslationsLoginEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginEl implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusEl implements TranslationsStreamStatusEn {
_TranslationsStreamStatusEl._(this._root);
class _TranslationsStreamStatusEl extends TranslationsStreamStatusEn {
_TranslationsStreamStatusEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusEl implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatEl implements TranslationsStreamChatEn {
_TranslationsStreamChatEl._(this._root);
class _TranslationsStreamChatEl extends TranslationsStreamChatEn {
_TranslationsStreamChatEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get disabled => 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ';
@override String disabled_timeout({ required Object time}) => 'Το χρονικό όριο λήγει: ${time}';
@override String disabled_timeout({required Object time}) => 'Το χρονικό όριο λήγει: ${time}';
/// Μήνυμα συνομιλίας που εμφανίζει συμβάντα timeout
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' χρονομετρημένη λήξη '),
user,
const TextSpan(text: ' για '),
time,
], style: style, recognizer: recognizer);
]);
/// Η ροή τελείωσε το υποσέλιδο στο κάτω μέρος της συνομιλίας
@override String get ended => 'STREAM ΤΕΛΕΙΩΣΕ';
/// Μήνυμα συνομιλίας που δείχνει ροή ροής zaps
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteEl write = _TranslationsStreamChatWriteEl._(_root);
@override late final _TranslationsStreamChatBadgeEl badge = _TranslationsStreamChatBadgeEl._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatEl implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorEl implements TranslationsZapErrorEn {
_TranslationsZapErrorEl._(this._root);
class _TranslationsZapErrorEl extends TranslationsZapErrorEn {
_TranslationsZapErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
@ -246,9 +291,9 @@ class _TranslationsZapErrorEl implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Δεν βρέθηκε διεύθυνση κεραυνού';
}
// Path: profile.edit
class _TranslationsProfileEditEl implements TranslationsProfileEditEn {
_TranslationsProfileEditEl._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileEl extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
@ -257,12 +302,28 @@ class _TranslationsProfileEditEl implements TranslationsProfileEditEn {
@override String get about => 'Σχετικά με το';
@override String get nip05 => 'Διεύθυνση Nostr';
@override String get lud16 => 'Διεύθυνση Lightning';
@override late final _TranslationsProfileEditErrorEl error = _TranslationsProfileEditErrorEl._(_root);
@override late final _TranslationsSettingsProfileErrorEl error = _TranslationsSettingsProfileErrorEl._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletEl extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Αποσύνδεση πορτοφολιού';
@override String get connect_1tap => 'Σύνδεση 1 βρύσης';
@override String get paste => 'Επικόλληση URL';
@override String get balance => 'Υπόλοιπο';
@override String get name => 'Πορτοφόλι';
@override late final _TranslationsSettingsWalletErrorEl error = _TranslationsSettingsWalletErrorEl._(_root);
}
// Path: login.error
class _TranslationsLoginErrorEl implements TranslationsLoginErrorEn {
_TranslationsLoginErrorEl._(this._root);
class _TranslationsLoginErrorEl extends TranslationsLoginErrorEn {
_TranslationsLoginErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorEl implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteEl implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteEl._(this._root);
class _TranslationsStreamChatWriteEl extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteEl implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeEl implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeEl._(this._root);
class _TranslationsStreamChatBadgeEl extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeEl implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidEl implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidEl._(this._root);
class _TranslationsStreamChatRaidEl extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
/// Μήνυμα επιδρομής συνομιλίας σε άλλη ροή
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Μήνυμα επιδρομής συνομιλίας από άλλη ροή
@override String from({ required Object name}) => 'RAID FROM ${name}';
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Χρονοδιακόπτης αντίστροφης μέτρησης για αυτόματη ιππασία
@override String countdown({ required Object time}) => 'Επιδρομές στο ${time}';
@override String countdown({required Object time}) => 'Επιδρομές στο ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorEl implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorEl._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorEl extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorEl implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorEl extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Δεν μπορώ να συνδεθώ με πορτοφόλι όταν έχω αποσυνδεθεί';
@override String get nwc_auth_event_not_found => 'Δεν βρέθηκε συμβάν εξουσιοδότησης πορτοφολιού';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsEl {
@ -337,39 +421,41 @@ extension on TranslationsEl {
case 'most_zapped_streamers': return 'Τα περισσότερα Zapped Streamers';
case 'no_user_found': return 'Δεν βρέθηκε χρήστης';
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,
one: '1 θεατής',
other: '${n} θεατές',
other: '${NumberFormat.decimalPattern('el').format(n)} θεατές',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'ΣΧΕΔΙΑΣΜΟΣ';
case 'stream.started': return ({ required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
case 'stream.started': return ({required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
case 'stream.notification': return ({required Object name}) => '${name} βγήκε ζωντανά!';
case 'stream.chat.disabled': return 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Το χρονικό όριο λήγει: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Το χρονικό όριο λήγει: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' χρονομετρημένη λήξη '),
user,
const TextSpan(text: ' για '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM ΤΕΛΕΙΩΣΕ';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Γράψτε μήνυμα';
case 'stream.chat.write.no_signer': return 'Δεν μπορείτε να γράψετε μηνύματα με σύνδεση στο npub';
case 'stream.chat.write.login': return 'Παρακαλώ συνδεθείτε για να στείλετε μηνύματα';
case 'stream.chat.badge.awarded_to': return 'Απονέμεται σε:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Επιδρομές στο ${time}';
case 'goal.title': return ({ required Object amount}) => 'Στόχος: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Υπόλοιπο: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Επιδρομές στο ${time}';
case 'goal.title': return ({required Object amount}) => 'Στόχος: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Υπόλοιπο: ${amount}';
case 'goal.complete': return 'ΠΛΗΡΗΣ';
case 'button.login': return 'Σύνδεση';
case 'button.logout': return 'Αποσύνδεση';
@ -380,35 +466,65 @@ extension on TranslationsEl {
case 'button.unmute': return 'Αποσυνδέστε τη φωνή σας από το';
case 'button.share': return 'Μοιραστείτε το';
case 'button.save': return 'Αποθήκευση';
case 'embed.article_by': return ({ required Object name}) => 'Άρθρο από ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Σημείωση του ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Ζωντανή μετάδοση από το ${name}';
case 'button.connect': return 'Συνδέστε το';
case 'button.settings': return 'Ρυθμίσεις';
case 'embed.article_by': return ({required Object name}) => 'Άρθρο από ${name}';
case 'embed.note_by': return ({required Object name}) => 'Σημείωση του ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Ζωντανή μετάδοση από το ${name}';
case 'stream_list.following': return 'Ακολουθώντας το';
case 'stream_list.live': return 'Ζωντανό';
case 'stream_list.planned': return 'Προγραμματισμένο';
case 'stream_list.ended': return 'Τελείωσε';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Προσαρμοσμένο ποσό';
case 'zap.confirm': return 'Επιβεβαίωση';
case 'zap.comment': return 'Σχόλιο';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Άνοιγμα στο πορτοφόλι';
case 'zap.button_connect_wallet': return 'Connect Wallet';
case 'zap.copy': return 'Αντιγραφή στο πρόχειρο';
case 'zap.error.invalid_custom_amount': return 'Μη έγκυρο προσαρμοσμένο ποσό';
case 'zap.error.no_wallet': return 'Δεν έχει εγκατασταθεί πορτοφόλι αστραπής';
case 'zap.error.no_lud16': return 'Δεν βρέθηκε διεύθυνση κεραυνού';
case 'profile.past_streams': return 'Προηγούμενα ρεύματα';
case 'profile.edit.display_name': return 'Όνομα οθόνης';
case 'profile.edit.about': return 'Σχετικά με το';
case 'profile.edit.nip05': return 'Διεύθυνση Nostr';
case 'profile.edit.lud16': return 'Διεύθυνση Lightning';
case 'profile.edit.error.logged_out': return 'Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί';
case 'settings.button_profile': return 'Επεξεργασία προφίλ';
case 'settings.button_wallet': return 'Ρυθμίσεις πορτοφολιού';
case 'settings.profile.display_name': return 'Όνομα οθόνης';
case 'settings.profile.about': return 'Σχετικά με το';
case 'settings.profile.nip05': return 'Διεύθυνση Nostr';
case 'settings.profile.lud16': return 'Διεύθυνση Lightning';
case 'settings.profile.error.logged_out': return 'Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Αποσύνδεση πορτοφολιού';
case 'settings.wallet.connect_1tap': return 'Σύνδεση 1 βρύσης';
case 'settings.wallet.paste': return 'Επικόλληση URL';
case 'settings.wallet.balance': return 'Υπόλοιπο';
case 'settings.wallet.name': return 'Πορτοφόλι';
case 'settings.wallet.error.logged_out': return 'Δεν μπορώ να συνδεθώ με πορτοφόλι όταν έχω αποσυνδεθεί';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Δεν βρέθηκε συμβάν εξουσιοδότησης πορτοφολιού';
case 'login.username': return 'Όνομα χρήστη';
case 'login.amber': return 'Σύνδεση με Amber';
case 'login.key': return 'Σύνδεση με κλειδί';
case 'login.create': return 'Δημιουργία λογαριασμού';
case 'login.error.invalid_key': return 'Μη έγκυρο κλειδί';
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;
}
}

View File

@ -52,52 +52,58 @@ class Translations implements BaseTranslations<AppLocale, Translations> {
/// An anonymous user
String get anon => 'Anon';
String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('en').format(n)} sats';
/// Number of viewers of the stream
String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n,
one: '1 viewer',
other: '${n} viewers',
other: '${NumberFormat.decimalPattern('en').format(n)} viewers',
);
late final TranslationsStreamEn stream = TranslationsStreamEn._(_root);
late final TranslationsGoalEn goal = TranslationsGoalEn._(_root);
late final TranslationsButtonEn button = TranslationsButtonEn._(_root);
late final TranslationsEmbedEn embed = TranslationsEmbedEn._(_root);
late final TranslationsStreamEn stream = TranslationsStreamEn.internal(_root);
late final TranslationsGoalEn goal = TranslationsGoalEn.internal(_root);
late final TranslationsButtonEn button = TranslationsButtonEn.internal(_root);
late final TranslationsEmbedEn embed = TranslationsEmbedEn.internal(_root);
/// Headings on stream lists by stream type live/ended/planned etc.
late final TranslationsStreamListEn stream_list = TranslationsStreamListEn._(_root);
late final TranslationsStreamListEn stream_list = TranslationsStreamListEn.internal(_root);
late final TranslationsZapEn zap = TranslationsZapEn._(_root);
late final TranslationsProfileEn profile = TranslationsProfileEn._(_root);
late final TranslationsLoginEn login = TranslationsLoginEn._(_root);
late final TranslationsZapEn zap = TranslationsZapEn.internal(_root);
late final TranslationsProfileEn profile = TranslationsProfileEn.internal(_root);
late final TranslationsSettingsEn settings = TranslationsSettingsEn.internal(_root);
late final TranslationsLoginEn login = TranslationsLoginEn.internal(_root);
late final TranslationsLiveEn live = TranslationsLiveEn.internal(_root);
}
// Path: stream
class TranslationsStreamEn {
TranslationsStreamEn._(this._root);
TranslationsStreamEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
late final TranslationsStreamStatusEn status = TranslationsStreamStatusEn._(_root);
String started({ required Object timestamp}) => 'Started ${timestamp}';
late final TranslationsStreamChatEn chat = TranslationsStreamChatEn._(_root);
late final TranslationsStreamStatusEn status = TranslationsStreamStatusEn.internal(_root);
String started({required Object timestamp}) => 'Started ${timestamp}';
String notification({required Object name}) => '${name} went live!';
late final TranslationsStreamChatEn chat = TranslationsStreamChatEn.internal(_root);
late final TranslationsStreamErrorEn error = TranslationsStreamErrorEn.internal(_root);
}
// Path: goal
class TranslationsGoalEn {
TranslationsGoalEn._(this._root);
TranslationsGoalEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String title({ required Object amount}) => 'Goal: ${amount}';
String remaining({ required Object amount}) => 'Remaining: ${amount}';
String title({required Object amount}) => 'Goal: ${amount}';
String remaining({required Object amount}) => 'Remaining: ${amount}';
String get complete => 'COMPLETE';
}
// Path: button
class TranslationsButtonEn {
TranslationsButtonEn._(this._root);
TranslationsButtonEn.internal(this._root);
final Translations _root; // ignore: unused_field
@ -119,23 +125,25 @@ class TranslationsButtonEn {
String get unmute => 'Unmute';
String get share => 'Share';
String get save => 'Save';
String get connect => 'Connect';
String get settings => 'Settings';
}
// Path: embed
class TranslationsEmbedEn {
TranslationsEmbedEn._(this._root);
TranslationsEmbedEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String article_by({ required Object name}) => 'Article by ${name}';
String note_by({ required Object name}) => 'Note by ${name}';
String live_stream_by({ required Object name}) => 'Live stream by ${name}';
String article_by({required Object name}) => 'Article by ${name}';
String note_by({required Object name}) => 'Note by ${name}';
String live_stream_by({required Object name}) => 'Live stream by ${name}';
}
// Path: stream_list
class TranslationsStreamListEn {
TranslationsStreamListEn._(this._root);
TranslationsStreamListEn.internal(this._root);
final Translations _root; // ignore: unused_field
@ -148,36 +156,49 @@ class TranslationsStreamListEn {
// Path: zap
class TranslationsZapEn {
TranslationsZapEn._(this._root);
TranslationsZapEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String title({ required Object name}) => 'Zap ${name}';
String title({required Object name}) => 'Zap ${name}';
String get custom_amount => 'Custom Amount';
String get confirm => 'Confirm';
String get comment => 'Comment';
String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
String get button_zap => 'Zap';
String get button_open_wallet => 'Open in Wallet';
String get button_connect_wallet => 'Connect Wallet';
String get copy => 'Copied to clipboard';
late final TranslationsZapErrorEn error = TranslationsZapErrorEn._(_root);
late final TranslationsZapErrorEn error = TranslationsZapErrorEn.internal(_root);
}
// Path: profile
class TranslationsProfileEn {
TranslationsProfileEn._(this._root);
TranslationsProfileEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get past_streams => 'Past Streams';
late final TranslationsProfileEditEn edit = TranslationsProfileEditEn._(_root);
}
// Path: settings
class TranslationsSettingsEn {
TranslationsSettingsEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get button_profile => 'Edit Profile';
String get button_wallet => 'Wallet Settings';
late final TranslationsSettingsProfileEn profile = TranslationsSettingsProfileEn.internal(_root);
late final TranslationsSettingsWalletEn wallet = TranslationsSettingsWalletEn.internal(_root);
}
// Path: login
class TranslationsLoginEn {
TranslationsLoginEn._(this._root);
TranslationsLoginEn.internal(this._root);
final Translations _root; // ignore: unused_field
@ -186,12 +207,36 @@ class TranslationsLoginEn {
String get amber => 'Login with Amber';
String get key => 'Login with Key';
String get create => 'Create Account';
late final TranslationsLoginErrorEn error = TranslationsLoginErrorEn._(_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
class TranslationsStreamStatusEn {
TranslationsStreamStatusEn._(this._root);
TranslationsStreamStatusEn.internal(this._root);
final Translations _root; // ignore: unused_field
@ -203,42 +248,52 @@ class TranslationsStreamStatusEn {
// Path: stream.chat
class TranslationsStreamChatEn {
TranslationsStreamChatEn._(this._root);
TranslationsStreamChatEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get disabled => 'CHAT DISABLED';
String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}';
String disabled_timeout({required Object time}) => 'Timeout expires: ${time}';
/// Chat message showing timeout events
TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' for '),
time,
], style: style, recognizer: recognizer);
]);
/// Stream ended footer at bottom of chat
String get ended => 'STREAM ENDED';
/// Chat message showing stream zaps
TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
late final TranslationsStreamChatWriteEn write = TranslationsStreamChatWriteEn._(_root);
late final TranslationsStreamChatBadgeEn badge = TranslationsStreamChatBadgeEn._(_root);
late final TranslationsStreamChatRaidEn raid = TranslationsStreamChatRaidEn._(_root);
late final TranslationsStreamChatWriteEn write = TranslationsStreamChatWriteEn.internal(_root);
late final TranslationsStreamChatBadgeEn badge = TranslationsStreamChatBadgeEn.internal(_root);
late final TranslationsStreamChatRaidEn raid = TranslationsStreamChatRaidEn.internal(_root);
}
// Path: stream.error
class TranslationsStreamErrorEn {
TranslationsStreamErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String load_failed({required Object url}) => 'Failed to load stream from ${url}';
}
// Path: zap.error
class TranslationsZapErrorEn {
TranslationsZapErrorEn._(this._root);
TranslationsZapErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field
@ -248,9 +303,9 @@ class TranslationsZapErrorEn {
String get no_lud16 => 'No lightning address found';
}
// Path: profile.edit
class TranslationsProfileEditEn {
TranslationsProfileEditEn._(this._root);
// Path: settings.profile
class TranslationsSettingsProfileEn {
TranslationsSettingsProfileEn.internal(this._root);
final Translations _root; // ignore: unused_field
@ -259,12 +314,28 @@ class TranslationsProfileEditEn {
String get about => 'About';
String get nip05 => 'Nostr Address';
String get lud16 => 'Lightning Address';
late final TranslationsProfileEditErrorEn error = TranslationsProfileEditErrorEn._(_root);
late final TranslationsSettingsProfileErrorEn error = TranslationsSettingsProfileErrorEn.internal(_root);
}
// Path: settings.wallet
class TranslationsSettingsWalletEn {
TranslationsSettingsWalletEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
String get disconnect_wallet => 'Disconnect Wallet';
String get connect_1tap => '1-Tap Connection';
String get paste => 'Paste URL';
String get balance => 'Balance';
String get name => 'Wallet';
late final TranslationsSettingsWalletErrorEn error = TranslationsSettingsWalletErrorEn.internal(_root);
}
// Path: login.error
class TranslationsLoginErrorEn {
TranslationsLoginErrorEn._(this._root);
TranslationsLoginErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field
@ -272,9 +343,21 @@ class TranslationsLoginErrorEn {
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
class TranslationsStreamChatWriteEn {
TranslationsStreamChatWriteEn._(this._root);
TranslationsStreamChatWriteEn.internal(this._root);
final Translations _root; // ignore: unused_field
@ -292,7 +375,7 @@ class TranslationsStreamChatWriteEn {
// Path: stream.chat.badge
class TranslationsStreamChatBadgeEn {
TranslationsStreamChatBadgeEn._(this._root);
TranslationsStreamChatBadgeEn.internal(this._root);
final Translations _root; // ignore: unused_field
@ -304,25 +387,25 @@ class TranslationsStreamChatBadgeEn {
// Path: stream.chat.raid
class TranslationsStreamChatRaidEn {
TranslationsStreamChatRaidEn._(this._root);
TranslationsStreamChatRaidEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
/// Chat raid message to another stream
String to({ required Object name}) => 'RAIDING ${name}';
String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid message from another stream
String from({ required Object name}) => 'RAID FROM ${name}';
String from({required Object name}) => 'RAID FROM ${name}';
/// Countdown timer for auto-raiding
String countdown({ required Object time}) => 'Raiding in ${time}';
String countdown({required Object time}) => 'Raiding in ${time}';
}
// Path: profile.edit.error
class TranslationsProfileEditErrorEn {
TranslationsProfileEditErrorEn._(this._root);
// Path: settings.profile.error
class TranslationsSettingsProfileErrorEn {
TranslationsSettingsProfileErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field
@ -330,6 +413,17 @@ class TranslationsProfileEditErrorEn {
String get logged_out => 'Cant edit profile when logged out';
}
// Path: settings.wallet.error
class TranslationsSettingsWalletErrorEn {
TranslationsSettingsWalletErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get logged_out => 'Cant connect wallet when logged out';
String get nwc_auth_event_not_found => 'No wallet auth event found';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on Translations {
@ -339,39 +433,42 @@ extension on Translations {
case 'most_zapped_streamers': return 'Most Zapped Streamers';
case 'no_user_found': return 'No user found';
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,
one: '1 viewer',
other: '${n} viewers',
other: '${NumberFormat.decimalPattern('en').format(n)} viewers',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'PLANNED';
case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}';
case 'stream.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_timeout': return ({ required Object time}) => 'Timeout expires: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout expires: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' for '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM ENDED';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Write message';
case 'stream.chat.write.no_signer': return 'Can\'t write messages with npub login';
case 'stream.chat.write.login': return 'Please login to send messages';
case 'stream.chat.badge.awarded_to': return 'Awarded to:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding in ${time}';
case 'stream.error.load_failed': return ({required Object url}) => 'Failed to load stream from ${url}';
case 'goal.title': return ({required Object amount}) => 'Goal: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Remaining: ${amount}';
case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Login';
case 'button.logout': return 'Logout';
@ -382,35 +479,65 @@ extension on Translations {
case 'button.unmute': return 'Unmute';
case 'button.share': return 'Share';
case 'button.save': return 'Save';
case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note by ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream by ${name}';
case 'button.connect': return 'Connect';
case 'button.settings': return 'Settings';
case 'embed.article_by': return ({required Object name}) => 'Article by ${name}';
case 'embed.note_by': return ({required Object name}) => 'Note by ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return 'Following';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planned';
case 'stream_list.ended': return 'Ended';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Custom Amount';
case 'zap.confirm': return 'Confirm';
case 'zap.comment': return 'Comment';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Open in Wallet';
case 'zap.button_connect_wallet': return 'Connect Wallet';
case 'zap.copy': return 'Copied to clipboard';
case 'zap.error.invalid_custom_amount': return 'Invalid custom amount';
case 'zap.error.no_wallet': return 'No lightning wallet installed';
case 'zap.error.no_lud16': return 'No lightning address found';
case 'profile.past_streams': return 'Past Streams';
case 'profile.edit.display_name': return 'Display Name';
case 'profile.edit.about': return 'About';
case 'profile.edit.nip05': return 'Nostr Address';
case 'profile.edit.lud16': return 'Lightning Address';
case 'profile.edit.error.logged_out': return 'Cant edit profile when logged out';
case 'settings.button_profile': return 'Edit Profile';
case 'settings.button_wallet': return 'Wallet Settings';
case 'settings.profile.display_name': return 'Display Name';
case 'settings.profile.about': return 'About';
case 'settings.profile.nip05': return 'Nostr Address';
case 'settings.profile.lud16': return 'Lightning Address';
case 'settings.profile.error.logged_out': return 'Cant edit profile when logged out';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Disconnect Wallet';
case 'settings.wallet.connect_1tap': return '1-Tap Connection';
case 'settings.wallet.paste': return 'Paste URL';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'No wallet auth event found';
case 'login.username': return 'Username';
case 'login.amber': return 'Login with Amber';
case 'login.key': return 'Login with Key';
case 'login.create': return 'Create Account';
case 'login.error.invalid_key': return 'Invalid key';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsEs implements Translations {
class TranslationsEs extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsEs({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsEs implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsEs implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsEs _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsEs implements Translations {
/// Un usuario 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
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n,
one: '1 espectador',
other: '${n} espectadores',
other: '${NumberFormat.decimalPattern('es').format(n)} espectadores',
);
@override late final _TranslationsStreamEs stream = _TranslationsStreamEs._(_root);
@ -66,36 +69,39 @@ class TranslationsEs implements Translations {
@override late final _TranslationsZapEs zap = _TranslationsZapEs._(_root);
@override late final _TranslationsProfileEs profile = _TranslationsProfileEs._(_root);
@override late final _TranslationsSettingsEs settings = _TranslationsSettingsEs._(_root);
@override late final _TranslationsLoginEs login = _TranslationsLoginEs._(_root);
@override late final _TranslationsLiveEs live = _TranslationsLiveEs._(_root);
}
// Path: stream
class _TranslationsStreamEs implements TranslationsStreamEn {
_TranslationsStreamEs._(this._root);
class _TranslationsStreamEs extends TranslationsStreamEn {
_TranslationsStreamEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusEs status = _TranslationsStreamStatusEs._(_root);
@override String started({ required Object timestamp}) => 'Comenzó ${timestamp}';
@override 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);
}
// Path: goal
class _TranslationsGoalEs implements TranslationsGoalEn {
_TranslationsGoalEs._(this._root);
class _TranslationsGoalEs extends TranslationsGoalEn {
_TranslationsGoalEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Objetivo: ${amount}';
@override String remaining({ required Object amount}) => 'Resto: ${amount}';
@override String title({required Object amount}) => 'Objetivo: ${amount}';
@override String remaining({required Object amount}) => 'Resto: ${amount}';
@override String get complete => 'COMPLETAR';
}
// Path: button
class _TranslationsButtonEs implements TranslationsButtonEn {
_TranslationsButtonEs._(this._root);
class _TranslationsButtonEs extends TranslationsButtonEn {
_TranslationsButtonEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonEs implements TranslationsButtonEn {
@override String get unmute => 'Dejar de silenciar';
@override String get share => 'Compartir';
@override String get save => 'Guardar';
@override String get connect => 'Conectar';
@override String get settings => 'Ajustes';
}
// Path: embed
class _TranslationsEmbedEs implements TranslationsEmbedEn {
_TranslationsEmbedEs._(this._root);
class _TranslationsEmbedEs extends TranslationsEmbedEn {
_TranslationsEmbedEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Artículo de ${name}';
@override String note_by({ required Object name}) => 'Nota de ${name}';
@override String live_stream_by({ required Object name}) => 'Transmisión en directo por ${name}';
@override String article_by({required Object name}) => 'Artículo de ${name}';
@override String note_by({required Object name}) => 'Nota de ${name}';
@override String live_stream_by({required Object name}) => 'Transmisión en directo por ${name}';
}
// Path: stream_list
class _TranslationsStreamListEs implements TranslationsStreamListEn {
_TranslationsStreamListEs._(this._root);
class _TranslationsStreamListEs extends TranslationsStreamListEn {
_TranslationsStreamListEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListEs implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapEs implements TranslationsZapEn {
_TranslationsZapEs._(this._root);
class _TranslationsZapEs extends TranslationsZapEn {
_TranslationsZapEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Importe personalizado';
@override String get confirm => 'Confirmar';
@override String get comment => 'Comentario';
@override String button_zap_ready({ required Object amount}) => 'Zapear ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zapear ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Abrir en cartera';
@override String get button_connect_wallet => 'Billetera Connect';
@override String get copy => 'Copiado al portapapeles';
@override late final _TranslationsZapErrorEs error = _TranslationsZapErrorEs._(_root);
}
// Path: profile
class _TranslationsProfileEs implements TranslationsProfileEn {
_TranslationsProfileEs._(this._root);
class _TranslationsProfileEs extends TranslationsProfileEn {
_TranslationsProfileEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Transmisiones anteriores';
@override late final _TranslationsProfileEditEs edit = _TranslationsProfileEditEs._(_root);
}
// Path: settings
class _TranslationsSettingsEs extends TranslationsSettingsEn {
_TranslationsSettingsEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Editar perfil';
@override String get button_wallet => 'Configuración de la cartera';
@override late final _TranslationsSettingsProfileEs profile = _TranslationsSettingsProfileEs._(_root);
@override late final _TranslationsSettingsWalletEs wallet = _TranslationsSettingsWalletEs._(_root);
}
// Path: login
class _TranslationsLoginEs implements TranslationsLoginEn {
_TranslationsLoginEs._(this._root);
class _TranslationsLoginEs extends TranslationsLoginEn {
_TranslationsLoginEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginEs implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusEs implements TranslationsStreamStatusEn {
_TranslationsStreamStatusEs._(this._root);
class _TranslationsStreamStatusEs extends TranslationsStreamStatusEn {
_TranslationsStreamStatusEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusEs implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatEs implements TranslationsStreamChatEn {
_TranslationsStreamChatEs._(this._root);
class _TranslationsStreamChatEs extends TranslationsStreamChatEn {
_TranslationsStreamChatEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DESHABILITADO';
@override String disabled_timeout({ required Object time}) => 'El tiempo de espera expira: ${time}';
@override String disabled_timeout({required Object time}) => 'El tiempo de espera expira: ${time}';
/// Mensaje de chat que muestra los eventos de tiempo de espera
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' para '),
time,
], style: style, recognizer: recognizer);
]);
/// Stream finalizó en la parte inferior del chat
@override String get ended => 'STREAM FINED';
/// Mensaje de chat que muestra zaps de flujo
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapearon '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteEs write = _TranslationsStreamChatWriteEs._(_root);
@override late final _TranslationsStreamChatBadgeEs badge = _TranslationsStreamChatBadgeEs._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatEs implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorEs implements TranslationsZapErrorEn {
_TranslationsZapErrorEs._(this._root);
class _TranslationsZapErrorEs extends TranslationsZapErrorEn {
_TranslationsZapErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorEs implements TranslationsZapErrorEn {
@override String get no_lud16 => 'No se ha encontrado ninguna dirección de rayos';
}
// Path: profile.edit
class _TranslationsProfileEditEs implements TranslationsProfileEditEn {
_TranslationsProfileEditEs._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileEs extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get display_name => 'Mostrar nombre';
@override String get about => 'Sobre ti';
@override String get about => 'Acerca de';
@override String get nip05 => 'Dirección Nostr';
@override String get lud16 => 'Dirección del rayo';
@override late final _TranslationsProfileEditErrorEs error = _TranslationsProfileEditErrorEs._(_root);
@override late final _TranslationsSettingsProfileErrorEs error = _TranslationsSettingsProfileErrorEs._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletEs extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Cartera Connect (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Desconectar Cartera';
@override String get connect_1tap => 'Conexión de 1 toma';
@override String get paste => 'Pegar URL';
@override String get balance => 'Saldo';
@override String get name => 'Cartera';
@override late final _TranslationsSettingsWalletErrorEs error = _TranslationsSettingsWalletErrorEs._(_root);
}
// Path: login.error
class _TranslationsLoginErrorEs implements TranslationsLoginErrorEn {
_TranslationsLoginErrorEs._(this._root);
class _TranslationsLoginErrorEs extends TranslationsLoginErrorEn {
_TranslationsLoginErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorEs implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteEs implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteEs._(this._root);
class _TranslationsStreamChatWriteEs extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteEs implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeEs implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeEs._(this._root);
class _TranslationsStreamChatBadgeEs extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeEs implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidEs implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidEs._(this._root);
class _TranslationsStreamChatRaidEs extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
/// Mensaje de raid de chat a otro flujo
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Mensaje de incursión en el chat desde otro flujo
@override String from({ required Object name}) => 'RAID DESDE ${name}';
@override String from({required Object name}) => 'RAID DESDE ${name}';
/// Temporizador de cuenta atrás para auto-raiding
@override String countdown({ required Object time}) => 'Incursiones en ${time}';
@override String countdown({required Object time}) => 'Incursiones en ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorEs implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorEs._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorEs extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorEs implements TranslationsProfileEditErrorEn
@override String get logged_out => 'No se puede editar el perfil cuando se cierra la sesión';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorEs extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field
// Translations
@override String get logged_out => 'No se puede conectar el monedero al cerrar la sesión';
@override String get nwc_auth_event_not_found => 'No se ha encontrado ningún evento de autenticación de cartera';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsEs {
@ -337,39 +421,41 @@ extension on TranslationsEs {
case 'most_zapped_streamers': return 'Serpentinas más derribadas';
case 'no_user_found': return 'No se ha encontrado ningún usuario';
case 'anon': return 'Anónimo';
case '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,
one: '1 espectador',
other: '${n} espectadores',
other: '${NumberFormat.decimalPattern('es').format(n)} espectadores',
);
case 'stream.status.live': return 'EN VIVO';
case 'stream.status.ended': return 'FIN';
case 'stream.status.planned': return 'PLANIFICADO';
case 'stream.started': return ({ required Object timestamp}) => 'Comenzó ${timestamp}';
case 'stream.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_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, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'El tiempo de espera expira: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' para '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM FINED';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapearon '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Escribir mensaje';
case 'stream.chat.write.no_signer': return 'No se pueden escribir mensajes con el login npub';
case 'stream.chat.write.login': return 'Inicie sesión para enviar mensajes';
case 'stream.chat.badge.awarded_to': return 'Concedido a:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID DESDE ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Incursiones en ${time}';
case 'goal.title': return ({ required Object amount}) => 'Objetivo: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Resto: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID DESDE ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Incursiones en ${time}';
case 'goal.title': return ({required Object amount}) => 'Objetivo: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Resto: ${amount}';
case 'goal.complete': return 'COMPLETAR';
case 'button.login': return 'Iniciar Sesión';
case 'button.logout': return 'Cerrar sesión';
@ -380,35 +466,65 @@ extension on TranslationsEs {
case 'button.unmute': return 'Dejar de silenciar';
case 'button.share': return 'Compartir';
case 'button.save': return 'Guardar';
case 'embed.article_by': return ({ required Object name}) => 'Artículo de ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Nota de ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Transmisión en directo por ${name}';
case 'button.connect': return 'Conectar';
case 'button.settings': return 'Ajustes';
case 'embed.article_by': return ({required Object name}) => 'Artículo de ${name}';
case 'embed.note_by': return ({required Object name}) => 'Nota de ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Transmisión en directo por ${name}';
case 'stream_list.following': return 'Siguiendo';
case 'stream_list.live': return 'En directo';
case 'stream_list.planned': return 'Planificado';
case 'stream_list.ended': return 'Finalizado';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Importe personalizado';
case 'zap.confirm': return 'Confirmar';
case 'zap.comment': return 'Comentario';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zapear ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zapear ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Abrir en cartera';
case 'zap.button_connect_wallet': return 'Billetera Connect';
case 'zap.copy': return 'Copiado al portapapeles';
case 'zap.error.invalid_custom_amount': return 'Importe personalizado no válido';
case 'zap.error.no_wallet': return 'Sin monedero relámpago instalado';
case 'zap.error.no_lud16': return 'No se ha encontrado ninguna dirección de rayos';
case 'profile.past_streams': return 'Transmisiones anteriores';
case 'profile.edit.display_name': return 'Mostrar nombre';
case 'profile.edit.about': return 'Sobre ti';
case 'profile.edit.nip05': return 'Dirección Nostr';
case 'profile.edit.lud16': return 'Dirección del rayo';
case 'profile.edit.error.logged_out': return 'No se puede editar el perfil cuando se cierra la sesión';
case 'settings.button_profile': return 'Editar perfil';
case 'settings.button_wallet': return 'Configuración de la cartera';
case 'settings.profile.display_name': return 'Mostrar nombre';
case 'settings.profile.about': return 'Acerca de';
case 'settings.profile.nip05': return 'Dirección Nostr';
case 'settings.profile.lud16': return 'Dirección del rayo';
case 'settings.profile.error.logged_out': return 'No se puede editar el perfil cuando se cierra la sesión';
case 'settings.wallet.connect_wallet': return 'Cartera Connect (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Desconectar Cartera';
case 'settings.wallet.connect_1tap': return 'Conexión de 1 toma';
case 'settings.wallet.paste': return 'Pegar URL';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'No se ha encontrado ningún evento de autenticación de cartera';
case 'login.username': return 'Usuario';
case 'login.amber': return 'Iniciar sesión con Amber';
case 'login.key': return 'Inicio de sesión con clave';
case 'login.create': return 'Crear una cuenta';
case 'login.error.invalid_key': return 'Clave no válida';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsFi implements Translations {
class TranslationsFi extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsFi({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsFi implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsFi implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsFi _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsFi implements Translations {
/// Nimetön käyttäjä
@override String get anon => 'Anon';
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('fi').format(n)} sats';
/// Streamin katsojien määrä
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n,
one: '1 katsoja',
other: '${n} katsojaa',
other: '${NumberFormat.decimalPattern('fi').format(n)} katsojat',
);
@override late final _TranslationsStreamFi stream = _TranslationsStreamFi._(_root);
@ -66,36 +69,39 @@ class TranslationsFi implements Translations {
@override late final _TranslationsZapFi zap = _TranslationsZapFi._(_root);
@override late final _TranslationsProfileFi profile = _TranslationsProfileFi._(_root);
@override late final _TranslationsSettingsFi settings = _TranslationsSettingsFi._(_root);
@override late final _TranslationsLoginFi login = _TranslationsLoginFi._(_root);
@override late final _TranslationsLiveFi live = _TranslationsLiveFi._(_root);
}
// Path: stream
class _TranslationsStreamFi implements TranslationsStreamEn {
_TranslationsStreamFi._(this._root);
class _TranslationsStreamFi extends TranslationsStreamEn {
_TranslationsStreamFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusFi status = _TranslationsStreamStatusFi._(_root);
@override String started({ required Object timestamp}) => 'Aloitettu ${timestamp}';
@override String started({required Object timestamp}) => 'Aloitettu ${timestamp}';
@override String notification({required Object name}) => '${name} meni suoraksi!';
@override late final _TranslationsStreamChatFi chat = _TranslationsStreamChatFi._(_root);
}
// Path: goal
class _TranslationsGoalFi implements TranslationsGoalEn {
_TranslationsGoalFi._(this._root);
class _TranslationsGoalFi extends TranslationsGoalEn {
_TranslationsGoalFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Tavoite: ${amount}';
@override String remaining({ required Object amount}) => 'Jäljellä: ${amount}';
@override String title({required Object amount}) => 'Tavoite: ${amount}';
@override String remaining({required Object amount}) => 'Jäljellä: ${amount}';
@override String get complete => 'TÄYDELLINEN';
}
// Path: button
class _TranslationsButtonFi implements TranslationsButtonEn {
_TranslationsButtonFi._(this._root);
class _TranslationsButtonFi extends TranslationsButtonEn {
_TranslationsButtonFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonFi implements TranslationsButtonEn {
@override String get unmute => 'Poista mykistys';
@override String get share => 'Jaa';
@override String get save => 'Tallenna';
@override String get connect => 'Yhdistä';
@override String get settings => 'Asetukset';
}
// Path: embed
class _TranslationsEmbedFi implements TranslationsEmbedEn {
_TranslationsEmbedFi._(this._root);
class _TranslationsEmbedFi extends TranslationsEmbedEn {
_TranslationsEmbedFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Artikkeli ${name}';
@override String note_by({ required Object name}) => 'Viesti lähettäjältä ${name}';
@override String live_stream_by({ required Object name}) => 'Suora lähetys osoitteessa ${name}';
@override String article_by({required Object name}) => 'Artikkeli ${name}';
@override String note_by({required Object name}) => 'Viesti lähettäjältä ${name}';
@override String live_stream_by({required Object name}) => 'Suora lähetys osoitteessa ${name}';
}
// Path: stream_list
class _TranslationsStreamListFi implements TranslationsStreamListEn {
_TranslationsStreamListFi._(this._root);
class _TranslationsStreamListFi extends TranslationsStreamListEn {
_TranslationsStreamListFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListFi implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapFi implements TranslationsZapEn {
_TranslationsZapFi._(this._root);
class _TranslationsZapFi extends TranslationsZapEn {
_TranslationsZapFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Mukautettu määrä';
@override String get confirm => 'Vahvista';
@override String get comment => 'Kommentoi';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} satsia';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} satsia';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Avaa lompakossa';
@override String get button_connect_wallet => 'Yhdistä lompakko';
@override String get copy => 'Kopioitu leikepöydälle';
@override late final _TranslationsZapErrorFi error = _TranslationsZapErrorFi._(_root);
}
// Path: profile
class _TranslationsProfileFi implements TranslationsProfileEn {
_TranslationsProfileFi._(this._root);
class _TranslationsProfileFi extends TranslationsProfileEn {
_TranslationsProfileFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Aikaisemmat lähetykset';
@override late final _TranslationsProfileEditFi edit = _TranslationsProfileEditFi._(_root);
}
// Path: settings
class _TranslationsSettingsFi extends TranslationsSettingsEn {
_TranslationsSettingsFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Muokkaa profiilia';
@override String get button_wallet => 'Lompakon asetukset';
@override late final _TranslationsSettingsProfileFi profile = _TranslationsSettingsProfileFi._(_root);
@override late final _TranslationsSettingsWalletFi wallet = _TranslationsSettingsWalletFi._(_root);
}
// Path: login
class _TranslationsLoginFi implements TranslationsLoginEn {
_TranslationsLoginFi._(this._root);
class _TranslationsLoginFi extends TranslationsLoginEn {
_TranslationsLoginFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginFi implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusFi implements TranslationsStreamStatusEn {
_TranslationsStreamStatusFi._(this._root);
class _TranslationsStreamStatusFi extends TranslationsStreamStatusEn {
_TranslationsStreamStatusFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusFi implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatFi implements TranslationsStreamChatEn {
_TranslationsStreamChatFi._(this._root);
class _TranslationsStreamChatFi extends TranslationsStreamChatEn {
_TranslationsStreamChatFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT POISTETTU KÄYTÖSTÄ';
@override String disabled_timeout({ required Object time}) => 'Aikakatkaisu päättyy: ${time}';
@override String disabled_timeout({required Object time}) => 'Aikakatkaisu päättyy: ${time}';
/// Chat-viesti, joka näyttää aikakatkaisutapahtumat
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' ajastettu '),
user,
const TextSpan(text: ' for '),
time,
], style: style, recognizer: recognizer);
]);
/// Virta päättyi alatunnisteen alareunaan chatissa
@override String get ended => 'STREAM PÄÄTTYNYT';
/// Chat-viestin näyttäminen stream zaps
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zappasi '),
amount,
const TextSpan(text: ' satsia'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteFi write = _TranslationsStreamChatWriteFi._(_root);
@override late final _TranslationsStreamChatBadgeFi badge = _TranslationsStreamChatBadgeFi._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatFi implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorFi implements TranslationsZapErrorEn {
_TranslationsZapErrorFi._(this._root);
class _TranslationsZapErrorFi extends TranslationsZapErrorEn {
_TranslationsZapErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorFi implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Salamaosoitetta ei löytynyt';
}
// Path: profile.edit
class _TranslationsProfileEditFi implements TranslationsProfileEditEn {
_TranslationsProfileEditFi._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileFi extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get display_name => 'Näytön nimi';
@override String get about => 'Tietoja';
@override String get nip05 => 'Nostr-osoite';
@override String get lud16 => 'Lightning-osoite';
@override late final _TranslationsProfileEditErrorFi error = _TranslationsProfileEditErrorFi._(_root);
@override String get nip05 => 'Nostr Osoite';
@override String get lud16 => 'Salama osoite';
@override late final _TranslationsSettingsProfileErrorFi error = _TranslationsSettingsProfileErrorFi._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletFi extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect-lompakko (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Irrota lompakko';
@override String get connect_1tap => '1-Tap-liitäntä';
@override String get paste => 'Liitä URL-osoite';
@override String get balance => 'Balance';
@override String get name => 'Lompakko';
@override late final _TranslationsSettingsWalletErrorFi error = _TranslationsSettingsWalletErrorFi._(_root);
}
// Path: login.error
class _TranslationsLoginErrorFi implements TranslationsLoginErrorEn {
_TranslationsLoginErrorFi._(this._root);
class _TranslationsLoginErrorFi extends TranslationsLoginErrorEn {
_TranslationsLoginErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorFi implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteFi implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteFi._(this._root);
class _TranslationsStreamChatWriteFi extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteFi implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeFi implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeFi._(this._root);
class _TranslationsStreamChatBadgeFi extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeFi implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidFi implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidFi._(this._root);
class _TranslationsStreamChatRaidFi extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
/// Chat-viesti toiseen streamiin
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid viesti toisesta virrasta
@override String from({ required Object name}) => 'RAID FROM ${name}';
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Lähtölaskenta ajastin automaattista ratsastusta varten
@override String countdown({ required Object time}) => 'Ryöstöretket osoitteessa ${time}';
@override String countdown({required Object time}) => 'Ryöstöretket osoitteessa ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorFi implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorFi._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorFi extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorFi implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Ei voi muokata profiilia, kun on kirjautunut ulos';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorFi extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Ei voi muodostaa yhteyttä lompakkoon, kun on kirjautunut ulos';
@override String get nwc_auth_event_not_found => 'Ei lompakko-auth-tapahtumaa löydetty';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsFi {
@ -337,39 +421,41 @@ extension on TranslationsFi {
case 'most_zapped_streamers': return 'Eniten Zapped Streamers';
case 'no_user_found': return 'Käyttäjää ei löytynyt';
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,
one: '1 katsoja',
other: '${n} katsojaa',
other: '${NumberFormat.decimalPattern('fi').format(n)} katsojat',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'SUUNNITELTU';
case 'stream.started': return ({ required Object timestamp}) => 'Aloitettu ${timestamp}';
case 'stream.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_timeout': return ({ required Object time}) => 'Aikakatkaisu päättyy: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Aikakatkaisu päättyy: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' ajastettu '),
user,
const TextSpan(text: ' for '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM PÄÄTTYNYT';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zappasi '),
amount,
const TextSpan(text: ' satsia'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Kirjoita viesti';
case 'stream.chat.write.no_signer': return 'Ei voi kirjoittaa viestejä npub-kirjautumisella';
case 'stream.chat.write.login': return 'Kirjaudu sisään lähettääksesi viestejä';
case 'stream.chat.badge.awarded_to': return 'Myönnetty:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Ryöstöretket osoitteessa ${time}';
case 'goal.title': return ({ required Object amount}) => 'Tavoite: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Jäljellä: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Ryöstöretket osoitteessa ${time}';
case 'goal.title': return ({required Object amount}) => 'Tavoite: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Jäljellä: ${amount}';
case 'goal.complete': return 'TÄYDELLINEN';
case 'button.login': return 'Kirjaudu sisään';
case 'button.logout': return 'Kirjaudu ulos';
@ -380,35 +466,65 @@ extension on TranslationsFi {
case 'button.unmute': return 'Poista mykistys';
case 'button.share': return 'Jaa';
case 'button.save': return 'Tallenna';
case 'embed.article_by': return ({ required Object name}) => 'Artikkeli ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Viesti lähettäjältä ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Suora lähetys osoitteessa ${name}';
case 'button.connect': return 'Yhdistä';
case 'button.settings': return 'Asetukset';
case 'embed.article_by': return ({required Object name}) => 'Artikkeli ${name}';
case 'embed.note_by': return ({required Object name}) => 'Viesti lähettäjältä ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Suora lähetys osoitteessa ${name}';
case 'stream_list.following': return 'Seuraa';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Suunniteltu';
case 'stream_list.ended': return 'Päättynyt';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Mukautettu määrä';
case 'zap.confirm': return 'Vahvista';
case 'zap.comment': return 'Kommentoi';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} satsia';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} satsia';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Avaa lompakossa';
case 'zap.button_connect_wallet': return 'Yhdistä lompakko';
case 'zap.copy': return 'Kopioitu leikepöydälle';
case 'zap.error.invalid_custom_amount': return 'Virheellinen mukautettu määrä';
case 'zap.error.no_wallet': return 'Ei asennettua salamalompakkoa';
case 'zap.error.no_lud16': return 'Salamaosoitetta ei löytynyt';
case 'profile.past_streams': return 'Aikaisemmat lähetykset';
case 'profile.edit.display_name': return 'Näytön nimi';
case 'profile.edit.about': return 'Tietoja';
case 'profile.edit.nip05': return 'Nostr-osoite';
case 'profile.edit.lud16': return 'Lightning-osoite';
case 'profile.edit.error.logged_out': return 'Ei voi muokata profiilia, kun on kirjautunut ulos';
case 'settings.button_profile': return 'Muokkaa profiilia';
case 'settings.button_wallet': return 'Lompakon asetukset';
case 'settings.profile.display_name': return 'Näytön nimi';
case 'settings.profile.about': return 'Tietoja';
case 'settings.profile.nip05': return 'Nostr Osoite';
case 'settings.profile.lud16': return 'Salama osoite';
case 'settings.profile.error.logged_out': return 'Ei voi muokata profiilia, kun on kirjautunut ulos';
case 'settings.wallet.connect_wallet': return 'Connect-lompakko (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Irrota lompakko';
case 'settings.wallet.connect_1tap': return '1-Tap-liitäntä';
case 'settings.wallet.paste': return 'Liitä URL-osoite';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'Ei lompakko-auth-tapahtumaa löydetty';
case 'login.username': return 'Käyttäjätunnus';
case 'login.amber': return 'Kirjaudu sisään Amber kanssa';
case 'login.key': return 'Kirjaudu sisään avaimella';
case 'login.create': return 'Luo tili';
case 'login.error.invalid_key': return 'Virheellinen avain';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsFr implements Translations {
class TranslationsFr extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsFr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsFr implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsFr implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsFr _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsFr implements Translations {
/// Un utilisateur 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
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
one: '1 téléspectateur',
other: '${n} spectateurs',
other: '${NumberFormat.decimalPattern('fr').format(n)} téléspectateurs',
);
@override late final _TranslationsStreamFr stream = _TranslationsStreamFr._(_root);
@ -66,36 +69,39 @@ class TranslationsFr implements Translations {
@override late final _TranslationsZapFr zap = _TranslationsZapFr._(_root);
@override late final _TranslationsProfileFr profile = _TranslationsProfileFr._(_root);
@override late final _TranslationsSettingsFr settings = _TranslationsSettingsFr._(_root);
@override late final _TranslationsLoginFr login = _TranslationsLoginFr._(_root);
@override late final _TranslationsLiveFr live = _TranslationsLiveFr._(_root);
}
// Path: stream
class _TranslationsStreamFr implements TranslationsStreamEn {
_TranslationsStreamFr._(this._root);
class _TranslationsStreamFr extends TranslationsStreamEn {
_TranslationsStreamFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusFr status = _TranslationsStreamStatusFr._(_root);
@override String started({ required Object timestamp}) => 'Commencé à ${timestamp}';
@override String started({required Object timestamp}) => 'Commencé à ${timestamp}';
@override String notification({required Object name}) => '${name} est en ligne !';
@override late final _TranslationsStreamChatFr chat = _TranslationsStreamChatFr._(_root);
}
// Path: goal
class _TranslationsGoalFr implements TranslationsGoalEn {
_TranslationsGoalFr._(this._root);
class _TranslationsGoalFr extends TranslationsGoalEn {
_TranslationsGoalFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Objectif : ${amount}';
@override String remaining({ required Object amount}) => 'Reste : ${amount}';
@override String title({required Object amount}) => 'Objectif : ${amount}';
@override String remaining({required Object amount}) => 'Reste : ${amount}';
@override String get complete => 'COMPLET';
}
// Path: button
class _TranslationsButtonFr implements TranslationsButtonEn {
_TranslationsButtonFr._(this._root);
class _TranslationsButtonFr extends TranslationsButtonEn {
_TranslationsButtonFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonFr implements TranslationsButtonEn {
@override String get unmute => 'Retirer sourdine';
@override String get share => 'Partager';
@override String get save => 'Sauvegarder';
@override String get connect => 'Connecter';
@override String get settings => 'Paramètres';
}
// Path: embed
class _TranslationsEmbedFr implements TranslationsEmbedEn {
_TranslationsEmbedFr._(this._root);
class _TranslationsEmbedFr extends TranslationsEmbedEn {
_TranslationsEmbedFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Article par ${name}';
@override String note_by({ required Object name}) => 'Note par ${name}';
@override String live_stream_by({ required Object name}) => 'Retransmission en direct sur ${name}';
@override String article_by({required Object name}) => 'Article par ${name}';
@override String note_by({required Object name}) => 'Note par ${name}';
@override String live_stream_by({required Object name}) => 'Retransmission en direct sur ${name}';
}
// Path: stream_list
class _TranslationsStreamListFr implements TranslationsStreamListEn {
_TranslationsStreamListFr._(this._root);
class _TranslationsStreamListFr extends TranslationsStreamListEn {
_TranslationsStreamListFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListFr implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapFr implements TranslationsZapEn {
_TranslationsZapFr._(this._root);
class _TranslationsZapFr extends TranslationsZapEn {
_TranslationsZapFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Montant personnalisé';
@override String get confirm => 'Confirmer';
@override String get comment => 'Commenter';
@override String button_zap_ready({ required Object amount}) => 'Zapper ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zapper ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Ouvrir dans le portefeuille';
@override String get button_connect_wallet => 'Connecter le portefeuille';
@override String get copy => 'Copié dans le presse-papiers';
@override late final _TranslationsZapErrorFr error = _TranslationsZapErrorFr._(_root);
}
// Path: profile
class _TranslationsProfileFr implements TranslationsProfileEn {
_TranslationsProfileFr._(this._root);
class _TranslationsProfileFr extends TranslationsProfileEn {
_TranslationsProfileFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Streams passés';
@override late final _TranslationsProfileEditFr edit = _TranslationsProfileEditFr._(_root);
}
// Path: settings
class _TranslationsSettingsFr extends TranslationsSettingsEn {
_TranslationsSettingsFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Modifier le profil';
@override String get button_wallet => 'Paramètres du portefeuille';
@override late final _TranslationsSettingsProfileFr profile = _TranslationsSettingsProfileFr._(_root);
@override late final _TranslationsSettingsWalletFr wallet = _TranslationsSettingsWalletFr._(_root);
}
// Path: login
class _TranslationsLoginFr implements TranslationsLoginEn {
_TranslationsLoginFr._(this._root);
class _TranslationsLoginFr extends TranslationsLoginEn {
_TranslationsLoginFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginFr implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusFr implements TranslationsStreamStatusEn {
_TranslationsStreamStatusFr._(this._root);
class _TranslationsStreamStatusFr extends TranslationsStreamStatusEn {
_TranslationsStreamStatusFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusFr implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatFr implements TranslationsStreamChatEn {
_TranslationsStreamChatFr._(this._root);
class _TranslationsStreamChatFr extends TranslationsStreamChatEn {
_TranslationsStreamChatFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DISABLED';
@override String disabled_timeout({ required Object time}) => 'Le délai expire : ${time}';
@override String disabled_timeout({required Object time}) => 'Le délai expire : ${time}';
/// Message de chat indiquant les événements de dépassement de délai
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' '),
user,
const TextSpan(text: ' a expiré dans le temps pour '),
time,
], style: style, recognizer: recognizer);
]);
/// Stream ended footer at bottom of chat
@override String get ended => 'STREAM ENDED';
/// Message de chat montrant des zaps de flux
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' a zappé '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteFr write = _TranslationsStreamChatWriteFr._(_root);
@override late final _TranslationsStreamChatBadgeFr badge = _TranslationsStreamChatBadgeFr._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatFr implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorFr implements TranslationsZapErrorEn {
_TranslationsZapErrorFr._(this._root);
class _TranslationsZapErrorFr extends TranslationsZapErrorEn {
_TranslationsZapErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorFr implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Pas d\'adresse éclair trouvée';
}
// Path: profile.edit
class _TranslationsProfileEditFr implements TranslationsProfileEditEn {
_TranslationsProfileEditFr._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileFr extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get display_name => 'Nom d\'affichage';
@override String get about => 'À propos';
@override String get nip05 => 'Adresse Nostr';
@override String get lud16 => 'Adresse Lightning';
@override late final _TranslationsProfileEditErrorFr error = _TranslationsProfileEditErrorFr._(_root);
@override String get about => 'A propos de';
@override String get nip05 => 'Nostr Adresse';
@override String get lud16 => 'Adresse de la foudre';
@override late final _TranslationsSettingsProfileErrorFr error = _TranslationsSettingsProfileErrorFr._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletFr extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Portefeuille Connect (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Déconnecter le portefeuille';
@override String get connect_1tap => 'Connexion à 1 robinet';
@override String get paste => 'Coller l\'URL';
@override String get balance => 'Équilibre';
@override String get name => 'Portefeuille';
@override late final _TranslationsSettingsWalletErrorFr error = _TranslationsSettingsWalletErrorFr._(_root);
}
// Path: login.error
class _TranslationsLoginErrorFr implements TranslationsLoginErrorEn {
_TranslationsLoginErrorFr._(this._root);
class _TranslationsLoginErrorFr extends TranslationsLoginErrorEn {
_TranslationsLoginErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorFr implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteFr implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteFr._(this._root);
class _TranslationsStreamChatWriteFr extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteFr implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeFr implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeFr._(this._root);
class _TranslationsStreamChatBadgeFr extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeFr implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidFr implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidFr._(this._root);
class _TranslationsStreamChatRaidFr extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
/// Message de raid par chat vers un autre flux
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Message de raid sur le chat à partir d'un autre flux
@override String from({ required Object name}) => 'RAID FROM ${name}';
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Compte à rebours pour l'auto-raid
@override String countdown({ required Object time}) => 'Raid sur ${time}';
@override String countdown({required Object time}) => 'Raid sur ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorFr implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorFr._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorFr extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorFr implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Impossible de modifier le profil lorsque l\'on est déconnecté';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorFr extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Impossible de se connecter au portefeuille lorsque l\'on est déconnecté';
@override String get nwc_auth_event_not_found => 'Aucun événement d\'authentification de portefeuille n\'a été trouvé';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsFr {
@ -337,39 +421,41 @@ extension on TranslationsFr {
case 'most_zapped_streamers': return 'Les Streamers les plus zappés';
case 'no_user_found': return 'Aucun utilisateur trouvé';
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,
one: '1 téléspectateur',
other: '${n} spectateurs',
other: '${NumberFormat.decimalPattern('fr').format(n)} téléspectateurs',
);
case 'stream.status.live': return 'VIVRE';
case 'stream.status.ended': return 'FINI';
case 'stream.status.planned': return 'PRÉVU';
case 'stream.started': return ({ required Object timestamp}) => 'Commencé à ${timestamp}';
case 'stream.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_timeout': return ({ required Object time}) => 'Le délai expire : ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Le délai expire : ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' '),
user,
const TextSpan(text: ' a expiré dans le temps pour '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM ENDED';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' a zappé '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Message écrit';
case 'stream.chat.write.no_signer': return 'Impossible d\'écrire des messages avec le login npub';
case 'stream.chat.write.login': return 'Veuillez vous connecter pour envoyer des messages';
case 'stream.chat.badge.awarded_to': return 'Attribué à :';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raid sur ${time}';
case 'goal.title': return ({ required Object amount}) => 'Objectif : ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Reste : ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raid sur ${time}';
case 'goal.title': return ({required Object amount}) => 'Objectif : ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Reste : ${amount}';
case 'goal.complete': return 'COMPLET';
case 'button.login': return 'Se Connecter';
case 'button.logout': return 'Se déconnecter';
@ -380,35 +466,65 @@ extension on TranslationsFr {
case 'button.unmute': return 'Retirer sourdine';
case 'button.share': return 'Partager';
case 'button.save': return 'Sauvegarder';
case 'embed.article_by': return ({ required Object name}) => 'Article par ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note par ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Retransmission en direct sur ${name}';
case 'button.connect': return 'Connecter';
case 'button.settings': return 'Paramètres';
case 'embed.article_by': return ({required Object name}) => 'Article par ${name}';
case 'embed.note_by': return ({required Object name}) => 'Note par ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Retransmission en direct sur ${name}';
case 'stream_list.following': return 'Abonnements';
case 'stream_list.live': return 'En direct';
case 'stream_list.planned': return 'Planifié';
case 'stream_list.ended': return 'Terminé';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Montant personnalisé';
case 'zap.confirm': return 'Confirmer';
case 'zap.comment': return 'Commenter';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zapper ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zapper ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Ouvrir dans le portefeuille';
case 'zap.button_connect_wallet': return 'Connecter le portefeuille';
case 'zap.copy': return 'Copié dans le presse-papiers';
case 'zap.error.invalid_custom_amount': return 'Montant personnalisé non valide';
case 'zap.error.no_wallet': return 'Pas de porte-monnaie électronique installé';
case 'zap.error.no_lud16': return 'Pas d\'adresse éclair trouvée';
case 'profile.past_streams': return 'Streams passés';
case 'profile.edit.display_name': return 'Nom d\'affichage';
case 'profile.edit.about': return 'À propos';
case 'profile.edit.nip05': return 'Adresse Nostr';
case 'profile.edit.lud16': return 'Adresse Lightning';
case 'profile.edit.error.logged_out': return 'Impossible de modifier le profil lorsque l\'on est déconnecté';
case 'settings.button_profile': return 'Modifier le profil';
case 'settings.button_wallet': return 'Paramètres du portefeuille';
case 'settings.profile.display_name': return 'Nom d\'affichage';
case 'settings.profile.about': return 'A propos de';
case 'settings.profile.nip05': return 'Nostr Adresse';
case 'settings.profile.lud16': return 'Adresse de la foudre';
case 'settings.profile.error.logged_out': return 'Impossible de modifier le profil lorsque l\'on est déconnecté';
case 'settings.wallet.connect_wallet': return 'Portefeuille Connect (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Déconnecter le portefeuille';
case 'settings.wallet.connect_1tap': return 'Connexion à 1 robinet';
case 'settings.wallet.paste': return 'Coller l\'URL';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'Aucun événement d\'authentification de portefeuille n\'a été trouvé';
case 'login.username': return 'Nom dutilisateur';
case 'login.amber': return 'Se connecter avec Amber';
case 'login.key': return 'Connexion avec la clé';
case 'login.create': return 'Créer un Compte';
case 'login.error.invalid_key': return 'Clé non valide';
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;
}
}

View File

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

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsHu implements Translations {
class TranslationsHu extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsHu({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsHu implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsHu implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsHu _root = this; // ignore: unused_field
@ -53,7 +54,7 @@ class TranslationsHu implements Translations {
/// A stream nézőinek száma
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n,
one: '1 néző',
other: '${n} néző',
other: '${NumberFormat.decimalPattern('hu').format(n)} nézők',
);
@override late final _TranslationsStreamHu stream = _TranslationsStreamHu._(_root);
@ -66,36 +67,38 @@ class TranslationsHu implements Translations {
@override late final _TranslationsZapHu zap = _TranslationsZapHu._(_root);
@override late final _TranslationsProfileHu profile = _TranslationsProfileHu._(_root);
@override late final _TranslationsSettingsHu settings = _TranslationsSettingsHu._(_root);
@override late final _TranslationsLoginHu login = _TranslationsLoginHu._(_root);
}
// Path: stream
class _TranslationsStreamHu implements TranslationsStreamEn {
_TranslationsStreamHu._(this._root);
class _TranslationsStreamHu extends TranslationsStreamEn {
_TranslationsStreamHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusHu status = _TranslationsStreamStatusHu._(_root);
@override String started({ required Object timestamp}) => 'Elindult ${timestamp}';
@override String started({required Object timestamp}) => 'Elindult ${timestamp}';
@override String notification({required Object name}) => '${name} elindult!';
@override late final _TranslationsStreamChatHu chat = _TranslationsStreamChatHu._(_root);
}
// Path: goal
class _TranslationsGoalHu implements TranslationsGoalEn {
_TranslationsGoalHu._(this._root);
class _TranslationsGoalHu extends TranslationsGoalEn {
_TranslationsGoalHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Cél: ${amount}';
@override String remaining({ required Object amount}) => 'Maradék: ${amount}';
@override String title({required Object amount}) => 'Cél: ${amount}';
@override String remaining({required Object amount}) => 'Maradék: ${amount}';
@override String get complete => 'TELJES';
}
// Path: button
class _TranslationsButtonHu implements TranslationsButtonEn {
_TranslationsButtonHu._(this._root);
class _TranslationsButtonHu extends TranslationsButtonEn {
_TranslationsButtonHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
@ -117,23 +120,25 @@ class _TranslationsButtonHu implements TranslationsButtonEn {
@override String get unmute => 'Némítás visszavonása';
@override String get share => 'Megosztás';
@override String get save => 'Mentés';
@override String get connect => 'Csatlakozás';
@override String get settings => 'Beállítások';
}
// Path: embed
class _TranslationsEmbedHu implements TranslationsEmbedEn {
_TranslationsEmbedHu._(this._root);
class _TranslationsEmbedHu extends TranslationsEmbedEn {
_TranslationsEmbedHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'A ${name} cikke.';
@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 article_by({required Object name}) => 'Cikk ${name}';
@override String note_by({required Object name}) => '${name} bejegyzése';
@override String live_stream_by({required Object name}) => 'Élő közvetítés a ${name} oldalon';
}
// Path: stream_list
class _TranslationsStreamListHu implements TranslationsStreamListEn {
_TranslationsStreamListHu._(this._root);
class _TranslationsStreamListHu extends TranslationsStreamListEn {
_TranslationsStreamListHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
@ -145,37 +150,50 @@ class _TranslationsStreamListHu implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapHu implements TranslationsZapEn {
_TranslationsZapHu._(this._root);
class _TranslationsZapHu extends TranslationsZapEn {
_TranslationsZapHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Egyéni összeg';
@override String get confirm => 'Megerősítés';
@override String get comment => 'Hozzászólás';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} satoshi';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} satoshi';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Megnyitás a pénztárcában';
@override String get button_connect_wallet => 'Connect Wallet';
@override String get copy => 'Vágólapra másolva';
@override late final _TranslationsZapErrorHu error = _TranslationsZapErrorHu._(_root);
}
// Path: profile
class _TranslationsProfileHu implements TranslationsProfileEn {
_TranslationsProfileHu._(this._root);
class _TranslationsProfileHu extends TranslationsProfileEn {
_TranslationsProfileHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Múltbeli Streamek';
@override late final _TranslationsProfileEditHu edit = _TranslationsProfileEditHu._(_root);
}
// Path: settings
class _TranslationsSettingsHu extends TranslationsSettingsEn {
_TranslationsSettingsHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Profil szerkesztése';
@override String get button_wallet => 'Pénztárca beállítások';
@override late final _TranslationsSettingsProfileHu profile = _TranslationsSettingsProfileHu._(_root);
@override late final _TranslationsSettingsWalletHu wallet = _TranslationsSettingsWalletHu._(_root);
}
// Path: login
class _TranslationsLoginHu implements TranslationsLoginEn {
_TranslationsLoginHu._(this._root);
class _TranslationsLoginHu extends TranslationsLoginEn {
_TranslationsLoginHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
@ -188,8 +206,8 @@ class _TranslationsLoginHu implements TranslationsLoginEn {
}
// Path: stream.status
class _TranslationsStreamStatusHu implements TranslationsStreamStatusEn {
_TranslationsStreamStatusHu._(this._root);
class _TranslationsStreamStatusHu extends TranslationsStreamStatusEn {
_TranslationsStreamStatusHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
@ -200,35 +218,35 @@ class _TranslationsStreamStatusHu implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatHu implements TranslationsStreamChatEn {
_TranslationsStreamChatHu._(this._root);
class _TranslationsStreamChatHu extends TranslationsStreamChatEn {
_TranslationsStreamChatHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT KIKAPCSOLVA';
@override String disabled_timeout({ required Object time}) => 'Az időkorlát lejár: ${time}';
@override String disabled_timeout({required Object time}) => 'Az időkorlát lejár: ${time}';
/// Chat üzenet az időkorlátos események megjelenítésével
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' időzített '),
user,
const TextSpan(text: ' a '),
time,
const TextSpan(text: ' számára'),
], style: style, recognizer: recognizer);
const TextSpan(text: 'számára'),
]);
/// A stream véget ért lábléc a chat alján
@override String get ended => 'STREAM MEGSZÜNTETETT';
/// Csevegőüzenet, amely stream zapokat mutat
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zap-elt '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteHu write = _TranslationsStreamChatWriteHu._(_root);
@override late final _TranslationsStreamChatBadgeHu badge = _TranslationsStreamChatBadgeHu._(_root);
@ -236,8 +254,8 @@ class _TranslationsStreamChatHu implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorHu implements TranslationsZapErrorEn {
_TranslationsZapErrorHu._(this._root);
class _TranslationsZapErrorHu extends TranslationsZapErrorEn {
_TranslationsZapErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
@ -247,23 +265,37 @@ class _TranslationsZapErrorHu implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Nem talált villámcím';
}
// Path: profile.edit
class _TranslationsProfileEditHu implements TranslationsProfileEditEn {
_TranslationsProfileEditHu._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileHu extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get display_name => 'Megjelenített név';
@override String get about => 'Névjegy';
@override String get nip05 => 'Nostr-cím';
@override String get lud16 => 'Lightning-cím';
@override late final _TranslationsProfileEditErrorHu error = _TranslationsProfileEditErrorHu._(_root);
@override String get about => 'A oldalról';
@override String get nip05 => 'Nostr cím';
@override String get lud16 => 'Villám cím';
@override late final _TranslationsSettingsProfileErrorHu error = _TranslationsSettingsProfileErrorHu._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletHu extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Pénztárca lekapcsolása';
@override String get connect_1tap => '1-Tap csatlakozás';
@override String get paste => 'URL beillesztése';
@override late final _TranslationsSettingsWalletErrorHu error = _TranslationsSettingsWalletErrorHu._(_root);
}
// Path: login.error
class _TranslationsLoginErrorHu implements TranslationsLoginErrorEn {
_TranslationsLoginErrorHu._(this._root);
class _TranslationsLoginErrorHu extends TranslationsLoginErrorEn {
_TranslationsLoginErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
@ -272,8 +304,8 @@ class _TranslationsLoginErrorHu implements TranslationsLoginErrorEn {
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteHu implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteHu._(this._root);
class _TranslationsStreamChatWriteHu extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
@ -290,8 +322,8 @@ class _TranslationsStreamChatWriteHu implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeHu implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeHu._(this._root);
class _TranslationsStreamChatBadgeHu extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
@ -302,26 +334,26 @@ class _TranslationsStreamChatBadgeHu implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidHu implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidHu._(this._root);
class _TranslationsStreamChatRaidHu extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
/// Chat raid üzenet egy másik folyamba
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid üzenet egy másik folyamból
@override String from({ required Object name}) => 'RAID FROM ${name}';
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Visszaszámláló időzítő az automatikus lovagláshoz
@override String countdown({ required Object time}) => 'Raiding a ${time} oldalon';
@override String countdown({required Object time}) => 'Raiding a ${time} oldalon';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorHu implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorHu._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorHu extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
@ -329,6 +361,17 @@ class _TranslationsProfileEditErrorHu implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Kijelentkezve nem lehet profilt szerkeszteni';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorHu extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kijelentkezve nem lehet csatlakozni a pénztárcához';
@override String get nwc_auth_event_not_found => 'Nem találtak pénztárca-auth eseményt';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsHu {
@ -340,38 +383,39 @@ extension on TranslationsHu {
case 'anon': return 'Névtelen';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n,
one: '1 néző',
other: '${n} néző',
other: '${NumberFormat.decimalPattern('hu').format(n)} nézők',
);
case 'stream.status.live': return 'ÉLŐ';
case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'TERVEZETT';
case 'stream.started': return ({ required Object timestamp}) => 'Elindult ${timestamp}';
case 'stream.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_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, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Az időkorlát lejár: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' időzített '),
user,
const TextSpan(text: ' a '),
time,
const TextSpan(text: ' számára'),
], style: style, recognizer: recognizer);
const TextSpan(text: 'számára'),
]);
case 'stream.chat.ended': return 'STREAM MEGSZÜNTETETT';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zap-elt '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Üzenet írása';
case 'stream.chat.write.no_signer': return 'Nem tud üzeneteket írni az npub bejelentkezéssel';
case 'stream.chat.write.login': return 'Kérjük, jelentkezzen be az üzenetek küldéséhez';
case 'stream.chat.badge.awarded_to': return 'Elnyerte:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding a ${time} oldalon';
case 'goal.title': return ({ required Object amount}) => 'Cél: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Maradék: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding a ${time} oldalon';
case 'goal.title': return ({required Object amount}) => 'Cél: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Maradék: ${amount}';
case 'goal.complete': return 'TELJES';
case 'button.login': return 'Bejelentkezés';
case 'button.logout': return 'Kijelentkezés';
@ -382,30 +426,41 @@ extension on TranslationsHu {
case 'button.unmute': return 'Némítás visszavonása';
case 'button.share': return 'Megosztás';
case 'button.save': return 'Mentés';
case 'embed.article_by': return ({ required Object name}) => 'A ${name} cikke.';
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 'button.connect': return 'Csatlakozás';
case 'button.settings': return 'Beállítások';
case 'embed.article_by': return ({required Object name}) => 'Cikk ${name}';
case 'embed.note_by': return ({required Object name}) => '${name} bejegyzése';
case 'embed.live_stream_by': return ({required Object name}) => 'Élő közvetítés a ${name} oldalon';
case 'stream_list.following': return 'Követettek bejegyzései';
case 'stream_list.live': return 'Élő';
case 'stream_list.planned': return 'Tervezett';
case 'stream_list.ended': return 'Véget ért';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Egyéni összeg';
case 'zap.confirm': return 'Megerősítés';
case 'zap.comment': return 'Hozzászólás';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} satoshi';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} satoshi';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Megnyitás a pénztárcában';
case 'zap.button_connect_wallet': return 'Connect Wallet';
case 'zap.copy': return 'Vágólapra másolva';
case 'zap.error.invalid_custom_amount': return 'Érvénytelen egyéni összeg';
case 'zap.error.no_wallet': return 'Nincs telepített villám tárca';
case 'zap.error.no_lud16': return 'Nem talált villámcím';
case 'profile.past_streams': return 'Múltbeli Streamek';
case 'profile.edit.display_name': return 'Megjelenített név';
case 'profile.edit.about': return 'Névjegy';
case 'profile.edit.nip05': return 'Nostr-cím';
case 'profile.edit.lud16': return 'Lightning-cím';
case 'profile.edit.error.logged_out': return 'Kijelentkezve nem lehet profilt szerkeszteni';
case 'settings.button_profile': return 'Profil szerkesztése';
case 'settings.button_wallet': return 'Pénztárca beállítások';
case 'settings.profile.display_name': return 'Megjelenített név';
case 'settings.profile.about': return 'A oldalról';
case 'settings.profile.nip05': return 'Nostr cím';
case 'settings.profile.lud16': return 'Villám cím';
case 'settings.profile.error.logged_out': return 'Kijelentkezve nem lehet profilt szerkeszteni';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Pénztárca lekapcsolása';
case 'settings.wallet.connect_1tap': return '1-Tap csatlakozás';
case 'settings.wallet.paste': return 'URL beillesztése';
case 'settings.wallet.error.logged_out': return 'Kijelentkezve nem lehet csatlakozni a pénztárcához';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Nem találtak pénztárca-auth eseményt';
case 'login.username': return 'Felhasználónév';
case 'login.amber': return 'Bejelentkezés Amber segítségével';
case 'login.key': return 'Bejelentkezés kulccsal';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsIt implements Translations {
class TranslationsIt extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsIt({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsIt implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsIt implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsIt _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsIt implements Translations {
/// Un utente 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
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n,
one: '1 spettatore',
other: '${n} spettatori',
other: '${NumberFormat.decimalPattern('it').format(n)} spettatori',
);
@override late final _TranslationsStreamIt stream = _TranslationsStreamIt._(_root);
@ -66,36 +69,39 @@ class TranslationsIt implements Translations {
@override late final _TranslationsZapIt zap = _TranslationsZapIt._(_root);
@override late final _TranslationsProfileIt profile = _TranslationsProfileIt._(_root);
@override late final _TranslationsSettingsIt settings = _TranslationsSettingsIt._(_root);
@override late final _TranslationsLoginIt login = _TranslationsLoginIt._(_root);
@override late final _TranslationsLiveIt live = _TranslationsLiveIt._(_root);
}
// Path: stream
class _TranslationsStreamIt implements TranslationsStreamEn {
_TranslationsStreamIt._(this._root);
class _TranslationsStreamIt extends TranslationsStreamEn {
_TranslationsStreamIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusIt status = _TranslationsStreamStatusIt._(_root);
@override String started({ required Object timestamp}) => 'Avviato ${timestamp}';
@override String started({required Object timestamp}) => 'Avviato ${timestamp}';
@override String notification({required Object name}) => '${name} è andato in onda!';
@override late final _TranslationsStreamChatIt chat = _TranslationsStreamChatIt._(_root);
}
// Path: goal
class _TranslationsGoalIt implements TranslationsGoalEn {
_TranslationsGoalIt._(this._root);
class _TranslationsGoalIt extends TranslationsGoalEn {
_TranslationsGoalIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Obiettivo: ${amount}';
@override String remaining({ required Object amount}) => 'Restante: ${amount}';
@override String title({required Object amount}) => 'Obiettivo: ${amount}';
@override String remaining({required Object amount}) => 'Restante: ${amount}';
@override String get complete => 'COMPLETO';
}
// Path: button
class _TranslationsButtonIt implements TranslationsButtonEn {
_TranslationsButtonIt._(this._root);
class _TranslationsButtonIt extends TranslationsButtonEn {
_TranslationsButtonIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonIt implements TranslationsButtonEn {
@override String get unmute => 'Riattiva';
@override String get share => 'Condividi';
@override String get save => 'Salva';
@override String get connect => 'Collegare';
@override String get settings => 'Impostazioni';
}
// Path: embed
class _TranslationsEmbedIt implements TranslationsEmbedEn {
_TranslationsEmbedIt._(this._root);
class _TranslationsEmbedIt extends TranslationsEmbedEn {
_TranslationsEmbedIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Articolo di ${name}';
@override String note_by({ required Object name}) => 'Nota di ${name}';
@override String live_stream_by({ required Object name}) => 'Streaming in diretta da ${name}';
@override String article_by({required Object name}) => 'Articolo di ${name}';
@override String note_by({required Object name}) => 'Nota di ${name}';
@override String live_stream_by({required Object name}) => 'Streaming in diretta da ${name}';
}
// Path: stream_list
class _TranslationsStreamListIt implements TranslationsStreamListEn {
_TranslationsStreamListIt._(this._root);
class _TranslationsStreamListIt extends TranslationsStreamListEn {
_TranslationsStreamListIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListIt implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapIt implements TranslationsZapEn {
_TranslationsZapIt._(this._root);
class _TranslationsZapIt extends TranslationsZapEn {
_TranslationsZapIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Importo personalizzato';
@override String get confirm => 'Conferma';
@override String get comment => 'Commenta';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Aprire nel portafoglio';
@override String get button_connect_wallet => 'Portafoglio Connect';
@override String get copy => 'Copiato negli appunti';
@override late final _TranslationsZapErrorIt error = _TranslationsZapErrorIt._(_root);
}
// Path: profile
class _TranslationsProfileIt implements TranslationsProfileEn {
_TranslationsProfileIt._(this._root);
class _TranslationsProfileIt extends TranslationsProfileEn {
_TranslationsProfileIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Flussi passati';
@override late final _TranslationsProfileEditIt edit = _TranslationsProfileEditIt._(_root);
}
// Path: settings
class _TranslationsSettingsIt extends TranslationsSettingsEn {
_TranslationsSettingsIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Modifica profilo';
@override String get button_wallet => 'Impostazioni del portafoglio';
@override late final _TranslationsSettingsProfileIt profile = _TranslationsSettingsProfileIt._(_root);
@override late final _TranslationsSettingsWalletIt wallet = _TranslationsSettingsWalletIt._(_root);
}
// Path: login
class _TranslationsLoginIt implements TranslationsLoginEn {
_TranslationsLoginIt._(this._root);
class _TranslationsLoginIt extends TranslationsLoginEn {
_TranslationsLoginIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginIt implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusIt implements TranslationsStreamStatusEn {
_TranslationsStreamStatusIt._(this._root);
class _TranslationsStreamStatusIt extends TranslationsStreamStatusEn {
_TranslationsStreamStatusIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusIt implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatIt implements TranslationsStreamChatEn {
_TranslationsStreamChatIt._(this._root);
class _TranslationsStreamChatIt extends TranslationsStreamChatEn {
_TranslationsStreamChatIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DISABILITATA';
@override String disabled_timeout({ required Object time}) => 'Il timeout scade: ${time}';
@override String disabled_timeout({required Object time}) => 'Il timeout scade: ${time}';
/// Messaggio di chat che mostra gli eventi di timeout
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' time out '),
user,
const TextSpan(text: ' per '),
time,
], style: style, recognizer: recognizer);
]);
/// Il flusso si è concluso con un piè di pagina in fondo alla chat
@override String get ended => 'STREAM ENDED';
/// Messaggio di chat che mostra gli zap del flusso
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' ha effettuato uno zap di '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteIt write = _TranslationsStreamChatWriteIt._(_root);
@override late final _TranslationsStreamChatBadgeIt badge = _TranslationsStreamChatBadgeIt._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatIt implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorIt implements TranslationsZapErrorEn {
_TranslationsZapErrorIt._(this._root);
class _TranslationsZapErrorIt extends TranslationsZapErrorEn {
_TranslationsZapErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorIt implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Nessun indirizzo di fulmine trovato';
}
// Path: profile.edit
class _TranslationsProfileEditIt implements TranslationsProfileEditEn {
_TranslationsProfileEditIt._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileIt extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get display_name => 'Nome visualizzato';
@override String get about => 'Info';
@override String get nip05 => 'Indirizzo Nostr';
@override String get about => 'Circa';
@override String get nip05 => 'Indirizzo';
@override String get lud16 => 'Indirizzo del fulmine';
@override late final _TranslationsProfileEditErrorIt error = _TranslationsProfileEditErrorIt._(_root);
@override late final _TranslationsSettingsProfileErrorIt error = _TranslationsSettingsProfileErrorIt._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletIt extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Portafoglio Connect (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Disconnettere il portafoglio';
@override String get connect_1tap => 'Connessione a 1 rubinetto';
@override String get paste => 'Incolla URL';
@override String get balance => 'Equilibrio';
@override String get name => 'Portafoglio';
@override late final _TranslationsSettingsWalletErrorIt error = _TranslationsSettingsWalletErrorIt._(_root);
}
// Path: login.error
class _TranslationsLoginErrorIt implements TranslationsLoginErrorEn {
_TranslationsLoginErrorIt._(this._root);
class _TranslationsLoginErrorIt extends TranslationsLoginErrorEn {
_TranslationsLoginErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorIt implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteIt implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteIt._(this._root);
class _TranslationsStreamChatWriteIt extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteIt implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeIt implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeIt._(this._root);
class _TranslationsStreamChatBadgeIt extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeIt implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidIt implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidIt._(this._root);
class _TranslationsStreamChatRaidIt extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
/// Messaggio di chat raid in un altro flusso
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Messaggio di chat raid da un altro flusso
@override String from({ required Object name}) => 'RAID DA ${name}';
@override String from({required Object name}) => 'RAID DA ${name}';
/// Timer per il conto alla rovescia per l'auto-raid
@override String countdown({ required Object time}) => 'Raid in ${time}';
@override String countdown({required Object time}) => 'Raid in ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorIt implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorIt._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorIt extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorIt implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Impossibile modificare il profilo quando si è disconnessi';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorIt extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Impossibile connettere il portafoglio quando si è disconnessi';
@override String get nwc_auth_event_not_found => 'Nessun evento wallet auth trovato';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsIt {
@ -337,39 +421,41 @@ extension on TranslationsIt {
case 'most_zapped_streamers': return 'Il maggior numero di streamer bloccati';
case 'no_user_found': return 'Nessun utente trovato';
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,
one: '1 spettatore',
other: '${n} spettatori',
other: '${NumberFormat.decimalPattern('it').format(n)} spettatori',
);
case 'stream.status.live': return 'IN DIRETTA';
case 'stream.status.ended': return 'FINE';
case 'stream.status.planned': return 'PREVISTO';
case 'stream.started': return ({ required Object timestamp}) => 'Avviato ${timestamp}';
case 'stream.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_timeout': return ({ required Object time}) => 'Il timeout scade: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Il timeout scade: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' time out '),
user,
const TextSpan(text: ' per '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM ENDED';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' ha effettuato uno zap di '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Scrivi il messaggio';
case 'stream.chat.write.no_signer': return 'Impossibile scrivere messaggi con il login npub';
case 'stream.chat.write.login': return 'Effettuare il login per inviare messaggi';
case 'stream.chat.badge.awarded_to': return 'Assegnato a:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID DA ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raid in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Obiettivo: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Restante: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID DA ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raid in ${time}';
case 'goal.title': return ({required Object amount}) => 'Obiettivo: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Restante: ${amount}';
case 'goal.complete': return 'COMPLETO';
case 'button.login': return 'Login';
case 'button.logout': return 'Logout';
@ -380,35 +466,65 @@ extension on TranslationsIt {
case 'button.unmute': return 'Riattiva';
case 'button.share': return 'Condividi';
case 'button.save': return 'Salva';
case 'embed.article_by': return ({ required Object name}) => 'Articolo di ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Nota di ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Streaming in diretta da ${name}';
case 'button.connect': return 'Collegare';
case 'button.settings': return 'Impostazioni';
case 'embed.article_by': return ({required Object name}) => 'Articolo di ${name}';
case 'embed.note_by': return ({required Object name}) => 'Nota di ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Streaming in diretta da ${name}';
case 'stream_list.following': return 'Seguiti';
case 'stream_list.live': return 'Dal vivo';
case 'stream_list.planned': return 'Pianificato';
case 'stream_list.ended': return 'Terminato';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Importo personalizzato';
case 'zap.confirm': return 'Conferma';
case 'zap.comment': return 'Commenta';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Aprire nel portafoglio';
case 'zap.button_connect_wallet': return 'Portafoglio Connect';
case 'zap.copy': return 'Copiato negli appunti';
case 'zap.error.invalid_custom_amount': return 'Importo personalizzato non valido';
case 'zap.error.no_wallet': return 'Nessun portafoglio Lightning installato';
case 'zap.error.no_lud16': return 'Nessun indirizzo di fulmine trovato';
case 'profile.past_streams': return 'Flussi passati';
case 'profile.edit.display_name': return 'Nome visualizzato';
case 'profile.edit.about': return 'Info';
case 'profile.edit.nip05': return 'Indirizzo Nostr';
case 'profile.edit.lud16': return 'Indirizzo del fulmine';
case 'profile.edit.error.logged_out': return 'Impossibile modificare il profilo quando si è disconnessi';
case 'settings.button_profile': return 'Modifica profilo';
case 'settings.button_wallet': return 'Impostazioni del portafoglio';
case 'settings.profile.display_name': return 'Nome visualizzato';
case 'settings.profile.about': return 'Circa';
case 'settings.profile.nip05': return 'Indirizzo';
case 'settings.profile.lud16': return 'Indirizzo del fulmine';
case 'settings.profile.error.logged_out': return 'Impossibile modificare il profilo quando si è disconnessi';
case 'settings.wallet.connect_wallet': return 'Portafoglio Connect (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Disconnettere il portafoglio';
case 'settings.wallet.connect_1tap': return 'Connessione a 1 rubinetto';
case 'settings.wallet.paste': return 'Incolla URL';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'Nessun evento wallet auth trovato';
case 'login.username': return 'Nome utente';
case 'login.amber': return 'Accesso con Amber';
case 'login.key': return 'Accesso con chiave';
case 'login.create': return 'Crea un account';
case 'login.error.invalid_key': return 'Chiave non valida';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsJa implements Translations {
class TranslationsJa extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsJa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsJa implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsJa implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsJa _root = this; // ignore: unused_field
@ -39,7 +40,7 @@ class TranslationsJa implements Translations {
// Translations
/// アバターのプレースホルダーを押してアップロードを開始するよう促すテキスト
@override String get upload_avatar => 'アバターのアップロード';
@override String get upload_avatar => '画像アップロード';
/// ザップによるリストの上のストリーマーに向かう
@override String get most_zapped_streamers => '最もザッピングされたストリーマー';
@ -50,10 +51,12 @@ class TranslationsJa implements Translations {
/// 匿名ユーザー
@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,
one: '1 視聴者',
other: '${n} 人が視聴中',
other: '${NumberFormat.decimalPattern('ja').format(n)} 人が視聴中',
);
@override late final _TranslationsStreamJa stream = _TranslationsStreamJa._(_root);
@ -66,36 +69,39 @@ class TranslationsJa implements Translations {
@override late final _TranslationsZapJa zap = _TranslationsZapJa._(_root);
@override late final _TranslationsProfileJa profile = _TranslationsProfileJa._(_root);
@override late final _TranslationsSettingsJa settings = _TranslationsSettingsJa._(_root);
@override late final _TranslationsLoginJa login = _TranslationsLoginJa._(_root);
@override late final _TranslationsLiveJa live = _TranslationsLiveJa._(_root);
}
// Path: stream
class _TranslationsStreamJa implements TranslationsStreamEn {
_TranslationsStreamJa._(this._root);
class _TranslationsStreamJa extends TranslationsStreamEn {
_TranslationsStreamJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusJa status = _TranslationsStreamStatusJa._(_root);
@override String started({ required Object timestamp}) => '${timestamp} を開始';
@override String started({required Object timestamp}) => '${timestamp} を開始';
@override String notification({required Object name}) => '${name} がライブを開始した!';
@override late final _TranslationsStreamChatJa chat = _TranslationsStreamChatJa._(_root);
}
// Path: goal
class _TranslationsGoalJa implements TranslationsGoalEn {
_TranslationsGoalJa._(this._root);
class _TranslationsGoalJa extends TranslationsGoalEn {
_TranslationsGoalJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => '目標額: ${amount}';
@override String remaining({ required Object amount}) => '残り: ${amount}';
@override String title({required Object amount}) => '目標額: ${amount}';
@override String remaining({required Object amount}) => '残り: ${amount}';
@override String get complete => '完了';
}
// Path: button
class _TranslationsButtonJa implements TranslationsButtonEn {
_TranslationsButtonJa._(this._root);
class _TranslationsButtonJa extends TranslationsButtonEn {
_TranslationsButtonJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonJa implements TranslationsButtonEn {
@override String get unmute => 'ミュート解除';
@override String get share => '共有';
@override String get save => '保存';
@override String get connect => '接続';
@override String get settings => '設定';
}
// Path: embed
class _TranslationsEmbedJa implements TranslationsEmbedEn {
_TranslationsEmbedJa._(this._root);
class _TranslationsEmbedJa extends TranslationsEmbedEn {
_TranslationsEmbedJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => '記事: ${name}';
@override String note_by({ required Object name}) => '${name} の投稿';
@override String live_stream_by({ required Object name}) => 'ライブ・ストリーム ${name}';
@override String article_by({required Object name}) => '記事: ${name}';
@override String note_by({required Object name}) => '${name} の投稿';
@override String live_stream_by({required Object name}) => 'ライブ・ストリーム ${name}';
}
// Path: stream_list
class _TranslationsStreamListJa implements TranslationsStreamListEn {
_TranslationsStreamListJa._(this._root);
class _TranslationsStreamListJa extends TranslationsStreamListEn {
_TranslationsStreamListJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListJa implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapJa implements TranslationsZapEn {
_TranslationsZapJa._(this._root);
class _TranslationsZapJa extends TranslationsZapEn {
_TranslationsZapJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => '${name} をザップ';
@override String title({required Object name}) => '${name} をザップ';
@override String get custom_amount => 'カスタム金額';
@override String get confirm => '確認';
@override String get comment => 'コメント';
@override String button_zap_ready({ required Object amount}) => '${amount} satsをザップする';
@override String button_zap_ready({required Object amount}) => '${amount} satsをザップする';
@override String get button_zap => 'ザップ';
@override String get button_open_wallet => 'ウォレットで開く';
@override String get button_connect_wallet => 'コネクトウォレット';
@override String get copy => 'クリップボードにコピー';
@override late final _TranslationsZapErrorJa error = _TranslationsZapErrorJa._(_root);
}
// Path: profile
class _TranslationsProfileJa implements TranslationsProfileEn {
_TranslationsProfileJa._(this._root);
class _TranslationsProfileJa extends TranslationsProfileEn {
_TranslationsProfileJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get past_streams => '過去の配信';
@override late final _TranslationsProfileEditJa edit = _TranslationsProfileEditJa._(_root);
}
// Path: settings
class _TranslationsSettingsJa extends TranslationsSettingsEn {
_TranslationsSettingsJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get button_profile => 'プロフィール編集';
@override String get button_wallet => 'ウォレットの設定';
@override late final _TranslationsSettingsProfileJa profile = _TranslationsSettingsProfileJa._(_root);
@override late final _TranslationsSettingsWalletJa wallet = _TranslationsSettingsWalletJa._(_root);
}
// Path: login
class _TranslationsLoginJa implements TranslationsLoginEn {
_TranslationsLoginJa._(this._root);
class _TranslationsLoginJa extends TranslationsLoginEn {
_TranslationsLoginJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginJa implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusJa implements TranslationsStreamStatusEn {
_TranslationsStreamStatusJa._(this._root);
class _TranslationsStreamStatusJa extends TranslationsStreamStatusEn {
_TranslationsStreamStatusJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusJa implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatJa implements TranslationsStreamChatEn {
_TranslationsStreamChatJa._(this._root);
class _TranslationsStreamChatJa extends TranslationsStreamChatEn {
_TranslationsStreamChatJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get disabled => 'チャット無効';
@override String disabled_timeout({ required Object time}) => 'タイムアウト: ${time}';
@override String disabled_timeout({required Object time}) => 'タイムアウト: ${time}';
/// タイムアウトイベントを表示するチャットメッセージ
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' タイムアウト '),
user,
const TextSpan(text: ' for '),
time,
], style: style, recognizer: recognizer);
]);
/// チャットの下にストリーム終了のフッター
@override String get ended => '配信終了';
/// ストリームのザッピングを表示するチャットメッセージ
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ''),
amount,
const TextSpan(text: ' sats をザップしました'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteJa write = _TranslationsStreamChatWriteJa._(_root);
@override late final _TranslationsStreamChatBadgeJa badge = _TranslationsStreamChatBadgeJa._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatJa implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorJa implements TranslationsZapErrorEn {
_TranslationsZapErrorJa._(this._root);
class _TranslationsZapErrorJa extends TranslationsZapErrorEn {
_TranslationsZapErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorJa implements TranslationsZapErrorEn {
@override String get no_lud16 => '雷アドレスが見つかりません';
}
// Path: profile.edit
class _TranslationsProfileEditJa implements TranslationsProfileEditEn {
_TranslationsProfileEditJa._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileJa extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get display_name => '表示名';
@override String get about => '自己紹介';
@override String get nip05 => 'Nostrアドレス';
@override String get about => 'について';
@override String get nip05 => '住所';
@override String get lud16 => 'ライトニングアドレス';
@override late final _TranslationsProfileEditErrorJa error = _TranslationsProfileEditErrorJa._(_root);
@override late final _TranslationsSettingsProfileErrorJa error = _TranslationsSettingsProfileErrorJa._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletJa extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'コネクトウォレットNWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'ウォレットの切断';
@override String get connect_1tap => '1タップ接続';
@override String get paste => 'URLを貼り付ける';
@override String get balance => 'バランス';
@override String get name => '財布';
@override late final _TranslationsSettingsWalletErrorJa error = _TranslationsSettingsWalletErrorJa._(_root);
}
// Path: login.error
class _TranslationsLoginErrorJa implements TranslationsLoginErrorEn {
_TranslationsLoginErrorJa._(this._root);
class _TranslationsLoginErrorJa extends TranslationsLoginErrorEn {
_TranslationsLoginErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorJa implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteJa implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteJa._(this._root);
class _TranslationsStreamChatWriteJa extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteJa implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeJa implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeJa._(this._root);
class _TranslationsStreamChatBadgeJa extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeJa implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidJa implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidJa._(this._root);
class _TranslationsStreamChatRaidJa extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
/// 別のストリームへのチャット襲撃メッセージ
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// 他のストリームからのチャット襲撃メッセージ
@override String from({ required Object name}) => 'RAID FROM ${name}';
@override String from({required Object name}) => 'RAID FROM ${name}';
/// 自動騎乗のカウントダウン・タイマー
@override String countdown({ required Object time}) => '${time}における襲撃';
@override String countdown({required Object time}) => '${time}における襲撃';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorJa implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorJa._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorJa extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
@ -328,48 +401,61 @@ class _TranslationsProfileEditErrorJa implements TranslationsProfileEditErrorEn
@override String get logged_out => 'ログアウトするとプロフィールが編集できない';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorJa extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field
// Translations
@override String get logged_out => 'ログアウト時にウォレットに接続できない';
@override String get nwc_auth_event_not_found => 'ウォレットの認証イベントが見つかりません';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsJa {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'アバターのアップロード';
case 'upload_avatar': return '画像アップロード';
case 'most_zapped_streamers': return '最もザッピングされたストリーマー';
case 'no_user_found': 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,
one: '1 視聴者',
other: '${n} 人が視聴中',
other: '${NumberFormat.decimalPattern('ja').format(n)} 人が視聴中',
);
case 'stream.status.live': return 'ライブ';
case 'stream.status.ended': return '終了';
case 'stream.status.planned': return '予定';
case 'stream.started': return ({ required Object timestamp}) => '${timestamp} を開始';
case 'stream.started': return ({required Object timestamp}) => '${timestamp} を開始';
case 'stream.notification': return ({required Object name}) => '${name} がライブを開始した!';
case 'stream.chat.disabled': return 'チャット無効';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'タイムアウト: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'タイムアウト: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' タイムアウト '),
user,
const TextSpan(text: ' for '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return '配信終了';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ''),
amount,
const TextSpan(text: ' sats をザップしました'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'メッセージを書く';
case 'stream.chat.write.no_signer': return 'npubログインでメッセージが書けない';
case 'stream.chat.write.login': return 'メッセージを送信するにはログインしてください';
case 'stream.chat.badge.awarded_to': return '受賞者';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => '${time}における襲撃';
case 'goal.title': return ({ required Object amount}) => '目標額: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => '残り: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => '${time}における襲撃';
case 'goal.title': return ({required Object amount}) => '目標額: ${amount}';
case 'goal.remaining': return ({required Object amount}) => '残り: ${amount}';
case 'goal.complete': return '完了';
case 'button.login': return 'ログイン';
case 'button.logout': return 'ログアウト';
@ -380,35 +466,65 @@ extension on TranslationsJa {
case 'button.unmute': return 'ミュート解除';
case 'button.share': return '共有';
case 'button.save': return '保存';
case 'embed.article_by': return ({ required Object name}) => '記事: ${name}';
case 'embed.note_by': return ({ required Object name}) => '${name} の投稿';
case 'embed.live_stream_by': return ({ required Object name}) => 'ライブ・ストリーム ${name}';
case 'button.connect': return '接続';
case 'button.settings': return '設定';
case 'embed.article_by': return ({required Object name}) => '記事: ${name}';
case 'embed.note_by': return ({required Object name}) => '${name} の投稿';
case 'embed.live_stream_by': return ({required Object name}) => 'ライブ・ストリーム ${name}';
case 'stream_list.following': return 'フォロー中';
case 'stream_list.live': return 'ライブ配信中';
case 'stream_list.planned': return '予定あり';
case 'stream_list.ended': return '終了しました';
case 'zap.title': return ({ required Object name}) => '${name} をザップ';
case 'zap.title': return ({required Object name}) => '${name} をザップ';
case 'zap.custom_amount': return 'カスタム金額';
case 'zap.confirm': return '確認';
case 'zap.comment': return 'コメント';
case 'zap.button_zap_ready': return ({ required Object amount}) => '${amount} satsをザップする';
case 'zap.button_zap_ready': return ({required Object amount}) => '${amount} satsをザップする';
case 'zap.button_zap': return 'ザップ';
case 'zap.button_open_wallet': return 'ウォレットで開く';
case 'zap.button_connect_wallet': return 'コネクトウォレット';
case 'zap.copy': return 'クリップボードにコピー';
case 'zap.error.invalid_custom_amount': return '無効なカスタム金額';
case 'zap.error.no_wallet': return 'Lightningウォレット未装着';
case 'zap.error.no_lud16': return '雷アドレスが見つかりません';
case 'profile.past_streams': return '過去の配信';
case 'profile.edit.display_name': return '表示名';
case 'profile.edit.about': return '自己紹介';
case 'profile.edit.nip05': return 'Nostrアドレス';
case 'profile.edit.lud16': return 'ライトニングアドレス';
case 'profile.edit.error.logged_out': return 'ログアウトするとプロフィールが編集できない';
case 'settings.button_profile': return 'プロフィール編集';
case 'settings.button_wallet': return 'ウォレットの設定';
case 'settings.profile.display_name': return '表示名';
case 'settings.profile.about': return 'について';
case 'settings.profile.nip05': return '住所';
case 'settings.profile.lud16': return 'ライトニングアドレス';
case 'settings.profile.error.logged_out': return 'ログアウトするとプロフィールが編集できない';
case 'settings.wallet.connect_wallet': return 'コネクトウォレットNWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'ウォレットの切断';
case 'settings.wallet.connect_1tap': return '1タップ接続';
case 'settings.wallet.paste': return 'URLを貼り付ける';
case 'settings.wallet.balance': return 'バランス';
case 'settings.wallet.name': return '財布';
case 'settings.wallet.error.logged_out': return 'ログアウト時にウォレットに接続できない';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'ウォレットの認証イベントが見つかりません';
case 'login.username': return 'ユーザー名';
case 'login.amber': return '琥珀でログイン';
case 'login.key': return 'キーでログイン';
case 'login.create': return 'アカウントを作成する';
case 'login.error.invalid_key': return '無効なキー';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsKo implements Translations {
class TranslationsKo extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsKo({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsKo implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsKo implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsKo _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsKo implements Translations {
/// 익명 사용자
@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,
one: '시청자 1명',
other: '${n} 시청자',
other: '{n:decimalPattern} 시청자',
);
@override late final _TranslationsStreamKo stream = _TranslationsStreamKo._(_root);
@ -66,36 +69,39 @@ class TranslationsKo implements Translations {
@override late final _TranslationsZapKo zap = _TranslationsZapKo._(_root);
@override late final _TranslationsProfileKo profile = _TranslationsProfileKo._(_root);
@override late final _TranslationsSettingsKo settings = _TranslationsSettingsKo._(_root);
@override late final _TranslationsLoginKo login = _TranslationsLoginKo._(_root);
@override late final _TranslationsLiveKo live = _TranslationsLiveKo._(_root);
}
// Path: stream
class _TranslationsStreamKo implements TranslationsStreamEn {
_TranslationsStreamKo._(this._root);
class _TranslationsStreamKo extends TranslationsStreamEn {
_TranslationsStreamKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusKo status = _TranslationsStreamStatusKo._(_root);
@override String started({ required Object timestamp}) => '시작 ${timestamp}';
@override String started({required Object timestamp}) => '시작 ${timestamp}';
@override String notification({required Object name}) => '${name} 라이브가 시작되었습니다!';
@override late final _TranslationsStreamChatKo chat = _TranslationsStreamChatKo._(_root);
}
// Path: goal
class _TranslationsGoalKo implements TranslationsGoalEn {
_TranslationsGoalKo._(this._root);
class _TranslationsGoalKo extends TranslationsGoalEn {
_TranslationsGoalKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => '목표: ${amount}';
@override String remaining({ required Object amount}) => '남음: ${amount}';
@override String title({required Object amount}) => '목표: ${amount}';
@override String remaining({required Object amount}) => '남음: ${amount}';
@override String get complete => '완료';
}
// Path: button
class _TranslationsButtonKo implements TranslationsButtonEn {
_TranslationsButtonKo._(this._root);
class _TranslationsButtonKo extends TranslationsButtonEn {
_TranslationsButtonKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonKo implements TranslationsButtonEn {
@override String get unmute => '뮤트 해제';
@override String get share => '공유';
@override String get save => '저장';
@override String get connect => '연결';
@override String get settings => '설정';
}
// Path: embed
class _TranslationsEmbedKo implements TranslationsEmbedEn {
_TranslationsEmbedKo._(this._root);
class _TranslationsEmbedKo extends TranslationsEmbedEn {
_TranslationsEmbedKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => '작성자: ${name}';
@override String note_by({ required Object name}) => '노트 작성됨: ${name}';
@override String live_stream_by({ required Object name}) => '라이브 스트리밍: ${name}';
@override String article_by({required Object name}) => '작성자: ${name}';
@override String note_by({required Object name}) => '노트 작성됨: ${name}';
@override String live_stream_by({required Object name}) => '라이브 스트리밍: ${name}';
}
// Path: stream_list
class _TranslationsStreamListKo implements TranslationsStreamListEn {
_TranslationsStreamListKo._(this._root);
class _TranslationsStreamListKo extends TranslationsStreamListEn {
_TranslationsStreamListKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListKo implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapKo implements TranslationsZapEn {
_TranslationsZapKo._(this._root);
class _TranslationsZapKo extends TranslationsZapEn {
_TranslationsZapKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => '사용자 지정 금액';
@override String get confirm => '확인';
@override String get comment => '댓글';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => '지갑에서 열기';
@override String get button_connect_wallet => '지갑 연결';
@override String get copy => '클립보드에 복사';
@override late final _TranslationsZapErrorKo error = _TranslationsZapErrorKo._(_root);
}
// Path: profile
class _TranslationsProfileKo implements TranslationsProfileEn {
_TranslationsProfileKo._(this._root);
class _TranslationsProfileKo extends TranslationsProfileEn {
_TranslationsProfileKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get past_streams => '과거 스트림';
@override late final _TranslationsProfileEditKo edit = _TranslationsProfileEditKo._(_root);
}
// Path: settings
class _TranslationsSettingsKo extends TranslationsSettingsEn {
_TranslationsSettingsKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get button_profile => '프로필 수정';
@override String get button_wallet => '지갑 설정';
@override late final _TranslationsSettingsProfileKo profile = _TranslationsSettingsProfileKo._(_root);
@override late final _TranslationsSettingsWalletKo wallet = _TranslationsSettingsWalletKo._(_root);
}
// Path: login
class _TranslationsLoginKo implements TranslationsLoginEn {
_TranslationsLoginKo._(this._root);
class _TranslationsLoginKo extends TranslationsLoginEn {
_TranslationsLoginKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginKo implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusKo implements TranslationsStreamStatusEn {
_TranslationsStreamStatusKo._(this._root);
class _TranslationsStreamStatusKo extends TranslationsStreamStatusEn {
_TranslationsStreamStatusKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusKo implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatKo implements TranslationsStreamChatEn {
_TranslationsStreamChatKo._(this._root);
class _TranslationsStreamChatKo extends TranslationsStreamChatEn {
_TranslationsStreamChatKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get disabled => '채팅 사용 안 함';
@override String disabled_timeout({ required Object time}) => '시간 초과가 만료되었습니다: ${time}';
@override String disabled_timeout({required Object time}) => '시간 초과가 만료되었습니다: ${time}';
/// 시간 초과 이벤트를 표시하는 채팅 메시지
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' 시간 초과됨 '),
user,
const TextSpan(text: ' '),
time,
], style: style, recognizer: recognizer);
]);
/// 채팅 하단의 스트림 종료 푸터
@override String get ended => '스트림 종료';
/// 채팅 메시지 스트림 끊김 표시
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' ZAPP '),
amount,
const TextSpan(text: ' SATS'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteKo write = _TranslationsStreamChatWriteKo._(_root);
@override late final _TranslationsStreamChatBadgeKo badge = _TranslationsStreamChatBadgeKo._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatKo implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorKo implements TranslationsZapErrorEn {
_TranslationsZapErrorKo._(this._root);
class _TranslationsZapErrorKo extends TranslationsZapErrorEn {
_TranslationsZapErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
@ -246,9 +291,9 @@ class _TranslationsZapErrorKo implements TranslationsZapErrorEn {
@override String get no_lud16 => '번개 주소를 찾을 수 없습니다.';
}
// Path: profile.edit
class _TranslationsProfileEditKo implements TranslationsProfileEditEn {
_TranslationsProfileEditKo._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileKo extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
@ -257,12 +302,28 @@ class _TranslationsProfileEditKo implements TranslationsProfileEditEn {
@override String get about => '정보';
@override String get nip05 => '노스트르 주소';
@override String get lud16 => '라이트닝 주소';
@override late final _TranslationsProfileEditErrorKo error = _TranslationsProfileEditErrorKo._(_root);
@override late final _TranslationsSettingsProfileErrorKo error = _TranslationsSettingsProfileErrorKo._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletKo extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get connect_wallet => '지갑 연결(NWC nostr+walletconnect://)';
@override String get disconnect_wallet => '지갑 연결 해제';
@override String get connect_1tap => '1-탭 연결';
@override String get paste => 'URL 붙여넣기';
@override String get balance => '잔액';
@override String get name => '지갑';
@override late final _TranslationsSettingsWalletErrorKo error = _TranslationsSettingsWalletErrorKo._(_root);
}
// Path: login.error
class _TranslationsLoginErrorKo implements TranslationsLoginErrorEn {
_TranslationsLoginErrorKo._(this._root);
class _TranslationsLoginErrorKo extends TranslationsLoginErrorEn {
_TranslationsLoginErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorKo implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteKo implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteKo._(this._root);
class _TranslationsStreamChatWriteKo extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteKo implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeKo implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeKo._(this._root);
class _TranslationsStreamChatBadgeKo extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeKo implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidKo implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidKo._(this._root);
class _TranslationsStreamChatRaidKo extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
/// 다른 스트림으로 채팅 레이드 메시지 보내기
@override String to({ required Object name}) => 'RAIDing ${name}';
@override String to({required Object name}) => 'RAIDing ${name}';
/// 다른 스트림의 채팅 레이드 메시지
@override String from({ required Object name}) => 'RAID FROM ${name}';
@override String from({required Object name}) => 'RAID FROM ${name}';
/// 자동 레이드를 위한 카운트다운 타이머
@override String countdown({ required Object time}) => '${time}에서 레이드';
@override String countdown({required Object time}) => '${time}에서 레이드';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorKo implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorKo._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorKo extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorKo implements TranslationsProfileEditErrorEn
@override String get logged_out => '로그아웃 시 프로필 수정 불가';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorKo extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field
// Translations
@override String get logged_out => '로그아웃 시 지갑 연결 불가';
@override String get nwc_auth_event_not_found => '지갑 인증 이벤트를 찾을 수 없습니다.';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsKo {
@ -337,39 +421,41 @@ extension on TranslationsKo {
case 'most_zapped_streamers': return '가장 많이 재핑된 스트리머';
case 'no_user_found': return '사용자를 찾을 수 없습니다.';
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,
one: '시청자 1명',
other: '${n} 시청자',
other: '{n:decimalPattern} 시청자',
);
case 'stream.status.live': return '라이브';
case 'stream.status.ended': return '종료';
case 'stream.status.planned': return '계획된';
case 'stream.started': return ({ required Object timestamp}) => '시작 ${timestamp}';
case 'stream.started': return ({required Object timestamp}) => '시작 ${timestamp}';
case 'stream.notification': return ({required Object name}) => '${name} 라이브가 시작되었습니다!';
case 'stream.chat.disabled': return '채팅 사용 안 함';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => '시간 초과가 만료되었습니다: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => '시간 초과가 만료되었습니다: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' 시간 초과됨 '),
user,
const TextSpan(text: ' '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return '스트림 종료';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' ZAPP '),
amount,
const TextSpan(text: ' SATS'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return '메시지 작성';
case 'stream.chat.write.no_signer': return 'npub 로그인으로 메시지를 작성할 수 없습니다.';
case 'stream.chat.write.login': return '메시지를 보내려면 로그인하세요.';
case 'stream.chat.badge.awarded_to': return '수상 대상';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDing ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => '${time}에서 레이드';
case 'goal.title': return ({ required Object amount}) => '목표: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => '남음: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDing ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => '${time}에서 레이드';
case 'goal.title': return ({required Object amount}) => '목표: ${amount}';
case 'goal.remaining': return ({required Object amount}) => '남음: ${amount}';
case 'goal.complete': return '완료';
case 'button.login': return '로그인';
case 'button.logout': return '로그아웃';
@ -380,35 +466,65 @@ extension on TranslationsKo {
case 'button.unmute': return '뮤트 해제';
case 'button.share': return '공유';
case 'button.save': return '저장';
case 'embed.article_by': return ({ required Object name}) => '작성자: ${name}';
case 'embed.note_by': return ({ required Object name}) => '노트 작성됨: ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => '라이브 스트리밍: ${name}';
case 'button.connect': return '연결';
case 'button.settings': return '설정';
case 'embed.article_by': return ({required Object name}) => '작성자: ${name}';
case 'embed.note_by': return ({required Object name}) => '노트 작성됨: ${name}';
case 'embed.live_stream_by': return ({required Object name}) => '라이브 스트리밍: ${name}';
case 'stream_list.following': return '팔로잉';
case 'stream_list.live': return '라이브';
case 'stream_list.planned': return '계획된';
case 'stream_list.ended': return '종료됨';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return '사용자 지정 금액';
case 'zap.confirm': return '확인';
case 'zap.comment': return '댓글';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return '지갑에서 열기';
case 'zap.button_connect_wallet': return '지갑 연결';
case 'zap.copy': return '클립보드에 복사';
case 'zap.error.invalid_custom_amount': return '잘못된 사용자 지정 금액';
case 'zap.error.no_wallet': return '라이트닝 월렛이 설치되지 않았습니다.';
case 'zap.error.no_lud16': return '번개 주소를 찾을 수 없습니다.';
case 'profile.past_streams': return '과거 스트림';
case 'profile.edit.display_name': return '표시 이름';
case 'profile.edit.about': return '';
case 'profile.edit.nip05': return '노스트르 주소';
case 'profile.edit.lud16': return '라이트닝 주소';
case 'profile.edit.error.logged_out': return '로그아웃 시 프로필 수정 불가';
case 'settings.button_profile': return '프로필 수정';
case 'settings.button_wallet': return '지갑 설';
case 'settings.profile.display_name': return '표시 이름';
case 'settings.profile.about': return '정보';
case 'settings.profile.nip05': return '노스트르 주소';
case 'settings.profile.lud16': return '라이트닝 주소';
case 'settings.profile.error.logged_out': return '로그아웃 시 프로필 수정 불가';
case 'settings.wallet.connect_wallet': return '지갑 연결(NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return '지갑 연결 해제';
case 'settings.wallet.connect_1tap': return '1-탭 연결';
case 'settings.wallet.paste': return 'URL 붙여넣기';
case 'settings.wallet.balance': return '잔액';
case 'settings.wallet.name': return '지갑';
case 'settings.wallet.error.logged_out': return '로그아웃 시 지갑 연결 불가';
case 'settings.wallet.error.nwc_auth_event_not_found': return '지갑 인증 이벤트를 찾을 수 없습니다.';
case 'login.username': return '사용자 이름';
case 'login.amber': return 'Amber로 로그인';
case 'login.key': return '키로 로그인';
case 'login.create': return '계정 만들기';
case 'login.error.invalid_key': return '잘못된 키';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsNl implements Translations {
class TranslationsNl extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsNl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsNl implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsNl implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsNl _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsNl implements Translations {
/// Een anonieme gebruiker
@override String get anon => 'Anon';
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('nl').format(n)} sats';
/// Aantal kijkers van de stream
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n,
one: '1 kijker',
other: '${n} kijkers',
other: '${NumberFormat.decimalPattern('nl').format(n)} kijkers',
);
@override late final _TranslationsStreamNl stream = _TranslationsStreamNl._(_root);
@ -66,36 +69,39 @@ class TranslationsNl implements Translations {
@override late final _TranslationsZapNl zap = _TranslationsZapNl._(_root);
@override late final _TranslationsProfileNl profile = _TranslationsProfileNl._(_root);
@override late final _TranslationsSettingsNl settings = _TranslationsSettingsNl._(_root);
@override late final _TranslationsLoginNl login = _TranslationsLoginNl._(_root);
@override late final _TranslationsLiveNl live = _TranslationsLiveNl._(_root);
}
// Path: stream
class _TranslationsStreamNl implements TranslationsStreamEn {
_TranslationsStreamNl._(this._root);
class _TranslationsStreamNl extends TranslationsStreamEn {
_TranslationsStreamNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusNl status = _TranslationsStreamStatusNl._(_root);
@override String started({ required Object timestamp}) => 'Begonnen met ${timestamp}';
@override String started({required Object timestamp}) => 'Begonnen met ${timestamp}';
@override String notification({required Object name}) => '${name} ging live!';
@override late final _TranslationsStreamChatNl chat = _TranslationsStreamChatNl._(_root);
}
// Path: goal
class _TranslationsGoalNl implements TranslationsGoalEn {
_TranslationsGoalNl._(this._root);
class _TranslationsGoalNl extends TranslationsGoalEn {
_TranslationsGoalNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Doel: ${amount}';
@override String remaining({ required Object amount}) => 'Overblijvend: ${amount}';
@override String title({required Object amount}) => 'Doel: ${amount}';
@override String remaining({required Object amount}) => 'Overblijvend: ${amount}';
@override String get complete => 'COMPLETE';
}
// Path: button
class _TranslationsButtonNl implements TranslationsButtonEn {
_TranslationsButtonNl._(this._root);
class _TranslationsButtonNl extends TranslationsButtonEn {
_TranslationsButtonNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonNl implements TranslationsButtonEn {
@override String get unmute => 'Niet langer negeren';
@override String get share => 'Deel';
@override String get save => 'Opslaan';
@override String get connect => 'Maak verbinding met';
@override String get settings => 'Instellingen';
}
// Path: embed
class _TranslationsEmbedNl implements TranslationsEmbedEn {
_TranslationsEmbedNl._(this._root);
class _TranslationsEmbedNl extends TranslationsEmbedEn {
_TranslationsEmbedNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Artikel door ${name}';
@override String note_by({ required Object name}) => 'Opmerking door ${name}';
@override String live_stream_by({ required Object name}) => 'Live stream via ${name}';
@override String article_by({required Object name}) => 'Artikel door ${name}';
@override String note_by({required Object name}) => 'Opmerking door ${name}';
@override String live_stream_by({required Object name}) => 'Live stream via ${name}';
}
// Path: stream_list
class _TranslationsStreamListNl implements TranslationsStreamListEn {
_TranslationsStreamListNl._(this._root);
class _TranslationsStreamListNl extends TranslationsStreamListEn {
_TranslationsStreamListNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListNl implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapNl implements TranslationsZapEn {
_TranslationsZapNl._(this._root);
class _TranslationsZapNl extends TranslationsZapEn {
_TranslationsZapNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Aangepast bedrag';
@override String get confirm => 'Bevestig';
@override String get comment => 'Opmerking';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Openen in portefeuille';
@override String get button_connect_wallet => 'Portemonnee aansluiten';
@override String get copy => 'Gekopieerd naar klembord';
@override late final _TranslationsZapErrorNl error = _TranslationsZapErrorNl._(_root);
}
// Path: profile
class _TranslationsProfileNl implements TranslationsProfileEn {
_TranslationsProfileNl._(this._root);
class _TranslationsProfileNl extends TranslationsProfileEn {
_TranslationsProfileNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Afgelopen Streams';
@override late final _TranslationsProfileEditNl edit = _TranslationsProfileEditNl._(_root);
}
// Path: settings
class _TranslationsSettingsNl extends TranslationsSettingsEn {
_TranslationsSettingsNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Profiel bewerken';
@override String get button_wallet => 'Portemonnee-instellingen';
@override late final _TranslationsSettingsProfileNl profile = _TranslationsSettingsProfileNl._(_root);
@override late final _TranslationsSettingsWalletNl wallet = _TranslationsSettingsWalletNl._(_root);
}
// Path: login
class _TranslationsLoginNl implements TranslationsLoginEn {
_TranslationsLoginNl._(this._root);
class _TranslationsLoginNl extends TranslationsLoginEn {
_TranslationsLoginNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginNl implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusNl implements TranslationsStreamStatusEn {
_TranslationsStreamStatusNl._(this._root);
class _TranslationsStreamStatusNl extends TranslationsStreamStatusEn {
_TranslationsStreamStatusNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusNl implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatNl implements TranslationsStreamChatEn {
_TranslationsStreamChatNl._(this._root);
class _TranslationsStreamChatNl extends TranslationsStreamChatEn {
_TranslationsStreamChatNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT UITGESCHAKELD';
@override String disabled_timeout({ required Object time}) => 'Time-out loopt af: ${time}';
@override String disabled_timeout({required Object time}) => 'Time-out loopt af: ${time}';
/// Chatbericht met time-outgebeurtenissen
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' voor '),
time,
], style: style, recognizer: recognizer);
]);
/// Voettekst einde stream onderaan chat
@override String get ended => 'STREAM BEËINDIGD';
/// Chatbericht met stream zaps
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteNl write = _TranslationsStreamChatWriteNl._(_root);
@override late final _TranslationsStreamChatBadgeNl badge = _TranslationsStreamChatBadgeNl._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatNl implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorNl implements TranslationsZapErrorEn {
_TranslationsZapErrorNl._(this._root);
class _TranslationsZapErrorNl extends TranslationsZapErrorEn {
_TranslationsZapErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorNl implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Geen bliksemadres gevonden';
}
// Path: profile.edit
class _TranslationsProfileEditNl implements TranslationsProfileEditEn {
_TranslationsProfileEditNl._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileNl extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get display_name => 'Naam weergeven';
@override String get about => 'Over ons';
@override String get about => 'Over';
@override String get nip05 => 'Nostr Adres';
@override String get lud16 => 'Lightning adres';
@override late final _TranslationsProfileEditErrorNl error = _TranslationsProfileEditErrorNl._(_root);
@override String get lud16 => 'Bliksemadres';
@override late final _TranslationsSettingsProfileErrorNl error = _TranslationsSettingsProfileErrorNl._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletNl extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Portemonnee verbinden (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Portefeuille loskoppelen';
@override String get connect_1tap => '1-Tap Aansluiting';
@override String get paste => 'URL plakken';
@override String get balance => 'Saldo';
@override String get name => 'Portemonnee';
@override late final _TranslationsSettingsWalletErrorNl error = _TranslationsSettingsWalletErrorNl._(_root);
}
// Path: login.error
class _TranslationsLoginErrorNl implements TranslationsLoginErrorEn {
_TranslationsLoginErrorNl._(this._root);
class _TranslationsLoginErrorNl extends TranslationsLoginErrorEn {
_TranslationsLoginErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorNl implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteNl implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteNl._(this._root);
class _TranslationsStreamChatWriteNl extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteNl implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeNl implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeNl._(this._root);
class _TranslationsStreamChatBadgeNl extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeNl implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidNl implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidNl._(this._root);
class _TranslationsStreamChatRaidNl extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
/// Chat raid bericht naar een andere stream
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat invalbericht van een andere stream
@override String from({ required Object name}) => 'RAID VAN ${name}';
@override String from({required Object name}) => 'RAID VAN ${name}';
/// Afteltimer voor automatisch rijden
@override String countdown({ required Object time}) => 'Overvallen in ${time}';
@override String countdown({required Object time}) => 'Overvallen in ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorNl implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorNl._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorNl extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorNl implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Kan profiel niet bewerken als ik ben uitgelogd';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorNl extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kan geen verbinding maken met portemonnee als ik ben uitgelogd';
@override String get nwc_auth_event_not_found => 'Geen portemonnee-auth-gebeurtenis gevonden';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsNl {
@ -337,39 +421,41 @@ extension on TranslationsNl {
case 'most_zapped_streamers': return 'Meeste Zapped Streamers';
case 'no_user_found': return 'Geen gebruiker gevonden';
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,
one: '1 kijker',
other: '${n} kijkers',
other: '${NumberFormat.decimalPattern('nl').format(n)} kijkers',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'GESLOTEN';
case 'stream.status.planned': return 'GEPLAND';
case 'stream.started': return ({ required Object timestamp}) => 'Begonnen met ${timestamp}';
case 'stream.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_timeout': return ({ required Object time}) => 'Time-out loopt af: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Time-out loopt af: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' timed out '),
user,
const TextSpan(text: ' voor '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM BEËINDIGD';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Schrijf bericht';
case 'stream.chat.write.no_signer': return 'Kan geen berichten schrijven met npub login';
case 'stream.chat.write.login': return 'Log in om berichten te verzenden';
case 'stream.chat.badge.awarded_to': return 'Toegekend aan:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID VAN ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Overvallen in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Doel: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Overblijvend: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID VAN ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Overvallen in ${time}';
case 'goal.title': return ({required Object amount}) => 'Doel: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Overblijvend: ${amount}';
case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Inloggen';
case 'button.logout': return 'Uitloggen';
@ -380,35 +466,65 @@ extension on TranslationsNl {
case 'button.unmute': return 'Niet langer negeren';
case 'button.share': return 'Deel';
case 'button.save': return 'Opslaan';
case 'embed.article_by': return ({ required Object name}) => 'Artikel door ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Opmerking door ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream via ${name}';
case 'button.connect': return 'Maak verbinding met';
case 'button.settings': return 'Instellingen';
case 'embed.article_by': return ({required Object name}) => 'Artikel door ${name}';
case 'embed.note_by': return ({required Object name}) => 'Opmerking door ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Live stream via ${name}';
case 'stream_list.following': return 'Volgt';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Gepland';
case 'stream_list.ended': return 'Beëindigd';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Aangepast bedrag';
case 'zap.confirm': return 'Bevestig';
case 'zap.comment': return 'Opmerking';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Openen in portefeuille';
case 'zap.button_connect_wallet': return 'Portemonnee aansluiten';
case 'zap.copy': return 'Gekopieerd naar klembord';
case 'zap.error.invalid_custom_amount': return 'Ongeldig aangepast bedrag';
case 'zap.error.no_wallet': return 'Geen bliksemportemonnee geïnstalleerd';
case 'zap.error.no_lud16': return 'Geen bliksemadres gevonden';
case 'profile.past_streams': return 'Afgelopen Streams';
case 'profile.edit.display_name': return 'Naam weergeven';
case 'profile.edit.about': return 'Over ons';
case 'profile.edit.nip05': return 'Nostr Adres';
case 'profile.edit.lud16': return 'Lightning adres';
case 'profile.edit.error.logged_out': return 'Kan profiel niet bewerken als ik ben uitgelogd';
case 'settings.button_profile': return 'Profiel bewerken';
case 'settings.button_wallet': return 'Portemonnee-instellingen';
case 'settings.profile.display_name': return 'Naam weergeven';
case 'settings.profile.about': return 'Over';
case 'settings.profile.nip05': return 'Nostr Adres';
case 'settings.profile.lud16': return 'Bliksemadres';
case 'settings.profile.error.logged_out': return 'Kan profiel niet bewerken als ik ben uitgelogd';
case 'settings.wallet.connect_wallet': return 'Portemonnee verbinden (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Portefeuille loskoppelen';
case 'settings.wallet.connect_1tap': return '1-Tap Aansluiting';
case 'settings.wallet.paste': return 'URL plakken';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'Geen portemonnee-auth-gebeurtenis gevonden';
case 'login.username': return 'Gebruikersnaam';
case 'login.amber': return 'Inloggen met Amber';
case 'login.key': return 'Inloggen met sleutel';
case 'login.create': return 'Account aanmaken';
case 'login.error.invalid_key': return 'Ongeldige sleutel';
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;
}
}

View File

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

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsPl implements Translations {
class TranslationsPl extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsPl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsPl implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsPl implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsPl _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsPl implements Translations {
/// Anonimowy użytkownik
@override String get anon => 'Anon';
@override String full_amount_sats({required num n}) => '${NumberFormat.decimalPattern('pl').format(n)} sats';
/// Liczba widzów strumienia
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n,
one: '1 przeglądarka',
other: '${n} widzowie',
other: '{n:decimalPattern} widzów',
);
@override late final _TranslationsStreamPl stream = _TranslationsStreamPl._(_root);
@ -66,36 +69,39 @@ class TranslationsPl implements Translations {
@override late final _TranslationsZapPl zap = _TranslationsZapPl._(_root);
@override late final _TranslationsProfilePl profile = _TranslationsProfilePl._(_root);
@override late final _TranslationsSettingsPl settings = _TranslationsSettingsPl._(_root);
@override late final _TranslationsLoginPl login = _TranslationsLoginPl._(_root);
@override late final _TranslationsLivePl live = _TranslationsLivePl._(_root);
}
// Path: stream
class _TranslationsStreamPl implements TranslationsStreamEn {
_TranslationsStreamPl._(this._root);
class _TranslationsStreamPl extends TranslationsStreamEn {
_TranslationsStreamPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusPl status = _TranslationsStreamStatusPl._(_root);
@override String started({ required Object timestamp}) => 'Start ${timestamp}';
@override String started({required Object timestamp}) => 'Start ${timestamp}';
@override String notification({required Object name}) => '${name} został uruchomiony!';
@override late final _TranslationsStreamChatPl chat = _TranslationsStreamChatPl._(_root);
}
// Path: goal
class _TranslationsGoalPl implements TranslationsGoalEn {
_TranslationsGoalPl._(this._root);
class _TranslationsGoalPl extends TranslationsGoalEn {
_TranslationsGoalPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Cel: ${amount}';
@override String remaining({ required Object amount}) => 'Pozostałe: ${amount}';
@override String title({required Object amount}) => 'Cel: ${amount}';
@override String remaining({required Object amount}) => 'Pozostałe: ${amount}';
@override String get complete => 'ZAKOŃCZONE';
}
// Path: button
class _TranslationsButtonPl implements TranslationsButtonEn {
_TranslationsButtonPl._(this._root);
class _TranslationsButtonPl extends TranslationsButtonEn {
_TranslationsButtonPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonPl implements TranslationsButtonEn {
@override String get unmute => 'Wyłącz wyciszenie';
@override String get share => 'Udział';
@override String get save => 'Zapisz';
@override String get connect => 'Połączenie';
@override String get settings => 'Ustawienia';
}
// Path: embed
class _TranslationsEmbedPl implements TranslationsEmbedEn {
_TranslationsEmbedPl._(this._root);
class _TranslationsEmbedPl extends TranslationsEmbedEn {
_TranslationsEmbedPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Artykuł autorstwa ${name}';
@override String note_by({ required Object name}) => 'Uwaga ${name}';
@override String live_stream_by({ required Object name}) => 'Transmisja na żywo przez ${name}';
@override String article_by({required Object name}) => 'Artykuł autorstwa ${name}';
@override String note_by({required Object name}) => 'Uwaga ${name}';
@override String live_stream_by({required Object name}) => 'Transmisja na żywo przez ${name}';
}
// Path: stream_list
class _TranslationsStreamListPl implements TranslationsStreamListEn {
_TranslationsStreamListPl._(this._root);
class _TranslationsStreamListPl extends TranslationsStreamListEn {
_TranslationsStreamListPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListPl implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapPl implements TranslationsZapEn {
_TranslationsZapPl._(this._root);
class _TranslationsZapPl extends TranslationsZapEn {
_TranslationsZapPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Kwota niestandardowa';
@override String get confirm => 'Potwierdzenie';
@override String get comment => 'Komentarz';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Otwórz w portfelu';
@override String get button_connect_wallet => 'Connect Wallet';
@override String get copy => 'Skopiowane do schowka';
@override late final _TranslationsZapErrorPl error = _TranslationsZapErrorPl._(_root);
}
// Path: profile
class _TranslationsProfilePl implements TranslationsProfileEn {
_TranslationsProfilePl._(this._root);
class _TranslationsProfilePl extends TranslationsProfileEn {
_TranslationsProfilePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Poprzednie strumienie';
@override late final _TranslationsProfileEditPl edit = _TranslationsProfileEditPl._(_root);
}
// Path: settings
class _TranslationsSettingsPl extends TranslationsSettingsEn {
_TranslationsSettingsPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Edytuj profil';
@override String get button_wallet => 'Ustawienia portfela';
@override late final _TranslationsSettingsProfilePl profile = _TranslationsSettingsProfilePl._(_root);
@override late final _TranslationsSettingsWalletPl wallet = _TranslationsSettingsWalletPl._(_root);
}
// Path: login
class _TranslationsLoginPl implements TranslationsLoginEn {
_TranslationsLoginPl._(this._root);
class _TranslationsLoginPl extends TranslationsLoginEn {
_TranslationsLoginPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginPl implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusPl implements TranslationsStreamStatusEn {
_TranslationsStreamStatusPl._(this._root);
class _TranslationsStreamStatusPl extends TranslationsStreamStatusEn {
_TranslationsStreamStatusPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusPl implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatPl implements TranslationsStreamChatEn {
_TranslationsStreamChatPl._(this._root);
class _TranslationsStreamChatPl extends TranslationsStreamChatEn {
_TranslationsStreamChatPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get disabled => 'CZAT WYŁĄCZONY';
@override String disabled_timeout({ required Object time}) => 'Upłynął limit czasu: ${time}';
@override String disabled_timeout({required Object time}) => 'Upłynął limit czasu: ${time}';
/// Komunikat czatu pokazujący zdarzenia przekroczenia limitu czasu
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' upłynął limit czasu '),
user,
const TextSpan(text: ' dla '),
time,
], style: style, recognizer: recognizer);
]);
/// Stream zakończył stopkę na dole czatu
@override String get ended => 'TRANSMISJA ZAKOŃCZONA';
/// Wiadomość na czacie pokazująca zapy strumienia
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWritePl write = _TranslationsStreamChatWritePl._(_root);
@override late final _TranslationsStreamChatBadgePl badge = _TranslationsStreamChatBadgePl._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatPl implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorPl implements TranslationsZapErrorEn {
_TranslationsZapErrorPl._(this._root);
class _TranslationsZapErrorPl extends TranslationsZapErrorEn {
_TranslationsZapErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
@ -246,9 +291,9 @@ class _TranslationsZapErrorPl implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Nie znaleziono adresu pioruna';
}
// Path: profile.edit
class _TranslationsProfileEditPl implements TranslationsProfileEditEn {
_TranslationsProfileEditPl._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfilePl extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfilePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
@ -257,12 +302,28 @@ class _TranslationsProfileEditPl implements TranslationsProfileEditEn {
@override String get about => 'O';
@override String get nip05 => 'Adres Nostr';
@override String get lud16 => 'Adres błyskawicy';
@override late final _TranslationsProfileEditErrorPl error = _TranslationsProfileEditErrorPl._(_root);
@override late final _TranslationsSettingsProfileErrorPl error = _TranslationsSettingsProfileErrorPl._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletPl extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Odłącz portfel';
@override String get connect_1tap => 'Połączenie 1-wtykowe';
@override String get paste => 'Wklej adres URL';
@override String get balance => 'Równowaga';
@override String get name => 'Portfel';
@override late final _TranslationsSettingsWalletErrorPl error = _TranslationsSettingsWalletErrorPl._(_root);
}
// Path: login.error
class _TranslationsLoginErrorPl implements TranslationsLoginErrorEn {
_TranslationsLoginErrorPl._(this._root);
class _TranslationsLoginErrorPl extends TranslationsLoginErrorEn {
_TranslationsLoginErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorPl implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWritePl implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWritePl._(this._root);
class _TranslationsStreamChatWritePl extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWritePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWritePl implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgePl implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgePl._(this._root);
class _TranslationsStreamChatBadgePl extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgePl implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidPl implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidPl._(this._root);
class _TranslationsStreamChatRaidPl extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
/// Przesyłanie wiadomości na czacie do innego strumienia
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Nalot na czat z innego strumienia
@override String from({ required Object name}) => 'RAID Z ${name}';
@override String from({required Object name}) => 'RAID Z ${name}';
/// Zegar odliczający czas do automatycznej jazdy
@override String countdown({ required Object time}) => 'Naloty w ${time}';
@override String countdown({required Object time}) => 'Naloty w ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorPl implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorPl._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorPl extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorPl implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Nie można edytować profilu po wylogowaniu';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorPl extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Nie można połączyć portfela po wylogowaniu';
@override String get nwc_auth_event_not_found => 'Nie znaleziono zdarzenia autoryzacji portfela';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsPl {
@ -337,39 +421,41 @@ extension on TranslationsPl {
case 'most_zapped_streamers': return 'Większość zapped streamerów';
case 'no_user_found': return 'Nie znaleziono użytkownika';
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,
one: '1 przeglądarka',
other: '${n} widzowie',
other: '{n:decimalPattern} widzów',
);
case 'stream.status.live': return 'NA ŻYWO';
case 'stream.status.ended': return 'ZAKOŃCZONY';
case 'stream.status.planned': return 'PLANOWANE';
case 'stream.started': return ({ required Object timestamp}) => 'Start ${timestamp}';
case 'stream.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_timeout': return ({ required Object time}) => 'Upłynął limit czasu: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Upłynął limit czasu: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' upłynął limit czasu '),
user,
const TextSpan(text: ' dla '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'TRANSMISJA ZAKOŃCZONA';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Napisz wiadomość';
case 'stream.chat.write.no_signer': return 'Nie można pisać wiadomości z loginem npub';
case 'stream.chat.write.login': return 'Zaloguj się, aby wysyłać wiadomości';
case 'stream.chat.badge.awarded_to': return 'Przyznano:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID Z ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Naloty w ${time}';
case 'goal.title': return ({ required Object amount}) => 'Cel: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Pozostałe: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID Z ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Naloty w ${time}';
case 'goal.title': return ({required Object amount}) => 'Cel: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Pozostałe: ${amount}';
case 'goal.complete': return 'ZAKOŃCZONE';
case 'button.login': return 'Logowanie';
case 'button.logout': return 'Wylogowanie';
@ -380,35 +466,65 @@ extension on TranslationsPl {
case 'button.unmute': return 'Wyłącz wyciszenie';
case 'button.share': return 'Udział';
case 'button.save': return 'Zapisz';
case 'embed.article_by': return ({ required Object name}) => 'Artykuł autorstwa ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Uwaga ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Transmisja na żywo przez ${name}';
case 'button.connect': return 'Połączenie';
case 'button.settings': return 'Ustawienia';
case 'embed.article_by': return ({required Object name}) => 'Artykuł autorstwa ${name}';
case 'embed.note_by': return ({required Object name}) => 'Uwaga ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Transmisja na żywo przez ${name}';
case 'stream_list.following': return 'Następujący';
case 'stream_list.live': return 'Na żywo';
case 'stream_list.planned': return 'Planowane';
case 'stream_list.ended': return 'Zakończony';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Kwota niestandardowa';
case 'zap.confirm': return 'Potwierdzenie';
case 'zap.comment': return 'Komentarz';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Otwórz w portfelu';
case 'zap.button_connect_wallet': return 'Connect Wallet';
case 'zap.copy': return 'Skopiowane do schowka';
case 'zap.error.invalid_custom_amount': return 'Nieprawidłowa kwota niestandardowa';
case 'zap.error.no_wallet': return 'Brak zainstalowanego portfela Lightning';
case 'zap.error.no_lud16': return 'Nie znaleziono adresu pioruna';
case 'profile.past_streams': return 'Poprzednie strumienie';
case 'profile.edit.display_name': return 'Wyświetlana nazwa';
case 'profile.edit.about': return 'O';
case 'profile.edit.nip05': return 'Adres Nostr';
case 'profile.edit.lud16': return 'Adres błyskawicy';
case 'profile.edit.error.logged_out': return 'Nie można edytować profilu po wylogowaniu';
case 'settings.button_profile': return 'Edytuj profil';
case 'settings.button_wallet': return 'Ustawienia portfela';
case 'settings.profile.display_name': return 'Wyświetlana nazwa';
case 'settings.profile.about': return 'O';
case 'settings.profile.nip05': return 'Adres Nostr';
case 'settings.profile.lud16': return 'Adres błyskawicy';
case 'settings.profile.error.logged_out': return 'Nie można edytować profilu po wylogowaniu';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Odłącz portfel';
case 'settings.wallet.connect_1tap': return 'Połączenie 1-wtykowe';
case 'settings.wallet.paste': return 'Wklej adres URL';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'Nie znaleziono zdarzenia autoryzacji portfela';
case 'login.username': return 'Nazwa użytkownika';
case 'login.amber': return 'Zaloguj się za pomocą Amber';
case 'login.key': return 'Logowanie za pomocą klucza';
case 'login.create': return 'Utwórz konto';
case 'login.error.invalid_key': return 'Nieprawidłowy klucz';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsPt implements Translations {
class TranslationsPt extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsPt({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsPt implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsPt implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsPt _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsPt implements Translations {
/// Um usuário 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
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n,
one: '1 visualizador',
other: '${n} espectadores',
other: '${NumberFormat.decimalPattern('pt').format(n)} espectadores',
);
@override late final _TranslationsStreamPt stream = _TranslationsStreamPt._(_root);
@ -66,36 +69,39 @@ class TranslationsPt implements Translations {
@override late final _TranslationsZapPt zap = _TranslationsZapPt._(_root);
@override late final _TranslationsProfilePt profile = _TranslationsProfilePt._(_root);
@override late final _TranslationsSettingsPt settings = _TranslationsSettingsPt._(_root);
@override late final _TranslationsLoginPt login = _TranslationsLoginPt._(_root);
@override late final _TranslationsLivePt live = _TranslationsLivePt._(_root);
}
// Path: stream
class _TranslationsStreamPt implements TranslationsStreamEn {
_TranslationsStreamPt._(this._root);
class _TranslationsStreamPt extends TranslationsStreamEn {
_TranslationsStreamPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusPt status = _TranslationsStreamStatusPt._(_root);
@override String started({ required Object timestamp}) => 'Iniciado em ${timestamp}';
@override 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);
}
// Path: goal
class _TranslationsGoalPt implements TranslationsGoalEn {
_TranslationsGoalPt._(this._root);
class _TranslationsGoalPt extends TranslationsGoalEn {
_TranslationsGoalPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Meta: ${amount}';
@override String remaining({ required Object amount}) => 'Restante: ${amount}';
@override String title({required Object amount}) => 'Meta: ${amount}';
@override String remaining({required Object amount}) => 'Restante: ${amount}';
@override String get complete => 'COMPLETO';
}
// Path: button
class _TranslationsButtonPt implements TranslationsButtonEn {
_TranslationsButtonPt._(this._root);
class _TranslationsButtonPt extends TranslationsButtonEn {
_TranslationsButtonPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonPt implements TranslationsButtonEn {
@override String get unmute => 'Desmutar';
@override String get share => 'Compartilhar';
@override String get save => 'Salvar';
@override String get connect => 'Conectar';
@override String get settings => 'Configurações';
}
// Path: embed
class _TranslationsEmbedPt implements TranslationsEmbedEn {
_TranslationsEmbedPt._(this._root);
class _TranslationsEmbedPt extends TranslationsEmbedEn {
_TranslationsEmbedPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Artigo de ${name}';
@override String note_by({ required Object name}) => 'Nota de ${name}';
@override String live_stream_by({ required Object name}) => 'Transmissão ao vivo pelo site ${name}';
@override String article_by({required Object name}) => 'Artigo de ${name}';
@override String note_by({required Object name}) => 'Nota de ${name}';
@override String live_stream_by({required Object name}) => 'Transmissão ao vivo pelo site ${name}';
}
// Path: stream_list
class _TranslationsStreamListPt implements TranslationsStreamListEn {
_TranslationsStreamListPt._(this._root);
class _TranslationsStreamListPt extends TranslationsStreamListEn {
_TranslationsStreamListPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListPt implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapPt implements TranslationsZapEn {
_TranslationsZapPt._(this._root);
class _TranslationsZapPt extends TranslationsZapEn {
_TranslationsZapPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Valor personalizado';
@override String get confirm => 'Confirmar';
@override String get comment => 'Comentar';
@override String button_zap_ready({ required Object amount}) => 'Enviar Zap de ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Enviar Zap de ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Abrir na carteira';
@override String get button_connect_wallet => 'Conectar carteira';
@override String get copy => 'Copiado para a área de transferência';
@override late final _TranslationsZapErrorPt error = _TranslationsZapErrorPt._(_root);
}
// Path: profile
class _TranslationsProfilePt implements TranslationsProfileEn {
_TranslationsProfilePt._(this._root);
class _TranslationsProfilePt extends TranslationsProfileEn {
_TranslationsProfilePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Transmissões Passadas';
@override late final _TranslationsProfileEditPt edit = _TranslationsProfileEditPt._(_root);
}
// Path: settings
class _TranslationsSettingsPt extends TranslationsSettingsEn {
_TranslationsSettingsPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Editar perfil';
@override String get button_wallet => 'Configurações da carteira';
@override late final _TranslationsSettingsProfilePt profile = _TranslationsSettingsProfilePt._(_root);
@override late final _TranslationsSettingsWalletPt wallet = _TranslationsSettingsWalletPt._(_root);
}
// Path: login
class _TranslationsLoginPt implements TranslationsLoginEn {
_TranslationsLoginPt._(this._root);
class _TranslationsLoginPt extends TranslationsLoginEn {
_TranslationsLoginPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginPt implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusPt implements TranslationsStreamStatusEn {
_TranslationsStreamStatusPt._(this._root);
class _TranslationsStreamStatusPt extends TranslationsStreamStatusEn {
_TranslationsStreamStatusPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusPt implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatPt implements TranslationsStreamChatEn {
_TranslationsStreamChatPt._(this._root);
class _TranslationsStreamChatPt extends TranslationsStreamChatEn {
_TranslationsStreamChatPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get disabled => 'BATE-PAPO DESATIVADO';
@override String disabled_timeout({ required Object time}) => 'O tempo limite expira: ${time}';
@override String disabled_timeout({required Object time}) => 'O tempo limite expira: ${time}';
/// Mensagem de bate-papo mostrando eventos de tempo limite
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Tempo esgotado '),
user,
const TextSpan(text: ' para '),
time,
], style: style, recognizer: recognizer);
]);
/// O rodapé do fluxo terminou na parte inferior do bate-papo
@override String get ended => 'TRANSMISSÃO ENCERRADA';
/// Mensagem de bate-papo mostrando zaps de fluxo
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapeou '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWritePt write = _TranslationsStreamChatWritePt._(_root);
@override late final _TranslationsStreamChatBadgePt badge = _TranslationsStreamChatBadgePt._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatPt implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorPt implements TranslationsZapErrorEn {
_TranslationsZapErrorPt._(this._root);
class _TranslationsZapErrorPt extends TranslationsZapErrorEn {
_TranslationsZapErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorPt implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Nenhum endereço de raio encontrado';
}
// Path: profile.edit
class _TranslationsProfileEditPt implements TranslationsProfileEditEn {
_TranslationsProfileEditPt._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfilePt extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfilePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get display_name => 'Nome de exibição';
@override String get about => 'Sobre';
@override String get nip05 => 'Endereço do Nostr';
@override String get lud16 => 'Endereço Lightning';
@override late final _TranslationsProfileEditErrorPt error = _TranslationsProfileEditErrorPt._(_root);
@override String get nip05 => 'Endereço Nostr';
@override String get lud16 => 'Endereço para relâmpagos';
@override late final _TranslationsSettingsProfileErrorPt error = _TranslationsSettingsProfileErrorPt._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletPt extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Carteira Connect (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Desconectar carteira';
@override String get connect_1tap => 'Conexão de 1 torneira';
@override String get paste => 'Colar URL';
@override String get balance => 'Equilíbrio';
@override String get name => 'Carteira';
@override late final _TranslationsSettingsWalletErrorPt error = _TranslationsSettingsWalletErrorPt._(_root);
}
// Path: login.error
class _TranslationsLoginErrorPt implements TranslationsLoginErrorEn {
_TranslationsLoginErrorPt._(this._root);
class _TranslationsLoginErrorPt extends TranslationsLoginErrorEn {
_TranslationsLoginErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorPt implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWritePt implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWritePt._(this._root);
class _TranslationsStreamChatWritePt extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWritePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWritePt implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgePt implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgePt._(this._root);
class _TranslationsStreamChatBadgePt extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgePt implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidPt implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidPt._(this._root);
class _TranslationsStreamChatRaidPt extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
/// Mensagem de invasão de bate-papo para outro fluxo
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Mensagem de invasão de bate-papo de outro fluxo
@override String from({ required Object name}) => 'RAID DE ${name}';
@override String from({required Object name}) => 'RAID DE ${name}';
/// Cronômetro de contagem regressiva para o ataque automático
@override String countdown({ required Object time}) => 'Incursões em ${time}';
@override String countdown({required Object time}) => 'Incursões em ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorPt implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorPt._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorPt extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorPt implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Não é possível editar o perfil quando se está desconectado';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorPt extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Não consigo conectar a carteira quando estou desconectado';
@override String get nwc_auth_event_not_found => 'Nenhum evento de autenticação de carteira encontrado';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsPt {
@ -337,39 +421,41 @@ extension on TranslationsPt {
case 'most_zapped_streamers': return 'Streamers mais afetados';
case 'no_user_found': return 'Nenhum usuário encontrado';
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,
one: '1 visualizador',
other: '${n} espectadores',
other: '${NumberFormat.decimalPattern('pt').format(n)} espectadores',
);
case 'stream.status.live': return 'AO VIVO';
case 'stream.status.ended': return 'FINALIZADO';
case 'stream.status.planned': return 'PLANEJADO';
case 'stream.started': return ({ required Object timestamp}) => 'Iniciado em ${timestamp}';
case 'stream.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_timeout': return ({ required Object time}) => 'O tempo limite expira: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'O tempo limite expira: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Tempo esgotado '),
user,
const TextSpan(text: ' para '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'TRANSMISSÃO ENCERRADA';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapeou '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Escrever mensagem';
case 'stream.chat.write.no_signer': return 'Não é possível escrever mensagens com o login do npub';
case 'stream.chat.write.login': return 'Faça login para enviar mensagens';
case 'stream.chat.badge.awarded_to': return 'Prêmio concedido a:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID DE ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Incursões em ${time}';
case 'goal.title': return ({ required Object amount}) => 'Meta: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Restante: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID DE ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Incursões em ${time}';
case 'goal.title': return ({required Object amount}) => 'Meta: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Restante: ${amount}';
case 'goal.complete': return 'COMPLETO';
case 'button.login': return 'Entrar';
case 'button.logout': return 'Sair';
@ -380,35 +466,65 @@ extension on TranslationsPt {
case 'button.unmute': return 'Desmutar';
case 'button.share': return 'Compartilhar';
case 'button.save': return 'Salvar';
case 'embed.article_by': return ({ required Object name}) => 'Artigo de ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Nota de ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Transmissão ao vivo pelo site ${name}';
case 'button.connect': return 'Conectar';
case 'button.settings': return 'Configurações';
case 'embed.article_by': return ({required Object name}) => 'Artigo de ${name}';
case 'embed.note_by': return ({required Object name}) => 'Nota de ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Transmissão ao vivo pelo site ${name}';
case 'stream_list.following': return 'Seguindo';
case 'stream_list.live': return 'Ao vivo';
case 'stream_list.planned': return 'Planejado';
case 'stream_list.ended': return 'Encerrado';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Valor personalizado';
case 'zap.confirm': return 'Confirmar';
case 'zap.comment': return 'Comentar';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Enviar Zap de ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Enviar Zap de ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Abrir na carteira';
case 'zap.button_connect_wallet': return 'Conectar carteira';
case 'zap.copy': return 'Copiado para a área de transferência';
case 'zap.error.invalid_custom_amount': return 'Valor personalizado inválido';
case 'zap.error.no_wallet': return 'Nenhuma carteira lightning instalada';
case 'zap.error.no_lud16': return 'Nenhum endereço de raio encontrado';
case 'profile.past_streams': return 'Transmissões Passadas';
case 'profile.edit.display_name': return 'Nome de exibição';
case 'profile.edit.about': return 'Sobre';
case 'profile.edit.nip05': return 'Endereço do Nostr';
case 'profile.edit.lud16': return 'Endereço Lightning';
case 'profile.edit.error.logged_out': return 'Não é possível editar o perfil quando se está desconectado';
case 'settings.button_profile': return 'Editar perfil';
case 'settings.button_wallet': return 'Configurações da carteira';
case 'settings.profile.display_name': return 'Nome de exibição';
case 'settings.profile.about': return 'Sobre';
case 'settings.profile.nip05': return 'Endereço Nostr';
case 'settings.profile.lud16': return 'Endereço para relâmpagos';
case 'settings.profile.error.logged_out': return 'Não é possível editar o perfil quando se está desconectado';
case 'settings.wallet.connect_wallet': return 'Carteira Connect (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Desconectar carteira';
case 'settings.wallet.connect_1tap': return 'Conexão de 1 torneira';
case 'settings.wallet.paste': return 'Colar URL';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'Nenhum evento de autenticação de carteira encontrado';
case 'login.username': return 'Nome de usuário';
case 'login.amber': return 'Faça login com o Amber';
case 'login.key': return 'Login com chave';
case 'login.create': return 'Criar Conta';
case 'login.error.invalid_key': return 'Chave inválida';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsRo implements Translations {
class TranslationsRo extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsRo({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsRo implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsRo implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsRo _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsRo implements Translations {
/// Un utilizator anonim
@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
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n,
one: '1 vizualizator',
other: '${n} telespectatori',
other: '${NumberFormat.decimalPattern('ro').format(n)} telespectatori',
);
@override late final _TranslationsStreamRo stream = _TranslationsStreamRo._(_root);
@ -66,36 +69,39 @@ class TranslationsRo implements Translations {
@override late final _TranslationsZapRo zap = _TranslationsZapRo._(_root);
@override late final _TranslationsProfileRo profile = _TranslationsProfileRo._(_root);
@override late final _TranslationsSettingsRo settings = _TranslationsSettingsRo._(_root);
@override late final _TranslationsLoginRo login = _TranslationsLoginRo._(_root);
@override late final _TranslationsLiveRo live = _TranslationsLiveRo._(_root);
}
// Path: stream
class _TranslationsStreamRo implements TranslationsStreamEn {
_TranslationsStreamRo._(this._root);
class _TranslationsStreamRo extends TranslationsStreamEn {
_TranslationsStreamRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusRo status = _TranslationsStreamStatusRo._(_root);
@override String started({ required Object timestamp}) => 'A început ${timestamp}';
@override 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);
}
// Path: goal
class _TranslationsGoalRo implements TranslationsGoalEn {
_TranslationsGoalRo._(this._root);
class _TranslationsGoalRo extends TranslationsGoalEn {
_TranslationsGoalRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Obiectiv: ${amount}';
@override String remaining({ required Object amount}) => 'Rămase: ${amount}';
@override String title({required Object amount}) => 'Obiectiv: ${amount}';
@override String remaining({required Object amount}) => 'Rămase: ${amount}';
@override String get complete => 'COMPLET';
}
// Path: button
class _TranslationsButtonRo implements TranslationsButtonEn {
_TranslationsButtonRo._(this._root);
class _TranslationsButtonRo extends TranslationsButtonEn {
_TranslationsButtonRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonRo implements TranslationsButtonEn {
@override String get unmute => 'Dezactivați';
@override String get share => 'Share';
@override String get save => 'Salvați';
@override String get connect => 'Conectare';
@override String get settings => 'Setări';
}
// Path: embed
class _TranslationsEmbedRo implements TranslationsEmbedEn {
_TranslationsEmbedRo._(this._root);
class _TranslationsEmbedRo extends TranslationsEmbedEn {
_TranslationsEmbedRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Articol de ${name}';
@override String note_by({ required Object name}) => 'Notă de la ${name}';
@override String live_stream_by({ required Object name}) => 'Transmisiune live prin ${name}';
@override String article_by({required Object name}) => 'Articol de ${name}';
@override String note_by({required Object name}) => 'Notă de la ${name}';
@override String live_stream_by({required Object name}) => 'Transmisiune live prin ${name}';
}
// Path: stream_list
class _TranslationsStreamListRo implements TranslationsStreamListEn {
_TranslationsStreamListRo._(this._root);
class _TranslationsStreamListRo extends TranslationsStreamListEn {
_TranslationsStreamListRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListRo implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapRo implements TranslationsZapEn {
_TranslationsZapRo._(this._root);
class _TranslationsZapRo extends TranslationsZapEn {
_TranslationsZapRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Sumă personalizată';
@override String get confirm => 'Confirmați';
@override String get comment => 'Comentariu';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Deschide în portofel';
@override String get button_connect_wallet => 'Conectați portofelul';
@override String get copy => 'Copiat în clipboard';
@override late final _TranslationsZapErrorRo error = _TranslationsZapErrorRo._(_root);
}
// Path: profile
class _TranslationsProfileRo implements TranslationsProfileEn {
_TranslationsProfileRo._(this._root);
class _TranslationsProfileRo extends TranslationsProfileEn {
_TranslationsProfileRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Fluxuri trecute';
@override late final _TranslationsProfileEditRo edit = _TranslationsProfileEditRo._(_root);
}
// Path: settings
class _TranslationsSettingsRo extends TranslationsSettingsEn {
_TranslationsSettingsRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Editare profil';
@override String get button_wallet => 'Setări portofel';
@override late final _TranslationsSettingsProfileRo profile = _TranslationsSettingsProfileRo._(_root);
@override late final _TranslationsSettingsWalletRo wallet = _TranslationsSettingsWalletRo._(_root);
}
// Path: login
class _TranslationsLoginRo implements TranslationsLoginEn {
_TranslationsLoginRo._(this._root);
class _TranslationsLoginRo extends TranslationsLoginEn {
_TranslationsLoginRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginRo implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusRo implements TranslationsStreamStatusEn {
_TranslationsStreamStatusRo._(this._root);
class _TranslationsStreamStatusRo extends TranslationsStreamStatusEn {
_TranslationsStreamStatusRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusRo implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatRo implements TranslationsStreamChatEn {
_TranslationsStreamChatRo._(this._root);
class _TranslationsStreamChatRo extends TranslationsStreamChatEn {
_TranslationsStreamChatRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT DEZACTIVAT';
@override String disabled_timeout({ required Object time}) => 'Timpul expiră: ${time}';
@override String disabled_timeout({required Object time}) => 'Timpul expiră: ${time}';
/// Mesaj de chat care afișează evenimentele de timeout
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Timed out '),
user,
const TextSpan(text: ' pentru '),
time,
], style: style, recognizer: recognizer);
]);
/// Stream a încheiat footer-ul în partea de jos a chat-ului
@override String get ended => 'STREAM ÎNCHEIAT';
/// Mesaj de chat care arată zapsuri de flux
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteRo write = _TranslationsStreamChatWriteRo._(_root);
@override late final _TranslationsStreamChatBadgeRo badge = _TranslationsStreamChatBadgeRo._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatRo implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorRo implements TranslationsZapErrorEn {
_TranslationsZapErrorRo._(this._root);
class _TranslationsZapErrorRo extends TranslationsZapErrorEn {
_TranslationsZapErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
@ -246,9 +291,9 @@ class _TranslationsZapErrorRo implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Nu a fost găsită nicio adresă de fulgere';
}
// Path: profile.edit
class _TranslationsProfileEditRo implements TranslationsProfileEditEn {
_TranslationsProfileEditRo._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileRo extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
@ -257,12 +302,28 @@ class _TranslationsProfileEditRo implements TranslationsProfileEditEn {
@override String get about => 'Despre';
@override String get nip05 => 'Adresa Nostr';
@override String get lud16 => 'Adresa fulgerului';
@override late final _TranslationsProfileEditErrorRo error = _TranslationsProfileEditErrorRo._(_root);
@override late final _TranslationsSettingsProfileErrorRo error = _TranslationsSettingsProfileErrorRo._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletRo extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Conectați portofelul (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Deconectați portofelul';
@override String get connect_1tap => 'Conexiune 1-Tap';
@override String get paste => 'Lipiți URL';
@override String get balance => 'Echilibru';
@override String get name => 'Portofel';
@override late final _TranslationsSettingsWalletErrorRo error = _TranslationsSettingsWalletErrorRo._(_root);
}
// Path: login.error
class _TranslationsLoginErrorRo implements TranslationsLoginErrorEn {
_TranslationsLoginErrorRo._(this._root);
class _TranslationsLoginErrorRo extends TranslationsLoginErrorEn {
_TranslationsLoginErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorRo implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteRo implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteRo._(this._root);
class _TranslationsStreamChatWriteRo extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteRo implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeRo implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeRo._(this._root);
class _TranslationsStreamChatBadgeRo extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeRo implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidRo implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidRo._(this._root);
class _TranslationsStreamChatRaidRo extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
/// Chat mesaj raid la un alt flux
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid mesaj din alt flux
@override String from({ required Object name}) => 'RAID DE LA ${name}';
@override String from({required Object name}) => 'RAID DE LA ${name}';
/// Cronometru cu numărătoare inversă pentru auto-raid
@override String countdown({ required Object time}) => 'Raiduri în ${time}';
@override String countdown({required Object time}) => 'Raiduri în ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorRo implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorRo._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorRo extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorRo implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Nu pot edita profilul când sunt deconectat';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorRo extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Nu puteți conecta portofelul atunci când sunteți deconectat';
@override String get nwc_auth_event_not_found => 'Nu a fost găsit niciun eveniment de autorizare a portofelului';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsRo {
@ -337,39 +421,41 @@ extension on TranslationsRo {
case 'most_zapped_streamers': return 'Cele mai multe Streamers Zapped';
case 'no_user_found': return 'Niciun utilizator găsit';
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,
one: '1 vizualizator',
other: '${n} telespectatori',
other: '${NumberFormat.decimalPattern('ro').format(n)} telespectatori',
);
case 'stream.status.live': return 'ÎN DIRECT';
case 'stream.status.ended': return 'TERMINAT';
case 'stream.status.planned': return 'PLANIFICATE';
case 'stream.started': return ({ required Object timestamp}) => 'A început ${timestamp}';
case 'stream.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_timeout': return ({ required Object time}) => 'Timpul expiră: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timpul expiră: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' Timed out '),
user,
const TextSpan(text: ' pentru '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM ÎNCHEIAT';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Scrieți mesajul';
case 'stream.chat.write.no_signer': return 'Nu se pot scrie mesaje cu autentificarea npub';
case 'stream.chat.write.login': return 'Vă rugăm să vă autentificați pentru a trimite mesaje';
case 'stream.chat.badge.awarded_to': return 'Premiat pentru:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID DE LA ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiduri în ${time}';
case 'goal.title': return ({ required Object amount}) => 'Obiectiv: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Rămase: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID DE LA ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiduri în ${time}';
case 'goal.title': return ({required Object amount}) => 'Obiectiv: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Rămase: ${amount}';
case 'goal.complete': return 'COMPLET';
case 'button.login': return 'Autentificare';
case 'button.logout': return 'Ieșire';
@ -380,35 +466,65 @@ extension on TranslationsRo {
case 'button.unmute': return 'Dezactivați';
case 'button.share': return 'Share';
case 'button.save': return 'Salvați';
case 'embed.article_by': return ({ required Object name}) => 'Articol de ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Notă de la ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Transmisiune live prin ${name}';
case 'button.connect': return 'Conectare';
case 'button.settings': return 'Setări';
case 'embed.article_by': return ({required Object name}) => 'Articol de ${name}';
case 'embed.note_by': return ({required Object name}) => 'Notă de la ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Transmisiune live prin ${name}';
case 'stream_list.following': return 'În urma';
case 'stream_list.live': return 'În direct';
case 'stream_list.planned': return 'Planificate';
case 'stream_list.ended': return 'Încheiat';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Sumă personalizată';
case 'zap.confirm': return 'Confirmați';
case 'zap.comment': return 'Comentariu';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Deschide în portofel';
case 'zap.button_connect_wallet': return 'Conectați portofelul';
case 'zap.copy': return 'Copiat în clipboard';
case 'zap.error.invalid_custom_amount': return 'Sumă personalizată invalidă';
case 'zap.error.no_wallet': return 'Nu este instalat niciun portofel Lightning';
case 'zap.error.no_lud16': return 'Nu a fost găsită nicio adresă de fulgere';
case 'profile.past_streams': return 'Fluxuri trecute';
case 'profile.edit.display_name': return 'Nume afișat';
case 'profile.edit.about': return 'Despre';
case 'profile.edit.nip05': return 'Adresa Nostr';
case 'profile.edit.lud16': return 'Adresa fulgerului';
case 'profile.edit.error.logged_out': return 'Nu pot edita profilul când sunt deconectat';
case 'settings.button_profile': return 'Editare profil';
case 'settings.button_wallet': return 'Setări portofel';
case 'settings.profile.display_name': return 'Nume afișat';
case 'settings.profile.about': return 'Despre';
case 'settings.profile.nip05': return 'Adresa Nostr';
case 'settings.profile.lud16': return 'Adresa fulgerului';
case 'settings.profile.error.logged_out': return 'Nu pot edita profilul când sunt deconectat';
case 'settings.wallet.connect_wallet': return 'Conectați portofelul (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Deconectați portofelul';
case 'settings.wallet.connect_1tap': return 'Conexiune 1-Tap';
case 'settings.wallet.paste': return 'Lipiți URL';
case 'settings.wallet.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.nwc_auth_event_not_found': return 'Nu a fost găsit niciun eveniment de autorizare a portofelului';
case 'login.username': return 'Nume utilizator';
case 'login.amber': return 'Conectați-vă cu Amber';
case 'login.key': return 'Autentificare cu cheie';
case 'login.create': return 'Creare cont';
case 'login.error.invalid_key': return 'Cheie invalidă';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsRu implements Translations {
class TranslationsRu extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsRu({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsRu implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsRu implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsRu _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsRu implements Translations {
/// Анонимный пользователь
@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,
one: '1 зритель',
other: '${n} зрителей',
other: '${NumberFormat.decimalPattern('ru').format(n)} зрителей',
);
@override late final _TranslationsStreamRu stream = _TranslationsStreamRu._(_root);
@ -66,36 +69,39 @@ class TranslationsRu implements Translations {
@override late final _TranslationsZapRu zap = _TranslationsZapRu._(_root);
@override late final _TranslationsProfileRu profile = _TranslationsProfileRu._(_root);
@override late final _TranslationsSettingsRu settings = _TranslationsSettingsRu._(_root);
@override late final _TranslationsLoginRu login = _TranslationsLoginRu._(_root);
@override late final _TranslationsLiveRu live = _TranslationsLiveRu._(_root);
}
// Path: stream
class _TranslationsStreamRu implements TranslationsStreamEn {
_TranslationsStreamRu._(this._root);
class _TranslationsStreamRu extends TranslationsStreamEn {
_TranslationsStreamRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusRu status = _TranslationsStreamStatusRu._(_root);
@override String started({ required Object timestamp}) => 'Начало ${timestamp}';
@override String started({required Object timestamp}) => 'Начало ${timestamp}';
@override String notification({required Object name}) => '${name} запустился!';
@override late final _TranslationsStreamChatRu chat = _TranslationsStreamChatRu._(_root);
}
// Path: goal
class _TranslationsGoalRu implements TranslationsGoalEn {
_TranslationsGoalRu._(this._root);
class _TranslationsGoalRu extends TranslationsGoalEn {
_TranslationsGoalRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Цель: ${amount}';
@override String remaining({ required Object amount}) => 'Осталось: ${amount}';
@override String title({required Object amount}) => 'Цель: ${amount}';
@override String remaining({required Object amount}) => 'Осталось: ${amount}';
@override String get complete => 'КОМПЛЕКТ';
}
// Path: button
class _TranslationsButtonRu implements TranslationsButtonEn {
_TranslationsButtonRu._(this._root);
class _TranslationsButtonRu extends TranslationsButtonEn {
_TranslationsButtonRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonRu implements TranslationsButtonEn {
@override String get unmute => 'Включить уведомления';
@override String get share => 'Поделиться';
@override String get save => 'Сохранить';
@override String get connect => 'Подключайтесь';
@override String get settings => 'Настройки';
}
// Path: embed
class _TranslationsEmbedRu implements TranslationsEmbedEn {
_TranslationsEmbedRu._(this._root);
class _TranslationsEmbedRu extends TranslationsEmbedEn {
_TranslationsEmbedRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Статья ${name}';
@override String note_by({ required Object name}) => 'Заметка на сайте ${name}';
@override String live_stream_by({ required Object name}) => 'Прямая трансляция: ${name}';
@override String article_by({required Object name}) => 'Статья ${name}';
@override String note_by({required Object name}) => 'Заметка на сайте ${name}';
@override String live_stream_by({required Object name}) => 'Прямая трансляция: ${name}';
}
// Path: stream_list
class _TranslationsStreamListRu implements TranslationsStreamListEn {
_TranslationsStreamListRu._(this._root);
class _TranslationsStreamListRu extends TranslationsStreamListEn {
_TranslationsStreamListRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListRu implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapRu implements TranslationsZapEn {
_TranslationsZapRu._(this._root);
class _TranslationsZapRu extends TranslationsZapEn {
_TranslationsZapRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Запнуть (${name}';
@override String title({required Object name}) => 'Запнуть (${name}';
@override String get custom_amount => 'Пользовательская сумма';
@override String get confirm => 'Подтвердить';
@override String get comment => 'Комментарий';
@override String button_zap_ready({ required Object amount}) => 'Запнуть ${amount} сат';
@override String button_zap_ready({required Object amount}) => 'Запнуть ${amount} сат';
@override String get button_zap => 'Зап';
@override String get button_open_wallet => 'Открыть в кошельке';
@override String get button_connect_wallet => 'Подключить кошелек';
@override String get copy => 'Скопировано в буфер обмена';
@override late final _TranslationsZapErrorRu error = _TranslationsZapErrorRu._(_root);
}
// Path: profile
class _TranslationsProfileRu implements TranslationsProfileEn {
_TranslationsProfileRu._(this._root);
class _TranslationsProfileRu extends TranslationsProfileEn {
_TranslationsProfileRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Предыдущие трансляции';
@override late final _TranslationsProfileEditRu edit = _TranslationsProfileEditRu._(_root);
}
// Path: settings
class _TranslationsSettingsRu extends TranslationsSettingsEn {
_TranslationsSettingsRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Редактировать профиль';
@override String get button_wallet => 'Настройки кошелька';
@override late final _TranslationsSettingsProfileRu profile = _TranslationsSettingsProfileRu._(_root);
@override late final _TranslationsSettingsWalletRu wallet = _TranslationsSettingsWalletRu._(_root);
}
// Path: login
class _TranslationsLoginRu implements TranslationsLoginEn {
_TranslationsLoginRu._(this._root);
class _TranslationsLoginRu extends TranslationsLoginEn {
_TranslationsLoginRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginRu implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusRu implements TranslationsStreamStatusEn {
_TranslationsStreamStatusRu._(this._root);
class _TranslationsStreamStatusRu extends TranslationsStreamStatusEn {
_TranslationsStreamStatusRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusRu implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatRu implements TranslationsStreamChatEn {
_TranslationsStreamChatRu._(this._root);
class _TranslationsStreamChatRu extends TranslationsStreamChatEn {
_TranslationsStreamChatRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get disabled => 'ЧАТ ОТКЛЮЧЕН';
@override String disabled_timeout({ required Object time}) => 'Таймаут истекает: ${time}';
@override String disabled_timeout({required Object time}) => 'Таймаут истекает: ${time}';
/// Сообщение в чате, показывающее события по тайм-ауту
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' тайм-аут '),
user,
const TextSpan(text: ' для '),
time,
], style: style, recognizer: recognizer);
]);
/// Поток закончился в нижней части чата
@override String get ended => 'ТРАНСЛЯЦИЯ ОКОНЧЕНА';
/// Сообщение в чате, отображающее потоковые зазоры
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' запнул '),
amount,
const TextSpan(text: ' сат'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteRu write = _TranslationsStreamChatWriteRu._(_root);
@override late final _TranslationsStreamChatBadgeRu badge = _TranslationsStreamChatBadgeRu._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatRu implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorRu implements TranslationsZapErrorEn {
_TranslationsZapErrorRu._(this._root);
class _TranslationsZapErrorRu extends TranslationsZapErrorEn {
_TranslationsZapErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorRu implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Адрес молнии не найден';
}
// Path: profile.edit
class _TranslationsProfileEditRu implements TranslationsProfileEditEn {
_TranslationsProfileEditRu._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileRu extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get display_name => 'Отображаемое имя';
@override String get about => 'О себе';
@override String get nip05 => 'Nostr адрес';
@override String get lud16 => 'Lightning Адрес';
@override late final _TranslationsProfileEditErrorRu error = _TranslationsProfileEditErrorRu._(_root);
@override String get about => 'О сайте';
@override String get nip05 => 'Адрес Ностр';
@override String get lud16 => 'Адрес молнии';
@override late final _TranslationsSettingsProfileErrorRu error = _TranslationsSettingsProfileErrorRu._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletRu extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Кошелек Connect (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Отключить кошелек';
@override String get connect_1tap => '1-кратное соединение';
@override String get paste => 'Вставить URL';
@override String get balance => 'Баланс';
@override String get name => 'Кошелек';
@override late final _TranslationsSettingsWalletErrorRu error = _TranslationsSettingsWalletErrorRu._(_root);
}
// Path: login.error
class _TranslationsLoginErrorRu implements TranslationsLoginErrorEn {
_TranslationsLoginErrorRu._(this._root);
class _TranslationsLoginErrorRu extends TranslationsLoginErrorEn {
_TranslationsLoginErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorRu implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteRu implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteRu._(this._root);
class _TranslationsStreamChatWriteRu extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteRu implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeRu implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeRu._(this._root);
class _TranslationsStreamChatBadgeRu extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeRu implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidRu implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidRu._(this._root);
class _TranslationsStreamChatRaidRu extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
/// Сообщение о рейде в чате в другой поток
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Сообщение о рейде в чате из другого потока
@override String from({ required Object name}) => 'RAID FROM ${name}';
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Таймер обратного отсчета для автопоездки
@override String countdown({ required Object time}) => 'Рейды в ${time}';
@override String countdown({required Object time}) => 'Рейды в ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorRu implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorRu._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorRu extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorRu implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Невозможно редактировать профиль при выходе из системы';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorRu extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Невозможно подключить кошелек при выходе из системы';
@override String get nwc_auth_event_not_found => 'Событие аутентификации кошелька не найдено';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsRu {
@ -337,39 +421,41 @@ extension on TranslationsRu {
case 'most_zapped_streamers': return 'Самые прыткие стримеры';
case 'no_user_found': 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,
one: '1 зритель',
other: '${n} зрителей',
other: '${NumberFormat.decimalPattern('ru').format(n)} зрителей',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'КОНЕЦ';
case 'stream.status.planned': return 'ПЛАНИРУЕМЫЙ';
case 'stream.started': return ({ required Object timestamp}) => 'Начало ${timestamp}';
case 'stream.started': return ({required Object timestamp}) => 'Начало ${timestamp}';
case 'stream.notification': return ({required Object name}) => '${name} запустился!';
case 'stream.chat.disabled': return 'ЧАТ ОТКЛЮЧЕН';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Таймаут истекает: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Таймаут истекает: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' тайм-аут '),
user,
const TextSpan(text: ' для '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'ТРАНСЛЯЦИЯ ОКОНЧЕНА';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' запнул '),
amount,
const TextSpan(text: ' сат'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Написать сообщение';
case 'stream.chat.write.no_signer': return 'Невозможно писать сообщения с логином npub';
case 'stream.chat.write.login': return 'Пожалуйста, войдите в систему, чтобы отправлять сообщения';
case 'stream.chat.badge.awarded_to': return 'Награждается:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Рейды в ${time}';
case 'goal.title': return ({ required Object amount}) => 'Цель: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Осталось: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Рейды в ${time}';
case 'goal.title': return ({required Object amount}) => 'Цель: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Осталось: ${amount}';
case 'goal.complete': return 'КОМПЛЕКТ';
case 'button.login': return 'Логин';
case 'button.logout': return 'Выйти';
@ -380,35 +466,65 @@ extension on TranslationsRu {
case 'button.unmute': return 'Включить уведомления';
case 'button.share': return 'Поделиться';
case 'button.save': return 'Сохранить';
case 'embed.article_by': return ({ required Object name}) => 'Статья ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Заметка на сайте ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Прямая трансляция: ${name}';
case 'button.connect': return 'Подключайтесь';
case 'button.settings': return 'Настройки';
case 'embed.article_by': return ({required Object name}) => 'Статья ${name}';
case 'embed.note_by': return ({required Object name}) => 'Заметка на сайте ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Прямая трансляция: ${name}';
case 'stream_list.following': return 'Подписки';
case 'stream_list.live': return 'Прямой эфир';
case 'stream_list.planned': return 'Запланировано';
case 'stream_list.ended': return 'Завершено';
case 'zap.title': return ({ required Object name}) => 'Запнуть (${name}';
case 'zap.title': return ({required Object name}) => 'Запнуть (${name}';
case 'zap.custom_amount': return 'Пользовательская сумма';
case 'zap.confirm': return 'Подтвердить';
case 'zap.comment': return 'Комментарий';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Запнуть ${amount} сат';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Запнуть ${amount} сат';
case 'zap.button_zap': return 'Зап';
case 'zap.button_open_wallet': return 'Открыть в кошельке';
case 'zap.button_connect_wallet': return 'Подключить кошелек';
case 'zap.copy': return 'Скопировано в буфер обмена';
case 'zap.error.invalid_custom_amount': return 'Недопустимая пользовательская сумма';
case 'zap.error.no_wallet': return 'Кошелек молнии не установлен';
case 'zap.error.no_lud16': return 'Адрес молнии не найден';
case 'profile.past_streams': return 'Предыдущие трансляции';
case 'profile.edit.display_name': return 'Отображаемое имя';
case 'profile.edit.about': return 'О себе';
case 'profile.edit.nip05': return 'Nostr адрес';
case 'profile.edit.lud16': return 'Lightning Адрес';
case 'profile.edit.error.logged_out': return 'Невозможно редактировать профиль при выходе из системы';
case 'settings.button_profile': return 'Редактировать профиль';
case 'settings.button_wallet': return 'Настройки кошелька';
case 'settings.profile.display_name': return 'Отображаемое имя';
case 'settings.profile.about': return 'О сайте';
case 'settings.profile.nip05': return 'Адрес Ностр';
case 'settings.profile.lud16': return 'Адрес молнии';
case 'settings.profile.error.logged_out': return 'Невозможно редактировать профиль при выходе из системы';
case 'settings.wallet.connect_wallet': return 'Кошелек Connect (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Отключить кошелек';
case 'settings.wallet.connect_1tap': return '1-кратное соединение';
case 'settings.wallet.paste': return 'Вставить URL';
case 'settings.wallet.balance': return 'Баланс';
case 'settings.wallet.name': return 'Кошелек';
case 'settings.wallet.error.logged_out': return 'Невозможно подключить кошелек при выходе из системы';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Событие аутентификации кошелька не найдено';
case 'login.username': return 'Имя пользователя';
case 'login.amber': return 'Войти с помощью Amber';
case 'login.key': return 'Вход в систему с помощью ключа';
case 'login.create': return 'Создать аккаунт';
case 'login.error.invalid_key': return 'Неверный ключ';
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;
}
}

View File

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

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsSv implements Translations {
class TranslationsSv extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsSv({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsSv implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsSv implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsSv _root = this; // ignore: unused_field
@ -38,22 +39,24 @@ class TranslationsSv implements 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';
/// Rubrik över listade toppstreamers av zaps
@override String get most_zapped_streamers => 'De flesta zappade streamers';
/// Rubrik över listade topp streamers av zaps
@override String get most_zapped_streamers => 'De flest zappade streamers';
/// Ingen användare hittades vid sökning
@override String get no_user_found => 'Ingen användare hittades';
/// En anonym användare
@override String get anon => 'Anon';
@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,
one: '1 tittare',
other: '${n} tittare',
other: '${NumberFormat.decimalPattern('sv').format(n)} tittare',
);
@override late final _TranslationsStreamSv stream = _TranslationsStreamSv._(_root);
@ -66,36 +69,39 @@ class TranslationsSv implements Translations {
@override late final _TranslationsZapSv zap = _TranslationsZapSv._(_root);
@override late final _TranslationsProfileSv profile = _TranslationsProfileSv._(_root);
@override late final _TranslationsSettingsSv settings = _TranslationsSettingsSv._(_root);
@override late final _TranslationsLoginSv login = _TranslationsLoginSv._(_root);
@override late final _TranslationsLiveSv live = _TranslationsLiveSv._(_root);
}
// Path: stream
class _TranslationsStreamSv implements TranslationsStreamEn {
_TranslationsStreamSv._(this._root);
class _TranslationsStreamSv extends TranslationsStreamEn {
_TranslationsStreamSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusSv status = _TranslationsStreamStatusSv._(_root);
@override String started({ required Object timestamp}) => 'Startade ${timestamp}';
@override String started({required Object timestamp}) => 'Startad ${timestamp}';
@override String notification({required Object name}) => '${name} gick live!';
@override late final _TranslationsStreamChatSv chat = _TranslationsStreamChatSv._(_root);
}
// Path: goal
class _TranslationsGoalSv implements TranslationsGoalEn {
_TranslationsGoalSv._(this._root);
class _TranslationsGoalSv extends TranslationsGoalEn {
_TranslationsGoalSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Mål: ${amount}';
@override String remaining({ required Object amount}) => 'Kvarvarande: ${amount}';
@override String title({required Object amount}) => 'Mål: ${amount}';
@override String remaining({required Object amount}) => 'Kvarvarande: ${amount}';
@override String get complete => 'KOMPLETT';
}
// Path: button
class _TranslationsButtonSv implements TranslationsButtonEn {
_TranslationsButtonSv._(this._root);
class _TranslationsButtonSv extends TranslationsButtonEn {
_TranslationsButtonSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
@ -110,30 +116,32 @@ class _TranslationsButtonSv implements TranslationsButtonEn {
/// Knapptext för följ-knappen
@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 mute => 'Tysta';
@override String get unmute => 'Avtysta';
@override String get share => 'Dela';
@override String get save => 'Spara';
@override String get connect => 'Anslut';
@override String get settings => 'Inställningar';
}
// Path: embed
class _TranslationsEmbedSv implements TranslationsEmbedEn {
_TranslationsEmbedSv._(this._root);
class _TranslationsEmbedSv extends TranslationsEmbedEn {
_TranslationsEmbedSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Artikel av ${name}';
@override String note_by({ required Object name}) => 'Anteckning av ${name}';
@override String live_stream_by({ required Object name}) => 'Direktsändning via ${name}';
@override String article_by({required Object name}) => 'Artikel av ${name}';
@override String note_by({required Object name}) => 'Anteckning av ${name}';
@override String live_stream_by({required Object name}) => 'Direktsändning via ${name}';
}
// Path: stream_list
class _TranslationsStreamListSv implements TranslationsStreamListEn {
_TranslationsStreamListSv._(this._root);
class _TranslationsStreamListSv extends TranslationsStreamListEn {
_TranslationsStreamListSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListSv implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapSv implements TranslationsZapEn {
_TranslationsZapSv._(this._root);
class _TranslationsZapSv extends TranslationsZapEn {
_TranslationsZapSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Anpassat belopp';
@override String get confirm => 'Bekräfta';
@override String get comment => 'Kommentar';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Öppna i plånboken';
@override String get button_connect_wallet => 'Anslut plånbok';
@override String get copy => 'Kopieras till urklipp';
@override late final _TranslationsZapErrorSv error = _TranslationsZapErrorSv._(_root);
}
// Path: profile
class _TranslationsProfileSv implements TranslationsProfileEn {
_TranslationsProfileSv._(this._root);
class _TranslationsProfileSv extends TranslationsProfileEn {
_TranslationsProfileSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Tidigare streamar';
@override late final _TranslationsProfileEditSv edit = _TranslationsProfileEditSv._(_root);
}
// Path: settings
class _TranslationsSettingsSv extends TranslationsSettingsEn {
_TranslationsSettingsSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Redigera profil';
@override String get button_wallet => 'Inställningar för plånbok';
@override late final _TranslationsSettingsProfileSv profile = _TranslationsSettingsProfileSv._(_root);
@override late final _TranslationsSettingsWalletSv wallet = _TranslationsSettingsWalletSv._(_root);
}
// Path: login
class _TranslationsLoginSv implements TranslationsLoginEn {
_TranslationsLoginSv._(this._root);
class _TranslationsLoginSv extends TranslationsLoginEn {
_TranslationsLoginSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginSv implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusSv implements TranslationsStreamStatusEn {
_TranslationsStreamStatusSv._(this._root);
class _TranslationsStreamStatusSv extends TranslationsStreamStatusEn {
_TranslationsStreamStatusSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusSv implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatSv implements TranslationsStreamChatEn {
_TranslationsStreamChatSv._(this._root);
class _TranslationsStreamChatSv extends TranslationsStreamChatEn {
_TranslationsStreamChatSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get disabled => 'CHAT AVSTÄNGD';
@override String disabled_timeout({ required Object time}) => 'Tidsgränsen går ut: ${time}';
@override String disabled_timeout({required Object time}) => 'Tidsgränsen går ut: ${time}';
/// Chattmeddelande som visar timeout-händelser
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' tidsbegränsad '),
user,
const TextSpan(text: ' för '),
time,
], style: style, recognizer: recognizer);
]);
/// Stream avslutade sidfoten längst ner på chatten
/// Streama slutade sidfot längst ned i chatten
@override String get ended => 'STREAM AVSLUTAD';
/// Chattmeddelande som visar strömavbrott
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteSv write = _TranslationsStreamChatWriteSv._(_root);
@override late final _TranslationsStreamChatBadgeSv badge = _TranslationsStreamChatBadgeSv._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatSv implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorSv implements TranslationsZapErrorEn {
_TranslationsZapErrorSv._(this._root);
class _TranslationsZapErrorSv extends TranslationsZapErrorEn {
_TranslationsZapErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorSv implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Ingen blixtadress hittades';
}
// Path: profile.edit
class _TranslationsProfileEditSv implements TranslationsProfileEditEn {
_TranslationsProfileEditSv._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileSv extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get display_name => 'Visa namn';
@override String get about => 'Om';
@override String get nip05 => 'Nostr Adress';
@override String get nip05 => 'Nostr adress';
@override String get lud16 => 'Lightning-adress';
@override late final _TranslationsProfileEditErrorSv error = _TranslationsProfileEditErrorSv._(_root);
@override late final _TranslationsSettingsProfileErrorSv error = _TranslationsSettingsProfileErrorSv._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletSv extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Anslut plånbok (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Koppla bort plånboken';
@override String get connect_1tap => '1-tryck anslutning';
@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);
}
// Path: login.error
class _TranslationsLoginErrorSv implements TranslationsLoginErrorEn {
_TranslationsLoginErrorSv._(this._root);
class _TranslationsLoginErrorSv extends TranslationsLoginErrorEn {
_TranslationsLoginErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorSv implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteSv implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteSv._(this._root);
class _TranslationsStreamChatWriteSv extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
@ -281,46 +354,46 @@ class _TranslationsStreamChatWriteSv implements TranslationsStreamChatWriteEn {
/// Etikett på inmatningsrutan för chattmeddelanden
@override String get label => 'Skriv meddelande';
/// Chattinmatningsmeddelande som visas när användaren endast är inloggad med pubkey
@override String get no_signer => 'Det går inte att skriva meddelanden med npub-inloggning';
/// Chattinmatningsmeddelande som visas när användaren endast är inloggad med publik nyckel
@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
@override String get login => 'Logga in för att skicka meddelanden';
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeSv implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeSv._(this._root);
class _TranslationsStreamChatBadgeSv extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
/// Rubrik över lista över användare som tilldelats en badge
/// Rubrik över listan över användare som tilldelas ett märke
@override String get awarded_to => 'Tilldelas till:';
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidSv implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidSv._(this._root);
class _TranslationsStreamChatRaidSv extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
/// Chatta raidmeddelande till en annan ström
@override String to({ required Object name}) => 'RAIDING ${name}';
/// Chatt raid meddelande till en annan ström
@override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid-meddelande från en annan ström
@override String from({ required Object name}) => 'RAID FRÅN ${name}';
/// Chatt raid meddelande från en annan ström
@override String from({required Object name}) => 'RAID FRÅN ${name}';
/// Nedräkningstimer för auto-raiding
@override String countdown({ required Object time}) => 'Raiding ${time}';
/// Nedräkningstimer för auto- radiering
@override String countdown({required Object time}) => 'Radiering i ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorSv implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorSv._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorSv extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
@ -328,48 +401,61 @@ class _TranslationsProfileEditErrorSv implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Kan inte redigera profil när jag är utloggad';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorSv extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Kan inte ansluta plånbok när du är utloggad';
@override String get nwc_auth_event_not_found => 'Inget autentiseringshändelse för plånbok hittades';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsSv {
dynamic _flatMapFunction(String path) {
switch (path) {
case 'upload_avatar': return 'Ladda upp avatar';
case 'most_zapped_streamers': return 'De flesta zappade streamers';
case 'most_zapped_streamers': return 'De flest zappade streamers';
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,
one: '1 tittare',
other: '${n} tittare',
other: '${NumberFormat.decimalPattern('sv').format(n)} tittare',
);
case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'AVSLUTAD';
case 'stream.status.planned': return 'PLANERADE';
case 'stream.started': return ({ required Object timestamp}) => 'Startade ${timestamp}';
case 'stream.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_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, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Tidsgränsen går ut: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' tidsbegränsad '),
user,
const TextSpan(text: ' för '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'STREAM AVSLUTAD';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
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.badge.awarded_to': return 'Tilldelas till:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FRÅN ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding ${time}';
case 'goal.title': return ({ required Object amount}) => 'Mål: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Kvarvarande: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FRÅN ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Radiering i ${time}';
case 'goal.title': return ({required Object amount}) => 'Mål: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Kvarvarande: ${amount}';
case 'goal.complete': return 'KOMPLETT';
case 'button.login': return 'Logga in';
case 'button.logout': return 'Logga ut';
@ -380,35 +466,65 @@ extension on TranslationsSv {
case 'button.unmute': return 'Avtysta';
case 'button.share': return 'Dela';
case 'button.save': return 'Spara';
case 'embed.article_by': return ({ required Object name}) => 'Artikel av ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Anteckning av ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Direktsändning via ${name}';
case 'button.connect': return 'Anslut';
case 'button.settings': return 'Inställningar';
case 'embed.article_by': return ({required Object name}) => 'Artikel av ${name}';
case 'embed.note_by': return ({required Object name}) => 'Anteckning av ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Direktsändning via ${name}';
case 'stream_list.following': return 'Följer';
case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planerade';
case 'stream_list.ended': return 'Avslutade';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Anpassat belopp';
case 'zap.confirm': return 'Bekräfta';
case 'zap.comment': return 'Kommentar';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Öppna i plånboken';
case 'zap.button_connect_wallet': return 'Anslut plånbok';
case 'zap.copy': return 'Kopieras till urklipp';
case 'zap.error.invalid_custom_amount': return 'Ogiltigt anpassat belopp';
case 'zap.error.no_wallet': return 'Ingen blixtplånbok installerad';
case 'zap.error.no_lud16': return 'Ingen blixtadress hittades';
case 'profile.past_streams': return 'Tidigare streamar';
case 'profile.edit.display_name': return 'Visa namn';
case 'profile.edit.about': return 'Om';
case 'profile.edit.nip05': return 'Nostr Adress';
case 'profile.edit.lud16': return 'Lightning-adress';
case 'profile.edit.error.logged_out': return 'Kan inte redigera profil när jag är utloggad';
case 'settings.button_profile': return 'Redigera profil';
case 'settings.button_wallet': return 'Inställningar för plånbok';
case 'settings.profile.display_name': return 'Visa namn';
case 'settings.profile.about': return 'Om';
case 'settings.profile.nip05': return 'Nostr adress';
case 'settings.profile.lud16': return 'Lightning-adress';
case 'settings.profile.error.logged_out': return 'Kan inte redigera profil när jag är utloggad';
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.connect_1tap': return '1-tryck anslutning';
case 'settings.wallet.paste': return 'Klistra in URL';
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 'login.username': return 'Användarnamn';
case 'login.amber': return 'Logga in med Amber';
case 'login.key': return 'Logga in med nyckel';
case 'login.create': return 'Skapa konto';
case 'login.error.invalid_key': return 'Ogiltig nyckel';
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;
}
}

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsTr implements Translations {
class TranslationsTr extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsTr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsTr implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsTr implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsTr _root = this; // ignore: unused_field
@ -53,7 +54,7 @@ class TranslationsTr implements Translations {
/// Akışı izleyenlerin sayısı
@override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n,
one: '1 izleyici',
other: '${n} izleyiciler',
other: '${NumberFormat.decimalPattern('tr').format(n)} izleyiciler',
);
@override late final _TranslationsStreamTr stream = _TranslationsStreamTr._(_root);
@ -66,36 +67,38 @@ class TranslationsTr implements Translations {
@override late final _TranslationsZapTr zap = _TranslationsZapTr._(_root);
@override late final _TranslationsProfileTr profile = _TranslationsProfileTr._(_root);
@override late final _TranslationsSettingsTr settings = _TranslationsSettingsTr._(_root);
@override late final _TranslationsLoginTr login = _TranslationsLoginTr._(_root);
}
// Path: stream
class _TranslationsStreamTr implements TranslationsStreamEn {
_TranslationsStreamTr._(this._root);
class _TranslationsStreamTr extends TranslationsStreamEn {
_TranslationsStreamTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusTr status = _TranslationsStreamStatusTr._(_root);
@override String started({ required Object timestamp}) => 'Başlatıldı ${timestamp}';
@override 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);
}
// Path: goal
class _TranslationsGoalTr implements TranslationsGoalEn {
_TranslationsGoalTr._(this._root);
class _TranslationsGoalTr extends TranslationsGoalEn {
_TranslationsGoalTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Hedef: ${amount}';
@override String remaining({ required Object amount}) => 'Kalan: ${amount}';
@override String title({required Object amount}) => 'Hedef: ${amount}';
@override String remaining({required Object amount}) => 'Kalan: ${amount}';
@override String get complete => 'TAMAMLANDI';
}
// Path: button
class _TranslationsButtonTr implements TranslationsButtonEn {
_TranslationsButtonTr._(this._root);
class _TranslationsButtonTr extends TranslationsButtonEn {
_TranslationsButtonTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
@ -117,23 +120,25 @@ class _TranslationsButtonTr implements TranslationsButtonEn {
@override String get unmute => 'Sesi aç';
@override String get share => 'Paylaş';
@override String get save => 'Kaydet';
@override String get connect => 'Bağlan';
@override String get settings => 'Ayarlar';
}
// Path: embed
class _TranslationsEmbedTr implements TranslationsEmbedEn {
_TranslationsEmbedTr._(this._root);
class _TranslationsEmbedTr extends TranslationsEmbedEn {
_TranslationsEmbedTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Makale ${name}';
@override String note_by({ required Object name}) => 'Not: ${name}';
@override String live_stream_by({ required Object name}) => 'Canlı yayın: ${name}';
@override String article_by({required Object name}) => 'Makale ${name}';
@override String note_by({required Object name}) => 'Not: ${name}';
@override String live_stream_by({required Object name}) => 'Canlı yayın: ${name}';
}
// Path: stream_list
class _TranslationsStreamListTr implements TranslationsStreamListEn {
_TranslationsStreamListTr._(this._root);
class _TranslationsStreamListTr extends TranslationsStreamListEn {
_TranslationsStreamListTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
@ -145,37 +150,50 @@ class _TranslationsStreamListTr implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapTr implements TranslationsZapEn {
_TranslationsZapTr._(this._root);
class _TranslationsZapTr extends TranslationsZapEn {
_TranslationsZapTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Özel Tutar';
@override String get confirm => 'Onaylayın';
@override String get comment => 'Yorum';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap';
@override String get button_open_wallet => 'Cüzdanda Aç';
@override String get button_connect_wallet => 'Cüzdan Bağlayın';
@override String get copy => 'Panoya kopyalandı';
@override late final _TranslationsZapErrorTr error = _TranslationsZapErrorTr._(_root);
}
// Path: profile
class _TranslationsProfileTr implements TranslationsProfileEn {
_TranslationsProfileTr._(this._root);
class _TranslationsProfileTr extends TranslationsProfileEn {
_TranslationsProfileTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Geçmiş Akışlar';
@override late final _TranslationsProfileEditTr edit = _TranslationsProfileEditTr._(_root);
}
// Path: settings
class _TranslationsSettingsTr extends TranslationsSettingsEn {
_TranslationsSettingsTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Profil Düzenle';
@override String get button_wallet => 'Cüzdan Ayarları';
@override late final _TranslationsSettingsProfileTr profile = _TranslationsSettingsProfileTr._(_root);
@override late final _TranslationsSettingsWalletTr wallet = _TranslationsSettingsWalletTr._(_root);
}
// Path: login
class _TranslationsLoginTr implements TranslationsLoginEn {
_TranslationsLoginTr._(this._root);
class _TranslationsLoginTr extends TranslationsLoginEn {
_TranslationsLoginTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
@ -188,8 +206,8 @@ class _TranslationsLoginTr implements TranslationsLoginEn {
}
// Path: stream.status
class _TranslationsStreamStatusTr implements TranslationsStreamStatusEn {
_TranslationsStreamStatusTr._(this._root);
class _TranslationsStreamStatusTr extends TranslationsStreamStatusEn {
_TranslationsStreamStatusTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
@ -200,34 +218,35 @@ class _TranslationsStreamStatusTr implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatTr implements TranslationsStreamChatEn {
_TranslationsStreamChatTr._(this._root);
class _TranslationsStreamChatTr extends TranslationsStreamChatEn {
_TranslationsStreamChatTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get disabled => 'SOHBET DEVRE DIŞI';
@override String disabled_timeout({ required Object time}) => 'Zaman aşımı sona eriyor: ${time}';
@override String disabled_timeout({required Object time}) => 'Zaman aşımı sona eriyor: ${time}';
/// Zaman aşımı olaylarını gösteren sohbet mesajı
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' zaman aşımına uğradı '),
user,
const TextSpan(text: ' için '),
const TextSpan(text: ' '),
time,
], style: style, recognizer: recognizer);
const TextSpan(text: 'için'),
]);
/// Sohbetin alt kısmında akış sona erdi altbilgisi
@override String get ended => 'YAYIN SONLANDI';
/// Akış zaplarını gösteren sohbet mesajı
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteTr write = _TranslationsStreamChatWriteTr._(_root);
@override late final _TranslationsStreamChatBadgeTr badge = _TranslationsStreamChatBadgeTr._(_root);
@ -235,8 +254,8 @@ class _TranslationsStreamChatTr implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorTr implements TranslationsZapErrorEn {
_TranslationsZapErrorTr._(this._root);
class _TranslationsZapErrorTr extends TranslationsZapErrorEn {
_TranslationsZapErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
@ -246,9 +265,9 @@ class _TranslationsZapErrorTr implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Yıldırım adresi bulunamadı';
}
// Path: profile.edit
class _TranslationsProfileEditTr implements TranslationsProfileEditEn {
_TranslationsProfileEditTr._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileTr extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
@ -257,12 +276,26 @@ class _TranslationsProfileEditTr implements TranslationsProfileEditEn {
@override String get about => 'Hakkında';
@override String get nip05 => 'Nostr Adres';
@override String get lud16 => 'Yıldırım Adres';
@override late final _TranslationsProfileEditErrorTr error = _TranslationsProfileEditErrorTr._(_root);
@override late final _TranslationsSettingsProfileErrorTr error = _TranslationsSettingsProfileErrorTr._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletTr extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Cüzdan (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Cüzdan Bağlantısını Kes';
@override String get connect_1tap => '1-Tap Bağlantı';
@override String get paste => 'URL Yapıştır';
@override late final _TranslationsSettingsWalletErrorTr error = _TranslationsSettingsWalletErrorTr._(_root);
}
// Path: login.error
class _TranslationsLoginErrorTr implements TranslationsLoginErrorEn {
_TranslationsLoginErrorTr._(this._root);
class _TranslationsLoginErrorTr extends TranslationsLoginErrorEn {
_TranslationsLoginErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
@ -271,8 +304,8 @@ class _TranslationsLoginErrorTr implements TranslationsLoginErrorEn {
}
// Path: stream.chat.write
class _TranslationsStreamChatWriteTr implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteTr._(this._root);
class _TranslationsStreamChatWriteTr extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
@ -289,8 +322,8 @@ class _TranslationsStreamChatWriteTr implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeTr implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeTr._(this._root);
class _TranslationsStreamChatBadgeTr extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
@ -301,26 +334,26 @@ class _TranslationsStreamChatBadgeTr implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidTr implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidTr._(this._root);
class _TranslationsStreamChatRaidTr extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
/// Başka bir akışa sohbet baskını mesajı
@override String to({ required Object name}) => 'RAIDING ${name}S';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Başka bir akıştan sohbet baskını mesajı
@override String from({ required Object name}) => '${name} ADRESINDEN RAID';
@override String from({required Object name}) => '${name} ADRESINDEN RAID';
/// Otomatik sürüş için geri sayım sayacı
@override String countdown({ required Object time}) => '${time} adresinde baskın';
@override String countdown({required Object time}) => '${time}adresinde baskın';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorTr implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorTr._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorTr extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
@ -328,6 +361,17 @@ class _TranslationsProfileEditErrorTr implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Çıkış yapıldığında profil düzenlenemiyor';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorTr extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Oturumu kapattığımda cüzdana bağlanamıyorum';
@override String get nwc_auth_event_not_found => 'Cüzdan yetkilendirme olayı bulunamadı';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsTr {
@ -339,37 +383,39 @@ extension on TranslationsTr {
case 'anon': return 'Anon';
case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n,
one: '1 izleyici',
other: '${n} izleyiciler',
other: '${NumberFormat.decimalPattern('tr').format(n)} izleyiciler',
);
case 'stream.status.live': return 'CANLI';
case 'stream.status.ended': return 'SONLANDI';
case 'stream.status.planned': return 'PLANLANMIŞ';
case 'stream.started': return ({ required Object timestamp}) => 'Başlatıldı ${timestamp}';
case 'stream.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_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, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Zaman aşımı sona eriyor: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' zaman aşımına uğradı '),
user,
const TextSpan(text: ' için '),
const TextSpan(text: ' '),
time,
], style: style, recognizer: recognizer);
const TextSpan(text: 'için'),
]);
case 'stream.chat.ended': return 'YAYIN SONLANDI';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Mesaj yaz';
case 'stream.chat.write.no_signer': return 'Npub girişi ile mesaj yazılamıyor';
case 'stream.chat.write.login': return 'Mesaj göndermek için lütfen giriş yapın';
case 'stream.chat.badge.awarded_to': return 'Ödüllendirildi:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}S';
case 'stream.chat.raid.from': return ({ required Object name}) => '${name} ADRESINDEN RAID';
case 'stream.chat.raid.countdown': return ({ required Object time}) => '${time} adresinde baskın';
case 'goal.title': return ({ required Object amount}) => 'Hedef: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Kalan: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => '${name} ADRESINDEN RAID';
case 'stream.chat.raid.countdown': return ({required Object time}) => '${time}adresinde baskın';
case 'goal.title': return ({required Object amount}) => 'Hedef: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Kalan: ${amount}';
case 'goal.complete': return 'TAMAMLANDI';
case 'button.login': return 'Giriş';
case 'button.logout': return 'Oturum Kapatma';
@ -380,30 +426,41 @@ extension on TranslationsTr {
case 'button.unmute': return 'Sesi aç';
case 'button.share': return 'Paylaş';
case 'button.save': return 'Kaydet';
case 'embed.article_by': return ({ required Object name}) => 'Makale ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Not: ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Canlı yayın: ${name}';
case 'button.connect': return 'Bağlan';
case 'button.settings': return 'Ayarlar';
case 'embed.article_by': return ({required Object name}) => 'Makale ${name}';
case 'embed.note_by': return ({required Object name}) => 'Not: ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Canlı yayın: ${name}';
case 'stream_list.following': return 'Aşağıdaki';
case 'stream_list.live': return 'Canlı';
case 'stream_list.planned': return 'Planlanmış';
case 'stream_list.ended': return 'Bitti';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Özel Tutar';
case 'zap.confirm': return 'Onaylayın';
case 'zap.comment': return 'Yorum';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Cüzdanda Aç';
case 'zap.button_connect_wallet': return 'Cüzdan Bağlayın';
case 'zap.copy': return 'Panoya kopyalandı';
case 'zap.error.invalid_custom_amount': return 'Geçersiz özel tutar';
case 'zap.error.no_wallet': return 'Lightning cüzdan yüklü değil';
case 'zap.error.no_lud16': return 'Yıldırım adresi bulunamadı';
case 'profile.past_streams': return 'Geçmiş Akışlar';
case 'profile.edit.display_name': return 'Ekran Adı';
case 'profile.edit.about': return 'Hakkında';
case 'profile.edit.nip05': return 'Nostr Adres';
case 'profile.edit.lud16': return 'Yıldırım Adres';
case 'profile.edit.error.logged_out': return 'Çıkış yapıldığında profil düzenlenemiyor';
case 'settings.button_profile': return 'Profil Düzenle';
case 'settings.button_wallet': return 'Cüzdan Ayarları';
case 'settings.profile.display_name': return 'Ekran Adı';
case 'settings.profile.about': return 'Hakkında';
case 'settings.profile.nip05': return 'Nostr Adres';
case 'settings.profile.lud16': return 'Yıldırım Adres';
case 'settings.profile.error.logged_out': return 'Çıkış yapıldığında profil düzenlenemiyor';
case 'settings.wallet.connect_wallet': return 'Connect Cüzdan (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Cüzdan Bağlantısını Kes';
case 'settings.wallet.connect_1tap': return '1-Tap Bağlantı';
case 'settings.wallet.paste': return 'URL Yapıştır';
case 'settings.wallet.error.logged_out': return 'Oturumu kapattığımda cüzdana bağlanamıyorum';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Cüzdan yetkilendirme olayı bulunamadı';
case 'login.username': return 'Kullanıcı Adı';
case 'login.amber': return 'Amber ile Giriş Yapın';
case 'login.key': return 'Anahtar ile Giriş Yapın';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsUk implements Translations {
class TranslationsUk extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsUk({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsUk implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsUk implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsUk _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsUk implements Translations {
/// Анонімний користувач
@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,
one: '1 глядач',
other: '${n} глядачі',
other: '${NumberFormat.decimalPattern('uk').format(n)} глядачів',
);
@override late final _TranslationsStreamUk stream = _TranslationsStreamUk._(_root);
@ -66,36 +69,39 @@ class TranslationsUk implements Translations {
@override late final _TranslationsZapUk zap = _TranslationsZapUk._(_root);
@override late final _TranslationsProfileUk profile = _TranslationsProfileUk._(_root);
@override late final _TranslationsSettingsUk settings = _TranslationsSettingsUk._(_root);
@override late final _TranslationsLoginUk login = _TranslationsLoginUk._(_root);
@override late final _TranslationsLiveUk live = _TranslationsLiveUk._(_root);
}
// Path: stream
class _TranslationsStreamUk implements TranslationsStreamEn {
_TranslationsStreamUk._(this._root);
class _TranslationsStreamUk extends TranslationsStreamEn {
_TranslationsStreamUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusUk status = _TranslationsStreamStatusUk._(_root);
@override String started({ required Object timestamp}) => 'Запустив ${timestamp}';
@override String started({required Object timestamp}) => 'Запустив ${timestamp}';
@override String notification({required Object name}) => '${name} запрацював!';
@override late final _TranslationsStreamChatUk chat = _TranslationsStreamChatUk._(_root);
}
// Path: goal
class _TranslationsGoalUk implements TranslationsGoalEn {
_TranslationsGoalUk._(this._root);
class _TranslationsGoalUk extends TranslationsGoalEn {
_TranslationsGoalUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => 'Мета: ${amount}';
@override String remaining({ required Object amount}) => 'Залишилося: ${amount}';
@override String title({required Object amount}) => 'Мета: ${amount}';
@override String remaining({required Object amount}) => 'Залишилося: ${amount}';
@override String get complete => 'ЗАВЕРШИТИ';
}
// Path: button
class _TranslationsButtonUk implements TranslationsButtonEn {
_TranslationsButtonUk._(this._root);
class _TranslationsButtonUk extends TranslationsButtonEn {
_TranslationsButtonUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonUk implements TranslationsButtonEn {
@override String get unmute => 'Увімкнути звук.';
@override String get share => 'Поділіться';
@override String get save => 'Зберегти';
@override String get connect => 'Підключіться';
@override String get settings => 'Налаштування';
}
// Path: embed
class _TranslationsEmbedUk implements TranslationsEmbedEn {
_TranslationsEmbedUk._(this._root);
class _TranslationsEmbedUk extends TranslationsEmbedEn {
_TranslationsEmbedUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => 'Стаття за посиланням ${name}';
@override String note_by({ required Object name}) => 'Примітка ${name}';
@override String live_stream_by({ required Object name}) => 'Пряма трансляція на ${name}';
@override String article_by({required Object name}) => 'Стаття за посиланням ${name}';
@override String note_by({required Object name}) => 'Примітка ${name}';
@override String live_stream_by({required Object name}) => 'Пряма трансляція на ${name}';
}
// Path: stream_list
class _TranslationsStreamListUk implements TranslationsStreamListEn {
_TranslationsStreamListUk._(this._root);
class _TranslationsStreamListUk extends TranslationsStreamListEn {
_TranslationsStreamListUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListUk implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapUk implements TranslationsZapEn {
_TranslationsZapUk._(this._root);
class _TranslationsZapUk extends TranslationsZapEn {
_TranslationsZapUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => 'Zap ${name}';
@override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Нестандартна сума';
@override String get confirm => 'Підтвердити';
@override String get comment => 'Коментар';
@override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats';
@override String button_zap_ready({required Object amount}) => 'Zap ${amount} sats';
@override String get button_zap => 'Zap!';
@override String get button_open_wallet => 'Відкрити в Гаманці';
@override String get button_connect_wallet => 'Підключити гаманець';
@override String get copy => 'Скопійовано в буфер обміну';
@override late final _TranslationsZapErrorUk error = _TranslationsZapErrorUk._(_root);
}
// Path: profile
class _TranslationsProfileUk implements TranslationsProfileEn {
_TranslationsProfileUk._(this._root);
class _TranslationsProfileUk extends TranslationsProfileEn {
_TranslationsProfileUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get past_streams => 'Минулі потоки';
@override late final _TranslationsProfileEditUk edit = _TranslationsProfileEditUk._(_root);
}
// Path: settings
class _TranslationsSettingsUk extends TranslationsSettingsEn {
_TranslationsSettingsUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get button_profile => 'Редагувати профіль';
@override String get button_wallet => 'Налаштування гаманця';
@override late final _TranslationsSettingsProfileUk profile = _TranslationsSettingsProfileUk._(_root);
@override late final _TranslationsSettingsWalletUk wallet = _TranslationsSettingsWalletUk._(_root);
}
// Path: login
class _TranslationsLoginUk implements TranslationsLoginEn {
_TranslationsLoginUk._(this._root);
class _TranslationsLoginUk extends TranslationsLoginEn {
_TranslationsLoginUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginUk implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusUk implements TranslationsStreamStatusEn {
_TranslationsStreamStatusUk._(this._root);
class _TranslationsStreamStatusUk extends TranslationsStreamStatusEn {
_TranslationsStreamStatusUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusUk implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatUk implements TranslationsStreamChatEn {
_TranslationsStreamChatUk._(this._root);
class _TranslationsStreamChatUk extends TranslationsStreamChatEn {
_TranslationsStreamChatUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get disabled => 'ЧАТ ВІДКЛЮЧЕНО';
@override String disabled_timeout({ required Object time}) => 'Тайм-аут закінчився: ${time}';
@override String disabled_timeout({required Object time}) => 'Тайм-аут закінчився: ${time}';
/// Повідомлення в чаті про події тайм-ауту
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' таймінг '),
user,
const TextSpan(text: ' для '),
time,
], style: style, recognizer: recognizer);
]);
/// Нижній колонтитул кінця потоку внизу чату
@override String get ended => 'СТРІМ ЗАКІНЧИВСЯ';
/// Повідомлення в чаті, що показує затримки потоку
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteUk write = _TranslationsStreamChatWriteUk._(_root);
@override late final _TranslationsStreamChatBadgeUk badge = _TranslationsStreamChatBadgeUk._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatUk implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorUk implements TranslationsZapErrorEn {
_TranslationsZapErrorUk._(this._root);
class _TranslationsZapErrorUk extends TranslationsZapErrorEn {
_TranslationsZapErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
@ -246,9 +291,9 @@ class _TranslationsZapErrorUk implements TranslationsZapErrorEn {
@override String get no_lud16 => 'Адреса блискавки не знайдена';
}
// Path: profile.edit
class _TranslationsProfileEditUk implements TranslationsProfileEditEn {
_TranslationsProfileEditUk._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileUk extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
@ -257,12 +302,28 @@ class _TranslationsProfileEditUk implements TranslationsProfileEditEn {
@override String get about => 'Про';
@override String get nip05 => 'Nostr Адреса';
@override String get lud16 => 'Блискавична адреса';
@override late final _TranslationsProfileEditErrorUk error = _TranslationsProfileEditErrorUk._(_root);
@override late final _TranslationsSettingsProfileErrorUk error = _TranslationsSettingsProfileErrorUk._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletUk extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Підключити гаманець (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => 'Відключити гаманець';
@override String get connect_1tap => 'Підключення в 1 кран';
@override String get paste => 'Вставити URL-адресу';
@override String get balance => 'Баланс';
@override String get name => 'Гаманець';
@override late final _TranslationsSettingsWalletErrorUk error = _TranslationsSettingsWalletErrorUk._(_root);
}
// Path: login.error
class _TranslationsLoginErrorUk implements TranslationsLoginErrorEn {
_TranslationsLoginErrorUk._(this._root);
class _TranslationsLoginErrorUk extends TranslationsLoginErrorEn {
_TranslationsLoginErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorUk implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteUk implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteUk._(this._root);
class _TranslationsStreamChatWriteUk extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteUk implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeUk implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeUk._(this._root);
class _TranslationsStreamChatBadgeUk extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeUk implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidUk implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidUk._(this._root);
class _TranslationsStreamChatRaidUk extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
/// Повідомлення про рейд чату в інший потік
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// Повідомлення про наліт на чат з іншого потоку
@override String from({ required Object name}) => 'RAID FROM ${name}';
@override String from({required Object name}) => 'RAID FROM ${name}';
/// Таймер зворотного відліку для авторейду
@override String countdown({ required Object time}) => 'Рейд у ${time}';
@override String countdown({required Object time}) => 'Рейд у ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorUk implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorUk._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorUk extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorUk implements TranslationsProfileEditErrorEn
@override String get logged_out => 'Неможливо редагувати профіль, коли ви вийшли з системи';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorUk extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field
// Translations
@override String get logged_out => 'Не вдається підключити гаманець, коли ви вийшли з системи';
@override String get nwc_auth_event_not_found => 'Не знайдено жодної події авторизації гаманця';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsUk {
@ -337,39 +421,41 @@ extension on TranslationsUk {
case 'most_zapped_streamers': return 'Більшість стримерів, які були під напругою';
case 'no_user_found': 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,
one: '1 глядач',
other: '${n} глядачі',
other: '${NumberFormat.decimalPattern('uk').format(n)} глядачів',
);
case 'stream.status.live': return 'НАЖИВО';
case 'stream.status.ended': return 'ЗАКІНЧЕНО';
case 'stream.status.planned': return 'ЗАПЛАНОВАНО';
case 'stream.started': return ({ required Object timestamp}) => 'Запустив ${timestamp}';
case 'stream.started': return ({required Object timestamp}) => 'Запустив ${timestamp}';
case 'stream.notification': return ({required Object name}) => '${name} запрацював!';
case 'stream.chat.disabled': return 'ЧАТ ВІДКЛЮЧЕНО';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Тайм-аут закінчився: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Тайм-аут закінчився: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' таймінг '),
user,
const TextSpan(text: ' для '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return 'СТРІМ ЗАКІНЧИВСЯ';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' zapped '),
amount,
const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return 'Написати повідомлення';
case 'stream.chat.write.no_signer': return 'Неможливо писати повідомлення з логіном npub';
case 'stream.chat.write.login': return 'Будь ласка, авторизуйтесь, щоб надсилати повідомлення';
case 'stream.chat.badge.awarded_to': return 'Нагороджується:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Рейд у ${time}';
case 'goal.title': return ({ required Object amount}) => 'Мета: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Залишилося: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => 'Рейд у ${time}';
case 'goal.title': return ({required Object amount}) => 'Мета: ${amount}';
case 'goal.remaining': return ({required Object amount}) => 'Залишилося: ${amount}';
case 'goal.complete': return 'ЗАВЕРШИТИ';
case 'button.login': return 'Логін';
case 'button.logout': return 'Вийти з системи';
@ -380,35 +466,65 @@ extension on TranslationsUk {
case 'button.unmute': return 'Увімкнути звук.';
case 'button.share': return 'Поділіться';
case 'button.save': return 'Зберегти';
case 'embed.article_by': return ({ required Object name}) => 'Стаття за посиланням ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Примітка ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Пряма трансляція на ${name}';
case 'button.connect': return 'Підключіться';
case 'button.settings': return 'Налаштування';
case 'embed.article_by': return ({required Object name}) => 'Стаття за посиланням ${name}';
case 'embed.note_by': return ({required Object name}) => 'Примітка ${name}';
case 'embed.live_stream_by': return ({required Object name}) => 'Пряма трансляція на ${name}';
case 'stream_list.following': return 'Після того, як';
case 'stream_list.live': return 'Наживо';
case 'stream_list.planned': return 'Заплановано';
case 'stream_list.ended': return 'Закінчилося';
case 'zap.title': return ({ required Object name}) => 'Zap ${name}';
case 'zap.title': return ({required Object name}) => 'Zap ${name}';
case 'zap.custom_amount': return 'Нестандартна сума';
case 'zap.confirm': return 'Підтвердити';
case 'zap.comment': return 'Коментар';
case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap_ready': return ({required Object amount}) => 'Zap ${amount} sats';
case 'zap.button_zap': return 'Zap!';
case 'zap.button_open_wallet': return 'Відкрити в Гаманці';
case 'zap.button_connect_wallet': return 'Підключити гаманець';
case 'zap.copy': return 'Скопійовано в буфер обміну';
case 'zap.error.invalid_custom_amount': return 'Неправильна сума замовлення';
case 'zap.error.no_wallet': return 'Не встановлено гаманець-блискавку';
case 'zap.error.no_lud16': return 'Адреса блискавки не знайдена';
case 'profile.past_streams': return 'Минулі потоки';
case 'profile.edit.display_name': return 'Ім\'я користувача';
case 'profile.edit.about': return 'Про';
case 'profile.edit.nip05': return 'Nostr Адреса';
case 'profile.edit.lud16': return 'Блискавична адреса';
case 'profile.edit.error.logged_out': return 'Неможливо редагувати профіль, коли ви вийшли з системи';
case 'settings.button_profile': return 'Редагувати профіль';
case 'settings.button_wallet': return 'Налаштування гаманця';
case 'settings.profile.display_name': return 'Ім\'я користувача';
case 'settings.profile.about': return 'Про';
case 'settings.profile.nip05': return 'Nostr Адреса';
case 'settings.profile.lud16': return 'Блискавична адреса';
case 'settings.profile.error.logged_out': return 'Неможливо редагувати профіль, коли ви вийшли з системи';
case 'settings.wallet.connect_wallet': return 'Підключити гаманець (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return 'Відключити гаманець';
case 'settings.wallet.connect_1tap': return 'Підключення в 1 кран';
case 'settings.wallet.paste': return 'Вставити URL-адресу';
case 'settings.wallet.balance': return 'Баланс';
case 'settings.wallet.name': return 'Гаманець';
case 'settings.wallet.error.logged_out': return 'Не вдається підключити гаманець, коли ви вийшли з системи';
case 'settings.wallet.error.nwc_auth_event_not_found': return 'Не знайдено жодної події авторизації гаманця';
case 'login.username': return 'Ім\'я користувача';
case 'login.amber': return 'Увійдіть за допомогою Amber';
case 'login.key': return 'Увійдіть за допомогою ключа';
case 'login.create': return 'Створити обліковий запис';
case 'login.error.invalid_key': return 'Неправильний ключ';
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;
}
}

View File

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

View File

@ -4,14 +4,13 @@
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';
import 'strings.g.dart';
// Path: <root>
class TranslationsZh implements Translations {
class TranslationsZh extends Translations {
/// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred.
TranslationsZh({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsZh implements Translations {
overrides: overrides ?? {},
cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver,
) {
),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction);
}
@ -29,7 +30,7 @@ class TranslationsZh implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map
@override dynamic operator[](String key) => $meta.getTranslation(key);
@override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key);
late final TranslationsZh _root = this; // ignore: unused_field
@ -50,10 +51,12 @@ class TranslationsZh implements Translations {
/// 匿名使用者
@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,
one: '1 個檢視器',
other: '${n} 觀眾',
other: '${NumberFormat.decimalPattern('zh').format(n)} 觀眾',
);
@override late final _TranslationsStreamZh stream = _TranslationsStreamZh._(_root);
@ -66,36 +69,39 @@ class TranslationsZh implements Translations {
@override late final _TranslationsZapZh zap = _TranslationsZapZh._(_root);
@override late final _TranslationsProfileZh profile = _TranslationsProfileZh._(_root);
@override late final _TranslationsSettingsZh settings = _TranslationsSettingsZh._(_root);
@override late final _TranslationsLoginZh login = _TranslationsLoginZh._(_root);
@override late final _TranslationsLiveZh live = _TranslationsLiveZh._(_root);
}
// Path: stream
class _TranslationsStreamZh implements TranslationsStreamEn {
_TranslationsStreamZh._(this._root);
class _TranslationsStreamZh extends TranslationsStreamEn {
_TranslationsStreamZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override late final _TranslationsStreamStatusZh status = _TranslationsStreamStatusZh._(_root);
@override String started({ required Object timestamp}) => '開始 ${timestamp}';
@override String started({required Object timestamp}) => '開始 ${timestamp}';
@override String notification({required Object name}) => '${name} 已啟用!';
@override late final _TranslationsStreamChatZh chat = _TranslationsStreamChatZh._(_root);
}
// Path: goal
class _TranslationsGoalZh implements TranslationsGoalEn {
_TranslationsGoalZh._(this._root);
class _TranslationsGoalZh extends TranslationsGoalEn {
_TranslationsGoalZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String title({ required Object amount}) => '目標:${amount}';
@override String remaining({ required Object amount}) => '剩餘: ${amount}';
@override String title({required Object amount}) => '目標:${amount}';
@override String remaining({required Object amount}) => '剩餘: ${amount}';
@override String get complete => '完成';
}
// Path: button
class _TranslationsButtonZh implements TranslationsButtonEn {
_TranslationsButtonZh._(this._root);
class _TranslationsButtonZh extends TranslationsButtonEn {
_TranslationsButtonZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
@ -117,23 +123,25 @@ class _TranslationsButtonZh implements TranslationsButtonEn {
@override String get unmute => '解除静音';
@override String get share => '分享';
@override String get save => '保存';
@override String get connect => '連接';
@override String get settings => '設定';
}
// Path: embed
class _TranslationsEmbedZh implements TranslationsEmbedEn {
_TranslationsEmbedZh._(this._root);
class _TranslationsEmbedZh extends TranslationsEmbedEn {
_TranslationsEmbedZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String article_by({ required Object name}) => '文章來源: ${name}';
@override String note_by({ required Object name}) => '${name} 的筆記';
@override String live_stream_by({ required Object name}) => 'Live stream by ${name}';
@override String article_by({required Object name}) => '文章來源: ${name}';
@override String note_by({required Object name}) => '${name} 的筆記';
@override String live_stream_by({required Object name}) => 'Live stream by ${name}';
}
// Path: stream_list
class _TranslationsStreamListZh implements TranslationsStreamListEn {
_TranslationsStreamListZh._(this._root);
class _TranslationsStreamListZh extends TranslationsStreamListEn {
_TranslationsStreamListZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
@ -145,37 +153,50 @@ class _TranslationsStreamListZh implements TranslationsStreamListEn {
}
// Path: zap
class _TranslationsZapZh implements TranslationsZapEn {
_TranslationsZapZh._(this._root);
class _TranslationsZapZh extends TranslationsZapEn {
_TranslationsZapZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String title({ required Object name}) => '打閃${name}';
@override String title({required Object name}) => '打閃${name}';
@override String get custom_amount => '自訂金額';
@override String get confirm => '確認';
@override String get comment => '評論';
@override String button_zap_ready({ required Object amount}) => '打閃 ${amount}';
@override String button_zap_ready({required Object amount}) => '打閃 ${amount}';
@override String get button_zap => '打閃';
@override String get button_open_wallet => '在錢包中開啟';
@override String get button_connect_wallet => '連接錢包';
@override String get copy => '複製到剪貼簿';
@override late final _TranslationsZapErrorZh error = _TranslationsZapErrorZh._(_root);
}
// Path: profile
class _TranslationsProfileZh implements TranslationsProfileEn {
_TranslationsProfileZh._(this._root);
class _TranslationsProfileZh extends TranslationsProfileEn {
_TranslationsProfileZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get past_streams => '過去的直播';
@override late final _TranslationsProfileEditZh edit = _TranslationsProfileEditZh._(_root);
}
// Path: settings
class _TranslationsSettingsZh extends TranslationsSettingsEn {
_TranslationsSettingsZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get button_profile => '編輯個人資料';
@override String get button_wallet => '錢包設定';
@override late final _TranslationsSettingsProfileZh profile = _TranslationsSettingsProfileZh._(_root);
@override late final _TranslationsSettingsWalletZh wallet = _TranslationsSettingsWalletZh._(_root);
}
// Path: login
class _TranslationsLoginZh implements TranslationsLoginEn {
_TranslationsLoginZh._(this._root);
class _TranslationsLoginZh extends TranslationsLoginEn {
_TranslationsLoginZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
@ -187,9 +208,33 @@ class _TranslationsLoginZh implements TranslationsLoginEn {
@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
class _TranslationsStreamStatusZh implements TranslationsStreamStatusEn {
_TranslationsStreamStatusZh._(this._root);
class _TranslationsStreamStatusZh extends TranslationsStreamStatusEn {
_TranslationsStreamStatusZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
@ -200,34 +245,34 @@ class _TranslationsStreamStatusZh implements TranslationsStreamStatusEn {
}
// Path: stream.chat
class _TranslationsStreamChatZh implements TranslationsStreamChatEn {
_TranslationsStreamChatZh._(this._root);
class _TranslationsStreamChatZh extends TranslationsStreamChatEn {
_TranslationsStreamChatZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get disabled => '關閉聊天';
@override String disabled_timeout({ required Object time}) => '超時過期: ${time}';
@override String disabled_timeout({required Object time}) => '超時過期: ${time}';
/// 顯示逾時事件的聊天訊息
@override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan timeout({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' 超時 '),
user,
const TextSpan(text: ' for '),
time,
], style: style, recognizer: recognizer);
]);
/// 聊天底部的流結束頁尾
@override String get ended => '串流結束';
/// 聊天訊息顯示串流斷點
@override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
@override TextSpan zap({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' 打閃了 '),
amount,
const TextSpan(text: ''),
], style: style, recognizer: recognizer);
]);
@override late final _TranslationsStreamChatWriteZh write = _TranslationsStreamChatWriteZh._(_root);
@override late final _TranslationsStreamChatBadgeZh badge = _TranslationsStreamChatBadgeZh._(_root);
@ -235,8 +280,8 @@ class _TranslationsStreamChatZh implements TranslationsStreamChatEn {
}
// Path: zap.error
class _TranslationsZapErrorZh implements TranslationsZapErrorEn {
_TranslationsZapErrorZh._(this._root);
class _TranslationsZapErrorZh extends TranslationsZapErrorEn {
_TranslationsZapErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
@ -246,23 +291,39 @@ class _TranslationsZapErrorZh implements TranslationsZapErrorEn {
@override String get no_lud16 => '未找到閃電地址';
}
// Path: profile.edit
class _TranslationsProfileEditZh implements TranslationsProfileEditEn {
_TranslationsProfileEditZh._(this._root);
// Path: settings.profile
class _TranslationsSettingsProfileZh extends TranslationsSettingsProfileEn {
_TranslationsSettingsProfileZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get display_name => '顯示名稱';
@override String get about => '關於';
@override String get nip05 => 'Nostr 地址';
@override String get nip05 => '地址';
@override String get lud16 => '閃電地址';
@override late final _TranslationsProfileEditErrorZh error = _TranslationsProfileEditErrorZh._(_root);
@override late final _TranslationsSettingsProfileErrorZh error = _TranslationsSettingsProfileErrorZh._(_root);
}
// Path: settings.wallet
class _TranslationsSettingsWalletZh extends TranslationsSettingsWalletEn {
_TranslationsSettingsWalletZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get connect_wallet => 'Connect Wallet (NWC nostr+walletconnect://)';
@override String get disconnect_wallet => '斷開錢包';
@override String get connect_1tap => '1 抽頭連接';
@override String get paste => '貼上 URL';
@override String get balance => '平衡';
@override String get name => '錢包';
@override late final _TranslationsSettingsWalletErrorZh error = _TranslationsSettingsWalletErrorZh._(_root);
}
// Path: login.error
class _TranslationsLoginErrorZh implements TranslationsLoginErrorEn {
_TranslationsLoginErrorZh._(this._root);
class _TranslationsLoginErrorZh extends TranslationsLoginErrorEn {
_TranslationsLoginErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
@ -270,9 +331,21 @@ class _TranslationsLoginErrorZh implements TranslationsLoginErrorEn {
@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
class _TranslationsStreamChatWriteZh implements TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteZh._(this._root);
class _TranslationsStreamChatWriteZh extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
@ -289,8 +362,8 @@ class _TranslationsStreamChatWriteZh implements TranslationsStreamChatWriteEn {
}
// Path: stream.chat.badge
class _TranslationsStreamChatBadgeZh implements TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeZh._(this._root);
class _TranslationsStreamChatBadgeZh extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
@ -301,26 +374,26 @@ class _TranslationsStreamChatBadgeZh implements TranslationsStreamChatBadgeEn {
}
// Path: stream.chat.raid
class _TranslationsStreamChatRaidZh implements TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidZh._(this._root);
class _TranslationsStreamChatRaidZh extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
/// 聊天突擊消息到另一個串流
@override String to({ required Object name}) => 'RAIDING ${name}';
@override String to({required Object name}) => 'RAIDING ${name}';
/// 來自其他串流的聊天突襲訊息
@override String from({ required Object name}) => 'RAID FROM ${name}';
@override String from({required Object name}) => 'RAID FROM ${name}';
/// 自動騎乘倒數計時器
@override String countdown({ required Object time}) => '突襲 ${time}';
@override String countdown({required Object time}) => '突襲 ${time}';
}
// Path: profile.edit.error
class _TranslationsProfileEditErrorZh implements TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorZh._(this._root);
// Path: settings.profile.error
class _TranslationsSettingsProfileErrorZh extends TranslationsSettingsProfileErrorEn {
_TranslationsSettingsProfileErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
@ -328,6 +401,17 @@ class _TranslationsProfileEditErrorZh implements TranslationsProfileEditErrorEn
@override String get logged_out => '登出時無法編輯個人資料';
}
// Path: settings.wallet.error
class _TranslationsSettingsWalletErrorZh extends TranslationsSettingsWalletErrorEn {
_TranslationsSettingsWalletErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field
// Translations
@override String get logged_out => '登出時無法連接錢包';
@override String get nwc_auth_event_not_found => '未找到錢包認證事件';
}
/// Flat map(s) containing all translations.
/// Only for edge cases! For simple maps, use the map function of this library.
extension on TranslationsZh {
@ -337,39 +421,41 @@ extension on TranslationsZh {
case 'most_zapped_streamers': return '最多被擊中的溪流';
case 'no_user_found': 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,
one: '1 個檢視器',
other: '${n} 觀眾',
other: '${NumberFormat.decimalPattern('zh').format(n)} 觀眾',
);
case 'stream.status.live': return '直播';
case 'stream.status.ended': return '結束';
case 'stream.status.planned': return '計劃';
case 'stream.started': return ({ required Object timestamp}) => '開始 ${timestamp}';
case 'stream.started': return ({required Object timestamp}) => '開始 ${timestamp}';
case 'stream.notification': return ({required Object name}) => '${name} 已啟用!';
case 'stream.chat.disabled': return '關閉聊天';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => '超時過期: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.disabled_timeout': return ({required Object time}) => '超時過期: ${time}';
case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod,
const TextSpan(text: ' 超時 '),
user,
const TextSpan(text: ' for '),
time,
], style: style, recognizer: recognizer);
]);
case 'stream.chat.ended': return '串流結束';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [
case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user,
const TextSpan(text: ' 打閃了 '),
amount,
const TextSpan(text: ''),
], style: style, recognizer: recognizer);
]);
case 'stream.chat.write.label': return '寫訊息';
case 'stream.chat.write.no_signer': return '無法使用 npub 登入撰寫訊息';
case 'stream.chat.write.login': return '請登入以傳送訊息';
case 'stream.chat.badge.awarded_to': return '頒發給';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => '突襲 ${time}';
case 'goal.title': return ({ required Object amount}) => '目標:${amount}';
case 'goal.remaining': return ({ required Object amount}) => '剩餘: ${amount}';
case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({required Object time}) => '突襲 ${time}';
case 'goal.title': return ({required Object amount}) => '目標:${amount}';
case 'goal.remaining': return ({required Object amount}) => '剩餘: ${amount}';
case 'goal.complete': return '完成';
case 'button.login': return '登錄';
case 'button.logout': return '登出';
@ -380,35 +466,65 @@ extension on TranslationsZh {
case 'button.unmute': return '解除静音';
case 'button.share': return '分享';
case 'button.save': return '保存';
case 'embed.article_by': return ({ required Object name}) => '文章來源: ${name}';
case 'embed.note_by': return ({ required Object name}) => '${name} 的筆記';
case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream by ${name}';
case 'button.connect': return '連接';
case 'button.settings': return '設定';
case 'embed.article_by': return ({required Object name}) => '文章來源: ${name}';
case 'embed.note_by': return ({required Object name}) => '${name} 的筆記';
case 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return '已關注';
case 'stream_list.live': return '直播';
case 'stream_list.planned': return '已計畫';
case 'stream_list.ended': return '已結束';
case 'zap.title': return ({ required Object name}) => '打閃${name}';
case 'zap.title': return ({required Object name}) => '打閃${name}';
case 'zap.custom_amount': return '自訂金額';
case 'zap.confirm': return '確認';
case 'zap.comment': return '評論';
case 'zap.button_zap_ready': return ({ required Object amount}) => '打閃 ${amount}';
case 'zap.button_zap_ready': return ({required Object amount}) => '打閃 ${amount}';
case 'zap.button_zap': return '打閃';
case 'zap.button_open_wallet': return '在錢包中開啟';
case 'zap.button_connect_wallet': return '連接錢包';
case 'zap.copy': return '複製到剪貼簿';
case 'zap.error.invalid_custom_amount': return '無效自訂金額';
case 'zap.error.no_wallet': return '未安裝閃電錢夾';
case 'zap.error.no_lud16': return '未找到閃電地址';
case 'profile.past_streams': return '過去的直播';
case 'profile.edit.display_name': return '顯示名稱';
case 'profile.edit.about': return '關於';
case 'profile.edit.nip05': return 'Nostr 地址';
case 'profile.edit.lud16': return '閃電地址';
case 'profile.edit.error.logged_out': return '登出時無法編輯個人資料';
case 'settings.button_profile': return '編輯個人資料';
case 'settings.button_wallet': return '錢包設定';
case 'settings.profile.display_name': return '顯示名稱';
case 'settings.profile.about': return '關於';
case 'settings.profile.nip05': return '地址';
case 'settings.profile.lud16': return '閃電地址';
case 'settings.profile.error.logged_out': return '登出時無法編輯個人資料';
case 'settings.wallet.connect_wallet': return 'Connect Wallet (NWC nostr+walletconnect://)';
case 'settings.wallet.disconnect_wallet': return '斷開錢包';
case 'settings.wallet.connect_1tap': return '1 抽頭連接';
case 'settings.wallet.paste': return '貼上 URL';
case 'settings.wallet.balance': return '平衡';
case 'settings.wallet.name': return '錢包';
case 'settings.wallet.error.logged_out': return '登出時無法連接錢包';
case 'settings.wallet.error.nwc_auth_event_not_found': return '未找到錢包認證事件';
case 'login.username': return '用戶名';
case 'login.amber': return '使用 Amber 登入';
case 'login.key': return '使用鑰匙登入';
case 'login.create': return '創建帳戶';
case 'login.error.invalid_key': return '無效按鍵';
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;
}
}

View File

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

View File

@ -8,14 +8,12 @@ no_user_found: لم يتم العثور على مستخدم
"@no_user_found":
description: لم يتم العثور على مستخدم عند البحث
anon: هوية مخفية
full_amount_sats: "${n:decimalPattern} دولار ساتس"
viewers:
one: 1 مشاهد
other: $n المشاهدون
other: "{n:decimalPattern} المشاهدين"
"@viewers":
description: عدد مشاهدي البث
placeholders:
n:
type: في
"@anon":
description: مستخدم مجهول
stream:
@ -24,10 +22,11 @@ stream:
ended: انتهى
planned: مخطط
started: بدأ $timestamp
notification: ${name} بدأ البث المباشر!
chat:
disabled: تم تعطيل الدردشة
disabled_timeout: "تنتهي المهلة: $time"
timeout(rich): $mod انتهى الوقت $user لـ $time
timeout(rich): $mod انتهى الوقت $user لـ ${time}
"@timeout":
description: رسالة دردشة تظهر أحداث المهلة
ended: انتهى البث
@ -81,6 +80,8 @@ button:
unmute: رفع الكتم
share: مشاركة
save: حفظ
connect: الاتصال
settings: الإعدادات
embed:
article_by: مقال بقلم $name
note_by: ملاحظة من $name
@ -100,6 +101,7 @@ zap:
button_zap_ready: أومض $amount ساتوشي
button_zap: زاب
button_open_wallet: فتح في المحفظة
button_connect_wallet: توصيل المحفظة
copy: نسخ إلى الحافظة
error:
invalid_custom_amount: مبلغ مخصص غير صالح
@ -107,13 +109,26 @@ zap:
no_lud16: لم يتم العثور على عنوان البرق
profile:
past_streams: التدفقات السابقة
edit:
settings:
button_profile: تعديل الملف الشخصي
button_wallet: إعدادات المحفظة
profile:
display_name: اسم العرض
about: نبذة
about: نبذة عن
nip05: عنوان نوستر
lud16: عنوان البرق
error:
logged_out: لا يمكن تحرير ملف التعريف عند تسجيل الخروج
wallet:
connect_wallet: توصيل المحفظة (NWC nostr+walletconnect://)
disconnect_wallet: محفظة قطع الاتصال
connect_1tap: 1-التوصيل بنقرة 1
paste: لصق عنوان URL
balance: الرصيد
name: المحفظة
error:
logged_out: لا يمكن الاتصال بالمحفظة عند تسجيل الخروج
nwc_auth_event_not_found: لم يتم العثور على حدث مصادقة المحفظة
login:
username: اسم المستخدم
amber: تسجيل الدخول مع آمبر
@ -121,3 +136,21 @@ login:
create: إنشاء حساب
error:
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: فشل بدء البث فشل، يرجى التحقق من رصيدك

View File

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

View File

@ -9,14 +9,12 @@ no_user_found: Nebyl nalezen žádný uživatel
"@no_user_found":
description: Při vyhledávání nebyl nalezen žádný uživatel
anon: Anon
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 divák
other: $n diváci
other: ${n:decimalPattern} divá
"@viewers":
description: Počet diváků streamu
placeholders:
n:
type: int
"@anon":
description: Anonymní uživatel
stream:
@ -25,10 +23,11 @@ stream:
ended: KONEC
planned: PLÁNOVANÉ
started: Založeno $timestamp
notification: ${name} byl spuštěn!
chat:
disabled: CHAT ZRUŠEN
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":
description: Zpráva chatu zobrazující události časového limitu
ended: STREAM UKONČEN
@ -82,6 +81,8 @@ button:
unmute: Zrušit ztlumení
share: Sdílet
save: Uložit
connect: Připojení
settings: Nastavení
embed:
article_by: Článek na $name
note_by: Poznámka $name
@ -101,6 +102,7 @@ zap:
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Otevřít v peněžence
button_connect_wallet: Připojení peněženky
copy: Zkopírováno do schránky
error:
invalid_custom_amount: Neplatná vlastní částka
@ -108,13 +110,26 @@ zap:
no_lud16: Nebyla nalezena žádná adresa blesku
profile:
past_streams: Minulé proudy
edit:
settings:
button_profile: Upravit profil
button_wallet: Nastavení peněženky
profile:
display_name: Zobrazení názvu
about: O stránkách
nip05: Adresa Nostr
lud16: Adresa blesku
error:
logged_out: Nelze upravit profil, když je odhlášený
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Odpojení peněženky
connect_1tap: Připojení 1 kohoutku
paste: Vložit adresu URL
balance: Bilance
name: Peněženka
error:
logged_out: Nelze se připojit k peněžence, když jste odhlášeni
nwc_auth_event_not_found: Nebyla nalezena žádná událost autentizace peněženky
login:
username: Uživatelské jméno
amber: Přihlášení pomocí Amber
@ -122,3 +137,21 @@ login:
create: Vytvořit účet
error:
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

View File

@ -9,14 +9,12 @@ no_user_found: Ingen bruger fundet
"@no_user_found":
description: Ingen bruger fundet ved søgning
anon: Anon
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 seer
other: $n Seere
other: ${n:decimalPattern} seere
"@viewers":
description: Antal seere af streamingen
placeholders:
n:
type: int
"@anon":
description: En anonym bruger
stream:
@ -25,10 +23,11 @@ stream:
ended: AFSLUTTET
planned: PLANLAGT
started: Startet $timestamp
notification: ${name} gik live!
chat:
disabled: CHAT DEAKTIVERET
disabled_timeout: "Timeout udløber: $time"
timeout(rich): $mod udløbet $user for $time
timeout(rich): $mod udløbet $user for ${time}
"@timeout":
description: Chatbesked, der viser timeout-hændelser
ended: STREAM AFSLUTTET
@ -81,6 +80,8 @@ button:
unmute: Slå lyden fra
share: Del
save: Gemme
connect: Opret forbindelse
settings: Indstillinger
embed:
article_by: Artikel af $name
note_by: Note fra $name
@ -101,6 +102,7 @@ zap:
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Åbn i tegnebogen
button_connect_wallet: Forbind tegnebog
copy: Kopieret til udklipsholder
error:
invalid_custom_amount: Ugyldigt brugerdefineret beløb
@ -108,13 +110,26 @@ zap:
no_lud16: Ingen lyn-adresse fundet
profile:
past_streams: Tidligere strømme
edit:
settings:
button_profile: Rediger profil
button_wallet: Indstillinger for tegnebog
profile:
display_name: Vis navn
about: Omkring
nip05: Nostr-adresse
lud16: Adresse for lynnedslag
error:
logged_out: Kan ikke redigere profil, når jeg er logget ud
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Afbryd forbindelsen til tegnebogen
connect_1tap: 1-Tap-forbindelse
paste: Indsæt URL
balance: Balance
name: Tegnebog
error:
logged_out: Kan ikke oprette forbindelse til wallet, når jeg er logget ud
nwc_auth_event_not_found: Ingen wallet-auth-begivenhed fundet
login:
username: Brugernavn
amber: Log ind med Amber
@ -122,3 +137,21 @@ login:
create: Opret konto
error:
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

View File

@ -4,39 +4,38 @@ upload_avatar: Avatar hochladen
klicken, um den Upload zu starten
most_zapped_streamers: Meistgezappte Streamer
"@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":
description: Kein Benutzer bei der Suche gefunden
anon: Anon
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 Zuschauer
other: $n Zuschauer
other: ${n:decimalPattern} Zuschauer
"@viewers":
description: Anzahl der Betrachter des Streams
placeholders:
n:
type: int
description: Anzahl der Zuschauer des Streams
"@anon":
description: Ein anonymer Benutzer
stream:
status:
live: LIVE
ended: ENDED
ended: BEENDET
planned: GEPLANT
started: Gestartet $timestamp
notification: ${name} ging live!
chat:
disabled: CHAT DEAKTIVIERT
disabled_timeout: "Die Zeitüberschreitung läuft ab: $time"
timeout(rich): $mod Zeitüberschreitung $user für $time
disabled_timeout: "Timeout läuft ab: $time"
timeout(rich): $mod gibt $user einen Timeout für ${time}
"@timeout":
description: Chat-Nachricht mit Zeitüberschreitungsereignissen
description: Chat-Nachricht mit Timeout-Ereignissen
ended: STREAM BEENDET
"@ended":
description: Stream beendet Fußzeile am Ende des Chats
zap(rich): $user hat $amount sats gezappt
"@zap":
description: Chatnachricht mit Stream Zaps
description: Chat-Nachricht mit Stream-Zaps
write:
label: Nachricht schreiben
"@label":
@ -83,6 +82,8 @@ button:
unmute: Entstummen
share: Teilen
save: Speichern
connect: Verbinden Sie
settings: Einstellungen
embed:
article_by: Artikel von $name
note_by: Note von $name
@ -102,6 +103,7 @@ zap:
button_zap_ready: $amount sats zappen
button_zap: Zap
button_open_wallet: In Brieftasche öffnen
button_connect_wallet: Brieftasche verbinden
copy: In die Zwischenablage kopiert
error:
invalid_custom_amount: Ungültiger benutzerdefinierter Betrag
@ -109,13 +111,26 @@ zap:
no_lud16: Keine Blitzadresse gefunden
profile:
past_streams: Vergangene Streams
edit:
settings:
button_profile: Profil bearbeiten
button_wallet: Wallet-Einstellungen
profile:
display_name: Name anzeigen
about: Über
nip05: Nostr-Adresse
lud16: Lightning-Adresse
lud16: Blitz-Adresse
error:
logged_out: Profil kann nicht bearbeitet werden, wenn es abgemeldet ist
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Brieftasche abtrennen
connect_1tap: 1-Tap-Verbindung
paste: URL einfügen
balance: Bilanz
name: Brieftasche
error:
logged_out: Kann keine Verbindung zur Brieftasche herstellen, wenn ich abgemeldet bin
nwc_auth_event_not_found: Kein Wallet-Authentifizierungsereignis gefunden
login:
username: Benutzername
amber: Anmeldung mit Amber
@ -123,3 +138,22 @@ login:
create: Konto erstellen
error:
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

View File

@ -9,14 +9,12 @@ no_user_found: Δεν βρέθηκε χρήστης
"@no_user_found":
description: Δεν βρέθηκε χρήστης κατά την αναζήτηση
anon: Anon
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 θεατής
other: $n θεατές
other: ${n:decimalPattern} θεατές
"@viewers":
description: Αριθμός θεατών της ροής
placeholders:
n:
type: int
"@anon":
description: Ένας ανώνυμος χρήστης
stream:
@ -25,10 +23,11 @@ stream:
ended: ENDED
planned: ΣΧΕΔΙΑΣΜΟΣ
started: Ξεκίνησε $timestamp
notification: ${name} βγήκε ζωντανά!
chat:
disabled: ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ
disabled_timeout: "Το χρονικό όριο λήγει: $time"
timeout(rich): $mod χρονομετρημένη λήξη $user για $time
timeout(rich): $mod χρονομετρημένη λήξη $user για ${time}
"@timeout":
description: Μήνυμα συνομιλίας που εμφανίζει συμβάντα timeout
ended: STREAM ΤΕΛΕΙΩΣΕ
@ -84,6 +83,8 @@ button:
unmute: Αποσυνδέστε τη φωνή σας από το
share: Μοιραστείτε το
save: Αποθήκευση
connect: Συνδέστε το
settings: Ρυθμίσεις
embed:
article_by: Άρθρο από $name
note_by: Σημείωση του $name
@ -104,6 +105,7 @@ zap:
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Άνοιγμα στο πορτοφόλι
button_connect_wallet: Connect Wallet
copy: Αντιγραφή στο πρόχειρο
error:
invalid_custom_amount: Μη έγκυρο προσαρμοσμένο ποσό
@ -111,13 +113,26 @@ zap:
no_lud16: Δεν βρέθηκε διεύθυνση κεραυνού
profile:
past_streams: Προηγούμενα ρεύματα
edit:
settings:
button_profile: Επεξεργασία προφίλ
button_wallet: Ρυθμίσεις πορτοφολιού
profile:
display_name: Όνομα οθόνης
about: Σχετικά με το
nip05: Διεύθυνση Nostr
lud16: Διεύθυνση Lightning
error:
logged_out: Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Αποσύνδεση πορτοφολιού
connect_1tap: Σύνδεση 1 βρύσης
paste: Επικόλληση URL
balance: Υπόλοιπο
name: Πορτοφόλι
error:
logged_out: Δεν μπορώ να συνδεθώ με πορτοφόλι όταν έχω αποσυνδεθεί
nwc_auth_event_not_found: Δεν βρέθηκε συμβάν εξουσιοδότησης πορτοφολιού
login:
username: Όνομα χρήστη
amber: Σύνδεση με Amber
@ -125,3 +140,21 @@ login:
create: Δημιουργία λογαριασμού
error:
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: Η εκκίνηση της ροής απέτυχε, παρακαλούμε ελέγξτε το υπόλοιπό σας

View File

@ -8,14 +8,12 @@ no_user_found: No user found
"@no_user_found":
description: No user found when searching
anon: Anon
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 viewer
other: $n viewers
other: ${n:decimalPattern} viewers
"@viewers":
description: Number of viewers of the stream
placeholders:
n:
type: int
"@anon":
description: An anonymous user
stream:
@ -24,10 +22,11 @@ stream:
ended: ENDED
planned: PLANNED
started: Started $timestamp
notification: ${name} went live!
chat:
disabled: CHAT DISABLED
disabled_timeout: "Timeout expires: $time"
timeout(rich): $mod timed out $user for $time
timeout(rich): $mod timed out $user for ${time}
"@timeout":
description: Chat message showing timeout events
ended: STREAM ENDED
@ -51,15 +50,17 @@ stream:
"@awarded_to":
description: Heading over list of users who are awarded a badge
raid:
to: RAIDING $name
to: RAIDING ${name}
"@to":
description: Chat raid message to another stream
from: RAID FROM $name
from: RAID FROM ${name}
"@from":
description: Chat raid message from another stream
countdown: Raiding in $time
countdown: Raiding in ${time}
"@countdown":
description: Countdown timer for auto-raiding
error:
load_failed: Failed to load stream from ${url}
goal:
title: "Goal: $amount"
remaining: "Remaining: $amount"
@ -80,10 +81,12 @@ button:
unmute: Unmute
share: Share
save: Save
connect: Connect
settings: Settings
embed:
article_by: Article by $name
article_by: Article by ${name}
note_by: Note by $name
live_stream_by: Live stream by $name
live_stream_by: Live stream by ${name}
stream_list:
following: Following
live: Live
@ -99,6 +102,7 @@ zap:
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Open in Wallet
button_connect_wallet: Connect Wallet
copy: Copied to clipboard
error:
invalid_custom_amount: Invalid custom amount
@ -106,13 +110,26 @@ zap:
no_lud16: No lightning address found
profile:
past_streams: Past Streams
edit:
settings:
button_profile: Edit Profile
button_wallet: Wallet Settings
profile:
display_name: Display Name
about: About
nip05: Nostr Address
lud16: Lightning Address
error:
logged_out: Cant edit profile when logged out
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Disconnect Wallet
connect_1tap: 1-Tap Connection
paste: Paste URL
balance: Balance
name: Wallet
error:
logged_out: Cant connect wallet when logged out
nwc_auth_event_not_found: No wallet auth event found
login:
username: Username
amber: Login with Amber
@ -120,3 +137,21 @@ login:
create: Create Account
error:
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

View File

@ -9,14 +9,12 @@ no_user_found: No se ha encontrado ningún usuario
"@no_user_found":
description: No se ha encontrado ningún usuario al realizar la búsqueda
anon: Anónimo
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 espectador
other: $n espectadores
other: ${n:decimalPattern} espectadores
"@viewers":
description: Número de espectadores del flujo
placeholders:
n:
type: int
"@anon":
description: Un usuario anónimo
stream:
@ -25,10 +23,11 @@ stream:
ended: FIN
planned: PLANIFICADO
started: Comenzó $timestamp
notification: ${name} ¡se ha puesto en marcha!
chat:
disabled: CHAT DESHABILITADO
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":
description: Mensaje de chat que muestra los eventos de tiempo de espera
ended: STREAM FINED
@ -84,6 +83,8 @@ button:
unmute: Dejar de silenciar
share: Compartir
save: Guardar
connect: Conectar
settings: Ajustes
embed:
article_by: Artículo de $name
note_by: Nota de $name
@ -104,6 +105,7 @@ zap:
button_zap_ready: Zapear $amount sats
button_zap: Zap
button_open_wallet: Abrir en cartera
button_connect_wallet: Billetera Connect
copy: Copiado al portapapeles
error:
invalid_custom_amount: Importe personalizado no válido
@ -111,13 +113,26 @@ zap:
no_lud16: No se ha encontrado ninguna dirección de rayos
profile:
past_streams: Transmisiones anteriores
edit:
settings:
button_profile: Editar perfil
button_wallet: Configuración de la cartera
profile:
display_name: Mostrar nombre
about: Sobre ti
about: Acerca de
nip05: Dirección Nostr
lud16: Dirección del rayo
error:
logged_out: No se puede editar el perfil cuando se cierra la sesión
wallet:
connect_wallet: Cartera Connect (NWC nostr+walletconnect://)
disconnect_wallet: Desconectar Cartera
connect_1tap: Conexión de 1 toma
paste: Pegar URL
balance: Saldo
name: Cartera
error:
logged_out: No se puede conectar el monedero al cerrar la sesión
nwc_auth_event_not_found: No se ha encontrado ningún evento de autenticación de cartera
login:
username: Usuario
amber: Iniciar sesión con Amber
@ -125,3 +140,21 @@ login:
create: Crear una cuenta
error:
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

View File

@ -9,14 +9,12 @@ no_user_found: Käyttäjää ei löytynyt
"@no_user_found":
description: Käyttäjää ei löytynyt haun yhteydessä
anon: Anon
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 katsoja
other: $n katsojaa
other: ${n:decimalPattern} katsojat
"@viewers":
description: Streamin katsojien määrä
placeholders:
n:
type: int
"@anon":
description: Nimetön käyttäjä
stream:
@ -25,10 +23,11 @@ stream:
ended: ENDED
planned: SUUNNITELTU
started: Aloitettu $timestamp
notification: ${name} meni suoraksi!
chat:
disabled: CHAT POISTETTU KÄYTÖSTÄ
disabled_timeout: "Aikakatkaisu päättyy: $time"
timeout(rich): $mod ajastettu $user for $time
timeout(rich): $mod ajastettu $user for ${time}
"@timeout":
description: Chat-viesti, joka näyttää aikakatkaisutapahtumat
ended: STREAM PÄÄTTYNYT
@ -82,6 +81,8 @@ button:
unmute: Poista mykistys
share: Jaa
save: Tallenna
connect: Yhdistä
settings: Asetukset
embed:
article_by: Artikkeli $name
note_by: Viesti lähettäjältä $name
@ -102,6 +103,7 @@ zap:
button_zap_ready: Zap $amount satsia
button_zap: Zap
button_open_wallet: Avaa lompakossa
button_connect_wallet: Yhdistä lompakko
copy: Kopioitu leikepöydälle
error:
invalid_custom_amount: Virheellinen mukautettu määrä
@ -109,13 +111,26 @@ zap:
no_lud16: Salamaosoitetta ei löytynyt
profile:
past_streams: Aikaisemmat lähetykset
edit:
settings:
button_profile: Muokkaa profiilia
button_wallet: Lompakon asetukset
profile:
display_name: Näytön nimi
about: Tietoja
nip05: Nostr-osoite
lud16: Lightning-osoite
nip05: Nostr Osoite
lud16: Salama osoite
error:
logged_out: Ei voi muokata profiilia, kun on kirjautunut ulos
wallet:
connect_wallet: Connect-lompakko (NWC nostr+walletconnect://)
disconnect_wallet: Irrota lompakko
connect_1tap: 1-Tap-liitäntä
paste: Liitä URL-osoite
balance: Balance
name: Lompakko
error:
logged_out: Ei voi muodostaa yhteyttä lompakkoon, kun on kirjautunut ulos
nwc_auth_event_not_found: Ei lompakko-auth-tapahtumaa löydetty
login:
username: Käyttäjätunnus
amber: Kirjaudu sisään Amber kanssa
@ -123,3 +138,22 @@ login:
create: Luo tili
error:
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

View File

@ -9,14 +9,12 @@ no_user_found: Aucun utilisateur trouvé
"@no_user_found":
description: Aucun utilisateur n'a été trouvé lors de la recherche
anon: Anonyme
full_amount_sats: "${n:decimalPattern} sats"
viewers:
one: 1 téléspectateur
other: $n spectateurs
other: "${n:decimalPattern} téléspectateurs"
"@viewers":
description: Nombre de spectateurs du flux
placeholders:
n:
type: int
"@anon":
description: Un utilisateur anonyme
stream:
@ -25,10 +23,11 @@ stream:
ended: FINI
planned: PRÉVU
started: Commencé à $timestamp
notification: ${name} est en ligne !
chat:
disabled: CHAT DISABLED
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":
description: Message de chat indiquant les événements de dépassement de délai
ended: STREAM ENDED
@ -82,6 +81,8 @@ button:
unmute: Retirer sourdine
share: Partager
save: Sauvegarder
connect: Connecter
settings: Paramètres
embed:
article_by: Article par $name
note_by: Note par $name
@ -101,6 +102,7 @@ zap:
button_zap_ready: Zapper $amount sats
button_zap: Zap
button_open_wallet: Ouvrir dans le portefeuille
button_connect_wallet: Connecter le portefeuille
copy: Copié dans le presse-papiers
error:
invalid_custom_amount: Montant personnalisé non valide
@ -108,13 +110,26 @@ zap:
no_lud16: Pas d'adresse éclair trouvée
profile:
past_streams: Streams passés
edit:
settings:
button_profile: Modifier le profil
button_wallet: Paramètres du portefeuille
profile:
display_name: Nom d'affichage
about: À propos
nip05: Adresse Nostr
lud16: Adresse Lightning
about: A propos de
nip05: Nostr Adresse
lud16: Adresse de la foudre
error:
logged_out: Impossible de modifier le profil lorsque l'on est déconnecté
wallet:
connect_wallet: Portefeuille Connect (NWC nostr+walletconnect://)
disconnect_wallet: Déconnecter le portefeuille
connect_1tap: Connexion à 1 robinet
paste: Coller l'URL
balance: Équilibre
name: Portefeuille
error:
logged_out: Impossible de se connecter au portefeuille lorsque l'on est déconnecté
nwc_auth_event_not_found: Aucun événement d'authentification de portefeuille n'a été trouvé
login:
username: Nom dutilisateur
amber: Se connecter avec Amber
@ -122,3 +137,22 @@ login:
create: Créer un Compte
error:
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

View File

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

View File

@ -11,12 +11,9 @@ no_user_found: Nem talált felhasználó
anon: Névtelen
viewers:
one: 1 néző
other: $n néző
other: ${n:decimalPattern} nézők
"@viewers":
description: A stream nézőinek száma
placeholders:
n:
type: int
"@anon":
description: Egy névtelen felhasználó
stream:
@ -25,10 +22,11 @@ stream:
ended: ENDED
planned: TERVEZETT
started: Elindult $timestamp
notification: ${name} elindult!
chat:
disabled: CHAT KIKAPCSOLVA
disabled_timeout: "Az időkorlát lejár: $time"
timeout(rich): $mod időzített $user a $time számára
timeout(rich): $mod időzített $user a ${time}számára
"@timeout":
description: Chat üzenet az időkorlátos események megjelenítésével
ended: STREAM MEGSZÜNTETETT
@ -53,13 +51,13 @@ stream:
"@awarded_to":
description: Fejléc a jelvényt kapott felhasználók listája fölött
raid:
to: RAIDING $name
to: RAIDING ${name}
"@to":
description: Chat raid üzenet egy másik folyamba
from: RAID FROM $name
"@from":
description: Chat raid üzenet egy másik folyamból
countdown: Raiding a $time oldalon
countdown: Raiding a ${time} oldalon
"@countdown":
description: Visszaszámláló időzítő az automatikus lovagláshoz
goal:
@ -82,10 +80,12 @@ button:
unmute: Némítás visszavonása
share: Megosztás
save: Mentés
connect: Csatlakozás
settings: Beállítások
embed:
article_by: A $name cikke.
article_by: Cikk ${name}
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:
following: Követettek bejegyzései
live: Élő
@ -101,6 +101,7 @@ zap:
button_zap_ready: Zap $amount satoshi
button_zap: Zap
button_open_wallet: Megnyitás a pénztárcában
button_connect_wallet: Connect Wallet
copy: Vágólapra másolva
error:
invalid_custom_amount: Érvénytelen egyéni összeg
@ -108,13 +109,24 @@ zap:
no_lud16: Nem talált villámcím
profile:
past_streams: Múltbeli Streamek
edit:
settings:
button_profile: Profil szerkesztése
button_wallet: Pénztárca beállítások
profile:
display_name: Megjelenített név
about: Névjegy
nip05: Nostr-cím
lud16: Lightning-cím
about: A oldalról
nip05: Nostr cím
lud16: Villám cím
error:
logged_out: Kijelentkezve nem lehet profilt szerkeszteni
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Pénztárca lekapcsolása
connect_1tap: 1-Tap csatlakozás
paste: URL beillesztése
error:
logged_out: Kijelentkezve nem lehet csatlakozni a pénztárcához
nwc_auth_event_not_found: Nem találtak pénztárca-auth eseményt
login:
username: Felhasználónév
amber: Bejelentkezés Amber segítségével

View File

@ -9,14 +9,12 @@ no_user_found: Nessun utente trovato
"@no_user_found":
description: Nessun utente trovato durante la ricerca
anon: Anonimo
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 spettatore
other: $n spettatori
other: ${n:decimalPattern} spettatori
"@viewers":
description: Numero di spettatori del flusso
placeholders:
n:
type: int
"@anon":
description: Un utente anonimo
stream:
@ -25,10 +23,11 @@ stream:
ended: FINE
planned: PREVISTO
started: Avviato $timestamp
notification: ${name} è andato in onda!
chat:
disabled: CHAT DISABILITATA
disabled_timeout: "Il timeout scade: $time"
timeout(rich): $mod time out $user per $time
timeout(rich): $mod time out $user per ${time}
"@timeout":
description: Messaggio di chat che mostra gli eventi di timeout
ended: STREAM ENDED
@ -82,6 +81,8 @@ button:
unmute: Riattiva
share: Condividi
save: Salva
connect: Collegare
settings: Impostazioni
embed:
article_by: Articolo di $name
note_by: Nota di $name
@ -102,6 +103,7 @@ zap:
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Aprire nel portafoglio
button_connect_wallet: Portafoglio Connect
copy: Copiato negli appunti
error:
invalid_custom_amount: Importo personalizzato non valido
@ -109,13 +111,26 @@ zap:
no_lud16: Nessun indirizzo di fulmine trovato
profile:
past_streams: Flussi passati
edit:
settings:
button_profile: Modifica profilo
button_wallet: Impostazioni del portafoglio
profile:
display_name: Nome visualizzato
about: Info
nip05: Indirizzo Nostr
about: Circa
nip05: Indirizzo
lud16: Indirizzo del fulmine
error:
logged_out: Impossibile modificare il profilo quando si è disconnessi
wallet:
connect_wallet: Portafoglio Connect (NWC nostr+walletconnect://)
disconnect_wallet: Disconnettere il portafoglio
connect_1tap: Connessione a 1 rubinetto
paste: Incolla URL
balance: Equilibrio
name: Portafoglio
error:
logged_out: Impossibile connettere il portafoglio quando si è disconnessi
nwc_auth_event_not_found: Nessun evento wallet auth trovato
login:
username: Nome utente
amber: Accesso con Amber
@ -123,3 +138,21 @@ login:
create: Crea un account
error:
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

View File

@ -1,4 +1,4 @@
upload_avatar: アバターのアップロード
upload_avatar: 画像アップロード
"@upload_avatar":
description: アバターのプレースホルダーを押してアップロードを開始するよう促すテキスト
most_zapped_streamers: 最もザッピングされたストリーマー
@ -8,14 +8,12 @@ no_user_found: ユーザーが見つかりません
"@no_user_found":
description: 検索してもユーザーが見つからない
anon: 匿名
full_amount_sats: "${n:decimalPattern} サッツ"
viewers:
one: 1 視聴者
other: $n 人が視聴中
other: ${n:decimalPattern} 人が視聴中
"@viewers":
description: ストリームの視聴者数
placeholders:
n:
type: イント
"@anon":
description: 匿名ユーザー
stream:
@ -24,10 +22,11 @@ stream:
ended: 終了
planned: 予定
started: $timestamp を開始
notification: ${name} がライブを開始した!
chat:
disabled: チャット無効
disabled_timeout: タイムアウト: $time
timeout(rich): $mod タイムアウト $user for $time
timeout(rich): $mod タイムアウト $user for ${time}
"@timeout":
description: タイムアウトイベントを表示するチャットメッセージ
ended: 配信終了
@ -80,6 +79,8 @@ button:
unmute: ミュート解除
share: 共有
save: 保存
connect: 接続
settings: 設定
embed:
article_by: 記事: $name
note_by: $name の投稿
@ -99,6 +100,7 @@ zap:
button_zap_ready: $amount satsをザップする
button_zap: ザップ
button_open_wallet: ウォレットで開く
button_connect_wallet: コネクトウォレット
copy: クリップボードにコピー
error:
invalid_custom_amount: 無効なカスタム金額
@ -106,13 +108,26 @@ zap:
no_lud16: 雷アドレスが見つかりません
profile:
past_streams: 過去の配信
edit:
settings:
button_profile: プロフィール編集
button_wallet: ウォレットの設定
profile:
display_name: 表示名
about: 自己紹介
nip05: Nostrアドレス
about: について
nip05: 住所
lud16: ライトニングアドレス
error:
logged_out: ログアウトするとプロフィールが編集できない
wallet:
connect_wallet: コネクトウォレットNWC nostr+walletconnect://)
disconnect_wallet: ウォレットの切断
connect_1tap: 1タップ接続
paste: URLを貼り付ける
balance: バランス
name: 財布
error:
logged_out: ログアウト時にウォレットに接続できない
nwc_auth_event_not_found: ウォレットの認証イベントが見つかりません
login:
username: ユーザー名
amber: 琥珀でログイン
@ -120,3 +135,21 @@ login:
create: アカウントを作成する
error:
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: ストリームの開始に失敗しました。

View File

@ -8,14 +8,12 @@ no_user_found: 사용자를 찾을 수 없습니다.
"@no_user_found":
description: 검색 시 사용자를 찾을 수 없음
anon: Anon
full_amount_sats: "${n:decimalPattern} sats"
viewers:
one: 시청자 1명
other: $n 시청자
other: "{n:decimalPattern} 시청자"
"@viewers":
description: 스트림 시청자 수
placeholders:
n:
type: int
"@anon":
description: 익명 사용자
stream:
@ -24,10 +22,11 @@ stream:
ended: 종료
planned: 계획된
started: 시작 $timestamp
notification: ${name} 라이브가 시작되었습니다!
chat:
disabled: 채팅 사용 안 함
disabled_timeout: "시간 초과가 만료되었습니다: $time"
timeout(rich): $mod 시간 초과됨 $user $time
timeout(rich): $mod 시간 초과됨 $user ${time}
"@timeout":
description: 시간 초과 이벤트를 표시하는 채팅 메시지
ended: 스트림 종료
@ -80,6 +79,8 @@ button:
unmute: 뮤트 해제
share: 공유
save: 저장
connect: 연결
settings: 설정
embed:
article_by: "작성자: $name"
note_by: "노트 작성됨: $name"
@ -99,6 +100,7 @@ zap:
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: 지갑에서 열기
button_connect_wallet: 지갑 연결
copy: 클립보드에 복사
error:
invalid_custom_amount: 잘못된 사용자 지정 금액
@ -106,13 +108,26 @@ zap:
no_lud16: 번개 주소를 찾을 수 없습니다.
profile:
past_streams: 과거 스트림
edit:
settings:
button_profile: 프로필 수정
button_wallet: 지갑 설정
profile:
display_name: 표시 이름
about: 정보
nip05: 노스트르 주소
lud16: 라이트닝 주소
error:
logged_out: 로그아웃 시 프로필 수정 불가
wallet:
connect_wallet: 지갑 연결(NWC nostr+walletconnect://)
disconnect_wallet: 지갑 연결 해제
connect_1tap: 1-탭 연결
paste: URL 붙여넣기
balance: 잔액
name: 지갑
error:
logged_out: 로그아웃 시 지갑 연결 불가
nwc_auth_event_not_found: 지갑 인증 이벤트를 찾을 수 없습니다.
login:
username: 사용자 이름
amber: Amber로 로그인
@ -120,3 +135,21 @@ login:
create: 계정 만들기
error:
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: 스트림 시작에 실패했습니다. 잔액을 확인해 주세요.

View File

@ -9,14 +9,12 @@ no_user_found: Geen gebruiker gevonden
"@no_user_found":
description: Geen gebruiker gevonden bij het zoeken
anon: Anon
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 kijker
other: $n kijkers
other: ${n:decimalPattern} kijkers
"@viewers":
description: Aantal kijkers van de stream
placeholders:
n:
type: int
"@anon":
description: Een anonieme gebruiker
stream:
@ -25,10 +23,11 @@ stream:
ended: GESLOTEN
planned: GEPLAND
started: Begonnen met $timestamp
notification: ${name} ging live!
chat:
disabled: CHAT UITGESCHAKELD
disabled_timeout: "Time-out loopt af: $time"
timeout(rich): $mod timed out $user voor $time
timeout(rich): $mod timed out $user voor ${time}
"@timeout":
description: Chatbericht met time-outgebeurtenissen
ended: STREAM BEËINDIGD
@ -83,6 +82,8 @@ button:
unmute: Niet langer negeren
share: Deel
save: Opslaan
connect: Maak verbinding met
settings: Instellingen
embed:
article_by: Artikel door $name
note_by: Opmerking door $name
@ -102,6 +103,7 @@ zap:
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Openen in portefeuille
button_connect_wallet: Portemonnee aansluiten
copy: Gekopieerd naar klembord
error:
invalid_custom_amount: Ongeldig aangepast bedrag
@ -109,13 +111,26 @@ zap:
no_lud16: Geen bliksemadres gevonden
profile:
past_streams: Afgelopen Streams
edit:
settings:
button_profile: Profiel bewerken
button_wallet: Portemonnee-instellingen
profile:
display_name: Naam weergeven
about: Over ons
about: Over
nip05: Nostr Adres
lud16: Lightning adres
lud16: Bliksemadres
error:
logged_out: Kan profiel niet bewerken als ik ben uitgelogd
wallet:
connect_wallet: Portemonnee verbinden (NWC nostr+walletconnect://)
disconnect_wallet: Portefeuille loskoppelen
connect_1tap: 1-Tap Aansluiting
paste: URL plakken
balance: Saldo
name: Portemonnee
error:
logged_out: Kan geen verbinding maken met portemonnee als ik ben uitgelogd
nwc_auth_event_not_found: Geen portemonnee-auth-gebeurtenis gevonden
login:
username: Gebruikersnaam
amber: Inloggen met Amber
@ -123,3 +138,21 @@ login:
create: Account aanmaken
error:
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

View File

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

View File

@ -9,14 +9,12 @@ no_user_found: Nie znaleziono użytkownika
"@no_user_found":
description: Nie znaleziono użytkownika podczas wyszukiwania
anon: Anon
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 przeglądarka
other: $n widzowie
other: "{n:decimalPattern} widzów"
"@viewers":
description: Liczba widzów strumienia
placeholders:
n:
type: int
"@anon":
description: Anonimowy użytkownik
stream:
@ -25,10 +23,11 @@ stream:
ended: ZAKOŃCZONY
planned: PLANOWANE
started: Start $timestamp
notification: ${name} został uruchomiony!
chat:
disabled: CZAT WYŁĄCZONY
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":
description: Komunikat czatu pokazujący zdarzenia przekroczenia limitu czasu
ended: TRANSMISJA ZAKOŃCZONA
@ -82,6 +81,8 @@ button:
unmute: Wyłącz wyciszenie
share: Udział
save: Zapisz
connect: Połączenie
settings: Ustawienia
embed:
article_by: Artykuł autorstwa $name
note_by: Uwaga $name
@ -102,6 +103,7 @@ zap:
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Otwórz w portfelu
button_connect_wallet: Connect Wallet
copy: Skopiowane do schowka
error:
invalid_custom_amount: Nieprawidłowa kwota niestandardowa
@ -109,13 +111,26 @@ zap:
no_lud16: Nie znaleziono adresu pioruna
profile:
past_streams: Poprzednie strumienie
edit:
settings:
button_profile: Edytuj profil
button_wallet: Ustawienia portfela
profile:
display_name: Wyświetlana nazwa
about: O
nip05: Adres Nostr
lud16: Adres błyskawicy
error:
logged_out: Nie można edytować profilu po wylogowaniu
wallet:
connect_wallet: Connect Wallet (NWC nostr+walletconnect://)
disconnect_wallet: Odłącz portfel
connect_1tap: Połączenie 1-wtykowe
paste: Wklej adres URL
balance: Równowaga
name: Portfel
error:
logged_out: Nie można połączyć portfela po wylogowaniu
nwc_auth_event_not_found: Nie znaleziono zdarzenia autoryzacji portfela
login:
username: Nazwa użytkownika
amber: Zaloguj się za pomocą Amber
@ -123,3 +138,21 @@ login:
create: Utwórz konto
error:
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

View File

@ -9,14 +9,12 @@ no_user_found: Nenhum usuário encontrado
"@no_user_found":
description: Nenhum usuário foi encontrado durante a pesquisa
anon: Anônimo
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 visualizador
other: $n espectadores
other: ${n:decimalPattern} espectadores
"@viewers":
description: Número de espectadores da transmissão
placeholders:
n:
type: int
"@anon":
description: Um usuário anônimo
stream:
@ -25,10 +23,11 @@ stream:
ended: FINALIZADO
planned: PLANEJADO
started: Iniciado em $timestamp
notification: ${name} foi ao ar!
chat:
disabled: BATE-PAPO DESATIVADO
disabled_timeout: "O tempo limite expira: $time"
timeout(rich): $mod Tempo esgotado $user para $time
timeout(rich): $mod Tempo esgotado $user para ${time}
"@timeout":
description: Mensagem de bate-papo mostrando eventos de tempo limite
ended: TRANSMISSÃO ENCERRADA
@ -82,6 +81,8 @@ button:
unmute: Desmutar
share: Compartilhar
save: Salvar
connect: Conectar
settings: Configurações
embed:
article_by: Artigo de $name
note_by: Nota de $name
@ -102,6 +103,7 @@ zap:
button_zap_ready: Enviar Zap de $amount sats
button_zap: Zap
button_open_wallet: Abrir na carteira
button_connect_wallet: Conectar carteira
copy: Copiado para a área de transferência
error:
invalid_custom_amount: Valor personalizado inválido
@ -109,13 +111,26 @@ zap:
no_lud16: Nenhum endereço de raio encontrado
profile:
past_streams: Transmissões Passadas
edit:
settings:
button_profile: Editar perfil
button_wallet: Configurações da carteira
profile:
display_name: Nome de exibição
about: Sobre
nip05: Endereço do Nostr
lud16: Endereço Lightning
nip05: Endereço Nostr
lud16: Endereço para relâmpagos
error:
logged_out: Não é possível editar o perfil quando se está desconectado
wallet:
connect_wallet: Carteira Connect (NWC nostr+walletconnect://)
disconnect_wallet: Desconectar carteira
connect_1tap: Conexão de 1 torneira
paste: Colar URL
balance: Equilíbrio
name: Carteira
error:
logged_out: Não consigo conectar a carteira quando estou desconectado
nwc_auth_event_not_found: Nenhum evento de autenticação de carteira encontrado
login:
username: Nome de usuário
amber: Faça login com o Amber
@ -123,3 +138,21 @@ login:
create: Criar Conta
error:
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

View File

@ -9,14 +9,12 @@ no_user_found: Niciun utilizator găsit
"@no_user_found":
description: Nu s-a găsit niciun utilizator la căutare
anon: Anon
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 vizualizator
other: $n telespectatori
other: ${n:decimalPattern} telespectatori
"@viewers":
description: Numărul de telespectatori ai fluxului
placeholders:
n:
type: int
"@anon":
description: Un utilizator anonim
stream:
@ -25,10 +23,11 @@ stream:
ended: TERMINAT
planned: PLANIFICATE
started: A început $timestamp
notification: ${name} a intrat în direct!
chat:
disabled: CHAT DEZACTIVAT
disabled_timeout: "Timpul expiră: $time"
timeout(rich): $mod Timed out $user pentru $time
timeout(rich): $mod Timed out $user pentru ${time}
"@timeout":
description: Mesaj de chat care afișează evenimentele de timeout
ended: STREAM ÎNCHEIAT
@ -83,6 +82,8 @@ button:
unmute: Dezactivați
share: Share
save: Salvați
connect: Conectare
settings: Setări
embed:
article_by: Articol de $name
note_by: Notă de la $name
@ -103,6 +104,7 @@ zap:
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Deschide în portofel
button_connect_wallet: Conectați portofelul
copy: Copiat în clipboard
error:
invalid_custom_amount: Sumă personalizată invalidă
@ -110,13 +112,26 @@ zap:
no_lud16: Nu a fost găsită nicio adresă de fulgere
profile:
past_streams: Fluxuri trecute
edit:
settings:
button_profile: Editare profil
button_wallet: Setări portofel
profile:
display_name: Nume afișat
about: Despre
nip05: Adresa Nostr
lud16: Adresa fulgerului
error:
logged_out: Nu pot edita profilul când sunt deconectat
wallet:
connect_wallet: Conectați portofelul (NWC nostr+walletconnect://)
disconnect_wallet: Deconectați portofelul
connect_1tap: Conexiune 1-Tap
paste: Lipiți URL
balance: Echilibru
name: Portofel
error:
logged_out: Nu puteți conecta portofelul atunci când sunteți deconectat
nwc_auth_event_not_found: Nu a fost găsit niciun eveniment de autorizare a portofelului
login:
username: Nume utilizator
amber: Conectați-vă cu Amber
@ -124,3 +139,21 @@ login:
create: Creare cont
error:
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

View File

@ -9,14 +9,12 @@ no_user_found: Пользователь не найден
"@no_user_found":
description: Пользователь не найден при поиске
anon: Аноним
full_amount_sats: ${n:decimalPattern} sats
viewers:
one: 1 зритель
other: $n зрителей
other: ${n:decimalPattern} зрителей
"@viewers":
description: Количество зрителей потока
placeholders:
n:
type: int
"@anon":
description: Анонимный пользователь
stream:
@ -25,10 +23,11 @@ stream:
ended: КОНЕЦ
planned: ПЛАНИРУЕМЫЙ
started: Начало $timestamp
notification: ${name} запустился!
chat:
disabled: ЧАТ ОТКЛЮЧЕН
disabled_timeout: "Таймаут истекает: $time"
timeout(rich): $mod тайм-аут $user для $time
timeout(rich): $mod тайм-аут $user для ${time}
"@timeout":
description: Сообщение в чате, показывающее события по тайм-ауту
ended: ТРАНСЛЯЦИЯ ОКОНЧЕНА
@ -83,6 +82,8 @@ button:
unmute: Включить уведомления
share: Поделиться
save: Сохранить
connect: Подключайтесь
settings: Настройки
embed:
article_by: Статья $name
note_by: Заметка на сайте $name
@ -103,6 +104,7 @@ zap:
button_zap_ready: Запнуть $amount сат
button_zap: Зап
button_open_wallet: Открыть в кошельке
button_connect_wallet: Подключить кошелек
copy: Скопировано в буфер обмена
error:
invalid_custom_amount: Недопустимая пользовательская сумма
@ -110,13 +112,26 @@ zap:
no_lud16: Адрес молнии не найден
profile:
past_streams: Предыдущие трансляции
edit:
settings:
button_profile: Редактировать профиль
button_wallet: Настройки кошелька
profile:
display_name: Отображаемое имя
about: О себе
nip05: Nostr адрес
lud16: Lightning Адрес
about: О сайте
nip05: Адрес Ностр
lud16: Адрес молнии
error:
logged_out: Невозможно редактировать профиль при выходе из системы
wallet:
connect_wallet: Кошелек Connect (NWC nostr+walletconnect://)
disconnect_wallet: Отключить кошелек
connect_1tap: 1-кратное соединение
paste: Вставить URL
balance: Баланс
name: Кошелек
error:
logged_out: Невозможно подключить кошелек при выходе из системы
nwc_auth_event_not_found: Событие аутентификации кошелька не найдено
login:
username: Имя пользователя
amber: Войти с помощью Amber
@ -124,3 +139,22 @@ login:
create: Создать аккаунт
error:
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: Запуск потока не удался, пожалуйста, проверьте баланс

View File

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

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