feat: simple NWC flow

closes #19
This commit is contained in:
2025-05-26 13:28:00 +01:00
parent befd7c014b
commit 47bed26df6
76 changed files with 3416 additions and 3277 deletions

View File

@ -45,5 +45,36 @@
<true/> <true/>
<key>UIApplicationSupportsIndirectInputEvents</key> <key>UIApplicationSupportsIndirectInputEvents</key>
<true/> <true/>
<key>CFBundleLocalizations</key>
<array>
<string>af</string>
<string>ar</string>
<string>ca</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>he</string>
<string>hu</string>
<string>it</string>
<string>ja</string>
<string>ko</string>
<string>nl</string>
<string>no</string>
<string>pl</string>
<string>pt</string>
<string>ro</string>
<string>ru</string>
<string>sr</string>
<string>sv</string>
<string>tr</string>
<string>uk</string>
<string>vi</string>
<string>zh</string>
</array>
</dict> </dict>
</plist> </plist>

View File

@ -11,6 +11,7 @@ import 'package:zap_stream_flutter/pages/login_input.dart';
import 'package:zap_stream_flutter/pages/new_account.dart'; import 'package:zap_stream_flutter/pages/new_account.dart';
import 'package:zap_stream_flutter/pages/profile.dart'; import 'package:zap_stream_flutter/pages/profile.dart';
import 'package:zap_stream_flutter/pages/settings_profile.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/pages/stream.dart';
import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/theme.dart';
import 'package:zap_stream_flutter/utils.dart'; import 'package:zap_stream_flutter/utils.dart';
@ -102,7 +103,6 @@ void runZapStream() {
}, },
), ),
ShellRoute( ShellRoute(
observers: [routeObserver],
builder: builder:
(context, state, child) => (context, state, child) =>
Column(children: [HeaderWidget(), child]), Column(children: [HeaderWidget(), child]),
@ -115,6 +115,10 @@ void runZapStream() {
path: "profile", path: "profile",
builder: (context, state) => SettingsProfilePage(), builder: (context, state) => SettingsProfilePage(),
), ),
GoRoute(
path: "wallet",
builder: (context, state) => SettingsWalletPage(),
),
], ],
), ),
], ],

View File

@ -80,6 +80,7 @@ button:
unmute: Unmute unmute: Unmute
share: Share share: Share
save: Save save: Save
connect: Connect
embed: embed:
article_by: Article by $name article_by: Article by $name
note_by: Note by $name note_by: Note by $name
@ -99,6 +100,7 @@ zap:
button_zap_ready: Zap $amount sats button_zap_ready: Zap $amount sats
button_zap: Zap button_zap: Zap
button_open_wallet: Open in Wallet button_open_wallet: Open in Wallet
button_connect_wallet: Connect Wallet
copy: Copied to clipboard copy: Copied to clipboard
error: error:
invalid_custom_amount: Invalid custom amount invalid_custom_amount: Invalid custom amount
@ -113,6 +115,10 @@ profile:
lud16: Lightning Address lud16: Lightning Address
error: error:
logged_out: Cant edit profile when logged out logged_out: Cant edit profile when logged out
wallet:
connect_wallet: Connect Wallet (NWC nwc://)
error:
logged_out: Cant connect wallet when logged out
login: login:
username: "Username" username: "Username"
amber: Login with Amber amber: Login with Amber

View File

@ -4,14 +4,13 @@
/// To regenerate, run: `dart run slang` /// To regenerate, run: `dart run slang`
/// ///
/// Locales: 28 /// Locales: 28
/// Strings: 1764 (63 per locale) /// Strings: 1768 (63 per locale)
/// ///
/// Built on 2025-05-20 at 16:08 UTC /// Built on 2025-05-26 at 10:54 UTC
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsAf implements Translations { class TranslationsAf extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsAf({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsAf({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsAf implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsAf implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 TranslationsAf _root = this; // ignore: unused_field late final TranslationsAf _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsAf implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamAf implements TranslationsStreamEn { class _TranslationsStreamAf extends TranslationsStreamEn {
_TranslationsStreamAf._(this._root); _TranslationsStreamAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusAf status = _TranslationsStreamStatusAf._(_root); @override late final _TranslationsStreamStatusAf status = _TranslationsStreamStatusAf._(_root);
@override String started({ required Object timestamp}) => 'Started ${timestamp}'; @override String started({required Object timestamp}) => 'Started ${timestamp}';
@override late final _TranslationsStreamChatAf chat = _TranslationsStreamChatAf._(_root); @override late final _TranslationsStreamChatAf chat = _TranslationsStreamChatAf._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalAf implements TranslationsGoalEn { class _TranslationsGoalAf extends TranslationsGoalEn {
_TranslationsGoalAf._(this._root); _TranslationsGoalAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Goal: ${amount}'; @override String title({required Object amount}) => 'Goal: ${amount}';
@override String remaining({ required Object amount}) => 'Remaining: ${amount}'; @override String remaining({required Object amount}) => 'Remaining: ${amount}';
@override String get complete => 'COMPLETE'; @override String get complete => 'COMPLETE';
} }
// Path: button // Path: button
class _TranslationsButtonAf implements TranslationsButtonEn { class _TranslationsButtonAf extends TranslationsButtonEn {
_TranslationsButtonAf._(this._root); _TranslationsButtonAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonAf implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedAf implements TranslationsEmbedEn { class _TranslationsEmbedAf extends TranslationsEmbedEn {
_TranslationsEmbedAf._(this._root); _TranslationsEmbedAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Article by ${name}'; @override String article_by({required Object name}) => 'Article by ${name}';
@override String note_by({ required Object name}) => 'Note by ${name}'; @override String note_by({required Object name}) => 'Note by ${name}';
@override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; @override String live_stream_by({required Object name}) => 'Live stream by ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListAf implements TranslationsStreamListEn { class _TranslationsStreamListAf extends TranslationsStreamListEn {
_TranslationsStreamListAf._(this._root); _TranslationsStreamListAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListAf implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapAf implements TranslationsZapEn { class _TranslationsZapAf extends TranslationsZapEn {
_TranslationsZapAf._(this._root); _TranslationsZapAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object name}) => 'Zap ${name}'; @override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Custom Amount'; @override String get custom_amount => 'Custom Amount';
@override String get confirm => 'Confirm'; @override String get confirm => 'Confirm';
@override String get comment => 'Comment'; @override String get comment => '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_zap => 'Zap';
@override String get button_open_wallet => 'Open in Wallet'; @override String get button_open_wallet => 'Open in Wallet';
@override String get copy => 'Copied to clipboard'; @override String get copy => 'Copied to clipboard';
@ -163,8 +164,8 @@ class _TranslationsZapAf implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileAf implements TranslationsProfileEn { class _TranslationsProfileAf extends TranslationsProfileEn {
_TranslationsProfileAf._(this._root); _TranslationsProfileAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileAf implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginAf implements TranslationsLoginEn { class _TranslationsLoginAf extends TranslationsLoginEn {
_TranslationsLoginAf._(this._root); _TranslationsLoginAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginAf implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusAf implements TranslationsStreamStatusEn { class _TranslationsStreamStatusAf extends TranslationsStreamStatusEn {
_TranslationsStreamStatusAf._(this._root); _TranslationsStreamStatusAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusAf implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatAf implements TranslationsStreamChatEn { class _TranslationsStreamChatAf extends TranslationsStreamChatEn {
_TranslationsStreamChatAf._(this._root); _TranslationsStreamChatAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DISABLED'; @override String get disabled => 'CHAT DISABLED';
@override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; @override String disabled_timeout({required Object time}) => 'Timeout expires: ${time}';
/// Chat message showing timeout events /// Chat message showing timeout events
@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, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream ended footer at bottom of chat /// Stream ended footer at bottom of chat
@override String get ended => 'STREAM ENDED'; @override String get ended => 'STREAM ENDED';
/// Chat message showing stream zaps /// Chat message showing 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteAf write = _TranslationsStreamChatWriteAf._(_root); @override late final _TranslationsStreamChatWriteAf write = _TranslationsStreamChatWriteAf._(_root);
@override late final _TranslationsStreamChatBadgeAf badge = _TranslationsStreamChatBadgeAf._(_root); @override late final _TranslationsStreamChatBadgeAf badge = _TranslationsStreamChatBadgeAf._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatAf implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorAf implements TranslationsZapErrorEn { class _TranslationsZapErrorAf extends TranslationsZapErrorEn {
_TranslationsZapErrorAf._(this._root); _TranslationsZapErrorAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorAf implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditAf implements TranslationsProfileEditEn { class _TranslationsProfileEditAf extends TranslationsProfileEditEn {
_TranslationsProfileEditAf._(this._root); _TranslationsProfileEditAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditAf implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorAf implements TranslationsLoginErrorEn { class _TranslationsLoginErrorAf extends TranslationsLoginErrorEn {
_TranslationsLoginErrorAf._(this._root); _TranslationsLoginErrorAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorAf implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteAf implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteAf extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteAf._(this._root); _TranslationsStreamChatWriteAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteAf implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeAf implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeAf extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeAf._(this._root); _TranslationsStreamChatBadgeAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeAf implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidAf implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidAf extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidAf._(this._root); _TranslationsStreamChatRaidAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
// Translations // Translations
/// Chat raid message to another stream /// Chat raid message to another stream
@override String to({ required Object name}) => 'RAIDING ${name}'; @override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid message from another stream /// Chat raid message from another stream
@override String from({ required Object name}) => 'RAID FROM ${name}'; @override String from({required Object name}) => 'RAID FROM ${name}';
/// Countdown timer for auto-raiding /// Countdown timer for auto-raiding
@override String countdown({ required Object time}) => 'Raiding in ${time}'; @override String countdown({required Object time}) => 'Raiding in ${time}';
} }
// Path: profile.edit.error // Path: profile.edit.error
class _TranslationsProfileEditErrorAf implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorAf extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorAf._(this._root); _TranslationsProfileEditErrorAf._(TranslationsAf root) : this._root = root, super.internal(root);
final TranslationsAf _root; // ignore: unused_field final TranslationsAf _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsAf {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'PLANNED'; case 'stream.status.planned': return 'PLANNED';
case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Started ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABLED'; case 'stream.chat.disabled': return 'CHAT DISABLED';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout expires: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ENDED'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Write message'; 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.no_signer': return 'Can\'t write messages with npub login';
case 'stream.chat.write.login': return 'Please login to send messages'; case 'stream.chat.write.login': return 'Please login to send messages';
case 'stream.chat.badge.awarded_to': return 'Awarded to:'; case 'stream.chat.badge.awarded_to': return 'Awarded to:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Goal: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Remaining: ${amount}';
case 'goal.complete': return 'COMPLETE'; case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Login'; case 'button.login': return 'Login';
case 'button.logout': return 'Logout'; case 'button.logout': return 'Logout';
@ -380,18 +381,18 @@ extension on TranslationsAf {
case 'button.unmute': return 'Unmute'; case 'button.unmute': return 'Unmute';
case 'button.share': return 'Share'; case 'button.share': return 'Share';
case 'button.save': return 'Save'; case 'button.save': return 'Save';
case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; case 'embed.article_by': return ({required Object name}) => 'Article by ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note 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 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return 'Following'; case 'stream_list.following': return 'Following';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planned'; case 'stream_list.planned': return 'Planned';
case 'stream_list.ended': return 'Ended'; 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.custom_amount': return 'Custom Amount';
case 'zap.confirm': return 'Confirm'; case 'zap.confirm': return 'Confirm';
case 'zap.comment': return 'Comment'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Open in Wallet'; case 'zap.button_open_wallet': return 'Open in Wallet';
case 'zap.copy': return 'Copied to clipboard'; case 'zap.copy': return 'Copied to clipboard';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsAr implements Translations { class TranslationsAr extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsAr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsAr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsAr implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsAr implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsAr _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsAr implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamAr implements TranslationsStreamEn { class _TranslationsStreamAr extends TranslationsStreamEn {
_TranslationsStreamAr._(this._root); _TranslationsStreamAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusAr status = _TranslationsStreamStatusAr._(_root); @override late final _TranslationsStreamStatusAr status = _TranslationsStreamStatusAr._(_root);
@override String started({ required Object timestamp}) => 'بدأ ${timestamp}'; @override String started({required Object timestamp}) => 'بدأ ${timestamp}';
@override late final _TranslationsStreamChatAr chat = _TranslationsStreamChatAr._(_root); @override late final _TranslationsStreamChatAr chat = _TranslationsStreamChatAr._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalAr implements TranslationsGoalEn { class _TranslationsGoalAr extends TranslationsGoalEn {
_TranslationsGoalAr._(this._root); _TranslationsGoalAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'الهدف: ${amount}'; @override String title({required Object amount}) => 'الهدف: ${amount}';
@override String remaining({ required Object amount}) => 'المتبقي: ${amount}'; @override String remaining({required Object amount}) => 'المتبقي: ${amount}';
@override String get complete => 'مكتمل'; @override String get complete => 'مكتمل';
} }
// Path: button // Path: button
class _TranslationsButtonAr implements TranslationsButtonEn { class _TranslationsButtonAr extends TranslationsButtonEn {
_TranslationsButtonAr._(this._root); _TranslationsButtonAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonAr implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedAr implements TranslationsEmbedEn { class _TranslationsEmbedAr extends TranslationsEmbedEn {
_TranslationsEmbedAr._(this._root); _TranslationsEmbedAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'مقال بقلم ${name}'; @override String article_by({required Object name}) => 'مقال بقلم ${name}';
@override String note_by({ required Object name}) => 'ملاحظة من ${name}'; @override String note_by({required Object name}) => 'ملاحظة من ${name}';
@override String live_stream_by({ required Object name}) => 'بث مباشر من ${name}'; @override String live_stream_by({required Object name}) => 'بث مباشر من ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListAr implements TranslationsStreamListEn { class _TranslationsStreamListAr extends TranslationsStreamListEn {
_TranslationsStreamListAr._(this._root); _TranslationsStreamListAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListAr implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapAr implements TranslationsZapEn { class _TranslationsZapAr extends TranslationsZapEn {
_TranslationsZapAr._(this._root); _TranslationsZapAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object name}) => 'زاب ${name}'; @override String title({required Object name}) => 'زاب ${name}';
@override String get custom_amount => 'المبلغ المخصص'; @override String get custom_amount => 'المبلغ المخصص';
@override String get confirm => 'تأكيد'; @override String get confirm => 'تأكيد';
@override String get comment => 'تعليق'; @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_zap => 'زاب';
@override String get button_open_wallet => 'فتح في المحفظة'; @override String get button_open_wallet => 'فتح في المحفظة';
@override String get copy => 'نسخ إلى الحافظة'; @override String get copy => 'نسخ إلى الحافظة';
@ -163,8 +164,8 @@ class _TranslationsZapAr implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileAr implements TranslationsProfileEn { class _TranslationsProfileAr extends TranslationsProfileEn {
_TranslationsProfileAr._(this._root); _TranslationsProfileAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileAr implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginAr implements TranslationsLoginEn { class _TranslationsLoginAr extends TranslationsLoginEn {
_TranslationsLoginAr._(this._root); _TranslationsLoginAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginAr implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusAr implements TranslationsStreamStatusEn { class _TranslationsStreamStatusAr extends TranslationsStreamStatusEn {
_TranslationsStreamStatusAr._(this._root); _TranslationsStreamStatusAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusAr implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatAr implements TranslationsStreamChatEn { class _TranslationsStreamChatAr extends TranslationsStreamChatEn {
_TranslationsStreamChatAr._(this._root); _TranslationsStreamChatAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'تم تعطيل الدردشة'; @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, mod,
const TextSpan(text: ' انتهى الوقت '), const TextSpan(text: ' انتهى الوقت '),
user, user,
const TextSpan(text: ' لـ '), const TextSpan(text: ' لـ '),
time, time,
], style: style, recognizer: recognizer); ]);
/// تيار انتهى التذييل في أسفل الدردشة /// تيار انتهى التذييل في أسفل الدردشة
@override String get ended => 'انتهى البث'; @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, user,
const TextSpan(text: ' انطلق '), const TextSpan(text: ' انطلق '),
amount, amount,
const TextSpan(text: ' ساتس'), const TextSpan(text: ' ساتس'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteAr write = _TranslationsStreamChatWriteAr._(_root); @override late final _TranslationsStreamChatWriteAr write = _TranslationsStreamChatWriteAr._(_root);
@override late final _TranslationsStreamChatBadgeAr badge = _TranslationsStreamChatBadgeAr._(_root); @override late final _TranslationsStreamChatBadgeAr badge = _TranslationsStreamChatBadgeAr._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatAr implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorAr implements TranslationsZapErrorEn { class _TranslationsZapErrorAr extends TranslationsZapErrorEn {
_TranslationsZapErrorAr._(this._root); _TranslationsZapErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorAr implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditAr implements TranslationsProfileEditEn { class _TranslationsProfileEditAr extends TranslationsProfileEditEn {
_TranslationsProfileEditAr._(this._root); _TranslationsProfileEditAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditAr implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorAr implements TranslationsLoginErrorEn { class _TranslationsLoginErrorAr extends TranslationsLoginErrorEn {
_TranslationsLoginErrorAr._(this._root); _TranslationsLoginErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorAr implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteAr implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteAr extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteAr._(this._root); _TranslationsStreamChatWriteAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteAr implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeAr implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeAr extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeAr._(this._root); _TranslationsStreamChatBadgeAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeAr implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidAr implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidAr extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidAr._(this._root); _TranslationsStreamChatRaidAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
// Translations // 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorAr implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorAr extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorAr._(this._root); _TranslationsProfileEditErrorAr._(TranslationsAr root) : this._root = root, super.internal(root);
final TranslationsAr _root; // ignore: unused_field final TranslationsAr _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsAr {
case 'stream.status.live': return 'بث مباشر'; case 'stream.status.live': return 'بث مباشر';
case 'stream.status.ended': return 'انتهى'; case 'stream.status.ended': return 'انتهى';
case 'stream.status.planned': return 'مخطط'; case 'stream.status.planned': return 'مخطط';
case 'stream.started': return ({ required Object timestamp}) => 'بدأ ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'بدأ ${timestamp}';
case 'stream.chat.disabled': return 'تم تعطيل الدردشة'; case 'stream.chat.disabled': return 'تم تعطيل الدردشة';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'تنتهي المهلة: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'تنتهي المهلة: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' انتهى الوقت '), const TextSpan(text: ' انتهى الوقت '),
user, user,
const TextSpan(text: ' لـ '), const TextSpan(text: ' لـ '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'انتهى البث'; 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, user,
const TextSpan(text: ' انطلق '), const TextSpan(text: ' انطلق '),
amount, amount,
const TextSpan(text: ' ساتس'), const TextSpan(text: ' ساتس'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'اكتب رسالة'; case 'stream.chat.write.label': return 'اكتب رسالة';
case 'stream.chat.write.no_signer': return 'لا يمكن كتابة الرسائل باستخدام تسجيل الدخول إلى npub'; case 'stream.chat.write.no_signer': return 'لا يمكن كتابة الرسائل باستخدام تسجيل الدخول إلى npub';
case 'stream.chat.write.login': return 'الرجاء تسجيل الدخول لإرسال الرسائل'; case 'stream.chat.write.login': return 'الرجاء تسجيل الدخول لإرسال الرسائل';
case 'stream.chat.badge.awarded_to': return 'مُنحت الجائزة لـ'; case 'stream.chat.badge.awarded_to': return 'مُنحت الجائزة لـ';
case 'stream.chat.raid.to': return ({ required Object name}) => 'التصفح ${name}'; 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.from': return ({required Object name}) => 'RAID من ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'الإغارة في ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'الإغارة في ${time}';
case 'goal.title': return ({ required Object amount}) => 'الهدف: ${amount}'; case 'goal.title': return ({required Object amount}) => 'الهدف: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'المتبقي: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'المتبقي: ${amount}';
case 'goal.complete': return 'مكتمل'; case 'goal.complete': return 'مكتمل';
case 'button.login': return 'تسجيل الدخول'; case 'button.login': return 'تسجيل الدخول';
case 'button.logout': return 'تسجيل الخروج'; case 'button.logout': return 'تسجيل الخروج';
@ -380,18 +381,18 @@ extension on TranslationsAr {
case 'button.unmute': return 'رفع الكتم'; case 'button.unmute': return 'رفع الكتم';
case 'button.share': return 'مشاركة'; case 'button.share': return 'مشاركة';
case 'button.save': return 'حفظ'; case 'button.save': return 'حفظ';
case 'embed.article_by': return ({ required Object name}) => 'مقال بقلم ${name}'; case 'embed.article_by': return ({required Object name}) => 'مقال بقلم ${name}';
case 'embed.note_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 'embed.live_stream_by': return ({required Object name}) => 'بث مباشر من ${name}';
case 'stream_list.following': return 'المتابَعون'; case 'stream_list.following': return 'المتابَعون';
case 'stream_list.live': return 'بث مباشر'; case 'stream_list.live': return 'بث مباشر';
case 'stream_list.planned': return 'مخطط'; case 'stream_list.planned': return 'مخطط';
case 'stream_list.ended': 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.custom_amount': return 'المبلغ المخصص';
case 'zap.confirm': return 'تأكيد'; case 'zap.confirm': return 'تأكيد';
case 'zap.comment': 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_zap': return 'زاب';
case 'zap.button_open_wallet': return 'فتح في المحفظة'; case 'zap.button_open_wallet': return 'فتح في المحفظة';
case 'zap.copy': return 'نسخ إلى الحافظة'; case 'zap.copy': return 'نسخ إلى الحافظة';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsCa implements Translations { class TranslationsCa extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsCa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsCa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsCa implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsCa implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 TranslationsCa _root = this; // ignore: unused_field late final TranslationsCa _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsCa implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamCa implements TranslationsStreamEn { class _TranslationsStreamCa extends TranslationsStreamEn {
_TranslationsStreamCa._(this._root); _TranslationsStreamCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusCa status = _TranslationsStreamStatusCa._(_root); @override late final _TranslationsStreamStatusCa status = _TranslationsStreamStatusCa._(_root);
@override String started({ required Object timestamp}) => 'Started ${timestamp}'; @override String started({required Object timestamp}) => 'Started ${timestamp}';
@override late final _TranslationsStreamChatCa chat = _TranslationsStreamChatCa._(_root); @override late final _TranslationsStreamChatCa chat = _TranslationsStreamChatCa._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalCa implements TranslationsGoalEn { class _TranslationsGoalCa extends TranslationsGoalEn {
_TranslationsGoalCa._(this._root); _TranslationsGoalCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Goal: ${amount}'; @override String title({required Object amount}) => 'Goal: ${amount}';
@override String remaining({ required Object amount}) => 'Remaining: ${amount}'; @override String remaining({required Object amount}) => 'Remaining: ${amount}';
@override String get complete => 'COMPLETE'; @override String get complete => 'COMPLETE';
} }
// Path: button // Path: button
class _TranslationsButtonCa implements TranslationsButtonEn { class _TranslationsButtonCa extends TranslationsButtonEn {
_TranslationsButtonCa._(this._root); _TranslationsButtonCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonCa implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedCa implements TranslationsEmbedEn { class _TranslationsEmbedCa extends TranslationsEmbedEn {
_TranslationsEmbedCa._(this._root); _TranslationsEmbedCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Article by ${name}'; @override String article_by({required Object name}) => 'Article by ${name}';
@override String note_by({ required Object name}) => 'Note by ${name}'; @override String note_by({required Object name}) => 'Note by ${name}';
@override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; @override String live_stream_by({required Object name}) => 'Live stream by ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListCa implements TranslationsStreamListEn { class _TranslationsStreamListCa extends TranslationsStreamListEn {
_TranslationsStreamListCa._(this._root); _TranslationsStreamListCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListCa implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapCa implements TranslationsZapEn { class _TranslationsZapCa extends TranslationsZapEn {
_TranslationsZapCa._(this._root); _TranslationsZapCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object name}) => 'Zap ${name}'; @override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Custom Amount'; @override String get custom_amount => 'Custom Amount';
@override String get confirm => 'Confirm'; @override String get confirm => 'Confirm';
@override String get comment => 'Comment'; @override String get comment => '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_zap => 'Zap';
@override String get button_open_wallet => 'Open in Wallet'; @override String get button_open_wallet => 'Open in Wallet';
@override String get copy => 'Copied to clipboard'; @override String get copy => 'Copied to clipboard';
@ -163,8 +164,8 @@ class _TranslationsZapCa implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileCa implements TranslationsProfileEn { class _TranslationsProfileCa extends TranslationsProfileEn {
_TranslationsProfileCa._(this._root); _TranslationsProfileCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileCa implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginCa implements TranslationsLoginEn { class _TranslationsLoginCa extends TranslationsLoginEn {
_TranslationsLoginCa._(this._root); _TranslationsLoginCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginCa implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusCa implements TranslationsStreamStatusEn { class _TranslationsStreamStatusCa extends TranslationsStreamStatusEn {
_TranslationsStreamStatusCa._(this._root); _TranslationsStreamStatusCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusCa implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatCa implements TranslationsStreamChatEn { class _TranslationsStreamChatCa extends TranslationsStreamChatEn {
_TranslationsStreamChatCa._(this._root); _TranslationsStreamChatCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DISABLED'; @override String get disabled => 'CHAT DISABLED';
@override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; @override String disabled_timeout({required Object time}) => 'Timeout expires: ${time}';
/// Chat message showing timeout events /// Chat message showing timeout events
@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, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream ended footer at bottom of chat /// Stream ended footer at bottom of chat
@override String get ended => 'STREAM ENDED'; @override String get ended => 'STREAM ENDED';
/// Chat message showing stream zaps /// Chat message showing 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteCa write = _TranslationsStreamChatWriteCa._(_root); @override late final _TranslationsStreamChatWriteCa write = _TranslationsStreamChatWriteCa._(_root);
@override late final _TranslationsStreamChatBadgeCa badge = _TranslationsStreamChatBadgeCa._(_root); @override late final _TranslationsStreamChatBadgeCa badge = _TranslationsStreamChatBadgeCa._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatCa implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorCa implements TranslationsZapErrorEn { class _TranslationsZapErrorCa extends TranslationsZapErrorEn {
_TranslationsZapErrorCa._(this._root); _TranslationsZapErrorCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorCa implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditCa implements TranslationsProfileEditEn { class _TranslationsProfileEditCa extends TranslationsProfileEditEn {
_TranslationsProfileEditCa._(this._root); _TranslationsProfileEditCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditCa implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorCa implements TranslationsLoginErrorEn { class _TranslationsLoginErrorCa extends TranslationsLoginErrorEn {
_TranslationsLoginErrorCa._(this._root); _TranslationsLoginErrorCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorCa implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteCa implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteCa extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteCa._(this._root); _TranslationsStreamChatWriteCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteCa implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeCa implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeCa extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeCa._(this._root); _TranslationsStreamChatBadgeCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeCa implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidCa implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidCa extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidCa._(this._root); _TranslationsStreamChatRaidCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
// Translations // Translations
/// Chat raid message to another stream /// Chat raid message to another stream
@override String to({ required Object name}) => 'RAIDING ${name}'; @override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid message from another stream /// Chat raid message from another stream
@override String from({ required Object name}) => 'RAID FROM ${name}'; @override String from({required Object name}) => 'RAID FROM ${name}';
/// Countdown timer for auto-raiding /// Countdown timer for auto-raiding
@override String countdown({ required Object time}) => 'Raiding in ${time}'; @override String countdown({required Object time}) => 'Raiding in ${time}';
} }
// Path: profile.edit.error // Path: profile.edit.error
class _TranslationsProfileEditErrorCa implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorCa extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorCa._(this._root); _TranslationsProfileEditErrorCa._(TranslationsCa root) : this._root = root, super.internal(root);
final TranslationsCa _root; // ignore: unused_field final TranslationsCa _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsCa {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'PLANNED'; case 'stream.status.planned': return 'PLANNED';
case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Started ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABLED'; case 'stream.chat.disabled': return 'CHAT DISABLED';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout expires: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ENDED'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Write message'; 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.no_signer': return 'Can\'t write messages with npub login';
case 'stream.chat.write.login': return 'Please login to send messages'; case 'stream.chat.write.login': return 'Please login to send messages';
case 'stream.chat.badge.awarded_to': return 'Awarded to:'; case 'stream.chat.badge.awarded_to': return 'Awarded to:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Goal: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Remaining: ${amount}';
case 'goal.complete': return 'COMPLETE'; case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Login'; case 'button.login': return 'Login';
case 'button.logout': return 'Logout'; case 'button.logout': return 'Logout';
@ -380,18 +381,18 @@ extension on TranslationsCa {
case 'button.unmute': return 'Unmute'; case 'button.unmute': return 'Unmute';
case 'button.share': return 'Share'; case 'button.share': return 'Share';
case 'button.save': return 'Save'; case 'button.save': return 'Save';
case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; case 'embed.article_by': return ({required Object name}) => 'Article by ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note 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 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return 'Following'; case 'stream_list.following': return 'Following';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planned'; case 'stream_list.planned': return 'Planned';
case 'stream_list.ended': return 'Ended'; 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.custom_amount': return 'Custom Amount';
case 'zap.confirm': return 'Confirm'; case 'zap.confirm': return 'Confirm';
case 'zap.comment': return 'Comment'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Open in Wallet'; case 'zap.button_open_wallet': return 'Open in Wallet';
case 'zap.copy': return 'Copied to clipboard'; case 'zap.copy': return 'Copied to clipboard';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsCs implements Translations { class TranslationsCs extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsCs({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsCs({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsCs implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsCs implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsCs _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsCs implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamCs implements TranslationsStreamEn { class _TranslationsStreamCs extends TranslationsStreamEn {
_TranslationsStreamCs._(this._root); _TranslationsStreamCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusCs status = _TranslationsStreamStatusCs._(_root); @override late final _TranslationsStreamStatusCs status = _TranslationsStreamStatusCs._(_root);
@override String started({ required Object timestamp}) => 'Založeno ${timestamp}'; @override String started({required Object timestamp}) => 'Založeno ${timestamp}';
@override late final _TranslationsStreamChatCs chat = _TranslationsStreamChatCs._(_root); @override late final _TranslationsStreamChatCs chat = _TranslationsStreamChatCs._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalCs implements TranslationsGoalEn { class _TranslationsGoalCs extends TranslationsGoalEn {
_TranslationsGoalCs._(this._root); _TranslationsGoalCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Cíl: ${amount}'; @override String title({required Object amount}) => 'Cíl: ${amount}';
@override String remaining({ required Object amount}) => 'Zbývá: ${amount}'; @override String remaining({required Object amount}) => 'Zbývá: ${amount}';
@override String get complete => 'KOMPLETNÍ'; @override String get complete => 'KOMPLETNÍ';
} }
// Path: button // Path: button
class _TranslationsButtonCs implements TranslationsButtonEn { class _TranslationsButtonCs extends TranslationsButtonEn {
_TranslationsButtonCs._(this._root); _TranslationsButtonCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonCs implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedCs implements TranslationsEmbedEn { class _TranslationsEmbedCs extends TranslationsEmbedEn {
_TranslationsEmbedCs._(this._root); _TranslationsEmbedCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Článek na ${name}'; @override String article_by({required Object name}) => 'Článek na ${name}';
@override String note_by({ required Object name}) => 'Poznámka ${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 live_stream_by({required Object name}) => 'Přímý přenos na adrese ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListCs implements TranslationsStreamListEn { class _TranslationsStreamListCs extends TranslationsStreamListEn {
_TranslationsStreamListCs._(this._root); _TranslationsStreamListCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListCs implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapCs implements TranslationsZapEn { class _TranslationsZapCs extends TranslationsZapEn {
_TranslationsZapCs._(this._root); _TranslationsZapCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Vlastní částka';
@override String get confirm => 'Potvrďte'; @override String get confirm => 'Potvrďte';
@override String get comment => 'Komentář:'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Otevřít v peněžence'; @override String get button_open_wallet => 'Otevřít v peněžence';
@override String get copy => 'Zkopírováno do schránky'; @override String get copy => 'Zkopírováno do schránky';
@ -163,8 +164,8 @@ class _TranslationsZapCs implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileCs implements TranslationsProfileEn { class _TranslationsProfileCs extends TranslationsProfileEn {
_TranslationsProfileCs._(this._root); _TranslationsProfileCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileCs implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginCs implements TranslationsLoginEn { class _TranslationsLoginCs extends TranslationsLoginEn {
_TranslationsLoginCs._(this._root); _TranslationsLoginCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginCs implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusCs implements TranslationsStreamStatusEn { class _TranslationsStreamStatusCs extends TranslationsStreamStatusEn {
_TranslationsStreamStatusCs._(this._root); _TranslationsStreamStatusCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusCs implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatCs implements TranslationsStreamChatEn { class _TranslationsStreamChatCs extends TranslationsStreamChatEn {
_TranslationsStreamChatCs._(this._root); _TranslationsStreamChatCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT ZRUŠEN'; @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 /// 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, mod,
const TextSpan(text: ' vypršel čas '), const TextSpan(text: ' vypršel čas '),
user, user,
const TextSpan(text: ' pro '), const TextSpan(text: ' pro '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Zápatí v dolní části chatu ukončilo stream /// Zápatí v dolní části chatu ukončilo stream
@override String get ended => 'STREAM UKONČEN'; @override String get ended => 'STREAM UKONČEN';
/// Zpráva chatu zobrazující proud zaps /// 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, user,
const TextSpan(text: ' Zapped '), const TextSpan(text: ' Zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteCs write = _TranslationsStreamChatWriteCs._(_root); @override late final _TranslationsStreamChatWriteCs write = _TranslationsStreamChatWriteCs._(_root);
@override late final _TranslationsStreamChatBadgeCs badge = _TranslationsStreamChatBadgeCs._(_root); @override late final _TranslationsStreamChatBadgeCs badge = _TranslationsStreamChatBadgeCs._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatCs implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorCs implements TranslationsZapErrorEn { class _TranslationsZapErrorCs extends TranslationsZapErrorEn {
_TranslationsZapErrorCs._(this._root); _TranslationsZapErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorCs implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditCs implements TranslationsProfileEditEn { class _TranslationsProfileEditCs extends TranslationsProfileEditEn {
_TranslationsProfileEditCs._(this._root); _TranslationsProfileEditCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditCs implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorCs implements TranslationsLoginErrorEn { class _TranslationsLoginErrorCs extends TranslationsLoginErrorEn {
_TranslationsLoginErrorCs._(this._root); _TranslationsLoginErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorCs implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteCs implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteCs extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteCs._(this._root); _TranslationsStreamChatWriteCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteCs implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeCs implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeCs extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeCs._(this._root); _TranslationsStreamChatBadgeCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeCs implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidCs implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidCs extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidCs._(this._root); _TranslationsStreamChatRaidCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
// Translations // Translations
/// Zpráva o nájezdu chatu do jiného proudu /// 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 /// 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 /// Č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 // Path: profile.edit.error
class _TranslationsProfileEditErrorCs implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorCs extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorCs._(this._root); _TranslationsProfileEditErrorCs._(TranslationsCs root) : this._root = root, super.internal(root);
final TranslationsCs _root; // ignore: unused_field final TranslationsCs _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsCs {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'KONEC'; case 'stream.status.ended': return 'KONEC';
case 'stream.status.planned': return 'PLÁNOVANÉ'; case 'stream.status.planned': return 'PLÁNOVANÉ';
case 'stream.started': return ({ required Object timestamp}) => 'Založeno ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Založeno ${timestamp}';
case 'stream.chat.disabled': return 'CHAT ZRUŠEN'; case 'stream.chat.disabled': return 'CHAT ZRUŠEN';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Časový limit vyprší: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Časový limit vyprší: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' vypršel čas '), const TextSpan(text: ' vypršel čas '),
user, user,
const TextSpan(text: ' pro '), const TextSpan(text: ' pro '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM UKONČEN'; 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, user,
const TextSpan(text: ' Zapped '), const TextSpan(text: ' Zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Napište zprávu'; 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.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.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.badge.awarded_to': return 'Uděleno:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID Z ${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 'stream.chat.raid.countdown': return ({required Object time}) => 'Nájezdy na ${time}';
case 'goal.title': return ({ required Object amount}) => 'Cíl: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Cíl: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Zbývá: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Zbývá: ${amount}';
case 'goal.complete': return 'KOMPLETNÍ'; case 'goal.complete': return 'KOMPLETNÍ';
case 'button.login': return 'Přihlášení'; case 'button.login': return 'Přihlášení';
case 'button.logout': return 'Odhlášení'; case 'button.logout': return 'Odhlášení';
@ -380,18 +381,18 @@ extension on TranslationsCs {
case 'button.unmute': return 'Zrušit ztlumení'; case 'button.unmute': return 'Zrušit ztlumení';
case 'button.share': return 'Sdílet'; case 'button.share': return 'Sdílet';
case 'button.save': return 'Uložit'; case 'button.save': return 'Uložit';
case 'embed.article_by': return ({ required Object name}) => 'Článek na ${name}'; 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.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 'embed.live_stream_by': return ({required Object name}) => 'Přímý přenos na adrese ${name}';
case 'stream_list.following': return 'Po'; case 'stream_list.following': return 'Po';
case 'stream_list.live': return 'Živě'; case 'stream_list.live': return 'Živě';
case 'stream_list.planned': return 'Plánované'; case 'stream_list.planned': return 'Plánované';
case 'stream_list.ended': return 'Ukončeno'; 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.custom_amount': return 'Vlastní částka';
case 'zap.confirm': return 'Potvrďte'; case 'zap.confirm': return 'Potvrďte';
case 'zap.comment': return 'Komentář:'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Otevřít v peněžence'; case 'zap.button_open_wallet': return 'Otevřít v peněžence';
case 'zap.copy': return 'Zkopírováno do schránky'; case 'zap.copy': return 'Zkopírováno do schránky';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsDa implements Translations { class TranslationsDa extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsDa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsDa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsDa implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsDa implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsDa _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsDa implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamDa implements TranslationsStreamEn { class _TranslationsStreamDa extends TranslationsStreamEn {
_TranslationsStreamDa._(this._root); _TranslationsStreamDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusDa status = _TranslationsStreamStatusDa._(_root); @override late final _TranslationsStreamStatusDa status = _TranslationsStreamStatusDa._(_root);
@override String started({ required Object timestamp}) => 'Startet ${timestamp}'; @override String started({required Object timestamp}) => 'Startet ${timestamp}';
@override late final _TranslationsStreamChatDa chat = _TranslationsStreamChatDa._(_root); @override late final _TranslationsStreamChatDa chat = _TranslationsStreamChatDa._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalDa implements TranslationsGoalEn { class _TranslationsGoalDa extends TranslationsGoalEn {
_TranslationsGoalDa._(this._root); _TranslationsGoalDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Mål: ${amount}'; @override String title({required Object amount}) => 'Mål: ${amount}';
@override String remaining({ required Object amount}) => 'Resterende: ${amount}'; @override String remaining({required Object amount}) => 'Resterende: ${amount}';
@override String get complete => 'KOMPLET'; @override String get complete => 'KOMPLET';
} }
// Path: button // Path: button
class _TranslationsButtonDa implements TranslationsButtonEn { class _TranslationsButtonDa extends TranslationsButtonEn {
_TranslationsButtonDa._(this._root); _TranslationsButtonDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonDa implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedDa implements TranslationsEmbedEn { class _TranslationsEmbedDa extends TranslationsEmbedEn {
_TranslationsEmbedDa._(this._root); _TranslationsEmbedDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Artikel af ${name}'; @override String article_by({required Object name}) => 'Artikel af ${name}';
@override String note_by({ required Object name}) => 'Note fra ${name}'; @override String note_by({required Object name}) => 'Note fra ${name}';
@override String live_stream_by({ required Object name}) => 'Livestream på ${name}'; @override String live_stream_by({required Object name}) => 'Livestream på ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListDa implements TranslationsStreamListEn { class _TranslationsStreamListDa extends TranslationsStreamListEn {
_TranslationsStreamListDa._(this._root); _TranslationsStreamListDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListDa implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapDa implements TranslationsZapEn { class _TranslationsZapDa extends TranslationsZapEn {
_TranslationsZapDa._(this._root); _TranslationsZapDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Brugerdefineret beløb';
@override String get confirm => 'Bekræft'; @override String get confirm => 'Bekræft';
@override String get comment => 'Kommentar'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Åbn i tegnebogen'; @override String get button_open_wallet => 'Åbn i tegnebogen';
@override String get copy => 'Kopieret til udklipsholder'; @override String get copy => 'Kopieret til udklipsholder';
@ -163,8 +164,8 @@ class _TranslationsZapDa implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileDa implements TranslationsProfileEn { class _TranslationsProfileDa extends TranslationsProfileEn {
_TranslationsProfileDa._(this._root); _TranslationsProfileDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileDa implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginDa implements TranslationsLoginEn { class _TranslationsLoginDa extends TranslationsLoginEn {
_TranslationsLoginDa._(this._root); _TranslationsLoginDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginDa implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusDa implements TranslationsStreamStatusEn { class _TranslationsStreamStatusDa extends TranslationsStreamStatusEn {
_TranslationsStreamStatusDa._(this._root); _TranslationsStreamStatusDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusDa implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatDa implements TranslationsStreamChatEn { class _TranslationsStreamChatDa extends TranslationsStreamChatEn {
_TranslationsStreamChatDa._(this._root); _TranslationsStreamChatDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DEAKTIVERET'; @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 /// 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, mod,
const TextSpan(text: ' udløbet '), const TextSpan(text: ' udløbet '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream afsluttede footer i bunden af chatten /// Stream afsluttede footer i bunden af chatten
@override String get ended => 'STREAM AFSLUTTET'; @override String get ended => 'STREAM AFSLUTTET';
/// Chatbesked, der viser stream-zaps /// 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, user,
const TextSpan(text: ' zappet '), const TextSpan(text: ' zappet '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteDa write = _TranslationsStreamChatWriteDa._(_root); @override late final _TranslationsStreamChatWriteDa write = _TranslationsStreamChatWriteDa._(_root);
@override late final _TranslationsStreamChatBadgeDa badge = _TranslationsStreamChatBadgeDa._(_root); @override late final _TranslationsStreamChatBadgeDa badge = _TranslationsStreamChatBadgeDa._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatDa implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorDa implements TranslationsZapErrorEn { class _TranslationsZapErrorDa extends TranslationsZapErrorEn {
_TranslationsZapErrorDa._(this._root); _TranslationsZapErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorDa implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditDa implements TranslationsProfileEditEn { class _TranslationsProfileEditDa extends TranslationsProfileEditEn {
_TranslationsProfileEditDa._(this._root); _TranslationsProfileEditDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditDa implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorDa implements TranslationsLoginErrorEn { class _TranslationsLoginErrorDa extends TranslationsLoginErrorEn {
_TranslationsLoginErrorDa._(this._root); _TranslationsLoginErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorDa implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteDa implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteDa extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteDa._(this._root); _TranslationsStreamChatWriteDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteDa implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeDa implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeDa extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeDa._(this._root); _TranslationsStreamChatBadgeDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeDa implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidDa implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidDa extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidDa._(this._root); _TranslationsStreamChatRaidDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
// Translations // Translations
/// Chat raid-besked til en anden stream /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorDa implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorDa extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorDa._(this._root); _TranslationsProfileEditErrorDa._(TranslationsDa root) : this._root = root, super.internal(root);
final TranslationsDa _root; // ignore: unused_field final TranslationsDa _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsDa {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'AFSLUTTET'; case 'stream.status.ended': return 'AFSLUTTET';
case 'stream.status.planned': return 'PLANLAGT'; case 'stream.status.planned': return 'PLANLAGT';
case 'stream.started': return ({ required Object timestamp}) => 'Startet ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Startet ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DEAKTIVERET'; case 'stream.chat.disabled': return 'CHAT DEAKTIVERET';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout udløber: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout udløber: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' udløbet '), const TextSpan(text: ' udløbet '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM AFSLUTTET'; 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, user,
const TextSpan(text: ' zappet '), const TextSpan(text: ' zappet '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Skriv en besked'; 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.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.write.login': return 'Log ind for at sende beskeder';
case 'stream.chat.badge.awarded_to': return 'Tildelt til:'; case 'stream.chat.badge.awarded_to': return 'Tildelt til:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FRA ${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 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding i ${time}';
case 'goal.title': return ({ required Object amount}) => 'Mål: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Mål: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Resterende: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Resterende: ${amount}';
case 'goal.complete': return 'KOMPLET'; case 'goal.complete': return 'KOMPLET';
case 'button.login': return 'Login'; case 'button.login': return 'Login';
case 'button.logout': return 'Log ud'; case 'button.logout': return 'Log ud';
@ -380,18 +381,18 @@ extension on TranslationsDa {
case 'button.unmute': return 'Slå lyden fra'; case 'button.unmute': return 'Slå lyden fra';
case 'button.share': return 'Del'; case 'button.share': return 'Del';
case 'button.save': return 'Gemme'; case 'button.save': return 'Gemme';
case 'embed.article_by': return ({ required Object name}) => 'Artikel af ${name}'; case 'embed.article_by': return ({required Object name}) => 'Artikel af ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note fra ${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 'embed.live_stream_by': return ({required Object name}) => 'Livestream på ${name}';
case 'stream_list.following': return 'Efterfølgende'; case 'stream_list.following': return 'Efterfølgende';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planlagt'; case 'stream_list.planned': return 'Planlagt';
case 'stream_list.ended': return 'Afsluttet'; 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.custom_amount': return 'Brugerdefineret beløb';
case 'zap.confirm': return 'Bekræft'; case 'zap.confirm': return 'Bekræft';
case 'zap.comment': return 'Kommentar'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Åbn i tegnebogen'; case 'zap.button_open_wallet': return 'Åbn i tegnebogen';
case 'zap.copy': return 'Kopieret til udklipsholder'; case 'zap.copy': return 'Kopieret til udklipsholder';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsDe implements Translations { class TranslationsDe extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsDe({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsDe({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsDe implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsDe implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsDe _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsDe implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamDe implements TranslationsStreamEn { class _TranslationsStreamDe extends TranslationsStreamEn {
_TranslationsStreamDe._(this._root); _TranslationsStreamDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusDe status = _TranslationsStreamStatusDe._(_root); @override late final _TranslationsStreamStatusDe status = _TranslationsStreamStatusDe._(_root);
@override String started({ required Object timestamp}) => 'Gestartet ${timestamp}'; @override String started({required Object timestamp}) => 'Gestartet ${timestamp}';
@override late final _TranslationsStreamChatDe chat = _TranslationsStreamChatDe._(_root); @override late final _TranslationsStreamChatDe chat = _TranslationsStreamChatDe._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalDe implements TranslationsGoalEn { class _TranslationsGoalDe extends TranslationsGoalEn {
_TranslationsGoalDe._(this._root); _TranslationsGoalDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Ziel: ${amount}'; @override String title({required Object amount}) => 'Ziel: ${amount}';
@override String remaining({ required Object amount}) => 'Verbleibend: ${amount}'; @override String remaining({required Object amount}) => 'Verbleibend: ${amount}';
@override String get complete => 'COMPLETE'; @override String get complete => 'COMPLETE';
} }
// Path: button // Path: button
class _TranslationsButtonDe implements TranslationsButtonEn { class _TranslationsButtonDe extends TranslationsButtonEn {
_TranslationsButtonDe._(this._root); _TranslationsButtonDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonDe implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedDe implements TranslationsEmbedEn { class _TranslationsEmbedDe extends TranslationsEmbedEn {
_TranslationsEmbedDe._(this._root); _TranslationsEmbedDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Artikel von ${name}'; @override String article_by({required Object name}) => 'Artikel von ${name}';
@override String note_by({ required Object name}) => 'Note 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 live_stream_by({required Object name}) => 'Live-Stream von ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListDe implements TranslationsStreamListEn { class _TranslationsStreamListDe extends TranslationsStreamListEn {
_TranslationsStreamListDe._(this._root); _TranslationsStreamListDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListDe implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapDe implements TranslationsZapEn { class _TranslationsZapDe extends TranslationsZapEn {
_TranslationsZapDe._(this._root); _TranslationsZapDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Benutzerdefinierter Betrag';
@override String get confirm => 'Bestätigen'; @override String get confirm => 'Bestätigen';
@override String get comment => 'Kommentar'; @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_zap => 'Zap';
@override String get button_open_wallet => 'In Brieftasche öffnen'; @override String get button_open_wallet => 'In Brieftasche öffnen';
@override String get copy => 'In die Zwischenablage kopiert'; @override String get copy => 'In die Zwischenablage kopiert';
@ -163,8 +164,8 @@ class _TranslationsZapDe implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileDe implements TranslationsProfileEn { class _TranslationsProfileDe extends TranslationsProfileEn {
_TranslationsProfileDe._(this._root); _TranslationsProfileDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileDe implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginDe implements TranslationsLoginEn { class _TranslationsLoginDe extends TranslationsLoginEn {
_TranslationsLoginDe._(this._root); _TranslationsLoginDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginDe implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusDe implements TranslationsStreamStatusEn { class _TranslationsStreamStatusDe extends TranslationsStreamStatusEn {
_TranslationsStreamStatusDe._(this._root); _TranslationsStreamStatusDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusDe implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatDe implements TranslationsStreamChatEn { class _TranslationsStreamChatDe extends TranslationsStreamChatEn {
_TranslationsStreamChatDe._(this._root); _TranslationsStreamChatDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DEAKTIVIERT'; @override String get disabled => 'CHAT DEAKTIVIERT';
@override String disabled_timeout({ required Object time}) => 'Die Zeitüberschreitung läuft ab: ${time}'; @override String disabled_timeout({required Object time}) => 'Die Zeitüberschreitung läuft ab: ${time}';
/// Chat-Nachricht mit Zeitüberschreitungsereignissen /// Chat-Nachricht mit Zeitüberschreitungsereignissen
@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, mod,
const TextSpan(text: ' Zeitüberschreitung '), const TextSpan(text: ' Zeitüberschreitung '),
user, user,
const TextSpan(text: ' für '), const TextSpan(text: ' für '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream beendet Fußzeile am Ende des Chats /// Stream beendet Fußzeile am Ende des Chats
@override String get ended => 'STREAM BEENDET'; @override String get ended => 'STREAM BEENDET';
/// Chatnachricht mit Stream Zaps /// Chatnachricht mit 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, user,
const TextSpan(text: ' hat '), const TextSpan(text: ' hat '),
amount, amount,
const TextSpan(text: ' sats gezappt'), const TextSpan(text: ' sats gezappt'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteDe write = _TranslationsStreamChatWriteDe._(_root); @override late final _TranslationsStreamChatWriteDe write = _TranslationsStreamChatWriteDe._(_root);
@override late final _TranslationsStreamChatBadgeDe badge = _TranslationsStreamChatBadgeDe._(_root); @override late final _TranslationsStreamChatBadgeDe badge = _TranslationsStreamChatBadgeDe._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatDe implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorDe implements TranslationsZapErrorEn { class _TranslationsZapErrorDe extends TranslationsZapErrorEn {
_TranslationsZapErrorDe._(this._root); _TranslationsZapErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorDe implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditDe implements TranslationsProfileEditEn { class _TranslationsProfileEditDe extends TranslationsProfileEditEn {
_TranslationsProfileEditDe._(this._root); _TranslationsProfileEditDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditDe implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorDe implements TranslationsLoginErrorEn { class _TranslationsLoginErrorDe extends TranslationsLoginErrorEn {
_TranslationsLoginErrorDe._(this._root); _TranslationsLoginErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorDe implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteDe implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteDe extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteDe._(this._root); _TranslationsStreamChatWriteDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteDe implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeDe implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeDe extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeDe._(this._root); _TranslationsStreamChatBadgeDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeDe implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidDe implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidDe extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidDe._(this._root); _TranslationsStreamChatRaidDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
// Translations // Translations
/// Chat-Überfallnachricht an einen anderen Stream /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorDe implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorDe extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorDe._(this._root); _TranslationsProfileEditErrorDe._(TranslationsDe root) : this._root = root, super.internal(root);
final TranslationsDe _root; // ignore: unused_field final TranslationsDe _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsDe {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'GEPLANT'; case 'stream.status.planned': return 'GEPLANT';
case 'stream.started': return ({ required Object timestamp}) => 'Gestartet ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Gestartet ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DEAKTIVIERT'; case 'stream.chat.disabled': return 'CHAT DEAKTIVIERT';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Die Zeitüberschreitung läuft ab: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => '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.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' Zeitüberschreitung '), const TextSpan(text: ' Zeitüberschreitung '),
user, user,
const TextSpan(text: ' für '), const TextSpan(text: ' für '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM BEENDET'; 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, user,
const TextSpan(text: ' hat '), const TextSpan(text: ' hat '),
amount, amount,
const TextSpan(text: ' sats gezappt'), const TextSpan(text: ' sats gezappt'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Nachricht schreiben'; 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.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.write.login': return 'Bitte anmelden, um Nachrichten zu senden';
case 'stream.chat.badge.awarded_to': return 'Verliehen an:'; case 'stream.chat.badge.awarded_to': return 'Verliehen an:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID VON ${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 'stream.chat.raid.countdown': return ({required Object time}) => 'Raubzüge auf ${time}';
case 'goal.title': return ({ required Object amount}) => 'Ziel: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Ziel: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Verbleibend: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Verbleibend: ${amount}';
case 'goal.complete': return 'COMPLETE'; case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Anmelden'; case 'button.login': return 'Anmelden';
case 'button.logout': return 'Abmelden'; case 'button.logout': return 'Abmelden';
@ -380,18 +381,18 @@ extension on TranslationsDe {
case 'button.unmute': return 'Entstummen'; case 'button.unmute': return 'Entstummen';
case 'button.share': return 'Teilen'; case 'button.share': return 'Teilen';
case 'button.save': return 'Speichern'; case 'button.save': return 'Speichern';
case 'embed.article_by': return ({ required Object name}) => 'Artikel von ${name}'; case 'embed.article_by': return ({required Object name}) => 'Artikel von ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note 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 'embed.live_stream_by': return ({required Object name}) => 'Live-Stream von ${name}';
case 'stream_list.following': return 'Folge ich'; case 'stream_list.following': return 'Folge ich';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Geplant'; case 'stream_list.planned': return 'Geplant';
case 'stream_list.ended': return 'Beendet'; 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.custom_amount': return 'Benutzerdefinierter Betrag';
case 'zap.confirm': return 'Bestätigen'; case 'zap.confirm': return 'Bestätigen';
case 'zap.comment': return 'Kommentar'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'In Brieftasche öffnen'; case 'zap.button_open_wallet': return 'In Brieftasche öffnen';
case 'zap.copy': return 'In die Zwischenablage kopiert'; case 'zap.copy': return 'In die Zwischenablage kopiert';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsEl implements Translations { class TranslationsEl extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsEl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsEl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsEl implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsEl implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsEl _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsEl implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamEl implements TranslationsStreamEn { class _TranslationsStreamEl extends TranslationsStreamEn {
_TranslationsStreamEl._(this._root); _TranslationsStreamEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusEl status = _TranslationsStreamStatusEl._(_root); @override late final _TranslationsStreamStatusEl status = _TranslationsStreamStatusEl._(_root);
@override String started({ required Object timestamp}) => 'Ξεκίνησε ${timestamp}'; @override String started({required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
@override late final _TranslationsStreamChatEl chat = _TranslationsStreamChatEl._(_root); @override late final _TranslationsStreamChatEl chat = _TranslationsStreamChatEl._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalEl implements TranslationsGoalEn { class _TranslationsGoalEl extends TranslationsGoalEn {
_TranslationsGoalEl._(this._root); _TranslationsGoalEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Στόχος: ${amount}'; @override String title({required Object amount}) => 'Στόχος: ${amount}';
@override String remaining({ required Object amount}) => 'Υπόλοιπο: ${amount}'; @override String remaining({required Object amount}) => 'Υπόλοιπο: ${amount}';
@override String get complete => 'ΠΛΗΡΗΣ'; @override String get complete => 'ΠΛΗΡΗΣ';
} }
// Path: button // Path: button
class _TranslationsButtonEl implements TranslationsButtonEn { class _TranslationsButtonEl extends TranslationsButtonEn {
_TranslationsButtonEl._(this._root); _TranslationsButtonEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonEl implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedEl implements TranslationsEmbedEn { class _TranslationsEmbedEl extends TranslationsEmbedEn {
_TranslationsEmbedEl._(this._root); _TranslationsEmbedEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Άρθρο από ${name}'; @override String article_by({required Object name}) => 'Άρθρο από ${name}';
@override String note_by({ required Object name}) => 'Σημείωση του ${name}'; @override String note_by({required Object name}) => 'Σημείωση του ${name}';
@override String live_stream_by({ required Object name}) => 'Ζωντανή μετάδοση από το ${name}'; @override String live_stream_by({required Object name}) => 'Ζωντανή μετάδοση από το ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListEl implements TranslationsStreamListEn { class _TranslationsStreamListEl extends TranslationsStreamListEn {
_TranslationsStreamListEl._(this._root); _TranslationsStreamListEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListEl implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapEl implements TranslationsZapEn { class _TranslationsZapEl extends TranslationsZapEn {
_TranslationsZapEl._(this._root); _TranslationsZapEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Προσαρμοσμένο ποσό';
@override String get confirm => 'Επιβεβαίωση'; @override String get confirm => 'Επιβεβαίωση';
@override String get comment => 'Σχόλιο'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Άνοιγμα στο πορτοφόλι'; @override String get button_open_wallet => 'Άνοιγμα στο πορτοφόλι';
@override String get copy => 'Αντιγραφή στο πρόχειρο'; @override String get copy => 'Αντιγραφή στο πρόχειρο';
@ -163,8 +164,8 @@ class _TranslationsZapEl implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileEl implements TranslationsProfileEn { class _TranslationsProfileEl extends TranslationsProfileEn {
_TranslationsProfileEl._(this._root); _TranslationsProfileEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileEl implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginEl implements TranslationsLoginEn { class _TranslationsLoginEl extends TranslationsLoginEn {
_TranslationsLoginEl._(this._root); _TranslationsLoginEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginEl implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusEl implements TranslationsStreamStatusEn { class _TranslationsStreamStatusEl extends TranslationsStreamStatusEn {
_TranslationsStreamStatusEl._(this._root); _TranslationsStreamStatusEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusEl implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatEl implements TranslationsStreamChatEn { class _TranslationsStreamChatEl extends TranslationsStreamChatEn {
_TranslationsStreamChatEl._(this._root); _TranslationsStreamChatEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ'; @override String get disabled => 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ';
@override String disabled_timeout({ required Object time}) => 'Το χρονικό όριο λήγει: ${time}'; @override String disabled_timeout({required Object time}) => 'Το χρονικό όριο λήγει: ${time}';
/// Μήνυμα συνομιλίας που εμφανίζει συμβάντα timeout /// Μήνυμα συνομιλίας που εμφανίζει συμβάντα 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, mod,
const TextSpan(text: ' χρονομετρημένη λήξη '), const TextSpan(text: ' χρονομετρημένη λήξη '),
user, user,
const TextSpan(text: ' για '), const TextSpan(text: ' για '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Η ροή τελείωσε το υποσέλιδο στο κάτω μέρος της συνομιλίας /// Η ροή τελείωσε το υποσέλιδο στο κάτω μέρος της συνομιλίας
@override String get ended => 'STREAM ΤΕΛΕΙΩΣΕ'; @override String get ended => 'STREAM ΤΕΛΕΙΩΣΕ';
/// Μήνυμα συνομιλίας που δείχνει ροή ροής zaps /// Μήνυμα συνομιλίας που δείχνει ροή ροής 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteEl write = _TranslationsStreamChatWriteEl._(_root); @override late final _TranslationsStreamChatWriteEl write = _TranslationsStreamChatWriteEl._(_root);
@override late final _TranslationsStreamChatBadgeEl badge = _TranslationsStreamChatBadgeEl._(_root); @override late final _TranslationsStreamChatBadgeEl badge = _TranslationsStreamChatBadgeEl._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatEl implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorEl implements TranslationsZapErrorEn { class _TranslationsZapErrorEl extends TranslationsZapErrorEn {
_TranslationsZapErrorEl._(this._root); _TranslationsZapErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorEl implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditEl implements TranslationsProfileEditEn { class _TranslationsProfileEditEl extends TranslationsProfileEditEn {
_TranslationsProfileEditEl._(this._root); _TranslationsProfileEditEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditEl implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorEl implements TranslationsLoginErrorEn { class _TranslationsLoginErrorEl extends TranslationsLoginErrorEn {
_TranslationsLoginErrorEl._(this._root); _TranslationsLoginErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorEl implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteEl implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteEl extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteEl._(this._root); _TranslationsStreamChatWriteEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteEl implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeEl implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeEl extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeEl._(this._root); _TranslationsStreamChatBadgeEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeEl implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidEl implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidEl extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidEl._(this._root); _TranslationsStreamChatRaidEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
// Translations // 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorEl implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorEl extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorEl._(this._root); _TranslationsProfileEditErrorEl._(TranslationsEl root) : this._root = root, super.internal(root);
final TranslationsEl _root; // ignore: unused_field final TranslationsEl _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsEl {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'ΣΧΕΔΙΑΣΜΟΣ'; case 'stream.status.planned': return 'ΣΧΕΔΙΑΣΜΟΣ';
case 'stream.started': return ({ required Object timestamp}) => 'Ξεκίνησε ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Ξεκίνησε ${timestamp}';
case 'stream.chat.disabled': return 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ'; case 'stream.chat.disabled': return 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Το χρονικό όριο λήγει: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Το χρονικό όριο λήγει: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' χρονομετρημένη λήξη '), const TextSpan(text: ' χρονομετρημένη λήξη '),
user, user,
const TextSpan(text: ' για '), const TextSpan(text: ' για '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ΤΕΛΕΙΩΣΕ'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Γράψτε μήνυμα'; case 'stream.chat.write.label': return 'Γράψτε μήνυμα';
case 'stream.chat.write.no_signer': return 'Δεν μπορείτε να γράψετε μηνύματα με σύνδεση στο npub'; case 'stream.chat.write.no_signer': return 'Δεν μπορείτε να γράψετε μηνύματα με σύνδεση στο npub';
case 'stream.chat.write.login': return 'Παρακαλώ συνδεθείτε για να στείλετε μηνύματα'; case 'stream.chat.write.login': return 'Παρακαλώ συνδεθείτε για να στείλετε μηνύματα';
case 'stream.chat.badge.awarded_to': return 'Απονέμεται σε:'; case 'stream.chat.badge.awarded_to': return 'Απονέμεται σε:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Επιδρομές στο ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Επιδρομές στο ${time}';
case 'goal.title': return ({ required Object amount}) => 'Στόχος: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Στόχος: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Υπόλοιπο: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Υπόλοιπο: ${amount}';
case 'goal.complete': return 'ΠΛΗΡΗΣ'; case 'goal.complete': return 'ΠΛΗΡΗΣ';
case 'button.login': return 'Σύνδεση'; case 'button.login': return 'Σύνδεση';
case 'button.logout': return 'Αποσύνδεση'; case 'button.logout': return 'Αποσύνδεση';
@ -380,18 +381,18 @@ extension on TranslationsEl {
case 'button.unmute': return 'Αποσυνδέστε τη φωνή σας από το'; case 'button.unmute': return 'Αποσυνδέστε τη φωνή σας από το';
case 'button.share': return 'Μοιραστείτε το'; case 'button.share': return 'Μοιραστείτε το';
case 'button.save': return 'Αποθήκευση'; case 'button.save': return 'Αποθήκευση';
case 'embed.article_by': return ({ required Object name}) => 'Άρθρο από ${name}'; case 'embed.article_by': return ({required Object name}) => 'Άρθρο από ${name}';
case 'embed.note_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 'embed.live_stream_by': return ({required Object name}) => 'Ζωντανή μετάδοση από το ${name}';
case 'stream_list.following': return 'Ακολουθώντας το'; case 'stream_list.following': return 'Ακολουθώντας το';
case 'stream_list.live': return 'Ζωντανό'; case 'stream_list.live': return 'Ζωντανό';
case 'stream_list.planned': return 'Προγραμματισμένο'; case 'stream_list.planned': return 'Προγραμματισμένο';
case 'stream_list.ended': 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.custom_amount': return 'Προσαρμοσμένο ποσό';
case 'zap.confirm': return 'Επιβεβαίωση'; case 'zap.confirm': return 'Επιβεβαίωση';
case 'zap.comment': 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Άνοιγμα στο πορτοφόλι'; case 'zap.button_open_wallet': return 'Άνοιγμα στο πορτοφόλι';
case 'zap.copy': return 'Αντιγραφή στο πρόχειρο'; case 'zap.copy': return 'Αντιγραφή στο πρόχειρο';

View File

@ -58,46 +58,47 @@ class Translations implements BaseTranslations<AppLocale, Translations> {
other: '${n} viewers', other: '${n} viewers',
); );
late final TranslationsStreamEn stream = TranslationsStreamEn._(_root); late final TranslationsStreamEn stream = TranslationsStreamEn.internal(_root);
late final TranslationsGoalEn goal = TranslationsGoalEn._(_root); late final TranslationsGoalEn goal = TranslationsGoalEn.internal(_root);
late final TranslationsButtonEn button = TranslationsButtonEn._(_root); late final TranslationsButtonEn button = TranslationsButtonEn.internal(_root);
late final TranslationsEmbedEn embed = TranslationsEmbedEn._(_root); late final TranslationsEmbedEn embed = TranslationsEmbedEn.internal(_root);
/// Headings on stream lists by stream type live/ended/planned etc. /// 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 TranslationsZapEn zap = TranslationsZapEn.internal(_root);
late final TranslationsProfileEn profile = TranslationsProfileEn._(_root); late final TranslationsProfileEn profile = TranslationsProfileEn.internal(_root);
late final TranslationsLoginEn login = TranslationsLoginEn._(_root); late final TranslationsWalletEn wallet = TranslationsWalletEn.internal(_root);
late final TranslationsLoginEn login = TranslationsLoginEn.internal(_root);
} }
// Path: stream // Path: stream
class TranslationsStreamEn { class TranslationsStreamEn {
TranslationsStreamEn._(this._root); TranslationsStreamEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
// Translations // Translations
late final TranslationsStreamStatusEn status = TranslationsStreamStatusEn._(_root); late final TranslationsStreamStatusEn status = TranslationsStreamStatusEn.internal(_root);
String started({ required Object timestamp}) => 'Started ${timestamp}'; String started({required Object timestamp}) => 'Started ${timestamp}';
late final TranslationsStreamChatEn chat = TranslationsStreamChatEn._(_root); late final TranslationsStreamChatEn chat = TranslationsStreamChatEn.internal(_root);
} }
// Path: goal // Path: goal
class TranslationsGoalEn { class TranslationsGoalEn {
TranslationsGoalEn._(this._root); TranslationsGoalEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
// Translations // Translations
String title({ required Object amount}) => 'Goal: ${amount}'; String title({required Object amount}) => 'Goal: ${amount}';
String remaining({ required Object amount}) => 'Remaining: ${amount}'; String remaining({required Object amount}) => 'Remaining: ${amount}';
String get complete => 'COMPLETE'; String get complete => 'COMPLETE';
} }
// Path: button // Path: button
class TranslationsButtonEn { class TranslationsButtonEn {
TranslationsButtonEn._(this._root); TranslationsButtonEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
@ -119,23 +120,24 @@ class TranslationsButtonEn {
String get unmute => 'Unmute'; String get unmute => 'Unmute';
String get share => 'Share'; String get share => 'Share';
String get save => 'Save'; String get save => 'Save';
String get connect => 'Connect';
} }
// Path: embed // Path: embed
class TranslationsEmbedEn { class TranslationsEmbedEn {
TranslationsEmbedEn._(this._root); TranslationsEmbedEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
// Translations // Translations
String article_by({ required Object name}) => 'Article by ${name}'; String article_by({required Object name}) => 'Article by ${name}';
String note_by({ required Object name}) => 'Note by ${name}'; String note_by({required Object name}) => 'Note by ${name}';
String live_stream_by({ required Object name}) => 'Live stream by ${name}'; String live_stream_by({required Object name}) => 'Live stream by ${name}';
} }
// Path: stream_list // Path: stream_list
class TranslationsStreamListEn { class TranslationsStreamListEn {
TranslationsStreamListEn._(this._root); TranslationsStreamListEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
@ -148,36 +150,48 @@ class TranslationsStreamListEn {
// Path: zap // Path: zap
class TranslationsZapEn { class TranslationsZapEn {
TranslationsZapEn._(this._root); TranslationsZapEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
// Translations // Translations
String title({ required Object name}) => 'Zap ${name}'; String title({required Object name}) => 'Zap ${name}';
String get custom_amount => 'Custom Amount'; String get custom_amount => 'Custom Amount';
String get confirm => 'Confirm'; String get confirm => 'Confirm';
String get comment => 'Comment'; 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_zap => 'Zap';
String get button_open_wallet => 'Open in Wallet'; String get button_open_wallet => 'Open in Wallet';
String get button_connect_wallet => 'Connect Wallet';
String get copy => 'Copied to clipboard'; String get copy => 'Copied to clipboard';
late final TranslationsZapErrorEn error = TranslationsZapErrorEn._(_root); late final TranslationsZapErrorEn error = TranslationsZapErrorEn.internal(_root);
} }
// Path: profile // Path: profile
class TranslationsProfileEn { class TranslationsProfileEn {
TranslationsProfileEn._(this._root); TranslationsProfileEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
// Translations // Translations
String get past_streams => 'Past Streams'; String get past_streams => 'Past Streams';
late final TranslationsProfileEditEn edit = TranslationsProfileEditEn._(_root); late final TranslationsProfileEditEn edit = TranslationsProfileEditEn.internal(_root);
}
// Path: wallet
class TranslationsWalletEn {
TranslationsWalletEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get connect_wallet => 'Connect Wallet (NWC)';
late final TranslationsWalletErrorEn error = TranslationsWalletErrorEn.internal(_root);
} }
// Path: login // Path: login
class TranslationsLoginEn { class TranslationsLoginEn {
TranslationsLoginEn._(this._root); TranslationsLoginEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
@ -186,12 +200,12 @@ class TranslationsLoginEn {
String get amber => 'Login with Amber'; String get amber => 'Login with Amber';
String get key => 'Login with Key'; String get key => 'Login with Key';
String get create => 'Create Account'; String get create => 'Create Account';
late final TranslationsLoginErrorEn error = TranslationsLoginErrorEn._(_root); late final TranslationsLoginErrorEn error = TranslationsLoginErrorEn.internal(_root);
} }
// Path: stream.status // Path: stream.status
class TranslationsStreamStatusEn { class TranslationsStreamStatusEn {
TranslationsStreamStatusEn._(this._root); TranslationsStreamStatusEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
@ -203,42 +217,42 @@ class TranslationsStreamStatusEn {
// Path: stream.chat // Path: stream.chat
class TranslationsStreamChatEn { class TranslationsStreamChatEn {
TranslationsStreamChatEn._(this._root); TranslationsStreamChatEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
// Translations // Translations
String get disabled => 'CHAT DISABLED'; 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 /// 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, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream ended footer at bottom of chat /// Stream ended footer at bottom of chat
String get ended => 'STREAM ENDED'; String get ended => 'STREAM ENDED';
/// Chat message showing stream zaps /// 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
late final TranslationsStreamChatWriteEn write = TranslationsStreamChatWriteEn._(_root); late final TranslationsStreamChatWriteEn write = TranslationsStreamChatWriteEn.internal(_root);
late final TranslationsStreamChatBadgeEn badge = TranslationsStreamChatBadgeEn._(_root); late final TranslationsStreamChatBadgeEn badge = TranslationsStreamChatBadgeEn.internal(_root);
late final TranslationsStreamChatRaidEn raid = TranslationsStreamChatRaidEn._(_root); late final TranslationsStreamChatRaidEn raid = TranslationsStreamChatRaidEn.internal(_root);
} }
// Path: zap.error // Path: zap.error
class TranslationsZapErrorEn { class TranslationsZapErrorEn {
TranslationsZapErrorEn._(this._root); TranslationsZapErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
@ -250,7 +264,7 @@ class TranslationsZapErrorEn {
// Path: profile.edit // Path: profile.edit
class TranslationsProfileEditEn { class TranslationsProfileEditEn {
TranslationsProfileEditEn._(this._root); TranslationsProfileEditEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
@ -259,12 +273,22 @@ class TranslationsProfileEditEn {
String get about => 'About'; String get about => 'About';
String get nip05 => 'Nostr Address'; String get nip05 => 'Nostr Address';
String get lud16 => 'Lightning Address'; String get lud16 => 'Lightning Address';
late final TranslationsProfileEditErrorEn error = TranslationsProfileEditErrorEn._(_root); late final TranslationsProfileEditErrorEn error = TranslationsProfileEditErrorEn.internal(_root);
}
// Path: wallet.error
class TranslationsWalletErrorEn {
TranslationsWalletErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field
// Translations
String get logged_out => 'Cant connect wallet when logged out';
} }
// Path: login.error // Path: login.error
class TranslationsLoginErrorEn { class TranslationsLoginErrorEn {
TranslationsLoginErrorEn._(this._root); TranslationsLoginErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
@ -274,7 +298,7 @@ class TranslationsLoginErrorEn {
// Path: stream.chat.write // Path: stream.chat.write
class TranslationsStreamChatWriteEn { class TranslationsStreamChatWriteEn {
TranslationsStreamChatWriteEn._(this._root); TranslationsStreamChatWriteEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
@ -292,7 +316,7 @@ class TranslationsStreamChatWriteEn {
// Path: stream.chat.badge // Path: stream.chat.badge
class TranslationsStreamChatBadgeEn { class TranslationsStreamChatBadgeEn {
TranslationsStreamChatBadgeEn._(this._root); TranslationsStreamChatBadgeEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
@ -304,25 +328,25 @@ class TranslationsStreamChatBadgeEn {
// Path: stream.chat.raid // Path: stream.chat.raid
class TranslationsStreamChatRaidEn { class TranslationsStreamChatRaidEn {
TranslationsStreamChatRaidEn._(this._root); TranslationsStreamChatRaidEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
// Translations // Translations
/// Chat raid message to another stream /// 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 /// 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 /// 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 // Path: profile.edit.error
class TranslationsProfileEditErrorEn { class TranslationsProfileEditErrorEn {
TranslationsProfileEditErrorEn._(this._root); TranslationsProfileEditErrorEn.internal(this._root);
final Translations _root; // ignore: unused_field final Translations _root; // ignore: unused_field
@ -346,32 +370,32 @@ extension on Translations {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'PLANNED'; case 'stream.status.planned': return 'PLANNED';
case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Started ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABLED'; case 'stream.chat.disabled': return 'CHAT DISABLED';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout expires: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ENDED'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Write message'; 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.no_signer': return 'Can\'t write messages with npub login';
case 'stream.chat.write.login': return 'Please login to send messages'; case 'stream.chat.write.login': return 'Please login to send messages';
case 'stream.chat.badge.awarded_to': return 'Awarded to:'; case 'stream.chat.badge.awarded_to': return 'Awarded to:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Goal: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Remaining: ${amount}';
case 'goal.complete': return 'COMPLETE'; case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Login'; case 'button.login': return 'Login';
case 'button.logout': return 'Logout'; case 'button.logout': return 'Logout';
@ -382,20 +406,22 @@ extension on Translations {
case 'button.unmute': return 'Unmute'; case 'button.unmute': return 'Unmute';
case 'button.share': return 'Share'; case 'button.share': return 'Share';
case 'button.save': return 'Save'; case 'button.save': return 'Save';
case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; case 'button.connect': return 'Connect';
case 'embed.note_by': return ({ required Object name}) => 'Note by ${name}'; case 'embed.article_by': return ({required Object name}) => 'Article by ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream 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.following': return 'Following';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planned'; case 'stream_list.planned': return 'Planned';
case 'stream_list.ended': return 'Ended'; 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.custom_amount': return 'Custom Amount';
case 'zap.confirm': return 'Confirm'; case 'zap.confirm': return 'Confirm';
case 'zap.comment': return 'Comment'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Open in Wallet'; 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.copy': return 'Copied to clipboard';
case 'zap.error.invalid_custom_amount': return 'Invalid custom amount'; case 'zap.error.invalid_custom_amount': return 'Invalid custom amount';
case 'zap.error.no_wallet': return 'No lightning wallet installed'; case 'zap.error.no_wallet': return 'No lightning wallet installed';
@ -406,6 +432,8 @@ extension on Translations {
case 'profile.edit.nip05': return 'Nostr Address'; case 'profile.edit.nip05': return 'Nostr Address';
case 'profile.edit.lud16': return 'Lightning Address'; case 'profile.edit.lud16': return 'Lightning Address';
case 'profile.edit.error.logged_out': return 'Cant edit profile when logged out'; case 'profile.edit.error.logged_out': return 'Cant edit profile when logged out';
case 'wallet.connect_wallet': return 'Connect Wallet (NWC)';
case 'wallet.error.logged_out': return 'Cant connect wallet when logged out';
case 'login.username': return 'Username'; case 'login.username': return 'Username';
case 'login.amber': return 'Login with Amber'; case 'login.amber': return 'Login with Amber';
case 'login.key': return 'Login with Key'; case 'login.key': return 'Login with Key';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsEs implements Translations { class TranslationsEs extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsEs({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsEs({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsEs implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsEs implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsEs _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsEs implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamEs implements TranslationsStreamEn { class _TranslationsStreamEs extends TranslationsStreamEn {
_TranslationsStreamEs._(this._root); _TranslationsStreamEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusEs status = _TranslationsStreamStatusEs._(_root); @override late final _TranslationsStreamStatusEs status = _TranslationsStreamStatusEs._(_root);
@override String started({ required Object timestamp}) => 'Comenzó ${timestamp}'; @override String started({required Object timestamp}) => 'Comenzó ${timestamp}';
@override late final _TranslationsStreamChatEs chat = _TranslationsStreamChatEs._(_root); @override late final _TranslationsStreamChatEs chat = _TranslationsStreamChatEs._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalEs implements TranslationsGoalEn { class _TranslationsGoalEs extends TranslationsGoalEn {
_TranslationsGoalEs._(this._root); _TranslationsGoalEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Objetivo: ${amount}'; @override String title({required Object amount}) => 'Objetivo: ${amount}';
@override String remaining({ required Object amount}) => 'Resto: ${amount}'; @override String remaining({required Object amount}) => 'Resto: ${amount}';
@override String get complete => 'COMPLETAR'; @override String get complete => 'COMPLETAR';
} }
// Path: button // Path: button
class _TranslationsButtonEs implements TranslationsButtonEn { class _TranslationsButtonEs extends TranslationsButtonEn {
_TranslationsButtonEs._(this._root); _TranslationsButtonEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonEs implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedEs implements TranslationsEmbedEn { class _TranslationsEmbedEs extends TranslationsEmbedEn {
_TranslationsEmbedEs._(this._root); _TranslationsEmbedEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Artículo de ${name}'; @override String article_by({required Object name}) => 'Artículo de ${name}';
@override String note_by({ required Object name}) => 'Nota 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 live_stream_by({required Object name}) => 'Transmisión en directo por ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListEs implements TranslationsStreamListEn { class _TranslationsStreamListEs extends TranslationsStreamListEn {
_TranslationsStreamListEs._(this._root); _TranslationsStreamListEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListEs implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapEs implements TranslationsZapEn { class _TranslationsZapEs extends TranslationsZapEn {
_TranslationsZapEs._(this._root); _TranslationsZapEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Importe personalizado';
@override String get confirm => 'Confirmar'; @override String get confirm => 'Confirmar';
@override String get comment => 'Comentario'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Abrir en cartera'; @override String get button_open_wallet => 'Abrir en cartera';
@override String get copy => 'Copiado al portapapeles'; @override String get copy => 'Copiado al portapapeles';
@ -163,8 +164,8 @@ class _TranslationsZapEs implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileEs implements TranslationsProfileEn { class _TranslationsProfileEs extends TranslationsProfileEn {
_TranslationsProfileEs._(this._root); _TranslationsProfileEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileEs implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginEs implements TranslationsLoginEn { class _TranslationsLoginEs extends TranslationsLoginEn {
_TranslationsLoginEs._(this._root); _TranslationsLoginEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginEs implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusEs implements TranslationsStreamStatusEn { class _TranslationsStreamStatusEs extends TranslationsStreamStatusEn {
_TranslationsStreamStatusEs._(this._root); _TranslationsStreamStatusEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusEs implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatEs implements TranslationsStreamChatEn { class _TranslationsStreamChatEs extends TranslationsStreamChatEn {
_TranslationsStreamChatEs._(this._root); _TranslationsStreamChatEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DESHABILITADO'; @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 /// 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, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' para '), const TextSpan(text: ' para '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream finalizó en la parte inferior del chat /// Stream finalizó en la parte inferior del chat
@override String get ended => 'STREAM FINED'; @override String get ended => 'STREAM FINED';
/// Mensaje de chat que muestra zaps de flujo /// 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, user,
const TextSpan(text: ' zapearon '), const TextSpan(text: ' zapearon '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteEs write = _TranslationsStreamChatWriteEs._(_root); @override late final _TranslationsStreamChatWriteEs write = _TranslationsStreamChatWriteEs._(_root);
@override late final _TranslationsStreamChatBadgeEs badge = _TranslationsStreamChatBadgeEs._(_root); @override late final _TranslationsStreamChatBadgeEs badge = _TranslationsStreamChatBadgeEs._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatEs implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorEs implements TranslationsZapErrorEn { class _TranslationsZapErrorEs extends TranslationsZapErrorEn {
_TranslationsZapErrorEs._(this._root); _TranslationsZapErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorEs implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditEs implements TranslationsProfileEditEn { class _TranslationsProfileEditEs extends TranslationsProfileEditEn {
_TranslationsProfileEditEs._(this._root); _TranslationsProfileEditEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditEs implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorEs implements TranslationsLoginErrorEn { class _TranslationsLoginErrorEs extends TranslationsLoginErrorEn {
_TranslationsLoginErrorEs._(this._root); _TranslationsLoginErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorEs implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteEs implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteEs extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteEs._(this._root); _TranslationsStreamChatWriteEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteEs implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeEs implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeEs extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeEs._(this._root); _TranslationsStreamChatBadgeEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeEs implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidEs implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidEs extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidEs._(this._root); _TranslationsStreamChatRaidEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
// Translations // Translations
/// Mensaje de raid de chat a otro flujo /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorEs implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorEs extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorEs._(this._root); _TranslationsProfileEditErrorEs._(TranslationsEs root) : this._root = root, super.internal(root);
final TranslationsEs _root; // ignore: unused_field final TranslationsEs _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsEs {
case 'stream.status.live': return 'EN VIVO'; case 'stream.status.live': return 'EN VIVO';
case 'stream.status.ended': return 'FIN'; case 'stream.status.ended': return 'FIN';
case 'stream.status.planned': return 'PLANIFICADO'; case 'stream.status.planned': return 'PLANIFICADO';
case 'stream.started': return ({ required Object timestamp}) => 'Comenzó ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Comenzó ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DESHABILITADO'; case 'stream.chat.disabled': return 'CHAT DESHABILITADO';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'El tiempo de espera expira: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'El tiempo de espera expira: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' para '), const TextSpan(text: ' para '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM FINED'; 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, user,
const TextSpan(text: ' zapearon '), const TextSpan(text: ' zapearon '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Escribir mensaje'; 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.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.write.login': return 'Inicie sesión para enviar mensajes';
case 'stream.chat.badge.awarded_to': return 'Concedido a:'; case 'stream.chat.badge.awarded_to': return 'Concedido a:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID DESDE ${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 'stream.chat.raid.countdown': return ({required Object time}) => 'Incursiones en ${time}';
case 'goal.title': return ({ required Object amount}) => 'Objetivo: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Objetivo: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Resto: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Resto: ${amount}';
case 'goal.complete': return 'COMPLETAR'; case 'goal.complete': return 'COMPLETAR';
case 'button.login': return 'Iniciar Sesión'; case 'button.login': return 'Iniciar Sesión';
case 'button.logout': return 'Cerrar sesión'; case 'button.logout': return 'Cerrar sesión';
@ -380,18 +381,18 @@ extension on TranslationsEs {
case 'button.unmute': return 'Dejar de silenciar'; case 'button.unmute': return 'Dejar de silenciar';
case 'button.share': return 'Compartir'; case 'button.share': return 'Compartir';
case 'button.save': return 'Guardar'; case 'button.save': return 'Guardar';
case 'embed.article_by': return ({ required Object name}) => 'Artículo de ${name}'; 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.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 'embed.live_stream_by': return ({required Object name}) => 'Transmisión en directo por ${name}';
case 'stream_list.following': return 'Siguiendo'; case 'stream_list.following': return 'Siguiendo';
case 'stream_list.live': return 'En directo'; case 'stream_list.live': return 'En directo';
case 'stream_list.planned': return 'Planificado'; case 'stream_list.planned': return 'Planificado';
case 'stream_list.ended': return 'Finalizado'; 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.custom_amount': return 'Importe personalizado';
case 'zap.confirm': return 'Confirmar'; case 'zap.confirm': return 'Confirmar';
case 'zap.comment': return 'Comentario'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Abrir en cartera'; case 'zap.button_open_wallet': return 'Abrir en cartera';
case 'zap.copy': return 'Copiado al portapapeles'; case 'zap.copy': return 'Copiado al portapapeles';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsFi implements Translations { class TranslationsFi extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsFi({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsFi({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsFi implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsFi implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsFi _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsFi implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamFi implements TranslationsStreamEn { class _TranslationsStreamFi extends TranslationsStreamEn {
_TranslationsStreamFi._(this._root); _TranslationsStreamFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusFi status = _TranslationsStreamStatusFi._(_root); @override late final _TranslationsStreamStatusFi status = _TranslationsStreamStatusFi._(_root);
@override String started({ required Object timestamp}) => 'Aloitettu ${timestamp}'; @override String started({required Object timestamp}) => 'Aloitettu ${timestamp}';
@override late final _TranslationsStreamChatFi chat = _TranslationsStreamChatFi._(_root); @override late final _TranslationsStreamChatFi chat = _TranslationsStreamChatFi._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalFi implements TranslationsGoalEn { class _TranslationsGoalFi extends TranslationsGoalEn {
_TranslationsGoalFi._(this._root); _TranslationsGoalFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Tavoite: ${amount}'; @override String title({required Object amount}) => 'Tavoite: ${amount}';
@override String remaining({ required Object amount}) => 'Jäljellä: ${amount}'; @override String remaining({required Object amount}) => 'Jäljellä: ${amount}';
@override String get complete => 'TÄYDELLINEN'; @override String get complete => 'TÄYDELLINEN';
} }
// Path: button // Path: button
class _TranslationsButtonFi implements TranslationsButtonEn { class _TranslationsButtonFi extends TranslationsButtonEn {
_TranslationsButtonFi._(this._root); _TranslationsButtonFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonFi implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedFi implements TranslationsEmbedEn { class _TranslationsEmbedFi extends TranslationsEmbedEn {
_TranslationsEmbedFi._(this._root); _TranslationsEmbedFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Artikkeli ${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 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 live_stream_by({required Object name}) => 'Suora lähetys osoitteessa ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListFi implements TranslationsStreamListEn { class _TranslationsStreamListFi extends TranslationsStreamListEn {
_TranslationsStreamListFi._(this._root); _TranslationsStreamListFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListFi implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapFi implements TranslationsZapEn { class _TranslationsZapFi extends TranslationsZapEn {
_TranslationsZapFi._(this._root); _TranslationsZapFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Mukautettu määrä';
@override String get confirm => 'Vahvista'; @override String get confirm => 'Vahvista';
@override String get comment => 'Kommentoi'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Avaa lompakossa'; @override String get button_open_wallet => 'Avaa lompakossa';
@override String get copy => 'Kopioitu leikepöydälle'; @override String get copy => 'Kopioitu leikepöydälle';
@ -163,8 +164,8 @@ class _TranslationsZapFi implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileFi implements TranslationsProfileEn { class _TranslationsProfileFi extends TranslationsProfileEn {
_TranslationsProfileFi._(this._root); _TranslationsProfileFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileFi implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginFi implements TranslationsLoginEn { class _TranslationsLoginFi extends TranslationsLoginEn {
_TranslationsLoginFi._(this._root); _TranslationsLoginFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginFi implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusFi implements TranslationsStreamStatusEn { class _TranslationsStreamStatusFi extends TranslationsStreamStatusEn {
_TranslationsStreamStatusFi._(this._root); _TranslationsStreamStatusFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusFi implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatFi implements TranslationsStreamChatEn { class _TranslationsStreamChatFi extends TranslationsStreamChatEn {
_TranslationsStreamChatFi._(this._root); _TranslationsStreamChatFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT POISTETTU KÄYTÖSTÄ'; @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 /// 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, mod,
const TextSpan(text: ' ajastettu '), const TextSpan(text: ' ajastettu '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Virta päättyi alatunnisteen alareunaan chatissa /// Virta päättyi alatunnisteen alareunaan chatissa
@override String get ended => 'STREAM PÄÄTTYNYT'; @override String get ended => 'STREAM PÄÄTTYNYT';
/// Chat-viestin näyttäminen stream zaps /// 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, user,
const TextSpan(text: ' zappasi '), const TextSpan(text: ' zappasi '),
amount, amount,
const TextSpan(text: ' satsia'), const TextSpan(text: ' satsia'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteFi write = _TranslationsStreamChatWriteFi._(_root); @override late final _TranslationsStreamChatWriteFi write = _TranslationsStreamChatWriteFi._(_root);
@override late final _TranslationsStreamChatBadgeFi badge = _TranslationsStreamChatBadgeFi._(_root); @override late final _TranslationsStreamChatBadgeFi badge = _TranslationsStreamChatBadgeFi._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatFi implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorFi implements TranslationsZapErrorEn { class _TranslationsZapErrorFi extends TranslationsZapErrorEn {
_TranslationsZapErrorFi._(this._root); _TranslationsZapErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorFi implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditFi implements TranslationsProfileEditEn { class _TranslationsProfileEditFi extends TranslationsProfileEditEn {
_TranslationsProfileEditFi._(this._root); _TranslationsProfileEditFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditFi implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorFi implements TranslationsLoginErrorEn { class _TranslationsLoginErrorFi extends TranslationsLoginErrorEn {
_TranslationsLoginErrorFi._(this._root); _TranslationsLoginErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorFi implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteFi implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteFi extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteFi._(this._root); _TranslationsStreamChatWriteFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteFi implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeFi implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeFi extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeFi._(this._root); _TranslationsStreamChatBadgeFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeFi implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidFi implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidFi extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidFi._(this._root); _TranslationsStreamChatRaidFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
// Translations // Translations
/// Chat-viesti toiseen streamiin /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorFi implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorFi extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorFi._(this._root); _TranslationsProfileEditErrorFi._(TranslationsFi root) : this._root = root, super.internal(root);
final TranslationsFi _root; // ignore: unused_field final TranslationsFi _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsFi {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'SUUNNITELTU'; case 'stream.status.planned': return 'SUUNNITELTU';
case 'stream.started': return ({ required Object timestamp}) => 'Aloitettu ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Aloitettu ${timestamp}';
case 'stream.chat.disabled': return 'CHAT POISTETTU KÄYTÖSTÄ'; case 'stream.chat.disabled': return 'CHAT POISTETTU KÄYTÖSTÄ';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Aikakatkaisu päättyy: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Aikakatkaisu päättyy: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' ajastettu '), const TextSpan(text: ' ajastettu '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM PÄÄTTYNYT'; 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, user,
const TextSpan(text: ' zappasi '), const TextSpan(text: ' zappasi '),
amount, amount,
const TextSpan(text: ' satsia'), const TextSpan(text: ' satsia'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Kirjoita viesti'; 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.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.write.login': return 'Kirjaudu sisään lähettääksesi viestejä';
case 'stream.chat.badge.awarded_to': return 'Myönnetty:'; case 'stream.chat.badge.awarded_to': return 'Myönnetty:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Ryöstöretket osoitteessa ${time}'; 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.title': return ({required Object amount}) => 'Tavoite: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Jäljellä: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Jäljellä: ${amount}';
case 'goal.complete': return 'TÄYDELLINEN'; case 'goal.complete': return 'TÄYDELLINEN';
case 'button.login': return 'Kirjaudu sisään'; case 'button.login': return 'Kirjaudu sisään';
case 'button.logout': return 'Kirjaudu ulos'; case 'button.logout': return 'Kirjaudu ulos';
@ -380,18 +381,18 @@ extension on TranslationsFi {
case 'button.unmute': return 'Poista mykistys'; case 'button.unmute': return 'Poista mykistys';
case 'button.share': return 'Jaa'; case 'button.share': return 'Jaa';
case 'button.save': return 'Tallenna'; case 'button.save': return 'Tallenna';
case 'embed.article_by': return ({ required Object name}) => 'Artikkeli ${name}'; 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.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 'embed.live_stream_by': return ({required Object name}) => 'Suora lähetys osoitteessa ${name}';
case 'stream_list.following': return 'Seuraa'; case 'stream_list.following': return 'Seuraa';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Suunniteltu'; case 'stream_list.planned': return 'Suunniteltu';
case 'stream_list.ended': return 'Päättynyt'; 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.custom_amount': return 'Mukautettu määrä';
case 'zap.confirm': return 'Vahvista'; case 'zap.confirm': return 'Vahvista';
case 'zap.comment': return 'Kommentoi'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Avaa lompakossa'; case 'zap.button_open_wallet': return 'Avaa lompakossa';
case 'zap.copy': return 'Kopioitu leikepöydälle'; case 'zap.copy': return 'Kopioitu leikepöydälle';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsFr implements Translations { class TranslationsFr extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsFr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsFr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsFr implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsFr implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsFr _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsFr implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamFr implements TranslationsStreamEn { class _TranslationsStreamFr extends TranslationsStreamEn {
_TranslationsStreamFr._(this._root); _TranslationsStreamFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusFr status = _TranslationsStreamStatusFr._(_root); @override late final _TranslationsStreamStatusFr status = _TranslationsStreamStatusFr._(_root);
@override String started({ required Object timestamp}) => 'Commencé à ${timestamp}'; @override String started({required Object timestamp}) => 'Commencé à ${timestamp}';
@override late final _TranslationsStreamChatFr chat = _TranslationsStreamChatFr._(_root); @override late final _TranslationsStreamChatFr chat = _TranslationsStreamChatFr._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalFr implements TranslationsGoalEn { class _TranslationsGoalFr extends TranslationsGoalEn {
_TranslationsGoalFr._(this._root); _TranslationsGoalFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Objectif : ${amount}'; @override String title({required Object amount}) => 'Objectif : ${amount}';
@override String remaining({ required Object amount}) => 'Reste : ${amount}'; @override String remaining({required Object amount}) => 'Reste : ${amount}';
@override String get complete => 'COMPLET'; @override String get complete => 'COMPLET';
} }
// Path: button // Path: button
class _TranslationsButtonFr implements TranslationsButtonEn { class _TranslationsButtonFr extends TranslationsButtonEn {
_TranslationsButtonFr._(this._root); _TranslationsButtonFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonFr implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedFr implements TranslationsEmbedEn { class _TranslationsEmbedFr extends TranslationsEmbedEn {
_TranslationsEmbedFr._(this._root); _TranslationsEmbedFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Article par ${name}'; @override String article_by({required Object name}) => 'Article par ${name}';
@override String note_by({ required Object name}) => 'Note 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 live_stream_by({required Object name}) => 'Retransmission en direct sur ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListFr implements TranslationsStreamListEn { class _TranslationsStreamListFr extends TranslationsStreamListEn {
_TranslationsStreamListFr._(this._root); _TranslationsStreamListFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListFr implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapFr implements TranslationsZapEn { class _TranslationsZapFr extends TranslationsZapEn {
_TranslationsZapFr._(this._root); _TranslationsZapFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Montant personnalisé';
@override String get confirm => 'Confirmer'; @override String get confirm => 'Confirmer';
@override String get comment => 'Commenter'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Ouvrir dans le portefeuille'; @override String get button_open_wallet => 'Ouvrir dans le portefeuille';
@override String get copy => 'Copié dans le presse-papiers'; @override String get copy => 'Copié dans le presse-papiers';
@ -163,8 +164,8 @@ class _TranslationsZapFr implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileFr implements TranslationsProfileEn { class _TranslationsProfileFr extends TranslationsProfileEn {
_TranslationsProfileFr._(this._root); _TranslationsProfileFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileFr implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginFr implements TranslationsLoginEn { class _TranslationsLoginFr extends TranslationsLoginEn {
_TranslationsLoginFr._(this._root); _TranslationsLoginFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginFr implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusFr implements TranslationsStreamStatusEn { class _TranslationsStreamStatusFr extends TranslationsStreamStatusEn {
_TranslationsStreamStatusFr._(this._root); _TranslationsStreamStatusFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusFr implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatFr implements TranslationsStreamChatEn { class _TranslationsStreamChatFr extends TranslationsStreamChatEn {
_TranslationsStreamChatFr._(this._root); _TranslationsStreamChatFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DISABLED'; @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 /// 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, mod,
const TextSpan(text: ' '), const TextSpan(text: ' '),
user, user,
const TextSpan(text: ' a expiré dans le temps pour '), const TextSpan(text: ' a expiré dans le temps pour '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream ended footer at bottom of chat /// Stream ended footer at bottom of chat
@override String get ended => 'STREAM ENDED'; @override String get ended => 'STREAM ENDED';
/// Message de chat montrant des zaps de flux /// 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, user,
const TextSpan(text: ' a zappé '), const TextSpan(text: ' a zappé '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteFr write = _TranslationsStreamChatWriteFr._(_root); @override late final _TranslationsStreamChatWriteFr write = _TranslationsStreamChatWriteFr._(_root);
@override late final _TranslationsStreamChatBadgeFr badge = _TranslationsStreamChatBadgeFr._(_root); @override late final _TranslationsStreamChatBadgeFr badge = _TranslationsStreamChatBadgeFr._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatFr implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorFr implements TranslationsZapErrorEn { class _TranslationsZapErrorFr extends TranslationsZapErrorEn {
_TranslationsZapErrorFr._(this._root); _TranslationsZapErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorFr implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditFr implements TranslationsProfileEditEn { class _TranslationsProfileEditFr extends TranslationsProfileEditEn {
_TranslationsProfileEditFr._(this._root); _TranslationsProfileEditFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditFr implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorFr implements TranslationsLoginErrorEn { class _TranslationsLoginErrorFr extends TranslationsLoginErrorEn {
_TranslationsLoginErrorFr._(this._root); _TranslationsLoginErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorFr implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteFr implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteFr extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteFr._(this._root); _TranslationsStreamChatWriteFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteFr implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeFr implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeFr extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeFr._(this._root); _TranslationsStreamChatBadgeFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeFr implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidFr implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidFr extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidFr._(this._root); _TranslationsStreamChatRaidFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
// Translations // Translations
/// Message de raid par chat vers un autre flux /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorFr implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorFr extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorFr._(this._root); _TranslationsProfileEditErrorFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field final TranslationsFr _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsFr {
case 'stream.status.live': return 'VIVRE'; case 'stream.status.live': return 'VIVRE';
case 'stream.status.ended': return 'FINI'; case 'stream.status.ended': return 'FINI';
case 'stream.status.planned': return 'PRÉVU'; case 'stream.status.planned': return 'PRÉVU';
case 'stream.started': return ({ required Object timestamp}) => 'Commencé à ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Commencé à ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABLED'; case 'stream.chat.disabled': return 'CHAT DISABLED';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Le délai expire : ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Le délai expire : ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' '), const TextSpan(text: ' '),
user, user,
const TextSpan(text: ' a expiré dans le temps pour '), const TextSpan(text: ' a expiré dans le temps pour '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ENDED'; 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, user,
const TextSpan(text: ' a zappé '), const TextSpan(text: ' a zappé '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Message écrit'; 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.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.write.login': return 'Veuillez vous connecter pour envoyer des messages';
case 'stream.chat.badge.awarded_to': return 'Attribué à :'; case 'stream.chat.badge.awarded_to': return 'Attribué à :';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raid sur ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raid sur ${time}';
case 'goal.title': return ({ required Object amount}) => 'Objectif : ${amount}'; case 'goal.title': return ({required Object amount}) => 'Objectif : ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Reste : ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Reste : ${amount}';
case 'goal.complete': return 'COMPLET'; case 'goal.complete': return 'COMPLET';
case 'button.login': return 'Se Connecter'; case 'button.login': return 'Se Connecter';
case 'button.logout': return 'Se déconnecter'; case 'button.logout': return 'Se déconnecter';
@ -380,18 +381,18 @@ extension on TranslationsFr {
case 'button.unmute': return 'Retirer sourdine'; case 'button.unmute': return 'Retirer sourdine';
case 'button.share': return 'Partager'; case 'button.share': return 'Partager';
case 'button.save': return 'Sauvegarder'; case 'button.save': return 'Sauvegarder';
case 'embed.article_by': return ({ required Object name}) => 'Article par ${name}'; case 'embed.article_by': return ({required Object name}) => 'Article par ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note 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 'embed.live_stream_by': return ({required Object name}) => 'Retransmission en direct sur ${name}';
case 'stream_list.following': return 'Abonnements'; case 'stream_list.following': return 'Abonnements';
case 'stream_list.live': return 'En direct'; case 'stream_list.live': return 'En direct';
case 'stream_list.planned': return 'Planifié'; case 'stream_list.planned': return 'Planifié';
case 'stream_list.ended': return 'Terminé'; 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.custom_amount': return 'Montant personnalisé';
case 'zap.confirm': return 'Confirmer'; case 'zap.confirm': return 'Confirmer';
case 'zap.comment': return 'Commenter'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Ouvrir dans le portefeuille'; case 'zap.button_open_wallet': return 'Ouvrir dans le portefeuille';
case 'zap.copy': return 'Copié dans le presse-papiers'; case 'zap.copy': return 'Copié dans le presse-papiers';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsHe implements Translations { class TranslationsHe extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsHe({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsHe({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsHe implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsHe implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 TranslationsHe _root = this; // ignore: unused_field late final TranslationsHe _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsHe implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamHe implements TranslationsStreamEn { class _TranslationsStreamHe extends TranslationsStreamEn {
_TranslationsStreamHe._(this._root); _TranslationsStreamHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusHe status = _TranslationsStreamStatusHe._(_root); @override late final _TranslationsStreamStatusHe status = _TranslationsStreamStatusHe._(_root);
@override String started({ required Object timestamp}) => 'Started ${timestamp}'; @override String started({required Object timestamp}) => 'Started ${timestamp}';
@override late final _TranslationsStreamChatHe chat = _TranslationsStreamChatHe._(_root); @override late final _TranslationsStreamChatHe chat = _TranslationsStreamChatHe._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalHe implements TranslationsGoalEn { class _TranslationsGoalHe extends TranslationsGoalEn {
_TranslationsGoalHe._(this._root); _TranslationsGoalHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Goal: ${amount}'; @override String title({required Object amount}) => 'Goal: ${amount}';
@override String remaining({ required Object amount}) => 'Remaining: ${amount}'; @override String remaining({required Object amount}) => 'Remaining: ${amount}';
@override String get complete => 'COMPLETE'; @override String get complete => 'COMPLETE';
} }
// Path: button // Path: button
class _TranslationsButtonHe implements TranslationsButtonEn { class _TranslationsButtonHe extends TranslationsButtonEn {
_TranslationsButtonHe._(this._root); _TranslationsButtonHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonHe implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedHe implements TranslationsEmbedEn { class _TranslationsEmbedHe extends TranslationsEmbedEn {
_TranslationsEmbedHe._(this._root); _TranslationsEmbedHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Article by ${name}'; @override String article_by({required Object name}) => 'Article by ${name}';
@override String note_by({ required Object name}) => 'Note by ${name}'; @override String note_by({required Object name}) => 'Note by ${name}';
@override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; @override String live_stream_by({required Object name}) => 'Live stream by ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListHe implements TranslationsStreamListEn { class _TranslationsStreamListHe extends TranslationsStreamListEn {
_TranslationsStreamListHe._(this._root); _TranslationsStreamListHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListHe implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapHe implements TranslationsZapEn { class _TranslationsZapHe extends TranslationsZapEn {
_TranslationsZapHe._(this._root); _TranslationsZapHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object name}) => 'Zap ${name}'; @override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Custom Amount'; @override String get custom_amount => 'Custom Amount';
@override String get confirm => 'Confirm'; @override String get confirm => 'Confirm';
@override String get comment => 'Comment'; @override String get comment => '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_zap => 'Zap';
@override String get button_open_wallet => 'Open in Wallet'; @override String get button_open_wallet => 'Open in Wallet';
@override String get copy => 'Copied to clipboard'; @override String get copy => 'Copied to clipboard';
@ -163,8 +164,8 @@ class _TranslationsZapHe implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileHe implements TranslationsProfileEn { class _TranslationsProfileHe extends TranslationsProfileEn {
_TranslationsProfileHe._(this._root); _TranslationsProfileHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileHe implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginHe implements TranslationsLoginEn { class _TranslationsLoginHe extends TranslationsLoginEn {
_TranslationsLoginHe._(this._root); _TranslationsLoginHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginHe implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusHe implements TranslationsStreamStatusEn { class _TranslationsStreamStatusHe extends TranslationsStreamStatusEn {
_TranslationsStreamStatusHe._(this._root); _TranslationsStreamStatusHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusHe implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatHe implements TranslationsStreamChatEn { class _TranslationsStreamChatHe extends TranslationsStreamChatEn {
_TranslationsStreamChatHe._(this._root); _TranslationsStreamChatHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DISABLED'; @override String get disabled => 'CHAT DISABLED';
@override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; @override String disabled_timeout({required Object time}) => 'Timeout expires: ${time}';
/// Chat message showing timeout events /// Chat message showing timeout events
@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, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream ended footer at bottom of chat /// Stream ended footer at bottom of chat
@override String get ended => 'STREAM ENDED'; @override String get ended => 'STREAM ENDED';
/// Chat message showing stream zaps /// Chat message showing 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteHe write = _TranslationsStreamChatWriteHe._(_root); @override late final _TranslationsStreamChatWriteHe write = _TranslationsStreamChatWriteHe._(_root);
@override late final _TranslationsStreamChatBadgeHe badge = _TranslationsStreamChatBadgeHe._(_root); @override late final _TranslationsStreamChatBadgeHe badge = _TranslationsStreamChatBadgeHe._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatHe implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorHe implements TranslationsZapErrorEn { class _TranslationsZapErrorHe extends TranslationsZapErrorEn {
_TranslationsZapErrorHe._(this._root); _TranslationsZapErrorHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorHe implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditHe implements TranslationsProfileEditEn { class _TranslationsProfileEditHe extends TranslationsProfileEditEn {
_TranslationsProfileEditHe._(this._root); _TranslationsProfileEditHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditHe implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorHe implements TranslationsLoginErrorEn { class _TranslationsLoginErrorHe extends TranslationsLoginErrorEn {
_TranslationsLoginErrorHe._(this._root); _TranslationsLoginErrorHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorHe implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteHe implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteHe extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteHe._(this._root); _TranslationsStreamChatWriteHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteHe implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeHe implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeHe extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeHe._(this._root); _TranslationsStreamChatBadgeHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeHe implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidHe implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidHe extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidHe._(this._root); _TranslationsStreamChatRaidHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
// Translations // Translations
/// Chat raid message to another stream /// Chat raid message to another stream
@override String to({ required Object name}) => 'RAIDING ${name}'; @override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid message from another stream /// Chat raid message from another stream
@override String from({ required Object name}) => 'RAID FROM ${name}'; @override String from({required Object name}) => 'RAID FROM ${name}';
/// Countdown timer for auto-raiding /// Countdown timer for auto-raiding
@override String countdown({ required Object time}) => 'Raiding in ${time}'; @override String countdown({required Object time}) => 'Raiding in ${time}';
} }
// Path: profile.edit.error // Path: profile.edit.error
class _TranslationsProfileEditErrorHe implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorHe extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorHe._(this._root); _TranslationsProfileEditErrorHe._(TranslationsHe root) : this._root = root, super.internal(root);
final TranslationsHe _root; // ignore: unused_field final TranslationsHe _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsHe {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'PLANNED'; case 'stream.status.planned': return 'PLANNED';
case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Started ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABLED'; case 'stream.chat.disabled': return 'CHAT DISABLED';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout expires: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ENDED'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Write message'; 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.no_signer': return 'Can\'t write messages with npub login';
case 'stream.chat.write.login': return 'Please login to send messages'; case 'stream.chat.write.login': return 'Please login to send messages';
case 'stream.chat.badge.awarded_to': return 'Awarded to:'; case 'stream.chat.badge.awarded_to': return 'Awarded to:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Goal: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Remaining: ${amount}';
case 'goal.complete': return 'COMPLETE'; case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Login'; case 'button.login': return 'Login';
case 'button.logout': return 'Logout'; case 'button.logout': return 'Logout';
@ -380,18 +381,18 @@ extension on TranslationsHe {
case 'button.unmute': return 'Unmute'; case 'button.unmute': return 'Unmute';
case 'button.share': return 'Share'; case 'button.share': return 'Share';
case 'button.save': return 'Save'; case 'button.save': return 'Save';
case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; case 'embed.article_by': return ({required Object name}) => 'Article by ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note 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 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return 'Following'; case 'stream_list.following': return 'Following';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planned'; case 'stream_list.planned': return 'Planned';
case 'stream_list.ended': return 'Ended'; 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.custom_amount': return 'Custom Amount';
case 'zap.confirm': return 'Confirm'; case 'zap.confirm': return 'Confirm';
case 'zap.comment': return 'Comment'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Open in Wallet'; case 'zap.button_open_wallet': return 'Open in Wallet';
case 'zap.copy': return 'Copied to clipboard'; case 'zap.copy': return 'Copied to clipboard';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsHu implements Translations { class TranslationsHu extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsHu({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsHu({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsHu implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsHu implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsHu _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsHu implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamHu implements TranslationsStreamEn { class _TranslationsStreamHu extends TranslationsStreamEn {
_TranslationsStreamHu._(this._root); _TranslationsStreamHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusHu status = _TranslationsStreamStatusHu._(_root); @override late final _TranslationsStreamStatusHu status = _TranslationsStreamStatusHu._(_root);
@override String started({ required Object timestamp}) => 'Elindult ${timestamp}'; @override String started({required Object timestamp}) => 'Elindult ${timestamp}';
@override late final _TranslationsStreamChatHu chat = _TranslationsStreamChatHu._(_root); @override late final _TranslationsStreamChatHu chat = _TranslationsStreamChatHu._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalHu implements TranslationsGoalEn { class _TranslationsGoalHu extends TranslationsGoalEn {
_TranslationsGoalHu._(this._root); _TranslationsGoalHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Cél: ${amount}'; @override String title({required Object amount}) => 'Cél: ${amount}';
@override String remaining({ required Object amount}) => 'Maradék: ${amount}'; @override String remaining({required Object amount}) => 'Maradék: ${amount}';
@override String get complete => 'TELJES'; @override String get complete => 'TELJES';
} }
// Path: button // Path: button
class _TranslationsButtonHu implements TranslationsButtonEn { class _TranslationsButtonHu extends TranslationsButtonEn {
_TranslationsButtonHu._(this._root); _TranslationsButtonHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonHu implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedHu implements TranslationsEmbedEn { class _TranslationsEmbedHu extends TranslationsEmbedEn {
_TranslationsEmbedHu._(this._root); _TranslationsEmbedHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'A ${name} cikke.'; @override String article_by({required Object name}) => 'A ${name} cikke.';
@override String note_by({ required Object name}) => '${name} bejegyzése'; @override String note_by({required Object name}) => '${name} bejegyzése';
@override String live_stream_by({ required Object name}) => 'Élő közvetítés a ${name} oldalon'; @override String live_stream_by({required Object name}) => 'Élő közvetítés a ${name} oldalon';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListHu implements TranslationsStreamListEn { class _TranslationsStreamListHu extends TranslationsStreamListEn {
_TranslationsStreamListHu._(this._root); _TranslationsStreamListHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListHu implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapHu implements TranslationsZapEn { class _TranslationsZapHu extends TranslationsZapEn {
_TranslationsZapHu._(this._root); _TranslationsZapHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Egyéni összeg';
@override String get confirm => 'Megerősítés'; @override String get confirm => 'Megerősítés';
@override String get comment => 'Hozzászólá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_zap => 'Zap';
@override String get button_open_wallet => 'Megnyitás a pénztárcában'; @override String get button_open_wallet => 'Megnyitás a pénztárcában';
@override String get copy => 'Vágólapra másolva'; @override String get copy => 'Vágólapra másolva';
@ -163,8 +164,8 @@ class _TranslationsZapHu implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileHu implements TranslationsProfileEn { class _TranslationsProfileHu extends TranslationsProfileEn {
_TranslationsProfileHu._(this._root); _TranslationsProfileHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileHu implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginHu implements TranslationsLoginEn { class _TranslationsLoginHu extends TranslationsLoginEn {
_TranslationsLoginHu._(this._root); _TranslationsLoginHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginHu implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusHu implements TranslationsStreamStatusEn { class _TranslationsStreamStatusHu extends TranslationsStreamStatusEn {
_TranslationsStreamStatusHu._(this._root); _TranslationsStreamStatusHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -200,35 +201,35 @@ class _TranslationsStreamStatusHu implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatHu implements TranslationsStreamChatEn { class _TranslationsStreamChatHu extends TranslationsStreamChatEn {
_TranslationsStreamChatHu._(this._root); _TranslationsStreamChatHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT KIKAPCSOLVA'; @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 /// 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, mod,
const TextSpan(text: ' időzített '), const TextSpan(text: ' időzített '),
user, user,
const TextSpan(text: ' a '), const TextSpan(text: ' a '),
time, time,
const TextSpan(text: ' számára'), const TextSpan(text: ' számára'),
], style: style, recognizer: recognizer); ]);
/// A stream véget ért lábléc a chat alján /// A stream véget ért lábléc a chat alján
@override String get ended => 'STREAM MEGSZÜNTETETT'; @override String get ended => 'STREAM MEGSZÜNTETETT';
/// Csevegőüzenet, amely stream zapokat mutat /// 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, user,
const TextSpan(text: ' zap-elt '), const TextSpan(text: ' zap-elt '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteHu write = _TranslationsStreamChatWriteHu._(_root); @override late final _TranslationsStreamChatWriteHu write = _TranslationsStreamChatWriteHu._(_root);
@override late final _TranslationsStreamChatBadgeHu badge = _TranslationsStreamChatBadgeHu._(_root); @override late final _TranslationsStreamChatBadgeHu badge = _TranslationsStreamChatBadgeHu._(_root);
@ -236,8 +237,8 @@ class _TranslationsStreamChatHu implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorHu implements TranslationsZapErrorEn { class _TranslationsZapErrorHu extends TranslationsZapErrorEn {
_TranslationsZapErrorHu._(this._root); _TranslationsZapErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -248,8 +249,8 @@ class _TranslationsZapErrorHu implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditHu implements TranslationsProfileEditEn { class _TranslationsProfileEditHu extends TranslationsProfileEditEn {
_TranslationsProfileEditHu._(this._root); _TranslationsProfileEditHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -262,8 +263,8 @@ class _TranslationsProfileEditHu implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorHu implements TranslationsLoginErrorEn { class _TranslationsLoginErrorHu extends TranslationsLoginErrorEn {
_TranslationsLoginErrorHu._(this._root); _TranslationsLoginErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -272,8 +273,8 @@ class _TranslationsLoginErrorHu implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteHu implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteHu extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteHu._(this._root); _TranslationsStreamChatWriteHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -290,8 +291,8 @@ class _TranslationsStreamChatWriteHu implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeHu implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeHu extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeHu._(this._root); _TranslationsStreamChatBadgeHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -302,26 +303,26 @@ class _TranslationsStreamChatBadgeHu implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidHu implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidHu extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidHu._(this._root); _TranslationsStreamChatRaidHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
// Translations // Translations
/// Chat raid üzenet egy másik folyamba /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorHu implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorHu extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorHu._(this._root); _TranslationsProfileEditErrorHu._(TranslationsHu root) : this._root = root, super.internal(root);
final TranslationsHu _root; // ignore: unused_field final TranslationsHu _root; // ignore: unused_field
@ -345,33 +346,33 @@ extension on TranslationsHu {
case 'stream.status.live': return 'ÉLŐ'; case 'stream.status.live': return 'ÉLŐ';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'TERVEZETT'; case 'stream.status.planned': return 'TERVEZETT';
case 'stream.started': return ({ required Object timestamp}) => 'Elindult ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Elindult ${timestamp}';
case 'stream.chat.disabled': return 'CHAT KIKAPCSOLVA'; case 'stream.chat.disabled': return 'CHAT KIKAPCSOLVA';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Az időkorlát lejár: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Az időkorlát lejár: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' időzített '), const TextSpan(text: ' időzített '),
user, user,
const TextSpan(text: ' a '), const TextSpan(text: ' a '),
time, time,
const TextSpan(text: ' számára'), const TextSpan(text: ' számára'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM MEGSZÜNTETETT'; 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, user,
const TextSpan(text: ' zap-elt '), const TextSpan(text: ' zap-elt '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Üzenet írása'; 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.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.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.badge.awarded_to': return 'Elnyerte:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding a ${time} oldalon'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding a ${time} oldalon';
case 'goal.title': return ({ required Object amount}) => 'Cél: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Cél: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Maradék: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Maradék: ${amount}';
case 'goal.complete': return 'TELJES'; case 'goal.complete': return 'TELJES';
case 'button.login': return 'Bejelentkezés'; case 'button.login': return 'Bejelentkezés';
case 'button.logout': return 'Kijelentkezés'; case 'button.logout': return 'Kijelentkezés';
@ -382,18 +383,18 @@ extension on TranslationsHu {
case 'button.unmute': return 'Némítás visszavonása'; case 'button.unmute': return 'Némítás visszavonása';
case 'button.share': return 'Megosztás'; case 'button.share': return 'Megosztás';
case 'button.save': return 'Mentés'; case 'button.save': return 'Mentés';
case 'embed.article_by': return ({ required Object name}) => 'A ${name} cikke.'; case 'embed.article_by': return ({required Object name}) => 'A ${name} cikke.';
case 'embed.note_by': return ({ required Object name}) => '${name} bejegyzése'; case 'embed.note_by': return ({required Object name}) => '${name} bejegyzése';
case 'embed.live_stream_by': return ({ required Object name}) => 'Élő közvetítés a ${name} oldalon'; case 'embed.live_stream_by': return ({required Object name}) => 'Élő közvetítés a ${name} oldalon';
case 'stream_list.following': return 'Követettek bejegyzései'; case 'stream_list.following': return 'Követettek bejegyzései';
case 'stream_list.live': return 'Élő'; case 'stream_list.live': return 'Élő';
case 'stream_list.planned': return 'Tervezett'; case 'stream_list.planned': return 'Tervezett';
case 'stream_list.ended': return 'Véget ért'; 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.custom_amount': return 'Egyéni összeg';
case 'zap.confirm': return 'Megerősítés'; case 'zap.confirm': return 'Megerősítés';
case 'zap.comment': return 'Hozzászólá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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Megnyitás a pénztárcában'; case 'zap.button_open_wallet': return 'Megnyitás a pénztárcában';
case 'zap.copy': return 'Vágólapra másolva'; case 'zap.copy': return 'Vágólapra másolva';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsIt implements Translations { class TranslationsIt extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsIt({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsIt({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsIt implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsIt implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsIt _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsIt implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamIt implements TranslationsStreamEn { class _TranslationsStreamIt extends TranslationsStreamEn {
_TranslationsStreamIt._(this._root); _TranslationsStreamIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusIt status = _TranslationsStreamStatusIt._(_root); @override late final _TranslationsStreamStatusIt status = _TranslationsStreamStatusIt._(_root);
@override String started({ required Object timestamp}) => 'Avviato ${timestamp}'; @override String started({required Object timestamp}) => 'Avviato ${timestamp}';
@override late final _TranslationsStreamChatIt chat = _TranslationsStreamChatIt._(_root); @override late final _TranslationsStreamChatIt chat = _TranslationsStreamChatIt._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalIt implements TranslationsGoalEn { class _TranslationsGoalIt extends TranslationsGoalEn {
_TranslationsGoalIt._(this._root); _TranslationsGoalIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Obiettivo: ${amount}'; @override String title({required Object amount}) => 'Obiettivo: ${amount}';
@override String remaining({ required Object amount}) => 'Restante: ${amount}'; @override String remaining({required Object amount}) => 'Restante: ${amount}';
@override String get complete => 'COMPLETO'; @override String get complete => 'COMPLETO';
} }
// Path: button // Path: button
class _TranslationsButtonIt implements TranslationsButtonEn { class _TranslationsButtonIt extends TranslationsButtonEn {
_TranslationsButtonIt._(this._root); _TranslationsButtonIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonIt implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedIt implements TranslationsEmbedEn { class _TranslationsEmbedIt extends TranslationsEmbedEn {
_TranslationsEmbedIt._(this._root); _TranslationsEmbedIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Articolo di ${name}'; @override String article_by({required Object name}) => 'Articolo di ${name}';
@override String note_by({ required Object name}) => 'Nota 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 live_stream_by({required Object name}) => 'Streaming in diretta da ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListIt implements TranslationsStreamListEn { class _TranslationsStreamListIt extends TranslationsStreamListEn {
_TranslationsStreamListIt._(this._root); _TranslationsStreamListIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListIt implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapIt implements TranslationsZapEn { class _TranslationsZapIt extends TranslationsZapEn {
_TranslationsZapIt._(this._root); _TranslationsZapIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Importo personalizzato';
@override String get confirm => 'Conferma'; @override String get confirm => 'Conferma';
@override String get comment => 'Commenta'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Aprire nel portafoglio'; @override String get button_open_wallet => 'Aprire nel portafoglio';
@override String get copy => 'Copiato negli appunti'; @override String get copy => 'Copiato negli appunti';
@ -163,8 +164,8 @@ class _TranslationsZapIt implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileIt implements TranslationsProfileEn { class _TranslationsProfileIt extends TranslationsProfileEn {
_TranslationsProfileIt._(this._root); _TranslationsProfileIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileIt implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginIt implements TranslationsLoginEn { class _TranslationsLoginIt extends TranslationsLoginEn {
_TranslationsLoginIt._(this._root); _TranslationsLoginIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginIt implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusIt implements TranslationsStreamStatusEn { class _TranslationsStreamStatusIt extends TranslationsStreamStatusEn {
_TranslationsStreamStatusIt._(this._root); _TranslationsStreamStatusIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusIt implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatIt implements TranslationsStreamChatEn { class _TranslationsStreamChatIt extends TranslationsStreamChatEn {
_TranslationsStreamChatIt._(this._root); _TranslationsStreamChatIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DISABILITATA'; @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 /// 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, mod,
const TextSpan(text: ' time out '), const TextSpan(text: ' time out '),
user, user,
const TextSpan(text: ' per '), const TextSpan(text: ' per '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Il flusso si è concluso con un piè di pagina in fondo alla chat /// Il flusso si è concluso con un piè di pagina in fondo alla chat
@override String get ended => 'STREAM ENDED'; @override String get ended => 'STREAM ENDED';
/// Messaggio di chat che mostra gli zap del flusso /// 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, user,
const TextSpan(text: ' ha effettuato uno zap di '), const TextSpan(text: ' ha effettuato uno zap di '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteIt write = _TranslationsStreamChatWriteIt._(_root); @override late final _TranslationsStreamChatWriteIt write = _TranslationsStreamChatWriteIt._(_root);
@override late final _TranslationsStreamChatBadgeIt badge = _TranslationsStreamChatBadgeIt._(_root); @override late final _TranslationsStreamChatBadgeIt badge = _TranslationsStreamChatBadgeIt._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatIt implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorIt implements TranslationsZapErrorEn { class _TranslationsZapErrorIt extends TranslationsZapErrorEn {
_TranslationsZapErrorIt._(this._root); _TranslationsZapErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorIt implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditIt implements TranslationsProfileEditEn { class _TranslationsProfileEditIt extends TranslationsProfileEditEn {
_TranslationsProfileEditIt._(this._root); _TranslationsProfileEditIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditIt implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorIt implements TranslationsLoginErrorEn { class _TranslationsLoginErrorIt extends TranslationsLoginErrorEn {
_TranslationsLoginErrorIt._(this._root); _TranslationsLoginErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorIt implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteIt implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteIt extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteIt._(this._root); _TranslationsStreamChatWriteIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteIt implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeIt implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeIt extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeIt._(this._root); _TranslationsStreamChatBadgeIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeIt implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidIt implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidIt extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidIt._(this._root); _TranslationsStreamChatRaidIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
// Translations // Translations
/// Messaggio di chat raid in un altro flusso /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorIt implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorIt extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorIt._(this._root); _TranslationsProfileEditErrorIt._(TranslationsIt root) : this._root = root, super.internal(root);
final TranslationsIt _root; // ignore: unused_field final TranslationsIt _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsIt {
case 'stream.status.live': return 'IN DIRETTA'; case 'stream.status.live': return 'IN DIRETTA';
case 'stream.status.ended': return 'FINE'; case 'stream.status.ended': return 'FINE';
case 'stream.status.planned': return 'PREVISTO'; case 'stream.status.planned': return 'PREVISTO';
case 'stream.started': return ({ required Object timestamp}) => 'Avviato ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Avviato ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABILITATA'; case 'stream.chat.disabled': return 'CHAT DISABILITATA';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Il timeout scade: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Il timeout scade: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' time out '), const TextSpan(text: ' time out '),
user, user,
const TextSpan(text: ' per '), const TextSpan(text: ' per '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ENDED'; 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, user,
const TextSpan(text: ' ha effettuato uno zap di '), const TextSpan(text: ' ha effettuato uno zap di '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Scrivi il messaggio'; 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.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.write.login': return 'Effettuare il login per inviare messaggi';
case 'stream.chat.badge.awarded_to': return 'Assegnato a:'; case 'stream.chat.badge.awarded_to': return 'Assegnato a:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID DA ${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 'stream.chat.raid.countdown': return ({required Object time}) => 'Raid in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Obiettivo: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Obiettivo: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Restante: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Restante: ${amount}';
case 'goal.complete': return 'COMPLETO'; case 'goal.complete': return 'COMPLETO';
case 'button.login': return 'Login'; case 'button.login': return 'Login';
case 'button.logout': return 'Logout'; case 'button.logout': return 'Logout';
@ -380,18 +381,18 @@ extension on TranslationsIt {
case 'button.unmute': return 'Riattiva'; case 'button.unmute': return 'Riattiva';
case 'button.share': return 'Condividi'; case 'button.share': return 'Condividi';
case 'button.save': return 'Salva'; case 'button.save': return 'Salva';
case 'embed.article_by': return ({ required Object name}) => 'Articolo di ${name}'; case 'embed.article_by': return ({required Object name}) => 'Articolo di ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Nota 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 'embed.live_stream_by': return ({required Object name}) => 'Streaming in diretta da ${name}';
case 'stream_list.following': return 'Seguiti'; case 'stream_list.following': return 'Seguiti';
case 'stream_list.live': return 'Dal vivo'; case 'stream_list.live': return 'Dal vivo';
case 'stream_list.planned': return 'Pianificato'; case 'stream_list.planned': return 'Pianificato';
case 'stream_list.ended': return 'Terminato'; 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.custom_amount': return 'Importo personalizzato';
case 'zap.confirm': return 'Conferma'; case 'zap.confirm': return 'Conferma';
case 'zap.comment': return 'Commenta'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Aprire nel portafoglio'; case 'zap.button_open_wallet': return 'Aprire nel portafoglio';
case 'zap.copy': return 'Copiato negli appunti'; case 'zap.copy': return 'Copiato negli appunti';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsJa implements Translations { class TranslationsJa extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsJa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsJa({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsJa implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsJa implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsJa _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsJa implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamJa implements TranslationsStreamEn { class _TranslationsStreamJa extends TranslationsStreamEn {
_TranslationsStreamJa._(this._root); _TranslationsStreamJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusJa status = _TranslationsStreamStatusJa._(_root); @override late final _TranslationsStreamStatusJa status = _TranslationsStreamStatusJa._(_root);
@override String started({ required Object timestamp}) => '${timestamp} を開始'; @override String started({required Object timestamp}) => '${timestamp} を開始';
@override late final _TranslationsStreamChatJa chat = _TranslationsStreamChatJa._(_root); @override late final _TranslationsStreamChatJa chat = _TranslationsStreamChatJa._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalJa implements TranslationsGoalEn { class _TranslationsGoalJa extends TranslationsGoalEn {
_TranslationsGoalJa._(this._root); _TranslationsGoalJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => '目標額: ${amount}'; @override String title({required Object amount}) => '目標額: ${amount}';
@override String remaining({ required Object amount}) => '残り: ${amount}'; @override String remaining({required Object amount}) => '残り: ${amount}';
@override String get complete => '完了'; @override String get complete => '完了';
} }
// Path: button // Path: button
class _TranslationsButtonJa implements TranslationsButtonEn { class _TranslationsButtonJa extends TranslationsButtonEn {
_TranslationsButtonJa._(this._root); _TranslationsButtonJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonJa implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedJa implements TranslationsEmbedEn { class _TranslationsEmbedJa extends TranslationsEmbedEn {
_TranslationsEmbedJa._(this._root); _TranslationsEmbedJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => '記事: ${name}'; @override String article_by({required Object name}) => '記事: ${name}';
@override String note_by({ required Object name}) => '${name} の投稿'; @override String note_by({required Object name}) => '${name} の投稿';
@override String live_stream_by({ required Object name}) => 'ライブ・ストリーム ${name}'; @override String live_stream_by({required Object name}) => 'ライブ・ストリーム ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListJa implements TranslationsStreamListEn { class _TranslationsStreamListJa extends TranslationsStreamListEn {
_TranslationsStreamListJa._(this._root); _TranslationsStreamListJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListJa implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapJa implements TranslationsZapEn { class _TranslationsZapJa extends TranslationsZapEn {
_TranslationsZapJa._(this._root); _TranslationsZapJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object name}) => '${name} をザップ'; @override String title({required Object name}) => '${name} をザップ';
@override String get custom_amount => 'カスタム金額'; @override String get custom_amount => 'カスタム金額';
@override String get confirm => '確認'; @override String get confirm => '確認';
@override String get comment => 'コメント'; @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_zap => 'ザップ';
@override String get button_open_wallet => 'ウォレットで開く'; @override String get button_open_wallet => 'ウォレットで開く';
@override String get copy => 'クリップボードにコピー'; @override String get copy => 'クリップボードにコピー';
@ -163,8 +164,8 @@ class _TranslationsZapJa implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileJa implements TranslationsProfileEn { class _TranslationsProfileJa extends TranslationsProfileEn {
_TranslationsProfileJa._(this._root); _TranslationsProfileJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileJa implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginJa implements TranslationsLoginEn { class _TranslationsLoginJa extends TranslationsLoginEn {
_TranslationsLoginJa._(this._root); _TranslationsLoginJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginJa implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusJa implements TranslationsStreamStatusEn { class _TranslationsStreamStatusJa extends TranslationsStreamStatusEn {
_TranslationsStreamStatusJa._(this._root); _TranslationsStreamStatusJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusJa implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatJa implements TranslationsStreamChatEn { class _TranslationsStreamChatJa extends TranslationsStreamChatEn {
_TranslationsStreamChatJa._(this._root); _TranslationsStreamChatJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'チャット無効'; @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, mod,
const TextSpan(text: ' タイムアウト '), const TextSpan(text: ' タイムアウト '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// チャットの下にストリーム終了のフッター /// チャットの下にストリーム終了のフッター
@override String get ended => '配信終了'; @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, user,
const TextSpan(text: ''), const TextSpan(text: ''),
amount, amount,
const TextSpan(text: ' sats をザップしました'), const TextSpan(text: ' sats をザップしました'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteJa write = _TranslationsStreamChatWriteJa._(_root); @override late final _TranslationsStreamChatWriteJa write = _TranslationsStreamChatWriteJa._(_root);
@override late final _TranslationsStreamChatBadgeJa badge = _TranslationsStreamChatBadgeJa._(_root); @override late final _TranslationsStreamChatBadgeJa badge = _TranslationsStreamChatBadgeJa._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatJa implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorJa implements TranslationsZapErrorEn { class _TranslationsZapErrorJa extends TranslationsZapErrorEn {
_TranslationsZapErrorJa._(this._root); _TranslationsZapErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorJa implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditJa implements TranslationsProfileEditEn { class _TranslationsProfileEditJa extends TranslationsProfileEditEn {
_TranslationsProfileEditJa._(this._root); _TranslationsProfileEditJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditJa implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorJa implements TranslationsLoginErrorEn { class _TranslationsLoginErrorJa extends TranslationsLoginErrorEn {
_TranslationsLoginErrorJa._(this._root); _TranslationsLoginErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorJa implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteJa implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteJa extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteJa._(this._root); _TranslationsStreamChatWriteJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteJa implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeJa implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeJa extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeJa._(this._root); _TranslationsStreamChatBadgeJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeJa implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidJa implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidJa extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidJa._(this._root); _TranslationsStreamChatRaidJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
// Translations // 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorJa implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorJa extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorJa._(this._root); _TranslationsProfileEditErrorJa._(TranslationsJa root) : this._root = root, super.internal(root);
final TranslationsJa _root; // ignore: unused_field final TranslationsJa _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsJa {
case 'stream.status.live': return 'ライブ'; case 'stream.status.live': return 'ライブ';
case 'stream.status.ended': return '終了'; case 'stream.status.ended': return '終了';
case 'stream.status.planned': return '予定'; case 'stream.status.planned': return '予定';
case 'stream.started': return ({ required Object timestamp}) => '${timestamp} を開始'; case 'stream.started': return ({required Object timestamp}) => '${timestamp} を開始';
case 'stream.chat.disabled': return 'チャット無効'; case 'stream.chat.disabled': return 'チャット無効';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'タイムアウト: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'タイムアウト: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' タイムアウト '), const TextSpan(text: ' タイムアウト '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return '配信終了'; 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, user,
const TextSpan(text: ''), const TextSpan(text: ''),
amount, amount,
const TextSpan(text: ' sats をザップしました'), const TextSpan(text: ' sats をザップしました'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'メッセージを書く'; case 'stream.chat.write.label': return 'メッセージを書く';
case 'stream.chat.write.no_signer': return 'npubログインでメッセージが書けない'; case 'stream.chat.write.no_signer': return 'npubログインでメッセージが書けない';
case 'stream.chat.write.login': return 'メッセージを送信するにはログインしてください'; case 'stream.chat.write.login': return 'メッセージを送信するにはログインしてください';
case 'stream.chat.badge.awarded_to': return '受賞者'; case 'stream.chat.badge.awarded_to': return '受賞者';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => '${time}における襲撃'; case 'stream.chat.raid.countdown': return ({required Object time}) => '${time}における襲撃';
case 'goal.title': return ({ required Object amount}) => '目標額: ${amount}'; case 'goal.title': return ({required Object amount}) => '目標額: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => '残り: ${amount}'; case 'goal.remaining': return ({required Object amount}) => '残り: ${amount}';
case 'goal.complete': return '完了'; case 'goal.complete': return '完了';
case 'button.login': return 'ログイン'; case 'button.login': return 'ログイン';
case 'button.logout': return 'ログアウト'; case 'button.logout': return 'ログアウト';
@ -380,18 +381,18 @@ extension on TranslationsJa {
case 'button.unmute': return 'ミュート解除'; case 'button.unmute': return 'ミュート解除';
case 'button.share': return '共有'; case 'button.share': return '共有';
case 'button.save': return '保存'; case 'button.save': return '保存';
case 'embed.article_by': return ({ required Object name}) => '記事: ${name}'; case 'embed.article_by': return ({required Object name}) => '記事: ${name}';
case 'embed.note_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 'embed.live_stream_by': return ({required Object name}) => 'ライブ・ストリーム ${name}';
case 'stream_list.following': return 'フォロー中'; case 'stream_list.following': return 'フォロー中';
case 'stream_list.live': return 'ライブ配信中'; case 'stream_list.live': return 'ライブ配信中';
case 'stream_list.planned': return '予定あり'; case 'stream_list.planned': return '予定あり';
case 'stream_list.ended': 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.custom_amount': return 'カスタム金額';
case 'zap.confirm': return '確認'; case 'zap.confirm': return '確認';
case 'zap.comment': 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_zap': return 'ザップ';
case 'zap.button_open_wallet': return 'ウォレットで開く'; case 'zap.button_open_wallet': return 'ウォレットで開く';
case 'zap.copy': return 'クリップボードにコピー'; case 'zap.copy': return 'クリップボードにコピー';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsKo implements Translations { class TranslationsKo extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsKo({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsKo({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsKo implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsKo implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsKo _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsKo implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamKo implements TranslationsStreamEn { class _TranslationsStreamKo extends TranslationsStreamEn {
_TranslationsStreamKo._(this._root); _TranslationsStreamKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusKo status = _TranslationsStreamStatusKo._(_root); @override late final _TranslationsStreamStatusKo status = _TranslationsStreamStatusKo._(_root);
@override String started({ required Object timestamp}) => '시작 ${timestamp}'; @override String started({required Object timestamp}) => '시작 ${timestamp}';
@override late final _TranslationsStreamChatKo chat = _TranslationsStreamChatKo._(_root); @override late final _TranslationsStreamChatKo chat = _TranslationsStreamChatKo._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalKo implements TranslationsGoalEn { class _TranslationsGoalKo extends TranslationsGoalEn {
_TranslationsGoalKo._(this._root); _TranslationsGoalKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => '목표: ${amount}'; @override String title({required Object amount}) => '목표: ${amount}';
@override String remaining({ required Object amount}) => '남음: ${amount}'; @override String remaining({required Object amount}) => '남음: ${amount}';
@override String get complete => '완료'; @override String get complete => '완료';
} }
// Path: button // Path: button
class _TranslationsButtonKo implements TranslationsButtonEn { class _TranslationsButtonKo extends TranslationsButtonEn {
_TranslationsButtonKo._(this._root); _TranslationsButtonKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonKo implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedKo implements TranslationsEmbedEn { class _TranslationsEmbedKo extends TranslationsEmbedEn {
_TranslationsEmbedKo._(this._root); _TranslationsEmbedKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => '작성자: ${name}'; @override String article_by({required Object name}) => '작성자: ${name}';
@override String note_by({ required Object name}) => '노트 작성됨: ${name}'; @override String note_by({required Object name}) => '노트 작성됨: ${name}';
@override String live_stream_by({ required Object name}) => '라이브 스트리밍: ${name}'; @override String live_stream_by({required Object name}) => '라이브 스트리밍: ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListKo implements TranslationsStreamListEn { class _TranslationsStreamListKo extends TranslationsStreamListEn {
_TranslationsStreamListKo._(this._root); _TranslationsStreamListKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListKo implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapKo implements TranslationsZapEn { class _TranslationsZapKo extends TranslationsZapEn {
_TranslationsZapKo._(this._root); _TranslationsZapKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
// Translations // 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 custom_amount => '사용자 지정 금액';
@override String get confirm => '확인'; @override String get confirm => '확인';
@override String get comment => '댓글'; @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_zap => 'Zap';
@override String get button_open_wallet => '지갑에서 열기'; @override String get button_open_wallet => '지갑에서 열기';
@override String get copy => '클립보드에 복사'; @override String get copy => '클립보드에 복사';
@ -163,8 +164,8 @@ class _TranslationsZapKo implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileKo implements TranslationsProfileEn { class _TranslationsProfileKo extends TranslationsProfileEn {
_TranslationsProfileKo._(this._root); _TranslationsProfileKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileKo implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginKo implements TranslationsLoginEn { class _TranslationsLoginKo extends TranslationsLoginEn {
_TranslationsLoginKo._(this._root); _TranslationsLoginKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginKo implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusKo implements TranslationsStreamStatusEn { class _TranslationsStreamStatusKo extends TranslationsStreamStatusEn {
_TranslationsStreamStatusKo._(this._root); _TranslationsStreamStatusKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusKo implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatKo implements TranslationsStreamChatEn { class _TranslationsStreamChatKo extends TranslationsStreamChatEn {
_TranslationsStreamChatKo._(this._root); _TranslationsStreamChatKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => '채팅 사용 안 함'; @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, mod,
const TextSpan(text: ' 시간 초과됨 '), const TextSpan(text: ' 시간 초과됨 '),
user, user,
const TextSpan(text: ' '), const TextSpan(text: ' '),
time, time,
], style: style, recognizer: recognizer); ]);
/// 채팅 하단의 스트림 종료 푸터 /// 채팅 하단의 스트림 종료 푸터
@override String get ended => '스트림 종료'; @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, user,
const TextSpan(text: ' ZAPP '), const TextSpan(text: ' ZAPP '),
amount, amount,
const TextSpan(text: ' SATS'), const TextSpan(text: ' SATS'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteKo write = _TranslationsStreamChatWriteKo._(_root); @override late final _TranslationsStreamChatWriteKo write = _TranslationsStreamChatWriteKo._(_root);
@override late final _TranslationsStreamChatBadgeKo badge = _TranslationsStreamChatBadgeKo._(_root); @override late final _TranslationsStreamChatBadgeKo badge = _TranslationsStreamChatBadgeKo._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatKo implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorKo implements TranslationsZapErrorEn { class _TranslationsZapErrorKo extends TranslationsZapErrorEn {
_TranslationsZapErrorKo._(this._root); _TranslationsZapErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorKo implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditKo implements TranslationsProfileEditEn { class _TranslationsProfileEditKo extends TranslationsProfileEditEn {
_TranslationsProfileEditKo._(this._root); _TranslationsProfileEditKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditKo implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorKo implements TranslationsLoginErrorEn { class _TranslationsLoginErrorKo extends TranslationsLoginErrorEn {
_TranslationsLoginErrorKo._(this._root); _TranslationsLoginErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorKo implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteKo implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteKo extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteKo._(this._root); _TranslationsStreamChatWriteKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteKo implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeKo implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeKo extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeKo._(this._root); _TranslationsStreamChatBadgeKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeKo implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidKo implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidKo extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidKo._(this._root); _TranslationsStreamChatRaidKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
// Translations // 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorKo implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorKo extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorKo._(this._root); _TranslationsProfileEditErrorKo._(TranslationsKo root) : this._root = root, super.internal(root);
final TranslationsKo _root; // ignore: unused_field final TranslationsKo _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsKo {
case 'stream.status.live': return '라이브'; case 'stream.status.live': return '라이브';
case 'stream.status.ended': return '종료'; case 'stream.status.ended': return '종료';
case 'stream.status.planned': return '계획된'; case 'stream.status.planned': return '계획된';
case 'stream.started': return ({ required Object timestamp}) => '시작 ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => '시작 ${timestamp}';
case 'stream.chat.disabled': return '채팅 사용 안 함'; case 'stream.chat.disabled': return '채팅 사용 안 함';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => '시간 초과가 만료되었습니다: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => '시간 초과가 만료되었습니다: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' 시간 초과됨 '), const TextSpan(text: ' 시간 초과됨 '),
user, user,
const TextSpan(text: ' '), const TextSpan(text: ' '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return '스트림 종료'; 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, user,
const TextSpan(text: ' ZAPP '), const TextSpan(text: ' ZAPP '),
amount, amount,
const TextSpan(text: ' SATS'), const TextSpan(text: ' SATS'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return '메시지 작성'; case 'stream.chat.write.label': return '메시지 작성';
case 'stream.chat.write.no_signer': return 'npub 로그인으로 메시지를 작성할 수 없습니다.'; case 'stream.chat.write.no_signer': return 'npub 로그인으로 메시지를 작성할 수 없습니다.';
case 'stream.chat.write.login': return '메시지를 보내려면 로그인하세요.'; case 'stream.chat.write.login': return '메시지를 보내려면 로그인하세요.';
case 'stream.chat.badge.awarded_to': return '수상 대상'; case 'stream.chat.badge.awarded_to': return '수상 대상';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDing ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDing ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => '${time}에서 레이드'; case 'stream.chat.raid.countdown': return ({required Object time}) => '${time}에서 레이드';
case 'goal.title': return ({ required Object amount}) => '목표: ${amount}'; case 'goal.title': return ({required Object amount}) => '목표: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => '남음: ${amount}'; case 'goal.remaining': return ({required Object amount}) => '남음: ${amount}';
case 'goal.complete': return '완료'; case 'goal.complete': return '완료';
case 'button.login': return '로그인'; case 'button.login': return '로그인';
case 'button.logout': return '로그아웃'; case 'button.logout': return '로그아웃';
@ -380,18 +381,18 @@ extension on TranslationsKo {
case 'button.unmute': return '뮤트 해제'; case 'button.unmute': return '뮤트 해제';
case 'button.share': return '공유'; case 'button.share': return '공유';
case 'button.save': return '저장'; case 'button.save': return '저장';
case 'embed.article_by': return ({ required Object name}) => '작성자: ${name}'; case 'embed.article_by': return ({required Object name}) => '작성자: ${name}';
case 'embed.note_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 'embed.live_stream_by': return ({required Object name}) => '라이브 스트리밍: ${name}';
case 'stream_list.following': return '팔로잉'; case 'stream_list.following': return '팔로잉';
case 'stream_list.live': return '라이브'; case 'stream_list.live': return '라이브';
case 'stream_list.planned': return '계획된'; case 'stream_list.planned': return '계획된';
case 'stream_list.ended': 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.custom_amount': return '사용자 지정 금액';
case 'zap.confirm': return '확인'; case 'zap.confirm': return '확인';
case 'zap.comment': 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_zap': return 'Zap';
case 'zap.button_open_wallet': return '지갑에서 열기'; case 'zap.button_open_wallet': return '지갑에서 열기';
case 'zap.copy': return '클립보드에 복사'; case 'zap.copy': return '클립보드에 복사';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsNl implements Translations { class TranslationsNl extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsNl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsNl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsNl implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsNl implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsNl _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsNl implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamNl implements TranslationsStreamEn { class _TranslationsStreamNl extends TranslationsStreamEn {
_TranslationsStreamNl._(this._root); _TranslationsStreamNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusNl status = _TranslationsStreamStatusNl._(_root); @override late final _TranslationsStreamStatusNl status = _TranslationsStreamStatusNl._(_root);
@override String started({ required Object timestamp}) => 'Begonnen met ${timestamp}'; @override String started({required Object timestamp}) => 'Begonnen met ${timestamp}';
@override late final _TranslationsStreamChatNl chat = _TranslationsStreamChatNl._(_root); @override late final _TranslationsStreamChatNl chat = _TranslationsStreamChatNl._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalNl implements TranslationsGoalEn { class _TranslationsGoalNl extends TranslationsGoalEn {
_TranslationsGoalNl._(this._root); _TranslationsGoalNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Doel: ${amount}'; @override String title({required Object amount}) => 'Doel: ${amount}';
@override String remaining({ required Object amount}) => 'Overblijvend: ${amount}'; @override String remaining({required Object amount}) => 'Overblijvend: ${amount}';
@override String get complete => 'COMPLETE'; @override String get complete => 'COMPLETE';
} }
// Path: button // Path: button
class _TranslationsButtonNl implements TranslationsButtonEn { class _TranslationsButtonNl extends TranslationsButtonEn {
_TranslationsButtonNl._(this._root); _TranslationsButtonNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonNl implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedNl implements TranslationsEmbedEn { class _TranslationsEmbedNl extends TranslationsEmbedEn {
_TranslationsEmbedNl._(this._root); _TranslationsEmbedNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Artikel door ${name}'; @override String article_by({required Object name}) => 'Artikel door ${name}';
@override String note_by({ required Object name}) => 'Opmerking 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 live_stream_by({required Object name}) => 'Live stream via ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListNl implements TranslationsStreamListEn { class _TranslationsStreamListNl extends TranslationsStreamListEn {
_TranslationsStreamListNl._(this._root); _TranslationsStreamListNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListNl implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapNl implements TranslationsZapEn { class _TranslationsZapNl extends TranslationsZapEn {
_TranslationsZapNl._(this._root); _TranslationsZapNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Aangepast bedrag';
@override String get confirm => 'Bevestig'; @override String get confirm => 'Bevestig';
@override String get comment => 'Opmerking'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Openen in portefeuille'; @override String get button_open_wallet => 'Openen in portefeuille';
@override String get copy => 'Gekopieerd naar klembord'; @override String get copy => 'Gekopieerd naar klembord';
@ -163,8 +164,8 @@ class _TranslationsZapNl implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileNl implements TranslationsProfileEn { class _TranslationsProfileNl extends TranslationsProfileEn {
_TranslationsProfileNl._(this._root); _TranslationsProfileNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileNl implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginNl implements TranslationsLoginEn { class _TranslationsLoginNl extends TranslationsLoginEn {
_TranslationsLoginNl._(this._root); _TranslationsLoginNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginNl implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusNl implements TranslationsStreamStatusEn { class _TranslationsStreamStatusNl extends TranslationsStreamStatusEn {
_TranslationsStreamStatusNl._(this._root); _TranslationsStreamStatusNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusNl implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatNl implements TranslationsStreamChatEn { class _TranslationsStreamChatNl extends TranslationsStreamChatEn {
_TranslationsStreamChatNl._(this._root); _TranslationsStreamChatNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT UITGESCHAKELD'; @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 /// 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, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' voor '), const TextSpan(text: ' voor '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Voettekst einde stream onderaan chat /// Voettekst einde stream onderaan chat
@override String get ended => 'STREAM BEËINDIGD'; @override String get ended => 'STREAM BEËINDIGD';
/// Chatbericht met stream zaps /// 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteNl write = _TranslationsStreamChatWriteNl._(_root); @override late final _TranslationsStreamChatWriteNl write = _TranslationsStreamChatWriteNl._(_root);
@override late final _TranslationsStreamChatBadgeNl badge = _TranslationsStreamChatBadgeNl._(_root); @override late final _TranslationsStreamChatBadgeNl badge = _TranslationsStreamChatBadgeNl._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatNl implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorNl implements TranslationsZapErrorEn { class _TranslationsZapErrorNl extends TranslationsZapErrorEn {
_TranslationsZapErrorNl._(this._root); _TranslationsZapErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorNl implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditNl implements TranslationsProfileEditEn { class _TranslationsProfileEditNl extends TranslationsProfileEditEn {
_TranslationsProfileEditNl._(this._root); _TranslationsProfileEditNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditNl implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorNl implements TranslationsLoginErrorEn { class _TranslationsLoginErrorNl extends TranslationsLoginErrorEn {
_TranslationsLoginErrorNl._(this._root); _TranslationsLoginErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorNl implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteNl implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteNl extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteNl._(this._root); _TranslationsStreamChatWriteNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteNl implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeNl implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeNl extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeNl._(this._root); _TranslationsStreamChatBadgeNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeNl implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidNl implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidNl extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidNl._(this._root); _TranslationsStreamChatRaidNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
// Translations // Translations
/// Chat raid bericht naar een andere stream /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorNl implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorNl extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorNl._(this._root); _TranslationsProfileEditErrorNl._(TranslationsNl root) : this._root = root, super.internal(root);
final TranslationsNl _root; // ignore: unused_field final TranslationsNl _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsNl {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'GESLOTEN'; case 'stream.status.ended': return 'GESLOTEN';
case 'stream.status.planned': return 'GEPLAND'; case 'stream.status.planned': return 'GEPLAND';
case 'stream.started': return ({ required Object timestamp}) => 'Begonnen met ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Begonnen met ${timestamp}';
case 'stream.chat.disabled': return 'CHAT UITGESCHAKELD'; case 'stream.chat.disabled': return 'CHAT UITGESCHAKELD';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Time-out loopt af: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Time-out loopt af: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' voor '), const TextSpan(text: ' voor '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM BEËINDIGD'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Schrijf bericht'; 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.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.write.login': return 'Log in om berichten te verzenden';
case 'stream.chat.badge.awarded_to': return 'Toegekend aan:'; case 'stream.chat.badge.awarded_to': return 'Toegekend aan:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID VAN ${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 'stream.chat.raid.countdown': return ({required Object time}) => 'Overvallen in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Doel: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Doel: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Overblijvend: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Overblijvend: ${amount}';
case 'goal.complete': return 'COMPLETE'; case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Inloggen'; case 'button.login': return 'Inloggen';
case 'button.logout': return 'Uitloggen'; case 'button.logout': return 'Uitloggen';
@ -380,18 +381,18 @@ extension on TranslationsNl {
case 'button.unmute': return 'Niet langer negeren'; case 'button.unmute': return 'Niet langer negeren';
case 'button.share': return 'Deel'; case 'button.share': return 'Deel';
case 'button.save': return 'Opslaan'; case 'button.save': return 'Opslaan';
case 'embed.article_by': return ({ required Object name}) => 'Artikel door ${name}'; case 'embed.article_by': return ({required Object name}) => 'Artikel door ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Opmerking 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 'embed.live_stream_by': return ({required Object name}) => 'Live stream via ${name}';
case 'stream_list.following': return 'Volgt'; case 'stream_list.following': return 'Volgt';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Gepland'; case 'stream_list.planned': return 'Gepland';
case 'stream_list.ended': return 'Beëindigd'; 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.custom_amount': return 'Aangepast bedrag';
case 'zap.confirm': return 'Bevestig'; case 'zap.confirm': return 'Bevestig';
case 'zap.comment': return 'Opmerking'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Openen in portefeuille'; case 'zap.button_open_wallet': return 'Openen in portefeuille';
case 'zap.copy': return 'Gekopieerd naar klembord'; case 'zap.copy': return 'Gekopieerd naar klembord';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsNo implements Translations { class TranslationsNo extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsNo({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsNo({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsNo implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsNo implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 TranslationsNo _root = this; // ignore: unused_field late final TranslationsNo _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsNo implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamNo implements TranslationsStreamEn { class _TranslationsStreamNo extends TranslationsStreamEn {
_TranslationsStreamNo._(this._root); _TranslationsStreamNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusNo status = _TranslationsStreamStatusNo._(_root); @override late final _TranslationsStreamStatusNo status = _TranslationsStreamStatusNo._(_root);
@override String started({ required Object timestamp}) => 'Started ${timestamp}'; @override String started({required Object timestamp}) => 'Started ${timestamp}';
@override late final _TranslationsStreamChatNo chat = _TranslationsStreamChatNo._(_root); @override late final _TranslationsStreamChatNo chat = _TranslationsStreamChatNo._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalNo implements TranslationsGoalEn { class _TranslationsGoalNo extends TranslationsGoalEn {
_TranslationsGoalNo._(this._root); _TranslationsGoalNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Goal: ${amount}'; @override String title({required Object amount}) => 'Goal: ${amount}';
@override String remaining({ required Object amount}) => 'Remaining: ${amount}'; @override String remaining({required Object amount}) => 'Remaining: ${amount}';
@override String get complete => 'COMPLETE'; @override String get complete => 'COMPLETE';
} }
// Path: button // Path: button
class _TranslationsButtonNo implements TranslationsButtonEn { class _TranslationsButtonNo extends TranslationsButtonEn {
_TranslationsButtonNo._(this._root); _TranslationsButtonNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonNo implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedNo implements TranslationsEmbedEn { class _TranslationsEmbedNo extends TranslationsEmbedEn {
_TranslationsEmbedNo._(this._root); _TranslationsEmbedNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Article by ${name}'; @override String article_by({required Object name}) => 'Article by ${name}';
@override String note_by({ required Object name}) => 'Note by ${name}'; @override String note_by({required Object name}) => 'Note by ${name}';
@override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; @override String live_stream_by({required Object name}) => 'Live stream by ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListNo implements TranslationsStreamListEn { class _TranslationsStreamListNo extends TranslationsStreamListEn {
_TranslationsStreamListNo._(this._root); _TranslationsStreamListNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListNo implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapNo implements TranslationsZapEn { class _TranslationsZapNo extends TranslationsZapEn {
_TranslationsZapNo._(this._root); _TranslationsZapNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object name}) => 'Zap ${name}'; @override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Custom Amount'; @override String get custom_amount => 'Custom Amount';
@override String get confirm => 'Confirm'; @override String get confirm => 'Confirm';
@override String get comment => 'Comment'; @override String get comment => '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_zap => 'Zap';
@override String get button_open_wallet => 'Open in Wallet'; @override String get button_open_wallet => 'Open in Wallet';
@override String get copy => 'Copied to clipboard'; @override String get copy => 'Copied to clipboard';
@ -163,8 +164,8 @@ class _TranslationsZapNo implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileNo implements TranslationsProfileEn { class _TranslationsProfileNo extends TranslationsProfileEn {
_TranslationsProfileNo._(this._root); _TranslationsProfileNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileNo implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginNo implements TranslationsLoginEn { class _TranslationsLoginNo extends TranslationsLoginEn {
_TranslationsLoginNo._(this._root); _TranslationsLoginNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginNo implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusNo implements TranslationsStreamStatusEn { class _TranslationsStreamStatusNo extends TranslationsStreamStatusEn {
_TranslationsStreamStatusNo._(this._root); _TranslationsStreamStatusNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusNo implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatNo implements TranslationsStreamChatEn { class _TranslationsStreamChatNo extends TranslationsStreamChatEn {
_TranslationsStreamChatNo._(this._root); _TranslationsStreamChatNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DISABLED'; @override String get disabled => 'CHAT DISABLED';
@override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; @override String disabled_timeout({required Object time}) => 'Timeout expires: ${time}';
/// Chat message showing timeout events /// Chat message showing timeout events
@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, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream ended footer at bottom of chat /// Stream ended footer at bottom of chat
@override String get ended => 'STREAM ENDED'; @override String get ended => 'STREAM ENDED';
/// Chat message showing stream zaps /// Chat message showing 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteNo write = _TranslationsStreamChatWriteNo._(_root); @override late final _TranslationsStreamChatWriteNo write = _TranslationsStreamChatWriteNo._(_root);
@override late final _TranslationsStreamChatBadgeNo badge = _TranslationsStreamChatBadgeNo._(_root); @override late final _TranslationsStreamChatBadgeNo badge = _TranslationsStreamChatBadgeNo._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatNo implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorNo implements TranslationsZapErrorEn { class _TranslationsZapErrorNo extends TranslationsZapErrorEn {
_TranslationsZapErrorNo._(this._root); _TranslationsZapErrorNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorNo implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditNo implements TranslationsProfileEditEn { class _TranslationsProfileEditNo extends TranslationsProfileEditEn {
_TranslationsProfileEditNo._(this._root); _TranslationsProfileEditNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditNo implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorNo implements TranslationsLoginErrorEn { class _TranslationsLoginErrorNo extends TranslationsLoginErrorEn {
_TranslationsLoginErrorNo._(this._root); _TranslationsLoginErrorNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorNo implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteNo implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteNo extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteNo._(this._root); _TranslationsStreamChatWriteNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteNo implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeNo implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeNo extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeNo._(this._root); _TranslationsStreamChatBadgeNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeNo implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidNo implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidNo extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidNo._(this._root); _TranslationsStreamChatRaidNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
// Translations // Translations
/// Chat raid message to another stream /// Chat raid message to another stream
@override String to({ required Object name}) => 'RAIDING ${name}'; @override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid message from another stream /// Chat raid message from another stream
@override String from({ required Object name}) => 'RAID FROM ${name}'; @override String from({required Object name}) => 'RAID FROM ${name}';
/// Countdown timer for auto-raiding /// Countdown timer for auto-raiding
@override String countdown({ required Object time}) => 'Raiding in ${time}'; @override String countdown({required Object time}) => 'Raiding in ${time}';
} }
// Path: profile.edit.error // Path: profile.edit.error
class _TranslationsProfileEditErrorNo implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorNo extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorNo._(this._root); _TranslationsProfileEditErrorNo._(TranslationsNo root) : this._root = root, super.internal(root);
final TranslationsNo _root; // ignore: unused_field final TranslationsNo _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsNo {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'PLANNED'; case 'stream.status.planned': return 'PLANNED';
case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Started ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABLED'; case 'stream.chat.disabled': return 'CHAT DISABLED';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout expires: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ENDED'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Write message'; 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.no_signer': return 'Can\'t write messages with npub login';
case 'stream.chat.write.login': return 'Please login to send messages'; case 'stream.chat.write.login': return 'Please login to send messages';
case 'stream.chat.badge.awarded_to': return 'Awarded to:'; case 'stream.chat.badge.awarded_to': return 'Awarded to:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Goal: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Remaining: ${amount}';
case 'goal.complete': return 'COMPLETE'; case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Login'; case 'button.login': return 'Login';
case 'button.logout': return 'Logout'; case 'button.logout': return 'Logout';
@ -380,18 +381,18 @@ extension on TranslationsNo {
case 'button.unmute': return 'Unmute'; case 'button.unmute': return 'Unmute';
case 'button.share': return 'Share'; case 'button.share': return 'Share';
case 'button.save': return 'Save'; case 'button.save': return 'Save';
case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; case 'embed.article_by': return ({required Object name}) => 'Article by ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note 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 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return 'Following'; case 'stream_list.following': return 'Following';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planned'; case 'stream_list.planned': return 'Planned';
case 'stream_list.ended': return 'Ended'; 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.custom_amount': return 'Custom Amount';
case 'zap.confirm': return 'Confirm'; case 'zap.confirm': return 'Confirm';
case 'zap.comment': return 'Comment'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Open in Wallet'; case 'zap.button_open_wallet': return 'Open in Wallet';
case 'zap.copy': return 'Copied to clipboard'; case 'zap.copy': return 'Copied to clipboard';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsPl implements Translations { class TranslationsPl extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsPl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsPl({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsPl implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsPl implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsPl _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsPl implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamPl implements TranslationsStreamEn { class _TranslationsStreamPl extends TranslationsStreamEn {
_TranslationsStreamPl._(this._root); _TranslationsStreamPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusPl status = _TranslationsStreamStatusPl._(_root); @override late final _TranslationsStreamStatusPl status = _TranslationsStreamStatusPl._(_root);
@override String started({ required Object timestamp}) => 'Start ${timestamp}'; @override String started({required Object timestamp}) => 'Start ${timestamp}';
@override late final _TranslationsStreamChatPl chat = _TranslationsStreamChatPl._(_root); @override late final _TranslationsStreamChatPl chat = _TranslationsStreamChatPl._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalPl implements TranslationsGoalEn { class _TranslationsGoalPl extends TranslationsGoalEn {
_TranslationsGoalPl._(this._root); _TranslationsGoalPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Cel: ${amount}'; @override String title({required Object amount}) => 'Cel: ${amount}';
@override String remaining({ required Object amount}) => 'Pozostałe: ${amount}'; @override String remaining({required Object amount}) => 'Pozostałe: ${amount}';
@override String get complete => 'ZAKOŃCZONE'; @override String get complete => 'ZAKOŃCZONE';
} }
// Path: button // Path: button
class _TranslationsButtonPl implements TranslationsButtonEn { class _TranslationsButtonPl extends TranslationsButtonEn {
_TranslationsButtonPl._(this._root); _TranslationsButtonPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonPl implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedPl implements TranslationsEmbedEn { class _TranslationsEmbedPl extends TranslationsEmbedEn {
_TranslationsEmbedPl._(this._root); _TranslationsEmbedPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Artykuł autorstwa ${name}'; @override String article_by({required Object name}) => 'Artykuł autorstwa ${name}';
@override String note_by({ required Object name}) => 'Uwaga ${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 live_stream_by({required Object name}) => 'Transmisja na żywo przez ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListPl implements TranslationsStreamListEn { class _TranslationsStreamListPl extends TranslationsStreamListEn {
_TranslationsStreamListPl._(this._root); _TranslationsStreamListPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListPl implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapPl implements TranslationsZapEn { class _TranslationsZapPl extends TranslationsZapEn {
_TranslationsZapPl._(this._root); _TranslationsZapPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Kwota niestandardowa';
@override String get confirm => 'Potwierdzenie'; @override String get confirm => 'Potwierdzenie';
@override String get comment => 'Komentarz'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Otwórz w portfelu'; @override String get button_open_wallet => 'Otwórz w portfelu';
@override String get copy => 'Skopiowane do schowka'; @override String get copy => 'Skopiowane do schowka';
@ -163,8 +164,8 @@ class _TranslationsZapPl implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfilePl implements TranslationsProfileEn { class _TranslationsProfilePl extends TranslationsProfileEn {
_TranslationsProfilePl._(this._root); _TranslationsProfilePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfilePl implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginPl implements TranslationsLoginEn { class _TranslationsLoginPl extends TranslationsLoginEn {
_TranslationsLoginPl._(this._root); _TranslationsLoginPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginPl implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusPl implements TranslationsStreamStatusEn { class _TranslationsStreamStatusPl extends TranslationsStreamStatusEn {
_TranslationsStreamStatusPl._(this._root); _TranslationsStreamStatusPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusPl implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatPl implements TranslationsStreamChatEn { class _TranslationsStreamChatPl extends TranslationsStreamChatEn {
_TranslationsStreamChatPl._(this._root); _TranslationsStreamChatPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CZAT WYŁĄCZONY'; @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 /// 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, mod,
const TextSpan(text: ' upłynął limit czasu '), const TextSpan(text: ' upłynął limit czasu '),
user, user,
const TextSpan(text: ' dla '), const TextSpan(text: ' dla '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream zakończył stopkę na dole czatu /// Stream zakończył stopkę na dole czatu
@override String get ended => 'TRANSMISJA ZAKOŃCZONA'; @override String get ended => 'TRANSMISJA ZAKOŃCZONA';
/// Wiadomość na czacie pokazująca zapy strumienia /// 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWritePl write = _TranslationsStreamChatWritePl._(_root); @override late final _TranslationsStreamChatWritePl write = _TranslationsStreamChatWritePl._(_root);
@override late final _TranslationsStreamChatBadgePl badge = _TranslationsStreamChatBadgePl._(_root); @override late final _TranslationsStreamChatBadgePl badge = _TranslationsStreamChatBadgePl._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatPl implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorPl implements TranslationsZapErrorEn { class _TranslationsZapErrorPl extends TranslationsZapErrorEn {
_TranslationsZapErrorPl._(this._root); _TranslationsZapErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorPl implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditPl implements TranslationsProfileEditEn { class _TranslationsProfileEditPl extends TranslationsProfileEditEn {
_TranslationsProfileEditPl._(this._root); _TranslationsProfileEditPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditPl implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorPl implements TranslationsLoginErrorEn { class _TranslationsLoginErrorPl extends TranslationsLoginErrorEn {
_TranslationsLoginErrorPl._(this._root); _TranslationsLoginErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorPl implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWritePl implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWritePl extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWritePl._(this._root); _TranslationsStreamChatWritePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWritePl implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgePl implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgePl extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgePl._(this._root); _TranslationsStreamChatBadgePl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgePl implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidPl implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidPl extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidPl._(this._root); _TranslationsStreamChatRaidPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
// Translations // Translations
/// Przesyłanie wiadomości na czacie do innego strumienia /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorPl implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorPl extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorPl._(this._root); _TranslationsProfileEditErrorPl._(TranslationsPl root) : this._root = root, super.internal(root);
final TranslationsPl _root; // ignore: unused_field final TranslationsPl _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsPl {
case 'stream.status.live': return 'NA ŻYWO'; case 'stream.status.live': return 'NA ŻYWO';
case 'stream.status.ended': return 'ZAKOŃCZONY'; case 'stream.status.ended': return 'ZAKOŃCZONY';
case 'stream.status.planned': return 'PLANOWANE'; case 'stream.status.planned': return 'PLANOWANE';
case 'stream.started': return ({ required Object timestamp}) => 'Start ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Start ${timestamp}';
case 'stream.chat.disabled': return 'CZAT WYŁĄCZONY'; case 'stream.chat.disabled': return 'CZAT WYŁĄCZONY';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Upłynął limit czasu: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Upłynął limit czasu: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' upłynął limit czasu '), const TextSpan(text: ' upłynął limit czasu '),
user, user,
const TextSpan(text: ' dla '), const TextSpan(text: ' dla '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'TRANSMISJA ZAKOŃCZONA'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Napisz wiadomość'; 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.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.write.login': return 'Zaloguj się, aby wysyłać wiadomości';
case 'stream.chat.badge.awarded_to': return 'Przyznano:'; case 'stream.chat.badge.awarded_to': return 'Przyznano:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID Z ${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 'stream.chat.raid.countdown': return ({required Object time}) => 'Naloty w ${time}';
case 'goal.title': return ({ required Object amount}) => 'Cel: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Cel: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Pozostałe: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Pozostałe: ${amount}';
case 'goal.complete': return 'ZAKOŃCZONE'; case 'goal.complete': return 'ZAKOŃCZONE';
case 'button.login': return 'Logowanie'; case 'button.login': return 'Logowanie';
case 'button.logout': return 'Wylogowanie'; case 'button.logout': return 'Wylogowanie';
@ -380,18 +381,18 @@ extension on TranslationsPl {
case 'button.unmute': return 'Wyłącz wyciszenie'; case 'button.unmute': return 'Wyłącz wyciszenie';
case 'button.share': return 'Udział'; case 'button.share': return 'Udział';
case 'button.save': return 'Zapisz'; case 'button.save': return 'Zapisz';
case 'embed.article_by': return ({ required Object name}) => 'Artykuł autorstwa ${name}'; case 'embed.article_by': return ({required Object name}) => 'Artykuł autorstwa ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Uwaga ${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 'embed.live_stream_by': return ({required Object name}) => 'Transmisja na żywo przez ${name}';
case 'stream_list.following': return 'Następujący'; case 'stream_list.following': return 'Następujący';
case 'stream_list.live': return 'Na żywo'; case 'stream_list.live': return 'Na żywo';
case 'stream_list.planned': return 'Planowane'; case 'stream_list.planned': return 'Planowane';
case 'stream_list.ended': return 'Zakończony'; 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.custom_amount': return 'Kwota niestandardowa';
case 'zap.confirm': return 'Potwierdzenie'; case 'zap.confirm': return 'Potwierdzenie';
case 'zap.comment': return 'Komentarz'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Otwórz w portfelu'; case 'zap.button_open_wallet': return 'Otwórz w portfelu';
case 'zap.copy': return 'Skopiowane do schowka'; case 'zap.copy': return 'Skopiowane do schowka';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsPt implements Translations { class TranslationsPt extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsPt({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsPt({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsPt implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsPt implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsPt _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsPt implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamPt implements TranslationsStreamEn { class _TranslationsStreamPt extends TranslationsStreamEn {
_TranslationsStreamPt._(this._root); _TranslationsStreamPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusPt status = _TranslationsStreamStatusPt._(_root); @override late final _TranslationsStreamStatusPt status = _TranslationsStreamStatusPt._(_root);
@override String started({ required Object timestamp}) => 'Iniciado em ${timestamp}'; @override String started({required Object timestamp}) => 'Iniciado em ${timestamp}';
@override late final _TranslationsStreamChatPt chat = _TranslationsStreamChatPt._(_root); @override late final _TranslationsStreamChatPt chat = _TranslationsStreamChatPt._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalPt implements TranslationsGoalEn { class _TranslationsGoalPt extends TranslationsGoalEn {
_TranslationsGoalPt._(this._root); _TranslationsGoalPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Meta: ${amount}'; @override String title({required Object amount}) => 'Meta: ${amount}';
@override String remaining({ required Object amount}) => 'Restante: ${amount}'; @override String remaining({required Object amount}) => 'Restante: ${amount}';
@override String get complete => 'COMPLETO'; @override String get complete => 'COMPLETO';
} }
// Path: button // Path: button
class _TranslationsButtonPt implements TranslationsButtonEn { class _TranslationsButtonPt extends TranslationsButtonEn {
_TranslationsButtonPt._(this._root); _TranslationsButtonPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonPt implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedPt implements TranslationsEmbedEn { class _TranslationsEmbedPt extends TranslationsEmbedEn {
_TranslationsEmbedPt._(this._root); _TranslationsEmbedPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Artigo de ${name}'; @override String article_by({required Object name}) => 'Artigo de ${name}';
@override String note_by({ required Object name}) => 'Nota 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 live_stream_by({required Object name}) => 'Transmissão ao vivo pelo site ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListPt implements TranslationsStreamListEn { class _TranslationsStreamListPt extends TranslationsStreamListEn {
_TranslationsStreamListPt._(this._root); _TranslationsStreamListPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListPt implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapPt implements TranslationsZapEn { class _TranslationsZapPt extends TranslationsZapEn {
_TranslationsZapPt._(this._root); _TranslationsZapPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Valor personalizado';
@override String get confirm => 'Confirmar'; @override String get confirm => 'Confirmar';
@override String get comment => 'Comentar'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Abrir na carteira'; @override String get button_open_wallet => 'Abrir na carteira';
@override String get copy => 'Copiado para a área de transferência'; @override String get copy => 'Copiado para a área de transferência';
@ -163,8 +164,8 @@ class _TranslationsZapPt implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfilePt implements TranslationsProfileEn { class _TranslationsProfilePt extends TranslationsProfileEn {
_TranslationsProfilePt._(this._root); _TranslationsProfilePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfilePt implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginPt implements TranslationsLoginEn { class _TranslationsLoginPt extends TranslationsLoginEn {
_TranslationsLoginPt._(this._root); _TranslationsLoginPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginPt implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusPt implements TranslationsStreamStatusEn { class _TranslationsStreamStatusPt extends TranslationsStreamStatusEn {
_TranslationsStreamStatusPt._(this._root); _TranslationsStreamStatusPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusPt implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatPt implements TranslationsStreamChatEn { class _TranslationsStreamChatPt extends TranslationsStreamChatEn {
_TranslationsStreamChatPt._(this._root); _TranslationsStreamChatPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'BATE-PAPO DESATIVADO'; @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 /// 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, mod,
const TextSpan(text: ' Tempo esgotado '), const TextSpan(text: ' Tempo esgotado '),
user, user,
const TextSpan(text: ' para '), const TextSpan(text: ' para '),
time, time,
], style: style, recognizer: recognizer); ]);
/// O rodapé do fluxo terminou na parte inferior do bate-papo /// O rodapé do fluxo terminou na parte inferior do bate-papo
@override String get ended => 'TRANSMISSÃO ENCERRADA'; @override String get ended => 'TRANSMISSÃO ENCERRADA';
/// Mensagem de bate-papo mostrando zaps de fluxo /// 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, user,
const TextSpan(text: ' zapeou '), const TextSpan(text: ' zapeou '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWritePt write = _TranslationsStreamChatWritePt._(_root); @override late final _TranslationsStreamChatWritePt write = _TranslationsStreamChatWritePt._(_root);
@override late final _TranslationsStreamChatBadgePt badge = _TranslationsStreamChatBadgePt._(_root); @override late final _TranslationsStreamChatBadgePt badge = _TranslationsStreamChatBadgePt._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatPt implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorPt implements TranslationsZapErrorEn { class _TranslationsZapErrorPt extends TranslationsZapErrorEn {
_TranslationsZapErrorPt._(this._root); _TranslationsZapErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorPt implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditPt implements TranslationsProfileEditEn { class _TranslationsProfileEditPt extends TranslationsProfileEditEn {
_TranslationsProfileEditPt._(this._root); _TranslationsProfileEditPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditPt implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorPt implements TranslationsLoginErrorEn { class _TranslationsLoginErrorPt extends TranslationsLoginErrorEn {
_TranslationsLoginErrorPt._(this._root); _TranslationsLoginErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorPt implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWritePt implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWritePt extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWritePt._(this._root); _TranslationsStreamChatWritePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWritePt implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgePt implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgePt extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgePt._(this._root); _TranslationsStreamChatBadgePt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgePt implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidPt implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidPt extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidPt._(this._root); _TranslationsStreamChatRaidPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
// Translations // Translations
/// Mensagem de invasão de bate-papo para outro fluxo /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorPt implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorPt extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorPt._(this._root); _TranslationsProfileEditErrorPt._(TranslationsPt root) : this._root = root, super.internal(root);
final TranslationsPt _root; // ignore: unused_field final TranslationsPt _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsPt {
case 'stream.status.live': return 'AO VIVO'; case 'stream.status.live': return 'AO VIVO';
case 'stream.status.ended': return 'FINALIZADO'; case 'stream.status.ended': return 'FINALIZADO';
case 'stream.status.planned': return 'PLANEJADO'; case 'stream.status.planned': return 'PLANEJADO';
case 'stream.started': return ({ required Object timestamp}) => 'Iniciado em ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Iniciado em ${timestamp}';
case 'stream.chat.disabled': return 'BATE-PAPO DESATIVADO'; case 'stream.chat.disabled': return 'BATE-PAPO DESATIVADO';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'O tempo limite expira: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'O tempo limite expira: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' Tempo esgotado '), const TextSpan(text: ' Tempo esgotado '),
user, user,
const TextSpan(text: ' para '), const TextSpan(text: ' para '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'TRANSMISSÃO ENCERRADA'; 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, user,
const TextSpan(text: ' zapeou '), const TextSpan(text: ' zapeou '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Escrever mensagem'; 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.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.write.login': return 'Faça login para enviar mensagens';
case 'stream.chat.badge.awarded_to': return 'Prêmio concedido a:'; 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.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID DE ${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 'stream.chat.raid.countdown': return ({required Object time}) => 'Incursões em ${time}';
case 'goal.title': return ({ required Object amount}) => 'Meta: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Meta: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Restante: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Restante: ${amount}';
case 'goal.complete': return 'COMPLETO'; case 'goal.complete': return 'COMPLETO';
case 'button.login': return 'Entrar'; case 'button.login': return 'Entrar';
case 'button.logout': return 'Sair'; case 'button.logout': return 'Sair';
@ -380,18 +381,18 @@ extension on TranslationsPt {
case 'button.unmute': return 'Desmutar'; case 'button.unmute': return 'Desmutar';
case 'button.share': return 'Compartilhar'; case 'button.share': return 'Compartilhar';
case 'button.save': return 'Salvar'; case 'button.save': return 'Salvar';
case 'embed.article_by': return ({ required Object name}) => 'Artigo de ${name}'; case 'embed.article_by': return ({required Object name}) => 'Artigo de ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Nota 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 'embed.live_stream_by': return ({required Object name}) => 'Transmissão ao vivo pelo site ${name}';
case 'stream_list.following': return 'Seguindo'; case 'stream_list.following': return 'Seguindo';
case 'stream_list.live': return 'Ao vivo'; case 'stream_list.live': return 'Ao vivo';
case 'stream_list.planned': return 'Planejado'; case 'stream_list.planned': return 'Planejado';
case 'stream_list.ended': return 'Encerrado'; 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.custom_amount': return 'Valor personalizado';
case 'zap.confirm': return 'Confirmar'; case 'zap.confirm': return 'Confirmar';
case 'zap.comment': return 'Comentar'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Abrir na carteira'; case 'zap.button_open_wallet': return 'Abrir na carteira';
case 'zap.copy': return 'Copiado para a área de transferência'; case 'zap.copy': return 'Copiado para a área de transferência';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsRo implements Translations { class TranslationsRo extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsRo({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsRo({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsRo implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsRo implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsRo _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsRo implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamRo implements TranslationsStreamEn { class _TranslationsStreamRo extends TranslationsStreamEn {
_TranslationsStreamRo._(this._root); _TranslationsStreamRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusRo status = _TranslationsStreamStatusRo._(_root); @override late final _TranslationsStreamStatusRo status = _TranslationsStreamStatusRo._(_root);
@override String started({ required Object timestamp}) => 'A început ${timestamp}'; @override String started({required Object timestamp}) => 'A început ${timestamp}';
@override late final _TranslationsStreamChatRo chat = _TranslationsStreamChatRo._(_root); @override late final _TranslationsStreamChatRo chat = _TranslationsStreamChatRo._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalRo implements TranslationsGoalEn { class _TranslationsGoalRo extends TranslationsGoalEn {
_TranslationsGoalRo._(this._root); _TranslationsGoalRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Obiectiv: ${amount}'; @override String title({required Object amount}) => 'Obiectiv: ${amount}';
@override String remaining({ required Object amount}) => 'Rămase: ${amount}'; @override String remaining({required Object amount}) => 'Rămase: ${amount}';
@override String get complete => 'COMPLET'; @override String get complete => 'COMPLET';
} }
// Path: button // Path: button
class _TranslationsButtonRo implements TranslationsButtonEn { class _TranslationsButtonRo extends TranslationsButtonEn {
_TranslationsButtonRo._(this._root); _TranslationsButtonRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonRo implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedRo implements TranslationsEmbedEn { class _TranslationsEmbedRo extends TranslationsEmbedEn {
_TranslationsEmbedRo._(this._root); _TranslationsEmbedRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Articol de ${name}'; @override String article_by({required Object name}) => 'Articol de ${name}';
@override String note_by({ required Object name}) => 'Notă de la ${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 live_stream_by({required Object name}) => 'Transmisiune live prin ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListRo implements TranslationsStreamListEn { class _TranslationsStreamListRo extends TranslationsStreamListEn {
_TranslationsStreamListRo._(this._root); _TranslationsStreamListRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListRo implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapRo implements TranslationsZapEn { class _TranslationsZapRo extends TranslationsZapEn {
_TranslationsZapRo._(this._root); _TranslationsZapRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Sumă personalizată';
@override String get confirm => 'Confirmați'; @override String get confirm => 'Confirmați';
@override String get comment => 'Comentariu'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Deschide în portofel'; @override String get button_open_wallet => 'Deschide în portofel';
@override String get copy => 'Copiat în clipboard'; @override String get copy => 'Copiat în clipboard';
@ -163,8 +164,8 @@ class _TranslationsZapRo implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileRo implements TranslationsProfileEn { class _TranslationsProfileRo extends TranslationsProfileEn {
_TranslationsProfileRo._(this._root); _TranslationsProfileRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileRo implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginRo implements TranslationsLoginEn { class _TranslationsLoginRo extends TranslationsLoginEn {
_TranslationsLoginRo._(this._root); _TranslationsLoginRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginRo implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusRo implements TranslationsStreamStatusEn { class _TranslationsStreamStatusRo extends TranslationsStreamStatusEn {
_TranslationsStreamStatusRo._(this._root); _TranslationsStreamStatusRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusRo implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatRo implements TranslationsStreamChatEn { class _TranslationsStreamChatRo extends TranslationsStreamChatEn {
_TranslationsStreamChatRo._(this._root); _TranslationsStreamChatRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DEZACTIVAT'; @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 /// 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, mod,
const TextSpan(text: ' Timed out '), const TextSpan(text: ' Timed out '),
user, user,
const TextSpan(text: ' pentru '), const TextSpan(text: ' pentru '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream a încheiat footer-ul în partea de jos a chat-ului /// Stream a încheiat footer-ul în partea de jos a chat-ului
@override String get ended => 'STREAM ÎNCHEIAT'; @override String get ended => 'STREAM ÎNCHEIAT';
/// Mesaj de chat care arată zapsuri de flux /// 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteRo write = _TranslationsStreamChatWriteRo._(_root); @override late final _TranslationsStreamChatWriteRo write = _TranslationsStreamChatWriteRo._(_root);
@override late final _TranslationsStreamChatBadgeRo badge = _TranslationsStreamChatBadgeRo._(_root); @override late final _TranslationsStreamChatBadgeRo badge = _TranslationsStreamChatBadgeRo._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatRo implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorRo implements TranslationsZapErrorEn { class _TranslationsZapErrorRo extends TranslationsZapErrorEn {
_TranslationsZapErrorRo._(this._root); _TranslationsZapErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorRo implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditRo implements TranslationsProfileEditEn { class _TranslationsProfileEditRo extends TranslationsProfileEditEn {
_TranslationsProfileEditRo._(this._root); _TranslationsProfileEditRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditRo implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorRo implements TranslationsLoginErrorEn { class _TranslationsLoginErrorRo extends TranslationsLoginErrorEn {
_TranslationsLoginErrorRo._(this._root); _TranslationsLoginErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorRo implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteRo implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteRo extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteRo._(this._root); _TranslationsStreamChatWriteRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteRo implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeRo implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeRo extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeRo._(this._root); _TranslationsStreamChatBadgeRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeRo implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidRo implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidRo extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidRo._(this._root); _TranslationsStreamChatRaidRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
// Translations // Translations
/// Chat mesaj raid la un alt flux /// 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 /// 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 /// 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorRo implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorRo extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorRo._(this._root); _TranslationsProfileEditErrorRo._(TranslationsRo root) : this._root = root, super.internal(root);
final TranslationsRo _root; // ignore: unused_field final TranslationsRo _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsRo {
case 'stream.status.live': return 'ÎN DIRECT'; case 'stream.status.live': return 'ÎN DIRECT';
case 'stream.status.ended': return 'TERMINAT'; case 'stream.status.ended': return 'TERMINAT';
case 'stream.status.planned': return 'PLANIFICATE'; case 'stream.status.planned': return 'PLANIFICATE';
case 'stream.started': return ({ required Object timestamp}) => 'A început ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'A început ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DEZACTIVAT'; case 'stream.chat.disabled': return 'CHAT DEZACTIVAT';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timpul expiră: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timpul expiră: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' Timed out '), const TextSpan(text: ' Timed out '),
user, user,
const TextSpan(text: ' pentru '), const TextSpan(text: ' pentru '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ÎNCHEIAT'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Scrieți mesajul'; 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.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.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.badge.awarded_to': return 'Premiat pentru:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID DE LA ${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 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiduri în ${time}';
case 'goal.title': return ({ required Object amount}) => 'Obiectiv: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Obiectiv: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Rămase: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Rămase: ${amount}';
case 'goal.complete': return 'COMPLET'; case 'goal.complete': return 'COMPLET';
case 'button.login': return 'Autentificare'; case 'button.login': return 'Autentificare';
case 'button.logout': return 'Ieșire'; case 'button.logout': return 'Ieșire';
@ -380,18 +381,18 @@ extension on TranslationsRo {
case 'button.unmute': return 'Dezactivați'; case 'button.unmute': return 'Dezactivați';
case 'button.share': return 'Share'; case 'button.share': return 'Share';
case 'button.save': return 'Salvați'; case 'button.save': return 'Salvați';
case 'embed.article_by': return ({ required Object name}) => 'Articol de ${name}'; 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.note_by': return ({required Object name}) => 'Notă de la ${name}';
case 'embed.live_stream_by': return ({ required Object name}) => 'Transmisiune live prin ${name}'; case 'embed.live_stream_by': return ({required Object name}) => 'Transmisiune live prin ${name}';
case 'stream_list.following': return 'În urma'; case 'stream_list.following': return 'În urma';
case 'stream_list.live': return 'În direct'; case 'stream_list.live': return 'În direct';
case 'stream_list.planned': return 'Planificate'; case 'stream_list.planned': return 'Planificate';
case 'stream_list.ended': return 'Încheiat'; 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.custom_amount': return 'Sumă personalizată';
case 'zap.confirm': return 'Confirmați'; case 'zap.confirm': return 'Confirmați';
case 'zap.comment': return 'Comentariu'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Deschide în portofel'; case 'zap.button_open_wallet': return 'Deschide în portofel';
case 'zap.copy': return 'Copiat în clipboard'; case 'zap.copy': return 'Copiat în clipboard';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsRu implements Translations { class TranslationsRu extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsRu({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsRu({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsRu implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsRu implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsRu _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsRu implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamRu implements TranslationsStreamEn { class _TranslationsStreamRu extends TranslationsStreamEn {
_TranslationsStreamRu._(this._root); _TranslationsStreamRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusRu status = _TranslationsStreamStatusRu._(_root); @override late final _TranslationsStreamStatusRu status = _TranslationsStreamStatusRu._(_root);
@override String started({ required Object timestamp}) => 'Начало ${timestamp}'; @override String started({required Object timestamp}) => 'Начало ${timestamp}';
@override late final _TranslationsStreamChatRu chat = _TranslationsStreamChatRu._(_root); @override late final _TranslationsStreamChatRu chat = _TranslationsStreamChatRu._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalRu implements TranslationsGoalEn { class _TranslationsGoalRu extends TranslationsGoalEn {
_TranslationsGoalRu._(this._root); _TranslationsGoalRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Цель: ${amount}'; @override String title({required Object amount}) => 'Цель: ${amount}';
@override String remaining({ required Object amount}) => 'Осталось: ${amount}'; @override String remaining({required Object amount}) => 'Осталось: ${amount}';
@override String get complete => 'КОМПЛЕКТ'; @override String get complete => 'КОМПЛЕКТ';
} }
// Path: button // Path: button
class _TranslationsButtonRu implements TranslationsButtonEn { class _TranslationsButtonRu extends TranslationsButtonEn {
_TranslationsButtonRu._(this._root); _TranslationsButtonRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonRu implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedRu implements TranslationsEmbedEn { class _TranslationsEmbedRu extends TranslationsEmbedEn {
_TranslationsEmbedRu._(this._root); _TranslationsEmbedRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Статья ${name}'; @override String article_by({required Object name}) => 'Статья ${name}';
@override String note_by({ required Object name}) => 'Заметка на сайте ${name}'; @override String note_by({required Object name}) => 'Заметка на сайте ${name}';
@override String live_stream_by({ required Object name}) => 'Прямая трансляция: ${name}'; @override String live_stream_by({required Object name}) => 'Прямая трансляция: ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListRu implements TranslationsStreamListEn { class _TranslationsStreamListRu extends TranslationsStreamListEn {
_TranslationsStreamListRu._(this._root); _TranslationsStreamListRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListRu implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapRu implements TranslationsZapEn { class _TranslationsZapRu extends TranslationsZapEn {
_TranslationsZapRu._(this._root); _TranslationsZapRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object name}) => 'Запнуть (${name}'; @override String title({required Object name}) => 'Запнуть (${name}';
@override String get custom_amount => 'Пользовательская сумма'; @override String get custom_amount => 'Пользовательская сумма';
@override String get confirm => 'Подтвердить'; @override String get confirm => 'Подтвердить';
@override String get comment => 'Комментарий'; @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_zap => 'Зап';
@override String get button_open_wallet => 'Открыть в кошельке'; @override String get button_open_wallet => 'Открыть в кошельке';
@override String get copy => 'Скопировано в буфер обмена'; @override String get copy => 'Скопировано в буфер обмена';
@ -163,8 +164,8 @@ class _TranslationsZapRu implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileRu implements TranslationsProfileEn { class _TranslationsProfileRu extends TranslationsProfileEn {
_TranslationsProfileRu._(this._root); _TranslationsProfileRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileRu implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginRu implements TranslationsLoginEn { class _TranslationsLoginRu extends TranslationsLoginEn {
_TranslationsLoginRu._(this._root); _TranslationsLoginRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginRu implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusRu implements TranslationsStreamStatusEn { class _TranslationsStreamStatusRu extends TranslationsStreamStatusEn {
_TranslationsStreamStatusRu._(this._root); _TranslationsStreamStatusRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusRu implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatRu implements TranslationsStreamChatEn { class _TranslationsStreamChatRu extends TranslationsStreamChatEn {
_TranslationsStreamChatRu._(this._root); _TranslationsStreamChatRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'ЧАТ ОТКЛЮЧЕН'; @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, mod,
const TextSpan(text: ' тайм-аут '), const TextSpan(text: ' тайм-аут '),
user, user,
const TextSpan(text: ' для '), const TextSpan(text: ' для '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Поток закончился в нижней части чата /// Поток закончился в нижней части чата
@override String get ended => 'ТРАНСЛЯЦИЯ ОКОНЧЕНА'; @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, user,
const TextSpan(text: ' запнул '), const TextSpan(text: ' запнул '),
amount, amount,
const TextSpan(text: ' сат'), const TextSpan(text: ' сат'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteRu write = _TranslationsStreamChatWriteRu._(_root); @override late final _TranslationsStreamChatWriteRu write = _TranslationsStreamChatWriteRu._(_root);
@override late final _TranslationsStreamChatBadgeRu badge = _TranslationsStreamChatBadgeRu._(_root); @override late final _TranslationsStreamChatBadgeRu badge = _TranslationsStreamChatBadgeRu._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatRu implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorRu implements TranslationsZapErrorEn { class _TranslationsZapErrorRu extends TranslationsZapErrorEn {
_TranslationsZapErrorRu._(this._root); _TranslationsZapErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorRu implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditRu implements TranslationsProfileEditEn { class _TranslationsProfileEditRu extends TranslationsProfileEditEn {
_TranslationsProfileEditRu._(this._root); _TranslationsProfileEditRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditRu implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorRu implements TranslationsLoginErrorEn { class _TranslationsLoginErrorRu extends TranslationsLoginErrorEn {
_TranslationsLoginErrorRu._(this._root); _TranslationsLoginErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorRu implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteRu implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteRu extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteRu._(this._root); _TranslationsStreamChatWriteRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteRu implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeRu implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeRu extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeRu._(this._root); _TranslationsStreamChatBadgeRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeRu implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidRu implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidRu extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidRu._(this._root); _TranslationsStreamChatRaidRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
// Translations // 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorRu implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorRu extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorRu._(this._root); _TranslationsProfileEditErrorRu._(TranslationsRu root) : this._root = root, super.internal(root);
final TranslationsRu _root; // ignore: unused_field final TranslationsRu _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsRu {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'КОНЕЦ'; case 'stream.status.ended': return 'КОНЕЦ';
case 'stream.status.planned': return 'ПЛАНИРУЕМЫЙ'; case 'stream.status.planned': return 'ПЛАНИРУЕМЫЙ';
case 'stream.started': return ({ required Object timestamp}) => 'Начало ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Начало ${timestamp}';
case 'stream.chat.disabled': return 'ЧАТ ОТКЛЮЧЕН'; case 'stream.chat.disabled': return 'ЧАТ ОТКЛЮЧЕН';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Таймаут истекает: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Таймаут истекает: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' тайм-аут '), const TextSpan(text: ' тайм-аут '),
user, user,
const TextSpan(text: ' для '), const TextSpan(text: ' для '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'ТРАНСЛЯЦИЯ ОКОНЧЕНА'; 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, user,
const TextSpan(text: ' запнул '), const TextSpan(text: ' запнул '),
amount, amount,
const TextSpan(text: ' сат'), const TextSpan(text: ' сат'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Написать сообщение'; case 'stream.chat.write.label': return 'Написать сообщение';
case 'stream.chat.write.no_signer': return 'Невозможно писать сообщения с логином npub'; case 'stream.chat.write.no_signer': return 'Невозможно писать сообщения с логином npub';
case 'stream.chat.write.login': return 'Пожалуйста, войдите в систему, чтобы отправлять сообщения'; case 'stream.chat.write.login': return 'Пожалуйста, войдите в систему, чтобы отправлять сообщения';
case 'stream.chat.badge.awarded_to': return 'Награждается:'; case 'stream.chat.badge.awarded_to': return 'Награждается:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Рейды в ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Рейды в ${time}';
case 'goal.title': return ({ required Object amount}) => 'Цель: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Цель: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Осталось: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Осталось: ${amount}';
case 'goal.complete': return 'КОМПЛЕКТ'; case 'goal.complete': return 'КОМПЛЕКТ';
case 'button.login': return 'Логин'; case 'button.login': return 'Логин';
case 'button.logout': return 'Выйти'; case 'button.logout': return 'Выйти';
@ -380,18 +381,18 @@ extension on TranslationsRu {
case 'button.unmute': return 'Включить уведомления'; case 'button.unmute': return 'Включить уведомления';
case 'button.share': return 'Поделиться'; case 'button.share': return 'Поделиться';
case 'button.save': return 'Сохранить'; case 'button.save': return 'Сохранить';
case 'embed.article_by': return ({ required Object name}) => 'Статья ${name}'; case 'embed.article_by': return ({required Object name}) => 'Статья ${name}';
case 'embed.note_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 'embed.live_stream_by': return ({required Object name}) => 'Прямая трансляция: ${name}';
case 'stream_list.following': return 'Подписки'; case 'stream_list.following': return 'Подписки';
case 'stream_list.live': return 'Прямой эфир'; case 'stream_list.live': return 'Прямой эфир';
case 'stream_list.planned': return 'Запланировано'; case 'stream_list.planned': return 'Запланировано';
case 'stream_list.ended': 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.custom_amount': return 'Пользовательская сумма';
case 'zap.confirm': return 'Подтвердить'; case 'zap.confirm': return 'Подтвердить';
case 'zap.comment': 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_zap': return 'Зап';
case 'zap.button_open_wallet': return 'Открыть в кошельке'; case 'zap.button_open_wallet': return 'Открыть в кошельке';
case 'zap.copy': return 'Скопировано в буфер обмена'; case 'zap.copy': return 'Скопировано в буфер обмена';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsSr implements Translations { class TranslationsSr extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsSr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsSr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsSr implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsSr implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 TranslationsSr _root = this; // ignore: unused_field late final TranslationsSr _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsSr implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamSr implements TranslationsStreamEn { class _TranslationsStreamSr extends TranslationsStreamEn {
_TranslationsStreamSr._(this._root); _TranslationsStreamSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusSr status = _TranslationsStreamStatusSr._(_root); @override late final _TranslationsStreamStatusSr status = _TranslationsStreamStatusSr._(_root);
@override String started({ required Object timestamp}) => 'Started ${timestamp}'; @override String started({required Object timestamp}) => 'Started ${timestamp}';
@override late final _TranslationsStreamChatSr chat = _TranslationsStreamChatSr._(_root); @override late final _TranslationsStreamChatSr chat = _TranslationsStreamChatSr._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalSr implements TranslationsGoalEn { class _TranslationsGoalSr extends TranslationsGoalEn {
_TranslationsGoalSr._(this._root); _TranslationsGoalSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Goal: ${amount}'; @override String title({required Object amount}) => 'Goal: ${amount}';
@override String remaining({ required Object amount}) => 'Remaining: ${amount}'; @override String remaining({required Object amount}) => 'Remaining: ${amount}';
@override String get complete => 'COMPLETE'; @override String get complete => 'COMPLETE';
} }
// Path: button // Path: button
class _TranslationsButtonSr implements TranslationsButtonEn { class _TranslationsButtonSr extends TranslationsButtonEn {
_TranslationsButtonSr._(this._root); _TranslationsButtonSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonSr implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedSr implements TranslationsEmbedEn { class _TranslationsEmbedSr extends TranslationsEmbedEn {
_TranslationsEmbedSr._(this._root); _TranslationsEmbedSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Article by ${name}'; @override String article_by({required Object name}) => 'Article by ${name}';
@override String note_by({ required Object name}) => 'Note by ${name}'; @override String note_by({required Object name}) => 'Note by ${name}';
@override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; @override String live_stream_by({required Object name}) => 'Live stream by ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListSr implements TranslationsStreamListEn { class _TranslationsStreamListSr extends TranslationsStreamListEn {
_TranslationsStreamListSr._(this._root); _TranslationsStreamListSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListSr implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapSr implements TranslationsZapEn { class _TranslationsZapSr extends TranslationsZapEn {
_TranslationsZapSr._(this._root); _TranslationsZapSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object name}) => 'Zap ${name}'; @override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Custom Amount'; @override String get custom_amount => 'Custom Amount';
@override String get confirm => 'Confirm'; @override String get confirm => 'Confirm';
@override String get comment => 'Comment'; @override String get comment => '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_zap => 'Zap';
@override String get button_open_wallet => 'Open in Wallet'; @override String get button_open_wallet => 'Open in Wallet';
@override String get copy => 'Copied to clipboard'; @override String get copy => 'Copied to clipboard';
@ -163,8 +164,8 @@ class _TranslationsZapSr implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileSr implements TranslationsProfileEn { class _TranslationsProfileSr extends TranslationsProfileEn {
_TranslationsProfileSr._(this._root); _TranslationsProfileSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileSr implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginSr implements TranslationsLoginEn { class _TranslationsLoginSr extends TranslationsLoginEn {
_TranslationsLoginSr._(this._root); _TranslationsLoginSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginSr implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusSr implements TranslationsStreamStatusEn { class _TranslationsStreamStatusSr extends TranslationsStreamStatusEn {
_TranslationsStreamStatusSr._(this._root); _TranslationsStreamStatusSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusSr implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatSr implements TranslationsStreamChatEn { class _TranslationsStreamChatSr extends TranslationsStreamChatEn {
_TranslationsStreamChatSr._(this._root); _TranslationsStreamChatSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DISABLED'; @override String get disabled => 'CHAT DISABLED';
@override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; @override String disabled_timeout({required Object time}) => 'Timeout expires: ${time}';
/// Chat message showing timeout events /// Chat message showing timeout events
@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, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream ended footer at bottom of chat /// Stream ended footer at bottom of chat
@override String get ended => 'STREAM ENDED'; @override String get ended => 'STREAM ENDED';
/// Chat message showing stream zaps /// Chat message showing 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteSr write = _TranslationsStreamChatWriteSr._(_root); @override late final _TranslationsStreamChatWriteSr write = _TranslationsStreamChatWriteSr._(_root);
@override late final _TranslationsStreamChatBadgeSr badge = _TranslationsStreamChatBadgeSr._(_root); @override late final _TranslationsStreamChatBadgeSr badge = _TranslationsStreamChatBadgeSr._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatSr implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorSr implements TranslationsZapErrorEn { class _TranslationsZapErrorSr extends TranslationsZapErrorEn {
_TranslationsZapErrorSr._(this._root); _TranslationsZapErrorSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorSr implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditSr implements TranslationsProfileEditEn { class _TranslationsProfileEditSr extends TranslationsProfileEditEn {
_TranslationsProfileEditSr._(this._root); _TranslationsProfileEditSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditSr implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorSr implements TranslationsLoginErrorEn { class _TranslationsLoginErrorSr extends TranslationsLoginErrorEn {
_TranslationsLoginErrorSr._(this._root); _TranslationsLoginErrorSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorSr implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteSr implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteSr extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteSr._(this._root); _TranslationsStreamChatWriteSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteSr implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeSr implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeSr extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeSr._(this._root); _TranslationsStreamChatBadgeSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeSr implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidSr implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidSr extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidSr._(this._root); _TranslationsStreamChatRaidSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
// Translations // Translations
/// Chat raid message to another stream /// Chat raid message to another stream
@override String to({ required Object name}) => 'RAIDING ${name}'; @override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid message from another stream /// Chat raid message from another stream
@override String from({ required Object name}) => 'RAID FROM ${name}'; @override String from({required Object name}) => 'RAID FROM ${name}';
/// Countdown timer for auto-raiding /// Countdown timer for auto-raiding
@override String countdown({ required Object time}) => 'Raiding in ${time}'; @override String countdown({required Object time}) => 'Raiding in ${time}';
} }
// Path: profile.edit.error // Path: profile.edit.error
class _TranslationsProfileEditErrorSr implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorSr extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorSr._(this._root); _TranslationsProfileEditErrorSr._(TranslationsSr root) : this._root = root, super.internal(root);
final TranslationsSr _root; // ignore: unused_field final TranslationsSr _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsSr {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'PLANNED'; case 'stream.status.planned': return 'PLANNED';
case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Started ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABLED'; case 'stream.chat.disabled': return 'CHAT DISABLED';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout expires: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ENDED'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Write message'; 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.no_signer': return 'Can\'t write messages with npub login';
case 'stream.chat.write.login': return 'Please login to send messages'; case 'stream.chat.write.login': return 'Please login to send messages';
case 'stream.chat.badge.awarded_to': return 'Awarded to:'; case 'stream.chat.badge.awarded_to': return 'Awarded to:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Goal: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Remaining: ${amount}';
case 'goal.complete': return 'COMPLETE'; case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Login'; case 'button.login': return 'Login';
case 'button.logout': return 'Logout'; case 'button.logout': return 'Logout';
@ -380,18 +381,18 @@ extension on TranslationsSr {
case 'button.unmute': return 'Unmute'; case 'button.unmute': return 'Unmute';
case 'button.share': return 'Share'; case 'button.share': return 'Share';
case 'button.save': return 'Save'; case 'button.save': return 'Save';
case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; case 'embed.article_by': return ({required Object name}) => 'Article by ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note 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 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return 'Following'; case 'stream_list.following': return 'Following';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planned'; case 'stream_list.planned': return 'Planned';
case 'stream_list.ended': return 'Ended'; 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.custom_amount': return 'Custom Amount';
case 'zap.confirm': return 'Confirm'; case 'zap.confirm': return 'Confirm';
case 'zap.comment': return 'Comment'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Open in Wallet'; case 'zap.button_open_wallet': return 'Open in Wallet';
case 'zap.copy': return 'Copied to clipboard'; case 'zap.copy': return 'Copied to clipboard';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsSv implements Translations { class TranslationsSv extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsSv({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsSv({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsSv implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsSv implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsSv _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsSv implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamSv implements TranslationsStreamEn { class _TranslationsStreamSv extends TranslationsStreamEn {
_TranslationsStreamSv._(this._root); _TranslationsStreamSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusSv status = _TranslationsStreamStatusSv._(_root); @override late final _TranslationsStreamStatusSv status = _TranslationsStreamStatusSv._(_root);
@override String started({ required Object timestamp}) => 'Startade ${timestamp}'; @override String started({required Object timestamp}) => 'Startade ${timestamp}';
@override late final _TranslationsStreamChatSv chat = _TranslationsStreamChatSv._(_root); @override late final _TranslationsStreamChatSv chat = _TranslationsStreamChatSv._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalSv implements TranslationsGoalEn { class _TranslationsGoalSv extends TranslationsGoalEn {
_TranslationsGoalSv._(this._root); _TranslationsGoalSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Mål: ${amount}'; @override String title({required Object amount}) => 'Mål: ${amount}';
@override String remaining({ required Object amount}) => 'Kvarvarande: ${amount}'; @override String remaining({required Object amount}) => 'Kvarvarande: ${amount}';
@override String get complete => 'KOMPLETT'; @override String get complete => 'KOMPLETT';
} }
// Path: button // Path: button
class _TranslationsButtonSv implements TranslationsButtonEn { class _TranslationsButtonSv extends TranslationsButtonEn {
_TranslationsButtonSv._(this._root); _TranslationsButtonSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonSv implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedSv implements TranslationsEmbedEn { class _TranslationsEmbedSv extends TranslationsEmbedEn {
_TranslationsEmbedSv._(this._root); _TranslationsEmbedSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Artikel av ${name}'; @override String article_by({required Object name}) => 'Artikel av ${name}';
@override String note_by({ required Object name}) => 'Anteckning 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 live_stream_by({required Object name}) => 'Direktsändning via ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListSv implements TranslationsStreamListEn { class _TranslationsStreamListSv extends TranslationsStreamListEn {
_TranslationsStreamListSv._(this._root); _TranslationsStreamListSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListSv implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapSv implements TranslationsZapEn { class _TranslationsZapSv extends TranslationsZapEn {
_TranslationsZapSv._(this._root); _TranslationsZapSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Anpassat belopp';
@override String get confirm => 'Bekräfta'; @override String get confirm => 'Bekräfta';
@override String get comment => 'Kommentar'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Öppna i plånboken'; @override String get button_open_wallet => 'Öppna i plånboken';
@override String get copy => 'Kopieras till urklipp'; @override String get copy => 'Kopieras till urklipp';
@ -163,8 +164,8 @@ class _TranslationsZapSv implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileSv implements TranslationsProfileEn { class _TranslationsProfileSv extends TranslationsProfileEn {
_TranslationsProfileSv._(this._root); _TranslationsProfileSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileSv implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginSv implements TranslationsLoginEn { class _TranslationsLoginSv extends TranslationsLoginEn {
_TranslationsLoginSv._(this._root); _TranslationsLoginSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginSv implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusSv implements TranslationsStreamStatusEn { class _TranslationsStreamStatusSv extends TranslationsStreamStatusEn {
_TranslationsStreamStatusSv._(this._root); _TranslationsStreamStatusSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusSv implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatSv implements TranslationsStreamChatEn { class _TranslationsStreamChatSv extends TranslationsStreamChatEn {
_TranslationsStreamChatSv._(this._root); _TranslationsStreamChatSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT AVSTÄNGD'; @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 /// 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, mod,
const TextSpan(text: ' tidsbegränsad '), const TextSpan(text: ' tidsbegränsad '),
user, user,
const TextSpan(text: ' för '), const TextSpan(text: ' för '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream avslutade sidfoten längst ner på chatten /// Stream avslutade sidfoten längst ner på chatten
@override String get ended => 'STREAM AVSLUTAD'; @override String get ended => 'STREAM AVSLUTAD';
/// Chattmeddelande som visar strömavbrott /// 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteSv write = _TranslationsStreamChatWriteSv._(_root); @override late final _TranslationsStreamChatWriteSv write = _TranslationsStreamChatWriteSv._(_root);
@override late final _TranslationsStreamChatBadgeSv badge = _TranslationsStreamChatBadgeSv._(_root); @override late final _TranslationsStreamChatBadgeSv badge = _TranslationsStreamChatBadgeSv._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatSv implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorSv implements TranslationsZapErrorEn { class _TranslationsZapErrorSv extends TranslationsZapErrorEn {
_TranslationsZapErrorSv._(this._root); _TranslationsZapErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorSv implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditSv implements TranslationsProfileEditEn { class _TranslationsProfileEditSv extends TranslationsProfileEditEn {
_TranslationsProfileEditSv._(this._root); _TranslationsProfileEditSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditSv implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorSv implements TranslationsLoginErrorEn { class _TranslationsLoginErrorSv extends TranslationsLoginErrorEn {
_TranslationsLoginErrorSv._(this._root); _TranslationsLoginErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorSv implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteSv implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteSv extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteSv._(this._root); _TranslationsStreamChatWriteSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteSv implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeSv implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeSv extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeSv._(this._root); _TranslationsStreamChatBadgeSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeSv implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidSv implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidSv extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidSv._(this._root); _TranslationsStreamChatRaidSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
// Translations // Translations
/// Chatta raidmeddelande till en annan ström /// Chatta raidmeddelande till en annan ström
@override String to({ required Object name}) => 'RAIDING ${name}'; @override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid-meddelande från en annan ström /// Chat raid-meddelande från en annan ström
@override String from({ required Object name}) => 'RAID FRÅN ${name}'; @override String from({required Object name}) => 'RAID FRÅN ${name}';
/// Nedräkningstimer för auto-raiding /// Nedräkningstimer för auto-raiding
@override String countdown({ required Object time}) => 'Raiding på ${time}'; @override String countdown({required Object time}) => 'Raiding på ${time}';
} }
// Path: profile.edit.error // Path: profile.edit.error
class _TranslationsProfileEditErrorSv implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorSv extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorSv._(this._root); _TranslationsProfileEditErrorSv._(TranslationsSv root) : this._root = root, super.internal(root);
final TranslationsSv _root; // ignore: unused_field final TranslationsSv _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsSv {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'AVSLUTAD'; case 'stream.status.ended': return 'AVSLUTAD';
case 'stream.status.planned': return 'PLANERADE'; case 'stream.status.planned': return 'PLANERADE';
case 'stream.started': return ({ required Object timestamp}) => 'Startade ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Startade ${timestamp}';
case 'stream.chat.disabled': return 'CHAT AVSTÄNGD'; case 'stream.chat.disabled': return 'CHAT AVSTÄNGD';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Tidsgränsen går ut: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Tidsgränsen går ut: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' tidsbegränsad '), const TextSpan(text: ' tidsbegränsad '),
user, user,
const TextSpan(text: ' för '), const TextSpan(text: ' för '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM AVSLUTAD'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Skriv meddelande'; case 'stream.chat.write.label': return 'Skriv meddelande';
case 'stream.chat.write.no_signer': return 'Det går inte att skriva meddelanden med npub-inloggning'; case 'stream.chat.write.no_signer': return 'Det går inte att skriva meddelanden med npub-inloggning';
case 'stream.chat.write.login': return 'Logga in för att skicka meddelanden'; case 'stream.chat.write.login': return 'Logga in för att skicka meddelanden';
case 'stream.chat.badge.awarded_to': return 'Tilldelas till:'; case 'stream.chat.badge.awarded_to': return 'Tilldelas till:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FRÅN ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FRÅN ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding på ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding på ${time}';
case 'goal.title': return ({ required Object amount}) => 'Mål: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Mål: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Kvarvarande: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Kvarvarande: ${amount}';
case 'goal.complete': return 'KOMPLETT'; case 'goal.complete': return 'KOMPLETT';
case 'button.login': return 'Logga in'; case 'button.login': return 'Logga in';
case 'button.logout': return 'Logga ut'; case 'button.logout': return 'Logga ut';
@ -380,18 +381,18 @@ extension on TranslationsSv {
case 'button.unmute': return 'Avtysta'; case 'button.unmute': return 'Avtysta';
case 'button.share': return 'Dela'; case 'button.share': return 'Dela';
case 'button.save': return 'Spara'; case 'button.save': return 'Spara';
case 'embed.article_by': return ({ required Object name}) => 'Artikel av ${name}'; case 'embed.article_by': return ({required Object name}) => 'Artikel av ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Anteckning 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 'embed.live_stream_by': return ({required Object name}) => 'Direktsändning via ${name}';
case 'stream_list.following': return 'Följer'; case 'stream_list.following': return 'Följer';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planerade'; case 'stream_list.planned': return 'Planerade';
case 'stream_list.ended': return 'Avslutade'; 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.custom_amount': return 'Anpassat belopp';
case 'zap.confirm': return 'Bekräfta'; case 'zap.confirm': return 'Bekräfta';
case 'zap.comment': return 'Kommentar'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Öppna i plånboken'; case 'zap.button_open_wallet': return 'Öppna i plånboken';
case 'zap.copy': return 'Kopieras till urklipp'; case 'zap.copy': return 'Kopieras till urklipp';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsTr implements Translations { class TranslationsTr extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsTr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsTr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsTr implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsTr implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsTr _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsTr implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamTr implements TranslationsStreamEn { class _TranslationsStreamTr extends TranslationsStreamEn {
_TranslationsStreamTr._(this._root); _TranslationsStreamTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusTr status = _TranslationsStreamStatusTr._(_root); @override late final _TranslationsStreamStatusTr status = _TranslationsStreamStatusTr._(_root);
@override String started({ required Object timestamp}) => 'Başlatıldı ${timestamp}'; @override String started({required Object timestamp}) => 'Başlatıldı ${timestamp}';
@override late final _TranslationsStreamChatTr chat = _TranslationsStreamChatTr._(_root); @override late final _TranslationsStreamChatTr chat = _TranslationsStreamChatTr._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalTr implements TranslationsGoalEn { class _TranslationsGoalTr extends TranslationsGoalEn {
_TranslationsGoalTr._(this._root); _TranslationsGoalTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Hedef: ${amount}'; @override String title({required Object amount}) => 'Hedef: ${amount}';
@override String remaining({ required Object amount}) => 'Kalan: ${amount}'; @override String remaining({required Object amount}) => 'Kalan: ${amount}';
@override String get complete => 'TAMAMLANDI'; @override String get complete => 'TAMAMLANDI';
} }
// Path: button // Path: button
class _TranslationsButtonTr implements TranslationsButtonEn { class _TranslationsButtonTr extends TranslationsButtonEn {
_TranslationsButtonTr._(this._root); _TranslationsButtonTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonTr implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedTr implements TranslationsEmbedEn { class _TranslationsEmbedTr extends TranslationsEmbedEn {
_TranslationsEmbedTr._(this._root); _TranslationsEmbedTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Makale ${name}'; @override String article_by({required Object name}) => 'Makale ${name}';
@override String note_by({ required Object name}) => 'Not: ${name}'; @override String note_by({required Object name}) => 'Not: ${name}';
@override String live_stream_by({ required Object name}) => 'Canlı yayın: ${name}'; @override String live_stream_by({required Object name}) => 'Canlı yayın: ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListTr implements TranslationsStreamListEn { class _TranslationsStreamListTr extends TranslationsStreamListEn {
_TranslationsStreamListTr._(this._root); _TranslationsStreamListTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListTr implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapTr implements TranslationsZapEn { class _TranslationsZapTr extends TranslationsZapEn {
_TranslationsZapTr._(this._root); _TranslationsZapTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Özel Tutar';
@override String get confirm => 'Onaylayın'; @override String get confirm => 'Onaylayın';
@override String get comment => 'Yorum'; @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_zap => 'Zap';
@override String get button_open_wallet => 'Cüzdanda Aç'; @override String get button_open_wallet => 'Cüzdanda Aç';
@override String get copy => 'Panoya kopyalandı'; @override String get copy => 'Panoya kopyalandı';
@ -163,8 +164,8 @@ class _TranslationsZapTr implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileTr implements TranslationsProfileEn { class _TranslationsProfileTr extends TranslationsProfileEn {
_TranslationsProfileTr._(this._root); _TranslationsProfileTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileTr implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginTr implements TranslationsLoginEn { class _TranslationsLoginTr extends TranslationsLoginEn {
_TranslationsLoginTr._(this._root); _TranslationsLoginTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginTr implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusTr implements TranslationsStreamStatusEn { class _TranslationsStreamStatusTr extends TranslationsStreamStatusEn {
_TranslationsStreamStatusTr._(this._root); _TranslationsStreamStatusTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusTr implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatTr implements TranslationsStreamChatEn { class _TranslationsStreamChatTr extends TranslationsStreamChatEn {
_TranslationsStreamChatTr._(this._root); _TranslationsStreamChatTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'SOHBET DEVRE DIŞI'; @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ı /// 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, mod,
const TextSpan(text: ' zaman aşımına uğradı '), const TextSpan(text: ' zaman aşımına uğradı '),
user, user,
const TextSpan(text: ' için '), const TextSpan(text: ' için '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Sohbetin alt kısmında akış sona erdi altbilgisi /// Sohbetin alt kısmında akış sona erdi altbilgisi
@override String get ended => 'YAYIN SONLANDI'; @override String get ended => 'YAYIN SONLANDI';
/// Akış zaplarını gösteren sohbet mesajı /// 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteTr write = _TranslationsStreamChatWriteTr._(_root); @override late final _TranslationsStreamChatWriteTr write = _TranslationsStreamChatWriteTr._(_root);
@override late final _TranslationsStreamChatBadgeTr badge = _TranslationsStreamChatBadgeTr._(_root); @override late final _TranslationsStreamChatBadgeTr badge = _TranslationsStreamChatBadgeTr._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatTr implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorTr implements TranslationsZapErrorEn { class _TranslationsZapErrorTr extends TranslationsZapErrorEn {
_TranslationsZapErrorTr._(this._root); _TranslationsZapErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorTr implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditTr implements TranslationsProfileEditEn { class _TranslationsProfileEditTr extends TranslationsProfileEditEn {
_TranslationsProfileEditTr._(this._root); _TranslationsProfileEditTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditTr implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorTr implements TranslationsLoginErrorEn { class _TranslationsLoginErrorTr extends TranslationsLoginErrorEn {
_TranslationsLoginErrorTr._(this._root); _TranslationsLoginErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorTr implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteTr implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteTr extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteTr._(this._root); _TranslationsStreamChatWriteTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteTr implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeTr implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeTr extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeTr._(this._root); _TranslationsStreamChatBadgeTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeTr implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidTr implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidTr extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidTr._(this._root); _TranslationsStreamChatRaidTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
// Translations // Translations
/// Başka bir akışa sohbet baskını mesajı /// 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}S';
/// Başka bir akıştan sohbet baskını mesajı /// Başka bir akıştan sohbet baskını mesajı
@override String from({ required Object name}) => '${name} ADRESINDEN RAID'; @override String from({required Object name}) => '${name} ADRESINDEN RAID';
/// Otomatik sürüş için geri sayım sayacı /// Otomatik sürüş için geri sayım sayacı
@override String countdown({ required Object time}) => '${time} adresinde baskın'; @override String countdown({required Object time}) => '${time} adresinde baskın';
} }
// Path: profile.edit.error // Path: profile.edit.error
class _TranslationsProfileEditErrorTr implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorTr extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorTr._(this._root); _TranslationsProfileEditErrorTr._(TranslationsTr root) : this._root = root, super.internal(root);
final TranslationsTr _root; // ignore: unused_field final TranslationsTr _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsTr {
case 'stream.status.live': return 'CANLI'; case 'stream.status.live': return 'CANLI';
case 'stream.status.ended': return 'SONLANDI'; case 'stream.status.ended': return 'SONLANDI';
case 'stream.status.planned': return 'PLANLANMIŞ'; case 'stream.status.planned': return 'PLANLANMIŞ';
case 'stream.started': return ({ required Object timestamp}) => 'Başlatıldı ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Başlatıldı ${timestamp}';
case 'stream.chat.disabled': return 'SOHBET DEVRE DIŞI'; case 'stream.chat.disabled': return 'SOHBET DEVRE DIŞI';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Zaman aşımı sona eriyor: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Zaman aşımı sona eriyor: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' zaman aşımına uğradı '), const TextSpan(text: ' zaman aşımına uğradı '),
user, user,
const TextSpan(text: ' için '), const TextSpan(text: ' için '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'YAYIN SONLANDI'; case 'stream.chat.ended': return 'YAYIN SONLANDI';
case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.zap': return ({required InlineSpan user, required InlineSpan amount}) => TextSpan(children: [
user, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Mesaj yaz'; 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.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.write.login': return 'Mesaj göndermek için lütfen giriş yapın';
case 'stream.chat.badge.awarded_to': return 'Ödüllendirildi:'; case 'stream.chat.badge.awarded_to': return 'Ödüllendirildi:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}S'; 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.from': return ({required Object name}) => '${name} ADRESINDEN RAID';
case 'stream.chat.raid.countdown': return ({ required Object time}) => '${time} adresinde baskın'; case 'stream.chat.raid.countdown': return ({required Object time}) => '${time} adresinde baskın';
case 'goal.title': return ({ required Object amount}) => 'Hedef: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Hedef: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Kalan: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Kalan: ${amount}';
case 'goal.complete': return 'TAMAMLANDI'; case 'goal.complete': return 'TAMAMLANDI';
case 'button.login': return 'Giriş'; case 'button.login': return 'Giriş';
case 'button.logout': return 'Oturum Kapatma'; case 'button.logout': return 'Oturum Kapatma';
@ -380,18 +381,18 @@ extension on TranslationsTr {
case 'button.unmute': return 'Sesi aç'; case 'button.unmute': return 'Sesi aç';
case 'button.share': return 'Paylaş'; case 'button.share': return 'Paylaş';
case 'button.save': return 'Kaydet'; case 'button.save': return 'Kaydet';
case 'embed.article_by': return ({ required Object name}) => 'Makale ${name}'; case 'embed.article_by': return ({required Object name}) => 'Makale ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Not: ${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 'embed.live_stream_by': return ({required Object name}) => 'Canlı yayın: ${name}';
case 'stream_list.following': return 'Aşağıdaki'; case 'stream_list.following': return 'Aşağıdaki';
case 'stream_list.live': return 'Canlı'; case 'stream_list.live': return 'Canlı';
case 'stream_list.planned': return 'Planlanmış'; case 'stream_list.planned': return 'Planlanmış';
case 'stream_list.ended': return 'Bitti'; 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.custom_amount': return 'Özel Tutar';
case 'zap.confirm': return 'Onaylayın'; case 'zap.confirm': return 'Onaylayın';
case 'zap.comment': return 'Yorum'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Cüzdanda Aç'; case 'zap.button_open_wallet': return 'Cüzdanda Aç';
case 'zap.copy': return 'Panoya kopyalandı'; case 'zap.copy': return 'Panoya kopyalandı';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsUk implements Translations { class TranslationsUk extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsUk({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsUk({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsUk implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsUk implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsUk _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsUk implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamUk implements TranslationsStreamEn { class _TranslationsStreamUk extends TranslationsStreamEn {
_TranslationsStreamUk._(this._root); _TranslationsStreamUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusUk status = _TranslationsStreamStatusUk._(_root); @override late final _TranslationsStreamStatusUk status = _TranslationsStreamStatusUk._(_root);
@override String started({ required Object timestamp}) => 'Запустив ${timestamp}'; @override String started({required Object timestamp}) => 'Запустив ${timestamp}';
@override late final _TranslationsStreamChatUk chat = _TranslationsStreamChatUk._(_root); @override late final _TranslationsStreamChatUk chat = _TranslationsStreamChatUk._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalUk implements TranslationsGoalEn { class _TranslationsGoalUk extends TranslationsGoalEn {
_TranslationsGoalUk._(this._root); _TranslationsGoalUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Мета: ${amount}'; @override String title({required Object amount}) => 'Мета: ${amount}';
@override String remaining({ required Object amount}) => 'Залишилося: ${amount}'; @override String remaining({required Object amount}) => 'Залишилося: ${amount}';
@override String get complete => 'ЗАВЕРШИТИ'; @override String get complete => 'ЗАВЕРШИТИ';
} }
// Path: button // Path: button
class _TranslationsButtonUk implements TranslationsButtonEn { class _TranslationsButtonUk extends TranslationsButtonEn {
_TranslationsButtonUk._(this._root); _TranslationsButtonUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonUk implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedUk implements TranslationsEmbedEn { class _TranslationsEmbedUk extends TranslationsEmbedEn {
_TranslationsEmbedUk._(this._root); _TranslationsEmbedUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Стаття за посиланням ${name}'; @override String article_by({required Object name}) => 'Стаття за посиланням ${name}';
@override String note_by({ required Object name}) => 'Примітка ${name}'; @override String note_by({required Object name}) => 'Примітка ${name}';
@override String live_stream_by({ required Object name}) => 'Пряма трансляція на ${name}'; @override String live_stream_by({required Object name}) => 'Пряма трансляція на ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListUk implements TranslationsStreamListEn { class _TranslationsStreamListUk extends TranslationsStreamListEn {
_TranslationsStreamListUk._(this._root); _TranslationsStreamListUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListUk implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapUk implements TranslationsZapEn { class _TranslationsZapUk extends TranslationsZapEn {
_TranslationsZapUk._(this._root); _TranslationsZapUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
// Translations // 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 custom_amount => 'Нестандартна сума';
@override String get confirm => 'Підтвердити'; @override String get confirm => 'Підтвердити';
@override String get comment => 'Коментар'; @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_zap => 'Zap!';
@override String get button_open_wallet => 'Відкрити в Гаманці'; @override String get button_open_wallet => 'Відкрити в Гаманці';
@override String get copy => 'Скопійовано в буфер обміну'; @override String get copy => 'Скопійовано в буфер обміну';
@ -163,8 +164,8 @@ class _TranslationsZapUk implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileUk implements TranslationsProfileEn { class _TranslationsProfileUk extends TranslationsProfileEn {
_TranslationsProfileUk._(this._root); _TranslationsProfileUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileUk implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginUk implements TranslationsLoginEn { class _TranslationsLoginUk extends TranslationsLoginEn {
_TranslationsLoginUk._(this._root); _TranslationsLoginUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginUk implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusUk implements TranslationsStreamStatusEn { class _TranslationsStreamStatusUk extends TranslationsStreamStatusEn {
_TranslationsStreamStatusUk._(this._root); _TranslationsStreamStatusUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusUk implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatUk implements TranslationsStreamChatEn { class _TranslationsStreamChatUk extends TranslationsStreamChatEn {
_TranslationsStreamChatUk._(this._root); _TranslationsStreamChatUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'ЧАТ ВІДКЛЮЧЕНО'; @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, mod,
const TextSpan(text: ' таймінг '), const TextSpan(text: ' таймінг '),
user, user,
const TextSpan(text: ' для '), const TextSpan(text: ' для '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Нижній колонтитул кінця потоку внизу чату /// Нижній колонтитул кінця потоку внизу чату
@override String get ended => 'СТРІМ ЗАКІНЧИВСЯ'; @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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteUk write = _TranslationsStreamChatWriteUk._(_root); @override late final _TranslationsStreamChatWriteUk write = _TranslationsStreamChatWriteUk._(_root);
@override late final _TranslationsStreamChatBadgeUk badge = _TranslationsStreamChatBadgeUk._(_root); @override late final _TranslationsStreamChatBadgeUk badge = _TranslationsStreamChatBadgeUk._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatUk implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorUk implements TranslationsZapErrorEn { class _TranslationsZapErrorUk extends TranslationsZapErrorEn {
_TranslationsZapErrorUk._(this._root); _TranslationsZapErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorUk implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditUk implements TranslationsProfileEditEn { class _TranslationsProfileEditUk extends TranslationsProfileEditEn {
_TranslationsProfileEditUk._(this._root); _TranslationsProfileEditUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditUk implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorUk implements TranslationsLoginErrorEn { class _TranslationsLoginErrorUk extends TranslationsLoginErrorEn {
_TranslationsLoginErrorUk._(this._root); _TranslationsLoginErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorUk implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteUk implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteUk extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteUk._(this._root); _TranslationsStreamChatWriteUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteUk implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeUk implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeUk extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeUk._(this._root); _TranslationsStreamChatBadgeUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeUk implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidUk implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidUk extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidUk._(this._root); _TranslationsStreamChatRaidUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
// Translations // 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorUk implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorUk extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorUk._(this._root); _TranslationsProfileEditErrorUk._(TranslationsUk root) : this._root = root, super.internal(root);
final TranslationsUk _root; // ignore: unused_field final TranslationsUk _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsUk {
case 'stream.status.live': return 'НАЖИВО'; case 'stream.status.live': return 'НАЖИВО';
case 'stream.status.ended': return 'ЗАКІНЧЕНО'; case 'stream.status.ended': return 'ЗАКІНЧЕНО';
case 'stream.status.planned': return 'ЗАПЛАНОВАНО'; case 'stream.status.planned': return 'ЗАПЛАНОВАНО';
case 'stream.started': return ({ required Object timestamp}) => 'Запустив ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Запустив ${timestamp}';
case 'stream.chat.disabled': return 'ЧАТ ВІДКЛЮЧЕНО'; case 'stream.chat.disabled': return 'ЧАТ ВІДКЛЮЧЕНО';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Тайм-аут закінчився: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Тайм-аут закінчився: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' таймінг '), const TextSpan(text: ' таймінг '),
user, user,
const TextSpan(text: ' для '), const TextSpan(text: ' для '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'СТРІМ ЗАКІНЧИВСЯ'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Написати повідомлення'; case 'stream.chat.write.label': return 'Написати повідомлення';
case 'stream.chat.write.no_signer': return 'Неможливо писати повідомлення з логіном npub'; case 'stream.chat.write.no_signer': return 'Неможливо писати повідомлення з логіном npub';
case 'stream.chat.write.login': return 'Будь ласка, авторизуйтесь, щоб надсилати повідомлення'; case 'stream.chat.write.login': return 'Будь ласка, авторизуйтесь, щоб надсилати повідомлення';
case 'stream.chat.badge.awarded_to': return 'Нагороджується:'; case 'stream.chat.badge.awarded_to': return 'Нагороджується:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Рейд у ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Рейд у ${time}';
case 'goal.title': return ({ required Object amount}) => 'Мета: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Мета: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Залишилося: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Залишилося: ${amount}';
case 'goal.complete': return 'ЗАВЕРШИТИ'; case 'goal.complete': return 'ЗАВЕРШИТИ';
case 'button.login': return 'Логін'; case 'button.login': return 'Логін';
case 'button.logout': return 'Вийти з системи'; case 'button.logout': return 'Вийти з системи';
@ -380,18 +381,18 @@ extension on TranslationsUk {
case 'button.unmute': return 'Увімкнути звук.'; case 'button.unmute': return 'Увімкнути звук.';
case 'button.share': return 'Поділіться'; case 'button.share': return 'Поділіться';
case 'button.save': return 'Зберегти'; case 'button.save': return 'Зберегти';
case 'embed.article_by': return ({ required Object name}) => 'Стаття за посиланням ${name}'; case 'embed.article_by': return ({required Object name}) => 'Стаття за посиланням ${name}';
case 'embed.note_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 'embed.live_stream_by': return ({required Object name}) => 'Пряма трансляція на ${name}';
case 'stream_list.following': return 'Після того, як'; case 'stream_list.following': return 'Після того, як';
case 'stream_list.live': return 'Наживо'; case 'stream_list.live': return 'Наживо';
case 'stream_list.planned': return 'Заплановано'; case 'stream_list.planned': return 'Заплановано';
case 'stream_list.ended': 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.custom_amount': return 'Нестандартна сума';
case 'zap.confirm': return 'Підтвердити'; case 'zap.confirm': return 'Підтвердити';
case 'zap.comment': 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_zap': return 'Zap!';
case 'zap.button_open_wallet': return 'Відкрити в Гаманці'; case 'zap.button_open_wallet': return 'Відкрити в Гаманці';
case 'zap.copy': return 'Скопійовано в буфер обміну'; case 'zap.copy': return 'Скопійовано в буфер обміну';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsVi implements Translations { class TranslationsVi extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsVi({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsVi({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsVi implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsVi implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 TranslationsVi _root = this; // ignore: unused_field late final TranslationsVi _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsVi implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamVi implements TranslationsStreamEn { class _TranslationsStreamVi extends TranslationsStreamEn {
_TranslationsStreamVi._(this._root); _TranslationsStreamVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusVi status = _TranslationsStreamStatusVi._(_root); @override late final _TranslationsStreamStatusVi status = _TranslationsStreamStatusVi._(_root);
@override String started({ required Object timestamp}) => 'Started ${timestamp}'; @override String started({required Object timestamp}) => 'Started ${timestamp}';
@override late final _TranslationsStreamChatVi chat = _TranslationsStreamChatVi._(_root); @override late final _TranslationsStreamChatVi chat = _TranslationsStreamChatVi._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalVi implements TranslationsGoalEn { class _TranslationsGoalVi extends TranslationsGoalEn {
_TranslationsGoalVi._(this._root); _TranslationsGoalVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => 'Goal: ${amount}'; @override String title({required Object amount}) => 'Goal: ${amount}';
@override String remaining({ required Object amount}) => 'Remaining: ${amount}'; @override String remaining({required Object amount}) => 'Remaining: ${amount}';
@override String get complete => 'COMPLETE'; @override String get complete => 'COMPLETE';
} }
// Path: button // Path: button
class _TranslationsButtonVi implements TranslationsButtonEn { class _TranslationsButtonVi extends TranslationsButtonEn {
_TranslationsButtonVi._(this._root); _TranslationsButtonVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonVi implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedVi implements TranslationsEmbedEn { class _TranslationsEmbedVi extends TranslationsEmbedEn {
_TranslationsEmbedVi._(this._root); _TranslationsEmbedVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => 'Article by ${name}'; @override String article_by({required Object name}) => 'Article by ${name}';
@override String note_by({ required Object name}) => 'Note by ${name}'; @override String note_by({required Object name}) => 'Note by ${name}';
@override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; @override String live_stream_by({required Object name}) => 'Live stream by ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListVi implements TranslationsStreamListEn { class _TranslationsStreamListVi extends TranslationsStreamListEn {
_TranslationsStreamListVi._(this._root); _TranslationsStreamListVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListVi implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapVi implements TranslationsZapEn { class _TranslationsZapVi extends TranslationsZapEn {
_TranslationsZapVi._(this._root); _TranslationsZapVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object name}) => 'Zap ${name}'; @override String title({required Object name}) => 'Zap ${name}';
@override String get custom_amount => 'Custom Amount'; @override String get custom_amount => 'Custom Amount';
@override String get confirm => 'Confirm'; @override String get confirm => 'Confirm';
@override String get comment => 'Comment'; @override String get comment => '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_zap => 'Zap';
@override String get button_open_wallet => 'Open in Wallet'; @override String get button_open_wallet => 'Open in Wallet';
@override String get copy => 'Copied to clipboard'; @override String get copy => 'Copied to clipboard';
@ -163,8 +164,8 @@ class _TranslationsZapVi implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileVi implements TranslationsProfileEn { class _TranslationsProfileVi extends TranslationsProfileEn {
_TranslationsProfileVi._(this._root); _TranslationsProfileVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileVi implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginVi implements TranslationsLoginEn { class _TranslationsLoginVi extends TranslationsLoginEn {
_TranslationsLoginVi._(this._root); _TranslationsLoginVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginVi implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusVi implements TranslationsStreamStatusEn { class _TranslationsStreamStatusVi extends TranslationsStreamStatusEn {
_TranslationsStreamStatusVi._(this._root); _TranslationsStreamStatusVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusVi implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatVi implements TranslationsStreamChatEn { class _TranslationsStreamChatVi extends TranslationsStreamChatEn {
_TranslationsStreamChatVi._(this._root); _TranslationsStreamChatVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => 'CHAT DISABLED'; @override String get disabled => 'CHAT DISABLED';
@override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; @override String disabled_timeout({required Object time}) => 'Timeout expires: ${time}';
/// Chat message showing timeout events /// Chat message showing timeout events
@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, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// Stream ended footer at bottom of chat /// Stream ended footer at bottom of chat
@override String get ended => 'STREAM ENDED'; @override String get ended => 'STREAM ENDED';
/// Chat message showing stream zaps /// Chat message showing 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteVi write = _TranslationsStreamChatWriteVi._(_root); @override late final _TranslationsStreamChatWriteVi write = _TranslationsStreamChatWriteVi._(_root);
@override late final _TranslationsStreamChatBadgeVi badge = _TranslationsStreamChatBadgeVi._(_root); @override late final _TranslationsStreamChatBadgeVi badge = _TranslationsStreamChatBadgeVi._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatVi implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorVi implements TranslationsZapErrorEn { class _TranslationsZapErrorVi extends TranslationsZapErrorEn {
_TranslationsZapErrorVi._(this._root); _TranslationsZapErrorVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorVi implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditVi implements TranslationsProfileEditEn { class _TranslationsProfileEditVi extends TranslationsProfileEditEn {
_TranslationsProfileEditVi._(this._root); _TranslationsProfileEditVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditVi implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorVi implements TranslationsLoginErrorEn { class _TranslationsLoginErrorVi extends TranslationsLoginErrorEn {
_TranslationsLoginErrorVi._(this._root); _TranslationsLoginErrorVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorVi implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteVi implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteVi extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteVi._(this._root); _TranslationsStreamChatWriteVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteVi implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeVi implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeVi extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeVi._(this._root); _TranslationsStreamChatBadgeVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeVi implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidVi implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidVi extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidVi._(this._root); _TranslationsStreamChatRaidVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
// Translations // Translations
/// Chat raid message to another stream /// Chat raid message to another stream
@override String to({ required Object name}) => 'RAIDING ${name}'; @override String to({required Object name}) => 'RAIDING ${name}';
/// Chat raid message from another stream /// Chat raid message from another stream
@override String from({ required Object name}) => 'RAID FROM ${name}'; @override String from({required Object name}) => 'RAID FROM ${name}';
/// Countdown timer for auto-raiding /// Countdown timer for auto-raiding
@override String countdown({ required Object time}) => 'Raiding in ${time}'; @override String countdown({required Object time}) => 'Raiding in ${time}';
} }
// Path: profile.edit.error // Path: profile.edit.error
class _TranslationsProfileEditErrorVi implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorVi extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorVi._(this._root); _TranslationsProfileEditErrorVi._(TranslationsVi root) : this._root = root, super.internal(root);
final TranslationsVi _root; // ignore: unused_field final TranslationsVi _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsVi {
case 'stream.status.live': return 'LIVE'; case 'stream.status.live': return 'LIVE';
case 'stream.status.ended': return 'ENDED'; case 'stream.status.ended': return 'ENDED';
case 'stream.status.planned': return 'PLANNED'; case 'stream.status.planned': return 'PLANNED';
case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => 'Started ${timestamp}';
case 'stream.chat.disabled': return 'CHAT DISABLED'; case 'stream.chat.disabled': return 'CHAT DISABLED';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => 'Timeout expires: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' timed out '), const TextSpan(text: ' timed out '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return 'STREAM ENDED'; 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, user,
const TextSpan(text: ' zapped '), const TextSpan(text: ' zapped '),
amount, amount,
const TextSpan(text: ' sats'), const TextSpan(text: ' sats'),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return 'Write message'; 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.no_signer': return 'Can\'t write messages with npub login';
case 'stream.chat.write.login': return 'Please login to send messages'; case 'stream.chat.write.login': return 'Please login to send messages';
case 'stream.chat.badge.awarded_to': return 'Awarded to:'; case 'stream.chat.badge.awarded_to': return 'Awarded to:';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => 'Raiding in ${time}';
case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; case 'goal.title': return ({required Object amount}) => 'Goal: ${amount}';
case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; case 'goal.remaining': return ({required Object amount}) => 'Remaining: ${amount}';
case 'goal.complete': return 'COMPLETE'; case 'goal.complete': return 'COMPLETE';
case 'button.login': return 'Login'; case 'button.login': return 'Login';
case 'button.logout': return 'Logout'; case 'button.logout': return 'Logout';
@ -380,18 +381,18 @@ extension on TranslationsVi {
case 'button.unmute': return 'Unmute'; case 'button.unmute': return 'Unmute';
case 'button.share': return 'Share'; case 'button.share': return 'Share';
case 'button.save': return 'Save'; case 'button.save': return 'Save';
case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; case 'embed.article_by': return ({required Object name}) => 'Article by ${name}';
case 'embed.note_by': return ({ required Object name}) => 'Note 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 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return 'Following'; case 'stream_list.following': return 'Following';
case 'stream_list.live': return 'Live'; case 'stream_list.live': return 'Live';
case 'stream_list.planned': return 'Planned'; case 'stream_list.planned': return 'Planned';
case 'stream_list.ended': return 'Ended'; 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.custom_amount': return 'Custom Amount';
case 'zap.confirm': return 'Confirm'; case 'zap.confirm': return 'Confirm';
case 'zap.comment': return 'Comment'; 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_zap': return 'Zap';
case 'zap.button_open_wallet': return 'Open in Wallet'; case 'zap.button_open_wallet': return 'Open in Wallet';
case 'zap.copy': return 'Copied to clipboard'; case 'zap.copy': return 'Copied to clipboard';

View File

@ -4,14 +4,13 @@
// coverage:ignore-file // coverage:ignore-file
// ignore_for_file: type=lint, unused_import // ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:slang/generated.dart'; import 'package:slang/generated.dart';
import 'strings.g.dart'; import 'strings.g.dart';
// Path: <root> // Path: <root>
class TranslationsZh implements Translations { class TranslationsZh extends Translations {
/// You can call this constructor and build your own translation instance of this locale. /// You can call this constructor and build your own translation instance of this locale.
/// Constructing via the enum [AppLocale.build] is preferred. /// Constructing via the enum [AppLocale.build] is preferred.
TranslationsZh({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta}) TranslationsZh({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? meta})
@ -21,7 +20,9 @@ class TranslationsZh implements Translations {
overrides: overrides ?? {}, overrides: overrides ?? {},
cardinalResolver: cardinalResolver, cardinalResolver: cardinalResolver,
ordinalResolver: ordinalResolver, ordinalResolver: ordinalResolver,
) { ),
super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) {
super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta
$meta.setFlatMapFunction(_flatMapFunction); $meta.setFlatMapFunction(_flatMapFunction);
} }
@ -29,7 +30,7 @@ class TranslationsZh implements Translations {
@override final TranslationMetadata<AppLocale, Translations> $meta; @override final TranslationMetadata<AppLocale, Translations> $meta;
/// Access flat map /// 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 late final TranslationsZh _root = this; // ignore: unused_field
@ -70,32 +71,32 @@ class TranslationsZh implements Translations {
} }
// Path: stream // Path: stream
class _TranslationsStreamZh implements TranslationsStreamEn { class _TranslationsStreamZh extends TranslationsStreamEn {
_TranslationsStreamZh._(this._root); _TranslationsStreamZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
// Translations // Translations
@override late final _TranslationsStreamStatusZh status = _TranslationsStreamStatusZh._(_root); @override late final _TranslationsStreamStatusZh status = _TranslationsStreamStatusZh._(_root);
@override String started({ required Object timestamp}) => '開始 ${timestamp}'; @override String started({required Object timestamp}) => '開始 ${timestamp}';
@override late final _TranslationsStreamChatZh chat = _TranslationsStreamChatZh._(_root); @override late final _TranslationsStreamChatZh chat = _TranslationsStreamChatZh._(_root);
} }
// Path: goal // Path: goal
class _TranslationsGoalZh implements TranslationsGoalEn { class _TranslationsGoalZh extends TranslationsGoalEn {
_TranslationsGoalZh._(this._root); _TranslationsGoalZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object amount}) => '目標:${amount}'; @override String title({required Object amount}) => '目標:${amount}';
@override String remaining({ required Object amount}) => '剩餘: ${amount}'; @override String remaining({required Object amount}) => '剩餘: ${amount}';
@override String get complete => '完成'; @override String get complete => '完成';
} }
// Path: button // Path: button
class _TranslationsButtonZh implements TranslationsButtonEn { class _TranslationsButtonZh extends TranslationsButtonEn {
_TranslationsButtonZh._(this._root); _TranslationsButtonZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -120,20 +121,20 @@ class _TranslationsButtonZh implements TranslationsButtonEn {
} }
// Path: embed // Path: embed
class _TranslationsEmbedZh implements TranslationsEmbedEn { class _TranslationsEmbedZh extends TranslationsEmbedEn {
_TranslationsEmbedZh._(this._root); _TranslationsEmbedZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
// Translations // Translations
@override String article_by({ required Object name}) => '文章來源: ${name}'; @override String article_by({required Object name}) => '文章來源: ${name}';
@override String note_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 live_stream_by({required Object name}) => 'Live stream by ${name}';
} }
// Path: stream_list // Path: stream_list
class _TranslationsStreamListZh implements TranslationsStreamListEn { class _TranslationsStreamListZh extends TranslationsStreamListEn {
_TranslationsStreamListZh._(this._root); _TranslationsStreamListZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -145,17 +146,17 @@ class _TranslationsStreamListZh implements TranslationsStreamListEn {
} }
// Path: zap // Path: zap
class _TranslationsZapZh implements TranslationsZapEn { class _TranslationsZapZh extends TranslationsZapEn {
_TranslationsZapZh._(this._root); _TranslationsZapZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
// Translations // Translations
@override String title({ required Object name}) => '打閃${name}'; @override String title({required Object name}) => '打閃${name}';
@override String get custom_amount => '自訂金額'; @override String get custom_amount => '自訂金額';
@override String get confirm => '確認'; @override String get confirm => '確認';
@override String get comment => '評論'; @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_zap => '打閃';
@override String get button_open_wallet => '在錢包中開啟'; @override String get button_open_wallet => '在錢包中開啟';
@override String get copy => '複製到剪貼簿'; @override String get copy => '複製到剪貼簿';
@ -163,8 +164,8 @@ class _TranslationsZapZh implements TranslationsZapEn {
} }
// Path: profile // Path: profile
class _TranslationsProfileZh implements TranslationsProfileEn { class _TranslationsProfileZh extends TranslationsProfileEn {
_TranslationsProfileZh._(this._root); _TranslationsProfileZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -174,8 +175,8 @@ class _TranslationsProfileZh implements TranslationsProfileEn {
} }
// Path: login // Path: login
class _TranslationsLoginZh implements TranslationsLoginEn { class _TranslationsLoginZh extends TranslationsLoginEn {
_TranslationsLoginZh._(this._root); _TranslationsLoginZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -188,8 +189,8 @@ class _TranslationsLoginZh implements TranslationsLoginEn {
} }
// Path: stream.status // Path: stream.status
class _TranslationsStreamStatusZh implements TranslationsStreamStatusEn { class _TranslationsStreamStatusZh extends TranslationsStreamStatusEn {
_TranslationsStreamStatusZh._(this._root); _TranslationsStreamStatusZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -200,34 +201,34 @@ class _TranslationsStreamStatusZh implements TranslationsStreamStatusEn {
} }
// Path: stream.chat // Path: stream.chat
class _TranslationsStreamChatZh implements TranslationsStreamChatEn { class _TranslationsStreamChatZh extends TranslationsStreamChatEn {
_TranslationsStreamChatZh._(this._root); _TranslationsStreamChatZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
// Translations // Translations
@override String get disabled => '關閉聊天'; @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, mod,
const TextSpan(text: ' 超時 '), const TextSpan(text: ' 超時 '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
/// 聊天底部的流結束頁尾 /// 聊天底部的流結束頁尾
@override String get ended => '串流結束'; @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, user,
const TextSpan(text: ' 打閃了 '), const TextSpan(text: ' 打閃了 '),
amount, amount,
const TextSpan(text: ''), const TextSpan(text: ''),
], style: style, recognizer: recognizer); ]);
@override late final _TranslationsStreamChatWriteZh write = _TranslationsStreamChatWriteZh._(_root); @override late final _TranslationsStreamChatWriteZh write = _TranslationsStreamChatWriteZh._(_root);
@override late final _TranslationsStreamChatBadgeZh badge = _TranslationsStreamChatBadgeZh._(_root); @override late final _TranslationsStreamChatBadgeZh badge = _TranslationsStreamChatBadgeZh._(_root);
@ -235,8 +236,8 @@ class _TranslationsStreamChatZh implements TranslationsStreamChatEn {
} }
// Path: zap.error // Path: zap.error
class _TranslationsZapErrorZh implements TranslationsZapErrorEn { class _TranslationsZapErrorZh extends TranslationsZapErrorEn {
_TranslationsZapErrorZh._(this._root); _TranslationsZapErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -247,8 +248,8 @@ class _TranslationsZapErrorZh implements TranslationsZapErrorEn {
} }
// Path: profile.edit // Path: profile.edit
class _TranslationsProfileEditZh implements TranslationsProfileEditEn { class _TranslationsProfileEditZh extends TranslationsProfileEditEn {
_TranslationsProfileEditZh._(this._root); _TranslationsProfileEditZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -261,8 +262,8 @@ class _TranslationsProfileEditZh implements TranslationsProfileEditEn {
} }
// Path: login.error // Path: login.error
class _TranslationsLoginErrorZh implements TranslationsLoginErrorEn { class _TranslationsLoginErrorZh extends TranslationsLoginErrorEn {
_TranslationsLoginErrorZh._(this._root); _TranslationsLoginErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -271,8 +272,8 @@ class _TranslationsLoginErrorZh implements TranslationsLoginErrorEn {
} }
// Path: stream.chat.write // Path: stream.chat.write
class _TranslationsStreamChatWriteZh implements TranslationsStreamChatWriteEn { class _TranslationsStreamChatWriteZh extends TranslationsStreamChatWriteEn {
_TranslationsStreamChatWriteZh._(this._root); _TranslationsStreamChatWriteZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -289,8 +290,8 @@ class _TranslationsStreamChatWriteZh implements TranslationsStreamChatWriteEn {
} }
// Path: stream.chat.badge // Path: stream.chat.badge
class _TranslationsStreamChatBadgeZh implements TranslationsStreamChatBadgeEn { class _TranslationsStreamChatBadgeZh extends TranslationsStreamChatBadgeEn {
_TranslationsStreamChatBadgeZh._(this._root); _TranslationsStreamChatBadgeZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -301,26 +302,26 @@ class _TranslationsStreamChatBadgeZh implements TranslationsStreamChatBadgeEn {
} }
// Path: stream.chat.raid // Path: stream.chat.raid
class _TranslationsStreamChatRaidZh implements TranslationsStreamChatRaidEn { class _TranslationsStreamChatRaidZh extends TranslationsStreamChatRaidEn {
_TranslationsStreamChatRaidZh._(this._root); _TranslationsStreamChatRaidZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
// Translations // 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 // Path: profile.edit.error
class _TranslationsProfileEditErrorZh implements TranslationsProfileEditErrorEn { class _TranslationsProfileEditErrorZh extends TranslationsProfileEditErrorEn {
_TranslationsProfileEditErrorZh._(this._root); _TranslationsProfileEditErrorZh._(TranslationsZh root) : this._root = root, super.internal(root);
final TranslationsZh _root; // ignore: unused_field final TranslationsZh _root; // ignore: unused_field
@ -344,32 +345,32 @@ extension on TranslationsZh {
case 'stream.status.live': return '直播'; case 'stream.status.live': return '直播';
case 'stream.status.ended': return '結束'; case 'stream.status.ended': return '結束';
case 'stream.status.planned': return '計劃'; case 'stream.status.planned': return '計劃';
case 'stream.started': return ({ required Object timestamp}) => '開始 ${timestamp}'; case 'stream.started': return ({required Object timestamp}) => '開始 ${timestamp}';
case 'stream.chat.disabled': return '關閉聊天'; case 'stream.chat.disabled': return '關閉聊天';
case 'stream.chat.disabled_timeout': return ({ required Object time}) => '超時過期: ${time}'; case 'stream.chat.disabled_timeout': return ({required Object time}) => '超時過期: ${time}';
case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ case 'stream.chat.timeout': return ({required InlineSpan mod, required InlineSpan user, required InlineSpan time}) => TextSpan(children: [
mod, mod,
const TextSpan(text: ' 超時 '), const TextSpan(text: ' 超時 '),
user, user,
const TextSpan(text: ' for '), const TextSpan(text: ' for '),
time, time,
], style: style, recognizer: recognizer); ]);
case 'stream.chat.ended': return '串流結束'; 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, user,
const TextSpan(text: ' 打閃了 '), const TextSpan(text: ' 打閃了 '),
amount, amount,
const TextSpan(text: ''), const TextSpan(text: ''),
], style: style, recognizer: recognizer); ]);
case 'stream.chat.write.label': return '寫訊息'; case 'stream.chat.write.label': return '寫訊息';
case 'stream.chat.write.no_signer': return '無法使用 npub 登入撰寫訊息'; case 'stream.chat.write.no_signer': return '無法使用 npub 登入撰寫訊息';
case 'stream.chat.write.login': return '請登入以傳送訊息'; case 'stream.chat.write.login': return '請登入以傳送訊息';
case 'stream.chat.badge.awarded_to': return '頒發給'; case 'stream.chat.badge.awarded_to': return '頒發給';
case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; case 'stream.chat.raid.to': return ({required Object name}) => 'RAIDING ${name}';
case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; case 'stream.chat.raid.from': return ({required Object name}) => 'RAID FROM ${name}';
case 'stream.chat.raid.countdown': return ({ required Object time}) => '突襲 ${time}'; case 'stream.chat.raid.countdown': return ({required Object time}) => '突襲 ${time}';
case 'goal.title': return ({ required Object amount}) => '目標:${amount}'; case 'goal.title': return ({required Object amount}) => '目標:${amount}';
case 'goal.remaining': return ({ required Object amount}) => '剩餘: ${amount}'; case 'goal.remaining': return ({required Object amount}) => '剩餘: ${amount}';
case 'goal.complete': return '完成'; case 'goal.complete': return '完成';
case 'button.login': return '登錄'; case 'button.login': return '登錄';
case 'button.logout': return '登出'; case 'button.logout': return '登出';
@ -380,18 +381,18 @@ extension on TranslationsZh {
case 'button.unmute': return '解除静音'; case 'button.unmute': return '解除静音';
case 'button.share': return '分享'; case 'button.share': return '分享';
case 'button.save': return '保存'; case 'button.save': return '保存';
case 'embed.article_by': return ({ required Object name}) => '文章來源: ${name}'; case 'embed.article_by': return ({required Object name}) => '文章來源: ${name}';
case 'embed.note_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 'embed.live_stream_by': return ({required Object name}) => 'Live stream by ${name}';
case 'stream_list.following': return '已關注'; case 'stream_list.following': return '已關注';
case 'stream_list.live': return '直播'; case 'stream_list.live': return '直播';
case 'stream_list.planned': return '已計畫'; case 'stream_list.planned': return '已計畫';
case 'stream_list.ended': 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.custom_amount': return '自訂金額';
case 'zap.confirm': return '確認'; case 'zap.confirm': return '確認';
case 'zap.comment': 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_zap': return '打閃';
case 'zap.button_open_wallet': return '在錢包中開啟'; case 'zap.button_open_wallet': return '在錢包中開啟';
case 'zap.copy': return '複製到剪貼簿'; case 'zap.copy': return '複製到剪貼簿';

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -24,7 +24,7 @@ class LoginPage extends StatelessWidget {
if (state.data ?? false) { if (state.data ?? false) {
return BasicButton.text( return BasicButton.text(
t.login.amber, t.login.amber,
onTap: () async { onTap: (context) async {
final amber = Amberflutter(); final amber = Amberflutter();
final result = await amber.getPublicKey(); final result = await amber.getPublicKey();
if (result['signature'] != null) { if (result['signature'] != null) {
@ -41,7 +41,7 @@ class LoginPage extends StatelessWidget {
} }
}, },
), ),
BasicButton.text(t.login.key, onTap: () => context.push("/login/key")), BasicButton.text(t.login.key, onTap: (context) => context.push("/login/key")),
Container( Container(
margin: EdgeInsets.symmetric(vertical: 20), margin: EdgeInsets.symmetric(vertical: 20),
height: 1, height: 1,
@ -51,7 +51,7 @@ class LoginPage extends StatelessWidget {
), ),
BasicButton.text( BasicButton.text(
t.login.create, t.login.create,
onTap: () => context.push("/login/new"), onTap: (context) => context.push("/login/new"),
), ),
], ],
); );

View File

@ -29,7 +29,7 @@ class _LoginInputPage extends State<LoginInputPage> {
), ),
BasicButton.text( BasicButton.text(
t.button.login, t.button.login,
onTap: () async { onTap: (context) async {
try { try {
if (_controller.text.startsWith("bunker://")) { if (_controller.text.startsWith("bunker://")) {
// not supported yet in ndk // not supported yet in ndk

View File

@ -74,7 +74,7 @@ class _NewAccountPage extends State<NewAccountPage> {
return BasicButton.text( return BasicButton.text(
t.button.login, t.button.login,
disabled: _loading || value.text.isEmpty, disabled: _loading || value.text.isEmpty,
onTap: () { onTap: (context) {
setState(() { setState(() {
_loading = true; _loading = true;
_nameFocus.unfocus(); _nameFocus.unfocus();

View File

@ -76,7 +76,7 @@ class ProfilePage extends StatelessWidget {
children: [ children: [
BasicButton.text( BasicButton.text(
t.button.logout, t.button.logout,
onTap: () { onTap: (context) {
loginData.logout(); loginData.logout();
ndk.accounts.logout(); ndk.accounts.logout();
context.go("/"); context.go("/");
@ -84,7 +84,7 @@ class ProfilePage extends StatelessWidget {
), ),
BasicButton.text( BasicButton.text(
t.button.edit_profile, t.button.edit_profile,
onTap: () { onTap: (context) {
context.push("/settings/profile"); context.push("/settings/profile");
}, },
), ),

View File

@ -87,7 +87,7 @@ class SettingsProfilePage extends StatelessWidget {
BasicButton.text( BasicButton.text(
t.button.save, t.button.save,
disabled: v, disabled: v,
onTap: () async { onTap: (context) async {
_loading.value = true; _loading.value = true;
try { try {
final newMeta = Metadata( final newMeta = Metadata(

View File

@ -0,0 +1,77 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:zap_stream_flutter/const.dart';
import 'package:zap_stream_flutter/i18n/strings.g.dart';
import 'package:zap_stream_flutter/login.dart';
import 'package:zap_stream_flutter/theme.dart';
import 'package:zap_stream_flutter/widgets/button.dart';
class SettingsWalletPage extends StatefulWidget {
const SettingsWalletPage({super.key});
@override
State<StatefulWidget> createState() => _Inner();
}
class _Inner extends State<SettingsWalletPage> {
late final TextEditingController _uri;
String? _error;
@override
void initState() {
_uri = TextEditingController();
super.initState();
}
@override
Widget build(BuildContext context) {
final pubkey = ndk.accounts.getPublicKey();
if (pubkey == null) return Text(t.wallet.error.logged_out);
return ValueListenableBuilder(
valueListenable: loginData,
builder: (context, state, child) {
if (state?.wallet == null) {
return Column(
spacing: 8,
children: [
TextField(
controller: _uri,
decoration: InputDecoration(labelText: t.wallet.connect_wallet),
),
BasicButton.text(
t.button.connect,
onTap: (context) async {
try {
await ndk.nwc.connect(_uri.text);
final cfg = WalletConfig(
type: WalletType.nwc,
data: _uri.text,
);
loginData.value = LoginAccount(
type: loginData.value!.type,
pubkey: loginData.value!.pubkey,
privateKey: loginData.value!.privateKey,
signerRelays: loginData.value!.signerRelays,
wallet: cfg,
);
if (context.mounted) {
context.pop();
}
} catch (e) {
setState(() {
_error = e is String ? e : e.toString();
});
}
},
),
if (_error != null)
Text(_error!, style: TextStyle(color: WARNING)),
],
);
}
return SizedBox.shrink();
},
);
}
}

View File

@ -169,7 +169,7 @@ class _StreamPage extends State<StreamPage> with RouteAware {
color: PRIMARY_1, color: PRIMARY_1,
borderRadius: DEFAULT_BR, borderRadius: DEFAULT_BR,
), ),
onTap: () { onTap: (context) {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
constraints: BoxConstraints.expand(), constraints: BoxConstraints.expand(),

View File

@ -6,7 +6,7 @@ class BasicButton extends StatelessWidget {
final BoxDecoration? decoration; final BoxDecoration? decoration;
final EdgeInsetsGeometry? padding; final EdgeInsetsGeometry? padding;
final EdgeInsetsGeometry? margin; final EdgeInsetsGeometry? margin;
final void Function()? onTap; final void Function(BuildContext)? onTap;
final bool? disabled; final bool? disabled;
const BasicButton( const BasicButton(
@ -24,7 +24,7 @@ class BasicButton extends StatelessWidget {
BoxDecoration? decoration, BoxDecoration? decoration,
EdgeInsetsGeometry? padding, EdgeInsetsGeometry? padding,
EdgeInsetsGeometry? margin, EdgeInsetsGeometry? margin,
void Function()? onTap, void Function(BuildContext)? onTap,
double? fontSize, double? fontSize,
bool? disabled, bool? disabled,
Icon? icon, Icon? icon,
@ -66,7 +66,7 @@ class BasicButton extends StatelessWidget {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
if (!(disabled ?? false) && onTap != null) { if (!(disabled ?? false) && onTap != null) {
onTap!(); onTap!(context);
} }
}, },
child: (disabled ?? false) ? Opacity(opacity: 0.5, child: inner) : inner, child: (disabled ?? false) ? Opacity(opacity: 0.5, child: inner) : inner,

View File

@ -63,7 +63,7 @@ class FollowButton extends StatelessWidget {
borderRadius: DEFAULT_BR, borderRadius: DEFAULT_BR,
color: LAYER_2, color: LAYER_2,
), ),
onTap: () async { onTap: (_) async {
_loading.value = true; _loading.value = true;
try { try {
if (onTap != null) { if (onTap != null) {

View File

@ -1,5 +1,6 @@
import 'package:duration/duration.dart'; import 'package:duration/duration.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:ndk/ndk.dart'; import 'package:ndk/ndk.dart';
import 'package:zap_stream_flutter/const.dart'; import 'package:zap_stream_flutter/const.dart';
import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/theme.dart';
@ -34,8 +35,7 @@ class _ChatModalWidget extends State<ChatModalWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isModerator = final isModerator = widget.stream.info.host == ndk.accounts.getPublicKey();
widget.stream.info.host == ndk.accounts.getPublicKey();
return Container( return Container(
padding: EdgeInsets.fromLTRB(5, 10, 5, 0), padding: EdgeInsets.fromLTRB(5, 10, 5, 0),
@ -74,13 +74,16 @@ class _ChatModalWidget extends State<ChatModalWidget> {
), ),
), ),
onPressed: () { onPressed: () {
Navigator.pop(context); context.pop();
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
builder: (ctx) { builder: (context) {
return ZapWidget( return ZapWidget(
pubkey: widget.event.pubKey, pubkey: widget.event.pubKey,
target: widget.event, target: widget.event,
onPaid: (_) {
context.pop();
},
); );
}, },
); );

View File

@ -44,7 +44,7 @@ class MuteButton extends StatelessWidget {
color: isMuted ? LAYER_2 : WARNING, color: isMuted ? LAYER_2 : WARNING,
borderRadius: DEFAULT_BR, borderRadius: DEFAULT_BR,
), ),
onTap: () async { onTap: (_) async {
if (onTap != null) { if (onTap != null) {
onTap!(); onTap!();
} }

View File

@ -48,7 +48,7 @@ class StreamInfoWidget extends StatelessWidget {
BasicButton.text( BasicButton.text(
t.button.share, t.button.share,
icon: Icon(Icons.share, size: 16), icon: Icon(Icons.share, size: 16),
onTap: () { onTap: (_) {
SharePlus.instance.share( SharePlus.instance.share(
ShareParams( ShareParams(
title: stream.info.title, title: stream.info.title,

View File

@ -4,6 +4,7 @@ import 'package:clipboard/clipboard.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:ndk/domain_layer/usecases/lnurl/lnurl.dart'; import 'package:ndk/domain_layer/usecases/lnurl/lnurl.dart';
import 'package:ndk/ndk.dart'; import 'package:ndk/ndk.dart';
import 'package:qr_flutter/qr_flutter.dart'; import 'package:qr_flutter/qr_flutter.dart';
@ -20,6 +21,7 @@ class ZapWidget extends StatefulWidget {
final Nip01Event? target; final Nip01Event? target;
final List<Nip01Event>? otherTargets; final List<Nip01Event>? otherTargets;
final List<List<String>>? zapTags; final List<List<String>>? zapTags;
final void Function(String preimage)? onPaid;
const ZapWidget({ const ZapWidget({
super.key, super.key,
@ -27,6 +29,7 @@ class ZapWidget extends StatefulWidget {
this.target, this.target,
this.zapTags, this.zapTags,
this.otherTargets, this.otherTargets,
this.onPaid,
}); });
@override @override
@ -57,6 +60,7 @@ class _ZapWidget extends State<ZapWidget> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
width: double.maxFinite,
child: Column( child: Column(
spacing: 10, spacing: 10,
children: [ children: [
@ -101,7 +105,7 @@ class _ZapWidget extends State<ZapWidget> {
), ),
BasicButton.text( BasicButton.text(
t.zap.confirm, t.zap.confirm,
onTap: () { onTap: (context) {
final newAmount = int.tryParse(_customAmount.text); final newAmount = int.tryParse(_customAmount.text);
if (newAmount != null) { if (newAmount != null) {
setState(() { setState(() {
@ -129,13 +133,13 @@ class _ZapWidget extends State<ZapWidget> {
: t.zap.button_zap, : t.zap.button_zap,
disabled: _amount == null, disabled: _amount == null,
decoration: BoxDecoration(color: LAYER_3, borderRadius: DEFAULT_BR), decoration: BoxDecoration(color: LAYER_3, borderRadius: DEFAULT_BR),
onTap: () async { onTap: (context) async {
try { try {
setState(() { setState(() {
_error = null; _error = null;
_loading = true; _loading = true;
}); });
await _loadZap(); await _loadZap(context);
} catch (e) { } catch (e) {
setState(() { setState(() {
_error = e.toString(); _error = e.toString();
@ -192,7 +196,7 @@ class _ZapWidget extends State<ZapWidget> {
), ),
BasicButton.text( BasicButton.text(
t.zap.button_open_wallet, t.zap.button_open_wallet,
onTap: () async { onTap: (_) async {
try { try {
await launchUrlString(prLink); await launchUrlString(prLink);
} catch (e) { } catch (e) {
@ -210,6 +214,13 @@ class _ZapWidget extends State<ZapWidget> {
} }
}, },
), ),
if (loginData.value?.wallet == null)
BasicButton.text(
t.zap.button_connect_wallet,
onTap: (context) async {
context.push("/settings/wallet");
},
),
if (_error != null) if (_error != null)
Text( Text(
@ -259,7 +270,7 @@ class _ZapWidget extends State<ZapWidget> {
return event; return event;
} }
Future<void> _loadZap() async { Future<void> _loadZap(BuildContext context) async {
final profile = await ndk.metadata.loadMetadata(widget.pubkey); final profile = await ndk.metadata.loadMetadata(widget.pubkey);
if (profile?.lud16 == null) { if (profile?.lud16 == null) {
throw t.zap.error.no_lud16; throw t.zap.error.no_lud16;
@ -272,9 +283,24 @@ class _ZapWidget extends State<ZapWidget> {
zapRequest: zapRequest, zapRequest: zapRequest,
); );
setState(() { final wallet = await loginData.value?.getWallet();
_pr = invoice?.invoice; if (wallet != null && invoice != null) {
}); try {
final preimage = await wallet.payInvoice(invoice.invoice);
if (widget.onPaid != null) {
widget.onPaid!(preimage);
}
} catch (e) {
setState(() {
_error = e.toString();
_pr = invoice.invoice;
});
}
} else {
setState(() {
_pr = invoice?.invoice;
});
}
} }
Widget _zapAmount(int n) { Widget _zapAmount(int n) {

View File

@ -28,5 +28,36 @@
<string>MainMenu</string> <string>MainMenu</string>
<key>NSPrincipalClass</key> <key>NSPrincipalClass</key>
<string>NSApplication</string> <string>NSApplication</string>
<key>CFBundleLocalizations</key>
<array>
<string>af</string>
<string>ar</string>
<string>ca</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>he</string>
<string>hu</string>
<string>it</string>
<string>ja</string>
<string>ko</string>
<string>nl</string>
<string>no</string>
<string>pl</string>
<string>pt</string>
<string>ro</string>
<string>ru</string>
<string>sr</string>
<string>sv</string>
<string>tr</string>
<string>uk</string>
<string>vi</string>
<string>zh</string>
</array>
</dict> </dict>
</plist> </plist>

View File

@ -1,4 +1,5 @@
base_locale: en base_locale: en
input_directory: lib/i18n input_directory: lib/i18n
input_file_pattern: .i18n.yaml input_file_pattern: .i18n.yaml
output_directory: lib/i18n output_directory: lib/i18n
fallback_strategy: base_locale