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

View File

@ -80,6 +80,7 @@ button:
unmute: Unmute
share: Share
save: Save
connect: Connect
embed:
article_by: Article by $name
note_by: Note by $name
@ -99,6 +100,7 @@ zap:
button_zap_ready: Zap $amount sats
button_zap: Zap
button_open_wallet: Open in Wallet
button_connect_wallet: Connect Wallet
copy: Copied to clipboard
error:
invalid_custom_amount: Invalid custom amount
@ -113,6 +115,10 @@ profile:
lud16: Lightning Address
error:
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:
username: "Username"
amber: Login with Amber

View File

@ -4,14 +4,13 @@
/// To regenerate, run: `dart run slang`
///
/// 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
// ignore_for_file: type=lint, unused_import
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:slang/generated.dart';

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -42,8 +42,7 @@ stream:
description: التسمية على مربع إدخال رسالة الدردشة
no_signer: لا يمكن كتابة الرسائل باستخدام تسجيل الدخول إلى npub
"@no_signer":
description: تظهر رسالة إدخال الدردشة عندما يقوم المستخدم بتسجيل الدخول باستخدام
مفتاح الحانة فقط
description: تظهر رسالة إدخال الدردشة عندما يقوم المستخدم بتسجيل الدخول باستخدام مفتاح الحانة فقط
login: الرجاء تسجيل الدخول لإرسال الرسائل
"@login":
description: تظهر رسالة إدخال الدردشة عند تسجيل خروج المستخدم من المحادثة

View File

@ -1,7 +1,6 @@
upload_avatar: Nahrát avatar
"@upload_avatar":
description: Text vyzývající uživatele, aby stiskl zástupný symbol avatara pro
zahájení nahrávání
description: Text vyzývající uživatele, aby stiskl zástupný symbol avatara pro zahájení nahrávání
most_zapped_streamers: Nejvíce zapnutých streamerů
"@most_zapped_streamers":
description: Směřování přes uvedené horní streamery podle zaps
@ -43,8 +42,7 @@ stream:
description: Popisek na vstupním poli zprávy chatu
no_signer: Nelze psát zprávy s přihlášením npub
"@no_signer":
description: Vstupní zpráva chatu se zobrazí, když je uživatel přihlášen pouze
pomocí pubkey
description: Vstupní zpráva chatu se zobrazí, když je uživatel přihlášen pouze pomocí pubkey
login: Pro odesílání zpráv se prosím přihlaste
"@login":
description: Vstupní zpráva chatu zobrazená při odhlášení uživatele

View File

@ -1,7 +1,6 @@
upload_avatar: Upload avatar
"@upload_avatar":
description: Tekst, der beder brugeren om at trykke på avatar-pladsholderen for
at begynde at uploade
description: Tekst, der beder brugeren om at trykke på avatar-pladsholderen for at begynde at uploade
most_zapped_streamers: De fleste zappede streamere
"@most_zapped_streamers":
description: På vej over listede topstreamere af zaps
@ -91,8 +90,7 @@ stream_list:
planned: Planlagt
ended: Afsluttet
"@stream_list":
description: Overskrifter på streaminglister efter streamingtype
live/afsluttet/planlagt osv.
description: Overskrifter på streaminglister efter streamingtype live/afsluttet/planlagt osv.
zap:
title: Zap $name
custom_amount: Brugerdefineret beløb

View File

@ -1,7 +1,6 @@
upload_avatar: Avatar hochladen
"@upload_avatar":
description: Text, der den Benutzer auffordert, auf den Avatar-Platzhalter zu
klicken, um den Upload zu starten
description: Text, der den Benutzer auffordert, auf den Avatar-Platzhalter zu klicken, um den Upload zu starten
most_zapped_streamers: Meistgezappte Streamer
"@most_zapped_streamers":
description: Überschrift über gelistete Top-Streamer von zaps
@ -43,16 +42,14 @@ stream:
description: Beschriftung des Eingabefeldes für Chatnachrichten
no_signer: Mit npub-Login können keine Nachrichten geschrieben werden
"@no_signer":
description: Chat-Eingabemeldung wird angezeigt, wenn der Benutzer nur mit
Pubkey eingeloggt ist
description: Chat-Eingabemeldung wird angezeigt, wenn der Benutzer nur mit Pubkey eingeloggt ist
login: Bitte anmelden, um Nachrichten zu senden
"@login":
description: Chat-Eingabemeldung wird angezeigt, wenn der Benutzer abgemeldet ist
badge:
awarded_to: "Verliehen an:"
"@awarded_to":
description: Überschrift über der Liste der Benutzer, die ein Abzeichen erhalten
haben
description: Überschrift über der Liste der Benutzer, die ein Abzeichen erhalten haben
raid:
to: RAIDING $name
"@to":

View File

@ -1,7 +1,6 @@
upload_avatar: Ανέβασμα Avatar
"@upload_avatar":
description: Κείμενο που προτρέπει τον χρήστη να πατήσει το εικονίδιο avatar για
να ξεκινήσει το ανέβασμα
description: Κείμενο που προτρέπει τον χρήστη να πατήσει το εικονίδιο avatar για να ξεκινήσει το ανέβασμα
most_zapped_streamers: Τα περισσότερα Zapped Streamers
"@most_zapped_streamers":
description: Επικεφαλής πάνω από τα αναφερόμενα κορυφαία streamers από zaps
@ -43,17 +42,14 @@ stream:
description: Ετικέτα στο πλαίσιο εισαγωγής μηνύματος συνομιλίας
no_signer: Δεν μπορείτε να γράψετε μηνύματα με σύνδεση στο npub
"@no_signer":
description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης είναι
συνδεδεμένος μόνο με το κλειδί pubkey
description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης είναι συνδεδεμένος μόνο με το κλειδί pubkey
login: Παρακαλώ συνδεθείτε για να στείλετε μηνύματα
"@login":
description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης έχει
αποσυνδεθεί
description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης έχει αποσυνδεθεί
badge:
awarded_to: "Απονέμεται σε:"
"@awarded_to":
description: Επικεφαλίδα πάνω από τη λίστα των χρηστών στους οποίους έχει
απονεμηθεί ένα σήμα
description: Επικεφαλίδα πάνω από τη λίστα των χρηστών στους οποίους έχει απονεμηθεί ένα σήμα
raid:
to: RAIDING $name
"@to":
@ -94,8 +90,7 @@ stream_list:
planned: Προγραμματισμένο
ended: Τελείωσε
"@stream_list":
description: Επικεφαλίδες στις λίστες ροής ανά τύπο ροής
ζωντανή/τελειωμένη/προγραμματισμένη κ.λπ.
description: Επικεφαλίδες στις λίστες ροής ανά τύπο ροής ζωντανή/τελειωμένη/προγραμματισμένη κ.λπ.
zap:
title: Zap $name
custom_amount: Προσαρμοσμένο ποσό

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,7 +1,6 @@
upload_avatar: Subir avatar
"@upload_avatar":
description: Texto que indica al usuario que pulse el marcador de avatar para
iniciar la carga
description: Texto que indica al usuario que pulse el marcador de avatar para iniciar la carga
most_zapped_streamers: Serpentinas más derribadas
"@most_zapped_streamers":
description: Encabezando streamers superiores listados por zaps
@ -43,17 +42,14 @@ stream:
description: Etiqueta del cuadro de entrada de mensajes de chat
no_signer: No se pueden escribir mensajes con el login npub
"@no_signer":
description: Mensaje de entrada en el chat que se muestra cuando el usuario está
conectado sólo con pubkey
description: Mensaje de entrada en el chat que se muestra cuando el usuario está conectado sólo con pubkey
login: Inicie sesión para enviar mensajes
"@login":
description: Mensaje de entrada al chat que se muestra cuando el usuario cierra
la sesión
description: Mensaje de entrada al chat que se muestra cuando el usuario cierra la sesión
badge:
awarded_to: "Concedido a:"
"@awarded_to":
description: Encabezamiento de la lista de usuarios a los que se ha concedido
una insignia
description: Encabezamiento de la lista de usuarios a los que se ha concedido una insignia
raid:
to: RAIDING $name
"@to":
@ -94,8 +90,7 @@ stream_list:
planned: Planificado
ended: Finalizado
"@stream_list":
description: Encabezamientos en las listas de flujos por tipo de flujo en
directo/finalizado/planificado, etc.
description: Encabezamientos en las listas de flujos por tipo de flujo en directo/finalizado/planificado, etc.
zap:
title: Zap $name
custom_amount: Importe personalizado

View File

@ -1,7 +1,6 @@
upload_avatar: Lataa avatar
"@upload_avatar":
description: Teksti, joka kehottaa käyttäjää painamaan avatar-merkkiä
aloittaakseen lataamisen.
description: Teksti, joka kehottaa käyttäjää painamaan avatar-merkkiä aloittaakseen lataamisen.
most_zapped_streamers: Eniten Zapped Streamers
"@most_zapped_streamers":
description: Päällekkäin lueteltujen alkuun streamers by zaps
@ -43,8 +42,7 @@ stream:
description: Chat-viestin syöttöruudun tarra
no_signer: Ei voi kirjoittaa viestejä npub-kirjautumisella
"@no_signer":
description: Chat-syöttöviesti näytetään, kun käyttäjä on kirjautunut sisään
vain pubkey-avaimella.
description: Chat-syöttöviesti näytetään, kun käyttäjä on kirjautunut sisään vain pubkey-avaimella.
login: Kirjaudu sisään lähettääksesi viestejä
"@login":
description: Chat-syötteen viesti näytetään, kun käyttäjä on kirjautunut ulos.
@ -92,8 +90,7 @@ stream_list:
planned: Suunniteltu
ended: Päättynyt
"@stream_list":
description: Stream-luetteloiden otsikot stream-tyypeittäin
live/päättynyt/suunniteltu jne.
description: Stream-luetteloiden otsikot stream-tyypeittäin live/päättynyt/suunniteltu jne.
zap:
title: Zap $name
custom_amount: Mukautettu määrä

View File

@ -1,7 +1,6 @@
upload_avatar: Télécharger l'avatar
"@upload_avatar":
description: Texte invitant l'utilisateur à cliquer sur l'espace réservé à
l'avatar pour commencer le téléchargement
description: Texte invitant l'utilisateur à cliquer sur l'espace réservé à l'avatar pour commencer le téléchargement
most_zapped_streamers: Les Streamers les plus zappés
"@most_zapped_streamers":
description: Les têtes d'affiche sont listées par zaps.
@ -43,8 +42,7 @@ stream:
description: Étiquette sur la boîte de saisie du message de chat
no_signer: Impossible d'écrire des messages avec le login npub
"@no_signer":
description: Message d'entrée du chat affiché lorsque l'utilisateur n'est
connecté qu'avec pubkey
description: Message d'entrée du chat affiché lorsque l'utilisateur n'est connecté qu'avec pubkey
login: Veuillez vous connecter pour envoyer des messages
"@login":
description: Message d'entrée du chat affiché lorsque l'utilisateur est déconnecté

View File

@ -1,7 +1,6 @@
upload_avatar: Avatár feltöltése
"@upload_avatar":
description: Szöveg, amely arra kéri a felhasználót, hogy a feltöltés
megkezdéséhez nyomja meg az avatar helyőrzőt
description: Szöveg, amely arra kéri a felhasználót, hogy a feltöltés megkezdéséhez nyomja meg az avatar helyőrzőt
most_zapped_streamers: A legtöbb Zapped Streamers
"@most_zapped_streamers":
description: Irány a felsorolt top streamerek fölött zaps által
@ -43,8 +42,7 @@ stream:
description: Címke a csevegőüzenet beviteli mezőjén
no_signer: Nem tud üzeneteket írni az npub bejelentkezéssel
"@no_signer":
description: A csevegés bemeneti üzenete megjelenik, ha a felhasználó csak
pubkey-vel van bejelentkezve
description: A csevegés bemeneti üzenete megjelenik, ha a felhasználó csak pubkey-vel van bejelentkezve
login: Kérjük, jelentkezzen be az üzenetek küldéséhez
"@login":
description: A felhasználó kijelentkezésekor megjelenő csevegési beviteli üzenet

View File

@ -1,7 +1,6 @@
upload_avatar: Carica Avatar
"@upload_avatar":
description: Testo che richiede all'utente di premere il segnaposto dell'avatar
per iniziare il caricamento
description: Testo che richiede all'utente di premere il segnaposto dell'avatar per iniziare il caricamento
most_zapped_streamers: Il maggior numero di streamer bloccati
"@most_zapped_streamers":
description: Direzione sopra elencata top streamers da zaps
@ -43,8 +42,7 @@ stream:
description: Etichetta della casella di immissione del messaggio di chat
no_signer: Impossibile scrivere messaggi con il login npub
"@no_signer":
description: Messaggio di ingresso alla chat mostrato quando l'utente è connesso
solo con la pubkey
description: Messaggio di ingresso alla chat mostrato quando l'utente è connesso solo con la pubkey
login: Effettuare il login per inviare messaggi
"@login":
description: Messaggio di input della chat mostrato quando l'utente è disconnesso
@ -92,8 +90,7 @@ stream_list:
planned: Pianificato
ended: Terminato
"@stream_list":
description: Titoli sugli elenchi dei flussi per tipo di flusso
live/finito/pianificato ecc.
description: Titoli sugli elenchi dei flussi per tipo di flusso live/finito/pianificato ecc.
zap:
title: Zap $name
custom_amount: Importo personalizzato

View File

@ -1,7 +1,6 @@
upload_avatar: Avatar uploaden
"@upload_avatar":
description: Tekst die de gebruiker vraagt om op de avatar-plaatshouder te
klikken om te beginnen met uploaden
description: Tekst die de gebruiker vraagt om op de avatar-plaatshouder te klikken om te beginnen met uploaden
most_zapped_streamers: Meeste Zapped Streamers
"@most_zapped_streamers":
description: Koers over beursgenoteerde topstreamers door zaps
@ -43,12 +42,10 @@ stream:
description: Label op het invoerveld voor chatberichten
no_signer: Kan geen berichten schrijven met npub login
"@no_signer":
description: Chatinvoerbericht getoond wanneer de gebruiker alleen is ingelogd
met pubkey
description: Chatinvoerbericht getoond wanneer de gebruiker alleen is ingelogd met pubkey
login: Log in om berichten te verzenden
"@login":
description: Chatinvoerbericht dat wordt weergegeven wanneer de gebruiker is
uitgelogd
description: Chatinvoerbericht dat wordt weergegeven wanneer de gebruiker is uitgelogd
badge:
awarded_to: "Toegekend aan:"
"@awarded_to":

View File

@ -1,7 +1,6 @@
upload_avatar: Prześlij awatar
"@upload_avatar":
description: Tekst zachęcający użytkownika do kliknięcia symbolu zastępczego
awatara w celu rozpoczęcia przesyłania.
description: Tekst zachęcający użytkownika do kliknięcia symbolu zastępczego awatara w celu rozpoczęcia przesyłania.
most_zapped_streamers: Większość zapped streamerów
"@most_zapped_streamers":
description: Przechodzenie nad wymienionymi topowymi streamerami przez zapy
@ -43,8 +42,7 @@ stream:
description: Etykieta w polu wprowadzania wiadomości czatu
no_signer: Nie można pisać wiadomości z loginem npub
"@no_signer":
description: Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest
zalogowany tylko za pomocą klucza pubkey
description: Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest zalogowany tylko za pomocą klucza pubkey
login: Zaloguj się, aby wysyłać wiadomości
"@login":
description: Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest wylogowany
@ -92,8 +90,7 @@ stream_list:
planned: Planowane
ended: Zakończony
"@stream_list":
description: Nagłówki na listach strumieni według typu strumienia na żywo /
zakończony / planowany itp.
description: Nagłówki na listach strumieni według typu strumienia na żywo / zakończony / planowany itp.
zap:
title: Zap $name
custom_amount: Kwota niestandardowa

View File

@ -1,7 +1,6 @@
upload_avatar: Carregar Avatar
"@upload_avatar":
description: Texto solicitando que o usuário clique no espaço reservado do
avatar para iniciar o upload
description: Texto solicitando que o usuário clique no espaço reservado do avatar para iniciar o upload
most_zapped_streamers: Streamers mais afetados
"@most_zapped_streamers":
description: Dirigindo-se para as principais serpentinas listadas por zaps
@ -43,8 +42,7 @@ stream:
description: Rótulo na caixa de entrada da mensagem de bate-papo
no_signer: Não é possível escrever mensagens com o login do npub
"@no_signer":
description: Mensagem de entrada de bate-papo exibida quando o usuário está
conectado apenas com a pubkey
description: Mensagem de entrada de bate-papo exibida quando o usuário está conectado apenas com a pubkey
login: Faça login para enviar mensagens
"@login":
description: Mensagem de entrada de chat exibida quando o usuário está desconectado
@ -92,8 +90,7 @@ stream_list:
planned: Planejado
ended: Encerrado
"@stream_list":
description: Cabeçalhos nas listas de transmissões por tipo de transmissão ao
vivo/terminada/planejada etc.
description: Cabeçalhos nas listas de transmissões por tipo de transmissão ao vivo/terminada/planejada etc.
zap:
title: Zap $name
custom_amount: Valor personalizado

View File

@ -1,7 +1,6 @@
upload_avatar: Încărcați Avatar
"@upload_avatar":
description: Text care solicită utilizatorului să atingă marcajul avatar pentru
a începe încărcarea
description: Text care solicită utilizatorului să atingă marcajul avatar pentru a începe încărcarea
most_zapped_streamers: Cele mai multe Streamers Zapped
"@most_zapped_streamers":
description: Cap peste streamers de top enumerate de zaps
@ -43,12 +42,10 @@ stream:
description: Etichetă pe caseta de introducere a mesajului de chat
no_signer: Nu se pot scrie mesaje cu autentificarea npub
"@no_signer":
description: Mesajul de intrare în chat afișat atunci când utilizatorul este
conectat doar cu pubkey
description: Mesajul de intrare în chat afișat atunci când utilizatorul este conectat doar cu pubkey
login: Vă rugăm să vă autentificați pentru a trimite mesaje
"@login":
description: Mesajul de intrare în chat afișat atunci când utilizatorul este
deconectat
description: Mesajul de intrare în chat afișat atunci când utilizatorul este deconectat
badge:
awarded_to: "Premiat pentru:"
"@awarded_to":
@ -93,8 +90,7 @@ stream_list:
planned: Planificate
ended: Încheiat
"@stream_list":
description: Rubrici pe listele de fluxuri în funcție de tipul fluxului în
direct/terminat/planificat etc.
description: Rubrici pe listele de fluxuri în funcție de tipul fluxului în direct/terminat/planificat etc.
zap:
title: Zap $name
custom_amount: Sumă personalizată

View File

@ -1,7 +1,6 @@
upload_avatar: Загрузить аватар
"@upload_avatar":
description: Текст, побуждающий пользователя нажать кнопку с изображением
аватара, чтобы начать загрузку
description: Текст, побуждающий пользователя нажать кнопку с изображением аватара, чтобы начать загрузку
most_zapped_streamers: Самые прыткие стримеры
"@most_zapped_streamers":
description: Направляясь по перечисленным верхним стримерам с помощью запс
@ -43,12 +42,10 @@ stream:
description: Надпись на поле ввода сообщения чата
no_signer: Невозможно писать сообщения с логином npub
"@no_signer":
description: Сообщение о входе в чат, отображаемое при входе пользователя только
с pubkey
description: Сообщение о входе в чат, отображаемое при входе пользователя только с pubkey
login: Пожалуйста, войдите в систему, чтобы отправлять сообщения
"@login":
description: Сообщение о входе в чат, отображаемое при выходе пользователя из
системы
description: Сообщение о входе в чат, отображаемое при выходе пользователя из системы
badge:
awarded_to: "Награждается:"
"@awarded_to":
@ -93,8 +90,7 @@ stream_list:
planned: Запланировано
ended: Завершено
"@stream_list":
description: Заголовки в списках потоков по типу потока -
живой/законченный/запланированный и т. д.
description: Заголовки в списках потоков по типу потока - живой/законченный/запланированный и т. д.
zap:
title: Запнуть ($name
custom_amount: Пользовательская сумма

View File

@ -1,7 +1,6 @@
upload_avatar: Ladda upp avatar
"@upload_avatar":
description: Text som uppmanar användaren att trycka på avatarplatshållaren för
att påbörja uppladdningen
description: Text som uppmanar användaren att trycka på avatarplatshållaren för att påbörja uppladdningen
most_zapped_streamers: De flesta zappade streamers
"@most_zapped_streamers":
description: Rubrik över listade toppstreamers av zaps
@ -43,8 +42,7 @@ stream:
description: Etikett på inmatningsrutan för chattmeddelanden
no_signer: Det går inte att skriva meddelanden med npub-inloggning
"@no_signer":
description: Chattinmatningsmeddelande som visas när användaren endast är
inloggad med pubkey
description: Chattinmatningsmeddelande som visas när användaren endast är inloggad med pubkey
login: Logga in för att skicka meddelanden
"@login":
description: Chattinmatningsmeddelande som visas när användaren är utloggad

View File

@ -1,7 +1,6 @@
upload_avatar: Avatar Yükle
"@upload_avatar":
description: Kullanıcının yüklemeye başlamak için avatar yer tutucusuna
basmasını isteyen metin
description: Kullanıcının yüklemeye başlamak için avatar yer tutucusuna basmasını isteyen metin
most_zapped_streamers: En Çok Zaplanan Flamalar
"@most_zapped_streamers":
description: Zaps tarafından listelenen üst flamalar üzerinde ilerliyor
@ -43,8 +42,7 @@ stream:
description: Sohbet mesajı giriş kutusundaki etiket
no_signer: Npub girişi ile mesaj yazılamıyor
"@no_signer":
description: Kullanıcı yalnızca pubkey ile oturum açtığında gösterilen sohbet
giriş mesajı
description: Kullanıcı yalnızca pubkey ile oturum açtığında gösterilen sohbet giriş mesajı
login: Mesaj göndermek için lütfen giriş yapın
"@login":
description: Kullanıcı oturumu kapatıldığında gösterilen sohbet giriş mesajı

View File

@ -1,7 +1,6 @@
upload_avatar: Завантажити аватар
"@upload_avatar":
description: Текст, що пропонує користувачеві натиснути на заповнювач аватара,
щоб почати завантаження
description: Текст, що пропонує користувачеві натиснути на заповнювач аватара, щоб почати завантаження
most_zapped_streamers: Більшість стримерів, які були під напругою
"@most_zapped_streamers":
description: Перехід до переліку найкращих стрімерів за запитами
@ -43,12 +42,10 @@ stream:
description: Мітка у вікні введення повідомлення чату
no_signer: Неможливо писати повідомлення з логіном npub
"@no_signer":
description: Повідомлення в чаті, що відображається, коли користувач увійшов до
системи лише з ключем pubkey
description: Повідомлення в чаті, що відображається, коли користувач увійшов до системи лише з ключем pubkey
login: Будь ласка, авторизуйтесь, щоб надсилати повідомлення
"@login":
description: Повідомлення для введення в чаті, що відображається, коли
користувач вийшов з системи
description: Повідомлення для введення в чаті, що відображається, коли користувач вийшов з системи
badge:
awarded_to: "Нагороджується:"
"@awarded_to":
@ -93,8 +90,7 @@ stream_list:
planned: Заплановано
ended: Закінчилося
"@stream_list":
description: "Заголовки у списках трансляцій за типом трансляції:
наживо/закінчилася/запланована тощо."
description: "Заголовки у списках трансляцій за типом трансляції: наживо/закінчилася/запланована тощо."
zap:
title: Zap $name
custom_amount: Нестандартна сума

View File

@ -1,24 +1,82 @@
import 'dart:convert';
import 'dart:developer' as developer;
import 'package:collection/collection.dart';
import 'package:flutter/widgets.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/nip19/nip19.dart';
import 'package:zap_stream_flutter/const.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 {
final AccountType type;
final String pubkey;
final String? privateKey;
final List<String>? signerRelays;
final WalletConfig? wallet;
LoginAccount._({
SimpleWallet? _cachedWallet;
LoginAccount({
required this.type,
required this.pubkey,
this.privateKey,
this.signerRelays,
this.wallet,
});
static LoginAccount nip19(String key) {
@ -26,7 +84,7 @@ class LoginAccount {
final pubkey =
Nip19.isKey("nsec", key) ? Bip340.getPublicKey(keyData) : keyData;
final privateKey = Nip19.isKey("npub", key) ? null : keyData;
return LoginAccount._(
return LoginAccount(
type:
Nip19.isKey("npub", key)
? AccountType.publicKey
@ -37,7 +95,7 @@ class LoginAccount {
}
static LoginAccount privateKeyHex(String key) {
return LoginAccount._(
return LoginAccount(
type: AccountType.privateKey,
privateKey: key,
pubkey: Bip340.getPublicKey(key),
@ -45,7 +103,7 @@ class LoginAccount {
}
static LoginAccount externalPublicKeyHex(String key) {
return LoginAccount._(type: AccountType.externalSigner, pubkey: key);
return LoginAccount(type: AccountType.externalSigner, pubkey: key);
}
static LoginAccount bunker(
@ -53,7 +111,7 @@ class LoginAccount {
String pubkey,
List<String> relays,
) {
return LoginAccount._(
return LoginAccount(
type: AccountType.externalSigner,
pubkey: pubkey,
privateKey: privateKey,
@ -65,6 +123,7 @@ class LoginAccount {
"type": acc?.type.name,
"pubKey": acc?.pubkey,
"privateKey": acc?.privateKey,
"wallet": acc?.wallet?.toJson(),
};
static LoginAccount? fromJson(Map<String, dynamic> json) {
@ -78,16 +137,38 @@ class LoginAccount {
throw "Invalid privateKey, length != 64";
}
}
return LoginAccount._(
return LoginAccount(
type: AccountType.values.firstWhere(
(v) => v.toString().endsWith(json["type"] as String),
),
pubkey: json["pubKey"],
privateKey: json["privateKey"],
wallet:
json.containsKey("wallet")
? WalletConfig.fromJson(json["wallet"])
: 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?> {

View File

@ -24,7 +24,7 @@ class LoginPage extends StatelessWidget {
if (state.data ?? false) {
return BasicButton.text(
t.login.amber,
onTap: () async {
onTap: (context) async {
final amber = Amberflutter();
final result = await amber.getPublicKey();
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(
margin: EdgeInsets.symmetric(vertical: 20),
height: 1,
@ -51,7 +51,7 @@ class LoginPage extends StatelessWidget {
),
BasicButton.text(
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(
t.button.login,
onTap: () async {
onTap: (context) async {
try {
if (_controller.text.startsWith("bunker://")) {
// not supported yet in ndk

View File

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

View File

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

View File

@ -87,7 +87,7 @@ class SettingsProfilePage extends StatelessWidget {
BasicButton.text(
t.button.save,
disabled: v,
onTap: () async {
onTap: (context) async {
_loading.value = true;
try {
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,
borderRadius: DEFAULT_BR,
),
onTap: () {
onTap: (context) {
showModalBottomSheet(
context: context,
constraints: BoxConstraints.expand(),

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -28,5 +28,36 @@
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<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>
</plist>

View File

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