From 47bed26df63f38cfdc76d62cbea6e4b650479c27 Mon Sep 17 00:00:00 2001 From: Kieran Date: Mon, 26 May 2025 13:28:00 +0100 Subject: [PATCH] feat: simple NWC flow closes #19 --- ios/Runner/Info.plist | 31 ++++++ lib/app.dart | 6 +- lib/i18n/en.i18n.yaml | 6 ++ lib/i18n/strings.g.dart | 5 +- lib/i18n/strings_af.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_ar.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_ca.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_cs.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_da.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_de.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_el.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_en.g.dart | 160 ++++++++++++++++++------------- lib/i18n/strings_es.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_fi.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_fr.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_he.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_hu.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_it.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_ja.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_ko.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_nl.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_no.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_pl.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_pt.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_ro.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_ru.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_sr.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_sv.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_tr.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_uk.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_vi.g.dart | 141 +++++++++++++-------------- lib/i18n/strings_zh.g.dart | 141 +++++++++++++-------------- lib/i18n/translated/af.i18n.yaml | 78 +++++++-------- lib/i18n/translated/ar.i18n.yaml | 81 ++++++++-------- lib/i18n/translated/ca.i18n.yaml | 78 +++++++-------- lib/i18n/translated/cs.i18n.yaml | 84 ++++++++-------- lib/i18n/translated/da.i18n.yaml | 84 ++++++++-------- lib/i18n/translated/de.i18n.yaml | 87 ++++++++--------- lib/i18n/translated/el.i18n.yaml | 93 +++++++++--------- lib/i18n/translated/en.i18n.yaml | 122 ----------------------- lib/i18n/translated/es.i18n.yaml | 93 +++++++++--------- lib/i18n/translated/fi.i18n.yaml | 87 ++++++++--------- lib/i18n/translated/fr.i18n.yaml | 84 ++++++++-------- lib/i18n/translated/he.i18n.yaml | 78 +++++++-------- lib/i18n/translated/hu.i18n.yaml | 84 ++++++++-------- lib/i18n/translated/it.i18n.yaml | 87 ++++++++--------- lib/i18n/translated/ja.i18n.yaml | 78 +++++++-------- lib/i18n/translated/ko.i18n.yaml | 78 +++++++-------- lib/i18n/translated/nl.i18n.yaml | 87 ++++++++--------- lib/i18n/translated/no.i18n.yaml | 78 +++++++-------- lib/i18n/translated/pl.i18n.yaml | 87 ++++++++--------- lib/i18n/translated/pt.i18n.yaml | 87 ++++++++--------- lib/i18n/translated/ro.i18n.yaml | 90 +++++++++-------- lib/i18n/translated/ru.i18n.yaml | 90 +++++++++-------- lib/i18n/translated/sr.i18n.yaml | 78 +++++++-------- lib/i18n/translated/sv.i18n.yaml | 84 ++++++++-------- lib/i18n/translated/tr.i18n.yaml | 84 ++++++++-------- lib/i18n/translated/uk.i18n.yaml | 90 +++++++++-------- lib/i18n/translated/vi.i18n.yaml | 78 +++++++-------- lib/i18n/translated/zh.i18n.yaml | 78 +++++++-------- lib/login.dart | 97 +++++++++++++++++-- lib/pages/login.dart | 6 +- lib/pages/login_input.dart | 2 +- lib/pages/new_account.dart | 2 +- lib/pages/profile.dart | 4 +- lib/pages/settings_profile.dart | 2 +- lib/pages/settings_wallet.dart | 77 +++++++++++++++ lib/pages/stream.dart | 2 +- lib/widgets/button.dart | 6 +- lib/widgets/button_follow.dart | 2 +- lib/widgets/chat_modal.dart | 11 ++- lib/widgets/mute_button.dart | 2 +- lib/widgets/stream_info.dart | 2 +- lib/widgets/zap.dart | 42 ++++++-- macos/Runner/Info.plist | 31 ++++++ slang.yaml | 3 +- 76 files changed, 3416 insertions(+), 3277 deletions(-) delete mode 100644 lib/i18n/translated/en.i18n.yaml create mode 100644 lib/pages/settings_wallet.dart diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 7c03299..48ade1a 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -45,5 +45,36 @@ UIApplicationSupportsIndirectInputEvents + CFBundleLocalizations + + af + ar + ca + cs + da + de + el + en + es + fi + fr + he + hu + it + ja + ko + nl + no + pl + pt + ro + ru + sr + sv + tr + uk + vi + zh + diff --git a/lib/app.dart b/lib/app.dart index 2e0e90b..3c1df7b 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -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(), + ), ], ), ], diff --git a/lib/i18n/en.i18n.yaml b/lib/i18n/en.i18n.yaml index 8fb6a6c..c210871 100644 --- a/lib/i18n/en.i18n.yaml +++ b/lib/i18n/en.i18n.yaml @@ -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 diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index f79f75b..ab0eb60 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -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'; diff --git a/lib/i18n/strings_af.g.dart b/lib/i18n/strings_af.g.dart index ff61915..4ea32d6 100644 --- a/lib/i18n/strings_af.g.dart +++ b/lib/i18n/strings_af.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_ar.g.dart b/lib/i18n/strings_ar.g.dart index fa63fc0..809cb64 100644 --- a/lib/i18n/strings_ar.g.dart +++ b/lib/i18n/strings_ar.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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 'نسخ إلى الحافظة'; diff --git a/lib/i18n/strings_ca.g.dart b/lib/i18n/strings_ca.g.dart index 05b7a15..0ff52f5 100644 --- a/lib/i18n/strings_ca.g.dart +++ b/lib/i18n/strings_ca.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_cs.g.dart b/lib/i18n/strings_cs.g.dart index ac3e118..1d179e3 100644 --- a/lib/i18n/strings_cs.g.dart +++ b/lib/i18n/strings_cs.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart index f1b887b..d7851f0 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index d712e2f..8c4af9f 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_el.g.dart b/lib/i18n/strings_el.g.dart index b28cb72..4d436db 100644 --- a/lib/i18n/strings_el.g.dart +++ b/lib/i18n/strings_el.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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 'Αντιγραφή στο πρόχειρο'; diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index 58cba91..add89da 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -58,46 +58,47 @@ class Translations implements BaseTranslations { 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'; diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index 6c87663..e327045 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_fi.g.dart b/lib/i18n/strings_fi.g.dart index afdc30f..918a0ed 100644 --- a/lib/i18n/strings_fi.g.dart +++ b/lib/i18n/strings_fi.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index e14f786..6bfdd84 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_he.g.dart b/lib/i18n/strings_he.g.dart index afa77ed..751fe76 100644 --- a/lib/i18n/strings_he.g.dart +++ b/lib/i18n/strings_he.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_hu.g.dart b/lib/i18n/strings_hu.g.dart index 826a7e8..c6b2b73 100644 --- a/lib/i18n/strings_hu.g.dart +++ b/lib/i18n/strings_hu.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index 0916ace..21f83c3 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index 7efa9f6..d9202b4 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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 'クリップボードにコピー'; diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index 6982b94..7dd72cf 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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 '클립보드에 복사'; diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index 0651125..c882ac6 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_no.g.dart b/lib/i18n/strings_no.g.dart index 8d291c5..b4af3cf 100644 --- a/lib/i18n/strings_no.g.dart +++ b/lib/i18n/strings_no.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index b1eba37..9fa0c52 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index 50c28f0..6a741f1 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_ro.g.dart b/lib/i18n/strings_ro.g.dart index 361b869..852034a 100644 --- a/lib/i18n/strings_ro.g.dart +++ b/lib/i18n/strings_ro.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index cf2dfae..cb8238e 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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 'Скопировано в буфер обмена'; diff --git a/lib/i18n/strings_sr.g.dart b/lib/i18n/strings_sr.g.dart index 9fea6a0..3882e2f 100644 --- a/lib/i18n/strings_sr.g.dart +++ b/lib/i18n/strings_sr.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index ac0552f..4f90214 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_tr.g.dart b/lib/i18n/strings_tr.g.dart index e9ba8cc..872b3ae 100644 --- a/lib/i18n/strings_tr.g.dart +++ b/lib/i18n/strings_tr.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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ı'; diff --git a/lib/i18n/strings_uk.g.dart b/lib/i18n/strings_uk.g.dart index bef68aa..2ce6b96 100644 --- a/lib/i18n/strings_uk.g.dart +++ b/lib/i18n/strings_uk.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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 'Скопійовано в буфер обміну'; diff --git a/lib/i18n/strings_vi.g.dart b/lib/i18n/strings_vi.g.dart index a659cac..6221a26 100644 --- a/lib/i18n/strings_vi.g.dart +++ b/lib/i18n/strings_vi.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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'; diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index dc91431..a821898 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -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: -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? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? 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 $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 '複製到剪貼簿'; diff --git a/lib/i18n/translated/af.i18n.yaml b/lib/i18n/translated/af.i18n.yaml index 5258519..a6eaef7 100644 --- a/lib/i18n/translated/af.i18n.yaml +++ b/lib/i18n/translated/af.i18n.yaml @@ -1,97 +1,97 @@ upload_avatar: 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": +"@most_zapped_streamers": description: Heading over listed top streamers by zaps no_user_found: No user found -"@no_user_found": +"@no_user_found": description: No user found when searching anon: Anon -viewers: +viewers: one: 1 viewer other: $n viewers -"@viewers": +"@viewers": description: Number of viewers of the stream - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: An anonymous user -stream: - status: +stream: + status: live: LIVE ended: ENDED planned: PLANNED started: Started $timestamp - chat: + chat: disabled: CHAT DISABLED disabled_timeout: "Timeout expires: $time" timeout(rich): $mod timed out $user for $time - "@timeout": + "@timeout": description: Chat message showing timeout events ended: STREAM ENDED - "@ended": + "@ended": description: Stream ended footer at bottom of chat zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Chat message showing stream zaps - write: + write: label: Write message - "@label": + "@label": description: Label on the chat message input box no_signer: Can't write messages with npub login - "@no_signer": + "@no_signer": description: Chat input message shown when the user is logged in only with pubkey login: Please login to send messages - "@login": + "@login": description: Chat input message shown when the user is logged out - badge: + badge: awarded_to: "Awarded to:" - "@awarded_to": + "@awarded_to": description: Heading over list of users who are awarded a badge - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat raid message to another stream from: RAID FROM $name - "@from": + "@from": description: Chat raid message from another stream countdown: Raiding in $time - "@countdown": + "@countdown": description: Countdown timer for auto-raiding -goal: +goal: title: "Goal: $amount" remaining: "Remaining: $amount" complete: COMPLETE -button: +button: login: Login logout: Logout edit_profile: Edit Profile - "@login": + "@login": description: Button text for the login button follow: Follow - "@follow": + "@follow": description: Button text for the follow button unfollow: Unfollow - "@unfollow": + "@unfollow": description: Button text for the unfollow button mute: Mute unmute: Unmute share: Share save: Save -embed: +embed: article_by: Article by $name note_by: Note by $name live_stream_by: Live stream by $name -stream_list: +stream_list: following: Following live: Live planned: Planned ended: Ended -"@stream_list": +"@stream_list": description: Headings on stream lists by stream type live/ended/planned etc. -zap: +zap: title: Zap $name custom_amount: Custom Amount confirm: Confirm @@ -100,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Open in Wallet copy: Copied to clipboard - error: + error: invalid_custom_amount: Invalid custom amount no_wallet: No lightning wallet installed no_lud16: No lightning address found -profile: +profile: past_streams: Past Streams - edit: + edit: display_name: Display Name about: About nip05: Nostr Address lud16: Lightning Address - error: + error: logged_out: Cant edit profile when logged out -login: +login: username: Username amber: Login with Amber key: Login with Key create: Create Account - error: + error: invalid_key: Invalid key diff --git a/lib/i18n/translated/ar.i18n.yaml b/lib/i18n/translated/ar.i18n.yaml index cfbe794..93ef75f 100644 --- a/lib/i18n/translated/ar.i18n.yaml +++ b/lib/i18n/translated/ar.i18n.yaml @@ -1,98 +1,97 @@ upload_avatar: تحميل الصورة الرمزية -"@upload_avatar": +"@upload_avatar": description: نص يطالب المستخدم بالضغط على العنصر النائب للصورة الرمزية لبدء التحميل most_zapped_streamers: معظم اللافتات التي يتم بثها -"@most_zapped_streamers": +"@most_zapped_streamers": description: التوجه فوق اللافتات العلوية المدرجة من قبل zaps no_user_found: لم يتم العثور على مستخدم -"@no_user_found": +"@no_user_found": description: لم يتم العثور على مستخدم عند البحث anon: هوية مخفية -viewers: +viewers: one: 1 مشاهد other: $n المشاهدون -"@viewers": +"@viewers": description: عدد مشاهدي البث - placeholders: - n: + placeholders: + n: type: في -"@anon": +"@anon": description: مستخدم مجهول -stream: - status: +stream: + status: live: بث مباشر ended: انتهى planned: مخطط started: بدأ $timestamp - chat: + chat: disabled: تم تعطيل الدردشة disabled_timeout: "تنتهي المهلة: $time" timeout(rich): $mod انتهى الوقت $user لـ $time - "@timeout": + "@timeout": description: رسالة دردشة تظهر أحداث المهلة ended: انتهى البث - "@ended": + "@ended": description: تيار انتهى التذييل في أسفل الدردشة zap(rich): $user انطلق $amount ساتس - "@zap": + "@zap": description: رسالة الدردشة التي تُظهر البث المباشر - write: + write: label: اكتب رسالة - "@label": + "@label": description: التسمية على مربع إدخال رسالة الدردشة no_signer: لا يمكن كتابة الرسائل باستخدام تسجيل الدخول إلى npub - "@no_signer": - description: تظهر رسالة إدخال الدردشة عندما يقوم المستخدم بتسجيل الدخول باستخدام - مفتاح الحانة فقط + "@no_signer": + description: تظهر رسالة إدخال الدردشة عندما يقوم المستخدم بتسجيل الدخول باستخدام مفتاح الحانة فقط login: الرجاء تسجيل الدخول لإرسال الرسائل - "@login": + "@login": description: تظهر رسالة إدخال الدردشة عند تسجيل خروج المستخدم من المحادثة - badge: + badge: awarded_to: مُنحت الجائزة لـ - "@awarded_to": + "@awarded_to": description: العنوان فوق قائمة المستخدمين الذين حصلوا على شارة - raid: + raid: to: التصفح $name - "@to": + "@to": description: رسالة غارة الدردشة إلى دفق آخر from: RAID من $name - "@from": + "@from": description: رسالة غارة الدردشة من دفق آخر countdown: الإغارة في $time - "@countdown": + "@countdown": description: مؤقت العد التنازلي للقيادة التلقائية -goal: +goal: title: "الهدف: $amount" remaining: "المتبقي: $amount" complete: مكتمل -button: +button: login: تسجيل الدخول logout: تسجيل الخروج edit_profile: تعديل الملف الشخصي - "@login": + "@login": description: نص الزر الخاص بزر تسجيل الدخول follow: متابعة - "@follow": + "@follow": description: نص الزر الخاص بزر المتابعة unfollow: الغاء المتابعة - "@unfollow": + "@unfollow": description: نص الزر لزر إلغاء المتابعة mute: كتم unmute: رفع الكتم share: مشاركة save: حفظ -embed: +embed: article_by: مقال بقلم $name note_by: ملاحظة من $name live_stream_by: بث مباشر من $name -stream_list: +stream_list: following: المتابَعون live: بث مباشر planned: مخطط ended: انتهى -"@stream_list": +"@stream_list": description: العناوين في قوائم البث حسب نوع البث المباشر/المُنتهي/المخطط له وما إلى ذلك. -zap: +zap: title: زاب $name custom_amount: المبلغ المخصص confirm: تأكيد @@ -101,23 +100,23 @@ zap: button_zap: زاب button_open_wallet: فتح في المحفظة copy: نسخ إلى الحافظة - error: + error: invalid_custom_amount: مبلغ مخصص غير صالح no_wallet: لا توجد محفظة برق مثبتة no_lud16: لم يتم العثور على عنوان البرق -profile: +profile: past_streams: التدفقات السابقة - edit: + edit: display_name: اسم العرض about: نبذة nip05: عنوان نوستر lud16: عنوان البرق - error: + error: logged_out: لا يمكن تحرير ملف التعريف عند تسجيل الخروج -login: +login: username: اسم المستخدم amber: تسجيل الدخول مع آمبر key: تسجيل الدخول بالمفتاح create: إنشاء حساب - error: + error: invalid_key: مفتاح غير صالح diff --git a/lib/i18n/translated/ca.i18n.yaml b/lib/i18n/translated/ca.i18n.yaml index 5258519..a6eaef7 100644 --- a/lib/i18n/translated/ca.i18n.yaml +++ b/lib/i18n/translated/ca.i18n.yaml @@ -1,97 +1,97 @@ upload_avatar: 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": +"@most_zapped_streamers": description: Heading over listed top streamers by zaps no_user_found: No user found -"@no_user_found": +"@no_user_found": description: No user found when searching anon: Anon -viewers: +viewers: one: 1 viewer other: $n viewers -"@viewers": +"@viewers": description: Number of viewers of the stream - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: An anonymous user -stream: - status: +stream: + status: live: LIVE ended: ENDED planned: PLANNED started: Started $timestamp - chat: + chat: disabled: CHAT DISABLED disabled_timeout: "Timeout expires: $time" timeout(rich): $mod timed out $user for $time - "@timeout": + "@timeout": description: Chat message showing timeout events ended: STREAM ENDED - "@ended": + "@ended": description: Stream ended footer at bottom of chat zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Chat message showing stream zaps - write: + write: label: Write message - "@label": + "@label": description: Label on the chat message input box no_signer: Can't write messages with npub login - "@no_signer": + "@no_signer": description: Chat input message shown when the user is logged in only with pubkey login: Please login to send messages - "@login": + "@login": description: Chat input message shown when the user is logged out - badge: + badge: awarded_to: "Awarded to:" - "@awarded_to": + "@awarded_to": description: Heading over list of users who are awarded a badge - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat raid message to another stream from: RAID FROM $name - "@from": + "@from": description: Chat raid message from another stream countdown: Raiding in $time - "@countdown": + "@countdown": description: Countdown timer for auto-raiding -goal: +goal: title: "Goal: $amount" remaining: "Remaining: $amount" complete: COMPLETE -button: +button: login: Login logout: Logout edit_profile: Edit Profile - "@login": + "@login": description: Button text for the login button follow: Follow - "@follow": + "@follow": description: Button text for the follow button unfollow: Unfollow - "@unfollow": + "@unfollow": description: Button text for the unfollow button mute: Mute unmute: Unmute share: Share save: Save -embed: +embed: article_by: Article by $name note_by: Note by $name live_stream_by: Live stream by $name -stream_list: +stream_list: following: Following live: Live planned: Planned ended: Ended -"@stream_list": +"@stream_list": description: Headings on stream lists by stream type live/ended/planned etc. -zap: +zap: title: Zap $name custom_amount: Custom Amount confirm: Confirm @@ -100,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Open in Wallet copy: Copied to clipboard - error: + error: invalid_custom_amount: Invalid custom amount no_wallet: No lightning wallet installed no_lud16: No lightning address found -profile: +profile: past_streams: Past Streams - edit: + edit: display_name: Display Name about: About nip05: Nostr Address lud16: Lightning Address - error: + error: logged_out: Cant edit profile when logged out -login: +login: username: Username amber: Login with Amber key: Login with Key create: Create Account - error: + error: invalid_key: Invalid key diff --git a/lib/i18n/translated/cs.i18n.yaml b/lib/i18n/translated/cs.i18n.yaml index 96fe8e3..d02cf5f 100644 --- a/lib/i18n/translated/cs.i18n.yaml +++ b/lib/i18n/translated/cs.i18n.yaml @@ -1,99 +1,97 @@ 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í +"@upload_avatar": + description: Text vyzývající uživatele, aby stiskl zástupný symbol avatara pro zahájení nahrávání most_zapped_streamers: Nejvíce zapnutých streamerů -"@most_zapped_streamers": +"@most_zapped_streamers": description: Směřování přes uvedené horní streamery podle zaps no_user_found: Nebyl nalezen žádný uživatel -"@no_user_found": +"@no_user_found": description: Při vyhledávání nebyl nalezen žádný uživatel anon: Anon -viewers: +viewers: one: 1 divák other: $n diváci -"@viewers": +"@viewers": description: Počet diváků streamu - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Anonymní uživatel -stream: - status: +stream: + status: live: LIVE ended: KONEC planned: PLÁNOVANÉ started: Založeno $timestamp - chat: + chat: disabled: CHAT ZRUŠEN disabled_timeout: "Časový limit vyprší: $time" timeout(rich): $mod vypršel čas $user pro $time - "@timeout": + "@timeout": description: Zpráva chatu zobrazující události časového limitu ended: STREAM UKONČEN - "@ended": + "@ended": description: Zápatí v dolní části chatu ukončilo stream zap(rich): $user Zapped $amount sats - "@zap": + "@zap": description: Zpráva chatu zobrazující proud zaps - write: + write: label: Napište zprávu - "@label": + "@label": description: Popisek na vstupním poli zprávy chatu no_signer: Nelze psát zprávy s přihlášením npub - "@no_signer": - description: Vstupní zpráva chatu se zobrazí, když je uživatel přihlášen pouze - pomocí pubkey + "@no_signer": + description: Vstupní zpráva chatu se zobrazí, když je uživatel přihlášen pouze pomocí pubkey login: Pro odesílání zpráv se prosím přihlaste - "@login": + "@login": description: Vstupní zpráva chatu zobrazená při odhlášení uživatele - badge: + badge: awarded_to: "Uděleno:" - "@awarded_to": + "@awarded_to": description: Záhlaví nad seznamem uživatelů, kterým byl udělen odznak - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Zpráva o nájezdu chatu do jiného proudu from: RAID Z $name - "@from": + "@from": description: Zpráva o nájezdu chatu z jiného proudu countdown: Nájezdy na $time - "@countdown": + "@countdown": description: Časovač odpočítávání pro automatický nájezd -goal: +goal: title: "Cíl: $amount" remaining: "Zbývá: $amount" complete: KOMPLETNÍ -button: +button: login: Přihlášení logout: Odhlášení edit_profile: Upravit profil - "@login": + "@login": description: Text tlačítka pro přihlašovací tlačítko follow: Sledujte - "@follow": + "@follow": description: Text tlačítka pro tlačítko sledovat unfollow: Zrušit sledování - "@unfollow": + "@unfollow": description: Text tlačítka pro zrušení sledování mute: Ztlumit unmute: Zrušit ztlumení share: Sdílet save: Uložit -embed: +embed: article_by: Článek na $name note_by: Poznámka $name live_stream_by: Přímý přenos na adrese $name -stream_list: +stream_list: following: Po live: Živě planned: Plánované ended: Ukončeno -"@stream_list": +"@stream_list": description: Nadpisy v seznamech proudů podle typu proudu živě/konec/plánovaně atd. -zap: +zap: title: Zap $name custom_amount: Vlastní částka confirm: Potvrďte @@ -102,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Otevřít v peněžence copy: Zkopírováno do schránky - error: + error: invalid_custom_amount: Neplatná vlastní částka no_wallet: Není nainstalována blesková peněženka no_lud16: Nebyla nalezena žádná adresa blesku -profile: +profile: past_streams: Minulé proudy - edit: + edit: display_name: Zobrazení názvu about: O stránkách nip05: Adresa Nostr lud16: Adresa blesku - error: + error: logged_out: Nelze upravit profil, když je odhlášený -login: +login: username: Uživatelské jméno amber: Přihlášení pomocí Amber key: Přihlášení pomocí klíče create: Vytvořit účet - error: + error: invalid_key: Neplatný klíč diff --git a/lib/i18n/translated/da.i18n.yaml b/lib/i18n/translated/da.i18n.yaml index 90d9474..29a6790 100644 --- a/lib/i18n/translated/da.i18n.yaml +++ b/lib/i18n/translated/da.i18n.yaml @@ -1,99 +1,97 @@ upload_avatar: Upload avatar -"@upload_avatar": - description: Tekst, der beder brugeren om at trykke på avatar-pladsholderen for - at begynde at uploade +"@upload_avatar": + description: Tekst, der beder brugeren om at trykke på avatar-pladsholderen for at begynde at uploade most_zapped_streamers: De fleste zappede streamere -"@most_zapped_streamers": +"@most_zapped_streamers": description: På vej over listede topstreamere af zaps no_user_found: Ingen bruger fundet -"@no_user_found": +"@no_user_found": description: Ingen bruger fundet ved søgning anon: Anon -viewers: +viewers: one: 1 seer other: $n Seere -"@viewers": +"@viewers": description: Antal seere af streamingen - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: En anonym bruger -stream: - status: +stream: + status: live: LIVE ended: AFSLUTTET planned: PLANLAGT started: Startet $timestamp - chat: + chat: disabled: CHAT DEAKTIVERET disabled_timeout: "Timeout udløber: $time" timeout(rich): $mod udløbet $user for $time - "@timeout": + "@timeout": description: Chatbesked, der viser timeout-hændelser ended: STREAM AFSLUTTET - "@ended": + "@ended": description: Stream afsluttede footer i bunden af chatten zap(rich): $user zappet $amount sats - "@zap": + "@zap": description: Chatbesked, der viser stream-zaps - write: + write: label: Skriv en besked - "@label": + "@label": description: Label på chatbeskedens inputfelt no_signer: Kan ikke skrive beskeder med npub-login - "@no_signer": + "@no_signer": description: Chat-inputmeddelelse vises, når brugeren kun er logget ind med pubkey login: Log ind for at sende beskeder - "@login": + "@login": description: Chat-inputmeddelelse vises, når brugeren er logget ud - badge: + badge: awarded_to: "Tildelt til:" - "@awarded_to": + "@awarded_to": description: Overskrift over liste over brugere, der har fået tildelt et badge - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat raid-besked til en anden stream from: RAID FRA $name - "@from": + "@from": description: Chat raid-besked fra en anden stream countdown: Raiding i $time - "@countdown": + "@countdown": description: Nedtællingstimer til auto-raiding -goal: +goal: title: "Mål: $amount" remaining: "Resterende: $amount" complete: KOMPLET -button: +button: login: Login logout: Log ud edit_profile: Rediger profil - "@login": + "@login": description: Knaptekst til login-knappen follow: Følg med - "@follow": + "@follow": description: Knaptekst til følg-knappen unfollow: Ikke følge - "@unfollow": + "@unfollow": description: Knaptekst til unfollow-knappen mute: Dæmpet unmute: Slå lyden fra share: Del save: Gemme -embed: +embed: article_by: Artikel af $name note_by: Note fra $name live_stream_by: Livestream på $name -stream_list: +stream_list: following: Efterfølgende live: Live planned: Planlagt ended: Afsluttet -"@stream_list": - description: Overskrifter på streaminglister efter streamingtype - live/afsluttet/planlagt osv. -zap: +"@stream_list": + description: Overskrifter på streaminglister efter streamingtype live/afsluttet/planlagt osv. +zap: title: Zap $name custom_amount: Brugerdefineret beløb confirm: Bekræft @@ -102,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Åbn i tegnebogen copy: Kopieret til udklipsholder - error: + error: invalid_custom_amount: Ugyldigt brugerdefineret beløb no_wallet: Ingen lightning wallet installeret no_lud16: Ingen lyn-adresse fundet -profile: +profile: past_streams: Tidligere strømme - edit: + edit: display_name: Vis navn about: Omkring nip05: Nostr-adresse lud16: Adresse for lynnedslag - error: + error: logged_out: Kan ikke redigere profil, når jeg er logget ud -login: +login: username: Brugernavn amber: Log ind med Amber key: Login med nøgle create: Opret konto - error: + error: invalid_key: Ugyldig nøgle diff --git a/lib/i18n/translated/de.i18n.yaml b/lib/i18n/translated/de.i18n.yaml index e26224d..7e6a4b3 100644 --- a/lib/i18n/translated/de.i18n.yaml +++ b/lib/i18n/translated/de.i18n.yaml @@ -1,100 +1,97 @@ upload_avatar: Avatar hochladen -"@upload_avatar": - description: Text, der den Benutzer auffordert, auf den Avatar-Platzhalter zu - klicken, um den Upload zu starten +"@upload_avatar": + description: Text, der den Benutzer auffordert, auf den Avatar-Platzhalter zu klicken, um den Upload zu starten most_zapped_streamers: Meistgezappte Streamer -"@most_zapped_streamers": +"@most_zapped_streamers": description: Überschrift über gelistete Top-Streamer von zaps no_user_found: Kein Benutzer gefunden -"@no_user_found": +"@no_user_found": description: Kein Benutzer bei der Suche gefunden anon: Anon -viewers: +viewers: one: 1 Zuschauer other: $n Zuschauer -"@viewers": +"@viewers": description: Anzahl der Betrachter des Streams - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Ein anonymer Benutzer -stream: - status: +stream: + status: live: LIVE ended: ENDED planned: GEPLANT started: Gestartet $timestamp - chat: + chat: disabled: CHAT DEAKTIVIERT disabled_timeout: "Die Zeitüberschreitung läuft ab: $time" timeout(rich): $mod Zeitüberschreitung $user für $time - "@timeout": + "@timeout": description: Chat-Nachricht mit Zeitüberschreitungsereignissen ended: STREAM BEENDET - "@ended": + "@ended": description: Stream beendet Fußzeile am Ende des Chats zap(rich): $user hat $amount sats gezappt - "@zap": + "@zap": description: Chatnachricht mit Stream Zaps - write: + write: label: Nachricht schreiben - "@label": + "@label": description: Beschriftung des Eingabefeldes für Chatnachrichten no_signer: Mit npub-Login können keine Nachrichten geschrieben werden - "@no_signer": - description: Chat-Eingabemeldung wird angezeigt, wenn der Benutzer nur mit - Pubkey eingeloggt ist + "@no_signer": + description: Chat-Eingabemeldung wird angezeigt, wenn der Benutzer nur mit Pubkey eingeloggt ist login: Bitte anmelden, um Nachrichten zu senden - "@login": + "@login": description: Chat-Eingabemeldung wird angezeigt, wenn der Benutzer abgemeldet ist - badge: + badge: awarded_to: "Verliehen an:" - "@awarded_to": - description: Überschrift über der Liste der Benutzer, die ein Abzeichen erhalten - haben - raid: + "@awarded_to": + description: Überschrift über der Liste der Benutzer, die ein Abzeichen erhalten haben + raid: to: RAIDING $name - "@to": + "@to": description: Chat-Überfallnachricht an einen anderen Stream from: RAID VON $name - "@from": + "@from": description: Chat-Raid-Nachricht aus einem anderen Stream countdown: Raubzüge auf $time - "@countdown": + "@countdown": description: Countdown-Timer für automatisches Reiten -goal: +goal: title: "Ziel: $amount" remaining: "Verbleibend: $amount" complete: COMPLETE -button: +button: login: Anmelden logout: Abmelden edit_profile: Profil anpassen - "@login": + "@login": description: Schaltflächentext für die Anmeldeschaltfläche follow: Folgen - "@follow": + "@follow": description: Schaltflächentext für die Schaltfläche "Folgen unfollow: Entfolgen - "@unfollow": + "@unfollow": description: Schaltflächentext für die "Unfollow"-Schaltfläche mute: Stummschalten unmute: Entstummen share: Teilen save: Speichern -embed: +embed: article_by: Artikel von $name note_by: Note von $name live_stream_by: Live-Stream von $name -stream_list: +stream_list: following: Folge ich live: Live planned: Geplant ended: Beendet -"@stream_list": +"@stream_list": description: Überschriften auf Stream-Listen nach Stream-Typ live/beendet/geplant usw. -zap: +zap: title: $name zappen custom_amount: Benutzerdefinierter Betrag confirm: Bestätigen @@ -103,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: In Brieftasche öffnen copy: In die Zwischenablage kopiert - error: + error: invalid_custom_amount: Ungültiger benutzerdefinierter Betrag no_wallet: Keine Lightning-Brieftasche installiert no_lud16: Keine Blitzadresse gefunden -profile: +profile: past_streams: Vergangene Streams - edit: + edit: display_name: Name anzeigen about: Über nip05: Nostr-Adresse lud16: Lightning-Adresse - error: + error: logged_out: Profil kann nicht bearbeitet werden, wenn es abgemeldet ist -login: +login: username: Benutzername amber: Anmeldung mit Amber key: Anmeldung mit Schlüssel create: Konto erstellen - error: + error: invalid_key: Ungültiger Schlüssel diff --git a/lib/i18n/translated/el.i18n.yaml b/lib/i18n/translated/el.i18n.yaml index 44c516e..c5ec102 100644 --- a/lib/i18n/translated/el.i18n.yaml +++ b/lib/i18n/translated/el.i18n.yaml @@ -1,102 +1,97 @@ upload_avatar: Ανέβασμα Avatar -"@upload_avatar": - description: Κείμενο που προτρέπει τον χρήστη να πατήσει το εικονίδιο avatar για - να ξεκινήσει το ανέβασμα +"@upload_avatar": + description: Κείμενο που προτρέπει τον χρήστη να πατήσει το εικονίδιο avatar για να ξεκινήσει το ανέβασμα most_zapped_streamers: Τα περισσότερα Zapped Streamers -"@most_zapped_streamers": +"@most_zapped_streamers": description: Επικεφαλής πάνω από τα αναφερόμενα κορυφαία streamers από zaps no_user_found: Δεν βρέθηκε χρήστης -"@no_user_found": +"@no_user_found": description: Δεν βρέθηκε χρήστης κατά την αναζήτηση anon: Anon -viewers: +viewers: one: 1 θεατής other: $n θεατές -"@viewers": +"@viewers": description: Αριθμός θεατών της ροής - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Ένας ανώνυμος χρήστης -stream: - status: +stream: + status: live: LIVE ended: ENDED planned: ΣΧΕΔΙΑΣΜΟΣ started: Ξεκίνησε $timestamp - chat: + chat: disabled: ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ disabled_timeout: "Το χρονικό όριο λήγει: $time" timeout(rich): $mod χρονομετρημένη λήξη $user για $time - "@timeout": + "@timeout": description: Μήνυμα συνομιλίας που εμφανίζει συμβάντα timeout ended: STREAM ΤΕΛΕΙΩΣΕ - "@ended": + "@ended": description: Η ροή τελείωσε το υποσέλιδο στο κάτω μέρος της συνομιλίας zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Μήνυμα συνομιλίας που δείχνει ροή ροής zaps - write: + write: label: Γράψτε μήνυμα - "@label": + "@label": description: Ετικέτα στο πλαίσιο εισαγωγής μηνύματος συνομιλίας no_signer: Δεν μπορείτε να γράψετε μηνύματα με σύνδεση στο npub - "@no_signer": - description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης είναι - συνδεδεμένος μόνο με το κλειδί pubkey + "@no_signer": + description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης είναι συνδεδεμένος μόνο με το κλειδί pubkey login: Παρακαλώ συνδεθείτε για να στείλετε μηνύματα - "@login": - description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης έχει - αποσυνδεθεί - badge: + "@login": + description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης έχει αποσυνδεθεί + badge: awarded_to: "Απονέμεται σε:" - "@awarded_to": - description: Επικεφαλίδα πάνω από τη λίστα των χρηστών στους οποίους έχει - απονεμηθεί ένα σήμα - raid: + "@awarded_to": + description: Επικεφαλίδα πάνω από τη λίστα των χρηστών στους οποίους έχει απονεμηθεί ένα σήμα + raid: to: RAIDING $name - "@to": + "@to": description: Μήνυμα επιδρομής συνομιλίας σε άλλη ροή from: RAID FROM $name - "@from": + "@from": description: Μήνυμα επιδρομής συνομιλίας από άλλη ροή countdown: Επιδρομές στο $time - "@countdown": + "@countdown": description: Χρονοδιακόπτης αντίστροφης μέτρησης για αυτόματη ιππασία -goal: +goal: title: "Στόχος: $amount" remaining: "Υπόλοιπο: $amount" complete: ΠΛΗΡΗΣ -button: +button: login: Σύνδεση logout: Αποσύνδεση edit_profile: Επεξεργασία προφίλ - "@login": + "@login": description: Κείμενο κουμπιού για το κουμπί σύνδεσης follow: Ακολουθήστε το - "@follow": + "@follow": description: Κείμενο κουμπιού για το κουμπί follow unfollow: Ακολουθήστε το - "@unfollow": + "@unfollow": description: Κείμενο κουμπιού για το κουμπί unfollow mute: Σίγαση unmute: Αποσυνδέστε τη φωνή σας από το share: Μοιραστείτε το save: Αποθήκευση -embed: +embed: article_by: Άρθρο από $name note_by: Σημείωση του $name live_stream_by: Ζωντανή μετάδοση από το $name -stream_list: +stream_list: following: Ακολουθώντας το live: Ζωντανό planned: Προγραμματισμένο ended: Τελείωσε -"@stream_list": - description: Επικεφαλίδες στις λίστες ροής ανά τύπο ροής - ζωντανή/τελειωμένη/προγραμματισμένη κ.λπ. -zap: +"@stream_list": + description: Επικεφαλίδες στις λίστες ροής ανά τύπο ροής ζωντανή/τελειωμένη/προγραμματισμένη κ.λπ. +zap: title: Zap $name custom_amount: Προσαρμοσμένο ποσό confirm: Επιβεβαίωση @@ -105,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Άνοιγμα στο πορτοφόλι copy: Αντιγραφή στο πρόχειρο - error: + error: invalid_custom_amount: Μη έγκυρο προσαρμοσμένο ποσό no_wallet: Δεν έχει εγκατασταθεί πορτοφόλι αστραπής no_lud16: Δεν βρέθηκε διεύθυνση κεραυνού -profile: +profile: past_streams: Προηγούμενα ρεύματα - edit: + edit: display_name: Όνομα οθόνης about: Σχετικά με το nip05: Διεύθυνση Nostr lud16: Διεύθυνση Lightning - error: + error: logged_out: Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί -login: +login: username: Όνομα χρήστη amber: Σύνδεση με Amber key: Σύνδεση με κλειδί create: Δημιουργία λογαριασμού - error: + error: invalid_key: Μη έγκυρο κλειδί diff --git a/lib/i18n/translated/en.i18n.yaml b/lib/i18n/translated/en.i18n.yaml deleted file mode 100644 index 5258519..0000000 --- a/lib/i18n/translated/en.i18n.yaml +++ /dev/null @@ -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 diff --git a/lib/i18n/translated/es.i18n.yaml b/lib/i18n/translated/es.i18n.yaml index c461474..430cd2b 100644 --- a/lib/i18n/translated/es.i18n.yaml +++ b/lib/i18n/translated/es.i18n.yaml @@ -1,102 +1,97 @@ upload_avatar: Subir avatar -"@upload_avatar": - description: Texto que indica al usuario que pulse el marcador de avatar para - iniciar la carga +"@upload_avatar": + description: Texto que indica al usuario que pulse el marcador de avatar para iniciar la carga most_zapped_streamers: Serpentinas más derribadas -"@most_zapped_streamers": +"@most_zapped_streamers": description: Encabezando streamers superiores listados por zaps no_user_found: No se ha encontrado ningún usuario -"@no_user_found": +"@no_user_found": description: No se ha encontrado ningún usuario al realizar la búsqueda anon: Anónimo -viewers: +viewers: one: 1 espectador other: $n espectadores -"@viewers": +"@viewers": description: Número de espectadores del flujo - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Un usuario anónimo -stream: - status: +stream: + status: live: EN VIVO ended: FIN planned: PLANIFICADO started: Comenzó $timestamp - chat: + chat: disabled: CHAT DESHABILITADO disabled_timeout: "El tiempo de espera expira: $time" timeout(rich): $mod timed out $user para $time - "@timeout": + "@timeout": description: Mensaje de chat que muestra los eventos de tiempo de espera ended: STREAM FINED - "@ended": + "@ended": description: Stream finalizó en la parte inferior del chat zap(rich): $user zapearon $amount sats - "@zap": + "@zap": description: Mensaje de chat que muestra zaps de flujo - write: + write: label: Escribir mensaje - "@label": + "@label": description: Etiqueta del cuadro de entrada de mensajes de chat no_signer: No se pueden escribir mensajes con el login npub - "@no_signer": - description: Mensaje de entrada en el chat que se muestra cuando el usuario está - conectado sólo con pubkey + "@no_signer": + description: Mensaje de entrada en el chat que se muestra cuando el usuario está conectado sólo con pubkey login: Inicie sesión para enviar mensajes - "@login": - description: Mensaje de entrada al chat que se muestra cuando el usuario cierra - la sesión - badge: + "@login": + description: Mensaje de entrada al chat que se muestra cuando el usuario cierra la sesión + badge: awarded_to: "Concedido a:" - "@awarded_to": - description: Encabezamiento de la lista de usuarios a los que se ha concedido - una insignia - raid: + "@awarded_to": + description: Encabezamiento de la lista de usuarios a los que se ha concedido una insignia + raid: to: RAIDING $name - "@to": + "@to": description: Mensaje de raid de chat a otro flujo from: RAID DESDE $name - "@from": + "@from": description: Mensaje de incursión en el chat desde otro flujo countdown: Incursiones en $time - "@countdown": + "@countdown": description: Temporizador de cuenta atrás para auto-raiding -goal: +goal: title: "Objetivo: $amount" remaining: "Resto: $amount" complete: COMPLETAR -button: +button: login: Iniciar Sesión logout: Cerrar sesión edit_profile: Editar Perfil - "@login": + "@login": description: Texto del botón de inicio de sesión follow: Seguir - "@follow": + "@follow": description: Texto del botón de seguimiento unfollow: Dejar de seguir - "@unfollow": + "@unfollow": description: Texto del botón "Dejar de seguir mute: Silenciar unmute: Dejar de silenciar share: Compartir save: Guardar -embed: +embed: article_by: Artículo de $name note_by: Nota de $name live_stream_by: Transmisión en directo por $name -stream_list: +stream_list: following: Siguiendo live: En directo planned: Planificado ended: Finalizado -"@stream_list": - description: Encabezamientos en las listas de flujos por tipo de flujo en - directo/finalizado/planificado, etc. -zap: +"@stream_list": + description: Encabezamientos en las listas de flujos por tipo de flujo en directo/finalizado/planificado, etc. +zap: title: Zap $name custom_amount: Importe personalizado confirm: Confirmar @@ -105,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Abrir en cartera copy: Copiado al portapapeles - error: + error: invalid_custom_amount: Importe personalizado no válido no_wallet: Sin monedero relámpago instalado no_lud16: No se ha encontrado ninguna dirección de rayos -profile: +profile: past_streams: Transmisiones anteriores - edit: + edit: display_name: Mostrar nombre about: Sobre ti nip05: Dirección Nostr lud16: Dirección del rayo - error: + error: logged_out: No se puede editar el perfil cuando se cierra la sesión -login: +login: username: Usuario amber: Iniciar sesión con Amber key: Inicio de sesión con clave create: Crear una cuenta - error: + error: invalid_key: Clave no válida diff --git a/lib/i18n/translated/fi.i18n.yaml b/lib/i18n/translated/fi.i18n.yaml index c09f2ee..9e187a3 100644 --- a/lib/i18n/translated/fi.i18n.yaml +++ b/lib/i18n/translated/fi.i18n.yaml @@ -1,100 +1,97 @@ upload_avatar: Lataa avatar -"@upload_avatar": - description: Teksti, joka kehottaa käyttäjää painamaan avatar-merkkiä - aloittaakseen lataamisen. +"@upload_avatar": + description: Teksti, joka kehottaa käyttäjää painamaan avatar-merkkiä aloittaakseen lataamisen. most_zapped_streamers: Eniten Zapped Streamers -"@most_zapped_streamers": +"@most_zapped_streamers": description: Päällekkäin lueteltujen alkuun streamers by zaps no_user_found: Käyttäjää ei löytynyt -"@no_user_found": +"@no_user_found": description: Käyttäjää ei löytynyt haun yhteydessä anon: Anon -viewers: +viewers: one: 1 katsoja other: $n katsojaa -"@viewers": +"@viewers": description: Streamin katsojien määrä - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Nimetön käyttäjä -stream: - status: +stream: + status: live: LIVE ended: ENDED planned: SUUNNITELTU started: Aloitettu $timestamp - chat: + chat: disabled: CHAT POISTETTU KÄYTÖSTÄ disabled_timeout: "Aikakatkaisu päättyy: $time" timeout(rich): $mod ajastettu $user for $time - "@timeout": + "@timeout": description: Chat-viesti, joka näyttää aikakatkaisutapahtumat ended: STREAM PÄÄTTYNYT - "@ended": + "@ended": description: Virta päättyi alatunnisteen alareunaan chatissa zap(rich): $user zappasi $amount satsia - "@zap": + "@zap": description: Chat-viestin näyttäminen stream zaps - write: + write: label: Kirjoita viesti - "@label": + "@label": description: Chat-viestin syöttöruudun tarra no_signer: Ei voi kirjoittaa viestejä npub-kirjautumisella - "@no_signer": - description: Chat-syöttöviesti näytetään, kun käyttäjä on kirjautunut sisään - vain pubkey-avaimella. + "@no_signer": + description: Chat-syöttöviesti näytetään, kun käyttäjä on kirjautunut sisään vain pubkey-avaimella. login: Kirjaudu sisään lähettääksesi viestejä - "@login": + "@login": description: Chat-syötteen viesti näytetään, kun käyttäjä on kirjautunut ulos. - badge: + badge: awarded_to: "Myönnetty:" - "@awarded_to": + "@awarded_to": description: Merkin saaneiden käyttäjien luettelon otsikko - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat-viesti toiseen streamiin from: RAID FROM $name - "@from": + "@from": description: Chat raid viesti toisesta virrasta countdown: Ryöstöretket osoitteessa $time - "@countdown": + "@countdown": description: Lähtölaskenta ajastin automaattista ratsastusta varten -goal: +goal: title: "Tavoite: $amount" remaining: "Jäljellä: $amount" complete: TÄYDELLINEN -button: +button: login: Kirjaudu sisään logout: Kirjaudu ulos edit_profile: Muokkaa profiilia - "@login": + "@login": description: Kirjautumispainikkeen teksti follow: Seuraa - "@follow": + "@follow": description: Seuraa-painikkeen painikkeen teksti unfollow: Älä seuraa - "@unfollow": + "@unfollow": description: Seuraa-painikkeen teksti mute: Mykistä unmute: Poista mykistys share: Jaa save: Tallenna -embed: +embed: article_by: Artikkeli $name note_by: Viesti lähettäjältä $name live_stream_by: Suora lähetys osoitteessa $name -stream_list: +stream_list: following: Seuraa live: Live planned: Suunniteltu ended: Päättynyt -"@stream_list": - description: Stream-luetteloiden otsikot stream-tyypeittäin - live/päättynyt/suunniteltu jne. -zap: +"@stream_list": + description: Stream-luetteloiden otsikot stream-tyypeittäin live/päättynyt/suunniteltu jne. +zap: title: Zap $name custom_amount: Mukautettu määrä confirm: Vahvista @@ -103,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Avaa lompakossa copy: Kopioitu leikepöydälle - error: + error: invalid_custom_amount: Virheellinen mukautettu määrä no_wallet: Ei asennettua salamalompakkoa no_lud16: Salamaosoitetta ei löytynyt -profile: +profile: past_streams: Aikaisemmat lähetykset - edit: + edit: display_name: Näytön nimi about: Tietoja nip05: Nostr-osoite lud16: Lightning-osoite - error: + error: logged_out: Ei voi muokata profiilia, kun on kirjautunut ulos -login: +login: username: Käyttäjätunnus amber: Kirjaudu sisään Amber kanssa key: Kirjaudu sisään avaimella create: Luo tili - error: + error: invalid_key: Virheellinen avain diff --git a/lib/i18n/translated/fr.i18n.yaml b/lib/i18n/translated/fr.i18n.yaml index fe7ae5a..08a3f71 100644 --- a/lib/i18n/translated/fr.i18n.yaml +++ b/lib/i18n/translated/fr.i18n.yaml @@ -1,99 +1,97 @@ 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 +"@upload_avatar": + description: Texte invitant l'utilisateur à cliquer sur l'espace réservé à l'avatar pour commencer le téléchargement most_zapped_streamers: Les Streamers les plus zappés -"@most_zapped_streamers": +"@most_zapped_streamers": description: Les têtes d'affiche sont listées par zaps. no_user_found: Aucun utilisateur trouvé -"@no_user_found": +"@no_user_found": description: Aucun utilisateur n'a été trouvé lors de la recherche anon: Anonyme -viewers: +viewers: one: 1 téléspectateur other: $n spectateurs -"@viewers": +"@viewers": description: Nombre de spectateurs du flux - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Un utilisateur anonyme -stream: - status: +stream: + status: live: VIVRE ended: FINI planned: PRÉVU started: Commencé à $timestamp - chat: + chat: disabled: CHAT DISABLED disabled_timeout: "Le délai expire : $time" timeout(rich): $mod $user a expiré dans le temps pour $time - "@timeout": + "@timeout": description: Message de chat indiquant les événements de dépassement de délai ended: STREAM ENDED - "@ended": + "@ended": description: Stream ended footer at bottom of chat zap(rich): $user a zappé $amount sats - "@zap": + "@zap": description: Message de chat montrant des zaps de flux - write: + write: label: Message écrit - "@label": + "@label": description: Étiquette sur la boîte de saisie du message de chat no_signer: Impossible d'écrire des messages avec le login npub - "@no_signer": - description: Message d'entrée du chat affiché lorsque l'utilisateur n'est - connecté qu'avec pubkey + "@no_signer": + description: Message d'entrée du chat affiché lorsque l'utilisateur n'est connecté qu'avec pubkey login: Veuillez vous connecter pour envoyer des messages - "@login": + "@login": description: Message d'entrée du chat affiché lorsque l'utilisateur est déconnecté - badge: + badge: awarded_to: "Attribué à :" - "@awarded_to": + "@awarded_to": description: Titre sur la liste des utilisateurs qui ont reçu un badge - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Message de raid par chat vers un autre flux from: RAID FROM $name - "@from": + "@from": description: Message de raid sur le chat à partir d'un autre flux countdown: Raid sur $time - "@countdown": + "@countdown": description: Compte à rebours pour l'auto-raid -goal: +goal: title: "Objectif : $amount" remaining: "Reste : $amount" complete: COMPLET -button: +button: login: Se Connecter logout: Se déconnecter edit_profile: Modifier le Profil - "@login": + "@login": description: Texte du bouton de connexion follow: Suivre - "@follow": + "@follow": description: Texte du bouton de suivi unfollow: Ne plus suivre - "@unfollow": + "@unfollow": description: Texte du bouton pour le bouton "unfollow mute: Muet unmute: Retirer sourdine share: Partager save: Sauvegarder -embed: +embed: article_by: Article par $name note_by: Note par $name live_stream_by: Retransmission en direct sur $name -stream_list: +stream_list: following: Abonnements live: En direct planned: Planifié ended: Terminé -"@stream_list": +"@stream_list": description: Rubriques sur les listes de flux par type de flux en direct/fini/prévu, etc. -zap: +zap: title: Zap $name custom_amount: Montant personnalisé confirm: Confirmer @@ -102,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Ouvrir dans le portefeuille copy: Copié dans le presse-papiers - error: + error: invalid_custom_amount: Montant personnalisé non valide no_wallet: Pas de porte-monnaie électronique installé no_lud16: Pas d'adresse éclair trouvée -profile: +profile: past_streams: Streams passés - edit: + edit: display_name: Nom d'affichage about: À propos nip05: Adresse Nostr lud16: Adresse Lightning - error: + error: logged_out: Impossible de modifier le profil lorsque l'on est déconnecté -login: +login: username: Nom d’utilisateur amber: Se connecter avec Amber key: Connexion avec la clé create: Créer un Compte - error: + error: invalid_key: Clé non valide diff --git a/lib/i18n/translated/he.i18n.yaml b/lib/i18n/translated/he.i18n.yaml index 5258519..a6eaef7 100644 --- a/lib/i18n/translated/he.i18n.yaml +++ b/lib/i18n/translated/he.i18n.yaml @@ -1,97 +1,97 @@ upload_avatar: 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": +"@most_zapped_streamers": description: Heading over listed top streamers by zaps no_user_found: No user found -"@no_user_found": +"@no_user_found": description: No user found when searching anon: Anon -viewers: +viewers: one: 1 viewer other: $n viewers -"@viewers": +"@viewers": description: Number of viewers of the stream - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: An anonymous user -stream: - status: +stream: + status: live: LIVE ended: ENDED planned: PLANNED started: Started $timestamp - chat: + chat: disabled: CHAT DISABLED disabled_timeout: "Timeout expires: $time" timeout(rich): $mod timed out $user for $time - "@timeout": + "@timeout": description: Chat message showing timeout events ended: STREAM ENDED - "@ended": + "@ended": description: Stream ended footer at bottom of chat zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Chat message showing stream zaps - write: + write: label: Write message - "@label": + "@label": description: Label on the chat message input box no_signer: Can't write messages with npub login - "@no_signer": + "@no_signer": description: Chat input message shown when the user is logged in only with pubkey login: Please login to send messages - "@login": + "@login": description: Chat input message shown when the user is logged out - badge: + badge: awarded_to: "Awarded to:" - "@awarded_to": + "@awarded_to": description: Heading over list of users who are awarded a badge - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat raid message to another stream from: RAID FROM $name - "@from": + "@from": description: Chat raid message from another stream countdown: Raiding in $time - "@countdown": + "@countdown": description: Countdown timer for auto-raiding -goal: +goal: title: "Goal: $amount" remaining: "Remaining: $amount" complete: COMPLETE -button: +button: login: Login logout: Logout edit_profile: Edit Profile - "@login": + "@login": description: Button text for the login button follow: Follow - "@follow": + "@follow": description: Button text for the follow button unfollow: Unfollow - "@unfollow": + "@unfollow": description: Button text for the unfollow button mute: Mute unmute: Unmute share: Share save: Save -embed: +embed: article_by: Article by $name note_by: Note by $name live_stream_by: Live stream by $name -stream_list: +stream_list: following: Following live: Live planned: Planned ended: Ended -"@stream_list": +"@stream_list": description: Headings on stream lists by stream type live/ended/planned etc. -zap: +zap: title: Zap $name custom_amount: Custom Amount confirm: Confirm @@ -100,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Open in Wallet copy: Copied to clipboard - error: + error: invalid_custom_amount: Invalid custom amount no_wallet: No lightning wallet installed no_lud16: No lightning address found -profile: +profile: past_streams: Past Streams - edit: + edit: display_name: Display Name about: About nip05: Nostr Address lud16: Lightning Address - error: + error: logged_out: Cant edit profile when logged out -login: +login: username: Username amber: Login with Amber key: Login with Key create: Create Account - error: + error: invalid_key: Invalid key diff --git a/lib/i18n/translated/hu.i18n.yaml b/lib/i18n/translated/hu.i18n.yaml index 8f54426..6f70f93 100644 --- a/lib/i18n/translated/hu.i18n.yaml +++ b/lib/i18n/translated/hu.i18n.yaml @@ -1,99 +1,97 @@ 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 +"@upload_avatar": + description: Szöveg, amely arra kéri a felhasználót, hogy a feltöltés megkezdéséhez nyomja meg az avatar helyőrzőt most_zapped_streamers: A legtöbb Zapped Streamers -"@most_zapped_streamers": +"@most_zapped_streamers": description: Irány a felsorolt top streamerek fölött zaps által no_user_found: Nem talált felhasználó -"@no_user_found": +"@no_user_found": description: Kereséskor nem talált felhasználó anon: Névtelen -viewers: +viewers: one: 1 néző other: $n néző -"@viewers": +"@viewers": description: A stream nézőinek száma - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Egy névtelen felhasználó -stream: - status: +stream: + status: live: ÉLŐ ended: ENDED planned: TERVEZETT started: Elindult $timestamp - chat: + chat: disabled: CHAT KIKAPCSOLVA disabled_timeout: "Az időkorlát lejár: $time" timeout(rich): $mod időzített $user a $time számára - "@timeout": + "@timeout": description: Chat üzenet az időkorlátos események megjelenítésével ended: STREAM MEGSZÜNTETETT - "@ended": + "@ended": description: A stream véget ért lábléc a chat alján zap(rich): $user zap-elt $amount sats - "@zap": + "@zap": description: Csevegőüzenet, amely stream zapokat mutat - write: + write: label: Üzenet írása - "@label": + "@label": description: Címke a csevegőüzenet beviteli mezőjén no_signer: Nem tud üzeneteket írni az npub bejelentkezéssel - "@no_signer": - description: A csevegés bemeneti üzenete megjelenik, ha a felhasználó csak - pubkey-vel van bejelentkezve + "@no_signer": + description: A csevegés bemeneti üzenete megjelenik, ha a felhasználó csak pubkey-vel van bejelentkezve login: Kérjük, jelentkezzen be az üzenetek küldéséhez - "@login": + "@login": description: A felhasználó kijelentkezésekor megjelenő csevegési beviteli üzenet - badge: + badge: awarded_to: "Elnyerte:" - "@awarded_to": + "@awarded_to": description: Fejléc a jelvényt kapott felhasználók listája fölött - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat raid üzenet egy másik folyamba from: RAID FROM $name - "@from": + "@from": description: Chat raid üzenet egy másik folyamból countdown: Raiding a $time oldalon - "@countdown": + "@countdown": description: Visszaszámláló időzítő az automatikus lovagláshoz -goal: +goal: title: "Cél: $amount" remaining: "Maradék: $amount" complete: TELJES -button: +button: login: Bejelentkezés logout: Kijelentkezés edit_profile: Profil szerkesztése - "@login": + "@login": description: A bejelentkezési gomb szövege follow: Követés - "@follow": + "@follow": description: A követés gomb szövege unfollow: Követés megszüntetése - "@unfollow": + "@unfollow": description: A követés megszüntetése gomb szövege mute: Némítás unmute: Némítás visszavonása share: Megosztás save: Mentés -embed: +embed: article_by: A $name cikke. note_by: $name bejegyzése live_stream_by: Élő közvetítés a $name oldalon -stream_list: +stream_list: following: Követettek bejegyzései live: Élő planned: Tervezett ended: Véget ért -"@stream_list": +"@stream_list": description: A stream-listák címsorai stream-típusonként élő/befejezett/tervezett stb. -zap: +zap: title: Zap $name custom_amount: Egyéni összeg confirm: Megerősítés @@ -102,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Megnyitás a pénztárcában copy: Vágólapra másolva - error: + error: invalid_custom_amount: Érvénytelen egyéni összeg no_wallet: Nincs telepített villám tárca no_lud16: Nem talált villámcím -profile: +profile: past_streams: Múltbeli Streamek - edit: + edit: display_name: Megjelenített név about: Névjegy nip05: Nostr-cím lud16: Lightning-cím - error: + error: logged_out: Kijelentkezve nem lehet profilt szerkeszteni -login: +login: username: Felhasználónév amber: Bejelentkezés Amber segítségével key: Bejelentkezés kulccsal create: Fiók Létrehozása - error: + error: invalid_key: Érvénytelen kulcs diff --git a/lib/i18n/translated/it.i18n.yaml b/lib/i18n/translated/it.i18n.yaml index 8f1b7ba..7d8cc2a 100644 --- a/lib/i18n/translated/it.i18n.yaml +++ b/lib/i18n/translated/it.i18n.yaml @@ -1,100 +1,97 @@ upload_avatar: Carica Avatar -"@upload_avatar": - description: Testo che richiede all'utente di premere il segnaposto dell'avatar - per iniziare il caricamento +"@upload_avatar": + description: Testo che richiede all'utente di premere il segnaposto dell'avatar per iniziare il caricamento most_zapped_streamers: Il maggior numero di streamer bloccati -"@most_zapped_streamers": +"@most_zapped_streamers": description: Direzione sopra elencata top streamers da zaps no_user_found: Nessun utente trovato -"@no_user_found": +"@no_user_found": description: Nessun utente trovato durante la ricerca anon: Anonimo -viewers: +viewers: one: 1 spettatore other: $n spettatori -"@viewers": +"@viewers": description: Numero di spettatori del flusso - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Un utente anonimo -stream: - status: +stream: + status: live: IN DIRETTA ended: FINE planned: PREVISTO started: Avviato $timestamp - chat: + chat: disabled: CHAT DISABILITATA disabled_timeout: "Il timeout scade: $time" timeout(rich): $mod time out $user per $time - "@timeout": + "@timeout": description: Messaggio di chat che mostra gli eventi di timeout ended: STREAM ENDED - "@ended": + "@ended": description: Il flusso si è concluso con un piè di pagina in fondo alla chat zap(rich): $user ha effettuato uno zap di $amount sats - "@zap": + "@zap": description: Messaggio di chat che mostra gli zap del flusso - write: + write: label: Scrivi il messaggio - "@label": + "@label": description: Etichetta della casella di immissione del messaggio di chat no_signer: Impossibile scrivere messaggi con il login npub - "@no_signer": - description: Messaggio di ingresso alla chat mostrato quando l'utente è connesso - solo con la pubkey + "@no_signer": + description: Messaggio di ingresso alla chat mostrato quando l'utente è connesso solo con la pubkey login: Effettuare il login per inviare messaggi - "@login": + "@login": description: Messaggio di input della chat mostrato quando l'utente è disconnesso - badge: + badge: awarded_to: "Assegnato a:" - "@awarded_to": + "@awarded_to": description: Intestazione dell'elenco degli utenti a cui è stato assegnato un badge - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Messaggio di chat raid in un altro flusso from: RAID DA $name - "@from": + "@from": description: Messaggio di chat raid da un altro flusso countdown: Raid in $time - "@countdown": + "@countdown": description: Timer per il conto alla rovescia per l'auto-raid -goal: +goal: title: "Obiettivo: $amount" remaining: "Restante: $amount" complete: COMPLETO -button: +button: login: Login logout: Logout edit_profile: Modifica profilo - "@login": + "@login": description: Testo del pulsante per il pulsante di accesso follow: Segui - "@follow": + "@follow": description: Testo del pulsante per il pulsante Segui unfollow: Smetti di seguire - "@unfollow": + "@unfollow": description: Testo del pulsante per il pulsante unfollow mute: Silenzia unmute: Riattiva share: Condividi save: Salva -embed: +embed: article_by: Articolo di $name note_by: Nota di $name live_stream_by: Streaming in diretta da $name -stream_list: +stream_list: following: Seguiti live: Dal vivo planned: Pianificato ended: Terminato -"@stream_list": - description: Titoli sugli elenchi dei flussi per tipo di flusso - live/finito/pianificato ecc. -zap: +"@stream_list": + description: Titoli sugli elenchi dei flussi per tipo di flusso live/finito/pianificato ecc. +zap: title: Zap $name custom_amount: Importo personalizzato confirm: Conferma @@ -103,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Aprire nel portafoglio copy: Copiato negli appunti - error: + error: invalid_custom_amount: Importo personalizzato non valido no_wallet: Nessun portafoglio Lightning installato no_lud16: Nessun indirizzo di fulmine trovato -profile: +profile: past_streams: Flussi passati - edit: + edit: display_name: Nome visualizzato about: Info nip05: Indirizzo Nostr lud16: Indirizzo del fulmine - error: + error: logged_out: Impossibile modificare il profilo quando si è disconnessi -login: +login: username: Nome utente amber: Accesso con Amber key: Accesso con chiave create: Crea un account - error: + error: invalid_key: Chiave non valida diff --git a/lib/i18n/translated/ja.i18n.yaml b/lib/i18n/translated/ja.i18n.yaml index 4c0eb44..76461f5 100644 --- a/lib/i18n/translated/ja.i18n.yaml +++ b/lib/i18n/translated/ja.i18n.yaml @@ -1,97 +1,97 @@ upload_avatar: アバターのアップロード -"@upload_avatar": +"@upload_avatar": description: アバターのプレースホルダーを押してアップロードを開始するよう促すテキスト most_zapped_streamers: 最もザッピングされたストリーマー -"@most_zapped_streamers": +"@most_zapped_streamers": description: ザップによるリストの上のストリーマーに向かう no_user_found: ユーザーが見つかりません -"@no_user_found": +"@no_user_found": description: 検索してもユーザーが見つからない anon: 匿名 -viewers: +viewers: one: 1 視聴者 other: $n 人が視聴中 -"@viewers": +"@viewers": description: ストリームの視聴者数 - placeholders: - n: + placeholders: + n: type: イント -"@anon": +"@anon": description: 匿名ユーザー -stream: - status: +stream: + status: live: ライブ ended: 終了 planned: 予定 started: $timestamp を開始 - chat: + chat: disabled: チャット無効 disabled_timeout: タイムアウト: $time timeout(rich): $mod タイムアウト $user for $time - "@timeout": + "@timeout": description: タイムアウトイベントを表示するチャットメッセージ ended: 配信終了 - "@ended": + "@ended": description: チャットの下にストリーム終了のフッター zap(rich): $user が $amount sats をザップしました - "@zap": + "@zap": description: ストリームのザッピングを表示するチャットメッセージ - write: + write: label: メッセージを書く - "@label": + "@label": description: チャットメッセージ入力ボックスのラベル no_signer: npubログインでメッセージが書けない - "@no_signer": + "@no_signer": description: ユーザーがpubkeyのみでログインしている場合に表示されるチャット入力メッセージ login: メッセージを送信するにはログインしてください - "@login": + "@login": description: ログアウト時に表示されるチャット入力メッセージ - badge: + badge: awarded_to: 受賞者 - "@awarded_to": + "@awarded_to": description: バッジを授与されたユーザーのリスト上の見出し - raid: + raid: to: RAIDING $name - "@to": + "@to": description: 別のストリームへのチャット襲撃メッセージ from: RAID FROM $name - "@from": + "@from": description: 他のストリームからのチャット襲撃メッセージ countdown: $timeにおける襲撃 - "@countdown": + "@countdown": description: 自動騎乗のカウントダウン・タイマー -goal: +goal: title: 目標額: $amount remaining: 残り: $amount complete: 完了 -button: +button: login: ログイン logout: ログアウト edit_profile: プロフィールを編集 - "@login": + "@login": description: ログインボタンのテキスト follow: フォロー - "@follow": + "@follow": description: フォローボタンのテキスト unfollow: フォロー解除 - "@unfollow": + "@unfollow": description: フォロー解除ボタンのテキスト mute: ミュート unmute: ミュート解除 share: 共有 save: 保存 -embed: +embed: article_by: 記事: $name note_by: $name の投稿 live_stream_by: ライブ・ストリーム $name -stream_list: +stream_list: following: フォロー中 live: ライブ配信中 planned: 予定あり ended: 終了しました -"@stream_list": +"@stream_list": description: ライブ/終了/予定など、ストリーム・タイプ別のストリーム・リストの見出し。 -zap: +zap: title: $name をザップ custom_amount: カスタム金額 confirm: 確認 @@ -100,23 +100,23 @@ zap: button_zap: ザップ button_open_wallet: ウォレットで開く copy: クリップボードにコピー - error: + error: invalid_custom_amount: 無効なカスタム金額 no_wallet: Lightningウォレット未装着 no_lud16: 雷アドレスが見つかりません -profile: +profile: past_streams: 過去の配信 - edit: + edit: display_name: 表示名 about: 自己紹介 nip05: Nostrアドレス lud16: ライトニングアドレス - error: + error: logged_out: ログアウトするとプロフィールが編集できない -login: +login: username: ユーザー名 amber: 琥珀でログイン key: キーでログイン create: アカウントを作成する - error: + error: invalid_key: 無効なキー diff --git a/lib/i18n/translated/ko.i18n.yaml b/lib/i18n/translated/ko.i18n.yaml index 9a3f101..2ee35c2 100644 --- a/lib/i18n/translated/ko.i18n.yaml +++ b/lib/i18n/translated/ko.i18n.yaml @@ -1,97 +1,97 @@ upload_avatar: 아바타 업로드 -"@upload_avatar": +"@upload_avatar": description: 아바타 플레이스홀더를 눌러 업로드를 시작하라는 메시지를 표시하는 텍스트 most_zapped_streamers: 가장 많이 재핑된 스트리머 -"@most_zapped_streamers": +"@most_zapped_streamers": description: 나열된 상위 스트리머를 잽별로 살펴보기 no_user_found: 사용자를 찾을 수 없습니다. -"@no_user_found": +"@no_user_found": description: 검색 시 사용자를 찾을 수 없음 anon: Anon -viewers: +viewers: one: 시청자 1명 other: $n 시청자 -"@viewers": +"@viewers": description: 스트림 시청자 수 - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: 익명 사용자 -stream: - status: +stream: + status: live: 라이브 ended: 종료 planned: 계획된 started: 시작 $timestamp - chat: + chat: disabled: 채팅 사용 안 함 disabled_timeout: "시간 초과가 만료되었습니다: $time" timeout(rich): $mod 시간 초과됨 $user $time - "@timeout": + "@timeout": description: 시간 초과 이벤트를 표시하는 채팅 메시지 ended: 스트림 종료 - "@ended": + "@ended": description: 채팅 하단의 스트림 종료 푸터 zap(rich): $user ZAPP $amount SATS - "@zap": + "@zap": description: 채팅 메시지 스트림 끊김 표시 - write: + write: label: 메시지 작성 - "@label": + "@label": description: 채팅 메시지 입력 상자의 라벨 no_signer: npub 로그인으로 메시지를 작성할 수 없습니다. - "@no_signer": + "@no_signer": description: 사용자가 공개 키로만 로그인한 경우에 표시되는 채팅 입력 메시지 login: 메시지를 보내려면 로그인하세요. - "@login": + "@login": description: 사용자가 로그아웃할 때 표시되는 채팅 입력 메시지 - badge: + badge: awarded_to: 수상 대상 - "@awarded_to": + "@awarded_to": description: 배지를 받은 사용자 목록으로 이동하기 - raid: + raid: to: RAIDing $name - "@to": + "@to": description: 다른 스트림으로 채팅 레이드 메시지 보내기 from: RAID FROM $name - "@from": + "@from": description: 다른 스트림의 채팅 레이드 메시지 countdown: $time에서 레이드 - "@countdown": + "@countdown": description: 자동 레이드를 위한 카운트다운 타이머 -goal: +goal: title: "목표: $amount" remaining: "남음: $amount" complete: 완료 -button: +button: login: 로그인 logout: 로그아웃 edit_profile: 프로필 수정 - "@login": + "@login": description: 로그인 버튼의 버튼 텍스트 follow: 팔로우 - "@follow": + "@follow": description: 팔로우 버튼의 버튼 텍스트 unfollow: 언팔로우 - "@unfollow": + "@unfollow": description: 언팔로우 버튼의 버튼 텍스트 mute: 뮤트 unmute: 뮤트 해제 share: 공유 save: 저장 -embed: +embed: article_by: "작성자: $name" note_by: "노트 작성됨: $name" live_stream_by: "라이브 스트리밍: $name" -stream_list: +stream_list: following: 팔로잉 live: 라이브 planned: 계획된 ended: 종료됨 -"@stream_list": +"@stream_list": description: 실시간/종료/예정 등 스트림 유형별로 스트림 목록의 제목을 표시합니다. -zap: +zap: title: Zap $name custom_amount: 사용자 지정 금액 confirm: 확인 @@ -100,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: 지갑에서 열기 copy: 클립보드에 복사 - error: + error: invalid_custom_amount: 잘못된 사용자 지정 금액 no_wallet: 라이트닝 월렛이 설치되지 않았습니다. no_lud16: 번개 주소를 찾을 수 없습니다. -profile: +profile: past_streams: 과거 스트림 - edit: + edit: display_name: 표시 이름 about: 정보 nip05: 노스트르 주소 lud16: 라이트닝 주소 - error: + error: logged_out: 로그아웃 시 프로필 수정 불가 -login: +login: username: 사용자 이름 amber: Amber로 로그인 key: 키로 로그인 create: 계정 만들기 - error: + error: invalid_key: 잘못된 키 diff --git a/lib/i18n/translated/nl.i18n.yaml b/lib/i18n/translated/nl.i18n.yaml index c93283c..1777047 100644 --- a/lib/i18n/translated/nl.i18n.yaml +++ b/lib/i18n/translated/nl.i18n.yaml @@ -1,100 +1,97 @@ upload_avatar: Avatar uploaden -"@upload_avatar": - description: Tekst die de gebruiker vraagt om op de avatar-plaatshouder te - klikken om te beginnen met uploaden +"@upload_avatar": + description: Tekst die de gebruiker vraagt om op de avatar-plaatshouder te klikken om te beginnen met uploaden most_zapped_streamers: Meeste Zapped Streamers -"@most_zapped_streamers": +"@most_zapped_streamers": description: Koers over beursgenoteerde topstreamers door zaps no_user_found: Geen gebruiker gevonden -"@no_user_found": +"@no_user_found": description: Geen gebruiker gevonden bij het zoeken anon: Anon -viewers: +viewers: one: 1 kijker other: $n kijkers -"@viewers": +"@viewers": description: Aantal kijkers van de stream - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Een anonieme gebruiker -stream: - status: +stream: + status: live: LIVE ended: GESLOTEN planned: GEPLAND started: Begonnen met $timestamp - chat: + chat: disabled: CHAT UITGESCHAKELD disabled_timeout: "Time-out loopt af: $time" timeout(rich): $mod timed out $user voor $time - "@timeout": + "@timeout": description: Chatbericht met time-outgebeurtenissen ended: STREAM BEËINDIGD - "@ended": + "@ended": description: Voettekst einde stream onderaan chat zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Chatbericht met stream zaps - write: + write: label: Schrijf bericht - "@label": + "@label": description: Label op het invoerveld voor chatberichten no_signer: Kan geen berichten schrijven met npub login - "@no_signer": - description: Chatinvoerbericht getoond wanneer de gebruiker alleen is ingelogd - met pubkey + "@no_signer": + description: Chatinvoerbericht getoond wanneer de gebruiker alleen is ingelogd met pubkey login: Log in om berichten te verzenden - "@login": - description: Chatinvoerbericht dat wordt weergegeven wanneer de gebruiker is - uitgelogd - badge: + "@login": + description: Chatinvoerbericht dat wordt weergegeven wanneer de gebruiker is uitgelogd + badge: awarded_to: "Toegekend aan:" - "@awarded_to": + "@awarded_to": description: Kop boven de lijst met gebruikers die een badge hebben gekregen - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat raid bericht naar een andere stream from: RAID VAN $name - "@from": + "@from": description: Chat invalbericht van een andere stream countdown: Overvallen in $time - "@countdown": + "@countdown": description: Afteltimer voor automatisch rijden -goal: +goal: title: "Doel: $amount" remaining: "Overblijvend: $amount" complete: COMPLETE -button: +button: login: Inloggen logout: Uitloggen edit_profile: Bewerk Profiel - "@login": + "@login": description: Knoptekst voor de aanmeldknop follow: Volgen - "@follow": + "@follow": description: Knoptekst voor de volgknop unfollow: Ontvolgen - "@unfollow": + "@unfollow": description: Knoptekst voor de knop Ontvolgen mute: Dempen unmute: Niet langer negeren share: Deel save: Opslaan -embed: +embed: article_by: Artikel door $name note_by: Opmerking door $name live_stream_by: Live stream via $name -stream_list: +stream_list: following: Volgt live: Live planned: Gepland ended: Beëindigd -"@stream_list": +"@stream_list": description: Rubrieken op streamlijsten per streamtype live/beëindigd/gepland etc. -zap: +zap: title: Zap $name custom_amount: Aangepast bedrag confirm: Bevestig @@ -103,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Openen in portefeuille copy: Gekopieerd naar klembord - error: + error: invalid_custom_amount: Ongeldig aangepast bedrag no_wallet: Geen bliksemportemonnee geïnstalleerd no_lud16: Geen bliksemadres gevonden -profile: +profile: past_streams: Afgelopen Streams - edit: + edit: display_name: Naam weergeven about: Over ons nip05: Nostr Adres lud16: Lightning adres - error: + error: logged_out: Kan profiel niet bewerken als ik ben uitgelogd -login: +login: username: Gebruikersnaam amber: Inloggen met Amber key: Inloggen met sleutel create: Account aanmaken - error: + error: invalid_key: Ongeldige sleutel diff --git a/lib/i18n/translated/no.i18n.yaml b/lib/i18n/translated/no.i18n.yaml index 5258519..a6eaef7 100644 --- a/lib/i18n/translated/no.i18n.yaml +++ b/lib/i18n/translated/no.i18n.yaml @@ -1,97 +1,97 @@ upload_avatar: 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": +"@most_zapped_streamers": description: Heading over listed top streamers by zaps no_user_found: No user found -"@no_user_found": +"@no_user_found": description: No user found when searching anon: Anon -viewers: +viewers: one: 1 viewer other: $n viewers -"@viewers": +"@viewers": description: Number of viewers of the stream - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: An anonymous user -stream: - status: +stream: + status: live: LIVE ended: ENDED planned: PLANNED started: Started $timestamp - chat: + chat: disabled: CHAT DISABLED disabled_timeout: "Timeout expires: $time" timeout(rich): $mod timed out $user for $time - "@timeout": + "@timeout": description: Chat message showing timeout events ended: STREAM ENDED - "@ended": + "@ended": description: Stream ended footer at bottom of chat zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Chat message showing stream zaps - write: + write: label: Write message - "@label": + "@label": description: Label on the chat message input box no_signer: Can't write messages with npub login - "@no_signer": + "@no_signer": description: Chat input message shown when the user is logged in only with pubkey login: Please login to send messages - "@login": + "@login": description: Chat input message shown when the user is logged out - badge: + badge: awarded_to: "Awarded to:" - "@awarded_to": + "@awarded_to": description: Heading over list of users who are awarded a badge - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat raid message to another stream from: RAID FROM $name - "@from": + "@from": description: Chat raid message from another stream countdown: Raiding in $time - "@countdown": + "@countdown": description: Countdown timer for auto-raiding -goal: +goal: title: "Goal: $amount" remaining: "Remaining: $amount" complete: COMPLETE -button: +button: login: Login logout: Logout edit_profile: Edit Profile - "@login": + "@login": description: Button text for the login button follow: Follow - "@follow": + "@follow": description: Button text for the follow button unfollow: Unfollow - "@unfollow": + "@unfollow": description: Button text for the unfollow button mute: Mute unmute: Unmute share: Share save: Save -embed: +embed: article_by: Article by $name note_by: Note by $name live_stream_by: Live stream by $name -stream_list: +stream_list: following: Following live: Live planned: Planned ended: Ended -"@stream_list": +"@stream_list": description: Headings on stream lists by stream type live/ended/planned etc. -zap: +zap: title: Zap $name custom_amount: Custom Amount confirm: Confirm @@ -100,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Open in Wallet copy: Copied to clipboard - error: + error: invalid_custom_amount: Invalid custom amount no_wallet: No lightning wallet installed no_lud16: No lightning address found -profile: +profile: past_streams: Past Streams - edit: + edit: display_name: Display Name about: About nip05: Nostr Address lud16: Lightning Address - error: + error: logged_out: Cant edit profile when logged out -login: +login: username: Username amber: Login with Amber key: Login with Key create: Create Account - error: + error: invalid_key: Invalid key diff --git a/lib/i18n/translated/pl.i18n.yaml b/lib/i18n/translated/pl.i18n.yaml index 5067086..56fadf1 100644 --- a/lib/i18n/translated/pl.i18n.yaml +++ b/lib/i18n/translated/pl.i18n.yaml @@ -1,100 +1,97 @@ 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. +"@upload_avatar": + description: Tekst zachęcający użytkownika do kliknięcia symbolu zastępczego awatara w celu rozpoczęcia przesyłania. most_zapped_streamers: Większość zapped streamerów -"@most_zapped_streamers": +"@most_zapped_streamers": description: Przechodzenie nad wymienionymi topowymi streamerami przez zapy no_user_found: Nie znaleziono użytkownika -"@no_user_found": +"@no_user_found": description: Nie znaleziono użytkownika podczas wyszukiwania anon: Anon -viewers: +viewers: one: 1 przeglądarka other: $n widzowie -"@viewers": +"@viewers": description: Liczba widzów strumienia - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Anonimowy użytkownik -stream: - status: +stream: + status: live: NA ŻYWO ended: ZAKOŃCZONY planned: PLANOWANE started: Start $timestamp - chat: + chat: disabled: CZAT WYŁĄCZONY disabled_timeout: "Upłynął limit czasu: $time" timeout(rich): $mod upłynął limit czasu $user dla $time - "@timeout": + "@timeout": description: Komunikat czatu pokazujący zdarzenia przekroczenia limitu czasu ended: TRANSMISJA ZAKOŃCZONA - "@ended": + "@ended": description: Stream zakończył stopkę na dole czatu zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Wiadomość na czacie pokazująca zapy strumienia - write: + write: label: Napisz wiadomość - "@label": + "@label": description: Etykieta w polu wprowadzania wiadomości czatu no_signer: Nie można pisać wiadomości z loginem npub - "@no_signer": - description: Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest - zalogowany tylko za pomocą klucza pubkey + "@no_signer": + description: Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest zalogowany tylko za pomocą klucza pubkey login: Zaloguj się, aby wysyłać wiadomości - "@login": + "@login": description: Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest wylogowany - badge: + badge: awarded_to: "Przyznano:" - "@awarded_to": + "@awarded_to": description: Nagłówek nad listą użytkowników, którzy otrzymali odznakę - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Przesyłanie wiadomości na czacie do innego strumienia from: RAID Z $name - "@from": + "@from": description: Nalot na czat z innego strumienia countdown: Naloty w $time - "@countdown": + "@countdown": description: Zegar odliczający czas do automatycznej jazdy -goal: +goal: title: "Cel: $amount" remaining: "Pozostałe: $amount" complete: ZAKOŃCZONE -button: +button: login: Logowanie logout: Wylogowanie edit_profile: Edytuj profil - "@login": + "@login": description: Tekst przycisku logowania follow: Śledź - "@follow": + "@follow": description: Tekst przycisku dla przycisku śledzenia unfollow: Nie obserwuj - "@unfollow": + "@unfollow": description: Tekst przycisku cofnięcia obserwowania mute: Wyciszenie unmute: Wyłącz wyciszenie share: Udział save: Zapisz -embed: +embed: article_by: Artykuł autorstwa $name note_by: Uwaga $name live_stream_by: Transmisja na żywo przez $name -stream_list: +stream_list: following: Następujący live: Na żywo planned: Planowane ended: Zakończony -"@stream_list": - description: Nagłówki na listach strumieni według typu strumienia na żywo / - zakończony / planowany itp. -zap: +"@stream_list": + description: Nagłówki na listach strumieni według typu strumienia na żywo / zakończony / planowany itp. +zap: title: Zap $name custom_amount: Kwota niestandardowa confirm: Potwierdzenie @@ -103,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Otwórz w portfelu copy: Skopiowane do schowka - error: + error: invalid_custom_amount: Nieprawidłowa kwota niestandardowa no_wallet: Brak zainstalowanego portfela Lightning no_lud16: Nie znaleziono adresu pioruna -profile: +profile: past_streams: Poprzednie strumienie - edit: + edit: display_name: Wyświetlana nazwa about: O nip05: Adres Nostr lud16: Adres błyskawicy - error: + error: logged_out: Nie można edytować profilu po wylogowaniu -login: +login: username: Nazwa użytkownika amber: Zaloguj się za pomocą Amber key: Logowanie za pomocą klucza create: Utwórz konto - error: + error: invalid_key: Nieprawidłowy klucz diff --git a/lib/i18n/translated/pt.i18n.yaml b/lib/i18n/translated/pt.i18n.yaml index 8da7f80..3b05714 100644 --- a/lib/i18n/translated/pt.i18n.yaml +++ b/lib/i18n/translated/pt.i18n.yaml @@ -1,100 +1,97 @@ upload_avatar: Carregar Avatar -"@upload_avatar": - description: Texto solicitando que o usuário clique no espaço reservado do - avatar para iniciar o upload +"@upload_avatar": + description: Texto solicitando que o usuário clique no espaço reservado do avatar para iniciar o upload most_zapped_streamers: Streamers mais afetados -"@most_zapped_streamers": +"@most_zapped_streamers": description: Dirigindo-se para as principais serpentinas listadas por zaps no_user_found: Nenhum usuário encontrado -"@no_user_found": +"@no_user_found": description: Nenhum usuário foi encontrado durante a pesquisa anon: Anônimo -viewers: +viewers: one: 1 visualizador other: $n espectadores -"@viewers": +"@viewers": description: Número de espectadores da transmissão - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Um usuário anônimo -stream: - status: +stream: + status: live: AO VIVO ended: FINALIZADO planned: PLANEJADO started: Iniciado em $timestamp - chat: + chat: disabled: BATE-PAPO DESATIVADO disabled_timeout: "O tempo limite expira: $time" timeout(rich): $mod Tempo esgotado $user para $time - "@timeout": + "@timeout": description: Mensagem de bate-papo mostrando eventos de tempo limite ended: TRANSMISSÃO ENCERRADA - "@ended": + "@ended": description: O rodapé do fluxo terminou na parte inferior do bate-papo zap(rich): $user zapeou $amount sats - "@zap": + "@zap": description: Mensagem de bate-papo mostrando zaps de fluxo - write: + write: label: Escrever mensagem - "@label": + "@label": description: Rótulo na caixa de entrada da mensagem de bate-papo no_signer: Não é possível escrever mensagens com o login do npub - "@no_signer": - description: Mensagem de entrada de bate-papo exibida quando o usuário está - conectado apenas com a pubkey + "@no_signer": + description: Mensagem de entrada de bate-papo exibida quando o usuário está conectado apenas com a pubkey login: Faça login para enviar mensagens - "@login": + "@login": description: Mensagem de entrada de chat exibida quando o usuário está desconectado - badge: + badge: awarded_to: "Prêmio concedido a:" - "@awarded_to": + "@awarded_to": description: Cabeçalho sobre a lista de usuários que receberam um emblema - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Mensagem de invasão de bate-papo para outro fluxo from: RAID DE $name - "@from": + "@from": description: Mensagem de invasão de bate-papo de outro fluxo countdown: Incursões em $time - "@countdown": + "@countdown": description: Cronômetro de contagem regressiva para o ataque automático -goal: +goal: title: "Meta: $amount" remaining: "Restante: $amount" complete: COMPLETO -button: +button: login: Entrar logout: Sair edit_profile: Editar perfil - "@login": + "@login": description: Texto do botão para o botão de login follow: Seguir - "@follow": + "@follow": description: Texto do botão para o botão Seguir unfollow: Deixar de seguir - "@unfollow": + "@unfollow": description: Texto do botão para o botão deixar de seguir mute: Silenciar unmute: Desmutar share: Compartilhar save: Salvar -embed: +embed: article_by: Artigo de $name note_by: Nota de $name live_stream_by: Transmissão ao vivo pelo site $name -stream_list: +stream_list: following: Seguindo live: Ao vivo planned: Planejado ended: Encerrado -"@stream_list": - description: Cabeçalhos nas listas de transmissões por tipo de transmissão ao - vivo/terminada/planejada etc. -zap: +"@stream_list": + description: Cabeçalhos nas listas de transmissões por tipo de transmissão ao vivo/terminada/planejada etc. +zap: title: Zap $name custom_amount: Valor personalizado confirm: Confirmar @@ -103,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Abrir na carteira copy: Copiado para a área de transferência - error: + error: invalid_custom_amount: Valor personalizado inválido no_wallet: Nenhuma carteira lightning instalada no_lud16: Nenhum endereço de raio encontrado -profile: +profile: past_streams: Transmissões Passadas - edit: + edit: display_name: Nome de exibição about: Sobre nip05: Endereço do Nostr lud16: Endereço Lightning - error: + error: logged_out: Não é possível editar o perfil quando se está desconectado -login: +login: username: Nome de usuário amber: Faça login com o Amber key: Login com chave create: Criar Conta - error: + error: invalid_key: Chave inválida diff --git a/lib/i18n/translated/ro.i18n.yaml b/lib/i18n/translated/ro.i18n.yaml index 55330b1..f3b6266 100644 --- a/lib/i18n/translated/ro.i18n.yaml +++ b/lib/i18n/translated/ro.i18n.yaml @@ -1,101 +1,97 @@ upload_avatar: Încărcați Avatar -"@upload_avatar": - description: Text care solicită utilizatorului să atingă marcajul avatar pentru - a începe încărcarea +"@upload_avatar": + description: Text care solicită utilizatorului să atingă marcajul avatar pentru a începe încărcarea most_zapped_streamers: Cele mai multe Streamers Zapped -"@most_zapped_streamers": +"@most_zapped_streamers": description: Cap peste streamers de top enumerate de zaps no_user_found: Niciun utilizator găsit -"@no_user_found": +"@no_user_found": description: Nu s-a găsit niciun utilizator la căutare anon: Anon -viewers: +viewers: one: 1 vizualizator other: $n telespectatori -"@viewers": +"@viewers": description: Numărul de telespectatori ai fluxului - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Un utilizator anonim -stream: - status: +stream: + status: live: ÎN DIRECT ended: TERMINAT planned: PLANIFICATE started: A început $timestamp - chat: + chat: disabled: CHAT DEZACTIVAT disabled_timeout: "Timpul expiră: $time" timeout(rich): $mod Timed out $user pentru $time - "@timeout": + "@timeout": description: Mesaj de chat care afișează evenimentele de timeout ended: STREAM ÎNCHEIAT - "@ended": + "@ended": description: Stream a încheiat footer-ul în partea de jos a chat-ului zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Mesaj de chat care arată zapsuri de flux - write: + write: label: Scrieți mesajul - "@label": + "@label": description: Etichetă pe caseta de introducere a mesajului de chat no_signer: Nu se pot scrie mesaje cu autentificarea npub - "@no_signer": - description: Mesajul de intrare în chat afișat atunci când utilizatorul este - conectat doar cu pubkey + "@no_signer": + description: Mesajul de intrare în chat afișat atunci când utilizatorul este conectat doar cu pubkey login: Vă rugăm să vă autentificați pentru a trimite mesaje - "@login": - description: Mesajul de intrare în chat afișat atunci când utilizatorul este - deconectat - badge: + "@login": + description: Mesajul de intrare în chat afișat atunci când utilizatorul este deconectat + badge: awarded_to: "Premiat pentru:" - "@awarded_to": + "@awarded_to": description: Antet peste lista de utilizatori care au primit o insignă - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat mesaj raid la un alt flux from: RAID DE LA $name - "@from": + "@from": description: Chat raid mesaj din alt flux countdown: Raiduri în $time - "@countdown": + "@countdown": description: Cronometru cu numărătoare inversă pentru auto-raid -goal: +goal: title: "Obiectiv: $amount" remaining: "Rămase: $amount" complete: COMPLET -button: +button: login: Autentificare logout: Ieșire edit_profile: Editare profil - "@login": + "@login": description: Textul butonului pentru butonul de conectare follow: Urmați - "@follow": + "@follow": description: Textul butonului pentru butonul de urmărire unfollow: Unfollow - "@unfollow": + "@unfollow": description: Textul butonului pentru butonul unfollow mute: Mut unmute: Dezactivați share: Share save: Salvați -embed: +embed: article_by: Articol de $name note_by: Notă de la $name live_stream_by: Transmisiune live prin $name -stream_list: +stream_list: following: În urma live: În direct planned: Planificate ended: Încheiat -"@stream_list": - description: Rubrici pe listele de fluxuri în funcție de tipul fluxului în - direct/terminat/planificat etc. -zap: +"@stream_list": + description: Rubrici pe listele de fluxuri în funcție de tipul fluxului în direct/terminat/planificat etc. +zap: title: Zap $name custom_amount: Sumă personalizată confirm: Confirmați @@ -104,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Deschide în portofel copy: Copiat în clipboard - error: + error: invalid_custom_amount: Sumă personalizată invalidă no_wallet: Nu este instalat niciun portofel Lightning no_lud16: Nu a fost găsită nicio adresă de fulgere -profile: +profile: past_streams: Fluxuri trecute - edit: + edit: display_name: Nume afișat about: Despre nip05: Adresa Nostr lud16: Adresa fulgerului - error: + error: logged_out: Nu pot edita profilul când sunt deconectat -login: +login: username: Nume utilizator amber: Conectați-vă cu Amber key: Autentificare cu cheie create: Creare cont - error: + error: invalid_key: Cheie invalidă diff --git a/lib/i18n/translated/ru.i18n.yaml b/lib/i18n/translated/ru.i18n.yaml index fff82cc..eab2a2f 100644 --- a/lib/i18n/translated/ru.i18n.yaml +++ b/lib/i18n/translated/ru.i18n.yaml @@ -1,101 +1,97 @@ upload_avatar: Загрузить аватар -"@upload_avatar": - description: Текст, побуждающий пользователя нажать кнопку с изображением - аватара, чтобы начать загрузку +"@upload_avatar": + description: Текст, побуждающий пользователя нажать кнопку с изображением аватара, чтобы начать загрузку most_zapped_streamers: Самые прыткие стримеры -"@most_zapped_streamers": +"@most_zapped_streamers": description: Направляясь по перечисленным верхним стримерам с помощью запс no_user_found: Пользователь не найден -"@no_user_found": +"@no_user_found": description: Пользователь не найден при поиске anon: Аноним -viewers: +viewers: one: 1 зритель other: $n зрителей -"@viewers": +"@viewers": description: Количество зрителей потока - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Анонимный пользователь -stream: - status: +stream: + status: live: LIVE ended: КОНЕЦ planned: ПЛАНИРУЕМЫЙ started: Начало $timestamp - chat: + chat: disabled: ЧАТ ОТКЛЮЧЕН disabled_timeout: "Таймаут истекает: $time" timeout(rich): $mod тайм-аут $user для $time - "@timeout": + "@timeout": description: Сообщение в чате, показывающее события по тайм-ауту ended: ТРАНСЛЯЦИЯ ОКОНЧЕНА - "@ended": + "@ended": description: Поток закончился в нижней части чата zap(rich): $user запнул $amount сат - "@zap": + "@zap": description: Сообщение в чате, отображающее потоковые зазоры - write: + write: label: Написать сообщение - "@label": + "@label": description: Надпись на поле ввода сообщения чата no_signer: Невозможно писать сообщения с логином npub - "@no_signer": - description: Сообщение о входе в чат, отображаемое при входе пользователя только - с pubkey + "@no_signer": + description: Сообщение о входе в чат, отображаемое при входе пользователя только с pubkey login: Пожалуйста, войдите в систему, чтобы отправлять сообщения - "@login": - description: Сообщение о входе в чат, отображаемое при выходе пользователя из - системы - badge: + "@login": + description: Сообщение о входе в чат, отображаемое при выходе пользователя из системы + badge: awarded_to: "Награждается:" - "@awarded_to": + "@awarded_to": description: Заголовок над списком пользователей, награжденных значком - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Сообщение о рейде в чате в другой поток from: RAID FROM $name - "@from": + "@from": description: Сообщение о рейде в чате из другого потока countdown: Рейды в $time - "@countdown": + "@countdown": description: Таймер обратного отсчета для автопоездки -goal: +goal: title: "Цель: $amount" remaining: "Осталось: $amount" complete: КОМПЛЕКТ -button: +button: login: Логин logout: Выйти edit_profile: Редактировать профиль - "@login": + "@login": description: Текст кнопки для входа в систему follow: Подписаться - "@follow": + "@follow": description: Текст кнопки для кнопки следования unfollow: Отписаться - "@unfollow": + "@unfollow": description: Текст кнопки для кнопки "Развернуть mute: Заглушить unmute: Включить уведомления share: Поделиться save: Сохранить -embed: +embed: article_by: Статья $name note_by: Заметка на сайте $name live_stream_by: "Прямая трансляция: $name" -stream_list: +stream_list: following: Подписки live: Прямой эфир planned: Запланировано ended: Завершено -"@stream_list": - description: Заголовки в списках потоков по типу потока - - живой/законченный/запланированный и т. д. -zap: +"@stream_list": + description: Заголовки в списках потоков по типу потока - живой/законченный/запланированный и т. д. +zap: title: Запнуть ($name custom_amount: Пользовательская сумма confirm: Подтвердить @@ -104,23 +100,23 @@ zap: button_zap: Зап button_open_wallet: Открыть в кошельке copy: Скопировано в буфер обмена - error: + error: invalid_custom_amount: Недопустимая пользовательская сумма no_wallet: Кошелек молнии не установлен no_lud16: Адрес молнии не найден -profile: +profile: past_streams: Предыдущие трансляции - edit: + edit: display_name: Отображаемое имя about: О себе nip05: Nostr адрес lud16: Lightning Адрес - error: + error: logged_out: Невозможно редактировать профиль при выходе из системы -login: +login: username: Имя пользователя amber: Войти с помощью Amber key: Вход в систему с помощью ключа create: Создать аккаунт - error: + error: invalid_key: Неверный ключ diff --git a/lib/i18n/translated/sr.i18n.yaml b/lib/i18n/translated/sr.i18n.yaml index 5258519..a6eaef7 100644 --- a/lib/i18n/translated/sr.i18n.yaml +++ b/lib/i18n/translated/sr.i18n.yaml @@ -1,97 +1,97 @@ upload_avatar: 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": +"@most_zapped_streamers": description: Heading over listed top streamers by zaps no_user_found: No user found -"@no_user_found": +"@no_user_found": description: No user found when searching anon: Anon -viewers: +viewers: one: 1 viewer other: $n viewers -"@viewers": +"@viewers": description: Number of viewers of the stream - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: An anonymous user -stream: - status: +stream: + status: live: LIVE ended: ENDED planned: PLANNED started: Started $timestamp - chat: + chat: disabled: CHAT DISABLED disabled_timeout: "Timeout expires: $time" timeout(rich): $mod timed out $user for $time - "@timeout": + "@timeout": description: Chat message showing timeout events ended: STREAM ENDED - "@ended": + "@ended": description: Stream ended footer at bottom of chat zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Chat message showing stream zaps - write: + write: label: Write message - "@label": + "@label": description: Label on the chat message input box no_signer: Can't write messages with npub login - "@no_signer": + "@no_signer": description: Chat input message shown when the user is logged in only with pubkey login: Please login to send messages - "@login": + "@login": description: Chat input message shown when the user is logged out - badge: + badge: awarded_to: "Awarded to:" - "@awarded_to": + "@awarded_to": description: Heading over list of users who are awarded a badge - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat raid message to another stream from: RAID FROM $name - "@from": + "@from": description: Chat raid message from another stream countdown: Raiding in $time - "@countdown": + "@countdown": description: Countdown timer for auto-raiding -goal: +goal: title: "Goal: $amount" remaining: "Remaining: $amount" complete: COMPLETE -button: +button: login: Login logout: Logout edit_profile: Edit Profile - "@login": + "@login": description: Button text for the login button follow: Follow - "@follow": + "@follow": description: Button text for the follow button unfollow: Unfollow - "@unfollow": + "@unfollow": description: Button text for the unfollow button mute: Mute unmute: Unmute share: Share save: Save -embed: +embed: article_by: Article by $name note_by: Note by $name live_stream_by: Live stream by $name -stream_list: +stream_list: following: Following live: Live planned: Planned ended: Ended -"@stream_list": +"@stream_list": description: Headings on stream lists by stream type live/ended/planned etc. -zap: +zap: title: Zap $name custom_amount: Custom Amount confirm: Confirm @@ -100,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Open in Wallet copy: Copied to clipboard - error: + error: invalid_custom_amount: Invalid custom amount no_wallet: No lightning wallet installed no_lud16: No lightning address found -profile: +profile: past_streams: Past Streams - edit: + edit: display_name: Display Name about: About nip05: Nostr Address lud16: Lightning Address - error: + error: logged_out: Cant edit profile when logged out -login: +login: username: Username amber: Login with Amber key: Login with Key create: Create Account - error: + error: invalid_key: Invalid key diff --git a/lib/i18n/translated/sv.i18n.yaml b/lib/i18n/translated/sv.i18n.yaml index b866340..e0432b9 100644 --- a/lib/i18n/translated/sv.i18n.yaml +++ b/lib/i18n/translated/sv.i18n.yaml @@ -1,99 +1,97 @@ 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 +"@upload_avatar": + description: Text som uppmanar användaren att trycka på avatarplatshållaren för att påbörja uppladdningen most_zapped_streamers: De flesta zappade streamers -"@most_zapped_streamers": +"@most_zapped_streamers": description: Rubrik över listade toppstreamers av zaps no_user_found: Ingen användare hittades -"@no_user_found": +"@no_user_found": description: Ingen användare hittades vid sökning anon: Anon -viewers: +viewers: one: 1 tittare other: $n tittare -"@viewers": +"@viewers": description: Antal tittare på streamingen - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: En anonym användare -stream: - status: +stream: + status: live: LIVE ended: AVSLUTAD planned: PLANERADE started: Startade $timestamp - chat: + chat: disabled: CHAT AVSTÄNGD disabled_timeout: "Tidsgränsen går ut: $time" timeout(rich): $mod tidsbegränsad $user för $time - "@timeout": + "@timeout": description: Chattmeddelande som visar timeout-händelser ended: STREAM AVSLUTAD - "@ended": + "@ended": description: Stream avslutade sidfoten längst ner på chatten zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Chattmeddelande som visar strömavbrott - write: + write: label: Skriv meddelande - "@label": + "@label": description: Etikett på inmatningsrutan för chattmeddelanden no_signer: Det går inte att skriva meddelanden med npub-inloggning - "@no_signer": - description: Chattinmatningsmeddelande som visas när användaren endast är - inloggad med pubkey + "@no_signer": + description: Chattinmatningsmeddelande som visas när användaren endast är inloggad med pubkey login: Logga in för att skicka meddelanden - "@login": + "@login": description: Chattinmatningsmeddelande som visas när användaren är utloggad - badge: + badge: awarded_to: "Tilldelas till:" - "@awarded_to": + "@awarded_to": description: Rubrik över lista över användare som tilldelats en badge - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chatta raidmeddelande till en annan ström from: RAID FRÅN $name - "@from": + "@from": description: Chat raid-meddelande från en annan ström countdown: Raiding på $time - "@countdown": + "@countdown": description: Nedräkningstimer för auto-raiding -goal: +goal: title: "Mål: $amount" remaining: "Kvarvarande: $amount" complete: KOMPLETT -button: +button: login: Logga in logout: Logga ut edit_profile: Redigera profil - "@login": + "@login": description: Knapptext för inloggningsknappen follow: Följ - "@follow": + "@follow": description: Knapptext för följ-knappen unfollow: Sluta följa - "@unfollow": + "@unfollow": description: Knapptext för avföljningsknappen mute: Tysta unmute: Avtysta share: Dela save: Spara -embed: +embed: article_by: Artikel av $name note_by: Anteckning av $name live_stream_by: Direktsändning via $name -stream_list: +stream_list: following: Följer live: Live planned: Planerade ended: Avslutade -"@stream_list": +"@stream_list": description: Rubriker på strömlistor efter strömtyp live/avslutad/planerad etc. -zap: +zap: title: Zap $name custom_amount: Anpassat belopp confirm: Bekräfta @@ -102,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Öppna i plånboken copy: Kopieras till urklipp - error: + error: invalid_custom_amount: Ogiltigt anpassat belopp no_wallet: Ingen blixtplånbok installerad no_lud16: Ingen blixtadress hittades -profile: +profile: past_streams: Tidigare streamar - edit: + edit: display_name: Visa namn about: Om nip05: Nostr Adress lud16: Lightning-adress - error: + error: logged_out: Kan inte redigera profil när jag är utloggad -login: +login: username: Användarnamn amber: Logga in med Amber key: Logga in med nyckel create: Skapa konto - error: + error: invalid_key: Ogiltig nyckel diff --git a/lib/i18n/translated/tr.i18n.yaml b/lib/i18n/translated/tr.i18n.yaml index 457d2a1..654de2d 100644 --- a/lib/i18n/translated/tr.i18n.yaml +++ b/lib/i18n/translated/tr.i18n.yaml @@ -1,99 +1,97 @@ 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 +"@upload_avatar": + description: Kullanıcının yüklemeye başlamak için avatar yer tutucusuna basmasını isteyen metin most_zapped_streamers: En Çok Zaplanan Flamalar -"@most_zapped_streamers": +"@most_zapped_streamers": description: Zaps tarafından listelenen üst flamalar üzerinde ilerliyor no_user_found: Kullanıcı bulunamadı -"@no_user_found": +"@no_user_found": description: Arama yaparken kullanıcı bulunamadı anon: Anon -viewers: +viewers: one: 1 izleyici other: $n izleyiciler -"@viewers": +"@viewers": description: Akışı izleyenlerin sayısı - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Anonim bir kullanıcı -stream: - status: +stream: + status: live: CANLI ended: SONLANDI planned: PLANLANMIŞ started: Başlatıldı $timestamp - chat: + chat: disabled: SOHBET DEVRE DIŞI disabled_timeout: "Zaman aşımı sona eriyor: $time" timeout(rich): $mod zaman aşımına uğradı $user için $time - "@timeout": + "@timeout": description: Zaman aşımı olaylarını gösteren sohbet mesajı ended: YAYIN SONLANDI - "@ended": + "@ended": description: Sohbetin alt kısmında akış sona erdi altbilgisi zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Akış zaplarını gösteren sohbet mesajı - write: + write: label: Mesaj yaz - "@label": + "@label": description: Sohbet mesajı giriş kutusundaki etiket no_signer: Npub girişi ile mesaj yazılamıyor - "@no_signer": - description: Kullanıcı yalnızca pubkey ile oturum açtığında gösterilen sohbet - giriş mesajı + "@no_signer": + description: Kullanıcı yalnızca pubkey ile oturum açtığında gösterilen sohbet giriş mesajı login: Mesaj göndermek için lütfen giriş yapın - "@login": + "@login": description: Kullanıcı oturumu kapatıldığında gösterilen sohbet giriş mesajı - badge: + badge: awarded_to: "Ödüllendirildi:" - "@awarded_to": + "@awarded_to": description: Rozet verilen kullanıcıların listesi üzerinde başlık - raid: + raid: to: RAIDING ${name}S - "@to": + "@to": description: Başka bir akışa sohbet baskını mesajı from: $name ADRESINDEN RAID - "@from": + "@from": description: Başka bir akıştan sohbet baskını mesajı countdown: $time adresinde baskın - "@countdown": + "@countdown": description: Otomatik sürüş için geri sayım sayacı -goal: +goal: title: "Hedef: $amount" remaining: "Kalan: $amount" complete: TAMAMLANDI -button: +button: login: Giriş logout: Oturum Kapatma edit_profile: Profil Düzenle - "@login": + "@login": description: Oturum açma düğmesi için düğme metni follow: Takip et - "@follow": + "@follow": description: Takip et düğmesi için düğme metni unfollow: Takibi bırak - "@unfollow": + "@unfollow": description: Takibi bırak düğmesi için düğme metni mute: Sessiz unmute: Sesi aç share: Paylaş save: Kaydet -embed: +embed: article_by: Makale $name note_by: "Not: $name" live_stream_by: "Canlı yayın: $name" -stream_list: +stream_list: following: Aşağıdaki live: Canlı planned: Planlanmış ended: Bitti -"@stream_list": +"@stream_list": description: Akış türüne göre akış listelerindeki başlıklar canlı/bitmiş/planlanan vb. -zap: +zap: title: Zap $name custom_amount: Özel Tutar confirm: Onaylayın @@ -102,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Cüzdanda Aç copy: Panoya kopyalandı - error: + error: invalid_custom_amount: Geçersiz özel tutar no_wallet: Lightning cüzdan yüklü değil no_lud16: Yıldırım adresi bulunamadı -profile: +profile: past_streams: Geçmiş Akışlar - edit: + edit: display_name: Ekran Adı about: Hakkında nip05: Nostr Adres lud16: Yıldırım Adres - error: + error: logged_out: Çıkış yapıldığında profil düzenlenemiyor -login: +login: username: Kullanıcı Adı amber: Amber ile Giriş Yapın key: Anahtar ile Giriş Yapın create: Hesap Oluştur - error: + error: invalid_key: Geçersiz anahtar diff --git a/lib/i18n/translated/uk.i18n.yaml b/lib/i18n/translated/uk.i18n.yaml index 140f3c2..e605109 100644 --- a/lib/i18n/translated/uk.i18n.yaml +++ b/lib/i18n/translated/uk.i18n.yaml @@ -1,101 +1,97 @@ upload_avatar: Завантажити аватар -"@upload_avatar": - description: Текст, що пропонує користувачеві натиснути на заповнювач аватара, - щоб почати завантаження +"@upload_avatar": + description: Текст, що пропонує користувачеві натиснути на заповнювач аватара, щоб почати завантаження most_zapped_streamers: Більшість стримерів, які були під напругою -"@most_zapped_streamers": +"@most_zapped_streamers": description: Перехід до переліку найкращих стрімерів за запитами no_user_found: Користувача не знайдено -"@no_user_found": +"@no_user_found": description: Користувача не знайдено при пошуку anon: Анонім. -viewers: +viewers: one: 1 глядач other: $n глядачі -"@viewers": +"@viewers": description: Кількість глядачів стріму - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: Анонімний користувач -stream: - status: +stream: + status: live: НАЖИВО ended: ЗАКІНЧЕНО planned: ЗАПЛАНОВАНО started: Запустив $timestamp - chat: + chat: disabled: ЧАТ ВІДКЛЮЧЕНО disabled_timeout: "Тайм-аут закінчився: $time" timeout(rich): $mod таймінг $user для $time - "@timeout": + "@timeout": description: Повідомлення в чаті про події тайм-ауту ended: СТРІМ ЗАКІНЧИВСЯ - "@ended": + "@ended": description: Нижній колонтитул кінця потоку внизу чату zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Повідомлення в чаті, що показує затримки потоку - write: + write: label: Написати повідомлення - "@label": + "@label": description: Мітка у вікні введення повідомлення чату no_signer: Неможливо писати повідомлення з логіном npub - "@no_signer": - description: Повідомлення в чаті, що відображається, коли користувач увійшов до - системи лише з ключем pubkey + "@no_signer": + description: Повідомлення в чаті, що відображається, коли користувач увійшов до системи лише з ключем pubkey login: Будь ласка, авторизуйтесь, щоб надсилати повідомлення - "@login": - description: Повідомлення для введення в чаті, що відображається, коли - користувач вийшов з системи - badge: + "@login": + description: Повідомлення для введення в чаті, що відображається, коли користувач вийшов з системи + badge: awarded_to: "Нагороджується:" - "@awarded_to": + "@awarded_to": description: Над списком користувачів, яким присвоєно бейдж - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Повідомлення про рейд чату в інший потік from: RAID FROM $name - "@from": + "@from": description: Повідомлення про наліт на чат з іншого потоку countdown: Рейд у $time - "@countdown": + "@countdown": description: Таймер зворотного відліку для авторейду -goal: +goal: title: "Мета: $amount" remaining: "Залишилося: $amount" complete: ЗАВЕРШИТИ -button: +button: login: Логін logout: Вийти з системи edit_profile: Редагувати профіль - "@login": + "@login": description: Текст для кнопки входу в систему follow: Підпишіться - "@follow": + "@follow": description: Текст для кнопки переходу unfollow: Скасувати відповідь - "@unfollow": + "@unfollow": description: Текст для кнопки відписки mute: Вимкнути звук. unmute: Увімкнути звук. share: Поділіться save: Зберегти -embed: +embed: article_by: Стаття за посиланням $name note_by: Примітка $name live_stream_by: Пряма трансляція на $name -stream_list: +stream_list: following: Після того, як live: Наживо planned: Заплановано ended: Закінчилося -"@stream_list": - description: "Заголовки у списках трансляцій за типом трансляції: - наживо/закінчилася/запланована тощо." -zap: +"@stream_list": + description: "Заголовки у списках трансляцій за типом трансляції: наживо/закінчилася/запланована тощо." +zap: title: Zap $name custom_amount: Нестандартна сума confirm: Підтвердити @@ -104,23 +100,23 @@ zap: button_zap: Zap! button_open_wallet: Відкрити в Гаманці copy: Скопійовано в буфер обміну - error: + error: invalid_custom_amount: Неправильна сума замовлення no_wallet: Не встановлено гаманець-блискавку no_lud16: Адреса блискавки не знайдена -profile: +profile: past_streams: Минулі потоки - edit: + edit: display_name: Ім'я користувача about: Про nip05: Nostr Адреса lud16: Блискавична адреса - error: + error: logged_out: Неможливо редагувати профіль, коли ви вийшли з системи -login: +login: username: Ім'я користувача amber: Увійдіть за допомогою Amber key: Увійдіть за допомогою ключа create: Створити обліковий запис - error: + error: invalid_key: Неправильний ключ diff --git a/lib/i18n/translated/vi.i18n.yaml b/lib/i18n/translated/vi.i18n.yaml index 5258519..a6eaef7 100644 --- a/lib/i18n/translated/vi.i18n.yaml +++ b/lib/i18n/translated/vi.i18n.yaml @@ -1,97 +1,97 @@ upload_avatar: 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": +"@most_zapped_streamers": description: Heading over listed top streamers by zaps no_user_found: No user found -"@no_user_found": +"@no_user_found": description: No user found when searching anon: Anon -viewers: +viewers: one: 1 viewer other: $n viewers -"@viewers": +"@viewers": description: Number of viewers of the stream - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: An anonymous user -stream: - status: +stream: + status: live: LIVE ended: ENDED planned: PLANNED started: Started $timestamp - chat: + chat: disabled: CHAT DISABLED disabled_timeout: "Timeout expires: $time" timeout(rich): $mod timed out $user for $time - "@timeout": + "@timeout": description: Chat message showing timeout events ended: STREAM ENDED - "@ended": + "@ended": description: Stream ended footer at bottom of chat zap(rich): $user zapped $amount sats - "@zap": + "@zap": description: Chat message showing stream zaps - write: + write: label: Write message - "@label": + "@label": description: Label on the chat message input box no_signer: Can't write messages with npub login - "@no_signer": + "@no_signer": description: Chat input message shown when the user is logged in only with pubkey login: Please login to send messages - "@login": + "@login": description: Chat input message shown when the user is logged out - badge: + badge: awarded_to: "Awarded to:" - "@awarded_to": + "@awarded_to": description: Heading over list of users who are awarded a badge - raid: + raid: to: RAIDING $name - "@to": + "@to": description: Chat raid message to another stream from: RAID FROM $name - "@from": + "@from": description: Chat raid message from another stream countdown: Raiding in $time - "@countdown": + "@countdown": description: Countdown timer for auto-raiding -goal: +goal: title: "Goal: $amount" remaining: "Remaining: $amount" complete: COMPLETE -button: +button: login: Login logout: Logout edit_profile: Edit Profile - "@login": + "@login": description: Button text for the login button follow: Follow - "@follow": + "@follow": description: Button text for the follow button unfollow: Unfollow - "@unfollow": + "@unfollow": description: Button text for the unfollow button mute: Mute unmute: Unmute share: Share save: Save -embed: +embed: article_by: Article by $name note_by: Note by $name live_stream_by: Live stream by $name -stream_list: +stream_list: following: Following live: Live planned: Planned ended: Ended -"@stream_list": +"@stream_list": description: Headings on stream lists by stream type live/ended/planned etc. -zap: +zap: title: Zap $name custom_amount: Custom Amount confirm: Confirm @@ -100,23 +100,23 @@ zap: button_zap: Zap button_open_wallet: Open in Wallet copy: Copied to clipboard - error: + error: invalid_custom_amount: Invalid custom amount no_wallet: No lightning wallet installed no_lud16: No lightning address found -profile: +profile: past_streams: Past Streams - edit: + edit: display_name: Display Name about: About nip05: Nostr Address lud16: Lightning Address - error: + error: logged_out: Cant edit profile when logged out -login: +login: username: Username amber: Login with Amber key: Login with Key create: Create Account - error: + error: invalid_key: Invalid key diff --git a/lib/i18n/translated/zh.i18n.yaml b/lib/i18n/translated/zh.i18n.yaml index 251368a..4a3eab8 100644 --- a/lib/i18n/translated/zh.i18n.yaml +++ b/lib/i18n/translated/zh.i18n.yaml @@ -1,97 +1,97 @@ upload_avatar: 上傳頭像 -"@upload_avatar": +"@upload_avatar": description: 提示使用者點擊頭像占位符開始上傳的文字 most_zapped_streamers: 最多被擊中的溪流 -"@most_zapped_streamers": +"@most_zapped_streamers": description: ヘッドランドから列されている頂幡からずった no_user_found: 未找到使用者 -"@no_user_found": +"@no_user_found": description: 搜尋時未找到使用者 anon: 匿名 -viewers: +viewers: one: 1 個檢視器 other: $n 觀眾 -"@viewers": +"@viewers": description: 串流的觀看者人數 - placeholders: - n: + placeholders: + n: type: int -"@anon": +"@anon": description: 匿名使用者 -stream: - status: +stream: + status: live: 直播 ended: 結束 planned: 計劃 started: 開始 $timestamp - chat: + chat: disabled: 關閉聊天 disabled_timeout: 超時過期: $time timeout(rich): $mod 超時 $user for $time - "@timeout": + "@timeout": description: 顯示逾時事件的聊天訊息 ended: 串流結束 - "@ended": + "@ended": description: 聊天底部的流結束頁尾 zap(rich): $user 打閃了 $amount 聰 - "@zap": + "@zap": description: 聊天訊息顯示串流斷點 - write: + write: label: 寫訊息 - "@label": + "@label": description: 聊天訊息輸入方塊上的標籤 no_signer: 無法使用 npub 登入撰寫訊息 - "@no_signer": + "@no_signer": description: 當使用者僅使用 pubkey 登入時,會顯示聊天輸入訊息 login: 請登入以傳送訊息 - "@login": + "@login": description: 使用者登出時顯示聊天輸入訊息 - badge: + badge: awarded_to: 頒發給 - "@awarded_to": + "@awarded_to": description: 被授予徽章的使用者清單上的標題 - raid: + raid: to: RAIDING $name - "@to": + "@to": description: 聊天突擊消息到另一個串流 from: RAID FROM $name - "@from": + "@from": description: 來自其他串流的聊天突襲訊息 countdown: 突襲 $time - "@countdown": + "@countdown": description: 自動騎乘倒數計時器 -goal: +goal: title: 目標:$amount remaining: 剩餘: $amount complete: 完成 -button: +button: login: 登錄 logout: 登出 edit_profile: 編輯個人檔案 - "@login": + "@login": description: 登入按鈕的按鈕文字 follow: 關注 - "@follow": + "@follow": description: 跟蹤按鈕的按鈕文字 unfollow: 取消關注 - "@unfollow": + "@unfollow": description: 取消關注按鈕的按鈕文字 mute: 靜音 unmute: 解除静音 share: 分享 save: 保存 -embed: +embed: article_by: 文章來源: $name note_by: $name 的筆記 live_stream_by: Live stream by $name -stream_list: +stream_list: following: 已關注 live: 直播 planned: 已計畫 ended: 已結束 -"@stream_list": +"@stream_list": description: 串流清單上的標題依串流類型為現場/結束/計劃中等。 -zap: +zap: title: 打閃$name custom_amount: 自訂金額 confirm: 確認 @@ -100,23 +100,23 @@ zap: button_zap: 打閃 button_open_wallet: 在錢包中開啟 copy: 複製到剪貼簿 - error: + error: invalid_custom_amount: 無效自訂金額 no_wallet: 未安裝閃電錢夾 no_lud16: 未找到閃電地址 -profile: +profile: past_streams: 過去的直播 - edit: + edit: display_name: 顯示名稱 about: 關於 nip05: Nostr 地址 lud16: 閃電地址 - error: + error: logged_out: 登出時無法編輯個人資料 -login: +login: username: 用戶名 amber: 使用 Amber 登入 key: 使用鑰匙登入 create: 創建帳戶 - error: + error: invalid_key: 無效按鍵 diff --git a/lib/login.dart b/lib/login.dart index ec1bd68..683dd76 100644 --- a/lib/login.dart +++ b/lib/login.dart @@ -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 toJson() { + return {"type": type.name, "data": data, "privateKey": privateKey}; + } + + static WalletConfig fromJson(Map 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 payInvoice(String pr); +} + +class NWCWrapper extends SimpleWallet { + final NwcConnection _conn; + + NWCWrapper({required NwcConnection conn}) : _conn = conn; + + @override + Future 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? 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 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 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 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 { @@ -119,4 +200,4 @@ class LoginData extends ValueNotifier { } } } -} \ No newline at end of file +} diff --git a/lib/pages/login.dart b/lib/pages/login.dart index f631b24..d43be55 100644 --- a/lib/pages/login.dart +++ b/lib/pages/login.dart @@ -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"), ), ], ); diff --git a/lib/pages/login_input.dart b/lib/pages/login_input.dart index a31d623..2d69951 100644 --- a/lib/pages/login_input.dart +++ b/lib/pages/login_input.dart @@ -29,7 +29,7 @@ class _LoginInputPage extends State { ), BasicButton.text( t.button.login, - onTap: () async { + onTap: (context) async { try { if (_controller.text.startsWith("bunker://")) { // not supported yet in ndk diff --git a/lib/pages/new_account.dart b/lib/pages/new_account.dart index 3425431..d81c270 100644 --- a/lib/pages/new_account.dart +++ b/lib/pages/new_account.dart @@ -74,7 +74,7 @@ class _NewAccountPage extends State { return BasicButton.text( t.button.login, disabled: _loading || value.text.isEmpty, - onTap: () { + onTap: (context) { setState(() { _loading = true; _nameFocus.unfocus(); diff --git a/lib/pages/profile.dart b/lib/pages/profile.dart index 0318528..dc016f4 100644 --- a/lib/pages/profile.dart +++ b/lib/pages/profile.dart @@ -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"); }, ), diff --git a/lib/pages/settings_profile.dart b/lib/pages/settings_profile.dart index 220217f..df9cb19 100644 --- a/lib/pages/settings_profile.dart +++ b/lib/pages/settings_profile.dart @@ -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( diff --git a/lib/pages/settings_wallet.dart b/lib/pages/settings_wallet.dart new file mode 100644 index 0000000..42e7ecb --- /dev/null +++ b/lib/pages/settings_wallet.dart @@ -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 createState() => _Inner(); +} + +class _Inner extends State { + 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(); + }, + ); + } +} diff --git a/lib/pages/stream.dart b/lib/pages/stream.dart index 173612f..b59e30f 100644 --- a/lib/pages/stream.dart +++ b/lib/pages/stream.dart @@ -169,7 +169,7 @@ class _StreamPage extends State with RouteAware { color: PRIMARY_1, borderRadius: DEFAULT_BR, ), - onTap: () { + onTap: (context) { showModalBottomSheet( context: context, constraints: BoxConstraints.expand(), diff --git a/lib/widgets/button.dart b/lib/widgets/button.dart index 07e3538..ade0385 100644 --- a/lib/widgets/button.dart +++ b/lib/widgets/button.dart @@ -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, diff --git a/lib/widgets/button_follow.dart b/lib/widgets/button_follow.dart index fb514b2..4b5e2c4 100644 --- a/lib/widgets/button_follow.dart +++ b/lib/widgets/button_follow.dart @@ -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) { diff --git a/lib/widgets/chat_modal.dart b/lib/widgets/chat_modal.dart index 7c855c3..91d33b6 100644 --- a/lib/widgets/chat_modal.dart +++ b/lib/widgets/chat_modal.dart @@ -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 { @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 { ), ), 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(); + }, ); }, ); diff --git a/lib/widgets/mute_button.dart b/lib/widgets/mute_button.dart index f8a3032..79de50a 100644 --- a/lib/widgets/mute_button.dart +++ b/lib/widgets/mute_button.dart @@ -44,7 +44,7 @@ class MuteButton extends StatelessWidget { color: isMuted ? LAYER_2 : WARNING, borderRadius: DEFAULT_BR, ), - onTap: () async { + onTap: (_) async { if (onTap != null) { onTap!(); } diff --git a/lib/widgets/stream_info.dart b/lib/widgets/stream_info.dart index 3f52048..ab85cc3 100644 --- a/lib/widgets/stream_info.dart +++ b/lib/widgets/stream_info.dart @@ -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, diff --git a/lib/widgets/zap.dart b/lib/widgets/zap.dart index da64b22..42d77ec 100644 --- a/lib/widgets/zap.dart +++ b/lib/widgets/zap.dart @@ -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? otherTargets; final List>? 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 { 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 { ), 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 { : 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 { ), 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 { } }, ), + 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 { return event; } - Future _loadZap() async { + Future _loadZap(BuildContext context) async { final profile = await ndk.metadata.loadMetadata(widget.pubkey); if (profile?.lud16 == null) { throw t.zap.error.no_lud16; @@ -272,9 +283,24 @@ class _ZapWidget extends State { zapRequest: zapRequest, ); - setState(() { - _pr = invoice?.invoice; - }); + 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) { diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist index 4789daa..7a67f8c 100644 --- a/macos/Runner/Info.plist +++ b/macos/Runner/Info.plist @@ -28,5 +28,36 @@ MainMenu NSPrincipalClass NSApplication + CFBundleLocalizations + + af + ar + ca + cs + da + de + el + en + es + fi + fr + he + hu + it + ja + ko + nl + no + pl + pt + ro + ru + sr + sv + tr + uk + vi + zh + diff --git a/slang.yaml b/slang.yaml index 228118e..d7f9fcf 100644 --- a/slang.yaml +++ b/slang.yaml @@ -1,4 +1,5 @@ base_locale: en input_directory: lib/i18n input_file_pattern: .i18n.yaml -output_directory: lib/i18n \ No newline at end of file +output_directory: lib/i18n +fallback_strategy: base_locale \ No newline at end of file