From b8422291a565c0b90220c05d8c504d822ba9426c Mon Sep 17 00:00:00 2001 From: Kieran Date: Tue, 20 May 2025 17:21:08 +0100 Subject: [PATCH] feat: add translations --- lib/i18n/en.i18n.json | 118 --------- lib/i18n/en.i18n.yaml | 122 +++++++++ lib/i18n/strings.g.dart | 413 +++++++++++++++++++++++++++++- lib/i18n/strings_af.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_ar.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_ca.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_cs.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_da.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_de.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_el.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_en.g.dart | 110 ++++++++ lib/i18n/strings_es.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_fi.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_fr.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_he.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_hu.g.dart | 418 +++++++++++++++++++++++++++++++ lib/i18n/strings_it.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_ja.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_ko.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_nl.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_no.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_pl.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_pt.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_ro.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_ru.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_sr.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_sv.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_tr.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_uk.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_vi.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/strings_zh.g.dart | 416 ++++++++++++++++++++++++++++++ lib/i18n/translated/af.i18n.yaml | 122 +++++++++ lib/i18n/translated/ar.i18n.yaml | 123 +++++++++ lib/i18n/translated/ca.i18n.yaml | 122 +++++++++ lib/i18n/translated/cs.i18n.yaml | 124 +++++++++ lib/i18n/translated/da.i18n.yaml | 124 +++++++++ lib/i18n/translated/de.i18n.yaml | 125 +++++++++ lib/i18n/translated/el.i18n.yaml | 127 ++++++++++ lib/i18n/translated/en.i18n.yaml | 122 +++++++++ lib/i18n/translated/es.i18n.yaml | 127 ++++++++++ lib/i18n/translated/fi.i18n.yaml | 125 +++++++++ lib/i18n/translated/fr.i18n.yaml | 124 +++++++++ lib/i18n/translated/he.i18n.yaml | 122 +++++++++ lib/i18n/translated/hu.i18n.yaml | 124 +++++++++ lib/i18n/translated/it.i18n.yaml | 125 +++++++++ lib/i18n/translated/ja.i18n.yaml | 122 +++++++++ lib/i18n/translated/ko.i18n.yaml | 122 +++++++++ lib/i18n/translated/nl.i18n.yaml | 125 +++++++++ lib/i18n/translated/no.i18n.yaml | 122 +++++++++ lib/i18n/translated/pl.i18n.yaml | 125 +++++++++ lib/i18n/translated/pt.i18n.yaml | 125 +++++++++ lib/i18n/translated/ro.i18n.yaml | 126 ++++++++++ lib/i18n/translated/ru.i18n.yaml | 126 ++++++++++ lib/i18n/translated/sr.i18n.yaml | 122 +++++++++ lib/i18n/translated/sv.i18n.yaml | 124 +++++++++ lib/i18n/translated/tr.i18n.yaml | 124 +++++++++ lib/i18n/translated/uk.i18n.yaml | 126 ++++++++++ lib/i18n/translated/vi.i18n.yaml | 122 +++++++++ lib/i18n/translated/zh.i18n.yaml | 122 +++++++++ lib/pages/category.dart | 1 - lib/pages/login.dart | 10 +- lib/pages/login_input.dart | 5 +- lib/pages/new_account.dart | 5 +- lib/pages/profile.dart | 7 +- lib/pages/settings_profile.dart | 13 +- lib/pages/stream.dart | 7 +- lib/widgets/stream_info.dart | 11 +- lib/widgets/stream_tile.dart | 16 +- pubspec.lock | 34 ++- pubspec.yaml | 16 +- slang.yaml | 4 + 71 files changed, 15419 insertions(+), 176 deletions(-) delete mode 100644 lib/i18n/en.i18n.json create mode 100644 lib/i18n/en.i18n.yaml create mode 100644 lib/i18n/strings_af.g.dart create mode 100644 lib/i18n/strings_ar.g.dart create mode 100644 lib/i18n/strings_ca.g.dart create mode 100644 lib/i18n/strings_cs.g.dart create mode 100644 lib/i18n/strings_da.g.dart create mode 100644 lib/i18n/strings_de.g.dart create mode 100644 lib/i18n/strings_el.g.dart create mode 100644 lib/i18n/strings_es.g.dart create mode 100644 lib/i18n/strings_fi.g.dart create mode 100644 lib/i18n/strings_fr.g.dart create mode 100644 lib/i18n/strings_he.g.dart create mode 100644 lib/i18n/strings_hu.g.dart create mode 100644 lib/i18n/strings_it.g.dart create mode 100644 lib/i18n/strings_ja.g.dart create mode 100644 lib/i18n/strings_ko.g.dart create mode 100644 lib/i18n/strings_nl.g.dart create mode 100644 lib/i18n/strings_no.g.dart create mode 100644 lib/i18n/strings_pl.g.dart create mode 100644 lib/i18n/strings_pt.g.dart create mode 100644 lib/i18n/strings_ro.g.dart create mode 100644 lib/i18n/strings_ru.g.dart create mode 100644 lib/i18n/strings_sr.g.dart create mode 100644 lib/i18n/strings_sv.g.dart create mode 100644 lib/i18n/strings_tr.g.dart create mode 100644 lib/i18n/strings_uk.g.dart create mode 100644 lib/i18n/strings_vi.g.dart create mode 100644 lib/i18n/strings_zh.g.dart create mode 100644 lib/i18n/translated/af.i18n.yaml create mode 100644 lib/i18n/translated/ar.i18n.yaml create mode 100644 lib/i18n/translated/ca.i18n.yaml create mode 100644 lib/i18n/translated/cs.i18n.yaml create mode 100644 lib/i18n/translated/da.i18n.yaml create mode 100644 lib/i18n/translated/de.i18n.yaml create mode 100644 lib/i18n/translated/el.i18n.yaml create mode 100644 lib/i18n/translated/en.i18n.yaml create mode 100644 lib/i18n/translated/es.i18n.yaml create mode 100644 lib/i18n/translated/fi.i18n.yaml create mode 100644 lib/i18n/translated/fr.i18n.yaml create mode 100644 lib/i18n/translated/he.i18n.yaml create mode 100644 lib/i18n/translated/hu.i18n.yaml create mode 100644 lib/i18n/translated/it.i18n.yaml create mode 100644 lib/i18n/translated/ja.i18n.yaml create mode 100644 lib/i18n/translated/ko.i18n.yaml create mode 100644 lib/i18n/translated/nl.i18n.yaml create mode 100644 lib/i18n/translated/no.i18n.yaml create mode 100644 lib/i18n/translated/pl.i18n.yaml create mode 100644 lib/i18n/translated/pt.i18n.yaml create mode 100644 lib/i18n/translated/ro.i18n.yaml create mode 100644 lib/i18n/translated/ru.i18n.yaml create mode 100644 lib/i18n/translated/sr.i18n.yaml create mode 100644 lib/i18n/translated/sv.i18n.yaml create mode 100644 lib/i18n/translated/tr.i18n.yaml create mode 100644 lib/i18n/translated/uk.i18n.yaml create mode 100644 lib/i18n/translated/vi.i18n.yaml create mode 100644 lib/i18n/translated/zh.i18n.yaml create mode 100644 slang.yaml diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json deleted file mode 100644 index fb6462c..0000000 --- a/lib/i18n/en.i18n.json +++ /dev/null @@ -1,118 +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", - "@anon": { - "description": "An anonymous user" - }, - "stream": { - "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", - "@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" - }, - "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" - }, - "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" - } - } -} \ No newline at end of file diff --git a/lib/i18n/en.i18n.yaml b/lib/i18n/en.i18n.yaml new file mode 100644 index 0000000..8fb6a6c --- /dev/null +++ b/lib/i18n/en.i18n.yaml @@ -0,0 +1,122 @@ +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/strings.g.dart b/lib/i18n/strings.g.dart index c3d04ae..f79f75b 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -3,10 +3,10 @@ /// Source: lib/i18n /// To regenerate, run: `dart run slang` /// -/// Locales: 1 -/// Strings: 43 +/// Locales: 28 +/// Strings: 1764 (63 per locale) /// -/// Built on 2025-05-20 at 14:43 UTC +/// Built on 2025-05-20 at 16:08 UTC // coverage:ignore-file // ignore_for_file: type=lint, unused_import @@ -18,6 +18,33 @@ import 'package:slang/generated.dart'; import 'package:slang_flutter/slang_flutter.dart'; export 'package:slang_flutter/slang_flutter.dart'; +import 'strings_af.g.dart' deferred as l_af; +import 'strings_ar.g.dart' deferred as l_ar; +import 'strings_ca.g.dart' deferred as l_ca; +import 'strings_cs.g.dart' deferred as l_cs; +import 'strings_da.g.dart' deferred as l_da; +import 'strings_de.g.dart' deferred as l_de; +import 'strings_el.g.dart' deferred as l_el; +import 'strings_es.g.dart' deferred as l_es; +import 'strings_fi.g.dart' deferred as l_fi; +import 'strings_fr.g.dart' deferred as l_fr; +import 'strings_he.g.dart' deferred as l_he; +import 'strings_hu.g.dart' deferred as l_hu; +import 'strings_it.g.dart' deferred as l_it; +import 'strings_ja.g.dart' deferred as l_ja; +import 'strings_ko.g.dart' deferred as l_ko; +import 'strings_nl.g.dart' deferred as l_nl; +import 'strings_no.g.dart' deferred as l_no; +import 'strings_pl.g.dart' deferred as l_pl; +import 'strings_pt.g.dart' deferred as l_pt; +import 'strings_ro.g.dart' deferred as l_ro; +import 'strings_ru.g.dart' deferred as l_ru; +import 'strings_sr.g.dart' deferred as l_sr; +import 'strings_sv.g.dart' deferred as l_sv; +import 'strings_tr.g.dart' deferred as l_tr; +import 'strings_uk.g.dart' deferred as l_uk; +import 'strings_vi.g.dart' deferred as l_vi; +import 'strings_zh.g.dart' deferred as l_zh; part 'strings_en.g.dart'; /// Supported locales. @@ -27,7 +54,34 @@ part 'strings_en.g.dart'; /// - Locale locale = AppLocale.en.flutterLocale // get flutter locale from enum /// - if (LocaleSettings.currentLocale == AppLocale.en) // locale check enum AppLocale with BaseAppLocale { - en(languageCode: 'en'); + en(languageCode: 'en'), + af(languageCode: 'af'), + ar(languageCode: 'ar'), + ca(languageCode: 'ca'), + cs(languageCode: 'cs'), + da(languageCode: 'da'), + de(languageCode: 'de'), + el(languageCode: 'el'), + es(languageCode: 'es'), + fi(languageCode: 'fi'), + fr(languageCode: 'fr'), + he(languageCode: 'he'), + hu(languageCode: 'hu'), + it(languageCode: 'it'), + ja(languageCode: 'ja'), + ko(languageCode: 'ko'), + nl(languageCode: 'nl'), + no(languageCode: 'no'), + pl(languageCode: 'pl'), + pt(languageCode: 'pt'), + ro(languageCode: 'ro'), + ru(languageCode: 'ru'), + sr(languageCode: 'sr'), + sv(languageCode: 'sv'), + tr(languageCode: 'tr'), + uk(languageCode: 'uk'), + vi(languageCode: 'vi'), + zh(languageCode: 'zh'); const AppLocale({ required this.languageCode, @@ -52,6 +106,195 @@ enum AppLocale with BaseAppLocale { cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver, ); + case AppLocale.af: + await l_af.loadLibrary(); + return l_af.TranslationsAf( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ar: + await l_ar.loadLibrary(); + return l_ar.TranslationsAr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ca: + await l_ca.loadLibrary(); + return l_ca.TranslationsCa( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.cs: + await l_cs.loadLibrary(); + return l_cs.TranslationsCs( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.da: + await l_da.loadLibrary(); + return l_da.TranslationsDa( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.de: + await l_de.loadLibrary(); + return l_de.TranslationsDe( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.el: + await l_el.loadLibrary(); + return l_el.TranslationsEl( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.es: + await l_es.loadLibrary(); + return l_es.TranslationsEs( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.fi: + await l_fi.loadLibrary(); + return l_fi.TranslationsFi( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.fr: + await l_fr.loadLibrary(); + return l_fr.TranslationsFr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.he: + await l_he.loadLibrary(); + return l_he.TranslationsHe( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.hu: + await l_hu.loadLibrary(); + return l_hu.TranslationsHu( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.it: + await l_it.loadLibrary(); + return l_it.TranslationsIt( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ja: + await l_ja.loadLibrary(); + return l_ja.TranslationsJa( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ko: + await l_ko.loadLibrary(); + return l_ko.TranslationsKo( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.nl: + await l_nl.loadLibrary(); + return l_nl.TranslationsNl( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.no: + await l_no.loadLibrary(); + return l_no.TranslationsNo( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.pl: + await l_pl.loadLibrary(); + return l_pl.TranslationsPl( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.pt: + await l_pt.loadLibrary(); + return l_pt.TranslationsPt( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ro: + await l_ro.loadLibrary(); + return l_ro.TranslationsRo( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ru: + await l_ru.loadLibrary(); + return l_ru.TranslationsRu( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.sr: + await l_sr.loadLibrary(); + return l_sr.TranslationsSr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.sv: + await l_sv.loadLibrary(); + return l_sv.TranslationsSv( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.tr: + await l_tr.loadLibrary(); + return l_tr.TranslationsTr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.uk: + await l_uk.loadLibrary(); + return l_uk.TranslationsUk( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.vi: + await l_vi.loadLibrary(); + return l_vi.TranslationsVi( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.zh: + await l_zh.loadLibrary(); + return l_zh.TranslationsZh( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); } } @@ -68,6 +311,168 @@ enum AppLocale with BaseAppLocale { cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver, ); + case AppLocale.af: + return l_af.TranslationsAf( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ar: + return l_ar.TranslationsAr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ca: + return l_ca.TranslationsCa( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.cs: + return l_cs.TranslationsCs( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.da: + return l_da.TranslationsDa( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.de: + return l_de.TranslationsDe( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.el: + return l_el.TranslationsEl( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.es: + return l_es.TranslationsEs( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.fi: + return l_fi.TranslationsFi( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.fr: + return l_fr.TranslationsFr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.he: + return l_he.TranslationsHe( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.hu: + return l_hu.TranslationsHu( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.it: + return l_it.TranslationsIt( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ja: + return l_ja.TranslationsJa( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ko: + return l_ko.TranslationsKo( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.nl: + return l_nl.TranslationsNl( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.no: + return l_no.TranslationsNo( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.pl: + return l_pl.TranslationsPl( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.pt: + return l_pt.TranslationsPt( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ro: + return l_ro.TranslationsRo( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.ru: + return l_ru.TranslationsRu( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.sr: + return l_sr.TranslationsSr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.sv: + return l_sv.TranslationsSv( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.tr: + return l_tr.TranslationsTr( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.uk: + return l_uk.TranslationsUk( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.vi: + return l_vi.TranslationsVi( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); + case AppLocale.zh: + return l_zh.TranslationsZh( + overrides: overrides, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); } } diff --git a/lib/i18n/strings_af.g.dart b/lib/i18n/strings_af.g.dart new file mode 100644 index 0000000..ff61915 --- /dev/null +++ b/lib/i18n/strings_af.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsAf implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsAf({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.af, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsAf _root = this; // ignore: unused_field + + @override + TranslationsAf $copyWith({TranslationMetadata? meta}) => TranslationsAf(meta: meta ?? this.$meta); + + // Translations + + /// Text prompting user to hit avatar placeholder to begin upload + @override String get upload_avatar => 'Upload Avatar'; + + /// Heading over listed top streamers by zaps + @override String get most_zapped_streamers => 'Most Zapped Streamers'; + + /// No user found when searching + @override String get no_user_found => 'No user found'; + + /// An anonymous user + @override String get anon => 'Anon'; + + /// Number of viewers of the stream + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('af'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + + @override late final _TranslationsStreamAf stream = _TranslationsStreamAf._(_root); + @override late final _TranslationsGoalAf goal = _TranslationsGoalAf._(_root); + @override late final _TranslationsButtonAf button = _TranslationsButtonAf._(_root); + @override late final _TranslationsEmbedAf embed = _TranslationsEmbedAf._(_root); + + /// Headings on stream lists by stream type live/ended/planned etc. + @override late final _TranslationsStreamListAf stream_list = _TranslationsStreamListAf._(_root); + + @override late final _TranslationsZapAf zap = _TranslationsZapAf._(_root); + @override late final _TranslationsProfileAf profile = _TranslationsProfileAf._(_root); + @override late final _TranslationsLoginAf login = _TranslationsLoginAf._(_root); +} + +// Path: stream +class _TranslationsStreamAf implements TranslationsStreamEn { + _TranslationsStreamAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusAf status = _TranslationsStreamStatusAf._(_root); + @override String started({ required Object timestamp}) => 'Started ${timestamp}'; + @override late final _TranslationsStreamChatAf chat = _TranslationsStreamChatAf._(_root); +} + +// Path: goal +class _TranslationsGoalAf implements TranslationsGoalEn { + _TranslationsGoalAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String title({ required Object amount}) => 'Goal: ${amount}'; + @override String remaining({ required Object amount}) => 'Remaining: ${amount}'; + @override String get complete => 'COMPLETE'; +} + +// Path: button +class _TranslationsButtonAf implements TranslationsButtonEn { + _TranslationsButtonAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + + /// Button text for the login button + @override String get login => 'Login'; + + @override String get logout => 'Logout'; + @override String get edit_profile => 'Edit Profile'; + + /// Button text for the follow button + @override String get follow => 'Follow'; + + /// Button text for the unfollow button + @override String get unfollow => 'Unfollow'; + + @override String get mute => 'Mute'; + @override String get unmute => 'Unmute'; + @override String get share => 'Share'; + @override String get save => 'Save'; +} + +// Path: embed +class _TranslationsEmbedAf implements TranslationsEmbedEn { + _TranslationsEmbedAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String article_by({ required Object name}) => 'Article by ${name}'; + @override String note_by({ required Object name}) => 'Note by ${name}'; + @override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; +} + +// Path: stream_list +class _TranslationsStreamListAf implements TranslationsStreamListEn { + _TranslationsStreamListAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String get following => 'Following'; + @override String get live => 'Live'; + @override String get planned => 'Planned'; + @override String get ended => 'Ended'; +} + +// Path: zap +class _TranslationsZapAf implements TranslationsZapEn { + _TranslationsZapAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String title({ required Object name}) => 'Zap ${name}'; + @override String get custom_amount => 'Custom Amount'; + @override String get confirm => 'Confirm'; + @override String get comment => 'Comment'; + @override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats'; + @override String get button_zap => 'Zap'; + @override String get button_open_wallet => 'Open in Wallet'; + @override String get copy => 'Copied to clipboard'; + @override late final _TranslationsZapErrorAf error = _TranslationsZapErrorAf._(_root); +} + +// Path: profile +class _TranslationsProfileAf implements TranslationsProfileEn { + _TranslationsProfileAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Past Streams'; + @override late final _TranslationsProfileEditAf edit = _TranslationsProfileEditAf._(_root); +} + +// Path: login +class _TranslationsLoginAf implements TranslationsLoginEn { + _TranslationsLoginAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String get username => 'Username'; + @override String get amber => 'Login with Amber'; + @override String get key => 'Login with Key'; + @override String get create => 'Create Account'; + @override late final _TranslationsLoginErrorAf error = _TranslationsLoginErrorAf._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusAf implements TranslationsStreamStatusEn { + _TranslationsStreamStatusAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'ENDED'; + @override String get planned => 'PLANNED'; +} + +// Path: stream.chat +class _TranslationsStreamChatAf implements TranslationsStreamChatEn { + _TranslationsStreamChatAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String get disabled => 'CHAT DISABLED'; + @override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; + + /// Chat message showing timeout events + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + + /// Stream ended footer at bottom of chat + @override String get ended => 'STREAM ENDED'; + + /// Chat message showing stream zaps + @override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + + @override late final _TranslationsStreamChatWriteAf write = _TranslationsStreamChatWriteAf._(_root); + @override late final _TranslationsStreamChatBadgeAf badge = _TranslationsStreamChatBadgeAf._(_root); + @override late final _TranslationsStreamChatRaidAf raid = _TranslationsStreamChatRaidAf._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorAf implements TranslationsZapErrorEn { + _TranslationsZapErrorAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Invalid custom amount'; + @override String get no_wallet => 'No lightning wallet installed'; + @override String get no_lud16 => 'No lightning address found'; +} + +// Path: profile.edit +class _TranslationsProfileEditAf implements TranslationsProfileEditEn { + _TranslationsProfileEditAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Display Name'; + @override String get about => 'About'; + @override String get nip05 => 'Nostr Address'; + @override String get lud16 => 'Lightning Address'; + @override late final _TranslationsProfileEditErrorAf error = _TranslationsProfileEditErrorAf._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorAf implements TranslationsLoginErrorEn { + _TranslationsLoginErrorAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Invalid key'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteAf implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + + /// Label on the chat message input box + @override String get label => 'Write message'; + + /// Chat input message shown when the user is logged in only with pubkey + @override String get no_signer => 'Can\'t write messages with npub login'; + + /// Chat input message shown when the user is logged out + @override String get login => 'Please login to send messages'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeAf implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + + /// Heading over list of users who are awarded a badge + @override String get awarded_to => 'Awarded to:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidAf implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + + /// Chat raid message to another stream + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat raid message from another stream + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// Countdown timer for auto-raiding + @override String countdown({ required Object time}) => 'Raiding in ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorAf implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorAf._(this._root); + + final TranslationsAf _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Cant edit profile when logged out'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsAf { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Upload Avatar'; + case 'most_zapped_streamers': return 'Most Zapped Streamers'; + case 'no_user_found': return 'No user found'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('af'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'ENDED'; + case 'stream.status.planned': return 'PLANNED'; + case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; + case 'stream.chat.disabled': return 'CHAT DISABLED'; + case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; + case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + case 'stream.chat.ended': return 'STREAM ENDED'; + case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + case 'stream.chat.write.label': return 'Write message'; + case 'stream.chat.write.no_signer': return 'Can\'t write messages with npub login'; + case 'stream.chat.write.login': return 'Please login to send messages'; + case 'stream.chat.badge.awarded_to': return 'Awarded to:'; + case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; + case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; + case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; + case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; + case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; + case 'goal.complete': return 'COMPLETE'; + case 'button.login': return 'Login'; + case 'button.logout': return 'Logout'; + case 'button.edit_profile': return 'Edit Profile'; + case 'button.follow': return 'Follow'; + case 'button.unfollow': return 'Unfollow'; + case 'button.mute': return 'Mute'; + case 'button.unmute': return 'Unmute'; + case 'button.share': return 'Share'; + case 'button.save': return 'Save'; + case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; + case 'embed.note_by': return ({ required Object name}) => 'Note by ${name}'; + case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream by ${name}'; + case 'stream_list.following': return 'Following'; + case 'stream_list.live': return 'Live'; + case 'stream_list.planned': return 'Planned'; + case 'stream_list.ended': return 'Ended'; + case 'zap.title': return ({ required Object name}) => 'Zap ${name}'; + case 'zap.custom_amount': return 'Custom Amount'; + case 'zap.confirm': return 'Confirm'; + case 'zap.comment': return 'Comment'; + case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats'; + case 'zap.button_zap': return 'Zap'; + case 'zap.button_open_wallet': return 'Open in Wallet'; + case 'zap.copy': return 'Copied to clipboard'; + case 'zap.error.invalid_custom_amount': return 'Invalid custom amount'; + case 'zap.error.no_wallet': return 'No lightning wallet installed'; + case 'zap.error.no_lud16': return 'No lightning address found'; + case 'profile.past_streams': return 'Past Streams'; + case 'profile.edit.display_name': return 'Display Name'; + case 'profile.edit.about': return 'About'; + case 'profile.edit.nip05': return 'Nostr Address'; + case 'profile.edit.lud16': return 'Lightning Address'; + case 'profile.edit.error.logged_out': return 'Cant edit profile when logged out'; + case 'login.username': return 'Username'; + case 'login.amber': return 'Login with Amber'; + case 'login.key': return 'Login with Key'; + case 'login.create': return 'Create Account'; + case 'login.error.invalid_key': return 'Invalid key'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_ar.g.dart b/lib/i18n/strings_ar.g.dart new file mode 100644 index 0000000..fa63fc0 --- /dev/null +++ b/lib/i18n/strings_ar.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsAr implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.ar, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsAr _root = this; // ignore: unused_field + + @override + TranslationsAr $copyWith({TranslationMetadata? meta}) => TranslationsAr(meta: meta ?? this.$meta); + + // Translations + + /// نص يطالب المستخدم بالضغط على العنصر النائب للصورة الرمزية لبدء التحميل + @override String get upload_avatar => 'تحميل الصورة الرمزية'; + + /// التوجه فوق اللافتات العلوية المدرجة من قبل zaps + @override String get most_zapped_streamers => 'معظم اللافتات التي يتم بثها'; + + /// لم يتم العثور على مستخدم عند البحث + @override String get no_user_found => 'لم يتم العثور على مستخدم'; + + /// مستخدم مجهول + @override String get anon => 'هوية مخفية'; + + /// عدد مشاهدي البث + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ar'))(n, + one: '1 مشاهد', + other: '${n} المشاهدون', + ); + + @override late final _TranslationsStreamAr stream = _TranslationsStreamAr._(_root); + @override late final _TranslationsGoalAr goal = _TranslationsGoalAr._(_root); + @override late final _TranslationsButtonAr button = _TranslationsButtonAr._(_root); + @override late final _TranslationsEmbedAr embed = _TranslationsEmbedAr._(_root); + + /// العناوين في قوائم البث حسب نوع البث المباشر/المُنتهي/المخطط له وما إلى ذلك. + @override late final _TranslationsStreamListAr stream_list = _TranslationsStreamListAr._(_root); + + @override late final _TranslationsZapAr zap = _TranslationsZapAr._(_root); + @override late final _TranslationsProfileAr profile = _TranslationsProfileAr._(_root); + @override late final _TranslationsLoginAr login = _TranslationsLoginAr._(_root); +} + +// Path: stream +class _TranslationsStreamAr implements TranslationsStreamEn { + _TranslationsStreamAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusAr status = _TranslationsStreamStatusAr._(_root); + @override String started({ required Object timestamp}) => 'بدأ ${timestamp}'; + @override late final _TranslationsStreamChatAr chat = _TranslationsStreamChatAr._(_root); +} + +// Path: goal +class _TranslationsGoalAr implements TranslationsGoalEn { + _TranslationsGoalAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @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); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + + /// نص الزر الخاص بزر تسجيل الدخول + @override String get login => 'تسجيل الدخول'; + + @override String get logout => 'تسجيل الخروج'; + @override String get edit_profile => 'تعديل الملف الشخصي'; + + /// نص الزر الخاص بزر المتابعة + @override String get follow => 'متابعة'; + + /// نص الزر لزر إلغاء المتابعة + @override String get unfollow => 'الغاء المتابعة'; + + @override String get mute => 'كتم'; + @override String get unmute => 'رفع الكتم'; + @override String get share => 'مشاركة'; + @override String get save => 'حفظ'; +} + +// Path: embed +class _TranslationsEmbedAr implements TranslationsEmbedEn { + _TranslationsEmbedAr._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListAr implements TranslationsStreamListEn { + _TranslationsStreamListAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @override String get following => 'المتابَعون'; + @override String get live => 'بث مباشر'; + @override String get planned => 'مخطط'; + @override String get ended => 'انتهى'; +} + +// Path: zap +class _TranslationsZapAr implements TranslationsZapEn { + _TranslationsZapAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'زاب'; + @override String get button_open_wallet => 'فتح في المحفظة'; + @override String get copy => 'نسخ إلى الحافظة'; + @override late final _TranslationsZapErrorAr error = _TranslationsZapErrorAr._(_root); +} + +// Path: profile +class _TranslationsProfileAr implements TranslationsProfileEn { + _TranslationsProfileAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'التدفقات السابقة'; + @override late final _TranslationsProfileEditAr edit = _TranslationsProfileEditAr._(_root); +} + +// Path: login +class _TranslationsLoginAr implements TranslationsLoginEn { + _TranslationsLoginAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @override String get username => 'اسم المستخدم'; + @override String get amber => 'تسجيل الدخول مع آمبر'; + @override String get key => 'تسجيل الدخول بالمفتاح'; + @override String get create => 'إنشاء حساب'; + @override late final _TranslationsLoginErrorAr error = _TranslationsLoginErrorAr._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusAr implements TranslationsStreamStatusEn { + _TranslationsStreamStatusAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @override String get live => 'بث مباشر'; + @override String get ended => 'انتهى'; + @override String get planned => 'مخطط'; +} + +// Path: stream.chat +class _TranslationsStreamChatAr implements TranslationsStreamChatEn { + _TranslationsStreamChatAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @override String get disabled => 'تم تعطيل الدردشة'; + @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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidAr raid = _TranslationsStreamChatRaidAr._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorAr implements TranslationsZapErrorEn { + _TranslationsZapErrorAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'مبلغ مخصص غير صالح'; + @override String get no_wallet => 'لا توجد محفظة برق مثبتة'; + @override String get no_lud16 => 'لم يتم العثور على عنوان البرق'; +} + +// Path: profile.edit +class _TranslationsProfileEditAr implements TranslationsProfileEditEn { + _TranslationsProfileEditAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @override String get display_name => 'اسم العرض'; + @override String get about => 'نبذة'; + @override String get nip05 => 'عنوان نوستر'; + @override String get lud16 => 'عنوان البرق'; + @override late final _TranslationsProfileEditErrorAr error = _TranslationsProfileEditErrorAr._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorAr implements TranslationsLoginErrorEn { + _TranslationsLoginErrorAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'مفتاح غير صالح'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteAr implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + + /// التسمية على مربع إدخال رسالة الدردشة + @override String get label => 'اكتب رسالة'; + + /// تظهر رسالة إدخال الدردشة عندما يقوم المستخدم بتسجيل الدخول باستخدام مفتاح الحانة فقط + @override String get no_signer => 'لا يمكن كتابة الرسائل باستخدام تسجيل الدخول إلى npub'; + + /// تظهر رسالة إدخال الدردشة عند تسجيل خروج المستخدم من المحادثة + @override String get login => 'الرجاء تسجيل الدخول لإرسال الرسائل'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeAr implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + + /// العنوان فوق قائمة المستخدمين الذين حصلوا على شارة + @override String get awarded_to => 'مُنحت الجائزة لـ'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidAr implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + + /// رسالة غارة الدردشة إلى دفق آخر + @override String to({ required Object name}) => 'التصفح ${name}'; + + /// رسالة غارة الدردشة من دفق آخر + @override String from({ required Object name}) => 'RAID من ${name}'; + + /// مؤقت العد التنازلي للقيادة التلقائية + @override String countdown({ required Object time}) => 'الإغارة في ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorAr implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorAr._(this._root); + + final TranslationsAr _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'لا يمكن تحرير ملف التعريف عند تسجيل الخروج'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsAr { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'تحميل الصورة الرمزية'; + case 'most_zapped_streamers': return 'معظم اللافتات التي يتم بثها'; + case 'no_user_found': return 'لم يتم العثور على مستخدم'; + case 'anon': return 'هوية مخفية'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ar'))(n, + one: '1 مشاهد', + other: '${n} المشاهدون', + ); + case 'stream.status.live': return 'بث مباشر'; + case 'stream.status.ended': return 'انتهى'; + case 'stream.status.planned': return 'مخطط'; + case 'stream.started': return ({ required Object timestamp}) => 'بدأ ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'مكتمل'; + case 'button.login': return 'تسجيل الدخول'; + case 'button.logout': return 'تسجيل الخروج'; + case 'button.edit_profile': return 'تعديل الملف الشخصي'; + case 'button.follow': return 'متابعة'; + case 'button.unfollow': return 'الغاء المتابعة'; + case 'button.mute': return 'كتم'; + 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 '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.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': return 'زاب'; + case 'zap.button_open_wallet': return 'فتح في المحفظة'; + case 'zap.copy': return 'نسخ إلى الحافظة'; + case 'zap.error.invalid_custom_amount': return 'مبلغ مخصص غير صالح'; + case 'zap.error.no_wallet': return 'لا توجد محفظة برق مثبتة'; + case 'zap.error.no_lud16': return 'لم يتم العثور على عنوان البرق'; + case 'profile.past_streams': return 'التدفقات السابقة'; + case 'profile.edit.display_name': return 'اسم العرض'; + case 'profile.edit.about': return 'نبذة'; + case 'profile.edit.nip05': return 'عنوان نوستر'; + case 'profile.edit.lud16': return 'عنوان البرق'; + case 'profile.edit.error.logged_out': return 'لا يمكن تحرير ملف التعريف عند تسجيل الخروج'; + case 'login.username': return 'اسم المستخدم'; + case 'login.amber': return 'تسجيل الدخول مع آمبر'; + case 'login.key': return 'تسجيل الدخول بالمفتاح'; + case 'login.create': return 'إنشاء حساب'; + case 'login.error.invalid_key': return 'مفتاح غير صالح'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_ca.g.dart b/lib/i18n/strings_ca.g.dart new file mode 100644 index 0000000..05b7a15 --- /dev/null +++ b/lib/i18n/strings_ca.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsCa implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsCa({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.ca, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsCa _root = this; // ignore: unused_field + + @override + TranslationsCa $copyWith({TranslationMetadata? meta}) => TranslationsCa(meta: meta ?? this.$meta); + + // Translations + + /// Text prompting user to hit avatar placeholder to begin upload + @override String get upload_avatar => 'Upload Avatar'; + + /// Heading over listed top streamers by zaps + @override String get most_zapped_streamers => 'Most Zapped Streamers'; + + /// No user found when searching + @override String get no_user_found => 'No user found'; + + /// An anonymous user + @override String get anon => 'Anon'; + + /// Number of viewers of the stream + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ca'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + + @override late final _TranslationsStreamCa stream = _TranslationsStreamCa._(_root); + @override late final _TranslationsGoalCa goal = _TranslationsGoalCa._(_root); + @override late final _TranslationsButtonCa button = _TranslationsButtonCa._(_root); + @override late final _TranslationsEmbedCa embed = _TranslationsEmbedCa._(_root); + + /// Headings on stream lists by stream type live/ended/planned etc. + @override late final _TranslationsStreamListCa stream_list = _TranslationsStreamListCa._(_root); + + @override late final _TranslationsZapCa zap = _TranslationsZapCa._(_root); + @override late final _TranslationsProfileCa profile = _TranslationsProfileCa._(_root); + @override late final _TranslationsLoginCa login = _TranslationsLoginCa._(_root); +} + +// Path: stream +class _TranslationsStreamCa implements TranslationsStreamEn { + _TranslationsStreamCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusCa status = _TranslationsStreamStatusCa._(_root); + @override String started({ required Object timestamp}) => 'Started ${timestamp}'; + @override late final _TranslationsStreamChatCa chat = _TranslationsStreamChatCa._(_root); +} + +// Path: goal +class _TranslationsGoalCa implements TranslationsGoalEn { + _TranslationsGoalCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String title({ required Object amount}) => 'Goal: ${amount}'; + @override String remaining({ required Object amount}) => 'Remaining: ${amount}'; + @override String get complete => 'COMPLETE'; +} + +// Path: button +class _TranslationsButtonCa implements TranslationsButtonEn { + _TranslationsButtonCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + + /// Button text for the login button + @override String get login => 'Login'; + + @override String get logout => 'Logout'; + @override String get edit_profile => 'Edit Profile'; + + /// Button text for the follow button + @override String get follow => 'Follow'; + + /// Button text for the unfollow button + @override String get unfollow => 'Unfollow'; + + @override String get mute => 'Mute'; + @override String get unmute => 'Unmute'; + @override String get share => 'Share'; + @override String get save => 'Save'; +} + +// Path: embed +class _TranslationsEmbedCa implements TranslationsEmbedEn { + _TranslationsEmbedCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String article_by({ required Object name}) => 'Article by ${name}'; + @override String note_by({ required Object name}) => 'Note by ${name}'; + @override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; +} + +// Path: stream_list +class _TranslationsStreamListCa implements TranslationsStreamListEn { + _TranslationsStreamListCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String get following => 'Following'; + @override String get live => 'Live'; + @override String get planned => 'Planned'; + @override String get ended => 'Ended'; +} + +// Path: zap +class _TranslationsZapCa implements TranslationsZapEn { + _TranslationsZapCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String title({ required Object name}) => 'Zap ${name}'; + @override String get custom_amount => 'Custom Amount'; + @override String get confirm => 'Confirm'; + @override String get comment => 'Comment'; + @override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats'; + @override String get button_zap => 'Zap'; + @override String get button_open_wallet => 'Open in Wallet'; + @override String get copy => 'Copied to clipboard'; + @override late final _TranslationsZapErrorCa error = _TranslationsZapErrorCa._(_root); +} + +// Path: profile +class _TranslationsProfileCa implements TranslationsProfileEn { + _TranslationsProfileCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Past Streams'; + @override late final _TranslationsProfileEditCa edit = _TranslationsProfileEditCa._(_root); +} + +// Path: login +class _TranslationsLoginCa implements TranslationsLoginEn { + _TranslationsLoginCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String get username => 'Username'; + @override String get amber => 'Login with Amber'; + @override String get key => 'Login with Key'; + @override String get create => 'Create Account'; + @override late final _TranslationsLoginErrorCa error = _TranslationsLoginErrorCa._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusCa implements TranslationsStreamStatusEn { + _TranslationsStreamStatusCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'ENDED'; + @override String get planned => 'PLANNED'; +} + +// Path: stream.chat +class _TranslationsStreamChatCa implements TranslationsStreamChatEn { + _TranslationsStreamChatCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String get disabled => 'CHAT DISABLED'; + @override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; + + /// Chat message showing timeout events + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + + /// Stream ended footer at bottom of chat + @override String get ended => 'STREAM ENDED'; + + /// Chat message showing stream zaps + @override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + + @override late final _TranslationsStreamChatWriteCa write = _TranslationsStreamChatWriteCa._(_root); + @override late final _TranslationsStreamChatBadgeCa badge = _TranslationsStreamChatBadgeCa._(_root); + @override late final _TranslationsStreamChatRaidCa raid = _TranslationsStreamChatRaidCa._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorCa implements TranslationsZapErrorEn { + _TranslationsZapErrorCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Invalid custom amount'; + @override String get no_wallet => 'No lightning wallet installed'; + @override String get no_lud16 => 'No lightning address found'; +} + +// Path: profile.edit +class _TranslationsProfileEditCa implements TranslationsProfileEditEn { + _TranslationsProfileEditCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Display Name'; + @override String get about => 'About'; + @override String get nip05 => 'Nostr Address'; + @override String get lud16 => 'Lightning Address'; + @override late final _TranslationsProfileEditErrorCa error = _TranslationsProfileEditErrorCa._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorCa implements TranslationsLoginErrorEn { + _TranslationsLoginErrorCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Invalid key'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteCa implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + + /// Label on the chat message input box + @override String get label => 'Write message'; + + /// Chat input message shown when the user is logged in only with pubkey + @override String get no_signer => 'Can\'t write messages with npub login'; + + /// Chat input message shown when the user is logged out + @override String get login => 'Please login to send messages'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeCa implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + + /// Heading over list of users who are awarded a badge + @override String get awarded_to => 'Awarded to:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidCa implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + + /// Chat raid message to another stream + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat raid message from another stream + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// Countdown timer for auto-raiding + @override String countdown({ required Object time}) => 'Raiding in ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorCa implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorCa._(this._root); + + final TranslationsCa _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Cant edit profile when logged out'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsCa { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Upload Avatar'; + case 'most_zapped_streamers': return 'Most Zapped Streamers'; + case 'no_user_found': return 'No user found'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ca'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'ENDED'; + case 'stream.status.planned': return 'PLANNED'; + case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; + case 'stream.chat.disabled': return 'CHAT DISABLED'; + case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; + case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + case 'stream.chat.ended': return 'STREAM ENDED'; + case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + case 'stream.chat.write.label': return 'Write message'; + case 'stream.chat.write.no_signer': return 'Can\'t write messages with npub login'; + case 'stream.chat.write.login': return 'Please login to send messages'; + case 'stream.chat.badge.awarded_to': return 'Awarded to:'; + case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; + case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; + case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; + case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; + case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; + case 'goal.complete': return 'COMPLETE'; + case 'button.login': return 'Login'; + case 'button.logout': return 'Logout'; + case 'button.edit_profile': return 'Edit Profile'; + case 'button.follow': return 'Follow'; + case 'button.unfollow': return 'Unfollow'; + case 'button.mute': return 'Mute'; + case 'button.unmute': return 'Unmute'; + case 'button.share': return 'Share'; + case 'button.save': return 'Save'; + case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; + case 'embed.note_by': return ({ required Object name}) => 'Note by ${name}'; + case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream by ${name}'; + case 'stream_list.following': return 'Following'; + case 'stream_list.live': return 'Live'; + case 'stream_list.planned': return 'Planned'; + case 'stream_list.ended': return 'Ended'; + case 'zap.title': return ({ required Object name}) => 'Zap ${name}'; + case 'zap.custom_amount': return 'Custom Amount'; + case 'zap.confirm': return 'Confirm'; + case 'zap.comment': return 'Comment'; + case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats'; + case 'zap.button_zap': return 'Zap'; + case 'zap.button_open_wallet': return 'Open in Wallet'; + case 'zap.copy': return 'Copied to clipboard'; + case 'zap.error.invalid_custom_amount': return 'Invalid custom amount'; + case 'zap.error.no_wallet': return 'No lightning wallet installed'; + case 'zap.error.no_lud16': return 'No lightning address found'; + case 'profile.past_streams': return 'Past Streams'; + case 'profile.edit.display_name': return 'Display Name'; + case 'profile.edit.about': return 'About'; + case 'profile.edit.nip05': return 'Nostr Address'; + case 'profile.edit.lud16': return 'Lightning Address'; + case 'profile.edit.error.logged_out': return 'Cant edit profile when logged out'; + case 'login.username': return 'Username'; + case 'login.amber': return 'Login with Amber'; + case 'login.key': return 'Login with Key'; + case 'login.create': return 'Create Account'; + case 'login.error.invalid_key': return 'Invalid key'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_cs.g.dart b/lib/i18n/strings_cs.g.dart new file mode 100644 index 0000000..ac3e118 --- /dev/null +++ b/lib/i18n/strings_cs.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsCs implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.cs, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsCs _root = this; // ignore: unused_field + + @override + TranslationsCs $copyWith({TranslationMetadata? meta}) => TranslationsCs(meta: meta ?? this.$meta); + + // Translations + + /// Text vyzývající uživatele, aby stiskl zástupný symbol avatara pro zahájení nahrávání + @override String get upload_avatar => 'Nahrát avatar'; + + /// Směřování přes uvedené horní streamery podle zaps + @override String get most_zapped_streamers => 'Nejvíce zapnutých streamerů'; + + /// Při vyhledávání nebyl nalezen žádný uživatel + @override String get no_user_found => 'Nebyl nalezen žádný uživatel'; + + /// Anonymní uživatel + @override String get anon => 'Anon'; + + /// Počet diváků streamu + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n, + one: '1 divák', + other: '${n} diváci', + ); + + @override late final _TranslationsStreamCs stream = _TranslationsStreamCs._(_root); + @override late final _TranslationsGoalCs goal = _TranslationsGoalCs._(_root); + @override late final _TranslationsButtonCs button = _TranslationsButtonCs._(_root); + @override late final _TranslationsEmbedCs embed = _TranslationsEmbedCs._(_root); + + /// Nadpisy v seznamech proudů podle typu proudu živě/konec/plánovaně atd. + @override late final _TranslationsStreamListCs stream_list = _TranslationsStreamListCs._(_root); + + @override late final _TranslationsZapCs zap = _TranslationsZapCs._(_root); + @override late final _TranslationsProfileCs profile = _TranslationsProfileCs._(_root); + @override late final _TranslationsLoginCs login = _TranslationsLoginCs._(_root); +} + +// Path: stream +class _TranslationsStreamCs implements TranslationsStreamEn { + _TranslationsStreamCs._(this._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 late final _TranslationsStreamChatCs chat = _TranslationsStreamChatCs._(_root); +} + +// Path: goal +class _TranslationsGoalCs implements TranslationsGoalEn { + _TranslationsGoalCs._(this._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 get complete => 'KOMPLETNÍ'; +} + +// Path: button +class _TranslationsButtonCs implements TranslationsButtonEn { + _TranslationsButtonCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + + /// Text tlačítka pro přihlašovací tlačítko + @override String get login => 'Přihlášení'; + + @override String get logout => 'Odhlášení'; + @override String get edit_profile => 'Upravit profil'; + + /// Text tlačítka pro tlačítko sledovat + @override String get follow => 'Sledujte'; + + /// Text tlačítka pro zrušení sledování + @override String get unfollow => 'Zrušit sledování'; + + @override String get mute => 'Ztlumit'; + @override String get unmute => 'Zrušit ztlumení'; + @override String get share => 'Sdílet'; + @override String get save => 'Uložit'; +} + +// Path: embed +class _TranslationsEmbedCs implements TranslationsEmbedEn { + _TranslationsEmbedCs._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListCs implements TranslationsStreamListEn { + _TranslationsStreamListCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + @override String get following => 'Po'; + @override String get live => 'Živě'; + @override String get planned => 'Plánované'; + @override String get ended => 'Ukončeno'; +} + +// Path: zap +class _TranslationsZapCs implements TranslationsZapEn { + _TranslationsZapCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + @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 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'; + @override late final _TranslationsZapErrorCs error = _TranslationsZapErrorCs._(_root); +} + +// Path: profile +class _TranslationsProfileCs implements TranslationsProfileEn { + _TranslationsProfileCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Minulé proudy'; + @override late final _TranslationsProfileEditCs edit = _TranslationsProfileEditCs._(_root); +} + +// Path: login +class _TranslationsLoginCs implements TranslationsLoginEn { + _TranslationsLoginCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + @override String get username => 'Uživatelské jméno'; + @override String get amber => 'Přihlášení pomocí Amber'; + @override String get key => 'Přihlášení pomocí klíče'; + @override String get create => 'Vytvořit účet'; + @override late final _TranslationsLoginErrorCs error = _TranslationsLoginErrorCs._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusCs implements TranslationsStreamStatusEn { + _TranslationsStreamStatusCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'KONEC'; + @override String get planned => 'PLÁNOVANÉ'; +} + +// Path: stream.chat +class _TranslationsStreamChatCs implements TranslationsStreamChatEn { + _TranslationsStreamChatCs._(this._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}'; + + /// 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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidCs raid = _TranslationsStreamChatRaidCs._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorCs implements TranslationsZapErrorEn { + _TranslationsZapErrorCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Neplatná vlastní částka'; + @override String get no_wallet => 'Není nainstalována blesková peněženka'; + @override String get no_lud16 => 'Nebyla nalezena žádná adresa blesku'; +} + +// Path: profile.edit +class _TranslationsProfileEditCs implements TranslationsProfileEditEn { + _TranslationsProfileEditCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Zobrazení názvu'; + @override String get about => 'O stránkách'; + @override String get nip05 => 'Adresa Nostr'; + @override String get lud16 => 'Adresa blesku'; + @override late final _TranslationsProfileEditErrorCs error = _TranslationsProfileEditErrorCs._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorCs implements TranslationsLoginErrorEn { + _TranslationsLoginErrorCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Neplatný klíč'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteCs implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + + /// Popisek na vstupním poli zprávy chatu + @override String get label => 'Napište zprávu'; + + /// Vstupní zpráva chatu se zobrazí, když je uživatel přihlášen pouze pomocí pubkey + @override String get no_signer => 'Nelze psát zprávy s přihlášením npub'; + + /// Vstupní zpráva chatu zobrazená při odhlášení uživatele + @override String get login => 'Pro odesílání zpráv se prosím přihlaste'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeCs implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + + /// Záhlaví nad seznamem uživatelů, kterým byl udělen odznak + @override String get awarded_to => 'Uděleno:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidCs implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidCs._(this._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}'; + + /// Zpráva o nájezdu chatu z jiného proudu + @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}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorCs implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorCs._(this._root); + + final TranslationsCs _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Nelze upravit profil, když je odhlášený'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsCs { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Nahrát avatar'; + case 'most_zapped_streamers': return 'Nejvíce zapnutých streamerů'; + case 'no_user_found': return 'Nebyl nalezen žádný uživatel'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('cs'))(n, + one: '1 divák', + other: '${n} diváci', + ); + 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.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: [ + 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: [ + 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 'goal.complete': return 'KOMPLETNÍ'; + case 'button.login': return 'Přihlášení'; + case 'button.logout': return 'Odhlášení'; + case 'button.edit_profile': return 'Upravit profil'; + case 'button.follow': return 'Sledujte'; + case 'button.unfollow': return 'Zrušit sledování'; + case 'button.mute': return 'Ztlumit'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Otevřít v peněžence'; + case 'zap.copy': return 'Zkopírováno do schránky'; + case 'zap.error.invalid_custom_amount': return 'Neplatná vlastní částka'; + case 'zap.error.no_wallet': return 'Není nainstalována blesková peněženka'; + case 'zap.error.no_lud16': return 'Nebyla nalezena žádná adresa blesku'; + case 'profile.past_streams': return 'Minulé proudy'; + case 'profile.edit.display_name': return 'Zobrazení názvu'; + case 'profile.edit.about': return 'O stránkách'; + case 'profile.edit.nip05': return 'Adresa Nostr'; + case 'profile.edit.lud16': return 'Adresa blesku'; + case 'profile.edit.error.logged_out': return 'Nelze upravit profil, když je odhlášený'; + case 'login.username': return 'Uživatelské jméno'; + case 'login.amber': return 'Přihlášení pomocí Amber'; + case 'login.key': return 'Přihlášení pomocí klíče'; + case 'login.create': return 'Vytvořit účet'; + case 'login.error.invalid_key': return 'Neplatný klíč'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart new file mode 100644 index 0000000..f1b887b --- /dev/null +++ b/lib/i18n/strings_da.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsDa implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.da, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsDa _root = this; // ignore: unused_field + + @override + TranslationsDa $copyWith({TranslationMetadata? meta}) => TranslationsDa(meta: meta ?? this.$meta); + + // Translations + + /// Tekst, der beder brugeren om at trykke på avatar-pladsholderen for at begynde at uploade + @override String get upload_avatar => 'Upload avatar'; + + /// På vej over listede topstreamere af zaps + @override String get most_zapped_streamers => 'De fleste zappede streamere'; + + /// Ingen bruger fundet ved søgning + @override String get no_user_found => 'Ingen bruger fundet'; + + /// En anonym bruger + @override String get anon => 'Anon'; + + /// Antal seere af streamingen + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, + one: '1 seer', + other: '${n} Seere', + ); + + @override late final _TranslationsStreamDa stream = _TranslationsStreamDa._(_root); + @override late final _TranslationsGoalDa goal = _TranslationsGoalDa._(_root); + @override late final _TranslationsButtonDa button = _TranslationsButtonDa._(_root); + @override late final _TranslationsEmbedDa embed = _TranslationsEmbedDa._(_root); + + /// Overskrifter på streaminglister efter streamingtype live/afsluttet/planlagt osv. + @override late final _TranslationsStreamListDa stream_list = _TranslationsStreamListDa._(_root); + + @override late final _TranslationsZapDa zap = _TranslationsZapDa._(_root); + @override late final _TranslationsProfileDa profile = _TranslationsProfileDa._(_root); + @override late final _TranslationsLoginDa login = _TranslationsLoginDa._(_root); +} + +// Path: stream +class _TranslationsStreamDa implements TranslationsStreamEn { + _TranslationsStreamDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusDa status = _TranslationsStreamStatusDa._(_root); + @override String started({ required Object timestamp}) => 'Startet ${timestamp}'; + @override late final _TranslationsStreamChatDa chat = _TranslationsStreamChatDa._(_root); +} + +// Path: goal +class _TranslationsGoalDa implements TranslationsGoalEn { + _TranslationsGoalDa._(this._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 get complete => 'KOMPLET'; +} + +// Path: button +class _TranslationsButtonDa implements TranslationsButtonEn { + _TranslationsButtonDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + + /// Knaptekst til login-knappen + @override String get login => 'Login'; + + @override String get logout => 'Log ud'; + @override String get edit_profile => 'Rediger profil'; + + /// Knaptekst til følg-knappen + @override String get follow => 'Følg med'; + + /// Knaptekst til unfollow-knappen + @override String get unfollow => 'Ikke følge'; + + @override String get mute => 'Dæmpet'; + @override String get unmute => 'Slå lyden fra'; + @override String get share => 'Del'; + @override String get save => 'Gemme'; +} + +// Path: embed +class _TranslationsEmbedDa implements TranslationsEmbedEn { + _TranslationsEmbedDa._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListDa implements TranslationsStreamListEn { + _TranslationsStreamListDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get following => 'Efterfølgende'; + @override String get live => 'Live'; + @override String get planned => 'Planlagt'; + @override String get ended => 'Afsluttet'; +} + +// Path: zap +class _TranslationsZapDa implements TranslationsZapEn { + _TranslationsZapDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Åbn i tegnebogen'; + @override String get copy => 'Kopieret til udklipsholder'; + @override late final _TranslationsZapErrorDa error = _TranslationsZapErrorDa._(_root); +} + +// Path: profile +class _TranslationsProfileDa implements TranslationsProfileEn { + _TranslationsProfileDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Tidligere strømme'; + @override late final _TranslationsProfileEditDa edit = _TranslationsProfileEditDa._(_root); +} + +// Path: login +class _TranslationsLoginDa implements TranslationsLoginEn { + _TranslationsLoginDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get username => 'Brugernavn'; + @override String get amber => 'Log ind med Amber'; + @override String get key => 'Login med nøgle'; + @override String get create => 'Opret konto'; + @override late final _TranslationsLoginErrorDa error = _TranslationsLoginErrorDa._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusDa implements TranslationsStreamStatusEn { + _TranslationsStreamStatusDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'AFSLUTTET'; + @override String get planned => 'PLANLAGT'; +} + +// Path: stream.chat +class _TranslationsStreamChatDa implements TranslationsStreamChatEn { + _TranslationsStreamChatDa._(this._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}'; + + /// Chatbesked, der viser timeout-hændelser + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => 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: [ + 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); + @override late final _TranslationsStreamChatRaidDa raid = _TranslationsStreamChatRaidDa._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorDa implements TranslationsZapErrorEn { + _TranslationsZapErrorDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Ugyldigt brugerdefineret beløb'; + @override String get no_wallet => 'Ingen lightning wallet installeret'; + @override String get no_lud16 => 'Ingen lyn-adresse fundet'; +} + +// Path: profile.edit +class _TranslationsProfileEditDa implements TranslationsProfileEditEn { + _TranslationsProfileEditDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Vis navn'; + @override String get about => 'Omkring'; + @override String get nip05 => 'Nostr-adresse'; + @override String get lud16 => 'Adresse for lynnedslag'; + @override late final _TranslationsProfileEditErrorDa error = _TranslationsProfileEditErrorDa._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorDa implements TranslationsLoginErrorEn { + _TranslationsLoginErrorDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Ugyldig nøgle'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteDa implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + + /// Label på chatbeskedens inputfelt + @override String get label => 'Skriv en besked'; + + /// Chat-inputmeddelelse vises, når brugeren kun er logget ind med pubkey + @override String get no_signer => 'Kan ikke skrive beskeder med npub-login'; + + /// Chat-inputmeddelelse vises, når brugeren er logget ud + @override String get login => 'Log ind for at sende beskeder'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeDa implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + + /// Overskrift over liste over brugere, der har fået tildelt et badge + @override String get awarded_to => 'Tildelt til:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidDa implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + + /// Chat raid-besked til en anden stream + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat raid-besked fra en anden stream + @override String from({ required Object name}) => 'RAID FRA ${name}'; + + /// Nedtællingstimer til auto-raiding + @override String countdown({ required Object time}) => 'Raiding i ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorDa implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorDa._(this._root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Kan ikke redigere profil, når jeg er logget ud'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsDa { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Upload avatar'; + case 'most_zapped_streamers': return 'De fleste zappede streamere'; + case 'no_user_found': return 'Ingen bruger fundet'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, + one: '1 seer', + other: '${n} Seere', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'AFSLUTTET'; + case 'stream.status.planned': return 'PLANLAGT'; + case 'stream.started': return ({ required Object timestamp}) => 'Startet ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'KOMPLET'; + case 'button.login': return 'Login'; + case 'button.logout': return 'Log ud'; + case 'button.edit_profile': return 'Rediger profil'; + case 'button.follow': return 'Følg med'; + case 'button.unfollow': return 'Ikke følge'; + case 'button.mute': return 'Dæmpet'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Åbn i tegnebogen'; + case 'zap.copy': return 'Kopieret til udklipsholder'; + case 'zap.error.invalid_custom_amount': return 'Ugyldigt brugerdefineret beløb'; + case 'zap.error.no_wallet': return 'Ingen lightning wallet installeret'; + case 'zap.error.no_lud16': return 'Ingen lyn-adresse fundet'; + case 'profile.past_streams': return 'Tidligere strømme'; + case 'profile.edit.display_name': return 'Vis navn'; + case 'profile.edit.about': return 'Omkring'; + case 'profile.edit.nip05': return 'Nostr-adresse'; + case 'profile.edit.lud16': return 'Adresse for lynnedslag'; + case 'profile.edit.error.logged_out': return 'Kan ikke redigere profil, når jeg er logget ud'; + case 'login.username': return 'Brugernavn'; + case 'login.amber': return 'Log ind med Amber'; + case 'login.key': return 'Login med nøgle'; + case 'login.create': return 'Opret konto'; + case 'login.error.invalid_key': return 'Ugyldig nøgle'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart new file mode 100644 index 0000000..d712e2f --- /dev/null +++ b/lib/i18n/strings_de.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsDe implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.de, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsDe _root = this; // ignore: unused_field + + @override + TranslationsDe $copyWith({TranslationMetadata? meta}) => TranslationsDe(meta: meta ?? this.$meta); + + // Translations + + /// Text, der den Benutzer auffordert, auf den Avatar-Platzhalter zu klicken, um den Upload zu starten + @override String get upload_avatar => 'Avatar hochladen'; + + /// Überschrift über gelistete Top-Streamer von zaps + @override String get most_zapped_streamers => 'Meistgezappte Streamer'; + + /// Kein Benutzer bei der Suche gefunden + @override String get no_user_found => 'Kein Benutzer gefunden'; + + /// Ein anonymer Benutzer + @override String get anon => 'Anon'; + + /// Anzahl der Betrachter des Streams + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, + one: '1 Zuschauer', + other: '${n} Zuschauer', + ); + + @override late final _TranslationsStreamDe stream = _TranslationsStreamDe._(_root); + @override late final _TranslationsGoalDe goal = _TranslationsGoalDe._(_root); + @override late final _TranslationsButtonDe button = _TranslationsButtonDe._(_root); + @override late final _TranslationsEmbedDe embed = _TranslationsEmbedDe._(_root); + + /// Überschriften auf Stream-Listen nach Stream-Typ live/beendet/geplant usw. + @override late final _TranslationsStreamListDe stream_list = _TranslationsStreamListDe._(_root); + + @override late final _TranslationsZapDe zap = _TranslationsZapDe._(_root); + @override late final _TranslationsProfileDe profile = _TranslationsProfileDe._(_root); + @override late final _TranslationsLoginDe login = _TranslationsLoginDe._(_root); +} + +// Path: stream +class _TranslationsStreamDe implements TranslationsStreamEn { + _TranslationsStreamDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusDe status = _TranslationsStreamStatusDe._(_root); + @override String started({ required Object timestamp}) => 'Gestartet ${timestamp}'; + @override late final _TranslationsStreamChatDe chat = _TranslationsStreamChatDe._(_root); +} + +// Path: goal +class _TranslationsGoalDe implements TranslationsGoalEn { + _TranslationsGoalDe._(this._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 get complete => 'COMPLETE'; +} + +// Path: button +class _TranslationsButtonDe implements TranslationsButtonEn { + _TranslationsButtonDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + + /// Schaltflächentext für die Anmeldeschaltfläche + @override String get login => 'Anmelden'; + + @override String get logout => 'Abmelden'; + @override String get edit_profile => 'Profil anpassen'; + + /// Schaltflächentext für die Schaltfläche "Folgen + @override String get follow => 'Folgen'; + + /// Schaltflächentext für die "Unfollow"-Schaltfläche + @override String get unfollow => 'Entfolgen'; + + @override String get mute => 'Stummschalten'; + @override String get unmute => 'Entstummen'; + @override String get share => 'Teilen'; + @override String get save => 'Speichern'; +} + +// Path: embed +class _TranslationsEmbedDe implements TranslationsEmbedEn { + _TranslationsEmbedDe._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListDe implements TranslationsStreamListEn { + _TranslationsStreamListDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get following => 'Folge ich'; + @override String get live => 'Live'; + @override String get planned => 'Geplant'; + @override String get ended => 'Beendet'; +} + +// Path: zap +class _TranslationsZapDe implements TranslationsZapEn { + _TranslationsZapDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'In Brieftasche öffnen'; + @override String get copy => 'In die Zwischenablage kopiert'; + @override late final _TranslationsZapErrorDe error = _TranslationsZapErrorDe._(_root); +} + +// Path: profile +class _TranslationsProfileDe implements TranslationsProfileEn { + _TranslationsProfileDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Vergangene Streams'; + @override late final _TranslationsProfileEditDe edit = _TranslationsProfileEditDe._(_root); +} + +// Path: login +class _TranslationsLoginDe implements TranslationsLoginEn { + _TranslationsLoginDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get username => 'Benutzername'; + @override String get amber => 'Anmeldung mit Amber'; + @override String get key => 'Anmeldung mit Schlüssel'; + @override String get create => 'Konto erstellen'; + @override late final _TranslationsLoginErrorDe error = _TranslationsLoginErrorDe._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusDe implements TranslationsStreamStatusEn { + _TranslationsStreamStatusDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'ENDED'; + @override String get planned => 'GEPLANT'; +} + +// Path: stream.chat +class _TranslationsStreamChatDe implements TranslationsStreamChatEn { + _TranslationsStreamChatDe._(this._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}'; + + /// Chat-Nachricht mit Zeitüberschreitungsereignissen + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => 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: [ + 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); + @override late final _TranslationsStreamChatRaidDe raid = _TranslationsStreamChatRaidDe._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorDe implements TranslationsZapErrorEn { + _TranslationsZapErrorDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Ungültiger benutzerdefinierter Betrag'; + @override String get no_wallet => 'Keine Lightning-Brieftasche installiert'; + @override String get no_lud16 => 'Keine Blitzadresse gefunden'; +} + +// Path: profile.edit +class _TranslationsProfileEditDe implements TranslationsProfileEditEn { + _TranslationsProfileEditDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Name anzeigen'; + @override String get about => 'Über'; + @override String get nip05 => 'Nostr-Adresse'; + @override String get lud16 => 'Lightning-Adresse'; + @override late final _TranslationsProfileEditErrorDe error = _TranslationsProfileEditErrorDe._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorDe implements TranslationsLoginErrorEn { + _TranslationsLoginErrorDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Ungültiger Schlüssel'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteDe implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + + /// Beschriftung des Eingabefeldes für Chatnachrichten + @override String get label => 'Nachricht schreiben'; + + /// Chat-Eingabemeldung wird angezeigt, wenn der Benutzer nur mit Pubkey eingeloggt ist + @override String get no_signer => 'Mit npub-Login können keine Nachrichten geschrieben werden'; + + /// Chat-Eingabemeldung wird angezeigt, wenn der Benutzer abgemeldet ist + @override String get login => 'Bitte anmelden, um Nachrichten zu senden'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeDe implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + + /// Überschrift über der Liste der Benutzer, die ein Abzeichen erhalten haben + @override String get awarded_to => 'Verliehen an:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidDe implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + + /// Chat-Überfallnachricht an einen anderen Stream + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat-Raid-Nachricht aus einem anderen Stream + @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}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorDe implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorDe._(this._root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Profil kann nicht bearbeitet werden, wenn es abgemeldet ist'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsDe { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Avatar hochladen'; + case 'most_zapped_streamers': return 'Meistgezappte Streamer'; + case 'no_user_found': return 'Kein Benutzer gefunden'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, + one: '1 Zuschauer', + other: '${n} Zuschauer', + ); + 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.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: [ + 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: [ + 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 'goal.complete': return 'COMPLETE'; + case 'button.login': return 'Anmelden'; + case 'button.logout': return 'Abmelden'; + case 'button.edit_profile': return 'Profil anpassen'; + case 'button.follow': return 'Folgen'; + case 'button.unfollow': return 'Entfolgen'; + case 'button.mute': return 'Stummschalten'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'In Brieftasche öffnen'; + case 'zap.copy': return 'In die Zwischenablage kopiert'; + case 'zap.error.invalid_custom_amount': return 'Ungültiger benutzerdefinierter Betrag'; + case 'zap.error.no_wallet': return 'Keine Lightning-Brieftasche installiert'; + case 'zap.error.no_lud16': return 'Keine Blitzadresse gefunden'; + case 'profile.past_streams': return 'Vergangene Streams'; + case 'profile.edit.display_name': return 'Name anzeigen'; + case 'profile.edit.about': return 'Über'; + case 'profile.edit.nip05': return 'Nostr-Adresse'; + case 'profile.edit.lud16': return 'Lightning-Adresse'; + case 'profile.edit.error.logged_out': return 'Profil kann nicht bearbeitet werden, wenn es abgemeldet ist'; + case 'login.username': return 'Benutzername'; + case 'login.amber': return 'Anmeldung mit Amber'; + case 'login.key': return 'Anmeldung mit Schlüssel'; + case 'login.create': return 'Konto erstellen'; + case 'login.error.invalid_key': return 'Ungültiger Schlüssel'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_el.g.dart b/lib/i18n/strings_el.g.dart new file mode 100644 index 0000000..b28cb72 --- /dev/null +++ b/lib/i18n/strings_el.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsEl implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.el, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsEl _root = this; // ignore: unused_field + + @override + TranslationsEl $copyWith({TranslationMetadata? meta}) => TranslationsEl(meta: meta ?? this.$meta); + + // Translations + + /// Κείμενο που προτρέπει τον χρήστη να πατήσει το εικονίδιο avatar για να ξεκινήσει το ανέβασμα + @override String get upload_avatar => 'Ανέβασμα Avatar'; + + /// Επικεφαλής πάνω από τα αναφερόμενα κορυφαία streamers από zaps + @override String get most_zapped_streamers => 'Τα περισσότερα Zapped Streamers'; + + /// Δεν βρέθηκε χρήστης κατά την αναζήτηση + @override String get no_user_found => 'Δεν βρέθηκε χρήστης'; + + /// Ένας ανώνυμος χρήστης + @override String get anon => 'Anon'; + + /// Αριθμός θεατών της ροής + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('el'))(n, + one: '1 θεατής', + other: '${n} θεατές', + ); + + @override late final _TranslationsStreamEl stream = _TranslationsStreamEl._(_root); + @override late final _TranslationsGoalEl goal = _TranslationsGoalEl._(_root); + @override late final _TranslationsButtonEl button = _TranslationsButtonEl._(_root); + @override late final _TranslationsEmbedEl embed = _TranslationsEmbedEl._(_root); + + /// Επικεφαλίδες στις λίστες ροής ανά τύπο ροής ζωντανή/τελειωμένη/προγραμματισμένη κ.λπ. + @override late final _TranslationsStreamListEl stream_list = _TranslationsStreamListEl._(_root); + + @override late final _TranslationsZapEl zap = _TranslationsZapEl._(_root); + @override late final _TranslationsProfileEl profile = _TranslationsProfileEl._(_root); + @override late final _TranslationsLoginEl login = _TranslationsLoginEl._(_root); +} + +// Path: stream +class _TranslationsStreamEl implements TranslationsStreamEn { + _TranslationsStreamEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusEl status = _TranslationsStreamStatusEl._(_root); + @override String started({ required Object timestamp}) => 'Ξεκίνησε ${timestamp}'; + @override late final _TranslationsStreamChatEl chat = _TranslationsStreamChatEl._(_root); +} + +// Path: goal +class _TranslationsGoalEl implements TranslationsGoalEn { + _TranslationsGoalEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @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); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + + /// Κείμενο κουμπιού για το κουμπί σύνδεσης + @override String get login => 'Σύνδεση'; + + @override String get logout => 'Αποσύνδεση'; + @override String get edit_profile => 'Επεξεργασία προφίλ'; + + /// Κείμενο κουμπιού για το κουμπί follow + @override String get follow => 'Ακολουθήστε το'; + + /// Κείμενο κουμπιού για το κουμπί unfollow + @override String get unfollow => 'Ακολουθήστε το'; + + @override String get mute => 'Σίγαση'; + @override String get unmute => 'Αποσυνδέστε τη φωνή σας από το'; + @override String get share => 'Μοιραστείτε το'; + @override String get save => 'Αποθήκευση'; +} + +// Path: embed +class _TranslationsEmbedEl implements TranslationsEmbedEn { + _TranslationsEmbedEl._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListEl implements TranslationsStreamListEn { + _TranslationsStreamListEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @override String get following => 'Ακολουθώντας το'; + @override String get live => 'Ζωντανό'; + @override String get planned => 'Προγραμματισμένο'; + @override String get ended => 'Τελείωσε'; +} + +// Path: zap +class _TranslationsZapEl implements TranslationsZapEn { + _TranslationsZapEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Άνοιγμα στο πορτοφόλι'; + @override String get copy => 'Αντιγραφή στο πρόχειρο'; + @override late final _TranslationsZapErrorEl error = _TranslationsZapErrorEl._(_root); +} + +// Path: profile +class _TranslationsProfileEl implements TranslationsProfileEn { + _TranslationsProfileEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Προηγούμενα ρεύματα'; + @override late final _TranslationsProfileEditEl edit = _TranslationsProfileEditEl._(_root); +} + +// Path: login +class _TranslationsLoginEl implements TranslationsLoginEn { + _TranslationsLoginEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @override String get username => 'Όνομα χρήστη'; + @override String get amber => 'Σύνδεση με Amber'; + @override String get key => 'Σύνδεση με κλειδί'; + @override String get create => 'Δημιουργία λογαριασμού'; + @override late final _TranslationsLoginErrorEl error = _TranslationsLoginErrorEl._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusEl implements TranslationsStreamStatusEn { + _TranslationsStreamStatusEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'ENDED'; + @override String get planned => 'ΣΧΕΔΙΑΣΜΟΣ'; +} + +// Path: stream.chat +class _TranslationsStreamChatEl implements TranslationsStreamChatEn { + _TranslationsStreamChatEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @override String get disabled => 'ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ'; + @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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidEl raid = _TranslationsStreamChatRaidEl._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorEl implements TranslationsZapErrorEn { + _TranslationsZapErrorEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Μη έγκυρο προσαρμοσμένο ποσό'; + @override String get no_wallet => 'Δεν έχει εγκατασταθεί πορτοφόλι αστραπής'; + @override String get no_lud16 => 'Δεν βρέθηκε διεύθυνση κεραυνού'; +} + +// Path: profile.edit +class _TranslationsProfileEditEl implements TranslationsProfileEditEn { + _TranslationsProfileEditEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Όνομα οθόνης'; + @override String get about => 'Σχετικά με το'; + @override String get nip05 => 'Διεύθυνση Nostr'; + @override String get lud16 => 'Διεύθυνση Lightning'; + @override late final _TranslationsProfileEditErrorEl error = _TranslationsProfileEditErrorEl._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorEl implements TranslationsLoginErrorEn { + _TranslationsLoginErrorEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Μη έγκυρο κλειδί'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteEl implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + + /// Ετικέτα στο πλαίσιο εισαγωγής μηνύματος συνομιλίας + @override String get label => 'Γράψτε μήνυμα'; + + /// Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης είναι συνδεδεμένος μόνο με το κλειδί pubkey + @override String get no_signer => 'Δεν μπορείτε να γράψετε μηνύματα με σύνδεση στο npub'; + + /// Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης έχει αποσυνδεθεί + @override String get login => 'Παρακαλώ συνδεθείτε για να στείλετε μηνύματα'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeEl implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + + /// Επικεφαλίδα πάνω από τη λίστα των χρηστών στους οποίους έχει απονεμηθεί ένα σήμα + @override String get awarded_to => 'Απονέμεται σε:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidEl implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + + /// Μήνυμα επιδρομής συνομιλίας σε άλλη ροή + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Μήνυμα επιδρομής συνομιλίας από άλλη ροή + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// Χρονοδιακόπτης αντίστροφης μέτρησης για αυτόματη ιππασία + @override String countdown({ required Object time}) => 'Επιδρομές στο ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorEl implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorEl._(this._root); + + final TranslationsEl _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsEl { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Ανέβασμα Avatar'; + case 'most_zapped_streamers': return 'Τα περισσότερα Zapped Streamers'; + case 'no_user_found': return 'Δεν βρέθηκε χρήστης'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('el'))(n, + one: '1 θεατής', + other: '${n} θεατές', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'ENDED'; + case 'stream.status.planned': return 'ΣΧΕΔΙΑΣΜΟΣ'; + case 'stream.started': return ({ required Object timestamp}) => 'Ξεκίνησε ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'ΠΛΗΡΗΣ'; + case 'button.login': return 'Σύνδεση'; + case 'button.logout': return 'Αποσύνδεση'; + case 'button.edit_profile': return 'Επεξεργασία προφίλ'; + case 'button.follow': return 'Ακολουθήστε το'; + case 'button.unfollow': return 'Ακολουθήστε το'; + case 'button.mute': return 'Σίγαση'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Άνοιγμα στο πορτοφόλι'; + case 'zap.copy': return 'Αντιγραφή στο πρόχειρο'; + case 'zap.error.invalid_custom_amount': return 'Μη έγκυρο προσαρμοσμένο ποσό'; + case 'zap.error.no_wallet': return 'Δεν έχει εγκατασταθεί πορτοφόλι αστραπής'; + case 'zap.error.no_lud16': return 'Δεν βρέθηκε διεύθυνση κεραυνού'; + case 'profile.past_streams': return 'Προηγούμενα ρεύματα'; + case 'profile.edit.display_name': return 'Όνομα οθόνης'; + case 'profile.edit.about': return 'Σχετικά με το'; + case 'profile.edit.nip05': return 'Διεύθυνση Nostr'; + case 'profile.edit.lud16': return 'Διεύθυνση Lightning'; + case 'profile.edit.error.logged_out': return 'Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί'; + case 'login.username': return 'Όνομα χρήστη'; + case 'login.amber': return 'Σύνδεση με Amber'; + case 'login.key': return 'Σύνδεση με κλειδί'; + case 'login.create': return 'Δημιουργία λογαριασμού'; + case 'login.error.invalid_key': return 'Μη έγκυρο κλειδί'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index db3b088..58cba91 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -52,12 +52,23 @@ class Translations implements BaseTranslations { /// An anonymous user String get anon => 'Anon'; + /// Number of viewers of the stream + String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n, + one: '1 viewer', + 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); + + /// Headings on stream lists by stream type live/ended/planned etc. late final TranslationsStreamListEn stream_list = TranslationsStreamListEn._(_root); + late final TranslationsZapEn zap = TranslationsZapEn._(_root); + late final TranslationsProfileEn profile = TranslationsProfileEn._(_root); + late final TranslationsLoginEn login = TranslationsLoginEn._(_root); } // Path: stream @@ -67,6 +78,8 @@ class TranslationsStreamEn { 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); } @@ -93,6 +106,9 @@ class TranslationsButtonEn { /// Button text for the login button String get login => 'Login'; + String get logout => 'Logout'; + String get edit_profile => 'Edit Profile'; + /// Button text for the follow button String get follow => 'Follow'; @@ -102,6 +118,7 @@ class TranslationsButtonEn { String get mute => 'Mute'; String get unmute => 'Unmute'; String get share => 'Share'; + String get save => 'Save'; } // Path: embed @@ -147,6 +164,43 @@ class TranslationsZapEn { late final TranslationsZapErrorEn error = TranslationsZapErrorEn._(_root); } +// Path: profile +class TranslationsProfileEn { + TranslationsProfileEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + String get past_streams => 'Past Streams'; + late final TranslationsProfileEditEn edit = TranslationsProfileEditEn._(_root); +} + +// Path: login +class TranslationsLoginEn { + TranslationsLoginEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + String get username => 'Username'; + String get amber => 'Login with Amber'; + String get key => 'Login with Key'; + String get create => 'Create Account'; + late final TranslationsLoginErrorEn error = TranslationsLoginErrorEn._(_root); +} + +// Path: stream.status +class TranslationsStreamStatusEn { + TranslationsStreamStatusEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + String get live => 'LIVE'; + String get ended => 'ENDED'; + String get planned => 'PLANNED'; +} + // Path: stream.chat class TranslationsStreamChatEn { TranslationsStreamChatEn._(this._root); @@ -194,6 +248,30 @@ class TranslationsZapErrorEn { String get no_lud16 => 'No lightning address found'; } +// Path: profile.edit +class TranslationsProfileEditEn { + TranslationsProfileEditEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + String get display_name => 'Display Name'; + String get about => 'About'; + String get nip05 => 'Nostr Address'; + String get lud16 => 'Lightning Address'; + late final TranslationsProfileEditErrorEn error = TranslationsProfileEditErrorEn._(_root); +} + +// Path: login.error +class TranslationsLoginErrorEn { + TranslationsLoginErrorEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + String get invalid_key => 'Invalid key'; +} + // Path: stream.chat.write class TranslationsStreamChatWriteEn { TranslationsStreamChatWriteEn._(this._root); @@ -242,6 +320,16 @@ class TranslationsStreamChatRaidEn { String countdown({ required Object time}) => 'Raiding in ${time}'; } +// Path: profile.edit.error +class TranslationsProfileEditErrorEn { + TranslationsProfileEditErrorEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + String get logged_out => 'Cant edit profile when logged out'; +} + /// Flat map(s) containing all translations. /// Only for edge cases! For simple maps, use the map function of this library. extension on Translations { @@ -251,6 +339,14 @@ extension on Translations { case 'most_zapped_streamers': return 'Most Zapped Streamers'; case 'no_user_found': return 'No user found'; case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'ENDED'; + case 'stream.status.planned': return 'PLANNED'; + case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; case 'stream.chat.disabled': return 'CHAT DISABLED'; case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ @@ -278,11 +374,14 @@ extension on Translations { case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; case 'goal.complete': return 'COMPLETE'; case 'button.login': return 'Login'; + case 'button.logout': return 'Logout'; + case 'button.edit_profile': return 'Edit Profile'; case 'button.follow': return 'Follow'; case 'button.unfollow': return 'Unfollow'; case 'button.mute': return 'Mute'; case 'button.unmute': return 'Unmute'; case 'button.share': return 'Share'; + case 'button.save': return 'Save'; case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; case 'embed.note_by': return ({ required Object name}) => 'Note by ${name}'; case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream by ${name}'; @@ -301,6 +400,17 @@ extension on Translations { case 'zap.error.invalid_custom_amount': return 'Invalid custom amount'; case 'zap.error.no_wallet': return 'No lightning wallet installed'; case 'zap.error.no_lud16': return 'No lightning address found'; + case 'profile.past_streams': return 'Past Streams'; + case 'profile.edit.display_name': return 'Display Name'; + case 'profile.edit.about': return 'About'; + case 'profile.edit.nip05': return 'Nostr Address'; + case 'profile.edit.lud16': return 'Lightning Address'; + case 'profile.edit.error.logged_out': return 'Cant edit profile when logged out'; + case 'login.username': return 'Username'; + case 'login.amber': return 'Login with Amber'; + case 'login.key': return 'Login with Key'; + case 'login.create': return 'Create Account'; + case 'login.error.invalid_key': return 'Invalid key'; default: return null; } } diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart new file mode 100644 index 0000000..6c87663 --- /dev/null +++ b/lib/i18n/strings_es.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsEs implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.es, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsEs _root = this; // ignore: unused_field + + @override + TranslationsEs $copyWith({TranslationMetadata? meta}) => TranslationsEs(meta: meta ?? this.$meta); + + // Translations + + /// Texto que indica al usuario que pulse el marcador de avatar para iniciar la carga + @override String get upload_avatar => 'Subir avatar'; + + /// Encabezando streamers superiores listados por zaps + @override String get most_zapped_streamers => 'Serpentinas más derribadas'; + + /// No se ha encontrado ningún usuario al realizar la búsqueda + @override String get no_user_found => 'No se ha encontrado ningún usuario'; + + /// Un usuario anónimo + @override String get anon => 'Anónimo'; + + /// Número de espectadores del flujo + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, + one: '1 espectador', + other: '${n} espectadores', + ); + + @override late final _TranslationsStreamEs stream = _TranslationsStreamEs._(_root); + @override late final _TranslationsGoalEs goal = _TranslationsGoalEs._(_root); + @override late final _TranslationsButtonEs button = _TranslationsButtonEs._(_root); + @override late final _TranslationsEmbedEs embed = _TranslationsEmbedEs._(_root); + + /// Encabezamientos en las listas de flujos por tipo de flujo en directo/finalizado/planificado, etc. + @override late final _TranslationsStreamListEs stream_list = _TranslationsStreamListEs._(_root); + + @override late final _TranslationsZapEs zap = _TranslationsZapEs._(_root); + @override late final _TranslationsProfileEs profile = _TranslationsProfileEs._(_root); + @override late final _TranslationsLoginEs login = _TranslationsLoginEs._(_root); +} + +// Path: stream +class _TranslationsStreamEs implements TranslationsStreamEn { + _TranslationsStreamEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusEs status = _TranslationsStreamStatusEs._(_root); + @override String started({ required Object timestamp}) => 'Comenzó ${timestamp}'; + @override late final _TranslationsStreamChatEs chat = _TranslationsStreamChatEs._(_root); +} + +// Path: goal +class _TranslationsGoalEs implements TranslationsGoalEn { + _TranslationsGoalEs._(this._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 get complete => 'COMPLETAR'; +} + +// Path: button +class _TranslationsButtonEs implements TranslationsButtonEn { + _TranslationsButtonEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + + /// Texto del botón de inicio de sesión + @override String get login => 'Iniciar Sesión'; + + @override String get logout => 'Cerrar sesión'; + @override String get edit_profile => 'Editar Perfil'; + + /// Texto del botón de seguimiento + @override String get follow => 'Seguir'; + + /// Texto del botón "Dejar de seguir + @override String get unfollow => 'Dejar de seguir'; + + @override String get mute => 'Silenciar'; + @override String get unmute => 'Dejar de silenciar'; + @override String get share => 'Compartir'; + @override String get save => 'Guardar'; +} + +// Path: embed +class _TranslationsEmbedEs implements TranslationsEmbedEn { + _TranslationsEmbedEs._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListEs implements TranslationsStreamListEn { + _TranslationsStreamListEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get following => 'Siguiendo'; + @override String get live => 'En directo'; + @override String get planned => 'Planificado'; + @override String get ended => 'Finalizado'; +} + +// Path: zap +class _TranslationsZapEs implements TranslationsZapEn { + _TranslationsZapEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Abrir en cartera'; + @override String get copy => 'Copiado al portapapeles'; + @override late final _TranslationsZapErrorEs error = _TranslationsZapErrorEs._(_root); +} + +// Path: profile +class _TranslationsProfileEs implements TranslationsProfileEn { + _TranslationsProfileEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Transmisiones anteriores'; + @override late final _TranslationsProfileEditEs edit = _TranslationsProfileEditEs._(_root); +} + +// Path: login +class _TranslationsLoginEs implements TranslationsLoginEn { + _TranslationsLoginEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get username => 'Usuario'; + @override String get amber => 'Iniciar sesión con Amber'; + @override String get key => 'Inicio de sesión con clave'; + @override String get create => 'Crear una cuenta'; + @override late final _TranslationsLoginErrorEs error = _TranslationsLoginErrorEs._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusEs implements TranslationsStreamStatusEn { + _TranslationsStreamStatusEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get live => 'EN VIVO'; + @override String get ended => 'FIN'; + @override String get planned => 'PLANIFICADO'; +} + +// Path: stream.chat +class _TranslationsStreamChatEs implements TranslationsStreamChatEn { + _TranslationsStreamChatEs._(this._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}'; + + /// 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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidEs raid = _TranslationsStreamChatRaidEs._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorEs implements TranslationsZapErrorEn { + _TranslationsZapErrorEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Importe personalizado no válido'; + @override String get no_wallet => 'Sin monedero relámpago instalado'; + @override String get no_lud16 => 'No se ha encontrado ninguna dirección de rayos'; +} + +// Path: profile.edit +class _TranslationsProfileEditEs implements TranslationsProfileEditEn { + _TranslationsProfileEditEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Mostrar nombre'; + @override String get about => 'Sobre ti'; + @override String get nip05 => 'Dirección Nostr'; + @override String get lud16 => 'Dirección del rayo'; + @override late final _TranslationsProfileEditErrorEs error = _TranslationsProfileEditErrorEs._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorEs implements TranslationsLoginErrorEn { + _TranslationsLoginErrorEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Clave no válida'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteEs implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + + /// Etiqueta del cuadro de entrada de mensajes de chat + @override String get label => 'Escribir mensaje'; + + /// Mensaje de entrada en el chat que se muestra cuando el usuario está conectado sólo con pubkey + @override String get no_signer => 'No se pueden escribir mensajes con el login npub'; + + /// Mensaje de entrada al chat que se muestra cuando el usuario cierra la sesión + @override String get login => 'Inicie sesión para enviar mensajes'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeEs implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + + /// Encabezamiento de la lista de usuarios a los que se ha concedido una insignia + @override String get awarded_to => 'Concedido a:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidEs implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + + /// Mensaje de raid de chat a otro flujo + @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}'; + + /// Temporizador de cuenta atrás para auto-raiding + @override String countdown({ required Object time}) => 'Incursiones en ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorEs implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorEs._(this._root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'No se puede editar el perfil cuando se cierra la sesión'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsEs { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Subir avatar'; + case 'most_zapped_streamers': return 'Serpentinas más derribadas'; + case 'no_user_found': return 'No se ha encontrado ningún usuario'; + case 'anon': return 'Anónimo'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, + one: '1 espectador', + other: '${n} espectadores', + ); + case 'stream.status.live': return 'EN VIVO'; + case 'stream.status.ended': return 'FIN'; + case 'stream.status.planned': return 'PLANIFICADO'; + case 'stream.started': return ({ required Object timestamp}) => 'Comenzó ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'COMPLETAR'; + case 'button.login': return 'Iniciar Sesión'; + case 'button.logout': return 'Cerrar sesión'; + case 'button.edit_profile': return 'Editar Perfil'; + case 'button.follow': return 'Seguir'; + case 'button.unfollow': return 'Dejar de seguir'; + case 'button.mute': return 'Silenciar'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Abrir en cartera'; + case 'zap.copy': return 'Copiado al portapapeles'; + case 'zap.error.invalid_custom_amount': return 'Importe personalizado no válido'; + case 'zap.error.no_wallet': return 'Sin monedero relámpago instalado'; + case 'zap.error.no_lud16': return 'No se ha encontrado ninguna dirección de rayos'; + case 'profile.past_streams': return 'Transmisiones anteriores'; + case 'profile.edit.display_name': return 'Mostrar nombre'; + case 'profile.edit.about': return 'Sobre ti'; + case 'profile.edit.nip05': return 'Dirección Nostr'; + case 'profile.edit.lud16': return 'Dirección del rayo'; + case 'profile.edit.error.logged_out': return 'No se puede editar el perfil cuando se cierra la sesión'; + case 'login.username': return 'Usuario'; + case 'login.amber': return 'Iniciar sesión con Amber'; + case 'login.key': return 'Inicio de sesión con clave'; + case 'login.create': return 'Crear una cuenta'; + case 'login.error.invalid_key': return 'Clave no válida'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_fi.g.dart b/lib/i18n/strings_fi.g.dart new file mode 100644 index 0000000..afdc30f --- /dev/null +++ b/lib/i18n/strings_fi.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsFi implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.fi, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsFi _root = this; // ignore: unused_field + + @override + TranslationsFi $copyWith({TranslationMetadata? meta}) => TranslationsFi(meta: meta ?? this.$meta); + + // Translations + + /// Teksti, joka kehottaa käyttäjää painamaan avatar-merkkiä aloittaakseen lataamisen. + @override String get upload_avatar => 'Lataa avatar'; + + /// Päällekkäin lueteltujen alkuun streamers by zaps + @override String get most_zapped_streamers => 'Eniten Zapped Streamers'; + + /// Käyttäjää ei löytynyt haun yhteydessä + @override String get no_user_found => 'Käyttäjää ei löytynyt'; + + /// Nimetön käyttäjä + @override String get anon => 'Anon'; + + /// Streamin katsojien määrä + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n, + one: '1 katsoja', + other: '${n} katsojaa', + ); + + @override late final _TranslationsStreamFi stream = _TranslationsStreamFi._(_root); + @override late final _TranslationsGoalFi goal = _TranslationsGoalFi._(_root); + @override late final _TranslationsButtonFi button = _TranslationsButtonFi._(_root); + @override late final _TranslationsEmbedFi embed = _TranslationsEmbedFi._(_root); + + /// Stream-luetteloiden otsikot stream-tyypeittäin live/päättynyt/suunniteltu jne. + @override late final _TranslationsStreamListFi stream_list = _TranslationsStreamListFi._(_root); + + @override late final _TranslationsZapFi zap = _TranslationsZapFi._(_root); + @override late final _TranslationsProfileFi profile = _TranslationsProfileFi._(_root); + @override late final _TranslationsLoginFi login = _TranslationsLoginFi._(_root); +} + +// Path: stream +class _TranslationsStreamFi implements TranslationsStreamEn { + _TranslationsStreamFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusFi status = _TranslationsStreamStatusFi._(_root); + @override String started({ required Object timestamp}) => 'Aloitettu ${timestamp}'; + @override late final _TranslationsStreamChatFi chat = _TranslationsStreamChatFi._(_root); +} + +// Path: goal +class _TranslationsGoalFi implements TranslationsGoalEn { + _TranslationsGoalFi._(this._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 get complete => 'TÄYDELLINEN'; +} + +// Path: button +class _TranslationsButtonFi implements TranslationsButtonEn { + _TranslationsButtonFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + + /// Kirjautumispainikkeen teksti + @override String get login => 'Kirjaudu sisään'; + + @override String get logout => 'Kirjaudu ulos'; + @override String get edit_profile => 'Muokkaa profiilia'; + + /// Seuraa-painikkeen painikkeen teksti + @override String get follow => 'Seuraa'; + + /// Seuraa-painikkeen teksti + @override String get unfollow => 'Älä seuraa'; + + @override String get mute => 'Mykistä'; + @override String get unmute => 'Poista mykistys'; + @override String get share => 'Jaa'; + @override String get save => 'Tallenna'; +} + +// Path: embed +class _TranslationsEmbedFi implements TranslationsEmbedEn { + _TranslationsEmbedFi._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListFi implements TranslationsStreamListEn { + _TranslationsStreamListFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + @override String get following => 'Seuraa'; + @override String get live => 'Live'; + @override String get planned => 'Suunniteltu'; + @override String get ended => 'Päättynyt'; +} + +// Path: zap +class _TranslationsZapFi implements TranslationsZapEn { + _TranslationsZapFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Avaa lompakossa'; + @override String get copy => 'Kopioitu leikepöydälle'; + @override late final _TranslationsZapErrorFi error = _TranslationsZapErrorFi._(_root); +} + +// Path: profile +class _TranslationsProfileFi implements TranslationsProfileEn { + _TranslationsProfileFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Aikaisemmat lähetykset'; + @override late final _TranslationsProfileEditFi edit = _TranslationsProfileEditFi._(_root); +} + +// Path: login +class _TranslationsLoginFi implements TranslationsLoginEn { + _TranslationsLoginFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + @override String get username => 'Käyttäjätunnus'; + @override String get amber => 'Kirjaudu sisään Amber kanssa'; + @override String get key => 'Kirjaudu sisään avaimella'; + @override String get create => 'Luo tili'; + @override late final _TranslationsLoginErrorFi error = _TranslationsLoginErrorFi._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusFi implements TranslationsStreamStatusEn { + _TranslationsStreamStatusFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'ENDED'; + @override String get planned => 'SUUNNITELTU'; +} + +// Path: stream.chat +class _TranslationsStreamChatFi implements TranslationsStreamChatEn { + _TranslationsStreamChatFi._(this._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}'; + + /// Chat-viesti, joka näyttää aikakatkaisutapahtumat + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => 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: [ + 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); + @override late final _TranslationsStreamChatRaidFi raid = _TranslationsStreamChatRaidFi._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorFi implements TranslationsZapErrorEn { + _TranslationsZapErrorFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Virheellinen mukautettu määrä'; + @override String get no_wallet => 'Ei asennettua salamalompakkoa'; + @override String get no_lud16 => 'Salamaosoitetta ei löytynyt'; +} + +// Path: profile.edit +class _TranslationsProfileEditFi implements TranslationsProfileEditEn { + _TranslationsProfileEditFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Näytön nimi'; + @override String get about => 'Tietoja'; + @override String get nip05 => 'Nostr-osoite'; + @override String get lud16 => 'Lightning-osoite'; + @override late final _TranslationsProfileEditErrorFi error = _TranslationsProfileEditErrorFi._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorFi implements TranslationsLoginErrorEn { + _TranslationsLoginErrorFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Virheellinen avain'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteFi implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + + /// Chat-viestin syöttöruudun tarra + @override String get label => 'Kirjoita viesti'; + + /// Chat-syöttöviesti näytetään, kun käyttäjä on kirjautunut sisään vain pubkey-avaimella. + @override String get no_signer => 'Ei voi kirjoittaa viestejä npub-kirjautumisella'; + + /// Chat-syötteen viesti näytetään, kun käyttäjä on kirjautunut ulos. + @override String get login => 'Kirjaudu sisään lähettääksesi viestejä'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeFi implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + + /// Merkin saaneiden käyttäjien luettelon otsikko + @override String get awarded_to => 'Myönnetty:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidFi implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + + /// Chat-viesti toiseen streamiin + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat raid viesti toisesta virrasta + @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}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorFi implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorFi._(this._root); + + final TranslationsFi _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Ei voi muokata profiilia, kun on kirjautunut ulos'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsFi { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Lataa avatar'; + case 'most_zapped_streamers': return 'Eniten Zapped Streamers'; + case 'no_user_found': return 'Käyttäjää ei löytynyt'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fi'))(n, + one: '1 katsoja', + other: '${n} katsojaa', + ); + 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.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: [ + 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: [ + 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 'goal.complete': return 'TÄYDELLINEN'; + case 'button.login': return 'Kirjaudu sisään'; + case 'button.logout': return 'Kirjaudu ulos'; + case 'button.edit_profile': return 'Muokkaa profiilia'; + case 'button.follow': return 'Seuraa'; + case 'button.unfollow': return 'Älä seuraa'; + case 'button.mute': return 'Mykistä'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Avaa lompakossa'; + case 'zap.copy': return 'Kopioitu leikepöydälle'; + case 'zap.error.invalid_custom_amount': return 'Virheellinen mukautettu määrä'; + case 'zap.error.no_wallet': return 'Ei asennettua salamalompakkoa'; + case 'zap.error.no_lud16': return 'Salamaosoitetta ei löytynyt'; + case 'profile.past_streams': return 'Aikaisemmat lähetykset'; + case 'profile.edit.display_name': return 'Näytön nimi'; + case 'profile.edit.about': return 'Tietoja'; + case 'profile.edit.nip05': return 'Nostr-osoite'; + case 'profile.edit.lud16': return 'Lightning-osoite'; + case 'profile.edit.error.logged_out': return 'Ei voi muokata profiilia, kun on kirjautunut ulos'; + case 'login.username': return 'Käyttäjätunnus'; + case 'login.amber': return 'Kirjaudu sisään Amber kanssa'; + case 'login.key': return 'Kirjaudu sisään avaimella'; + case 'login.create': return 'Luo tili'; + case 'login.error.invalid_key': return 'Virheellinen avain'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart new file mode 100644 index 0000000..e14f786 --- /dev/null +++ b/lib/i18n/strings_fr.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsFr implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.fr, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsFr _root = this; // ignore: unused_field + + @override + TranslationsFr $copyWith({TranslationMetadata? meta}) => TranslationsFr(meta: meta ?? this.$meta); + + // Translations + + /// Texte invitant l'utilisateur à cliquer sur l'espace réservé à l'avatar pour commencer le téléchargement + @override String get upload_avatar => 'Télécharger l\'avatar'; + + /// Les têtes d'affiche sont listées par zaps. + @override String get most_zapped_streamers => 'Les Streamers les plus zappés'; + + /// Aucun utilisateur n'a été trouvé lors de la recherche + @override String get no_user_found => 'Aucun utilisateur trouvé'; + + /// Un utilisateur anonyme + @override String get anon => 'Anonyme'; + + /// Nombre de spectateurs du flux + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, + one: '1 téléspectateur', + other: '${n} spectateurs', + ); + + @override late final _TranslationsStreamFr stream = _TranslationsStreamFr._(_root); + @override late final _TranslationsGoalFr goal = _TranslationsGoalFr._(_root); + @override late final _TranslationsButtonFr button = _TranslationsButtonFr._(_root); + @override late final _TranslationsEmbedFr embed = _TranslationsEmbedFr._(_root); + + /// Rubriques sur les listes de flux par type de flux en direct/fini/prévu, etc. + @override late final _TranslationsStreamListFr stream_list = _TranslationsStreamListFr._(_root); + + @override late final _TranslationsZapFr zap = _TranslationsZapFr._(_root); + @override late final _TranslationsProfileFr profile = _TranslationsProfileFr._(_root); + @override late final _TranslationsLoginFr login = _TranslationsLoginFr._(_root); +} + +// Path: stream +class _TranslationsStreamFr implements TranslationsStreamEn { + _TranslationsStreamFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusFr status = _TranslationsStreamStatusFr._(_root); + @override String started({ required Object timestamp}) => 'Commencé à ${timestamp}'; + @override late final _TranslationsStreamChatFr chat = _TranslationsStreamChatFr._(_root); +} + +// Path: goal +class _TranslationsGoalFr implements TranslationsGoalEn { + _TranslationsGoalFr._(this._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 get complete => 'COMPLET'; +} + +// Path: button +class _TranslationsButtonFr implements TranslationsButtonEn { + _TranslationsButtonFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + + /// Texte du bouton de connexion + @override String get login => 'Se Connecter'; + + @override String get logout => 'Se déconnecter'; + @override String get edit_profile => 'Modifier le Profil'; + + /// Texte du bouton de suivi + @override String get follow => 'Suivre'; + + /// Texte du bouton pour le bouton "unfollow + @override String get unfollow => 'Ne plus suivre'; + + @override String get mute => 'Muet'; + @override String get unmute => 'Retirer sourdine'; + @override String get share => 'Partager'; + @override String get save => 'Sauvegarder'; +} + +// Path: embed +class _TranslationsEmbedFr implements TranslationsEmbedEn { + _TranslationsEmbedFr._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListFr implements TranslationsStreamListEn { + _TranslationsStreamListFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get following => 'Abonnements'; + @override String get live => 'En direct'; + @override String get planned => 'Planifié'; + @override String get ended => 'Terminé'; +} + +// Path: zap +class _TranslationsZapFr implements TranslationsZapEn { + _TranslationsZapFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Ouvrir dans le portefeuille'; + @override String get copy => 'Copié dans le presse-papiers'; + @override late final _TranslationsZapErrorFr error = _TranslationsZapErrorFr._(_root); +} + +// Path: profile +class _TranslationsProfileFr implements TranslationsProfileEn { + _TranslationsProfileFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Streams passés'; + @override late final _TranslationsProfileEditFr edit = _TranslationsProfileEditFr._(_root); +} + +// Path: login +class _TranslationsLoginFr implements TranslationsLoginEn { + _TranslationsLoginFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get username => 'Nom d’utilisateur'; + @override String get amber => 'Se connecter avec Amber'; + @override String get key => 'Connexion avec la clé'; + @override String get create => 'Créer un Compte'; + @override late final _TranslationsLoginErrorFr error = _TranslationsLoginErrorFr._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusFr implements TranslationsStreamStatusEn { + _TranslationsStreamStatusFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get live => 'VIVRE'; + @override String get ended => 'FINI'; + @override String get planned => 'PRÉVU'; +} + +// Path: stream.chat +class _TranslationsStreamChatFr implements TranslationsStreamChatEn { + _TranslationsStreamChatFr._(this._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}'; + + /// 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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidFr raid = _TranslationsStreamChatRaidFr._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorFr implements TranslationsZapErrorEn { + _TranslationsZapErrorFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Montant personnalisé non valide'; + @override String get no_wallet => 'Pas de porte-monnaie électronique installé'; + @override String get no_lud16 => 'Pas d\'adresse éclair trouvée'; +} + +// Path: profile.edit +class _TranslationsProfileEditFr implements TranslationsProfileEditEn { + _TranslationsProfileEditFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Nom d\'affichage'; + @override String get about => 'À propos'; + @override String get nip05 => 'Adresse Nostr'; + @override String get lud16 => 'Adresse Lightning'; + @override late final _TranslationsProfileEditErrorFr error = _TranslationsProfileEditErrorFr._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorFr implements TranslationsLoginErrorEn { + _TranslationsLoginErrorFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Clé non valide'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteFr implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + + /// Étiquette sur la boîte de saisie du message de chat + @override String get label => 'Message écrit'; + + /// Message d'entrée du chat affiché lorsque l'utilisateur n'est connecté qu'avec pubkey + @override String get no_signer => 'Impossible d\'écrire des messages avec le login npub'; + + /// Message d'entrée du chat affiché lorsque l'utilisateur est déconnecté + @override String get login => 'Veuillez vous connecter pour envoyer des messages'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeFr implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + + /// Titre sur la liste des utilisateurs qui ont reçu un badge + @override String get awarded_to => 'Attribué à :'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidFr implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidFr._(this._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}'; + + /// Message de raid sur le chat à partir d'un autre flux + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// Compte à rebours pour l'auto-raid + @override String countdown({ required Object time}) => 'Raid sur ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorFr implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorFr._(this._root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Impossible de modifier le profil lorsque l\'on est déconnecté'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsFr { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Télécharger l\'avatar'; + case 'most_zapped_streamers': return 'Les Streamers les plus zappés'; + case 'no_user_found': return 'Aucun utilisateur trouvé'; + case 'anon': return 'Anonyme'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, + one: '1 téléspectateur', + other: '${n} spectateurs', + ); + case 'stream.status.live': return 'VIVRE'; + case 'stream.status.ended': return 'FINI'; + case 'stream.status.planned': return 'PRÉVU'; + case 'stream.started': return ({ required Object timestamp}) => 'Commencé à ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'COMPLET'; + case 'button.login': return 'Se Connecter'; + case 'button.logout': return 'Se déconnecter'; + case 'button.edit_profile': return 'Modifier le Profil'; + case 'button.follow': return 'Suivre'; + case 'button.unfollow': return 'Ne plus suivre'; + case 'button.mute': return 'Muet'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Ouvrir dans le portefeuille'; + case 'zap.copy': return 'Copié dans le presse-papiers'; + case 'zap.error.invalid_custom_amount': return 'Montant personnalisé non valide'; + case 'zap.error.no_wallet': return 'Pas de porte-monnaie électronique installé'; + case 'zap.error.no_lud16': return 'Pas d\'adresse éclair trouvée'; + case 'profile.past_streams': return 'Streams passés'; + case 'profile.edit.display_name': return 'Nom d\'affichage'; + case 'profile.edit.about': return 'À propos'; + case 'profile.edit.nip05': return 'Adresse Nostr'; + case 'profile.edit.lud16': return 'Adresse Lightning'; + case 'profile.edit.error.logged_out': return 'Impossible de modifier le profil lorsque l\'on est déconnecté'; + case 'login.username': return 'Nom d’utilisateur'; + case 'login.amber': return 'Se connecter avec Amber'; + case 'login.key': return 'Connexion avec la clé'; + case 'login.create': return 'Créer un Compte'; + case 'login.error.invalid_key': return 'Clé non valide'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_he.g.dart b/lib/i18n/strings_he.g.dart new file mode 100644 index 0000000..afa77ed --- /dev/null +++ b/lib/i18n/strings_he.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsHe implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsHe({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.he, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsHe _root = this; // ignore: unused_field + + @override + TranslationsHe $copyWith({TranslationMetadata? meta}) => TranslationsHe(meta: meta ?? this.$meta); + + // Translations + + /// Text prompting user to hit avatar placeholder to begin upload + @override String get upload_avatar => 'Upload Avatar'; + + /// Heading over listed top streamers by zaps + @override String get most_zapped_streamers => 'Most Zapped Streamers'; + + /// No user found when searching + @override String get no_user_found => 'No user found'; + + /// An anonymous user + @override String get anon => 'Anon'; + + /// Number of viewers of the stream + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('he'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + + @override late final _TranslationsStreamHe stream = _TranslationsStreamHe._(_root); + @override late final _TranslationsGoalHe goal = _TranslationsGoalHe._(_root); + @override late final _TranslationsButtonHe button = _TranslationsButtonHe._(_root); + @override late final _TranslationsEmbedHe embed = _TranslationsEmbedHe._(_root); + + /// Headings on stream lists by stream type live/ended/planned etc. + @override late final _TranslationsStreamListHe stream_list = _TranslationsStreamListHe._(_root); + + @override late final _TranslationsZapHe zap = _TranslationsZapHe._(_root); + @override late final _TranslationsProfileHe profile = _TranslationsProfileHe._(_root); + @override late final _TranslationsLoginHe login = _TranslationsLoginHe._(_root); +} + +// Path: stream +class _TranslationsStreamHe implements TranslationsStreamEn { + _TranslationsStreamHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusHe status = _TranslationsStreamStatusHe._(_root); + @override String started({ required Object timestamp}) => 'Started ${timestamp}'; + @override late final _TranslationsStreamChatHe chat = _TranslationsStreamChatHe._(_root); +} + +// Path: goal +class _TranslationsGoalHe implements TranslationsGoalEn { + _TranslationsGoalHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String title({ required Object amount}) => 'Goal: ${amount}'; + @override String remaining({ required Object amount}) => 'Remaining: ${amount}'; + @override String get complete => 'COMPLETE'; +} + +// Path: button +class _TranslationsButtonHe implements TranslationsButtonEn { + _TranslationsButtonHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + + /// Button text for the login button + @override String get login => 'Login'; + + @override String get logout => 'Logout'; + @override String get edit_profile => 'Edit Profile'; + + /// Button text for the follow button + @override String get follow => 'Follow'; + + /// Button text for the unfollow button + @override String get unfollow => 'Unfollow'; + + @override String get mute => 'Mute'; + @override String get unmute => 'Unmute'; + @override String get share => 'Share'; + @override String get save => 'Save'; +} + +// Path: embed +class _TranslationsEmbedHe implements TranslationsEmbedEn { + _TranslationsEmbedHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String article_by({ required Object name}) => 'Article by ${name}'; + @override String note_by({ required Object name}) => 'Note by ${name}'; + @override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; +} + +// Path: stream_list +class _TranslationsStreamListHe implements TranslationsStreamListEn { + _TranslationsStreamListHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String get following => 'Following'; + @override String get live => 'Live'; + @override String get planned => 'Planned'; + @override String get ended => 'Ended'; +} + +// Path: zap +class _TranslationsZapHe implements TranslationsZapEn { + _TranslationsZapHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String title({ required Object name}) => 'Zap ${name}'; + @override String get custom_amount => 'Custom Amount'; + @override String get confirm => 'Confirm'; + @override String get comment => 'Comment'; + @override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats'; + @override String get button_zap => 'Zap'; + @override String get button_open_wallet => 'Open in Wallet'; + @override String get copy => 'Copied to clipboard'; + @override late final _TranslationsZapErrorHe error = _TranslationsZapErrorHe._(_root); +} + +// Path: profile +class _TranslationsProfileHe implements TranslationsProfileEn { + _TranslationsProfileHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Past Streams'; + @override late final _TranslationsProfileEditHe edit = _TranslationsProfileEditHe._(_root); +} + +// Path: login +class _TranslationsLoginHe implements TranslationsLoginEn { + _TranslationsLoginHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String get username => 'Username'; + @override String get amber => 'Login with Amber'; + @override String get key => 'Login with Key'; + @override String get create => 'Create Account'; + @override late final _TranslationsLoginErrorHe error = _TranslationsLoginErrorHe._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusHe implements TranslationsStreamStatusEn { + _TranslationsStreamStatusHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'ENDED'; + @override String get planned => 'PLANNED'; +} + +// Path: stream.chat +class _TranslationsStreamChatHe implements TranslationsStreamChatEn { + _TranslationsStreamChatHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String get disabled => 'CHAT DISABLED'; + @override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; + + /// Chat message showing timeout events + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + + /// Stream ended footer at bottom of chat + @override String get ended => 'STREAM ENDED'; + + /// Chat message showing stream zaps + @override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + + @override late final _TranslationsStreamChatWriteHe write = _TranslationsStreamChatWriteHe._(_root); + @override late final _TranslationsStreamChatBadgeHe badge = _TranslationsStreamChatBadgeHe._(_root); + @override late final _TranslationsStreamChatRaidHe raid = _TranslationsStreamChatRaidHe._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorHe implements TranslationsZapErrorEn { + _TranslationsZapErrorHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Invalid custom amount'; + @override String get no_wallet => 'No lightning wallet installed'; + @override String get no_lud16 => 'No lightning address found'; +} + +// Path: profile.edit +class _TranslationsProfileEditHe implements TranslationsProfileEditEn { + _TranslationsProfileEditHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Display Name'; + @override String get about => 'About'; + @override String get nip05 => 'Nostr Address'; + @override String get lud16 => 'Lightning Address'; + @override late final _TranslationsProfileEditErrorHe error = _TranslationsProfileEditErrorHe._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorHe implements TranslationsLoginErrorEn { + _TranslationsLoginErrorHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Invalid key'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteHe implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + + /// Label on the chat message input box + @override String get label => 'Write message'; + + /// Chat input message shown when the user is logged in only with pubkey + @override String get no_signer => 'Can\'t write messages with npub login'; + + /// Chat input message shown when the user is logged out + @override String get login => 'Please login to send messages'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeHe implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + + /// Heading over list of users who are awarded a badge + @override String get awarded_to => 'Awarded to:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidHe implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + + /// Chat raid message to another stream + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat raid message from another stream + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// Countdown timer for auto-raiding + @override String countdown({ required Object time}) => 'Raiding in ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorHe implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorHe._(this._root); + + final TranslationsHe _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Cant edit profile when logged out'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsHe { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Upload Avatar'; + case 'most_zapped_streamers': return 'Most Zapped Streamers'; + case 'no_user_found': return 'No user found'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('he'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'ENDED'; + case 'stream.status.planned': return 'PLANNED'; + case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; + case 'stream.chat.disabled': return 'CHAT DISABLED'; + case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; + case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + case 'stream.chat.ended': return 'STREAM ENDED'; + case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + case 'stream.chat.write.label': return 'Write message'; + case 'stream.chat.write.no_signer': return 'Can\'t write messages with npub login'; + case 'stream.chat.write.login': return 'Please login to send messages'; + case 'stream.chat.badge.awarded_to': return 'Awarded to:'; + case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; + case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; + case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; + case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; + case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; + case 'goal.complete': return 'COMPLETE'; + case 'button.login': return 'Login'; + case 'button.logout': return 'Logout'; + case 'button.edit_profile': return 'Edit Profile'; + case 'button.follow': return 'Follow'; + case 'button.unfollow': return 'Unfollow'; + case 'button.mute': return 'Mute'; + case 'button.unmute': return 'Unmute'; + case 'button.share': return 'Share'; + case 'button.save': return 'Save'; + case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; + case 'embed.note_by': return ({ required Object name}) => 'Note by ${name}'; + case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream by ${name}'; + case 'stream_list.following': return 'Following'; + case 'stream_list.live': return 'Live'; + case 'stream_list.planned': return 'Planned'; + case 'stream_list.ended': return 'Ended'; + case 'zap.title': return ({ required Object name}) => 'Zap ${name}'; + case 'zap.custom_amount': return 'Custom Amount'; + case 'zap.confirm': return 'Confirm'; + case 'zap.comment': return 'Comment'; + case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats'; + case 'zap.button_zap': return 'Zap'; + case 'zap.button_open_wallet': return 'Open in Wallet'; + case 'zap.copy': return 'Copied to clipboard'; + case 'zap.error.invalid_custom_amount': return 'Invalid custom amount'; + case 'zap.error.no_wallet': return 'No lightning wallet installed'; + case 'zap.error.no_lud16': return 'No lightning address found'; + case 'profile.past_streams': return 'Past Streams'; + case 'profile.edit.display_name': return 'Display Name'; + case 'profile.edit.about': return 'About'; + case 'profile.edit.nip05': return 'Nostr Address'; + case 'profile.edit.lud16': return 'Lightning Address'; + case 'profile.edit.error.logged_out': return 'Cant edit profile when logged out'; + case 'login.username': return 'Username'; + case 'login.amber': return 'Login with Amber'; + case 'login.key': return 'Login with Key'; + case 'login.create': return 'Create Account'; + case 'login.error.invalid_key': return 'Invalid key'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_hu.g.dart b/lib/i18n/strings_hu.g.dart new file mode 100644 index 0000000..826a7e8 --- /dev/null +++ b/lib/i18n/strings_hu.g.dart @@ -0,0 +1,418 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsHu implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.hu, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsHu _root = this; // ignore: unused_field + + @override + TranslationsHu $copyWith({TranslationMetadata? meta}) => TranslationsHu(meta: meta ?? this.$meta); + + // Translations + + /// 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 + @override String get upload_avatar => 'Avatár feltöltése'; + + /// Irány a felsorolt top streamerek fölött zaps által + @override String get most_zapped_streamers => 'A legtöbb Zapped Streamers'; + + /// Kereséskor nem talált felhasználó + @override String get no_user_found => 'Nem talált felhasználó'; + + /// Egy névtelen felhasználó + @override String get anon => 'Névtelen'; + + /// A stream nézőinek száma + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, + one: '1 néző', + other: '${n} néző', + ); + + @override late final _TranslationsStreamHu stream = _TranslationsStreamHu._(_root); + @override late final _TranslationsGoalHu goal = _TranslationsGoalHu._(_root); + @override late final _TranslationsButtonHu button = _TranslationsButtonHu._(_root); + @override late final _TranslationsEmbedHu embed = _TranslationsEmbedHu._(_root); + + /// A stream-listák címsorai stream-típusonként élő/befejezett/tervezett stb. + @override late final _TranslationsStreamListHu stream_list = _TranslationsStreamListHu._(_root); + + @override late final _TranslationsZapHu zap = _TranslationsZapHu._(_root); + @override late final _TranslationsProfileHu profile = _TranslationsProfileHu._(_root); + @override late final _TranslationsLoginHu login = _TranslationsLoginHu._(_root); +} + +// Path: stream +class _TranslationsStreamHu implements TranslationsStreamEn { + _TranslationsStreamHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusHu status = _TranslationsStreamStatusHu._(_root); + @override String started({ required Object timestamp}) => 'Elindult ${timestamp}'; + @override late final _TranslationsStreamChatHu chat = _TranslationsStreamChatHu._(_root); +} + +// Path: goal +class _TranslationsGoalHu implements TranslationsGoalEn { + _TranslationsGoalHu._(this._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 get complete => 'TELJES'; +} + +// Path: button +class _TranslationsButtonHu implements TranslationsButtonEn { + _TranslationsButtonHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + + /// A bejelentkezési gomb szövege + @override String get login => 'Bejelentkezés'; + + @override String get logout => 'Kijelentkezés'; + @override String get edit_profile => 'Profil szerkesztése'; + + /// A követés gomb szövege + @override String get follow => 'Követés'; + + /// A követés megszüntetése gomb szövege + @override String get unfollow => 'Követés megszüntetése'; + + @override String get mute => 'Némítás'; + @override String get unmute => 'Némítás visszavonása'; + @override String get share => 'Megosztás'; + @override String get save => 'Mentés'; +} + +// Path: embed +class _TranslationsEmbedHu implements TranslationsEmbedEn { + _TranslationsEmbedHu._(this._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'; +} + +// Path: stream_list +class _TranslationsStreamListHu implements TranslationsStreamListEn { + _TranslationsStreamListHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get following => 'Követettek bejegyzései'; + @override String get live => 'Élő'; + @override String get planned => 'Tervezett'; + @override String get ended => 'Véget ért'; +} + +// Path: zap +class _TranslationsZapHu implements TranslationsZapEn { + _TranslationsZapHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @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 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'; + @override late final _TranslationsZapErrorHu error = _TranslationsZapErrorHu._(_root); +} + +// Path: profile +class _TranslationsProfileHu implements TranslationsProfileEn { + _TranslationsProfileHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Múltbeli Streamek'; + @override late final _TranslationsProfileEditHu edit = _TranslationsProfileEditHu._(_root); +} + +// Path: login +class _TranslationsLoginHu implements TranslationsLoginEn { + _TranslationsLoginHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get username => 'Felhasználónév'; + @override String get amber => 'Bejelentkezés Amber segítségével'; + @override String get key => 'Bejelentkezés kulccsal'; + @override String get create => 'Fiók Létrehozása'; + @override late final _TranslationsLoginErrorHu error = _TranslationsLoginErrorHu._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusHu implements TranslationsStreamStatusEn { + _TranslationsStreamStatusHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get live => 'ÉLŐ'; + @override String get ended => 'ENDED'; + @override String get planned => 'TERVEZETT'; +} + +// Path: stream.chat +class _TranslationsStreamChatHu implements TranslationsStreamChatEn { + _TranslationsStreamChatHu._(this._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}'; + + /// 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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidHu raid = _TranslationsStreamChatRaidHu._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorHu implements TranslationsZapErrorEn { + _TranslationsZapErrorHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Érvénytelen egyéni összeg'; + @override String get no_wallet => 'Nincs telepített villám tárca'; + @override String get no_lud16 => 'Nem talált villámcím'; +} + +// Path: profile.edit +class _TranslationsProfileEditHu implements TranslationsProfileEditEn { + _TranslationsProfileEditHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Megjelenített név'; + @override String get about => 'Névjegy'; + @override String get nip05 => 'Nostr-cím'; + @override String get lud16 => 'Lightning-cím'; + @override late final _TranslationsProfileEditErrorHu error = _TranslationsProfileEditErrorHu._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorHu implements TranslationsLoginErrorEn { + _TranslationsLoginErrorHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Érvénytelen kulcs'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteHu implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + + /// Címke a csevegőüzenet beviteli mezőjén + @override String get label => 'Üzenet írása'; + + /// A csevegés bemeneti üzenete megjelenik, ha a felhasználó csak pubkey-vel van bejelentkezve + @override String get no_signer => 'Nem tud üzeneteket írni az npub bejelentkezéssel'; + + /// A felhasználó kijelentkezésekor megjelenő csevegési beviteli üzenet + @override String get login => 'Kérjük, jelentkezzen be az üzenetek küldéséhez'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeHu implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + + /// Fejléc a jelvényt kapott felhasználók listája fölött + @override String get awarded_to => 'Elnyerte:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidHu implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + + /// Chat raid üzenet egy másik folyamba + @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}'; + + /// Visszaszámláló időzítő az automatikus lovagláshoz + @override String countdown({ required Object time}) => 'Raiding a ${time} oldalon'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorHu implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorHu._(this._root); + + final TranslationsHu _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Kijelentkezve nem lehet profilt szerkeszteni'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsHu { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Avatár feltöltése'; + case 'most_zapped_streamers': return 'A legtöbb Zapped Streamers'; + case 'no_user_found': return 'Nem talált felhasználó'; + case 'anon': return 'Névtelen'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('hu'))(n, + one: '1 néző', + other: '${n} néző', + ); + 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.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: [ + 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: [ + 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 'goal.complete': return 'TELJES'; + case 'button.login': return 'Bejelentkezés'; + case 'button.logout': return 'Kijelentkezés'; + case 'button.edit_profile': return 'Profil szerkesztése'; + case 'button.follow': return 'Követés'; + case 'button.unfollow': return 'Követés megszüntetése'; + case 'button.mute': return 'Némítás'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Megnyitás a pénztárcában'; + case 'zap.copy': return 'Vágólapra másolva'; + case 'zap.error.invalid_custom_amount': return 'Érvénytelen egyéni összeg'; + case 'zap.error.no_wallet': return 'Nincs telepített villám tárca'; + case 'zap.error.no_lud16': return 'Nem talált villámcím'; + case 'profile.past_streams': return 'Múltbeli Streamek'; + case 'profile.edit.display_name': return 'Megjelenített név'; + case 'profile.edit.about': return 'Névjegy'; + case 'profile.edit.nip05': return 'Nostr-cím'; + case 'profile.edit.lud16': return 'Lightning-cím'; + case 'profile.edit.error.logged_out': return 'Kijelentkezve nem lehet profilt szerkeszteni'; + case 'login.username': return 'Felhasználónév'; + case 'login.amber': return 'Bejelentkezés Amber segítségével'; + case 'login.key': return 'Bejelentkezés kulccsal'; + case 'login.create': return 'Fiók Létrehozása'; + case 'login.error.invalid_key': return 'Érvénytelen kulcs'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart new file mode 100644 index 0000000..0916ace --- /dev/null +++ b/lib/i18n/strings_it.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsIt implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.it, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsIt _root = this; // ignore: unused_field + + @override + TranslationsIt $copyWith({TranslationMetadata? meta}) => TranslationsIt(meta: meta ?? this.$meta); + + // Translations + + /// Testo che richiede all'utente di premere il segnaposto dell'avatar per iniziare il caricamento + @override String get upload_avatar => 'Carica Avatar'; + + /// Direzione sopra elencata top streamers da zaps + @override String get most_zapped_streamers => 'Il maggior numero di streamer bloccati'; + + /// Nessun utente trovato durante la ricerca + @override String get no_user_found => 'Nessun utente trovato'; + + /// Un utente anonimo + @override String get anon => 'Anonimo'; + + /// Numero di spettatori del flusso + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, + one: '1 spettatore', + other: '${n} spettatori', + ); + + @override late final _TranslationsStreamIt stream = _TranslationsStreamIt._(_root); + @override late final _TranslationsGoalIt goal = _TranslationsGoalIt._(_root); + @override late final _TranslationsButtonIt button = _TranslationsButtonIt._(_root); + @override late final _TranslationsEmbedIt embed = _TranslationsEmbedIt._(_root); + + /// Titoli sugli elenchi dei flussi per tipo di flusso live/finito/pianificato ecc. + @override late final _TranslationsStreamListIt stream_list = _TranslationsStreamListIt._(_root); + + @override late final _TranslationsZapIt zap = _TranslationsZapIt._(_root); + @override late final _TranslationsProfileIt profile = _TranslationsProfileIt._(_root); + @override late final _TranslationsLoginIt login = _TranslationsLoginIt._(_root); +} + +// Path: stream +class _TranslationsStreamIt implements TranslationsStreamEn { + _TranslationsStreamIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusIt status = _TranslationsStreamStatusIt._(_root); + @override String started({ required Object timestamp}) => 'Avviato ${timestamp}'; + @override late final _TranslationsStreamChatIt chat = _TranslationsStreamChatIt._(_root); +} + +// Path: goal +class _TranslationsGoalIt implements TranslationsGoalEn { + _TranslationsGoalIt._(this._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 get complete => 'COMPLETO'; +} + +// Path: button +class _TranslationsButtonIt implements TranslationsButtonEn { + _TranslationsButtonIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + + /// Testo del pulsante per il pulsante di accesso + @override String get login => 'Login'; + + @override String get logout => 'Logout'; + @override String get edit_profile => 'Modifica profilo'; + + /// Testo del pulsante per il pulsante Segui + @override String get follow => 'Segui'; + + /// Testo del pulsante per il pulsante unfollow + @override String get unfollow => 'Smetti di seguire'; + + @override String get mute => 'Silenzia'; + @override String get unmute => 'Riattiva'; + @override String get share => 'Condividi'; + @override String get save => 'Salva'; +} + +// Path: embed +class _TranslationsEmbedIt implements TranslationsEmbedEn { + _TranslationsEmbedIt._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListIt implements TranslationsStreamListEn { + _TranslationsStreamListIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get following => 'Seguiti'; + @override String get live => 'Dal vivo'; + @override String get planned => 'Pianificato'; + @override String get ended => 'Terminato'; +} + +// Path: zap +class _TranslationsZapIt implements TranslationsZapEn { + _TranslationsZapIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Aprire nel portafoglio'; + @override String get copy => 'Copiato negli appunti'; + @override late final _TranslationsZapErrorIt error = _TranslationsZapErrorIt._(_root); +} + +// Path: profile +class _TranslationsProfileIt implements TranslationsProfileEn { + _TranslationsProfileIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Flussi passati'; + @override late final _TranslationsProfileEditIt edit = _TranslationsProfileEditIt._(_root); +} + +// Path: login +class _TranslationsLoginIt implements TranslationsLoginEn { + _TranslationsLoginIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get username => 'Nome utente'; + @override String get amber => 'Accesso con Amber'; + @override String get key => 'Accesso con chiave'; + @override String get create => 'Crea un account'; + @override late final _TranslationsLoginErrorIt error = _TranslationsLoginErrorIt._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusIt implements TranslationsStreamStatusEn { + _TranslationsStreamStatusIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get live => 'IN DIRETTA'; + @override String get ended => 'FINE'; + @override String get planned => 'PREVISTO'; +} + +// Path: stream.chat +class _TranslationsStreamChatIt implements TranslationsStreamChatEn { + _TranslationsStreamChatIt._(this._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}'; + + /// 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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidIt raid = _TranslationsStreamChatRaidIt._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorIt implements TranslationsZapErrorEn { + _TranslationsZapErrorIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Importo personalizzato non valido'; + @override String get no_wallet => 'Nessun portafoglio Lightning installato'; + @override String get no_lud16 => 'Nessun indirizzo di fulmine trovato'; +} + +// Path: profile.edit +class _TranslationsProfileEditIt implements TranslationsProfileEditEn { + _TranslationsProfileEditIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Nome visualizzato'; + @override String get about => 'Info'; + @override String get nip05 => 'Indirizzo Nostr'; + @override String get lud16 => 'Indirizzo del fulmine'; + @override late final _TranslationsProfileEditErrorIt error = _TranslationsProfileEditErrorIt._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorIt implements TranslationsLoginErrorEn { + _TranslationsLoginErrorIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Chiave non valida'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteIt implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + + /// Etichetta della casella di immissione del messaggio di chat + @override String get label => 'Scrivi il messaggio'; + + /// Messaggio di ingresso alla chat mostrato quando l'utente è connesso solo con la pubkey + @override String get no_signer => 'Impossibile scrivere messaggi con il login npub'; + + /// Messaggio di input della chat mostrato quando l'utente è disconnesso + @override String get login => 'Effettuare il login per inviare messaggi'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeIt implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + + /// Intestazione dell'elenco degli utenti a cui è stato assegnato un badge + @override String get awarded_to => 'Assegnato a:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidIt implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + + /// Messaggio di chat raid in un altro flusso + @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}'; + + /// Timer per il conto alla rovescia per l'auto-raid + @override String countdown({ required Object time}) => 'Raid in ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorIt implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorIt._(this._root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Impossibile modificare il profilo quando si è disconnessi'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsIt { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Carica Avatar'; + case 'most_zapped_streamers': return 'Il maggior numero di streamer bloccati'; + case 'no_user_found': return 'Nessun utente trovato'; + case 'anon': return 'Anonimo'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, + one: '1 spettatore', + other: '${n} spettatori', + ); + case 'stream.status.live': return 'IN DIRETTA'; + case 'stream.status.ended': return 'FINE'; + case 'stream.status.planned': return 'PREVISTO'; + case 'stream.started': return ({ required Object timestamp}) => 'Avviato ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'COMPLETO'; + case 'button.login': return 'Login'; + case 'button.logout': return 'Logout'; + case 'button.edit_profile': return 'Modifica profilo'; + case 'button.follow': return 'Segui'; + case 'button.unfollow': return 'Smetti di seguire'; + case 'button.mute': return 'Silenzia'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Aprire nel portafoglio'; + case 'zap.copy': return 'Copiato negli appunti'; + case 'zap.error.invalid_custom_amount': return 'Importo personalizzato non valido'; + case 'zap.error.no_wallet': return 'Nessun portafoglio Lightning installato'; + case 'zap.error.no_lud16': return 'Nessun indirizzo di fulmine trovato'; + case 'profile.past_streams': return 'Flussi passati'; + case 'profile.edit.display_name': return 'Nome visualizzato'; + case 'profile.edit.about': return 'Info'; + case 'profile.edit.nip05': return 'Indirizzo Nostr'; + case 'profile.edit.lud16': return 'Indirizzo del fulmine'; + case 'profile.edit.error.logged_out': return 'Impossibile modificare il profilo quando si è disconnessi'; + case 'login.username': return 'Nome utente'; + case 'login.amber': return 'Accesso con Amber'; + case 'login.key': return 'Accesso con chiave'; + case 'login.create': return 'Crea un account'; + case 'login.error.invalid_key': return 'Chiave non valida'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart new file mode 100644 index 0000000..7efa9f6 --- /dev/null +++ b/lib/i18n/strings_ja.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsJa implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.ja, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsJa _root = this; // ignore: unused_field + + @override + TranslationsJa $copyWith({TranslationMetadata? meta}) => TranslationsJa(meta: meta ?? this.$meta); + + // Translations + + /// アバターのプレースホルダーを押してアップロードを開始するよう促すテキスト + @override String get upload_avatar => 'アバターのアップロード'; + + /// ザップによるリストの上のストリーマーに向かう + @override String get most_zapped_streamers => '最もザッピングされたストリーマー'; + + /// 検索してもユーザーが見つからない + @override String get no_user_found => 'ユーザーが見つかりません'; + + /// 匿名ユーザー + @override String get anon => '匿名'; + + /// ストリームの視聴者数 + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, + one: '1 視聴者', + other: '${n} 人が視聴中', + ); + + @override late final _TranslationsStreamJa stream = _TranslationsStreamJa._(_root); + @override late final _TranslationsGoalJa goal = _TranslationsGoalJa._(_root); + @override late final _TranslationsButtonJa button = _TranslationsButtonJa._(_root); + @override late final _TranslationsEmbedJa embed = _TranslationsEmbedJa._(_root); + + /// ライブ/終了/予定など、ストリーム・タイプ別のストリーム・リストの見出し。 + @override late final _TranslationsStreamListJa stream_list = _TranslationsStreamListJa._(_root); + + @override late final _TranslationsZapJa zap = _TranslationsZapJa._(_root); + @override late final _TranslationsProfileJa profile = _TranslationsProfileJa._(_root); + @override late final _TranslationsLoginJa login = _TranslationsLoginJa._(_root); +} + +// Path: stream +class _TranslationsStreamJa implements TranslationsStreamEn { + _TranslationsStreamJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusJa status = _TranslationsStreamStatusJa._(_root); + @override String started({ required Object timestamp}) => '${timestamp} を開始'; + @override late final _TranslationsStreamChatJa chat = _TranslationsStreamChatJa._(_root); +} + +// Path: goal +class _TranslationsGoalJa implements TranslationsGoalEn { + _TranslationsGoalJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @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); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + + /// ログインボタンのテキスト + @override String get login => 'ログイン'; + + @override String get logout => 'ログアウト'; + @override String get edit_profile => 'プロフィールを編集'; + + /// フォローボタンのテキスト + @override String get follow => 'フォロー'; + + /// フォロー解除ボタンのテキスト + @override String get unfollow => 'フォロー解除'; + + @override String get mute => 'ミュート'; + @override String get unmute => 'ミュート解除'; + @override String get share => '共有'; + @override String get save => '保存'; +} + +// Path: embed +class _TranslationsEmbedJa implements TranslationsEmbedEn { + _TranslationsEmbedJa._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListJa implements TranslationsStreamListEn { + _TranslationsStreamListJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get following => 'フォロー中'; + @override String get live => 'ライブ配信中'; + @override String get planned => '予定あり'; + @override String get ended => '終了しました'; +} + +// Path: zap +class _TranslationsZapJa implements TranslationsZapEn { + _TranslationsZapJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'ザップ'; + @override String get button_open_wallet => 'ウォレットで開く'; + @override String get copy => 'クリップボードにコピー'; + @override late final _TranslationsZapErrorJa error = _TranslationsZapErrorJa._(_root); +} + +// Path: profile +class _TranslationsProfileJa implements TranslationsProfileEn { + _TranslationsProfileJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get past_streams => '過去の配信'; + @override late final _TranslationsProfileEditJa edit = _TranslationsProfileEditJa._(_root); +} + +// Path: login +class _TranslationsLoginJa implements TranslationsLoginEn { + _TranslationsLoginJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get username => 'ユーザー名'; + @override String get amber => '琥珀でログイン'; + @override String get key => 'キーでログイン'; + @override String get create => 'アカウントを作成する'; + @override late final _TranslationsLoginErrorJa error = _TranslationsLoginErrorJa._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusJa implements TranslationsStreamStatusEn { + _TranslationsStreamStatusJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get live => 'ライブ'; + @override String get ended => '終了'; + @override String get planned => '予定'; +} + +// Path: stream.chat +class _TranslationsStreamChatJa implements TranslationsStreamChatEn { + _TranslationsStreamChatJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get disabled => 'チャット無効'; + @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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidJa raid = _TranslationsStreamChatRaidJa._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorJa implements TranslationsZapErrorEn { + _TranslationsZapErrorJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => '無効なカスタム金額'; + @override String get no_wallet => 'Lightningウォレット未装着'; + @override String get no_lud16 => '雷アドレスが見つかりません'; +} + +// Path: profile.edit +class _TranslationsProfileEditJa implements TranslationsProfileEditEn { + _TranslationsProfileEditJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get display_name => '表示名'; + @override String get about => '自己紹介'; + @override String get nip05 => 'Nostrアドレス'; + @override String get lud16 => 'ライトニングアドレス'; + @override late final _TranslationsProfileEditErrorJa error = _TranslationsProfileEditErrorJa._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorJa implements TranslationsLoginErrorEn { + _TranslationsLoginErrorJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get invalid_key => '無効なキー'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteJa implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + + /// チャットメッセージ入力ボックスのラベル + @override String get label => 'メッセージを書く'; + + /// ユーザーがpubkeyのみでログインしている場合に表示されるチャット入力メッセージ + @override String get no_signer => 'npubログインでメッセージが書けない'; + + /// ログアウト時に表示されるチャット入力メッセージ + @override String get login => 'メッセージを送信するにはログインしてください'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeJa implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + + /// バッジを授与されたユーザーのリスト上の見出し + @override String get awarded_to => '受賞者'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidJa implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + + /// 別のストリームへのチャット襲撃メッセージ + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// 他のストリームからのチャット襲撃メッセージ + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// 自動騎乗のカウントダウン・タイマー + @override String countdown({ required Object time}) => '${time}における襲撃'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorJa implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorJa._(this._root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'ログアウトするとプロフィールが編集できない'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsJa { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'アバターのアップロード'; + case 'most_zapped_streamers': return '最もザッピングされたストリーマー'; + case 'no_user_found': return 'ユーザーが見つかりません'; + case 'anon': return '匿名'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, + one: '1 視聴者', + other: '${n} 人が視聴中', + ); + case 'stream.status.live': return 'ライブ'; + case 'stream.status.ended': return '終了'; + case 'stream.status.planned': return '予定'; + case 'stream.started': return ({ required Object timestamp}) => '${timestamp} を開始'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return '完了'; + case 'button.login': return 'ログイン'; + case 'button.logout': return 'ログアウト'; + case 'button.edit_profile': return 'プロフィールを編集'; + case 'button.follow': return 'フォロー'; + case 'button.unfollow': return 'フォロー解除'; + case 'button.mute': return 'ミュート'; + 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 '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.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': return 'ザップ'; + case 'zap.button_open_wallet': return 'ウォレットで開く'; + case 'zap.copy': return 'クリップボードにコピー'; + case 'zap.error.invalid_custom_amount': return '無効なカスタム金額'; + case 'zap.error.no_wallet': return 'Lightningウォレット未装着'; + case 'zap.error.no_lud16': return '雷アドレスが見つかりません'; + case 'profile.past_streams': return '過去の配信'; + case 'profile.edit.display_name': return '表示名'; + case 'profile.edit.about': return '自己紹介'; + case 'profile.edit.nip05': return 'Nostrアドレス'; + case 'profile.edit.lud16': return 'ライトニングアドレス'; + case 'profile.edit.error.logged_out': return 'ログアウトするとプロフィールが編集できない'; + case 'login.username': return 'ユーザー名'; + case 'login.amber': return '琥珀でログイン'; + case 'login.key': return 'キーでログイン'; + case 'login.create': return 'アカウントを作成する'; + case 'login.error.invalid_key': return '無効なキー'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart new file mode 100644 index 0000000..6982b94 --- /dev/null +++ b/lib/i18n/strings_ko.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsKo implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.ko, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsKo _root = this; // ignore: unused_field + + @override + TranslationsKo $copyWith({TranslationMetadata? meta}) => TranslationsKo(meta: meta ?? this.$meta); + + // Translations + + /// 아바타 플레이스홀더를 눌러 업로드를 시작하라는 메시지를 표시하는 텍스트 + @override String get upload_avatar => '아바타 업로드'; + + /// 나열된 상위 스트리머를 잽별로 살펴보기 + @override String get most_zapped_streamers => '가장 많이 재핑된 스트리머'; + + /// 검색 시 사용자를 찾을 수 없음 + @override String get no_user_found => '사용자를 찾을 수 없습니다.'; + + /// 익명 사용자 + @override String get anon => 'Anon'; + + /// 스트림 시청자 수 + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, + one: '시청자 1명', + other: '${n} 시청자', + ); + + @override late final _TranslationsStreamKo stream = _TranslationsStreamKo._(_root); + @override late final _TranslationsGoalKo goal = _TranslationsGoalKo._(_root); + @override late final _TranslationsButtonKo button = _TranslationsButtonKo._(_root); + @override late final _TranslationsEmbedKo embed = _TranslationsEmbedKo._(_root); + + /// 실시간/종료/예정 등 스트림 유형별로 스트림 목록의 제목을 표시합니다. + @override late final _TranslationsStreamListKo stream_list = _TranslationsStreamListKo._(_root); + + @override late final _TranslationsZapKo zap = _TranslationsZapKo._(_root); + @override late final _TranslationsProfileKo profile = _TranslationsProfileKo._(_root); + @override late final _TranslationsLoginKo login = _TranslationsLoginKo._(_root); +} + +// Path: stream +class _TranslationsStreamKo implements TranslationsStreamEn { + _TranslationsStreamKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusKo status = _TranslationsStreamStatusKo._(_root); + @override String started({ required Object timestamp}) => '시작 ${timestamp}'; + @override late final _TranslationsStreamChatKo chat = _TranslationsStreamChatKo._(_root); +} + +// Path: goal +class _TranslationsGoalKo implements TranslationsGoalEn { + _TranslationsGoalKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @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); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + + /// 로그인 버튼의 버튼 텍스트 + @override String get login => '로그인'; + + @override String get logout => '로그아웃'; + @override String get edit_profile => '프로필 수정'; + + /// 팔로우 버튼의 버튼 텍스트 + @override String get follow => '팔로우'; + + /// 언팔로우 버튼의 버튼 텍스트 + @override String get unfollow => '언팔로우'; + + @override String get mute => '뮤트'; + @override String get unmute => '뮤트 해제'; + @override String get share => '공유'; + @override String get save => '저장'; +} + +// Path: embed +class _TranslationsEmbedKo implements TranslationsEmbedEn { + _TranslationsEmbedKo._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListKo implements TranslationsStreamListEn { + _TranslationsStreamListKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get following => '팔로잉'; + @override String get live => '라이브'; + @override String get planned => '계획된'; + @override String get ended => '종료됨'; +} + +// Path: zap +class _TranslationsZapKo implements TranslationsZapEn { + _TranslationsZapKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => '지갑에서 열기'; + @override String get copy => '클립보드에 복사'; + @override late final _TranslationsZapErrorKo error = _TranslationsZapErrorKo._(_root); +} + +// Path: profile +class _TranslationsProfileKo implements TranslationsProfileEn { + _TranslationsProfileKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get past_streams => '과거 스트림'; + @override late final _TranslationsProfileEditKo edit = _TranslationsProfileEditKo._(_root); +} + +// Path: login +class _TranslationsLoginKo implements TranslationsLoginEn { + _TranslationsLoginKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get username => '사용자 이름'; + @override String get amber => 'Amber로 로그인'; + @override String get key => '키로 로그인'; + @override String get create => '계정 만들기'; + @override late final _TranslationsLoginErrorKo error = _TranslationsLoginErrorKo._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusKo implements TranslationsStreamStatusEn { + _TranslationsStreamStatusKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get live => '라이브'; + @override String get ended => '종료'; + @override String get planned => '계획된'; +} + +// Path: stream.chat +class _TranslationsStreamChatKo implements TranslationsStreamChatEn { + _TranslationsStreamChatKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get disabled => '채팅 사용 안 함'; + @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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidKo raid = _TranslationsStreamChatRaidKo._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorKo implements TranslationsZapErrorEn { + _TranslationsZapErrorKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => '잘못된 사용자 지정 금액'; + @override String get no_wallet => '라이트닝 월렛이 설치되지 않았습니다.'; + @override String get no_lud16 => '번개 주소를 찾을 수 없습니다.'; +} + +// Path: profile.edit +class _TranslationsProfileEditKo implements TranslationsProfileEditEn { + _TranslationsProfileEditKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get display_name => '표시 이름'; + @override String get about => '정보'; + @override String get nip05 => '노스트르 주소'; + @override String get lud16 => '라이트닝 주소'; + @override late final _TranslationsProfileEditErrorKo error = _TranslationsProfileEditErrorKo._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorKo implements TranslationsLoginErrorEn { + _TranslationsLoginErrorKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get invalid_key => '잘못된 키'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteKo implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + + /// 채팅 메시지 입력 상자의 라벨 + @override String get label => '메시지 작성'; + + /// 사용자가 공개 키로만 로그인한 경우에 표시되는 채팅 입력 메시지 + @override String get no_signer => 'npub 로그인으로 메시지를 작성할 수 없습니다.'; + + /// 사용자가 로그아웃할 때 표시되는 채팅 입력 메시지 + @override String get login => '메시지를 보내려면 로그인하세요.'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeKo implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + + /// 배지를 받은 사용자 목록으로 이동하기 + @override String get awarded_to => '수상 대상'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidKo implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + + /// 다른 스트림으로 채팅 레이드 메시지 보내기 + @override String to({ required Object name}) => 'RAIDing ${name}'; + + /// 다른 스트림의 채팅 레이드 메시지 + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// 자동 레이드를 위한 카운트다운 타이머 + @override String countdown({ required Object time}) => '${time}에서 레이드'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorKo implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorKo._(this._root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String get logged_out => '로그아웃 시 프로필 수정 불가'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsKo { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return '아바타 업로드'; + case 'most_zapped_streamers': return '가장 많이 재핑된 스트리머'; + case 'no_user_found': return '사용자를 찾을 수 없습니다.'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, + one: '시청자 1명', + other: '${n} 시청자', + ); + case 'stream.status.live': return '라이브'; + case 'stream.status.ended': return '종료'; + case 'stream.status.planned': return '계획된'; + case 'stream.started': return ({ required Object timestamp}) => '시작 ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return '완료'; + case 'button.login': return '로그인'; + case 'button.logout': return '로그아웃'; + case 'button.edit_profile': return '프로필 수정'; + case 'button.follow': return '팔로우'; + case 'button.unfollow': return '언팔로우'; + case 'button.mute': return '뮤트'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return '지갑에서 열기'; + case 'zap.copy': return '클립보드에 복사'; + case 'zap.error.invalid_custom_amount': return '잘못된 사용자 지정 금액'; + case 'zap.error.no_wallet': return '라이트닝 월렛이 설치되지 않았습니다.'; + case 'zap.error.no_lud16': return '번개 주소를 찾을 수 없습니다.'; + case 'profile.past_streams': return '과거 스트림'; + case 'profile.edit.display_name': return '표시 이름'; + case 'profile.edit.about': return '정보'; + case 'profile.edit.nip05': return '노스트르 주소'; + case 'profile.edit.lud16': return '라이트닝 주소'; + case 'profile.edit.error.logged_out': return '로그아웃 시 프로필 수정 불가'; + case 'login.username': return '사용자 이름'; + case 'login.amber': return 'Amber로 로그인'; + case 'login.key': return '키로 로그인'; + case 'login.create': return '계정 만들기'; + case 'login.error.invalid_key': return '잘못된 키'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart new file mode 100644 index 0000000..0651125 --- /dev/null +++ b/lib/i18n/strings_nl.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsNl implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.nl, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsNl _root = this; // ignore: unused_field + + @override + TranslationsNl $copyWith({TranslationMetadata? meta}) => TranslationsNl(meta: meta ?? this.$meta); + + // Translations + + /// Tekst die de gebruiker vraagt om op de avatar-plaatshouder te klikken om te beginnen met uploaden + @override String get upload_avatar => 'Avatar uploaden'; + + /// Koers over beursgenoteerde topstreamers door zaps + @override String get most_zapped_streamers => 'Meeste Zapped Streamers'; + + /// Geen gebruiker gevonden bij het zoeken + @override String get no_user_found => 'Geen gebruiker gevonden'; + + /// Een anonieme gebruiker + @override String get anon => 'Anon'; + + /// Aantal kijkers van de stream + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, + one: '1 kijker', + other: '${n} kijkers', + ); + + @override late final _TranslationsStreamNl stream = _TranslationsStreamNl._(_root); + @override late final _TranslationsGoalNl goal = _TranslationsGoalNl._(_root); + @override late final _TranslationsButtonNl button = _TranslationsButtonNl._(_root); + @override late final _TranslationsEmbedNl embed = _TranslationsEmbedNl._(_root); + + /// Rubrieken op streamlijsten per streamtype live/beëindigd/gepland etc. + @override late final _TranslationsStreamListNl stream_list = _TranslationsStreamListNl._(_root); + + @override late final _TranslationsZapNl zap = _TranslationsZapNl._(_root); + @override late final _TranslationsProfileNl profile = _TranslationsProfileNl._(_root); + @override late final _TranslationsLoginNl login = _TranslationsLoginNl._(_root); +} + +// Path: stream +class _TranslationsStreamNl implements TranslationsStreamEn { + _TranslationsStreamNl._(this._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 late final _TranslationsStreamChatNl chat = _TranslationsStreamChatNl._(_root); +} + +// Path: goal +class _TranslationsGoalNl implements TranslationsGoalEn { + _TranslationsGoalNl._(this._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 get complete => 'COMPLETE'; +} + +// Path: button +class _TranslationsButtonNl implements TranslationsButtonEn { + _TranslationsButtonNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + + /// Knoptekst voor de aanmeldknop + @override String get login => 'Inloggen'; + + @override String get logout => 'Uitloggen'; + @override String get edit_profile => 'Bewerk Profiel'; + + /// Knoptekst voor de volgknop + @override String get follow => 'Volgen'; + + /// Knoptekst voor de knop Ontvolgen + @override String get unfollow => 'Ontvolgen'; + + @override String get mute => 'Dempen'; + @override String get unmute => 'Niet langer negeren'; + @override String get share => 'Deel'; + @override String get save => 'Opslaan'; +} + +// Path: embed +class _TranslationsEmbedNl implements TranslationsEmbedEn { + _TranslationsEmbedNl._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListNl implements TranslationsStreamListEn { + _TranslationsStreamListNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get following => 'Volgt'; + @override String get live => 'Live'; + @override String get planned => 'Gepland'; + @override String get ended => 'Beëindigd'; +} + +// Path: zap +class _TranslationsZapNl implements TranslationsZapEn { + _TranslationsZapNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Openen in portefeuille'; + @override String get copy => 'Gekopieerd naar klembord'; + @override late final _TranslationsZapErrorNl error = _TranslationsZapErrorNl._(_root); +} + +// Path: profile +class _TranslationsProfileNl implements TranslationsProfileEn { + _TranslationsProfileNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Afgelopen Streams'; + @override late final _TranslationsProfileEditNl edit = _TranslationsProfileEditNl._(_root); +} + +// Path: login +class _TranslationsLoginNl implements TranslationsLoginEn { + _TranslationsLoginNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get username => 'Gebruikersnaam'; + @override String get amber => 'Inloggen met Amber'; + @override String get key => 'Inloggen met sleutel'; + @override String get create => 'Account aanmaken'; + @override late final _TranslationsLoginErrorNl error = _TranslationsLoginErrorNl._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusNl implements TranslationsStreamStatusEn { + _TranslationsStreamStatusNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'GESLOTEN'; + @override String get planned => 'GEPLAND'; +} + +// Path: stream.chat +class _TranslationsStreamChatNl implements TranslationsStreamChatEn { + _TranslationsStreamChatNl._(this._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}'; + + /// Chatbericht met time-outgebeurtenissen + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' 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: [ + 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); + @override late final _TranslationsStreamChatRaidNl raid = _TranslationsStreamChatRaidNl._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorNl implements TranslationsZapErrorEn { + _TranslationsZapErrorNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Ongeldig aangepast bedrag'; + @override String get no_wallet => 'Geen bliksemportemonnee geïnstalleerd'; + @override String get no_lud16 => 'Geen bliksemadres gevonden'; +} + +// Path: profile.edit +class _TranslationsProfileEditNl implements TranslationsProfileEditEn { + _TranslationsProfileEditNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Naam weergeven'; + @override String get about => 'Over ons'; + @override String get nip05 => 'Nostr Adres'; + @override String get lud16 => 'Lightning adres'; + @override late final _TranslationsProfileEditErrorNl error = _TranslationsProfileEditErrorNl._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorNl implements TranslationsLoginErrorEn { + _TranslationsLoginErrorNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Ongeldige sleutel'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteNl implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + + /// Label op het invoerveld voor chatberichten + @override String get label => 'Schrijf bericht'; + + /// Chatinvoerbericht getoond wanneer de gebruiker alleen is ingelogd met pubkey + @override String get no_signer => 'Kan geen berichten schrijven met npub login'; + + /// Chatinvoerbericht dat wordt weergegeven wanneer de gebruiker is uitgelogd + @override String get login => 'Log in om berichten te verzenden'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeNl implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + + /// Kop boven de lijst met gebruikers die een badge hebben gekregen + @override String get awarded_to => 'Toegekend aan:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidNl implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + + /// Chat raid bericht naar een andere stream + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat invalbericht van een andere stream + @override String from({ required Object name}) => 'RAID VAN ${name}'; + + /// Afteltimer voor automatisch rijden + @override String countdown({ required Object time}) => 'Overvallen in ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorNl implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorNl._(this._root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Kan profiel niet bewerken als ik ben uitgelogd'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsNl { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Avatar uploaden'; + case 'most_zapped_streamers': return 'Meeste Zapped Streamers'; + case 'no_user_found': return 'Geen gebruiker gevonden'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, + one: '1 kijker', + other: '${n} kijkers', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'GESLOTEN'; + case 'stream.status.planned': return 'GEPLAND'; + case 'stream.started': return ({ required Object timestamp}) => 'Begonnen met ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'COMPLETE'; + case 'button.login': return 'Inloggen'; + case 'button.logout': return 'Uitloggen'; + case 'button.edit_profile': return 'Bewerk Profiel'; + case 'button.follow': return 'Volgen'; + case 'button.unfollow': return 'Ontvolgen'; + case 'button.mute': return 'Dempen'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Openen in portefeuille'; + case 'zap.copy': return 'Gekopieerd naar klembord'; + case 'zap.error.invalid_custom_amount': return 'Ongeldig aangepast bedrag'; + case 'zap.error.no_wallet': return 'Geen bliksemportemonnee geïnstalleerd'; + case 'zap.error.no_lud16': return 'Geen bliksemadres gevonden'; + case 'profile.past_streams': return 'Afgelopen Streams'; + case 'profile.edit.display_name': return 'Naam weergeven'; + case 'profile.edit.about': return 'Over ons'; + case 'profile.edit.nip05': return 'Nostr Adres'; + case 'profile.edit.lud16': return 'Lightning adres'; + case 'profile.edit.error.logged_out': return 'Kan profiel niet bewerken als ik ben uitgelogd'; + case 'login.username': return 'Gebruikersnaam'; + case 'login.amber': return 'Inloggen met Amber'; + case 'login.key': return 'Inloggen met sleutel'; + case 'login.create': return 'Account aanmaken'; + case 'login.error.invalid_key': return 'Ongeldige sleutel'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_no.g.dart b/lib/i18n/strings_no.g.dart new file mode 100644 index 0000000..8d291c5 --- /dev/null +++ b/lib/i18n/strings_no.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsNo implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsNo({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.no, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsNo _root = this; // ignore: unused_field + + @override + TranslationsNo $copyWith({TranslationMetadata? meta}) => TranslationsNo(meta: meta ?? this.$meta); + + // Translations + + /// Text prompting user to hit avatar placeholder to begin upload + @override String get upload_avatar => 'Upload Avatar'; + + /// Heading over listed top streamers by zaps + @override String get most_zapped_streamers => 'Most Zapped Streamers'; + + /// No user found when searching + @override String get no_user_found => 'No user found'; + + /// An anonymous user + @override String get anon => 'Anon'; + + /// Number of viewers of the stream + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('no'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + + @override late final _TranslationsStreamNo stream = _TranslationsStreamNo._(_root); + @override late final _TranslationsGoalNo goal = _TranslationsGoalNo._(_root); + @override late final _TranslationsButtonNo button = _TranslationsButtonNo._(_root); + @override late final _TranslationsEmbedNo embed = _TranslationsEmbedNo._(_root); + + /// Headings on stream lists by stream type live/ended/planned etc. + @override late final _TranslationsStreamListNo stream_list = _TranslationsStreamListNo._(_root); + + @override late final _TranslationsZapNo zap = _TranslationsZapNo._(_root); + @override late final _TranslationsProfileNo profile = _TranslationsProfileNo._(_root); + @override late final _TranslationsLoginNo login = _TranslationsLoginNo._(_root); +} + +// Path: stream +class _TranslationsStreamNo implements TranslationsStreamEn { + _TranslationsStreamNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusNo status = _TranslationsStreamStatusNo._(_root); + @override String started({ required Object timestamp}) => 'Started ${timestamp}'; + @override late final _TranslationsStreamChatNo chat = _TranslationsStreamChatNo._(_root); +} + +// Path: goal +class _TranslationsGoalNo implements TranslationsGoalEn { + _TranslationsGoalNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String title({ required Object amount}) => 'Goal: ${amount}'; + @override String remaining({ required Object amount}) => 'Remaining: ${amount}'; + @override String get complete => 'COMPLETE'; +} + +// Path: button +class _TranslationsButtonNo implements TranslationsButtonEn { + _TranslationsButtonNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + + /// Button text for the login button + @override String get login => 'Login'; + + @override String get logout => 'Logout'; + @override String get edit_profile => 'Edit Profile'; + + /// Button text for the follow button + @override String get follow => 'Follow'; + + /// Button text for the unfollow button + @override String get unfollow => 'Unfollow'; + + @override String get mute => 'Mute'; + @override String get unmute => 'Unmute'; + @override String get share => 'Share'; + @override String get save => 'Save'; +} + +// Path: embed +class _TranslationsEmbedNo implements TranslationsEmbedEn { + _TranslationsEmbedNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String article_by({ required Object name}) => 'Article by ${name}'; + @override String note_by({ required Object name}) => 'Note by ${name}'; + @override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; +} + +// Path: stream_list +class _TranslationsStreamListNo implements TranslationsStreamListEn { + _TranslationsStreamListNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String get following => 'Following'; + @override String get live => 'Live'; + @override String get planned => 'Planned'; + @override String get ended => 'Ended'; +} + +// Path: zap +class _TranslationsZapNo implements TranslationsZapEn { + _TranslationsZapNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String title({ required Object name}) => 'Zap ${name}'; + @override String get custom_amount => 'Custom Amount'; + @override String get confirm => 'Confirm'; + @override String get comment => 'Comment'; + @override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats'; + @override String get button_zap => 'Zap'; + @override String get button_open_wallet => 'Open in Wallet'; + @override String get copy => 'Copied to clipboard'; + @override late final _TranslationsZapErrorNo error = _TranslationsZapErrorNo._(_root); +} + +// Path: profile +class _TranslationsProfileNo implements TranslationsProfileEn { + _TranslationsProfileNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Past Streams'; + @override late final _TranslationsProfileEditNo edit = _TranslationsProfileEditNo._(_root); +} + +// Path: login +class _TranslationsLoginNo implements TranslationsLoginEn { + _TranslationsLoginNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String get username => 'Username'; + @override String get amber => 'Login with Amber'; + @override String get key => 'Login with Key'; + @override String get create => 'Create Account'; + @override late final _TranslationsLoginErrorNo error = _TranslationsLoginErrorNo._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusNo implements TranslationsStreamStatusEn { + _TranslationsStreamStatusNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'ENDED'; + @override String get planned => 'PLANNED'; +} + +// Path: stream.chat +class _TranslationsStreamChatNo implements TranslationsStreamChatEn { + _TranslationsStreamChatNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String get disabled => 'CHAT DISABLED'; + @override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; + + /// Chat message showing timeout events + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + + /// Stream ended footer at bottom of chat + @override String get ended => 'STREAM ENDED'; + + /// Chat message showing stream zaps + @override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + + @override late final _TranslationsStreamChatWriteNo write = _TranslationsStreamChatWriteNo._(_root); + @override late final _TranslationsStreamChatBadgeNo badge = _TranslationsStreamChatBadgeNo._(_root); + @override late final _TranslationsStreamChatRaidNo raid = _TranslationsStreamChatRaidNo._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorNo implements TranslationsZapErrorEn { + _TranslationsZapErrorNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Invalid custom amount'; + @override String get no_wallet => 'No lightning wallet installed'; + @override String get no_lud16 => 'No lightning address found'; +} + +// Path: profile.edit +class _TranslationsProfileEditNo implements TranslationsProfileEditEn { + _TranslationsProfileEditNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Display Name'; + @override String get about => 'About'; + @override String get nip05 => 'Nostr Address'; + @override String get lud16 => 'Lightning Address'; + @override late final _TranslationsProfileEditErrorNo error = _TranslationsProfileEditErrorNo._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorNo implements TranslationsLoginErrorEn { + _TranslationsLoginErrorNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Invalid key'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteNo implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + + /// Label on the chat message input box + @override String get label => 'Write message'; + + /// Chat input message shown when the user is logged in only with pubkey + @override String get no_signer => 'Can\'t write messages with npub login'; + + /// Chat input message shown when the user is logged out + @override String get login => 'Please login to send messages'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeNo implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + + /// Heading over list of users who are awarded a badge + @override String get awarded_to => 'Awarded to:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidNo implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + + /// Chat raid message to another stream + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat raid message from another stream + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// Countdown timer for auto-raiding + @override String countdown({ required Object time}) => 'Raiding in ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorNo implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorNo._(this._root); + + final TranslationsNo _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Cant edit profile when logged out'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsNo { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Upload Avatar'; + case 'most_zapped_streamers': return 'Most Zapped Streamers'; + case 'no_user_found': return 'No user found'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('no'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'ENDED'; + case 'stream.status.planned': return 'PLANNED'; + case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; + case 'stream.chat.disabled': return 'CHAT DISABLED'; + case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; + case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + case 'stream.chat.ended': return 'STREAM ENDED'; + case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + case 'stream.chat.write.label': return 'Write message'; + case 'stream.chat.write.no_signer': return 'Can\'t write messages with npub login'; + case 'stream.chat.write.login': return 'Please login to send messages'; + case 'stream.chat.badge.awarded_to': return 'Awarded to:'; + case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; + case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; + case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; + case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; + case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; + case 'goal.complete': return 'COMPLETE'; + case 'button.login': return 'Login'; + case 'button.logout': return 'Logout'; + case 'button.edit_profile': return 'Edit Profile'; + case 'button.follow': return 'Follow'; + case 'button.unfollow': return 'Unfollow'; + case 'button.mute': return 'Mute'; + case 'button.unmute': return 'Unmute'; + case 'button.share': return 'Share'; + case 'button.save': return 'Save'; + case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; + case 'embed.note_by': return ({ required Object name}) => 'Note by ${name}'; + case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream by ${name}'; + case 'stream_list.following': return 'Following'; + case 'stream_list.live': return 'Live'; + case 'stream_list.planned': return 'Planned'; + case 'stream_list.ended': return 'Ended'; + case 'zap.title': return ({ required Object name}) => 'Zap ${name}'; + case 'zap.custom_amount': return 'Custom Amount'; + case 'zap.confirm': return 'Confirm'; + case 'zap.comment': return 'Comment'; + case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats'; + case 'zap.button_zap': return 'Zap'; + case 'zap.button_open_wallet': return 'Open in Wallet'; + case 'zap.copy': return 'Copied to clipboard'; + case 'zap.error.invalid_custom_amount': return 'Invalid custom amount'; + case 'zap.error.no_wallet': return 'No lightning wallet installed'; + case 'zap.error.no_lud16': return 'No lightning address found'; + case 'profile.past_streams': return 'Past Streams'; + case 'profile.edit.display_name': return 'Display Name'; + case 'profile.edit.about': return 'About'; + case 'profile.edit.nip05': return 'Nostr Address'; + case 'profile.edit.lud16': return 'Lightning Address'; + case 'profile.edit.error.logged_out': return 'Cant edit profile when logged out'; + case 'login.username': return 'Username'; + case 'login.amber': return 'Login with Amber'; + case 'login.key': return 'Login with Key'; + case 'login.create': return 'Create Account'; + case 'login.error.invalid_key': return 'Invalid key'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart new file mode 100644 index 0000000..b1eba37 --- /dev/null +++ b/lib/i18n/strings_pl.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsPl implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.pl, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsPl _root = this; // ignore: unused_field + + @override + TranslationsPl $copyWith({TranslationMetadata? meta}) => TranslationsPl(meta: meta ?? this.$meta); + + // Translations + + /// Tekst zachęcający użytkownika do kliknięcia symbolu zastępczego awatara w celu rozpoczęcia przesyłania. + @override String get upload_avatar => 'Prześlij awatar'; + + /// Przechodzenie nad wymienionymi topowymi streamerami przez zapy + @override String get most_zapped_streamers => 'Większość zapped streamerów'; + + /// Nie znaleziono użytkownika podczas wyszukiwania + @override String get no_user_found => 'Nie znaleziono użytkownika'; + + /// Anonimowy użytkownik + @override String get anon => 'Anon'; + + /// Liczba widzów strumienia + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, + one: '1 przeglądarka', + other: '${n} widzowie', + ); + + @override late final _TranslationsStreamPl stream = _TranslationsStreamPl._(_root); + @override late final _TranslationsGoalPl goal = _TranslationsGoalPl._(_root); + @override late final _TranslationsButtonPl button = _TranslationsButtonPl._(_root); + @override late final _TranslationsEmbedPl embed = _TranslationsEmbedPl._(_root); + + /// Nagłówki na listach strumieni według typu strumienia na żywo / zakończony / planowany itp. + @override late final _TranslationsStreamListPl stream_list = _TranslationsStreamListPl._(_root); + + @override late final _TranslationsZapPl zap = _TranslationsZapPl._(_root); + @override late final _TranslationsProfilePl profile = _TranslationsProfilePl._(_root); + @override late final _TranslationsLoginPl login = _TranslationsLoginPl._(_root); +} + +// Path: stream +class _TranslationsStreamPl implements TranslationsStreamEn { + _TranslationsStreamPl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusPl status = _TranslationsStreamStatusPl._(_root); + @override String started({ required Object timestamp}) => 'Start ${timestamp}'; + @override late final _TranslationsStreamChatPl chat = _TranslationsStreamChatPl._(_root); +} + +// Path: goal +class _TranslationsGoalPl implements TranslationsGoalEn { + _TranslationsGoalPl._(this._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 get complete => 'ZAKOŃCZONE'; +} + +// Path: button +class _TranslationsButtonPl implements TranslationsButtonEn { + _TranslationsButtonPl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + + /// Tekst przycisku logowania + @override String get login => 'Logowanie'; + + @override String get logout => 'Wylogowanie'; + @override String get edit_profile => 'Edytuj profil'; + + /// Tekst przycisku dla przycisku śledzenia + @override String get follow => 'Śledź'; + + /// Tekst przycisku cofnięcia obserwowania + @override String get unfollow => 'Nie obserwuj'; + + @override String get mute => 'Wyciszenie'; + @override String get unmute => 'Wyłącz wyciszenie'; + @override String get share => 'Udział'; + @override String get save => 'Zapisz'; +} + +// Path: embed +class _TranslationsEmbedPl implements TranslationsEmbedEn { + _TranslationsEmbedPl._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListPl implements TranslationsStreamListEn { + _TranslationsStreamListPl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get following => 'Następujący'; + @override String get live => 'Na żywo'; + @override String get planned => 'Planowane'; + @override String get ended => 'Zakończony'; +} + +// Path: zap +class _TranslationsZapPl implements TranslationsZapEn { + _TranslationsZapPl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Otwórz w portfelu'; + @override String get copy => 'Skopiowane do schowka'; + @override late final _TranslationsZapErrorPl error = _TranslationsZapErrorPl._(_root); +} + +// Path: profile +class _TranslationsProfilePl implements TranslationsProfileEn { + _TranslationsProfilePl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Poprzednie strumienie'; + @override late final _TranslationsProfileEditPl edit = _TranslationsProfileEditPl._(_root); +} + +// Path: login +class _TranslationsLoginPl implements TranslationsLoginEn { + _TranslationsLoginPl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get username => 'Nazwa użytkownika'; + @override String get amber => 'Zaloguj się za pomocą Amber'; + @override String get key => 'Logowanie za pomocą klucza'; + @override String get create => 'Utwórz konto'; + @override late final _TranslationsLoginErrorPl error = _TranslationsLoginErrorPl._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusPl implements TranslationsStreamStatusEn { + _TranslationsStreamStatusPl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get live => 'NA ŻYWO'; + @override String get ended => 'ZAKOŃCZONY'; + @override String get planned => 'PLANOWANE'; +} + +// Path: stream.chat +class _TranslationsStreamChatPl implements TranslationsStreamChatEn { + _TranslationsStreamChatPl._(this._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}'; + + /// 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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidPl raid = _TranslationsStreamChatRaidPl._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorPl implements TranslationsZapErrorEn { + _TranslationsZapErrorPl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Nieprawidłowa kwota niestandardowa'; + @override String get no_wallet => 'Brak zainstalowanego portfela Lightning'; + @override String get no_lud16 => 'Nie znaleziono adresu pioruna'; +} + +// Path: profile.edit +class _TranslationsProfileEditPl implements TranslationsProfileEditEn { + _TranslationsProfileEditPl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Wyświetlana nazwa'; + @override String get about => 'O'; + @override String get nip05 => 'Adres Nostr'; + @override String get lud16 => 'Adres błyskawicy'; + @override late final _TranslationsProfileEditErrorPl error = _TranslationsProfileEditErrorPl._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorPl implements TranslationsLoginErrorEn { + _TranslationsLoginErrorPl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Nieprawidłowy klucz'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWritePl implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWritePl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + + /// Etykieta w polu wprowadzania wiadomości czatu + @override String get label => 'Napisz wiadomość'; + + /// Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest zalogowany tylko za pomocą klucza pubkey + @override String get no_signer => 'Nie można pisać wiadomości z loginem npub'; + + /// Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest wylogowany + @override String get login => 'Zaloguj się, aby wysyłać wiadomości'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgePl implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgePl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + + /// Nagłówek nad listą użytkowników, którzy otrzymali odznakę + @override String get awarded_to => 'Przyznano:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidPl implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidPl._(this._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}'; + + /// Nalot na czat z innego strumienia + @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}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorPl implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorPl._(this._root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Nie można edytować profilu po wylogowaniu'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsPl { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Prześlij awatar'; + case 'most_zapped_streamers': return 'Większość zapped streamerów'; + case 'no_user_found': return 'Nie znaleziono użytkownika'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, + one: '1 przeglądarka', + other: '${n} widzowie', + ); + 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.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: [ + 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: [ + 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 'goal.complete': return 'ZAKOŃCZONE'; + case 'button.login': return 'Logowanie'; + case 'button.logout': return 'Wylogowanie'; + case 'button.edit_profile': return 'Edytuj profil'; + case 'button.follow': return 'Śledź'; + case 'button.unfollow': return 'Nie obserwuj'; + case 'button.mute': return 'Wyciszenie'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Otwórz w portfelu'; + case 'zap.copy': return 'Skopiowane do schowka'; + case 'zap.error.invalid_custom_amount': return 'Nieprawidłowa kwota niestandardowa'; + case 'zap.error.no_wallet': return 'Brak zainstalowanego portfela Lightning'; + case 'zap.error.no_lud16': return 'Nie znaleziono adresu pioruna'; + case 'profile.past_streams': return 'Poprzednie strumienie'; + case 'profile.edit.display_name': return 'Wyświetlana nazwa'; + case 'profile.edit.about': return 'O'; + case 'profile.edit.nip05': return 'Adres Nostr'; + case 'profile.edit.lud16': return 'Adres błyskawicy'; + case 'profile.edit.error.logged_out': return 'Nie można edytować profilu po wylogowaniu'; + case 'login.username': return 'Nazwa użytkownika'; + case 'login.amber': return 'Zaloguj się za pomocą Amber'; + case 'login.key': return 'Logowanie za pomocą klucza'; + case 'login.create': return 'Utwórz konto'; + case 'login.error.invalid_key': return 'Nieprawidłowy klucz'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart new file mode 100644 index 0000000..50c28f0 --- /dev/null +++ b/lib/i18n/strings_pt.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsPt implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.pt, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsPt _root = this; // ignore: unused_field + + @override + TranslationsPt $copyWith({TranslationMetadata? meta}) => TranslationsPt(meta: meta ?? this.$meta); + + // Translations + + /// Texto solicitando que o usuário clique no espaço reservado do avatar para iniciar o upload + @override String get upload_avatar => 'Carregar Avatar'; + + /// Dirigindo-se para as principais serpentinas listadas por zaps + @override String get most_zapped_streamers => 'Streamers mais afetados'; + + /// Nenhum usuário foi encontrado durante a pesquisa + @override String get no_user_found => 'Nenhum usuário encontrado'; + + /// Um usuário anônimo + @override String get anon => 'Anônimo'; + + /// Número de espectadores da transmissão + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, + one: '1 visualizador', + other: '${n} espectadores', + ); + + @override late final _TranslationsStreamPt stream = _TranslationsStreamPt._(_root); + @override late final _TranslationsGoalPt goal = _TranslationsGoalPt._(_root); + @override late final _TranslationsButtonPt button = _TranslationsButtonPt._(_root); + @override late final _TranslationsEmbedPt embed = _TranslationsEmbedPt._(_root); + + /// Cabeçalhos nas listas de transmissões por tipo de transmissão ao vivo/terminada/planejada etc. + @override late final _TranslationsStreamListPt stream_list = _TranslationsStreamListPt._(_root); + + @override late final _TranslationsZapPt zap = _TranslationsZapPt._(_root); + @override late final _TranslationsProfilePt profile = _TranslationsProfilePt._(_root); + @override late final _TranslationsLoginPt login = _TranslationsLoginPt._(_root); +} + +// Path: stream +class _TranslationsStreamPt implements TranslationsStreamEn { + _TranslationsStreamPt._(this._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 late final _TranslationsStreamChatPt chat = _TranslationsStreamChatPt._(_root); +} + +// Path: goal +class _TranslationsGoalPt implements TranslationsGoalEn { + _TranslationsGoalPt._(this._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 get complete => 'COMPLETO'; +} + +// Path: button +class _TranslationsButtonPt implements TranslationsButtonEn { + _TranslationsButtonPt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + + /// Texto do botão para o botão de login + @override String get login => 'Entrar'; + + @override String get logout => 'Sair'; + @override String get edit_profile => 'Editar perfil'; + + /// Texto do botão para o botão Seguir + @override String get follow => 'Seguir'; + + /// Texto do botão para o botão deixar de seguir + @override String get unfollow => 'Deixar de seguir'; + + @override String get mute => 'Silenciar'; + @override String get unmute => 'Desmutar'; + @override String get share => 'Compartilhar'; + @override String get save => 'Salvar'; +} + +// Path: embed +class _TranslationsEmbedPt implements TranslationsEmbedEn { + _TranslationsEmbedPt._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListPt implements TranslationsStreamListEn { + _TranslationsStreamListPt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get following => 'Seguindo'; + @override String get live => 'Ao vivo'; + @override String get planned => 'Planejado'; + @override String get ended => 'Encerrado'; +} + +// Path: zap +class _TranslationsZapPt implements TranslationsZapEn { + _TranslationsZapPt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Abrir na carteira'; + @override String get copy => 'Copiado para a área de transferência'; + @override late final _TranslationsZapErrorPt error = _TranslationsZapErrorPt._(_root); +} + +// Path: profile +class _TranslationsProfilePt implements TranslationsProfileEn { + _TranslationsProfilePt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Transmissões Passadas'; + @override late final _TranslationsProfileEditPt edit = _TranslationsProfileEditPt._(_root); +} + +// Path: login +class _TranslationsLoginPt implements TranslationsLoginEn { + _TranslationsLoginPt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get username => 'Nome de usuário'; + @override String get amber => 'Faça login com o Amber'; + @override String get key => 'Login com chave'; + @override String get create => 'Criar Conta'; + @override late final _TranslationsLoginErrorPt error = _TranslationsLoginErrorPt._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusPt implements TranslationsStreamStatusEn { + _TranslationsStreamStatusPt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get live => 'AO VIVO'; + @override String get ended => 'FINALIZADO'; + @override String get planned => 'PLANEJADO'; +} + +// Path: stream.chat +class _TranslationsStreamChatPt implements TranslationsStreamChatEn { + _TranslationsStreamChatPt._(this._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}'; + + /// 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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidPt raid = _TranslationsStreamChatRaidPt._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorPt implements TranslationsZapErrorEn { + _TranslationsZapErrorPt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Valor personalizado inválido'; + @override String get no_wallet => 'Nenhuma carteira lightning instalada'; + @override String get no_lud16 => 'Nenhum endereço de raio encontrado'; +} + +// Path: profile.edit +class _TranslationsProfileEditPt implements TranslationsProfileEditEn { + _TranslationsProfileEditPt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Nome de exibição'; + @override String get about => 'Sobre'; + @override String get nip05 => 'Endereço do Nostr'; + @override String get lud16 => 'Endereço Lightning'; + @override late final _TranslationsProfileEditErrorPt error = _TranslationsProfileEditErrorPt._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorPt implements TranslationsLoginErrorEn { + _TranslationsLoginErrorPt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Chave inválida'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWritePt implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWritePt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + + /// Rótulo na caixa de entrada da mensagem de bate-papo + @override String get label => 'Escrever mensagem'; + + /// Mensagem de entrada de bate-papo exibida quando o usuário está conectado apenas com a pubkey + @override String get no_signer => 'Não é possível escrever mensagens com o login do npub'; + + /// Mensagem de entrada de chat exibida quando o usuário está desconectado + @override String get login => 'Faça login para enviar mensagens'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgePt implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgePt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + + /// Cabeçalho sobre a lista de usuários que receberam um emblema + @override String get awarded_to => 'Prêmio concedido a:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidPt implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidPt._(this._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}'; + + /// Mensagem de invasão de bate-papo de outro fluxo + @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}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorPt implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorPt._(this._root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Não é possível editar o perfil quando se está desconectado'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsPt { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Carregar Avatar'; + case 'most_zapped_streamers': return 'Streamers mais afetados'; + case 'no_user_found': return 'Nenhum usuário encontrado'; + case 'anon': return 'Anônimo'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, + one: '1 visualizador', + other: '${n} espectadores', + ); + case 'stream.status.live': return 'AO VIVO'; + case 'stream.status.ended': return 'FINALIZADO'; + case 'stream.status.planned': return 'PLANEJADO'; + case 'stream.started': return ({ required Object timestamp}) => 'Iniciado em ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'COMPLETO'; + case 'button.login': return 'Entrar'; + case 'button.logout': return 'Sair'; + case 'button.edit_profile': return 'Editar perfil'; + case 'button.follow': return 'Seguir'; + case 'button.unfollow': return 'Deixar de seguir'; + case 'button.mute': return 'Silenciar'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Abrir na carteira'; + case 'zap.copy': return 'Copiado para a área de transferência'; + case 'zap.error.invalid_custom_amount': return 'Valor personalizado inválido'; + case 'zap.error.no_wallet': return 'Nenhuma carteira lightning instalada'; + case 'zap.error.no_lud16': return 'Nenhum endereço de raio encontrado'; + case 'profile.past_streams': return 'Transmissões Passadas'; + case 'profile.edit.display_name': return 'Nome de exibição'; + case 'profile.edit.about': return 'Sobre'; + case 'profile.edit.nip05': return 'Endereço do Nostr'; + case 'profile.edit.lud16': return 'Endereço Lightning'; + case 'profile.edit.error.logged_out': return 'Não é possível editar o perfil quando se está desconectado'; + case 'login.username': return 'Nome de usuário'; + case 'login.amber': return 'Faça login com o Amber'; + case 'login.key': return 'Login com chave'; + case 'login.create': return 'Criar Conta'; + case 'login.error.invalid_key': return 'Chave inválida'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_ro.g.dart b/lib/i18n/strings_ro.g.dart new file mode 100644 index 0000000..361b869 --- /dev/null +++ b/lib/i18n/strings_ro.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsRo implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.ro, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsRo _root = this; // ignore: unused_field + + @override + TranslationsRo $copyWith({TranslationMetadata? meta}) => TranslationsRo(meta: meta ?? this.$meta); + + // Translations + + /// Text care solicită utilizatorului să atingă marcajul avatar pentru a începe încărcarea + @override String get upload_avatar => 'Încărcați Avatar'; + + /// Cap peste streamers de top enumerate de zaps + @override String get most_zapped_streamers => 'Cele mai multe Streamers Zapped'; + + /// Nu s-a găsit niciun utilizator la căutare + @override String get no_user_found => 'Niciun utilizator găsit'; + + /// Un utilizator anonim + @override String get anon => 'Anon'; + + /// Numărul de telespectatori ai fluxului + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n, + one: '1 vizualizator', + other: '${n} telespectatori', + ); + + @override late final _TranslationsStreamRo stream = _TranslationsStreamRo._(_root); + @override late final _TranslationsGoalRo goal = _TranslationsGoalRo._(_root); + @override late final _TranslationsButtonRo button = _TranslationsButtonRo._(_root); + @override late final _TranslationsEmbedRo embed = _TranslationsEmbedRo._(_root); + + /// Rubrici pe listele de fluxuri în funcție de tipul fluxului în direct/terminat/planificat etc. + @override late final _TranslationsStreamListRo stream_list = _TranslationsStreamListRo._(_root); + + @override late final _TranslationsZapRo zap = _TranslationsZapRo._(_root); + @override late final _TranslationsProfileRo profile = _TranslationsProfileRo._(_root); + @override late final _TranslationsLoginRo login = _TranslationsLoginRo._(_root); +} + +// Path: stream +class _TranslationsStreamRo implements TranslationsStreamEn { + _TranslationsStreamRo._(this._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 late final _TranslationsStreamChatRo chat = _TranslationsStreamChatRo._(_root); +} + +// Path: goal +class _TranslationsGoalRo implements TranslationsGoalEn { + _TranslationsGoalRo._(this._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 get complete => 'COMPLET'; +} + +// Path: button +class _TranslationsButtonRo implements TranslationsButtonEn { + _TranslationsButtonRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + + /// Textul butonului pentru butonul de conectare + @override String get login => 'Autentificare'; + + @override String get logout => 'Ieșire'; + @override String get edit_profile => 'Editare profil'; + + /// Textul butonului pentru butonul de urmărire + @override String get follow => 'Urmați'; + + /// Textul butonului pentru butonul unfollow + @override String get unfollow => 'Unfollow'; + + @override String get mute => 'Mut'; + @override String get unmute => 'Dezactivați'; + @override String get share => 'Share'; + @override String get save => 'Salvați'; +} + +// Path: embed +class _TranslationsEmbedRo implements TranslationsEmbedEn { + _TranslationsEmbedRo._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListRo implements TranslationsStreamListEn { + _TranslationsStreamListRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + @override String get following => 'În urma'; + @override String get live => 'În direct'; + @override String get planned => 'Planificate'; + @override String get ended => 'Încheiat'; +} + +// Path: zap +class _TranslationsZapRo implements TranslationsZapEn { + _TranslationsZapRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Deschide în portofel'; + @override String get copy => 'Copiat în clipboard'; + @override late final _TranslationsZapErrorRo error = _TranslationsZapErrorRo._(_root); +} + +// Path: profile +class _TranslationsProfileRo implements TranslationsProfileEn { + _TranslationsProfileRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Fluxuri trecute'; + @override late final _TranslationsProfileEditRo edit = _TranslationsProfileEditRo._(_root); +} + +// Path: login +class _TranslationsLoginRo implements TranslationsLoginEn { + _TranslationsLoginRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + @override String get username => 'Nume utilizator'; + @override String get amber => 'Conectați-vă cu Amber'; + @override String get key => 'Autentificare cu cheie'; + @override String get create => 'Creare cont'; + @override late final _TranslationsLoginErrorRo error = _TranslationsLoginErrorRo._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusRo implements TranslationsStreamStatusEn { + _TranslationsStreamStatusRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + @override String get live => 'ÎN DIRECT'; + @override String get ended => 'TERMINAT'; + @override String get planned => 'PLANIFICATE'; +} + +// Path: stream.chat +class _TranslationsStreamChatRo implements TranslationsStreamChatEn { + _TranslationsStreamChatRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + @override String get disabled => 'CHAT DEZACTIVAT'; + @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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidRo raid = _TranslationsStreamChatRaidRo._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorRo implements TranslationsZapErrorEn { + _TranslationsZapErrorRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Sumă personalizată invalidă'; + @override String get no_wallet => 'Nu este instalat niciun portofel Lightning'; + @override String get no_lud16 => 'Nu a fost găsită nicio adresă de fulgere'; +} + +// Path: profile.edit +class _TranslationsProfileEditRo implements TranslationsProfileEditEn { + _TranslationsProfileEditRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Nume afișat'; + @override String get about => 'Despre'; + @override String get nip05 => 'Adresa Nostr'; + @override String get lud16 => 'Adresa fulgerului'; + @override late final _TranslationsProfileEditErrorRo error = _TranslationsProfileEditErrorRo._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorRo implements TranslationsLoginErrorEn { + _TranslationsLoginErrorRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Cheie invalidă'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteRo implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + + /// Etichetă pe caseta de introducere a mesajului de chat + @override String get label => 'Scrieți mesajul'; + + /// Mesajul de intrare în chat afișat atunci când utilizatorul este conectat doar cu pubkey + @override String get no_signer => 'Nu se pot scrie mesaje cu autentificarea npub'; + + /// Mesajul de intrare în chat afișat atunci când utilizatorul este deconectat + @override String get login => 'Vă rugăm să vă autentificați pentru a trimite mesaje'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeRo implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + + /// Antet peste lista de utilizatori care au primit o insignă + @override String get awarded_to => 'Premiat pentru:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidRo implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + + /// Chat mesaj raid la un alt flux + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat raid mesaj din alt flux + @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}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorRo implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorRo._(this._root); + + final TranslationsRo _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Nu pot edita profilul când sunt deconectat'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsRo { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Încărcați Avatar'; + case 'most_zapped_streamers': return 'Cele mai multe Streamers Zapped'; + case 'no_user_found': return 'Niciun utilizator găsit'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ro'))(n, + one: '1 vizualizator', + other: '${n} telespectatori', + ); + case 'stream.status.live': return 'ÎN DIRECT'; + case 'stream.status.ended': return 'TERMINAT'; + case 'stream.status.planned': return 'PLANIFICATE'; + case 'stream.started': return ({ required Object timestamp}) => 'A început ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'COMPLET'; + case 'button.login': return 'Autentificare'; + case 'button.logout': return 'Ieșire'; + case 'button.edit_profile': return 'Editare profil'; + case 'button.follow': return 'Urmați'; + case 'button.unfollow': return 'Unfollow'; + case 'button.mute': return 'Mut'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Deschide în portofel'; + case 'zap.copy': return 'Copiat în clipboard'; + case 'zap.error.invalid_custom_amount': return 'Sumă personalizată invalidă'; + case 'zap.error.no_wallet': return 'Nu este instalat niciun portofel Lightning'; + case 'zap.error.no_lud16': return 'Nu a fost găsită nicio adresă de fulgere'; + case 'profile.past_streams': return 'Fluxuri trecute'; + case 'profile.edit.display_name': return 'Nume afișat'; + case 'profile.edit.about': return 'Despre'; + case 'profile.edit.nip05': return 'Adresa Nostr'; + case 'profile.edit.lud16': return 'Adresa fulgerului'; + case 'profile.edit.error.logged_out': return 'Nu pot edita profilul când sunt deconectat'; + case 'login.username': return 'Nume utilizator'; + case 'login.amber': return 'Conectați-vă cu Amber'; + case 'login.key': return 'Autentificare cu cheie'; + case 'login.create': return 'Creare cont'; + case 'login.error.invalid_key': return 'Cheie invalidă'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart new file mode 100644 index 0000000..cf2dfae --- /dev/null +++ b/lib/i18n/strings_ru.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsRu implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.ru, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsRu _root = this; // ignore: unused_field + + @override + TranslationsRu $copyWith({TranslationMetadata? meta}) => TranslationsRu(meta: meta ?? this.$meta); + + // Translations + + /// Текст, побуждающий пользователя нажать кнопку с изображением аватара, чтобы начать загрузку + @override String get upload_avatar => 'Загрузить аватар'; + + /// Направляясь по перечисленным верхним стримерам с помощью запс + @override String get most_zapped_streamers => 'Самые прыткие стримеры'; + + /// Пользователь не найден при поиске + @override String get no_user_found => 'Пользователь не найден'; + + /// Анонимный пользователь + @override String get anon => 'Аноним'; + + /// Количество зрителей потока + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, + one: '1 зритель', + other: '${n} зрителей', + ); + + @override late final _TranslationsStreamRu stream = _TranslationsStreamRu._(_root); + @override late final _TranslationsGoalRu goal = _TranslationsGoalRu._(_root); + @override late final _TranslationsButtonRu button = _TranslationsButtonRu._(_root); + @override late final _TranslationsEmbedRu embed = _TranslationsEmbedRu._(_root); + + /// Заголовки в списках потоков по типу потока - живой/законченный/запланированный и т. д. + @override late final _TranslationsStreamListRu stream_list = _TranslationsStreamListRu._(_root); + + @override late final _TranslationsZapRu zap = _TranslationsZapRu._(_root); + @override late final _TranslationsProfileRu profile = _TranslationsProfileRu._(_root); + @override late final _TranslationsLoginRu login = _TranslationsLoginRu._(_root); +} + +// Path: stream +class _TranslationsStreamRu implements TranslationsStreamEn { + _TranslationsStreamRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusRu status = _TranslationsStreamStatusRu._(_root); + @override String started({ required Object timestamp}) => 'Начало ${timestamp}'; + @override late final _TranslationsStreamChatRu chat = _TranslationsStreamChatRu._(_root); +} + +// Path: goal +class _TranslationsGoalRu implements TranslationsGoalEn { + _TranslationsGoalRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @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); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + + /// Текст кнопки для входа в систему + @override String get login => 'Логин'; + + @override String get logout => 'Выйти'; + @override String get edit_profile => 'Редактировать профиль'; + + /// Текст кнопки для кнопки следования + @override String get follow => 'Подписаться'; + + /// Текст кнопки для кнопки "Развернуть + @override String get unfollow => 'Отписаться'; + + @override String get mute => 'Заглушить'; + @override String get unmute => 'Включить уведомления'; + @override String get share => 'Поделиться'; + @override String get save => 'Сохранить'; +} + +// Path: embed +class _TranslationsEmbedRu implements TranslationsEmbedEn { + _TranslationsEmbedRu._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListRu implements TranslationsStreamListEn { + _TranslationsStreamListRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get following => 'Подписки'; + @override String get live => 'Прямой эфир'; + @override String get planned => 'Запланировано'; + @override String get ended => 'Завершено'; +} + +// Path: zap +class _TranslationsZapRu implements TranslationsZapEn { + _TranslationsZapRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Зап'; + @override String get button_open_wallet => 'Открыть в кошельке'; + @override String get copy => 'Скопировано в буфер обмена'; + @override late final _TranslationsZapErrorRu error = _TranslationsZapErrorRu._(_root); +} + +// Path: profile +class _TranslationsProfileRu implements TranslationsProfileEn { + _TranslationsProfileRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Предыдущие трансляции'; + @override late final _TranslationsProfileEditRu edit = _TranslationsProfileEditRu._(_root); +} + +// Path: login +class _TranslationsLoginRu implements TranslationsLoginEn { + _TranslationsLoginRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get username => 'Имя пользователя'; + @override String get amber => 'Войти с помощью Amber'; + @override String get key => 'Вход в систему с помощью ключа'; + @override String get create => 'Создать аккаунт'; + @override late final _TranslationsLoginErrorRu error = _TranslationsLoginErrorRu._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusRu implements TranslationsStreamStatusEn { + _TranslationsStreamStatusRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'КОНЕЦ'; + @override String get planned => 'ПЛАНИРУЕМЫЙ'; +} + +// Path: stream.chat +class _TranslationsStreamChatRu implements TranslationsStreamChatEn { + _TranslationsStreamChatRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get disabled => 'ЧАТ ОТКЛЮЧЕН'; + @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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidRu raid = _TranslationsStreamChatRaidRu._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorRu implements TranslationsZapErrorEn { + _TranslationsZapErrorRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Недопустимая пользовательская сумма'; + @override String get no_wallet => 'Кошелек молнии не установлен'; + @override String get no_lud16 => 'Адрес молнии не найден'; +} + +// Path: profile.edit +class _TranslationsProfileEditRu implements TranslationsProfileEditEn { + _TranslationsProfileEditRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Отображаемое имя'; + @override String get about => 'О себе'; + @override String get nip05 => 'Nostr адрес'; + @override String get lud16 => 'Lightning Адрес'; + @override late final _TranslationsProfileEditErrorRu error = _TranslationsProfileEditErrorRu._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorRu implements TranslationsLoginErrorEn { + _TranslationsLoginErrorRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Неверный ключ'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteRu implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + + /// Надпись на поле ввода сообщения чата + @override String get label => 'Написать сообщение'; + + /// Сообщение о входе в чат, отображаемое при входе пользователя только с pubkey + @override String get no_signer => 'Невозможно писать сообщения с логином npub'; + + /// Сообщение о входе в чат, отображаемое при выходе пользователя из системы + @override String get login => 'Пожалуйста, войдите в систему, чтобы отправлять сообщения'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeRu implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + + /// Заголовок над списком пользователей, награжденных значком + @override String get awarded_to => 'Награждается:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidRu implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + + /// Сообщение о рейде в чате в другой поток + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Сообщение о рейде в чате из другого потока + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// Таймер обратного отсчета для автопоездки + @override String countdown({ required Object time}) => 'Рейды в ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorRu implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorRu._(this._root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Невозможно редактировать профиль при выходе из системы'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsRu { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Загрузить аватар'; + case 'most_zapped_streamers': return 'Самые прыткие стримеры'; + case 'no_user_found': return 'Пользователь не найден'; + case 'anon': return 'Аноним'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, + one: '1 зритель', + other: '${n} зрителей', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'КОНЕЦ'; + case 'stream.status.planned': return 'ПЛАНИРУЕМЫЙ'; + case 'stream.started': return ({ required Object timestamp}) => 'Начало ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'КОМПЛЕКТ'; + case 'button.login': return 'Логин'; + case 'button.logout': return 'Выйти'; + case 'button.edit_profile': return 'Редактировать профиль'; + case 'button.follow': return 'Подписаться'; + case 'button.unfollow': return 'Отписаться'; + case 'button.mute': return 'Заглушить'; + 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 '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.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': return 'Зап'; + case 'zap.button_open_wallet': return 'Открыть в кошельке'; + case 'zap.copy': return 'Скопировано в буфер обмена'; + case 'zap.error.invalid_custom_amount': return 'Недопустимая пользовательская сумма'; + case 'zap.error.no_wallet': return 'Кошелек молнии не установлен'; + case 'zap.error.no_lud16': return 'Адрес молнии не найден'; + case 'profile.past_streams': return 'Предыдущие трансляции'; + case 'profile.edit.display_name': return 'Отображаемое имя'; + case 'profile.edit.about': return 'О себе'; + case 'profile.edit.nip05': return 'Nostr адрес'; + case 'profile.edit.lud16': return 'Lightning Адрес'; + case 'profile.edit.error.logged_out': return 'Невозможно редактировать профиль при выходе из системы'; + case 'login.username': return 'Имя пользователя'; + case 'login.amber': return 'Войти с помощью Amber'; + case 'login.key': return 'Вход в систему с помощью ключа'; + case 'login.create': return 'Создать аккаунт'; + case 'login.error.invalid_key': return 'Неверный ключ'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_sr.g.dart b/lib/i18n/strings_sr.g.dart new file mode 100644 index 0000000..9fea6a0 --- /dev/null +++ b/lib/i18n/strings_sr.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsSr implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsSr({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.sr, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsSr _root = this; // ignore: unused_field + + @override + TranslationsSr $copyWith({TranslationMetadata? meta}) => TranslationsSr(meta: meta ?? this.$meta); + + // Translations + + /// Text prompting user to hit avatar placeholder to begin upload + @override String get upload_avatar => 'Upload Avatar'; + + /// Heading over listed top streamers by zaps + @override String get most_zapped_streamers => 'Most Zapped Streamers'; + + /// No user found when searching + @override String get no_user_found => 'No user found'; + + /// An anonymous user + @override String get anon => 'Anon'; + + /// Number of viewers of the stream + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sr'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + + @override late final _TranslationsStreamSr stream = _TranslationsStreamSr._(_root); + @override late final _TranslationsGoalSr goal = _TranslationsGoalSr._(_root); + @override late final _TranslationsButtonSr button = _TranslationsButtonSr._(_root); + @override late final _TranslationsEmbedSr embed = _TranslationsEmbedSr._(_root); + + /// Headings on stream lists by stream type live/ended/planned etc. + @override late final _TranslationsStreamListSr stream_list = _TranslationsStreamListSr._(_root); + + @override late final _TranslationsZapSr zap = _TranslationsZapSr._(_root); + @override late final _TranslationsProfileSr profile = _TranslationsProfileSr._(_root); + @override late final _TranslationsLoginSr login = _TranslationsLoginSr._(_root); +} + +// Path: stream +class _TranslationsStreamSr implements TranslationsStreamEn { + _TranslationsStreamSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusSr status = _TranslationsStreamStatusSr._(_root); + @override String started({ required Object timestamp}) => 'Started ${timestamp}'; + @override late final _TranslationsStreamChatSr chat = _TranslationsStreamChatSr._(_root); +} + +// Path: goal +class _TranslationsGoalSr implements TranslationsGoalEn { + _TranslationsGoalSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String title({ required Object amount}) => 'Goal: ${amount}'; + @override String remaining({ required Object amount}) => 'Remaining: ${amount}'; + @override String get complete => 'COMPLETE'; +} + +// Path: button +class _TranslationsButtonSr implements TranslationsButtonEn { + _TranslationsButtonSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + + /// Button text for the login button + @override String get login => 'Login'; + + @override String get logout => 'Logout'; + @override String get edit_profile => 'Edit Profile'; + + /// Button text for the follow button + @override String get follow => 'Follow'; + + /// Button text for the unfollow button + @override String get unfollow => 'Unfollow'; + + @override String get mute => 'Mute'; + @override String get unmute => 'Unmute'; + @override String get share => 'Share'; + @override String get save => 'Save'; +} + +// Path: embed +class _TranslationsEmbedSr implements TranslationsEmbedEn { + _TranslationsEmbedSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String article_by({ required Object name}) => 'Article by ${name}'; + @override String note_by({ required Object name}) => 'Note by ${name}'; + @override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; +} + +// Path: stream_list +class _TranslationsStreamListSr implements TranslationsStreamListEn { + _TranslationsStreamListSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String get following => 'Following'; + @override String get live => 'Live'; + @override String get planned => 'Planned'; + @override String get ended => 'Ended'; +} + +// Path: zap +class _TranslationsZapSr implements TranslationsZapEn { + _TranslationsZapSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String title({ required Object name}) => 'Zap ${name}'; + @override String get custom_amount => 'Custom Amount'; + @override String get confirm => 'Confirm'; + @override String get comment => 'Comment'; + @override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats'; + @override String get button_zap => 'Zap'; + @override String get button_open_wallet => 'Open in Wallet'; + @override String get copy => 'Copied to clipboard'; + @override late final _TranslationsZapErrorSr error = _TranslationsZapErrorSr._(_root); +} + +// Path: profile +class _TranslationsProfileSr implements TranslationsProfileEn { + _TranslationsProfileSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Past Streams'; + @override late final _TranslationsProfileEditSr edit = _TranslationsProfileEditSr._(_root); +} + +// Path: login +class _TranslationsLoginSr implements TranslationsLoginEn { + _TranslationsLoginSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String get username => 'Username'; + @override String get amber => 'Login with Amber'; + @override String get key => 'Login with Key'; + @override String get create => 'Create Account'; + @override late final _TranslationsLoginErrorSr error = _TranslationsLoginErrorSr._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusSr implements TranslationsStreamStatusEn { + _TranslationsStreamStatusSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'ENDED'; + @override String get planned => 'PLANNED'; +} + +// Path: stream.chat +class _TranslationsStreamChatSr implements TranslationsStreamChatEn { + _TranslationsStreamChatSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String get disabled => 'CHAT DISABLED'; + @override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; + + /// Chat message showing timeout events + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + + /// Stream ended footer at bottom of chat + @override String get ended => 'STREAM ENDED'; + + /// Chat message showing stream zaps + @override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + + @override late final _TranslationsStreamChatWriteSr write = _TranslationsStreamChatWriteSr._(_root); + @override late final _TranslationsStreamChatBadgeSr badge = _TranslationsStreamChatBadgeSr._(_root); + @override late final _TranslationsStreamChatRaidSr raid = _TranslationsStreamChatRaidSr._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorSr implements TranslationsZapErrorEn { + _TranslationsZapErrorSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Invalid custom amount'; + @override String get no_wallet => 'No lightning wallet installed'; + @override String get no_lud16 => 'No lightning address found'; +} + +// Path: profile.edit +class _TranslationsProfileEditSr implements TranslationsProfileEditEn { + _TranslationsProfileEditSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Display Name'; + @override String get about => 'About'; + @override String get nip05 => 'Nostr Address'; + @override String get lud16 => 'Lightning Address'; + @override late final _TranslationsProfileEditErrorSr error = _TranslationsProfileEditErrorSr._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorSr implements TranslationsLoginErrorEn { + _TranslationsLoginErrorSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Invalid key'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteSr implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + + /// Label on the chat message input box + @override String get label => 'Write message'; + + /// Chat input message shown when the user is logged in only with pubkey + @override String get no_signer => 'Can\'t write messages with npub login'; + + /// Chat input message shown when the user is logged out + @override String get login => 'Please login to send messages'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeSr implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + + /// Heading over list of users who are awarded a badge + @override String get awarded_to => 'Awarded to:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidSr implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + + /// Chat raid message to another stream + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat raid message from another stream + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// Countdown timer for auto-raiding + @override String countdown({ required Object time}) => 'Raiding in ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorSr implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorSr._(this._root); + + final TranslationsSr _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Cant edit profile when logged out'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsSr { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Upload Avatar'; + case 'most_zapped_streamers': return 'Most Zapped Streamers'; + case 'no_user_found': return 'No user found'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sr'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'ENDED'; + case 'stream.status.planned': return 'PLANNED'; + case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; + case 'stream.chat.disabled': return 'CHAT DISABLED'; + case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; + case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + case 'stream.chat.ended': return 'STREAM ENDED'; + case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + case 'stream.chat.write.label': return 'Write message'; + case 'stream.chat.write.no_signer': return 'Can\'t write messages with npub login'; + case 'stream.chat.write.login': return 'Please login to send messages'; + case 'stream.chat.badge.awarded_to': return 'Awarded to:'; + case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; + case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; + case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; + case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; + case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; + case 'goal.complete': return 'COMPLETE'; + case 'button.login': return 'Login'; + case 'button.logout': return 'Logout'; + case 'button.edit_profile': return 'Edit Profile'; + case 'button.follow': return 'Follow'; + case 'button.unfollow': return 'Unfollow'; + case 'button.mute': return 'Mute'; + case 'button.unmute': return 'Unmute'; + case 'button.share': return 'Share'; + case 'button.save': return 'Save'; + case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; + case 'embed.note_by': return ({ required Object name}) => 'Note by ${name}'; + case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream by ${name}'; + case 'stream_list.following': return 'Following'; + case 'stream_list.live': return 'Live'; + case 'stream_list.planned': return 'Planned'; + case 'stream_list.ended': return 'Ended'; + case 'zap.title': return ({ required Object name}) => 'Zap ${name}'; + case 'zap.custom_amount': return 'Custom Amount'; + case 'zap.confirm': return 'Confirm'; + case 'zap.comment': return 'Comment'; + case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats'; + case 'zap.button_zap': return 'Zap'; + case 'zap.button_open_wallet': return 'Open in Wallet'; + case 'zap.copy': return 'Copied to clipboard'; + case 'zap.error.invalid_custom_amount': return 'Invalid custom amount'; + case 'zap.error.no_wallet': return 'No lightning wallet installed'; + case 'zap.error.no_lud16': return 'No lightning address found'; + case 'profile.past_streams': return 'Past Streams'; + case 'profile.edit.display_name': return 'Display Name'; + case 'profile.edit.about': return 'About'; + case 'profile.edit.nip05': return 'Nostr Address'; + case 'profile.edit.lud16': return 'Lightning Address'; + case 'profile.edit.error.logged_out': return 'Cant edit profile when logged out'; + case 'login.username': return 'Username'; + case 'login.amber': return 'Login with Amber'; + case 'login.key': return 'Login with Key'; + case 'login.create': return 'Create Account'; + case 'login.error.invalid_key': return 'Invalid key'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart new file mode 100644 index 0000000..ac0552f --- /dev/null +++ b/lib/i18n/strings_sv.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsSv implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.sv, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsSv _root = this; // ignore: unused_field + + @override + TranslationsSv $copyWith({TranslationMetadata? meta}) => TranslationsSv(meta: meta ?? this.$meta); + + // Translations + + /// Text som uppmanar användaren att trycka på avatarplatshållaren för att påbörja uppladdningen + @override String get upload_avatar => 'Ladda upp avatar'; + + /// Rubrik över listade toppstreamers av zaps + @override String get most_zapped_streamers => 'De flesta zappade streamers'; + + /// Ingen användare hittades vid sökning + @override String get no_user_found => 'Ingen användare hittades'; + + /// En anonym användare + @override String get anon => 'Anon'; + + /// Antal tittare på streamingen + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, + one: '1 tittare', + other: '${n} tittare', + ); + + @override late final _TranslationsStreamSv stream = _TranslationsStreamSv._(_root); + @override late final _TranslationsGoalSv goal = _TranslationsGoalSv._(_root); + @override late final _TranslationsButtonSv button = _TranslationsButtonSv._(_root); + @override late final _TranslationsEmbedSv embed = _TranslationsEmbedSv._(_root); + + /// Rubriker på strömlistor efter strömtyp live/avslutad/planerad etc. + @override late final _TranslationsStreamListSv stream_list = _TranslationsStreamListSv._(_root); + + @override late final _TranslationsZapSv zap = _TranslationsZapSv._(_root); + @override late final _TranslationsProfileSv profile = _TranslationsProfileSv._(_root); + @override late final _TranslationsLoginSv login = _TranslationsLoginSv._(_root); +} + +// Path: stream +class _TranslationsStreamSv implements TranslationsStreamEn { + _TranslationsStreamSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusSv status = _TranslationsStreamStatusSv._(_root); + @override String started({ required Object timestamp}) => 'Startade ${timestamp}'; + @override late final _TranslationsStreamChatSv chat = _TranslationsStreamChatSv._(_root); +} + +// Path: goal +class _TranslationsGoalSv implements TranslationsGoalEn { + _TranslationsGoalSv._(this._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 get complete => 'KOMPLETT'; +} + +// Path: button +class _TranslationsButtonSv implements TranslationsButtonEn { + _TranslationsButtonSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + + /// Knapptext för inloggningsknappen + @override String get login => 'Logga in'; + + @override String get logout => 'Logga ut'; + @override String get edit_profile => 'Redigera profil'; + + /// Knapptext för följ-knappen + @override String get follow => 'Följ'; + + /// Knapptext för avföljningsknappen + @override String get unfollow => 'Sluta följa'; + + @override String get mute => 'Tysta'; + @override String get unmute => 'Avtysta'; + @override String get share => 'Dela'; + @override String get save => 'Spara'; +} + +// Path: embed +class _TranslationsEmbedSv implements TranslationsEmbedEn { + _TranslationsEmbedSv._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListSv implements TranslationsStreamListEn { + _TranslationsStreamListSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get following => 'Följer'; + @override String get live => 'Live'; + @override String get planned => 'Planerade'; + @override String get ended => 'Avslutade'; +} + +// Path: zap +class _TranslationsZapSv implements TranslationsZapEn { + _TranslationsZapSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Öppna i plånboken'; + @override String get copy => 'Kopieras till urklipp'; + @override late final _TranslationsZapErrorSv error = _TranslationsZapErrorSv._(_root); +} + +// Path: profile +class _TranslationsProfileSv implements TranslationsProfileEn { + _TranslationsProfileSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Tidigare streamar'; + @override late final _TranslationsProfileEditSv edit = _TranslationsProfileEditSv._(_root); +} + +// Path: login +class _TranslationsLoginSv implements TranslationsLoginEn { + _TranslationsLoginSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get username => 'Användarnamn'; + @override String get amber => 'Logga in med Amber'; + @override String get key => 'Logga in med nyckel'; + @override String get create => 'Skapa konto'; + @override late final _TranslationsLoginErrorSv error = _TranslationsLoginErrorSv._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusSv implements TranslationsStreamStatusEn { + _TranslationsStreamStatusSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'AVSLUTAD'; + @override String get planned => 'PLANERADE'; +} + +// Path: stream.chat +class _TranslationsStreamChatSv implements TranslationsStreamChatEn { + _TranslationsStreamChatSv._(this._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}'; + + /// Chattmeddelande som visar timeout-händelser + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => 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: [ + 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); + @override late final _TranslationsStreamChatRaidSv raid = _TranslationsStreamChatRaidSv._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorSv implements TranslationsZapErrorEn { + _TranslationsZapErrorSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Ogiltigt anpassat belopp'; + @override String get no_wallet => 'Ingen blixtplånbok installerad'; + @override String get no_lud16 => 'Ingen blixtadress hittades'; +} + +// Path: profile.edit +class _TranslationsProfileEditSv implements TranslationsProfileEditEn { + _TranslationsProfileEditSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Visa namn'; + @override String get about => 'Om'; + @override String get nip05 => 'Nostr Adress'; + @override String get lud16 => 'Lightning-adress'; + @override late final _TranslationsProfileEditErrorSv error = _TranslationsProfileEditErrorSv._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorSv implements TranslationsLoginErrorEn { + _TranslationsLoginErrorSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Ogiltig nyckel'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteSv implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + + /// Etikett på inmatningsrutan för chattmeddelanden + @override String get label => 'Skriv meddelande'; + + /// Chattinmatningsmeddelande som visas när användaren endast är inloggad med pubkey + @override String get no_signer => 'Det går inte att skriva meddelanden med npub-inloggning'; + + /// Chattinmatningsmeddelande som visas när användaren är utloggad + @override String get login => 'Logga in för att skicka meddelanden'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeSv implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + + /// Rubrik över lista över användare som tilldelats en badge + @override String get awarded_to => 'Tilldelas till:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidSv implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + + /// Chatta raidmeddelande till en annan ström + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat raid-meddelande från en annan ström + @override String from({ required Object name}) => 'RAID FRÅN ${name}'; + + /// Nedräkningstimer för auto-raiding + @override String countdown({ required Object time}) => 'Raiding på ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorSv implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorSv._(this._root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Kan inte redigera profil när jag är utloggad'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsSv { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Ladda upp avatar'; + case 'most_zapped_streamers': return 'De flesta zappade streamers'; + case 'no_user_found': return 'Ingen användare hittades'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, + one: '1 tittare', + other: '${n} tittare', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'AVSLUTAD'; + case 'stream.status.planned': return 'PLANERADE'; + case 'stream.started': return ({ required Object timestamp}) => 'Startade ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'KOMPLETT'; + case 'button.login': return 'Logga in'; + case 'button.logout': return 'Logga ut'; + case 'button.edit_profile': return 'Redigera profil'; + case 'button.follow': return 'Följ'; + case 'button.unfollow': return 'Sluta följa'; + case 'button.mute': return 'Tysta'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Öppna i plånboken'; + case 'zap.copy': return 'Kopieras till urklipp'; + case 'zap.error.invalid_custom_amount': return 'Ogiltigt anpassat belopp'; + case 'zap.error.no_wallet': return 'Ingen blixtplånbok installerad'; + case 'zap.error.no_lud16': return 'Ingen blixtadress hittades'; + case 'profile.past_streams': return 'Tidigare streamar'; + case 'profile.edit.display_name': return 'Visa namn'; + case 'profile.edit.about': return 'Om'; + case 'profile.edit.nip05': return 'Nostr Adress'; + case 'profile.edit.lud16': return 'Lightning-adress'; + case 'profile.edit.error.logged_out': return 'Kan inte redigera profil när jag är utloggad'; + case 'login.username': return 'Användarnamn'; + case 'login.amber': return 'Logga in med Amber'; + case 'login.key': return 'Logga in med nyckel'; + case 'login.create': return 'Skapa konto'; + case 'login.error.invalid_key': return 'Ogiltig nyckel'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_tr.g.dart b/lib/i18n/strings_tr.g.dart new file mode 100644 index 0000000..e9ba8cc --- /dev/null +++ b/lib/i18n/strings_tr.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsTr implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.tr, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsTr _root = this; // ignore: unused_field + + @override + TranslationsTr $copyWith({TranslationMetadata? meta}) => TranslationsTr(meta: meta ?? this.$meta); + + // Translations + + /// Kullanıcının yüklemeye başlamak için avatar yer tutucusuna basmasını isteyen metin + @override String get upload_avatar => 'Avatar Yükle'; + + /// Zaps tarafından listelenen üst flamalar üzerinde ilerliyor + @override String get most_zapped_streamers => 'En Çok Zaplanan Flamalar'; + + /// Arama yaparken kullanıcı bulunamadı + @override String get no_user_found => 'Kullanıcı bulunamadı'; + + /// Anonim bir kullanıcı + @override String get anon => 'Anon'; + + /// Akışı izleyenlerin sayısı + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, + one: '1 izleyici', + other: '${n} izleyiciler', + ); + + @override late final _TranslationsStreamTr stream = _TranslationsStreamTr._(_root); + @override late final _TranslationsGoalTr goal = _TranslationsGoalTr._(_root); + @override late final _TranslationsButtonTr button = _TranslationsButtonTr._(_root); + @override late final _TranslationsEmbedTr embed = _TranslationsEmbedTr._(_root); + + /// Akış türüne göre akış listelerindeki başlıklar canlı/bitmiş/planlanan vb. + @override late final _TranslationsStreamListTr stream_list = _TranslationsStreamListTr._(_root); + + @override late final _TranslationsZapTr zap = _TranslationsZapTr._(_root); + @override late final _TranslationsProfileTr profile = _TranslationsProfileTr._(_root); + @override late final _TranslationsLoginTr login = _TranslationsLoginTr._(_root); +} + +// Path: stream +class _TranslationsStreamTr implements TranslationsStreamEn { + _TranslationsStreamTr._(this._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 late final _TranslationsStreamChatTr chat = _TranslationsStreamChatTr._(_root); +} + +// Path: goal +class _TranslationsGoalTr implements TranslationsGoalEn { + _TranslationsGoalTr._(this._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 get complete => 'TAMAMLANDI'; +} + +// Path: button +class _TranslationsButtonTr implements TranslationsButtonEn { + _TranslationsButtonTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + + /// Oturum açma düğmesi için düğme metni + @override String get login => 'Giriş'; + + @override String get logout => 'Oturum Kapatma'; + @override String get edit_profile => 'Profil Düzenle'; + + /// Takip et düğmesi için düğme metni + @override String get follow => 'Takip et'; + + /// Takibi bırak düğmesi için düğme metni + @override String get unfollow => 'Takibi bırak'; + + @override String get mute => 'Sessiz'; + @override String get unmute => 'Sesi aç'; + @override String get share => 'Paylaş'; + @override String get save => 'Kaydet'; +} + +// Path: embed +class _TranslationsEmbedTr implements TranslationsEmbedEn { + _TranslationsEmbedTr._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListTr implements TranslationsStreamListEn { + _TranslationsStreamListTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get following => 'Aşağıdaki'; + @override String get live => 'Canlı'; + @override String get planned => 'Planlanmış'; + @override String get ended => 'Bitti'; +} + +// Path: zap +class _TranslationsZapTr implements TranslationsZapEn { + _TranslationsZapTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap'; + @override String get button_open_wallet => 'Cüzdanda Aç'; + @override String get copy => 'Panoya kopyalandı'; + @override late final _TranslationsZapErrorTr error = _TranslationsZapErrorTr._(_root); +} + +// Path: profile +class _TranslationsProfileTr implements TranslationsProfileEn { + _TranslationsProfileTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Geçmiş Akışlar'; + @override late final _TranslationsProfileEditTr edit = _TranslationsProfileEditTr._(_root); +} + +// Path: login +class _TranslationsLoginTr implements TranslationsLoginEn { + _TranslationsLoginTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get username => 'Kullanıcı Adı'; + @override String get amber => 'Amber ile Giriş Yapın'; + @override String get key => 'Anahtar ile Giriş Yapın'; + @override String get create => 'Hesap Oluştur'; + @override late final _TranslationsLoginErrorTr error = _TranslationsLoginErrorTr._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusTr implements TranslationsStreamStatusEn { + _TranslationsStreamStatusTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get live => 'CANLI'; + @override String get ended => 'SONLANDI'; + @override String get planned => 'PLANLANMIŞ'; +} + +// Path: stream.chat +class _TranslationsStreamChatTr implements TranslationsStreamChatEn { + _TranslationsStreamChatTr._(this._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}'; + + /// 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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidTr raid = _TranslationsStreamChatRaidTr._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorTr implements TranslationsZapErrorEn { + _TranslationsZapErrorTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Geçersiz özel tutar'; + @override String get no_wallet => 'Lightning cüzdan yüklü değil'; + @override String get no_lud16 => 'Yıldırım adresi bulunamadı'; +} + +// Path: profile.edit +class _TranslationsProfileEditTr implements TranslationsProfileEditEn { + _TranslationsProfileEditTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Ekran Adı'; + @override String get about => 'Hakkında'; + @override String get nip05 => 'Nostr Adres'; + @override String get lud16 => 'Yıldırım Adres'; + @override late final _TranslationsProfileEditErrorTr error = _TranslationsProfileEditErrorTr._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorTr implements TranslationsLoginErrorEn { + _TranslationsLoginErrorTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Geçersiz anahtar'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteTr implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + + /// Sohbet mesajı giriş kutusundaki etiket + @override String get label => 'Mesaj yaz'; + + /// Kullanıcı yalnızca pubkey ile oturum açtığında gösterilen sohbet giriş mesajı + @override String get no_signer => 'Npub girişi ile mesaj yazılamıyor'; + + /// Kullanıcı oturumu kapatıldığında gösterilen sohbet giriş mesajı + @override String get login => 'Mesaj göndermek için lütfen giriş yapın'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeTr implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + + /// Rozet verilen kullanıcıların listesi üzerinde başlık + @override String get awarded_to => 'Ödüllendirildi:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidTr implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidTr._(this._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'; + + /// Başka bir akıştan sohbet baskını mesajı + @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'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorTr implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorTr._(this._root); + + final TranslationsTr _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Çıkış yapıldığında profil düzenlenemiyor'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsTr { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Avatar Yükle'; + case 'most_zapped_streamers': return 'En Çok Zaplanan Flamalar'; + case 'no_user_found': return 'Kullanıcı bulunamadı'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('tr'))(n, + one: '1 izleyici', + other: '${n} izleyiciler', + ); + case 'stream.status.live': return 'CANLI'; + case 'stream.status.ended': return 'SONLANDI'; + case 'stream.status.planned': return 'PLANLANMIŞ'; + case 'stream.started': return ({ required Object timestamp}) => 'Başlatıldı ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'TAMAMLANDI'; + case 'button.login': return 'Giriş'; + case 'button.logout': return 'Oturum Kapatma'; + case 'button.edit_profile': return 'Profil Düzenle'; + case 'button.follow': return 'Takip et'; + case 'button.unfollow': return 'Takibi bırak'; + case 'button.mute': return 'Sessiz'; + 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 '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.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': return 'Zap'; + case 'zap.button_open_wallet': return 'Cüzdanda Aç'; + case 'zap.copy': return 'Panoya kopyalandı'; + case 'zap.error.invalid_custom_amount': return 'Geçersiz özel tutar'; + case 'zap.error.no_wallet': return 'Lightning cüzdan yüklü değil'; + case 'zap.error.no_lud16': return 'Yıldırım adresi bulunamadı'; + case 'profile.past_streams': return 'Geçmiş Akışlar'; + case 'profile.edit.display_name': return 'Ekran Adı'; + case 'profile.edit.about': return 'Hakkında'; + case 'profile.edit.nip05': return 'Nostr Adres'; + case 'profile.edit.lud16': return 'Yıldırım Adres'; + case 'profile.edit.error.logged_out': return 'Çıkış yapıldığında profil düzenlenemiyor'; + case 'login.username': return 'Kullanıcı Adı'; + case 'login.amber': return 'Amber ile Giriş Yapın'; + case 'login.key': return 'Anahtar ile Giriş Yapın'; + case 'login.create': return 'Hesap Oluştur'; + case 'login.error.invalid_key': return 'Geçersiz anahtar'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_uk.g.dart b/lib/i18n/strings_uk.g.dart new file mode 100644 index 0000000..bef68aa --- /dev/null +++ b/lib/i18n/strings_uk.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsUk implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.uk, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsUk _root = this; // ignore: unused_field + + @override + TranslationsUk $copyWith({TranslationMetadata? meta}) => TranslationsUk(meta: meta ?? this.$meta); + + // Translations + + /// Текст, що пропонує користувачеві натиснути на заповнювач аватара, щоб почати завантаження + @override String get upload_avatar => 'Завантажити аватар'; + + /// Перехід до переліку найкращих стрімерів за запитами + @override String get most_zapped_streamers => 'Більшість стримерів, які були під напругою'; + + /// Користувача не знайдено при пошуку + @override String get no_user_found => 'Користувача не знайдено'; + + /// Анонімний користувач + @override String get anon => 'Анонім.'; + + /// Кількість глядачів стріму + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uk'))(n, + one: '1 глядач', + other: '${n} глядачі', + ); + + @override late final _TranslationsStreamUk stream = _TranslationsStreamUk._(_root); + @override late final _TranslationsGoalUk goal = _TranslationsGoalUk._(_root); + @override late final _TranslationsButtonUk button = _TranslationsButtonUk._(_root); + @override late final _TranslationsEmbedUk embed = _TranslationsEmbedUk._(_root); + + /// Заголовки у списках трансляцій за типом трансляції: наживо/закінчилася/запланована тощо. + @override late final _TranslationsStreamListUk stream_list = _TranslationsStreamListUk._(_root); + + @override late final _TranslationsZapUk zap = _TranslationsZapUk._(_root); + @override late final _TranslationsProfileUk profile = _TranslationsProfileUk._(_root); + @override late final _TranslationsLoginUk login = _TranslationsLoginUk._(_root); +} + +// Path: stream +class _TranslationsStreamUk implements TranslationsStreamEn { + _TranslationsStreamUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusUk status = _TranslationsStreamStatusUk._(_root); + @override String started({ required Object timestamp}) => 'Запустив ${timestamp}'; + @override late final _TranslationsStreamChatUk chat = _TranslationsStreamChatUk._(_root); +} + +// Path: goal +class _TranslationsGoalUk implements TranslationsGoalEn { + _TranslationsGoalUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @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); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + + /// Текст для кнопки входу в систему + @override String get login => 'Логін'; + + @override String get logout => 'Вийти з системи'; + @override String get edit_profile => 'Редагувати профіль'; + + /// Текст для кнопки переходу + @override String get follow => 'Підпишіться'; + + /// Текст для кнопки відписки + @override String get unfollow => 'Скасувати відповідь'; + + @override String get mute => 'Вимкнути звук.'; + @override String get unmute => 'Увімкнути звук.'; + @override String get share => 'Поділіться'; + @override String get save => 'Зберегти'; +} + +// Path: embed +class _TranslationsEmbedUk implements TranslationsEmbedEn { + _TranslationsEmbedUk._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListUk implements TranslationsStreamListEn { + _TranslationsStreamListUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @override String get following => 'Після того, як'; + @override String get live => 'Наживо'; + @override String get planned => 'Заплановано'; + @override String get ended => 'Закінчилося'; +} + +// Path: zap +class _TranslationsZapUk implements TranslationsZapEn { + _TranslationsZapUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @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 get button_zap => 'Zap!'; + @override String get button_open_wallet => 'Відкрити в Гаманці'; + @override String get copy => 'Скопійовано в буфер обміну'; + @override late final _TranslationsZapErrorUk error = _TranslationsZapErrorUk._(_root); +} + +// Path: profile +class _TranslationsProfileUk implements TranslationsProfileEn { + _TranslationsProfileUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Минулі потоки'; + @override late final _TranslationsProfileEditUk edit = _TranslationsProfileEditUk._(_root); +} + +// Path: login +class _TranslationsLoginUk implements TranslationsLoginEn { + _TranslationsLoginUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @override String get username => 'Ім\'я користувача'; + @override String get amber => 'Увійдіть за допомогою Amber'; + @override String get key => 'Увійдіть за допомогою ключа'; + @override String get create => 'Створити обліковий запис'; + @override late final _TranslationsLoginErrorUk error = _TranslationsLoginErrorUk._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusUk implements TranslationsStreamStatusEn { + _TranslationsStreamStatusUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @override String get live => 'НАЖИВО'; + @override String get ended => 'ЗАКІНЧЕНО'; + @override String get planned => 'ЗАПЛАНОВАНО'; +} + +// Path: stream.chat +class _TranslationsStreamChatUk implements TranslationsStreamChatEn { + _TranslationsStreamChatUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @override String get disabled => 'ЧАТ ВІДКЛЮЧЕНО'; + @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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidUk raid = _TranslationsStreamChatRaidUk._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorUk implements TranslationsZapErrorEn { + _TranslationsZapErrorUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Неправильна сума замовлення'; + @override String get no_wallet => 'Не встановлено гаманець-блискавку'; + @override String get no_lud16 => 'Адреса блискавки не знайдена'; +} + +// Path: profile.edit +class _TranslationsProfileEditUk implements TranslationsProfileEditEn { + _TranslationsProfileEditUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Ім\'я користувача'; + @override String get about => 'Про'; + @override String get nip05 => 'Nostr Адреса'; + @override String get lud16 => 'Блискавична адреса'; + @override late final _TranslationsProfileEditErrorUk error = _TranslationsProfileEditErrorUk._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorUk implements TranslationsLoginErrorEn { + _TranslationsLoginErrorUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Неправильний ключ'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteUk implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + + /// Мітка у вікні введення повідомлення чату + @override String get label => 'Написати повідомлення'; + + /// Повідомлення в чаті, що відображається, коли користувач увійшов до системи лише з ключем pubkey + @override String get no_signer => 'Неможливо писати повідомлення з логіном npub'; + + /// Повідомлення для введення в чаті, що відображається, коли користувач вийшов з системи + @override String get login => 'Будь ласка, авторизуйтесь, щоб надсилати повідомлення'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeUk implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + + /// Над списком користувачів, яким присвоєно бейдж + @override String get awarded_to => 'Нагороджується:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidUk implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + + /// Повідомлення про рейд чату в інший потік + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Повідомлення про наліт на чат з іншого потоку + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// Таймер зворотного відліку для авторейду + @override String countdown({ required Object time}) => 'Рейд у ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorUk implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorUk._(this._root); + + final TranslationsUk _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Неможливо редагувати профіль, коли ви вийшли з системи'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsUk { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Завантажити аватар'; + case 'most_zapped_streamers': return 'Більшість стримерів, які були під напругою'; + case 'no_user_found': return 'Користувача не знайдено'; + case 'anon': return 'Анонім.'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('uk'))(n, + one: '1 глядач', + other: '${n} глядачі', + ); + case 'stream.status.live': return 'НАЖИВО'; + case 'stream.status.ended': return 'ЗАКІНЧЕНО'; + case 'stream.status.planned': return 'ЗАПЛАНОВАНО'; + case 'stream.started': return ({ required Object timestamp}) => 'Запустив ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return 'ЗАВЕРШИТИ'; + case 'button.login': return 'Логін'; + case 'button.logout': return 'Вийти з системи'; + case 'button.edit_profile': return 'Редагувати профіль'; + case 'button.follow': return 'Підпишіться'; + case 'button.unfollow': return 'Скасувати відповідь'; + case 'button.mute': return 'Вимкнути звук.'; + 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 '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.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': return 'Zap!'; + case 'zap.button_open_wallet': return 'Відкрити в Гаманці'; + case 'zap.copy': return 'Скопійовано в буфер обміну'; + case 'zap.error.invalid_custom_amount': return 'Неправильна сума замовлення'; + case 'zap.error.no_wallet': return 'Не встановлено гаманець-блискавку'; + case 'zap.error.no_lud16': return 'Адреса блискавки не знайдена'; + case 'profile.past_streams': return 'Минулі потоки'; + case 'profile.edit.display_name': return 'Ім\'я користувача'; + case 'profile.edit.about': return 'Про'; + case 'profile.edit.nip05': return 'Nostr Адреса'; + case 'profile.edit.lud16': return 'Блискавична адреса'; + case 'profile.edit.error.logged_out': return 'Неможливо редагувати профіль, коли ви вийшли з системи'; + case 'login.username': return 'Ім\'я користувача'; + case 'login.amber': return 'Увійдіть за допомогою Amber'; + case 'login.key': return 'Увійдіть за допомогою ключа'; + case 'login.create': return 'Створити обліковий запис'; + case 'login.error.invalid_key': return 'Неправильний ключ'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_vi.g.dart b/lib/i18n/strings_vi.g.dart new file mode 100644 index 0000000..a659cac --- /dev/null +++ b/lib/i18n/strings_vi.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsVi implements Translations { + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + TranslationsVi({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.vi, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsVi _root = this; // ignore: unused_field + + @override + TranslationsVi $copyWith({TranslationMetadata? meta}) => TranslationsVi(meta: meta ?? this.$meta); + + // Translations + + /// Text prompting user to hit avatar placeholder to begin upload + @override String get upload_avatar => 'Upload Avatar'; + + /// Heading over listed top streamers by zaps + @override String get most_zapped_streamers => 'Most Zapped Streamers'; + + /// No user found when searching + @override String get no_user_found => 'No user found'; + + /// An anonymous user + @override String get anon => 'Anon'; + + /// Number of viewers of the stream + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('vi'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + + @override late final _TranslationsStreamVi stream = _TranslationsStreamVi._(_root); + @override late final _TranslationsGoalVi goal = _TranslationsGoalVi._(_root); + @override late final _TranslationsButtonVi button = _TranslationsButtonVi._(_root); + @override late final _TranslationsEmbedVi embed = _TranslationsEmbedVi._(_root); + + /// Headings on stream lists by stream type live/ended/planned etc. + @override late final _TranslationsStreamListVi stream_list = _TranslationsStreamListVi._(_root); + + @override late final _TranslationsZapVi zap = _TranslationsZapVi._(_root); + @override late final _TranslationsProfileVi profile = _TranslationsProfileVi._(_root); + @override late final _TranslationsLoginVi login = _TranslationsLoginVi._(_root); +} + +// Path: stream +class _TranslationsStreamVi implements TranslationsStreamEn { + _TranslationsStreamVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusVi status = _TranslationsStreamStatusVi._(_root); + @override String started({ required Object timestamp}) => 'Started ${timestamp}'; + @override late final _TranslationsStreamChatVi chat = _TranslationsStreamChatVi._(_root); +} + +// Path: goal +class _TranslationsGoalVi implements TranslationsGoalEn { + _TranslationsGoalVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String title({ required Object amount}) => 'Goal: ${amount}'; + @override String remaining({ required Object amount}) => 'Remaining: ${amount}'; + @override String get complete => 'COMPLETE'; +} + +// Path: button +class _TranslationsButtonVi implements TranslationsButtonEn { + _TranslationsButtonVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + + /// Button text for the login button + @override String get login => 'Login'; + + @override String get logout => 'Logout'; + @override String get edit_profile => 'Edit Profile'; + + /// Button text for the follow button + @override String get follow => 'Follow'; + + /// Button text for the unfollow button + @override String get unfollow => 'Unfollow'; + + @override String get mute => 'Mute'; + @override String get unmute => 'Unmute'; + @override String get share => 'Share'; + @override String get save => 'Save'; +} + +// Path: embed +class _TranslationsEmbedVi implements TranslationsEmbedEn { + _TranslationsEmbedVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String article_by({ required Object name}) => 'Article by ${name}'; + @override String note_by({ required Object name}) => 'Note by ${name}'; + @override String live_stream_by({ required Object name}) => 'Live stream by ${name}'; +} + +// Path: stream_list +class _TranslationsStreamListVi implements TranslationsStreamListEn { + _TranslationsStreamListVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String get following => 'Following'; + @override String get live => 'Live'; + @override String get planned => 'Planned'; + @override String get ended => 'Ended'; +} + +// Path: zap +class _TranslationsZapVi implements TranslationsZapEn { + _TranslationsZapVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String title({ required Object name}) => 'Zap ${name}'; + @override String get custom_amount => 'Custom Amount'; + @override String get confirm => 'Confirm'; + @override String get comment => 'Comment'; + @override String button_zap_ready({ required Object amount}) => 'Zap ${amount} sats'; + @override String get button_zap => 'Zap'; + @override String get button_open_wallet => 'Open in Wallet'; + @override String get copy => 'Copied to clipboard'; + @override late final _TranslationsZapErrorVi error = _TranslationsZapErrorVi._(_root); +} + +// Path: profile +class _TranslationsProfileVi implements TranslationsProfileEn { + _TranslationsProfileVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String get past_streams => 'Past Streams'; + @override late final _TranslationsProfileEditVi edit = _TranslationsProfileEditVi._(_root); +} + +// Path: login +class _TranslationsLoginVi implements TranslationsLoginEn { + _TranslationsLoginVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String get username => 'Username'; + @override String get amber => 'Login with Amber'; + @override String get key => 'Login with Key'; + @override String get create => 'Create Account'; + @override late final _TranslationsLoginErrorVi error = _TranslationsLoginErrorVi._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusVi implements TranslationsStreamStatusEn { + _TranslationsStreamStatusVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String get live => 'LIVE'; + @override String get ended => 'ENDED'; + @override String get planned => 'PLANNED'; +} + +// Path: stream.chat +class _TranslationsStreamChatVi implements TranslationsStreamChatEn { + _TranslationsStreamChatVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String get disabled => 'CHAT DISABLED'; + @override String disabled_timeout({ required Object time}) => 'Timeout expires: ${time}'; + + /// Chat message showing timeout events + @override TextSpan timeout({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + + /// Stream ended footer at bottom of chat + @override String get ended => 'STREAM ENDED'; + + /// Chat message showing stream zaps + @override TextSpan zap({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + + @override late final _TranslationsStreamChatWriteVi write = _TranslationsStreamChatWriteVi._(_root); + @override late final _TranslationsStreamChatBadgeVi badge = _TranslationsStreamChatBadgeVi._(_root); + @override late final _TranslationsStreamChatRaidVi raid = _TranslationsStreamChatRaidVi._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorVi implements TranslationsZapErrorEn { + _TranslationsZapErrorVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => 'Invalid custom amount'; + @override String get no_wallet => 'No lightning wallet installed'; + @override String get no_lud16 => 'No lightning address found'; +} + +// Path: profile.edit +class _TranslationsProfileEditVi implements TranslationsProfileEditEn { + _TranslationsProfileEditVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String get display_name => 'Display Name'; + @override String get about => 'About'; + @override String get nip05 => 'Nostr Address'; + @override String get lud16 => 'Lightning Address'; + @override late final _TranslationsProfileEditErrorVi error = _TranslationsProfileEditErrorVi._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorVi implements TranslationsLoginErrorEn { + _TranslationsLoginErrorVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String get invalid_key => 'Invalid key'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteVi implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + + /// Label on the chat message input box + @override String get label => 'Write message'; + + /// Chat input message shown when the user is logged in only with pubkey + @override String get no_signer => 'Can\'t write messages with npub login'; + + /// Chat input message shown when the user is logged out + @override String get login => 'Please login to send messages'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeVi implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + + /// Heading over list of users who are awarded a badge + @override String get awarded_to => 'Awarded to:'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidVi implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + + /// Chat raid message to another stream + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// Chat raid message from another stream + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// Countdown timer for auto-raiding + @override String countdown({ required Object time}) => 'Raiding in ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorVi implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorVi._(this._root); + + final TranslationsVi _root; // ignore: unused_field + + // Translations + @override String get logged_out => 'Cant edit profile when logged out'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsVi { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return 'Upload Avatar'; + case 'most_zapped_streamers': return 'Most Zapped Streamers'; + case 'no_user_found': return 'No user found'; + case 'anon': return 'Anon'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('vi'))(n, + one: '1 viewer', + other: '${n} viewers', + ); + case 'stream.status.live': return 'LIVE'; + case 'stream.status.ended': return 'ENDED'; + case 'stream.status.planned': return 'PLANNED'; + case 'stream.started': return ({ required Object timestamp}) => 'Started ${timestamp}'; + case 'stream.chat.disabled': return 'CHAT DISABLED'; + case 'stream.chat.disabled_timeout': return ({ required Object time}) => 'Timeout expires: ${time}'; + case 'stream.chat.timeout': return ({ required InlineSpan mod, required InlineSpan user, required InlineSpan time, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + mod, + const TextSpan(text: ' timed out '), + user, + const TextSpan(text: ' for '), + time, + ], style: style, recognizer: recognizer); + case 'stream.chat.ended': return 'STREAM ENDED'; + case 'stream.chat.zap': return ({ required InlineSpan user, required InlineSpan amount, TextStyle? style, GestureRecognizer? recognizer}) => TextSpan(children: [ + user, + const TextSpan(text: ' zapped '), + amount, + const TextSpan(text: ' sats'), + ], style: style, recognizer: recognizer); + case 'stream.chat.write.label': return 'Write message'; + case 'stream.chat.write.no_signer': return 'Can\'t write messages with npub login'; + case 'stream.chat.write.login': return 'Please login to send messages'; + case 'stream.chat.badge.awarded_to': return 'Awarded to:'; + case 'stream.chat.raid.to': return ({ required Object name}) => 'RAIDING ${name}'; + case 'stream.chat.raid.from': return ({ required Object name}) => 'RAID FROM ${name}'; + case 'stream.chat.raid.countdown': return ({ required Object time}) => 'Raiding in ${time}'; + case 'goal.title': return ({ required Object amount}) => 'Goal: ${amount}'; + case 'goal.remaining': return ({ required Object amount}) => 'Remaining: ${amount}'; + case 'goal.complete': return 'COMPLETE'; + case 'button.login': return 'Login'; + case 'button.logout': return 'Logout'; + case 'button.edit_profile': return 'Edit Profile'; + case 'button.follow': return 'Follow'; + case 'button.unfollow': return 'Unfollow'; + case 'button.mute': return 'Mute'; + case 'button.unmute': return 'Unmute'; + case 'button.share': return 'Share'; + case 'button.save': return 'Save'; + case 'embed.article_by': return ({ required Object name}) => 'Article by ${name}'; + case 'embed.note_by': return ({ required Object name}) => 'Note by ${name}'; + case 'embed.live_stream_by': return ({ required Object name}) => 'Live stream by ${name}'; + case 'stream_list.following': return 'Following'; + case 'stream_list.live': return 'Live'; + case 'stream_list.planned': return 'Planned'; + case 'stream_list.ended': return 'Ended'; + case 'zap.title': return ({ required Object name}) => 'Zap ${name}'; + case 'zap.custom_amount': return 'Custom Amount'; + case 'zap.confirm': return 'Confirm'; + case 'zap.comment': return 'Comment'; + case 'zap.button_zap_ready': return ({ required Object amount}) => 'Zap ${amount} sats'; + case 'zap.button_zap': return 'Zap'; + case 'zap.button_open_wallet': return 'Open in Wallet'; + case 'zap.copy': return 'Copied to clipboard'; + case 'zap.error.invalid_custom_amount': return 'Invalid custom amount'; + case 'zap.error.no_wallet': return 'No lightning wallet installed'; + case 'zap.error.no_lud16': return 'No lightning address found'; + case 'profile.past_streams': return 'Past Streams'; + case 'profile.edit.display_name': return 'Display Name'; + case 'profile.edit.about': return 'About'; + case 'profile.edit.nip05': return 'Nostr Address'; + case 'profile.edit.lud16': return 'Lightning Address'; + case 'profile.edit.error.logged_out': return 'Cant edit profile when logged out'; + case 'login.username': return 'Username'; + case 'login.amber': return 'Login with Amber'; + case 'login.key': return 'Login with Key'; + case 'login.create': return 'Create Account'; + case 'login.error.invalid_key': return 'Invalid key'; + default: return null; + } + } +} + diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart new file mode 100644 index 0000000..dc91431 --- /dev/null +++ b/lib/i18n/strings_zh.g.dart @@ -0,0 +1,416 @@ +/// +/// Generated file. Do not edit. +/// +// coverage:ignore-file +// ignore_for_file: type=lint, unused_import + +import 'package:flutter/gestures.dart'; +import 'package:flutter/widgets.dart'; +import 'package:intl/intl.dart'; +import 'package:slang/generated.dart'; +import 'strings.g.dart'; + +// Path: +class TranslationsZh implements 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}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = meta ?? TranslationMetadata( + locale: AppLocale.zh, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); + + late final TranslationsZh _root = this; // ignore: unused_field + + @override + TranslationsZh $copyWith({TranslationMetadata? meta}) => TranslationsZh(meta: meta ?? this.$meta); + + // Translations + + /// 提示使用者點擊頭像占位符開始上傳的文字 + @override String get upload_avatar => '上傳頭像'; + + /// ヘッドランドから列されている頂幡からずった + @override String get most_zapped_streamers => '最多被擊中的溪流'; + + /// 搜尋時未找到使用者 + @override String get no_user_found => '未找到使用者'; + + /// 匿名使用者 + @override String get anon => '匿名'; + + /// 串流的觀看者人數 + @override String viewers({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + one: '1 個檢視器', + other: '${n} 觀眾', + ); + + @override late final _TranslationsStreamZh stream = _TranslationsStreamZh._(_root); + @override late final _TranslationsGoalZh goal = _TranslationsGoalZh._(_root); + @override late final _TranslationsButtonZh button = _TranslationsButtonZh._(_root); + @override late final _TranslationsEmbedZh embed = _TranslationsEmbedZh._(_root); + + /// 串流清單上的標題依串流類型為現場/結束/計劃中等。 + @override late final _TranslationsStreamListZh stream_list = _TranslationsStreamListZh._(_root); + + @override late final _TranslationsZapZh zap = _TranslationsZapZh._(_root); + @override late final _TranslationsProfileZh profile = _TranslationsProfileZh._(_root); + @override late final _TranslationsLoginZh login = _TranslationsLoginZh._(_root); +} + +// Path: stream +class _TranslationsStreamZh implements TranslationsStreamEn { + _TranslationsStreamZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override late final _TranslationsStreamStatusZh status = _TranslationsStreamStatusZh._(_root); + @override String started({ required Object timestamp}) => '開始 ${timestamp}'; + @override late final _TranslationsStreamChatZh chat = _TranslationsStreamChatZh._(_root); +} + +// Path: goal +class _TranslationsGoalZh implements TranslationsGoalEn { + _TranslationsGoalZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @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); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + + /// 登入按鈕的按鈕文字 + @override String get login => '登錄'; + + @override String get logout => '登出'; + @override String get edit_profile => '編輯個人檔案'; + + /// 跟蹤按鈕的按鈕文字 + @override String get follow => '關注'; + + /// 取消關注按鈕的按鈕文字 + @override String get unfollow => '取消關注'; + + @override String get mute => '靜音'; + @override String get unmute => '解除静音'; + @override String get share => '分享'; + @override String get save => '保存'; +} + +// Path: embed +class _TranslationsEmbedZh implements TranslationsEmbedEn { + _TranslationsEmbedZh._(this._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}'; +} + +// Path: stream_list +class _TranslationsStreamListZh implements TranslationsStreamListEn { + _TranslationsStreamListZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get following => '已關注'; + @override String get live => '直播'; + @override String get planned => '已計畫'; + @override String get ended => '已結束'; +} + +// Path: zap +class _TranslationsZapZh implements TranslationsZapEn { + _TranslationsZapZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @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 get button_zap => '打閃'; + @override String get button_open_wallet => '在錢包中開啟'; + @override String get copy => '複製到剪貼簿'; + @override late final _TranslationsZapErrorZh error = _TranslationsZapErrorZh._(_root); +} + +// Path: profile +class _TranslationsProfileZh implements TranslationsProfileEn { + _TranslationsProfileZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get past_streams => '過去的直播'; + @override late final _TranslationsProfileEditZh edit = _TranslationsProfileEditZh._(_root); +} + +// Path: login +class _TranslationsLoginZh implements TranslationsLoginEn { + _TranslationsLoginZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get username => '用戶名'; + @override String get amber => '使用 Amber 登入'; + @override String get key => '使用鑰匙登入'; + @override String get create => '創建帳戶'; + @override late final _TranslationsLoginErrorZh error = _TranslationsLoginErrorZh._(_root); +} + +// Path: stream.status +class _TranslationsStreamStatusZh implements TranslationsStreamStatusEn { + _TranslationsStreamStatusZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get live => '直播'; + @override String get ended => '結束'; + @override String get planned => '計劃'; +} + +// Path: stream.chat +class _TranslationsStreamChatZh implements TranslationsStreamChatEn { + _TranslationsStreamChatZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get disabled => '關閉聊天'; + @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: [ + 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: [ + 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); + @override late final _TranslationsStreamChatRaidZh raid = _TranslationsStreamChatRaidZh._(_root); +} + +// Path: zap.error +class _TranslationsZapErrorZh implements TranslationsZapErrorEn { + _TranslationsZapErrorZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get invalid_custom_amount => '無效自訂金額'; + @override String get no_wallet => '未安裝閃電錢夾'; + @override String get no_lud16 => '未找到閃電地址'; +} + +// Path: profile.edit +class _TranslationsProfileEditZh implements TranslationsProfileEditEn { + _TranslationsProfileEditZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get display_name => '顯示名稱'; + @override String get about => '關於'; + @override String get nip05 => 'Nostr 地址'; + @override String get lud16 => '閃電地址'; + @override late final _TranslationsProfileEditErrorZh error = _TranslationsProfileEditErrorZh._(_root); +} + +// Path: login.error +class _TranslationsLoginErrorZh implements TranslationsLoginErrorEn { + _TranslationsLoginErrorZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get invalid_key => '無效按鍵'; +} + +// Path: stream.chat.write +class _TranslationsStreamChatWriteZh implements TranslationsStreamChatWriteEn { + _TranslationsStreamChatWriteZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + + /// 聊天訊息輸入方塊上的標籤 + @override String get label => '寫訊息'; + + /// 當使用者僅使用 pubkey 登入時,會顯示聊天輸入訊息 + @override String get no_signer => '無法使用 npub 登入撰寫訊息'; + + /// 使用者登出時顯示聊天輸入訊息 + @override String get login => '請登入以傳送訊息'; +} + +// Path: stream.chat.badge +class _TranslationsStreamChatBadgeZh implements TranslationsStreamChatBadgeEn { + _TranslationsStreamChatBadgeZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + + /// 被授予徽章的使用者清單上的標題 + @override String get awarded_to => '頒發給'; +} + +// Path: stream.chat.raid +class _TranslationsStreamChatRaidZh implements TranslationsStreamChatRaidEn { + _TranslationsStreamChatRaidZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + + /// 聊天突擊消息到另一個串流 + @override String to({ required Object name}) => 'RAIDING ${name}'; + + /// 來自其他串流的聊天突襲訊息 + @override String from({ required Object name}) => 'RAID FROM ${name}'; + + /// 自動騎乘倒數計時器 + @override String countdown({ required Object time}) => '突襲 ${time}'; +} + +// Path: profile.edit.error +class _TranslationsProfileEditErrorZh implements TranslationsProfileEditErrorEn { + _TranslationsProfileEditErrorZh._(this._root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String get logged_out => '登出時無法編輯個人資料'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. +extension on TranslationsZh { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'upload_avatar': return '上傳頭像'; + case 'most_zapped_streamers': return '最多被擊中的溪流'; + case 'no_user_found': return '未找到使用者'; + case 'anon': return '匿名'; + case 'viewers': return ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, + one: '1 個檢視器', + other: '${n} 觀眾', + ); + case 'stream.status.live': return '直播'; + case 'stream.status.ended': return '結束'; + case 'stream.status.planned': return '計劃'; + case 'stream.started': return ({ required Object timestamp}) => '開始 ${timestamp}'; + case 'stream.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: [ + 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: [ + 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 'goal.complete': return '完成'; + case 'button.login': return '登錄'; + case 'button.logout': return '登出'; + case 'button.edit_profile': return '編輯個人檔案'; + case 'button.follow': return '關注'; + case 'button.unfollow': return '取消關注'; + case 'button.mute': return '靜音'; + 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 '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.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': return '打閃'; + case 'zap.button_open_wallet': return '在錢包中開啟'; + case 'zap.copy': return '複製到剪貼簿'; + case 'zap.error.invalid_custom_amount': return '無效自訂金額'; + case 'zap.error.no_wallet': return '未安裝閃電錢夾'; + case 'zap.error.no_lud16': return '未找到閃電地址'; + case 'profile.past_streams': return '過去的直播'; + case 'profile.edit.display_name': return '顯示名稱'; + case 'profile.edit.about': return '關於'; + case 'profile.edit.nip05': return 'Nostr 地址'; + case 'profile.edit.lud16': return '閃電地址'; + case 'profile.edit.error.logged_out': return '登出時無法編輯個人資料'; + case 'login.username': return '用戶名'; + case 'login.amber': return '使用 Amber 登入'; + case 'login.key': return '使用鑰匙登入'; + case 'login.create': return '創建帳戶'; + case 'login.error.invalid_key': return '無效按鍵'; + default: return null; + } + } +} + diff --git a/lib/i18n/translated/af.i18n.yaml b/lib/i18n/translated/af.i18n.yaml new file mode 100644 index 0000000..5258519 --- /dev/null +++ b/lib/i18n/translated/af.i18n.yaml @@ -0,0 +1,122 @@ +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/ar.i18n.yaml b/lib/i18n/translated/ar.i18n.yaml new file mode 100644 index 0000000..cfbe794 --- /dev/null +++ b/lib/i18n/translated/ar.i18n.yaml @@ -0,0 +1,123 @@ +upload_avatar: تحميل الصورة الرمزية +"@upload_avatar": + description: نص يطالب المستخدم بالضغط على العنصر النائب للصورة الرمزية لبدء التحميل +most_zapped_streamers: معظم اللافتات التي يتم بثها +"@most_zapped_streamers": + description: التوجه فوق اللافتات العلوية المدرجة من قبل zaps +no_user_found: لم يتم العثور على مستخدم +"@no_user_found": + description: لم يتم العثور على مستخدم عند البحث +anon: هوية مخفية +viewers: + one: 1 مشاهد + other: $n المشاهدون +"@viewers": + description: عدد مشاهدي البث + placeholders: + n: + type: في +"@anon": + description: مستخدم مجهول +stream: + status: + live: بث مباشر + ended: انتهى + planned: مخطط + started: بدأ $timestamp + chat: + disabled: تم تعطيل الدردشة + disabled_timeout: "تنتهي المهلة: $time" + timeout(rich): $mod انتهى الوقت $user لـ $time + "@timeout": + description: رسالة دردشة تظهر أحداث المهلة + ended: انتهى البث + "@ended": + description: تيار انتهى التذييل في أسفل الدردشة + zap(rich): $user انطلق $amount ساتس + "@zap": + description: رسالة الدردشة التي تُظهر البث المباشر + write: + label: اكتب رسالة + "@label": + description: التسمية على مربع إدخال رسالة الدردشة + no_signer: لا يمكن كتابة الرسائل باستخدام تسجيل الدخول إلى npub + "@no_signer": + description: تظهر رسالة إدخال الدردشة عندما يقوم المستخدم بتسجيل الدخول باستخدام + مفتاح الحانة فقط + login: الرجاء تسجيل الدخول لإرسال الرسائل + "@login": + description: تظهر رسالة إدخال الدردشة عند تسجيل خروج المستخدم من المحادثة + badge: + awarded_to: مُنحت الجائزة لـ + "@awarded_to": + description: العنوان فوق قائمة المستخدمين الذين حصلوا على شارة + raid: + to: التصفح $name + "@to": + description: رسالة غارة الدردشة إلى دفق آخر + from: RAID من $name + "@from": + description: رسالة غارة الدردشة من دفق آخر + countdown: الإغارة في $time + "@countdown": + description: مؤقت العد التنازلي للقيادة التلقائية +goal: + title: "الهدف: $amount" + remaining: "المتبقي: $amount" + complete: مكتمل +button: + login: تسجيل الدخول + logout: تسجيل الخروج + edit_profile: تعديل الملف الشخصي + "@login": + description: نص الزر الخاص بزر تسجيل الدخول + follow: متابعة + "@follow": + description: نص الزر الخاص بزر المتابعة + unfollow: الغاء المتابعة + "@unfollow": + description: نص الزر لزر إلغاء المتابعة + mute: كتم + unmute: رفع الكتم + share: مشاركة + save: حفظ +embed: + article_by: مقال بقلم $name + note_by: ملاحظة من $name + live_stream_by: بث مباشر من $name +stream_list: + following: المتابَعون + live: بث مباشر + planned: مخطط + ended: انتهى +"@stream_list": + description: العناوين في قوائم البث حسب نوع البث المباشر/المُنتهي/المخطط له وما إلى ذلك. +zap: + title: زاب $name + custom_amount: المبلغ المخصص + confirm: تأكيد + comment: تعليق + button_zap_ready: أومض $amount ساتوشي + button_zap: زاب + button_open_wallet: فتح في المحفظة + copy: نسخ إلى الحافظة + error: + invalid_custom_amount: مبلغ مخصص غير صالح + no_wallet: لا توجد محفظة برق مثبتة + no_lud16: لم يتم العثور على عنوان البرق +profile: + past_streams: التدفقات السابقة + edit: + display_name: اسم العرض + about: نبذة + nip05: عنوان نوستر + lud16: عنوان البرق + error: + logged_out: لا يمكن تحرير ملف التعريف عند تسجيل الخروج +login: + username: اسم المستخدم + amber: تسجيل الدخول مع آمبر + key: تسجيل الدخول بالمفتاح + create: إنشاء حساب + error: + invalid_key: مفتاح غير صالح diff --git a/lib/i18n/translated/ca.i18n.yaml b/lib/i18n/translated/ca.i18n.yaml new file mode 100644 index 0000000..5258519 --- /dev/null +++ b/lib/i18n/translated/ca.i18n.yaml @@ -0,0 +1,122 @@ +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/cs.i18n.yaml b/lib/i18n/translated/cs.i18n.yaml new file mode 100644 index 0000000..96fe8e3 --- /dev/null +++ b/lib/i18n/translated/cs.i18n.yaml @@ -0,0 +1,124 @@ +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í +most_zapped_streamers: Nejvíce zapnutých streamerů +"@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": + description: Při vyhledávání nebyl nalezen žádný uživatel +anon: Anon +viewers: + one: 1 divák + other: $n diváci +"@viewers": + description: Počet diváků streamu + placeholders: + n: + type: int +"@anon": + description: Anonymní uživatel +stream: + status: + live: LIVE + ended: KONEC + planned: PLÁNOVANÉ + started: Založeno $timestamp + chat: + disabled: CHAT ZRUŠEN + disabled_timeout: "Časový limit vyprší: $time" + timeout(rich): $mod vypršel čas $user pro $time + "@timeout": + description: Zpráva chatu zobrazující události časového limitu + ended: STREAM UKONČEN + "@ended": + description: Zápatí v dolní části chatu ukončilo stream + zap(rich): $user Zapped $amount sats + "@zap": + description: Zpráva chatu zobrazující proud zaps + write: + label: Napište zprávu + "@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 + login: Pro odesílání zpráv se prosím přihlaste + "@login": + description: Vstupní zpráva chatu zobrazená při odhlášení uživatele + badge: + awarded_to: "Uděleno:" + "@awarded_to": + description: Záhlaví nad seznamem uživatelů, kterým byl udělen odznak + raid: + to: RAIDING $name + "@to": + description: Zpráva o nájezdu chatu do jiného proudu + from: RAID Z $name + "@from": + description: Zpráva o nájezdu chatu z jiného proudu + countdown: Nájezdy na $time + "@countdown": + description: Časovač odpočítávání pro automatický nájezd +goal: + title: "Cíl: $amount" + remaining: "Zbývá: $amount" + complete: KOMPLETNÍ +button: + login: Přihlášení + logout: Odhlášení + edit_profile: Upravit profil + "@login": + description: Text tlačítka pro přihlašovací tlačítko + follow: Sledujte + "@follow": + description: Text tlačítka pro tlačítko sledovat + unfollow: Zrušit sledování + "@unfollow": + description: Text tlačítka pro zrušení sledování + mute: Ztlumit + unmute: Zrušit ztlumení + share: Sdílet + save: Uložit +embed: + article_by: Článek na $name + note_by: Poznámka $name + live_stream_by: Přímý přenos na adrese $name +stream_list: + following: Po + live: Živě + planned: Plánované + ended: Ukončeno +"@stream_list": + description: Nadpisy v seznamech proudů podle typu proudu živě/konec/plánovaně atd. +zap: + title: Zap $name + custom_amount: Vlastní částka + confirm: Potvrďte + comment: "Komentář:" + button_zap_ready: Zap $amount sats + button_zap: Zap + button_open_wallet: Otevřít v peněžence + copy: Zkopírováno do schránky + error: + invalid_custom_amount: Neplatná vlastní částka + no_wallet: Není nainstalována blesková peněženka + no_lud16: Nebyla nalezena žádná adresa blesku +profile: + past_streams: Minulé proudy + edit: + display_name: Zobrazení názvu + about: O stránkách + nip05: Adresa Nostr + lud16: Adresa blesku + error: + logged_out: Nelze upravit profil, když je odhlášený +login: + username: Uživatelské jméno + amber: Přihlášení pomocí Amber + key: Přihlášení pomocí klíče + create: Vytvořit účet + error: + invalid_key: Neplatný klíč diff --git a/lib/i18n/translated/da.i18n.yaml b/lib/i18n/translated/da.i18n.yaml new file mode 100644 index 0000000..90d9474 --- /dev/null +++ b/lib/i18n/translated/da.i18n.yaml @@ -0,0 +1,124 @@ +upload_avatar: Upload avatar +"@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": + description: På vej over listede topstreamere af zaps +no_user_found: Ingen bruger fundet +"@no_user_found": + description: Ingen bruger fundet ved søgning +anon: Anon +viewers: + one: 1 seer + other: $n Seere +"@viewers": + description: Antal seere af streamingen + placeholders: + n: + type: int +"@anon": + description: En anonym bruger +stream: + status: + live: LIVE + ended: AFSLUTTET + planned: PLANLAGT + started: Startet $timestamp + chat: + disabled: CHAT DEAKTIVERET + disabled_timeout: "Timeout udløber: $time" + timeout(rich): $mod udløbet $user for $time + "@timeout": + description: Chatbesked, der viser timeout-hændelser + ended: STREAM AFSLUTTET + "@ended": + description: Stream afsluttede footer i bunden af chatten + zap(rich): $user zappet $amount sats + "@zap": + description: Chatbesked, der viser stream-zaps + write: + label: Skriv en besked + "@label": + description: Label på chatbeskedens inputfelt + no_signer: Kan ikke skrive beskeder med npub-login + "@no_signer": + description: Chat-inputmeddelelse vises, når brugeren kun er logget ind med pubkey + login: Log ind for at sende beskeder + "@login": + description: Chat-inputmeddelelse vises, når brugeren er logget ud + badge: + awarded_to: "Tildelt til:" + "@awarded_to": + description: Overskrift over liste over brugere, der har fået tildelt et badge + raid: + to: RAIDING $name + "@to": + description: Chat raid-besked til en anden stream + from: RAID FRA $name + "@from": + description: Chat raid-besked fra en anden stream + countdown: Raiding i $time + "@countdown": + description: Nedtællingstimer til auto-raiding +goal: + title: "Mål: $amount" + remaining: "Resterende: $amount" + complete: KOMPLET +button: + login: Login + logout: Log ud + edit_profile: Rediger profil + "@login": + description: Knaptekst til login-knappen + follow: Følg med + "@follow": + description: Knaptekst til følg-knappen + unfollow: Ikke følge + "@unfollow": + description: Knaptekst til unfollow-knappen + mute: Dæmpet + unmute: Slå lyden fra + share: Del + save: Gemme +embed: + article_by: Artikel af $name + note_by: Note fra $name + live_stream_by: Livestream på $name +stream_list: + following: Efterfølgende + live: Live + planned: Planlagt + ended: Afsluttet +"@stream_list": + description: Overskrifter på streaminglister efter streamingtype + live/afsluttet/planlagt osv. +zap: + title: Zap $name + custom_amount: Brugerdefineret beløb + confirm: Bekræft + comment: Kommentar + button_zap_ready: Zap $amount sats + button_zap: Zap + button_open_wallet: Åbn i tegnebogen + copy: Kopieret til udklipsholder + error: + invalid_custom_amount: Ugyldigt brugerdefineret beløb + no_wallet: Ingen lightning wallet installeret + no_lud16: Ingen lyn-adresse fundet +profile: + past_streams: Tidligere strømme + edit: + display_name: Vis navn + about: Omkring + nip05: Nostr-adresse + lud16: Adresse for lynnedslag + error: + logged_out: Kan ikke redigere profil, når jeg er logget ud +login: + username: Brugernavn + amber: Log ind med Amber + key: Login med nøgle + create: Opret konto + error: + invalid_key: Ugyldig nøgle diff --git a/lib/i18n/translated/de.i18n.yaml b/lib/i18n/translated/de.i18n.yaml new file mode 100644 index 0000000..e26224d --- /dev/null +++ b/lib/i18n/translated/de.i18n.yaml @@ -0,0 +1,125 @@ +upload_avatar: Avatar hochladen +"@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": + description: Überschrift über gelistete Top-Streamer von zaps +no_user_found: Kein Benutzer gefunden +"@no_user_found": + description: Kein Benutzer bei der Suche gefunden +anon: Anon +viewers: + one: 1 Zuschauer + other: $n Zuschauer +"@viewers": + description: Anzahl der Betrachter des Streams + placeholders: + n: + type: int +"@anon": + description: Ein anonymer Benutzer +stream: + status: + live: LIVE + ended: ENDED + planned: GEPLANT + started: Gestartet $timestamp + chat: + disabled: CHAT DEAKTIVIERT + disabled_timeout: "Die Zeitüberschreitung läuft ab: $time" + timeout(rich): $mod Zeitüberschreitung $user für $time + "@timeout": + description: Chat-Nachricht mit Zeitüberschreitungsereignissen + ended: STREAM BEENDET + "@ended": + description: Stream beendet Fußzeile am Ende des Chats + zap(rich): $user hat $amount sats gezappt + "@zap": + description: Chatnachricht mit Stream Zaps + write: + label: Nachricht schreiben + "@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 + login: Bitte anmelden, um Nachrichten zu senden + "@login": + description: Chat-Eingabemeldung wird angezeigt, wenn der Benutzer abgemeldet ist + badge: + awarded_to: "Verliehen an:" + "@awarded_to": + description: Überschrift über der Liste der Benutzer, die ein Abzeichen erhalten + haben + raid: + to: RAIDING $name + "@to": + description: Chat-Überfallnachricht an einen anderen Stream + from: RAID VON $name + "@from": + description: Chat-Raid-Nachricht aus einem anderen Stream + countdown: Raubzüge auf $time + "@countdown": + description: Countdown-Timer für automatisches Reiten +goal: + title: "Ziel: $amount" + remaining: "Verbleibend: $amount" + complete: COMPLETE +button: + login: Anmelden + logout: Abmelden + edit_profile: Profil anpassen + "@login": + description: Schaltflächentext für die Anmeldeschaltfläche + follow: Folgen + "@follow": + description: Schaltflächentext für die Schaltfläche "Folgen + unfollow: Entfolgen + "@unfollow": + description: Schaltflächentext für die "Unfollow"-Schaltfläche + mute: Stummschalten + unmute: Entstummen + share: Teilen + save: Speichern +embed: + article_by: Artikel von $name + note_by: Note von $name + live_stream_by: Live-Stream von $name +stream_list: + following: Folge ich + live: Live + planned: Geplant + ended: Beendet +"@stream_list": + description: Überschriften auf Stream-Listen nach Stream-Typ live/beendet/geplant usw. +zap: + title: $name zappen + custom_amount: Benutzerdefinierter Betrag + confirm: Bestätigen + comment: Kommentar + button_zap_ready: $amount sats zappen + button_zap: Zap + button_open_wallet: In Brieftasche öffnen + copy: In die Zwischenablage kopiert + error: + invalid_custom_amount: Ungültiger benutzerdefinierter Betrag + no_wallet: Keine Lightning-Brieftasche installiert + no_lud16: Keine Blitzadresse gefunden +profile: + past_streams: Vergangene Streams + edit: + display_name: Name anzeigen + about: Über + nip05: Nostr-Adresse + lud16: Lightning-Adresse + error: + logged_out: Profil kann nicht bearbeitet werden, wenn es abgemeldet ist +login: + username: Benutzername + amber: Anmeldung mit Amber + key: Anmeldung mit Schlüssel + create: Konto erstellen + error: + invalid_key: Ungültiger Schlüssel diff --git a/lib/i18n/translated/el.i18n.yaml b/lib/i18n/translated/el.i18n.yaml new file mode 100644 index 0000000..44c516e --- /dev/null +++ b/lib/i18n/translated/el.i18n.yaml @@ -0,0 +1,127 @@ +upload_avatar: Ανέβασμα Avatar +"@upload_avatar": + description: Κείμενο που προτρέπει τον χρήστη να πατήσει το εικονίδιο avatar για + να ξεκινήσει το ανέβασμα +most_zapped_streamers: Τα περισσότερα Zapped Streamers +"@most_zapped_streamers": + description: Επικεφαλής πάνω από τα αναφερόμενα κορυφαία streamers από zaps +no_user_found: Δεν βρέθηκε χρήστης +"@no_user_found": + description: Δεν βρέθηκε χρήστης κατά την αναζήτηση +anon: Anon +viewers: + one: 1 θεατής + other: $n θεατές +"@viewers": + description: Αριθμός θεατών της ροής + placeholders: + n: + type: int +"@anon": + description: Ένας ανώνυμος χρήστης +stream: + status: + live: LIVE + ended: ENDED + planned: ΣΧΕΔΙΑΣΜΟΣ + started: Ξεκίνησε $timestamp + chat: + disabled: ΑΠΕΝΕΡΓΟΠΟΙΗΜΈΝΗ ΣΥΝΟΜΙΛΊΑ + disabled_timeout: "Το χρονικό όριο λήγει: $time" + timeout(rich): $mod χρονομετρημένη λήξη $user για $time + "@timeout": + description: Μήνυμα συνομιλίας που εμφανίζει συμβάντα timeout + ended: STREAM ΤΕΛΕΙΩΣΕ + "@ended": + description: Η ροή τελείωσε το υποσέλιδο στο κάτω μέρος της συνομιλίας + zap(rich): $user zapped $amount sats + "@zap": + description: Μήνυμα συνομιλίας που δείχνει ροή ροής zaps + write: + label: Γράψτε μήνυμα + "@label": + description: Ετικέτα στο πλαίσιο εισαγωγής μηνύματος συνομιλίας + no_signer: Δεν μπορείτε να γράψετε μηνύματα με σύνδεση στο npub + "@no_signer": + description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης είναι + συνδεδεμένος μόνο με το κλειδί pubkey + login: Παρακαλώ συνδεθείτε για να στείλετε μηνύματα + "@login": + description: Μήνυμα εισόδου συνομιλίας που εμφανίζεται όταν ο χρήστης έχει + αποσυνδεθεί + badge: + awarded_to: "Απονέμεται σε:" + "@awarded_to": + description: Επικεφαλίδα πάνω από τη λίστα των χρηστών στους οποίους έχει + απονεμηθεί ένα σήμα + raid: + to: RAIDING $name + "@to": + description: Μήνυμα επιδρομής συνομιλίας σε άλλη ροή + from: RAID FROM $name + "@from": + description: Μήνυμα επιδρομής συνομιλίας από άλλη ροή + countdown: Επιδρομές στο $time + "@countdown": + description: Χρονοδιακόπτης αντίστροφης μέτρησης για αυτόματη ιππασία +goal: + title: "Στόχος: $amount" + remaining: "Υπόλοιπο: $amount" + complete: ΠΛΗΡΗΣ +button: + login: Σύνδεση + logout: Αποσύνδεση + edit_profile: Επεξεργασία προφίλ + "@login": + description: Κείμενο κουμπιού για το κουμπί σύνδεσης + follow: Ακολουθήστε το + "@follow": + description: Κείμενο κουμπιού για το κουμπί follow + unfollow: Ακολουθήστε το + "@unfollow": + description: Κείμενο κουμπιού για το κουμπί unfollow + mute: Σίγαση + unmute: Αποσυνδέστε τη φωνή σας από το + share: Μοιραστείτε το + save: Αποθήκευση +embed: + article_by: Άρθρο από $name + note_by: Σημείωση του $name + live_stream_by: Ζωντανή μετάδοση από το $name +stream_list: + following: Ακολουθώντας το + live: Ζωντανό + planned: Προγραμματισμένο + ended: Τελείωσε +"@stream_list": + description: Επικεφαλίδες στις λίστες ροής ανά τύπο ροής + ζωντανή/τελειωμένη/προγραμματισμένη κ.λπ. +zap: + title: Zap $name + custom_amount: Προσαρμοσμένο ποσό + confirm: Επιβεβαίωση + comment: Σχόλιο + button_zap_ready: Zap $amount sats + button_zap: Zap + button_open_wallet: Άνοιγμα στο πορτοφόλι + copy: Αντιγραφή στο πρόχειρο + error: + invalid_custom_amount: Μη έγκυρο προσαρμοσμένο ποσό + no_wallet: Δεν έχει εγκατασταθεί πορτοφόλι αστραπής + no_lud16: Δεν βρέθηκε διεύθυνση κεραυνού +profile: + past_streams: Προηγούμενα ρεύματα + edit: + display_name: Όνομα οθόνης + about: Σχετικά με το + nip05: Διεύθυνση Nostr + lud16: Διεύθυνση Lightning + error: + logged_out: Δεν μπορείτε να επεξεργαστείτε το προφίλ όταν έχετε αποσυνδεθεί +login: + username: Όνομα χρήστη + amber: Σύνδεση με Amber + key: Σύνδεση με κλειδί + create: Δημιουργία λογαριασμού + error: + invalid_key: Μη έγκυρο κλειδί diff --git a/lib/i18n/translated/en.i18n.yaml b/lib/i18n/translated/en.i18n.yaml new file mode 100644 index 0000000..5258519 --- /dev/null +++ b/lib/i18n/translated/en.i18n.yaml @@ -0,0 +1,122 @@ +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 new file mode 100644 index 0000000..c461474 --- /dev/null +++ b/lib/i18n/translated/es.i18n.yaml @@ -0,0 +1,127 @@ +upload_avatar: Subir avatar +"@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": + description: Encabezando streamers superiores listados por zaps +no_user_found: No se ha encontrado ningún usuario +"@no_user_found": + description: No se ha encontrado ningún usuario al realizar la búsqueda +anon: Anónimo +viewers: + one: 1 espectador + other: $n espectadores +"@viewers": + description: Número de espectadores del flujo + placeholders: + n: + type: int +"@anon": + description: Un usuario anónimo +stream: + status: + live: EN VIVO + ended: FIN + planned: PLANIFICADO + started: Comenzó $timestamp + chat: + disabled: CHAT DESHABILITADO + disabled_timeout: "El tiempo de espera expira: $time" + timeout(rich): $mod timed out $user para $time + "@timeout": + description: Mensaje de chat que muestra los eventos de tiempo de espera + ended: STREAM FINED + "@ended": + description: Stream finalizó en la parte inferior del chat + zap(rich): $user zapearon $amount sats + "@zap": + description: Mensaje de chat que muestra zaps de flujo + write: + label: Escribir mensaje + "@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 + 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: + awarded_to: "Concedido a:" + "@awarded_to": + description: Encabezamiento de la lista de usuarios a los que se ha concedido + una insignia + raid: + to: RAIDING $name + "@to": + description: Mensaje de raid de chat a otro flujo + from: RAID DESDE $name + "@from": + description: Mensaje de incursión en el chat desde otro flujo + countdown: Incursiones en $time + "@countdown": + description: Temporizador de cuenta atrás para auto-raiding +goal: + title: "Objetivo: $amount" + remaining: "Resto: $amount" + complete: COMPLETAR +button: + login: Iniciar Sesión + logout: Cerrar sesión + edit_profile: Editar Perfil + "@login": + description: Texto del botón de inicio de sesión + follow: Seguir + "@follow": + description: Texto del botón de seguimiento + unfollow: Dejar de seguir + "@unfollow": + description: Texto del botón "Dejar de seguir + mute: Silenciar + unmute: Dejar de silenciar + share: Compartir + save: Guardar +embed: + article_by: Artículo de $name + note_by: Nota de $name + live_stream_by: Transmisión en directo por $name +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: + title: Zap $name + custom_amount: Importe personalizado + confirm: Confirmar + comment: Comentario + button_zap_ready: Zapear $amount sats + button_zap: Zap + button_open_wallet: Abrir en cartera + copy: Copiado al portapapeles + 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: + past_streams: Transmisiones anteriores + edit: + display_name: Mostrar nombre + about: Sobre ti + nip05: Dirección Nostr + lud16: Dirección del rayo + error: + logged_out: No se puede editar el perfil cuando se cierra la sesión +login: + username: Usuario + amber: Iniciar sesión con Amber + key: Inicio de sesión con clave + create: Crear una cuenta + error: + invalid_key: Clave no válida diff --git a/lib/i18n/translated/fi.i18n.yaml b/lib/i18n/translated/fi.i18n.yaml new file mode 100644 index 0000000..c09f2ee --- /dev/null +++ b/lib/i18n/translated/fi.i18n.yaml @@ -0,0 +1,125 @@ +upload_avatar: Lataa avatar +"@upload_avatar": + description: Teksti, joka kehottaa käyttäjää painamaan avatar-merkkiä + aloittaakseen lataamisen. +most_zapped_streamers: Eniten Zapped Streamers +"@most_zapped_streamers": + description: Päällekkäin lueteltujen alkuun streamers by zaps +no_user_found: Käyttäjää ei löytynyt +"@no_user_found": + description: Käyttäjää ei löytynyt haun yhteydessä +anon: Anon +viewers: + one: 1 katsoja + other: $n katsojaa +"@viewers": + description: Streamin katsojien määrä + placeholders: + n: + type: int +"@anon": + description: Nimetön käyttäjä +stream: + status: + live: LIVE + ended: ENDED + planned: SUUNNITELTU + started: Aloitettu $timestamp + chat: + disabled: CHAT POISTETTU KÄYTÖSTÄ + disabled_timeout: "Aikakatkaisu päättyy: $time" + timeout(rich): $mod ajastettu $user for $time + "@timeout": + description: Chat-viesti, joka näyttää aikakatkaisutapahtumat + ended: STREAM PÄÄTTYNYT + "@ended": + description: Virta päättyi alatunnisteen alareunaan chatissa + zap(rich): $user zappasi $amount satsia + "@zap": + description: Chat-viestin näyttäminen stream zaps + write: + label: Kirjoita viesti + "@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. + login: Kirjaudu sisään lähettääksesi viestejä + "@login": + description: Chat-syötteen viesti näytetään, kun käyttäjä on kirjautunut ulos. + badge: + awarded_to: "Myönnetty:" + "@awarded_to": + description: Merkin saaneiden käyttäjien luettelon otsikko + raid: + to: RAIDING $name + "@to": + description: Chat-viesti toiseen streamiin + from: RAID FROM $name + "@from": + description: Chat raid viesti toisesta virrasta + countdown: Ryöstöretket osoitteessa $time + "@countdown": + description: Lähtölaskenta ajastin automaattista ratsastusta varten +goal: + title: "Tavoite: $amount" + remaining: "Jäljellä: $amount" + complete: TÄYDELLINEN +button: + login: Kirjaudu sisään + logout: Kirjaudu ulos + edit_profile: Muokkaa profiilia + "@login": + description: Kirjautumispainikkeen teksti + follow: Seuraa + "@follow": + description: Seuraa-painikkeen painikkeen teksti + unfollow: Älä seuraa + "@unfollow": + description: Seuraa-painikkeen teksti + mute: Mykistä + unmute: Poista mykistys + share: Jaa + save: Tallenna +embed: + article_by: Artikkeli $name + note_by: Viesti lähettäjältä $name + live_stream_by: Suora lähetys osoitteessa $name +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: + title: Zap $name + custom_amount: Mukautettu määrä + confirm: Vahvista + comment: Kommentoi + button_zap_ready: Zap $amount satsia + button_zap: Zap + button_open_wallet: Avaa lompakossa + copy: Kopioitu leikepöydälle + error: + invalid_custom_amount: Virheellinen mukautettu määrä + no_wallet: Ei asennettua salamalompakkoa + no_lud16: Salamaosoitetta ei löytynyt +profile: + past_streams: Aikaisemmat lähetykset + edit: + display_name: Näytön nimi + about: Tietoja + nip05: Nostr-osoite + lud16: Lightning-osoite + error: + logged_out: Ei voi muokata profiilia, kun on kirjautunut ulos +login: + username: Käyttäjätunnus + amber: Kirjaudu sisään Amber kanssa + key: Kirjaudu sisään avaimella + create: Luo tili + error: + invalid_key: Virheellinen avain diff --git a/lib/i18n/translated/fr.i18n.yaml b/lib/i18n/translated/fr.i18n.yaml new file mode 100644 index 0000000..fe7ae5a --- /dev/null +++ b/lib/i18n/translated/fr.i18n.yaml @@ -0,0 +1,124 @@ +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 +most_zapped_streamers: Les Streamers les plus zappés +"@most_zapped_streamers": + description: Les têtes d'affiche sont listées par zaps. +no_user_found: Aucun utilisateur trouvé +"@no_user_found": + description: Aucun utilisateur n'a été trouvé lors de la recherche +anon: Anonyme +viewers: + one: 1 téléspectateur + other: $n spectateurs +"@viewers": + description: Nombre de spectateurs du flux + placeholders: + n: + type: int +"@anon": + description: Un utilisateur anonyme +stream: + status: + live: VIVRE + ended: FINI + planned: PRÉVU + started: Commencé à $timestamp + chat: + disabled: CHAT DISABLED + disabled_timeout: "Le délai expire : $time" + timeout(rich): $mod $user a expiré dans le temps pour $time + "@timeout": + description: Message de chat indiquant les événements de dépassement de délai + ended: STREAM ENDED + "@ended": + description: Stream ended footer at bottom of chat + zap(rich): $user a zappé $amount sats + "@zap": + description: Message de chat montrant des zaps de flux + write: + label: Message écrit + "@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 + login: Veuillez vous connecter pour envoyer des messages + "@login": + description: Message d'entrée du chat affiché lorsque l'utilisateur est déconnecté + badge: + awarded_to: "Attribué à :" + "@awarded_to": + description: Titre sur la liste des utilisateurs qui ont reçu un badge + raid: + to: RAIDING $name + "@to": + description: Message de raid par chat vers un autre flux + from: RAID FROM $name + "@from": + description: Message de raid sur le chat à partir d'un autre flux + countdown: Raid sur $time + "@countdown": + description: Compte à rebours pour l'auto-raid +goal: + title: "Objectif : $amount" + remaining: "Reste : $amount" + complete: COMPLET +button: + login: Se Connecter + logout: Se déconnecter + edit_profile: Modifier le Profil + "@login": + description: Texte du bouton de connexion + follow: Suivre + "@follow": + description: Texte du bouton de suivi + unfollow: Ne plus suivre + "@unfollow": + description: Texte du bouton pour le bouton "unfollow + mute: Muet + unmute: Retirer sourdine + share: Partager + save: Sauvegarder +embed: + article_by: Article par $name + note_by: Note par $name + live_stream_by: Retransmission en direct sur $name +stream_list: + following: Abonnements + live: En direct + planned: Planifié + ended: Terminé +"@stream_list": + description: Rubriques sur les listes de flux par type de flux en direct/fini/prévu, etc. +zap: + title: Zap $name + custom_amount: Montant personnalisé + confirm: Confirmer + comment: Commenter + button_zap_ready: Zapper $amount sats + button_zap: Zap + button_open_wallet: Ouvrir dans le portefeuille + copy: Copié dans le presse-papiers + 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: + past_streams: Streams passés + edit: + display_name: Nom d'affichage + about: À propos + nip05: Adresse Nostr + lud16: Adresse Lightning + error: + logged_out: Impossible de modifier le profil lorsque l'on est déconnecté +login: + username: Nom d’utilisateur + amber: Se connecter avec Amber + key: Connexion avec la clé + create: Créer un Compte + error: + invalid_key: Clé non valide diff --git a/lib/i18n/translated/he.i18n.yaml b/lib/i18n/translated/he.i18n.yaml new file mode 100644 index 0000000..5258519 --- /dev/null +++ b/lib/i18n/translated/he.i18n.yaml @@ -0,0 +1,122 @@ +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/hu.i18n.yaml b/lib/i18n/translated/hu.i18n.yaml new file mode 100644 index 0000000..8f54426 --- /dev/null +++ b/lib/i18n/translated/hu.i18n.yaml @@ -0,0 +1,124 @@ +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 +most_zapped_streamers: A legtöbb 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": + description: Kereséskor nem talált felhasználó +anon: Névtelen +viewers: + one: 1 néző + other: $n néző +"@viewers": + description: A stream nézőinek száma + placeholders: + n: + type: int +"@anon": + description: Egy névtelen felhasználó +stream: + status: + live: ÉLŐ + ended: ENDED + planned: TERVEZETT + started: Elindult $timestamp + 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": + description: Chat üzenet az időkorlátos események megjelenítésével + ended: STREAM MEGSZÜNTETETT + "@ended": + description: A stream véget ért lábléc a chat alján + zap(rich): $user zap-elt $amount sats + "@zap": + description: Csevegőüzenet, amely stream zapokat mutat + write: + label: Üzenet írása + "@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 + login: Kérjük, jelentkezzen be az üzenetek küldéséhez + "@login": + description: A felhasználó kijelentkezésekor megjelenő csevegési beviteli üzenet + badge: + awarded_to: "Elnyerte:" + "@awarded_to": + description: Fejléc a jelvényt kapott felhasználók listája fölött + raid: + to: RAIDING $name + "@to": + description: Chat raid üzenet egy másik folyamba + from: RAID FROM $name + "@from": + description: Chat raid üzenet egy másik folyamból + countdown: Raiding a $time oldalon + "@countdown": + description: Visszaszámláló időzítő az automatikus lovagláshoz +goal: + title: "Cél: $amount" + remaining: "Maradék: $amount" + complete: TELJES +button: + login: Bejelentkezés + logout: Kijelentkezés + edit_profile: Profil szerkesztése + "@login": + description: A bejelentkezési gomb szövege + follow: Követés + "@follow": + description: A követés gomb szövege + unfollow: Követés megszüntetése + "@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: + article_by: A $name cikke. + note_by: $name bejegyzése + live_stream_by: Élő közvetítés a $name oldalon +stream_list: + following: Követettek bejegyzései + live: Élő + planned: Tervezett + ended: Véget ért +"@stream_list": + description: A stream-listák címsorai stream-típusonként élő/befejezett/tervezett stb. +zap: + title: Zap $name + custom_amount: Egyéni összeg + confirm: Megerősítés + comment: Hozzászólás + button_zap_ready: Zap $amount satoshi + button_zap: Zap + button_open_wallet: Megnyitás a pénztárcában + copy: Vágólapra másolva + 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: + past_streams: Múltbeli Streamek + edit: + display_name: Megjelenített név + about: Névjegy + nip05: Nostr-cím + lud16: Lightning-cím + error: + logged_out: Kijelentkezve nem lehet profilt szerkeszteni +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: + invalid_key: Érvénytelen kulcs diff --git a/lib/i18n/translated/it.i18n.yaml b/lib/i18n/translated/it.i18n.yaml new file mode 100644 index 0000000..8f1b7ba --- /dev/null +++ b/lib/i18n/translated/it.i18n.yaml @@ -0,0 +1,125 @@ +upload_avatar: Carica Avatar +"@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": + description: Direzione sopra elencata top streamers da zaps +no_user_found: Nessun utente trovato +"@no_user_found": + description: Nessun utente trovato durante la ricerca +anon: Anonimo +viewers: + one: 1 spettatore + other: $n spettatori +"@viewers": + description: Numero di spettatori del flusso + placeholders: + n: + type: int +"@anon": + description: Un utente anonimo +stream: + status: + live: IN DIRETTA + ended: FINE + planned: PREVISTO + started: Avviato $timestamp + chat: + disabled: CHAT DISABILITATA + disabled_timeout: "Il timeout scade: $time" + timeout(rich): $mod time out $user per $time + "@timeout": + description: Messaggio di chat che mostra gli eventi di timeout + ended: STREAM 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": + description: Messaggio di chat che mostra gli zap del flusso + write: + label: Scrivi il messaggio + "@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 + login: Effettuare il login per inviare messaggi + "@login": + description: Messaggio di input della chat mostrato quando l'utente è disconnesso + badge: + awarded_to: "Assegnato a:" + "@awarded_to": + description: Intestazione dell'elenco degli utenti a cui è stato assegnato un badge + raid: + to: RAIDING $name + "@to": + description: Messaggio di chat raid in un altro flusso + from: RAID DA $name + "@from": + description: Messaggio di chat raid da un altro flusso + countdown: Raid in $time + "@countdown": + description: Timer per il conto alla rovescia per l'auto-raid +goal: + title: "Obiettivo: $amount" + remaining: "Restante: $amount" + complete: COMPLETO +button: + login: Login + logout: Logout + edit_profile: Modifica profilo + "@login": + description: Testo del pulsante per il pulsante di accesso + follow: Segui + "@follow": + description: Testo del pulsante per il pulsante Segui + unfollow: Smetti di seguire + "@unfollow": + description: Testo del pulsante per il pulsante unfollow + mute: Silenzia + unmute: Riattiva + share: Condividi + save: Salva +embed: + article_by: Articolo di $name + note_by: Nota di $name + live_stream_by: Streaming in diretta da $name +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: + title: Zap $name + custom_amount: Importo personalizzato + confirm: Conferma + comment: Commenta + button_zap_ready: Zap $amount sats + button_zap: Zap + button_open_wallet: Aprire nel portafoglio + copy: Copiato negli appunti + error: + invalid_custom_amount: Importo personalizzato non valido + no_wallet: Nessun portafoglio Lightning installato + no_lud16: Nessun indirizzo di fulmine trovato +profile: + past_streams: Flussi passati + edit: + display_name: Nome visualizzato + about: Info + nip05: Indirizzo Nostr + lud16: Indirizzo del fulmine + error: + logged_out: Impossibile modificare il profilo quando si è disconnessi +login: + username: Nome utente + amber: Accesso con Amber + key: Accesso con chiave + create: Crea un account + error: + invalid_key: Chiave non valida diff --git a/lib/i18n/translated/ja.i18n.yaml b/lib/i18n/translated/ja.i18n.yaml new file mode 100644 index 0000000..4c0eb44 --- /dev/null +++ b/lib/i18n/translated/ja.i18n.yaml @@ -0,0 +1,122 @@ +upload_avatar: アバターのアップロード +"@upload_avatar": + description: アバターのプレースホルダーを押してアップロードを開始するよう促すテキスト +most_zapped_streamers: 最もザッピングされたストリーマー +"@most_zapped_streamers": + description: ザップによるリストの上のストリーマーに向かう +no_user_found: ユーザーが見つかりません +"@no_user_found": + description: 検索してもユーザーが見つからない +anon: 匿名 +viewers: + one: 1 視聴者 + other: $n 人が視聴中 +"@viewers": + description: ストリームの視聴者数 + placeholders: + n: + type: イント +"@anon": + description: 匿名ユーザー +stream: + status: + live: ライブ + ended: 終了 + planned: 予定 + started: $timestamp を開始 + chat: + disabled: チャット無効 + disabled_timeout: タイムアウト: $time + timeout(rich): $mod タイムアウト $user for $time + "@timeout": + description: タイムアウトイベントを表示するチャットメッセージ + ended: 配信終了 + "@ended": + description: チャットの下にストリーム終了のフッター + zap(rich): $user が $amount sats をザップしました + "@zap": + description: ストリームのザッピングを表示するチャットメッセージ + write: + label: メッセージを書く + "@label": + description: チャットメッセージ入力ボックスのラベル + no_signer: npubログインでメッセージが書けない + "@no_signer": + description: ユーザーがpubkeyのみでログインしている場合に表示されるチャット入力メッセージ + login: メッセージを送信するにはログインしてください + "@login": + description: ログアウト時に表示されるチャット入力メッセージ + badge: + awarded_to: 受賞者 + "@awarded_to": + description: バッジを授与されたユーザーのリスト上の見出し + raid: + to: RAIDING $name + "@to": + description: 別のストリームへのチャット襲撃メッセージ + from: RAID FROM $name + "@from": + description: 他のストリームからのチャット襲撃メッセージ + countdown: $timeにおける襲撃 + "@countdown": + description: 自動騎乗のカウントダウン・タイマー +goal: + title: 目標額: $amount + remaining: 残り: $amount + complete: 完了 +button: + login: ログイン + logout: ログアウト + edit_profile: プロフィールを編集 + "@login": + description: ログインボタンのテキスト + follow: フォロー + "@follow": + description: フォローボタンのテキスト + unfollow: フォロー解除 + "@unfollow": + description: フォロー解除ボタンのテキスト + mute: ミュート + unmute: ミュート解除 + share: 共有 + save: 保存 +embed: + article_by: 記事: $name + note_by: $name の投稿 + live_stream_by: ライブ・ストリーム $name +stream_list: + following: フォロー中 + live: ライブ配信中 + planned: 予定あり + ended: 終了しました +"@stream_list": + description: ライブ/終了/予定など、ストリーム・タイプ別のストリーム・リストの見出し。 +zap: + title: $name をザップ + custom_amount: カスタム金額 + confirm: 確認 + comment: コメント + button_zap_ready: $amount satsをザップする + button_zap: ザップ + button_open_wallet: ウォレットで開く + copy: クリップボードにコピー + error: + invalid_custom_amount: 無効なカスタム金額 + no_wallet: Lightningウォレット未装着 + no_lud16: 雷アドレスが見つかりません +profile: + past_streams: 過去の配信 + edit: + display_name: 表示名 + about: 自己紹介 + nip05: Nostrアドレス + lud16: ライトニングアドレス + error: + logged_out: ログアウトするとプロフィールが編集できない +login: + username: ユーザー名 + amber: 琥珀でログイン + key: キーでログイン + create: アカウントを作成する + error: + invalid_key: 無効なキー diff --git a/lib/i18n/translated/ko.i18n.yaml b/lib/i18n/translated/ko.i18n.yaml new file mode 100644 index 0000000..9a3f101 --- /dev/null +++ b/lib/i18n/translated/ko.i18n.yaml @@ -0,0 +1,122 @@ +upload_avatar: 아바타 업로드 +"@upload_avatar": + description: 아바타 플레이스홀더를 눌러 업로드를 시작하라는 메시지를 표시하는 텍스트 +most_zapped_streamers: 가장 많이 재핑된 스트리머 +"@most_zapped_streamers": + description: 나열된 상위 스트리머를 잽별로 살펴보기 +no_user_found: 사용자를 찾을 수 없습니다. +"@no_user_found": + description: 검색 시 사용자를 찾을 수 없음 +anon: Anon +viewers: + one: 시청자 1명 + other: $n 시청자 +"@viewers": + description: 스트림 시청자 수 + placeholders: + n: + type: int +"@anon": + description: 익명 사용자 +stream: + status: + live: 라이브 + ended: 종료 + planned: 계획된 + started: 시작 $timestamp + chat: + disabled: 채팅 사용 안 함 + disabled_timeout: "시간 초과가 만료되었습니다: $time" + timeout(rich): $mod 시간 초과됨 $user $time + "@timeout": + description: 시간 초과 이벤트를 표시하는 채팅 메시지 + ended: 스트림 종료 + "@ended": + description: 채팅 하단의 스트림 종료 푸터 + zap(rich): $user ZAPP $amount SATS + "@zap": + description: 채팅 메시지 스트림 끊김 표시 + write: + label: 메시지 작성 + "@label": + description: 채팅 메시지 입력 상자의 라벨 + no_signer: npub 로그인으로 메시지를 작성할 수 없습니다. + "@no_signer": + description: 사용자가 공개 키로만 로그인한 경우에 표시되는 채팅 입력 메시지 + login: 메시지를 보내려면 로그인하세요. + "@login": + description: 사용자가 로그아웃할 때 표시되는 채팅 입력 메시지 + badge: + awarded_to: 수상 대상 + "@awarded_to": + description: 배지를 받은 사용자 목록으로 이동하기 + raid: + to: RAIDing $name + "@to": + description: 다른 스트림으로 채팅 레이드 메시지 보내기 + from: RAID FROM $name + "@from": + description: 다른 스트림의 채팅 레이드 메시지 + countdown: $time에서 레이드 + "@countdown": + description: 자동 레이드를 위한 카운트다운 타이머 +goal: + title: "목표: $amount" + remaining: "남음: $amount" + complete: 완료 +button: + login: 로그인 + logout: 로그아웃 + edit_profile: 프로필 수정 + "@login": + description: 로그인 버튼의 버튼 텍스트 + follow: 팔로우 + "@follow": + description: 팔로우 버튼의 버튼 텍스트 + unfollow: 언팔로우 + "@unfollow": + description: 언팔로우 버튼의 버튼 텍스트 + mute: 뮤트 + unmute: 뮤트 해제 + share: 공유 + save: 저장 +embed: + article_by: "작성자: $name" + note_by: "노트 작성됨: $name" + live_stream_by: "라이브 스트리밍: $name" +stream_list: + following: 팔로잉 + live: 라이브 + planned: 계획된 + ended: 종료됨 +"@stream_list": + description: 실시간/종료/예정 등 스트림 유형별로 스트림 목록의 제목을 표시합니다. +zap: + title: Zap $name + custom_amount: 사용자 지정 금액 + confirm: 확인 + comment: 댓글 + button_zap_ready: Zap $amount sats + button_zap: Zap + button_open_wallet: 지갑에서 열기 + copy: 클립보드에 복사 + error: + invalid_custom_amount: 잘못된 사용자 지정 금액 + no_wallet: 라이트닝 월렛이 설치되지 않았습니다. + no_lud16: 번개 주소를 찾을 수 없습니다. +profile: + past_streams: 과거 스트림 + edit: + display_name: 표시 이름 + about: 정보 + nip05: 노스트르 주소 + lud16: 라이트닝 주소 + error: + logged_out: 로그아웃 시 프로필 수정 불가 +login: + username: 사용자 이름 + amber: Amber로 로그인 + key: 키로 로그인 + create: 계정 만들기 + error: + invalid_key: 잘못된 키 diff --git a/lib/i18n/translated/nl.i18n.yaml b/lib/i18n/translated/nl.i18n.yaml new file mode 100644 index 0000000..c93283c --- /dev/null +++ b/lib/i18n/translated/nl.i18n.yaml @@ -0,0 +1,125 @@ +upload_avatar: Avatar 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": + description: Koers over beursgenoteerde topstreamers door zaps +no_user_found: Geen gebruiker gevonden +"@no_user_found": + description: Geen gebruiker gevonden bij het zoeken +anon: Anon +viewers: + one: 1 kijker + other: $n kijkers +"@viewers": + description: Aantal kijkers van de stream + placeholders: + n: + type: int +"@anon": + description: Een anonieme gebruiker +stream: + status: + live: LIVE + ended: GESLOTEN + planned: GEPLAND + started: Begonnen met $timestamp + chat: + disabled: CHAT UITGESCHAKELD + disabled_timeout: "Time-out loopt af: $time" + timeout(rich): $mod timed out $user voor $time + "@timeout": + description: Chatbericht met time-outgebeurtenissen + ended: STREAM BEËINDIGD + "@ended": + description: Voettekst einde stream onderaan chat + zap(rich): $user zapped $amount sats + "@zap": + description: Chatbericht met stream zaps + write: + label: Schrijf bericht + "@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 + login: Log in om berichten te verzenden + "@login": + description: Chatinvoerbericht dat wordt weergegeven wanneer de gebruiker is + uitgelogd + badge: + awarded_to: "Toegekend aan:" + "@awarded_to": + description: Kop boven de lijst met gebruikers die een badge hebben gekregen + raid: + to: RAIDING $name + "@to": + description: Chat raid bericht naar een andere stream + from: RAID VAN $name + "@from": + description: Chat invalbericht van een andere stream + countdown: Overvallen in $time + "@countdown": + description: Afteltimer voor automatisch rijden +goal: + title: "Doel: $amount" + remaining: "Overblijvend: $amount" + complete: COMPLETE +button: + login: Inloggen + logout: Uitloggen + edit_profile: Bewerk Profiel + "@login": + description: Knoptekst voor de aanmeldknop + follow: Volgen + "@follow": + description: Knoptekst voor de volgknop + unfollow: Ontvolgen + "@unfollow": + description: Knoptekst voor de knop Ontvolgen + mute: Dempen + unmute: Niet langer negeren + share: Deel + save: Opslaan +embed: + article_by: Artikel door $name + note_by: Opmerking door $name + live_stream_by: Live stream via $name +stream_list: + following: Volgt + live: Live + planned: Gepland + ended: Beëindigd +"@stream_list": + description: Rubrieken op streamlijsten per streamtype live/beëindigd/gepland etc. +zap: + title: Zap $name + custom_amount: Aangepast bedrag + confirm: Bevestig + comment: Opmerking + button_zap_ready: Zap $amount sats + button_zap: Zap + button_open_wallet: Openen in portefeuille + copy: Gekopieerd naar klembord + error: + invalid_custom_amount: Ongeldig aangepast bedrag + no_wallet: Geen bliksemportemonnee geïnstalleerd + no_lud16: Geen bliksemadres gevonden +profile: + past_streams: Afgelopen Streams + edit: + display_name: Naam weergeven + about: Over ons + nip05: Nostr Adres + lud16: Lightning adres + error: + logged_out: Kan profiel niet bewerken als ik ben uitgelogd +login: + username: Gebruikersnaam + amber: Inloggen met Amber + key: Inloggen met sleutel + create: Account aanmaken + error: + invalid_key: Ongeldige sleutel diff --git a/lib/i18n/translated/no.i18n.yaml b/lib/i18n/translated/no.i18n.yaml new file mode 100644 index 0000000..5258519 --- /dev/null +++ b/lib/i18n/translated/no.i18n.yaml @@ -0,0 +1,122 @@ +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/pl.i18n.yaml b/lib/i18n/translated/pl.i18n.yaml new file mode 100644 index 0000000..5067086 --- /dev/null +++ b/lib/i18n/translated/pl.i18n.yaml @@ -0,0 +1,125 @@ +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. +most_zapped_streamers: Większość zapped streamerów +"@most_zapped_streamers": + description: Przechodzenie nad wymienionymi topowymi streamerami przez zapy +no_user_found: Nie znaleziono użytkownika +"@no_user_found": + description: Nie znaleziono użytkownika podczas wyszukiwania +anon: Anon +viewers: + one: 1 przeglądarka + other: $n widzowie +"@viewers": + description: Liczba widzów strumienia + placeholders: + n: + type: int +"@anon": + description: Anonimowy użytkownik +stream: + status: + live: NA ŻYWO + ended: ZAKOŃCZONY + planned: PLANOWANE + started: Start $timestamp + chat: + disabled: CZAT WYŁĄCZONY + disabled_timeout: "Upłynął limit czasu: $time" + timeout(rich): $mod upłynął limit czasu $user dla $time + "@timeout": + description: Komunikat czatu pokazujący zdarzenia przekroczenia limitu czasu + ended: TRANSMISJA ZAKOŃCZONA + "@ended": + description: Stream zakończył stopkę na dole czatu + zap(rich): $user zapped $amount sats + "@zap": + description: Wiadomość na czacie pokazująca zapy strumienia + write: + label: Napisz wiadomość + "@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 + login: Zaloguj się, aby wysyłać wiadomości + "@login": + description: Komunikat wejściowy czatu wyświetlany, gdy użytkownik jest wylogowany + badge: + awarded_to: "Przyznano:" + "@awarded_to": + description: Nagłówek nad listą użytkowników, którzy otrzymali odznakę + raid: + to: RAIDING $name + "@to": + description: Przesyłanie wiadomości na czacie do innego strumienia + from: RAID Z $name + "@from": + description: Nalot na czat z innego strumienia + countdown: Naloty w $time + "@countdown": + description: Zegar odliczający czas do automatycznej jazdy +goal: + title: "Cel: $amount" + remaining: "Pozostałe: $amount" + complete: ZAKOŃCZONE +button: + login: Logowanie + logout: Wylogowanie + edit_profile: Edytuj profil + "@login": + description: Tekst przycisku logowania + follow: Śledź + "@follow": + description: Tekst przycisku dla przycisku śledzenia + unfollow: Nie obserwuj + "@unfollow": + description: Tekst przycisku cofnięcia obserwowania + mute: Wyciszenie + unmute: Wyłącz wyciszenie + share: Udział + save: Zapisz +embed: + article_by: Artykuł autorstwa $name + note_by: Uwaga $name + live_stream_by: Transmisja na żywo przez $name +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: + title: Zap $name + custom_amount: Kwota niestandardowa + confirm: Potwierdzenie + comment: Komentarz + button_zap_ready: Zap $amount sats + button_zap: Zap + button_open_wallet: Otwórz w portfelu + copy: Skopiowane do schowka + error: + invalid_custom_amount: Nieprawidłowa kwota niestandardowa + no_wallet: Brak zainstalowanego portfela Lightning + no_lud16: Nie znaleziono adresu pioruna +profile: + past_streams: Poprzednie strumienie + edit: + display_name: Wyświetlana nazwa + about: O + nip05: Adres Nostr + lud16: Adres błyskawicy + error: + logged_out: Nie można edytować profilu po wylogowaniu +login: + username: Nazwa użytkownika + amber: Zaloguj się za pomocą Amber + key: Logowanie za pomocą klucza + create: Utwórz konto + error: + invalid_key: Nieprawidłowy klucz diff --git a/lib/i18n/translated/pt.i18n.yaml b/lib/i18n/translated/pt.i18n.yaml new file mode 100644 index 0000000..8da7f80 --- /dev/null +++ b/lib/i18n/translated/pt.i18n.yaml @@ -0,0 +1,125 @@ +upload_avatar: Carregar Avatar +"@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": + description: Dirigindo-se para as principais serpentinas listadas por zaps +no_user_found: Nenhum usuário encontrado +"@no_user_found": + description: Nenhum usuário foi encontrado durante a pesquisa +anon: Anônimo +viewers: + one: 1 visualizador + other: $n espectadores +"@viewers": + description: Número de espectadores da transmissão + placeholders: + n: + type: int +"@anon": + description: Um usuário anônimo +stream: + status: + live: AO VIVO + ended: FINALIZADO + planned: PLANEJADO + started: Iniciado em $timestamp + chat: + disabled: BATE-PAPO DESATIVADO + disabled_timeout: "O tempo limite expira: $time" + timeout(rich): $mod Tempo esgotado $user para $time + "@timeout": + description: Mensagem de bate-papo mostrando eventos de tempo limite + ended: TRANSMISSÃO ENCERRADA + "@ended": + description: O rodapé do fluxo terminou na parte inferior do bate-papo + zap(rich): $user zapeou $amount sats + "@zap": + description: Mensagem de bate-papo mostrando zaps de fluxo + write: + label: Escrever mensagem + "@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 + login: Faça login para enviar mensagens + "@login": + description: Mensagem de entrada de chat exibida quando o usuário está desconectado + badge: + awarded_to: "Prêmio concedido a:" + "@awarded_to": + description: Cabeçalho sobre a lista de usuários que receberam um emblema + raid: + to: RAIDING $name + "@to": + description: Mensagem de invasão de bate-papo para outro fluxo + from: RAID DE $name + "@from": + description: Mensagem de invasão de bate-papo de outro fluxo + countdown: Incursões em $time + "@countdown": + description: Cronômetro de contagem regressiva para o ataque automático +goal: + title: "Meta: $amount" + remaining: "Restante: $amount" + complete: COMPLETO +button: + login: Entrar + logout: Sair + edit_profile: Editar perfil + "@login": + description: Texto do botão para o botão de login + follow: Seguir + "@follow": + description: Texto do botão para o botão Seguir + unfollow: Deixar de seguir + "@unfollow": + description: Texto do botão para o botão deixar de seguir + mute: Silenciar + unmute: Desmutar + share: Compartilhar + save: Salvar +embed: + article_by: Artigo de $name + note_by: Nota de $name + live_stream_by: Transmissão ao vivo pelo site $name +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: + title: Zap $name + custom_amount: Valor personalizado + confirm: Confirmar + comment: Comentar + button_zap_ready: Enviar Zap de $amount sats + button_zap: Zap + button_open_wallet: Abrir na carteira + copy: Copiado para a área de transferência + error: + invalid_custom_amount: Valor personalizado inválido + no_wallet: Nenhuma carteira lightning instalada + no_lud16: Nenhum endereço de raio encontrado +profile: + past_streams: Transmissões Passadas + edit: + display_name: Nome de exibição + about: Sobre + nip05: Endereço do Nostr + lud16: Endereço Lightning + error: + logged_out: Não é possível editar o perfil quando se está desconectado +login: + username: Nome de usuário + amber: Faça login com o Amber + key: Login com chave + create: Criar Conta + error: + invalid_key: Chave inválida diff --git a/lib/i18n/translated/ro.i18n.yaml b/lib/i18n/translated/ro.i18n.yaml new file mode 100644 index 0000000..55330b1 --- /dev/null +++ b/lib/i18n/translated/ro.i18n.yaml @@ -0,0 +1,126 @@ +upload_avatar: Încărcați Avatar +"@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": + description: Cap peste streamers de top enumerate de zaps +no_user_found: Niciun utilizator găsit +"@no_user_found": + description: Nu s-a găsit niciun utilizator la căutare +anon: Anon +viewers: + one: 1 vizualizator + other: $n telespectatori +"@viewers": + description: Numărul de telespectatori ai fluxului + placeholders: + n: + type: int +"@anon": + description: Un utilizator anonim +stream: + status: + live: ÎN DIRECT + ended: TERMINAT + planned: PLANIFICATE + started: A început $timestamp + chat: + disabled: CHAT DEZACTIVAT + disabled_timeout: "Timpul expiră: $time" + timeout(rich): $mod Timed out $user pentru $time + "@timeout": + description: Mesaj de chat care afișează evenimentele de timeout + ended: STREAM ÎNCHEIAT + "@ended": + description: Stream a încheiat footer-ul în partea de jos a chat-ului + zap(rich): $user zapped $amount sats + "@zap": + description: Mesaj de chat care arată zapsuri de flux + write: + label: Scrieți mesajul + "@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 + 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: + awarded_to: "Premiat pentru:" + "@awarded_to": + description: Antet peste lista de utilizatori care au primit o insignă + raid: + to: RAIDING $name + "@to": + description: Chat mesaj raid la un alt flux + from: RAID DE LA $name + "@from": + description: Chat raid mesaj din alt flux + countdown: Raiduri în $time + "@countdown": + description: Cronometru cu numărătoare inversă pentru auto-raid +goal: + title: "Obiectiv: $amount" + remaining: "Rămase: $amount" + complete: COMPLET +button: + login: Autentificare + logout: Ieșire + edit_profile: Editare profil + "@login": + description: Textul butonului pentru butonul de conectare + follow: Urmați + "@follow": + description: Textul butonului pentru butonul de urmărire + unfollow: Unfollow + "@unfollow": + description: Textul butonului pentru butonul unfollow + mute: Mut + unmute: Dezactivați + share: Share + save: Salvați +embed: + article_by: Articol de $name + note_by: Notă de la $name + live_stream_by: Transmisiune live prin $name +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: + title: Zap $name + custom_amount: Sumă personalizată + confirm: Confirmați + comment: Comentariu + button_zap_ready: Zap $amount sats + button_zap: Zap + button_open_wallet: Deschide în portofel + copy: Copiat în clipboard + 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: + past_streams: Fluxuri trecute + edit: + display_name: Nume afișat + about: Despre + nip05: Adresa Nostr + lud16: Adresa fulgerului + error: + logged_out: Nu pot edita profilul când sunt deconectat +login: + username: Nume utilizator + amber: Conectați-vă cu Amber + key: Autentificare cu cheie + create: Creare cont + error: + invalid_key: Cheie invalidă diff --git a/lib/i18n/translated/ru.i18n.yaml b/lib/i18n/translated/ru.i18n.yaml new file mode 100644 index 0000000..fff82cc --- /dev/null +++ b/lib/i18n/translated/ru.i18n.yaml @@ -0,0 +1,126 @@ +upload_avatar: Загрузить аватар +"@upload_avatar": + description: Текст, побуждающий пользователя нажать кнопку с изображением + аватара, чтобы начать загрузку +most_zapped_streamers: Самые прыткие стримеры +"@most_zapped_streamers": + description: Направляясь по перечисленным верхним стримерам с помощью запс +no_user_found: Пользователь не найден +"@no_user_found": + description: Пользователь не найден при поиске +anon: Аноним +viewers: + one: 1 зритель + other: $n зрителей +"@viewers": + description: Количество зрителей потока + placeholders: + n: + type: int +"@anon": + description: Анонимный пользователь +stream: + status: + live: LIVE + ended: КОНЕЦ + planned: ПЛАНИРУЕМЫЙ + started: Начало $timestamp + chat: + disabled: ЧАТ ОТКЛЮЧЕН + disabled_timeout: "Таймаут истекает: $time" + timeout(rich): $mod тайм-аут $user для $time + "@timeout": + description: Сообщение в чате, показывающее события по тайм-ауту + ended: ТРАНСЛЯЦИЯ ОКОНЧЕНА + "@ended": + description: Поток закончился в нижней части чата + zap(rich): $user запнул $amount сат + "@zap": + description: Сообщение в чате, отображающее потоковые зазоры + write: + label: Написать сообщение + "@label": + description: Надпись на поле ввода сообщения чата + no_signer: Невозможно писать сообщения с логином npub + "@no_signer": + description: Сообщение о входе в чат, отображаемое при входе пользователя только + с pubkey + login: Пожалуйста, войдите в систему, чтобы отправлять сообщения + "@login": + description: Сообщение о входе в чат, отображаемое при выходе пользователя из + системы + badge: + awarded_to: "Награждается:" + "@awarded_to": + description: Заголовок над списком пользователей, награжденных значком + raid: + to: RAIDING $name + "@to": + description: Сообщение о рейде в чате в другой поток + from: RAID FROM $name + "@from": + description: Сообщение о рейде в чате из другого потока + countdown: Рейды в $time + "@countdown": + description: Таймер обратного отсчета для автопоездки +goal: + title: "Цель: $amount" + remaining: "Осталось: $amount" + complete: КОМПЛЕКТ +button: + login: Логин + logout: Выйти + edit_profile: Редактировать профиль + "@login": + description: Текст кнопки для входа в систему + follow: Подписаться + "@follow": + description: Текст кнопки для кнопки следования + unfollow: Отписаться + "@unfollow": + description: Текст кнопки для кнопки "Развернуть + mute: Заглушить + unmute: Включить уведомления + share: Поделиться + save: Сохранить +embed: + article_by: Статья $name + note_by: Заметка на сайте $name + live_stream_by: "Прямая трансляция: $name" +stream_list: + following: Подписки + live: Прямой эфир + planned: Запланировано + ended: Завершено +"@stream_list": + description: Заголовки в списках потоков по типу потока - + живой/законченный/запланированный и т. д. +zap: + title: Запнуть ($name + custom_amount: Пользовательская сумма + confirm: Подтвердить + comment: Комментарий + button_zap_ready: Запнуть $amount сат + button_zap: Зап + button_open_wallet: Открыть в кошельке + copy: Скопировано в буфер обмена + error: + invalid_custom_amount: Недопустимая пользовательская сумма + no_wallet: Кошелек молнии не установлен + no_lud16: Адрес молнии не найден +profile: + past_streams: Предыдущие трансляции + edit: + display_name: Отображаемое имя + about: О себе + nip05: Nostr адрес + lud16: Lightning Адрес + error: + logged_out: Невозможно редактировать профиль при выходе из системы +login: + username: Имя пользователя + amber: Войти с помощью Amber + key: Вход в систему с помощью ключа + create: Создать аккаунт + error: + invalid_key: Неверный ключ diff --git a/lib/i18n/translated/sr.i18n.yaml b/lib/i18n/translated/sr.i18n.yaml new file mode 100644 index 0000000..5258519 --- /dev/null +++ b/lib/i18n/translated/sr.i18n.yaml @@ -0,0 +1,122 @@ +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/sv.i18n.yaml b/lib/i18n/translated/sv.i18n.yaml new file mode 100644 index 0000000..b866340 --- /dev/null +++ b/lib/i18n/translated/sv.i18n.yaml @@ -0,0 +1,124 @@ +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 +most_zapped_streamers: De flesta zappade streamers +"@most_zapped_streamers": + description: Rubrik över listade toppstreamers av zaps +no_user_found: Ingen användare hittades +"@no_user_found": + description: Ingen användare hittades vid sökning +anon: Anon +viewers: + one: 1 tittare + other: $n tittare +"@viewers": + description: Antal tittare på streamingen + placeholders: + n: + type: int +"@anon": + description: En anonym användare +stream: + status: + live: LIVE + ended: AVSLUTAD + planned: PLANERADE + started: Startade $timestamp + chat: + disabled: CHAT AVSTÄNGD + disabled_timeout: "Tidsgränsen går ut: $time" + timeout(rich): $mod tidsbegränsad $user för $time + "@timeout": + description: Chattmeddelande som visar timeout-händelser + ended: STREAM AVSLUTAD + "@ended": + description: Stream avslutade sidfoten längst ner på chatten + zap(rich): $user zapped $amount sats + "@zap": + description: Chattmeddelande som visar strömavbrott + write: + label: Skriv meddelande + "@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 + login: Logga in för att skicka meddelanden + "@login": + description: Chattinmatningsmeddelande som visas när användaren är utloggad + badge: + awarded_to: "Tilldelas till:" + "@awarded_to": + description: Rubrik över lista över användare som tilldelats en badge + raid: + to: RAIDING $name + "@to": + description: Chatta raidmeddelande till en annan ström + from: RAID FRÅN $name + "@from": + description: Chat raid-meddelande från en annan ström + countdown: Raiding på $time + "@countdown": + description: Nedräkningstimer för auto-raiding +goal: + title: "Mål: $amount" + remaining: "Kvarvarande: $amount" + complete: KOMPLETT +button: + login: Logga in + logout: Logga ut + edit_profile: Redigera profil + "@login": + description: Knapptext för inloggningsknappen + follow: Följ + "@follow": + description: Knapptext för följ-knappen + unfollow: Sluta följa + "@unfollow": + description: Knapptext för avföljningsknappen + mute: Tysta + unmute: Avtysta + share: Dela + save: Spara +embed: + article_by: Artikel av $name + note_by: Anteckning av $name + live_stream_by: Direktsändning via $name +stream_list: + following: Följer + live: Live + planned: Planerade + ended: Avslutade +"@stream_list": + description: Rubriker på strömlistor efter strömtyp live/avslutad/planerad etc. +zap: + title: Zap $name + custom_amount: Anpassat belopp + confirm: Bekräfta + comment: Kommentar + button_zap_ready: Zap $amount sats + button_zap: Zap + button_open_wallet: Öppna i plånboken + copy: Kopieras till urklipp + error: + invalid_custom_amount: Ogiltigt anpassat belopp + no_wallet: Ingen blixtplånbok installerad + no_lud16: Ingen blixtadress hittades +profile: + past_streams: Tidigare streamar + edit: + display_name: Visa namn + about: Om + nip05: Nostr Adress + lud16: Lightning-adress + error: + logged_out: Kan inte redigera profil när jag är utloggad +login: + username: Användarnamn + amber: Logga in med Amber + key: Logga in med nyckel + create: Skapa konto + error: + invalid_key: Ogiltig nyckel diff --git a/lib/i18n/translated/tr.i18n.yaml b/lib/i18n/translated/tr.i18n.yaml new file mode 100644 index 0000000..457d2a1 --- /dev/null +++ b/lib/i18n/translated/tr.i18n.yaml @@ -0,0 +1,124 @@ +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 +most_zapped_streamers: En Çok Zaplanan Flamalar +"@most_zapped_streamers": + description: Zaps tarafından listelenen üst flamalar üzerinde ilerliyor +no_user_found: Kullanıcı bulunamadı +"@no_user_found": + description: Arama yaparken kullanıcı bulunamadı +anon: Anon +viewers: + one: 1 izleyici + other: $n izleyiciler +"@viewers": + description: Akışı izleyenlerin sayısı + placeholders: + n: + type: int +"@anon": + description: Anonim bir kullanıcı +stream: + status: + live: CANLI + ended: SONLANDI + planned: PLANLANMIŞ + started: Başlatıldı $timestamp + 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": + description: Zaman aşımı olaylarını gösteren sohbet mesajı + ended: YAYIN SONLANDI + "@ended": + description: Sohbetin alt kısmında akış sona erdi altbilgisi + zap(rich): $user zapped $amount sats + "@zap": + description: Akış zaplarını gösteren sohbet mesajı + write: + label: Mesaj yaz + "@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ı + login: Mesaj göndermek için lütfen giriş yapın + "@login": + description: Kullanıcı oturumu kapatıldığında gösterilen sohbet giriş mesajı + badge: + awarded_to: "Ödüllendirildi:" + "@awarded_to": + description: Rozet verilen kullanıcıların listesi üzerinde başlık + raid: + to: RAIDING ${name}S + "@to": + description: Başka bir akışa sohbet baskını mesajı + from: $name ADRESINDEN RAID + "@from": + description: Başka bir akıştan sohbet baskını mesajı + countdown: $time adresinde baskın + "@countdown": + description: Otomatik sürüş için geri sayım sayacı +goal: + title: "Hedef: $amount" + remaining: "Kalan: $amount" + complete: TAMAMLANDI +button: + login: Giriş + logout: Oturum Kapatma + edit_profile: Profil Düzenle + "@login": + description: Oturum açma düğmesi için düğme metni + follow: Takip et + "@follow": + description: Takip et düğmesi için düğme metni + unfollow: Takibi bırak + "@unfollow": + description: Takibi bırak düğmesi için düğme metni + mute: Sessiz + unmute: Sesi aç + share: Paylaş + save: Kaydet +embed: + article_by: Makale $name + note_by: "Not: $name" + live_stream_by: "Canlı yayın: $name" +stream_list: + following: Aşağıdaki + live: Canlı + planned: Planlanmış + ended: Bitti +"@stream_list": + description: Akış türüne göre akış listelerindeki başlıklar canlı/bitmiş/planlanan vb. +zap: + title: Zap $name + custom_amount: Özel Tutar + confirm: Onaylayın + comment: Yorum + button_zap_ready: Zap $amount sats + button_zap: Zap + button_open_wallet: Cüzdanda Aç + copy: Panoya kopyalandı + 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: + past_streams: Geçmiş Akışlar + edit: + display_name: Ekran Adı + about: Hakkında + nip05: Nostr Adres + lud16: Yıldırım Adres + error: + logged_out: Çıkış yapıldığında profil düzenlenemiyor +login: + username: Kullanıcı Adı + amber: Amber ile Giriş Yapın + key: Anahtar ile Giriş Yapın + create: Hesap Oluştur + error: + invalid_key: Geçersiz anahtar diff --git a/lib/i18n/translated/uk.i18n.yaml b/lib/i18n/translated/uk.i18n.yaml new file mode 100644 index 0000000..140f3c2 --- /dev/null +++ b/lib/i18n/translated/uk.i18n.yaml @@ -0,0 +1,126 @@ +upload_avatar: Завантажити аватар +"@upload_avatar": + description: Текст, що пропонує користувачеві натиснути на заповнювач аватара, + щоб почати завантаження +most_zapped_streamers: Більшість стримерів, які були під напругою +"@most_zapped_streamers": + description: Перехід до переліку найкращих стрімерів за запитами +no_user_found: Користувача не знайдено +"@no_user_found": + description: Користувача не знайдено при пошуку +anon: Анонім. +viewers: + one: 1 глядач + other: $n глядачі +"@viewers": + description: Кількість глядачів стріму + placeholders: + n: + type: int +"@anon": + description: Анонімний користувач +stream: + status: + live: НАЖИВО + ended: ЗАКІНЧЕНО + planned: ЗАПЛАНОВАНО + started: Запустив $timestamp + chat: + disabled: ЧАТ ВІДКЛЮЧЕНО + disabled_timeout: "Тайм-аут закінчився: $time" + timeout(rich): $mod таймінг $user для $time + "@timeout": + description: Повідомлення в чаті про події тайм-ауту + ended: СТРІМ ЗАКІНЧИВСЯ + "@ended": + description: Нижній колонтитул кінця потоку внизу чату + zap(rich): $user zapped $amount sats + "@zap": + description: Повідомлення в чаті, що показує затримки потоку + write: + label: Написати повідомлення + "@label": + description: Мітка у вікні введення повідомлення чату + no_signer: Неможливо писати повідомлення з логіном npub + "@no_signer": + description: Повідомлення в чаті, що відображається, коли користувач увійшов до + системи лише з ключем pubkey + login: Будь ласка, авторизуйтесь, щоб надсилати повідомлення + "@login": + description: Повідомлення для введення в чаті, що відображається, коли + користувач вийшов з системи + badge: + awarded_to: "Нагороджується:" + "@awarded_to": + description: Над списком користувачів, яким присвоєно бейдж + raid: + to: RAIDING $name + "@to": + description: Повідомлення про рейд чату в інший потік + from: RAID FROM $name + "@from": + description: Повідомлення про наліт на чат з іншого потоку + countdown: Рейд у $time + "@countdown": + description: Таймер зворотного відліку для авторейду +goal: + title: "Мета: $amount" + remaining: "Залишилося: $amount" + complete: ЗАВЕРШИТИ +button: + login: Логін + logout: Вийти з системи + edit_profile: Редагувати профіль + "@login": + description: Текст для кнопки входу в систему + follow: Підпишіться + "@follow": + description: Текст для кнопки переходу + unfollow: Скасувати відповідь + "@unfollow": + description: Текст для кнопки відписки + mute: Вимкнути звук. + unmute: Увімкнути звук. + share: Поділіться + save: Зберегти +embed: + article_by: Стаття за посиланням $name + note_by: Примітка $name + live_stream_by: Пряма трансляція на $name +stream_list: + following: Після того, як + live: Наживо + planned: Заплановано + ended: Закінчилося +"@stream_list": + description: "Заголовки у списках трансляцій за типом трансляції: + наживо/закінчилася/запланована тощо." +zap: + title: Zap $name + custom_amount: Нестандартна сума + confirm: Підтвердити + comment: Коментар + button_zap_ready: Zap $amount sats + button_zap: Zap! + button_open_wallet: Відкрити в Гаманці + copy: Скопійовано в буфер обміну + error: + invalid_custom_amount: Неправильна сума замовлення + no_wallet: Не встановлено гаманець-блискавку + no_lud16: Адреса блискавки не знайдена +profile: + past_streams: Минулі потоки + edit: + display_name: Ім'я користувача + about: Про + nip05: Nostr Адреса + lud16: Блискавична адреса + error: + logged_out: Неможливо редагувати профіль, коли ви вийшли з системи +login: + username: Ім'я користувача + amber: Увійдіть за допомогою Amber + key: Увійдіть за допомогою ключа + create: Створити обліковий запис + error: + invalid_key: Неправильний ключ diff --git a/lib/i18n/translated/vi.i18n.yaml b/lib/i18n/translated/vi.i18n.yaml new file mode 100644 index 0000000..5258519 --- /dev/null +++ b/lib/i18n/translated/vi.i18n.yaml @@ -0,0 +1,122 @@ +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/zh.i18n.yaml b/lib/i18n/translated/zh.i18n.yaml new file mode 100644 index 0000000..251368a --- /dev/null +++ b/lib/i18n/translated/zh.i18n.yaml @@ -0,0 +1,122 @@ +upload_avatar: 上傳頭像 +"@upload_avatar": + description: 提示使用者點擊頭像占位符開始上傳的文字 +most_zapped_streamers: 最多被擊中的溪流 +"@most_zapped_streamers": + description: ヘッドランドから列されている頂幡からずった +no_user_found: 未找到使用者 +"@no_user_found": + description: 搜尋時未找到使用者 +anon: 匿名 +viewers: + one: 1 個檢視器 + other: $n 觀眾 +"@viewers": + description: 串流的觀看者人數 + placeholders: + n: + type: int +"@anon": + description: 匿名使用者 +stream: + status: + live: 直播 + ended: 結束 + planned: 計劃 + started: 開始 $timestamp + chat: + disabled: 關閉聊天 + disabled_timeout: 超時過期: $time + timeout(rich): $mod 超時 $user for $time + "@timeout": + description: 顯示逾時事件的聊天訊息 + ended: 串流結束 + "@ended": + description: 聊天底部的流結束頁尾 + zap(rich): $user 打閃了 $amount 聰 + "@zap": + description: 聊天訊息顯示串流斷點 + write: + label: 寫訊息 + "@label": + description: 聊天訊息輸入方塊上的標籤 + no_signer: 無法使用 npub 登入撰寫訊息 + "@no_signer": + description: 當使用者僅使用 pubkey 登入時,會顯示聊天輸入訊息 + login: 請登入以傳送訊息 + "@login": + description: 使用者登出時顯示聊天輸入訊息 + badge: + awarded_to: 頒發給 + "@awarded_to": + description: 被授予徽章的使用者清單上的標題 + raid: + to: RAIDING $name + "@to": + description: 聊天突擊消息到另一個串流 + from: RAID FROM $name + "@from": + description: 來自其他串流的聊天突襲訊息 + countdown: 突襲 $time + "@countdown": + description: 自動騎乘倒數計時器 +goal: + title: 目標:$amount + remaining: 剩餘: $amount + complete: 完成 +button: + login: 登錄 + logout: 登出 + edit_profile: 編輯個人檔案 + "@login": + description: 登入按鈕的按鈕文字 + follow: 關注 + "@follow": + description: 跟蹤按鈕的按鈕文字 + unfollow: 取消關注 + "@unfollow": + description: 取消關注按鈕的按鈕文字 + mute: 靜音 + unmute: 解除静音 + share: 分享 + save: 保存 +embed: + article_by: 文章來源: $name + note_by: $name 的筆記 + live_stream_by: Live stream by $name +stream_list: + following: 已關注 + live: 直播 + planned: 已計畫 + ended: 已結束 +"@stream_list": + description: 串流清單上的標題依串流類型為現場/結束/計劃中等。 +zap: + title: 打閃$name + custom_amount: 自訂金額 + confirm: 確認 + comment: 評論 + button_zap_ready: 打閃 $amount 聰 + button_zap: 打閃 + button_open_wallet: 在錢包中開啟 + copy: 複製到剪貼簿 + error: + invalid_custom_amount: 無效自訂金額 + no_wallet: 未安裝閃電錢夾 + no_lud16: 未找到閃電地址 +profile: + past_streams: 過去的直播 + edit: + display_name: 顯示名稱 + about: 關於 + nip05: Nostr 地址 + lud16: 閃電地址 + error: + logged_out: 登出時無法編輯個人資料 +login: + username: 用戶名 + amber: 使用 Amber 登入 + key: 使用鑰匙登入 + create: 創建帳戶 + error: + invalid_key: 無效按鍵 diff --git a/lib/pages/category.dart b/lib/pages/category.dart index ed21e90..08e5cd7 100644 --- a/lib/pages/category.dart +++ b/lib/pages/category.dart @@ -1,4 +1,3 @@ -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:ndk/ndk.dart'; diff --git a/lib/pages/login.dart b/lib/pages/login.dart index 3e00a99..793a679 100644 --- a/lib/pages/login.dart +++ b/lib/pages/login.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:amberflutter/amberflutter.dart'; import 'package:flutter/widgets.dart'; import 'package:go_router/go_router.dart'; +import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/login.dart'; import 'package:zap_stream_flutter/main.dart'; import 'package:zap_stream_flutter/theme.dart'; @@ -22,7 +23,7 @@ class LoginPage extends StatelessWidget { builder: (ctx, state) { if (state.data ?? false) { return BasicButton.text( - "Login with Amber", + t.login.amber, onTap: () async { final amber = Amberflutter(); final result = await amber.getPublicKey(); @@ -40,10 +41,7 @@ class LoginPage extends StatelessWidget { } }, ), - BasicButton.text( - "Login with Key", - onTap: () => context.push("/login/key"), - ), + BasicButton.text(t.login.key, onTap: () => context.push("/login/key")), Container( margin: EdgeInsets.symmetric(vertical: 20), height: 1, @@ -52,7 +50,7 @@ class LoginPage extends StatelessWidget { ), ), BasicButton.text( - "Create Account", + t.login.create, onTap: () => context.push("/login/new"), ), ], diff --git a/lib/pages/login_input.dart b/lib/pages/login_input.dart index 5aa934e..f73764d 100644 --- a/lib/pages/login_input.dart +++ b/lib/pages/login_input.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/login.dart'; import 'package:zap_stream_flutter/main.dart'; import 'package:zap_stream_flutter/theme.dart'; @@ -27,7 +28,7 @@ class _LoginInputPage extends State { decoration: InputDecoration(labelText: "npub/nsec"), ), BasicButton.text( - "Login", + t.button.login, onTap: () async { try { if (_controller.text.startsWith("bunker://")) { @@ -43,7 +44,7 @@ class _LoginInputPage extends State { loginData.value = LoginAccount.nip19(_controller.text); context.go("/"); } else { - throw "Invalid key"; + throw t.login.error.invalid_key; } } catch (e) { setState(() { diff --git a/lib/pages/new_account.dart b/lib/pages/new_account.dart index 7baf9f1..35a5932 100644 --- a/lib/pages/new_account.dart +++ b/lib/pages/new_account.dart @@ -3,6 +3,7 @@ import 'package:go_router/go_router.dart'; import 'package:ndk/ndk.dart'; import 'package:ndk/shared/nips/nip01/bip340.dart'; import 'package:ndk/shared/nips/nip01/key_pair.dart'; +import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/login.dart'; import 'package:zap_stream_flutter/main.dart'; import 'package:zap_stream_flutter/theme.dart'; @@ -65,13 +66,13 @@ class _NewAccountPage extends State { controller: _name, readOnly: _loading, focusNode: _nameFocus, - decoration: InputDecoration(labelText: "Username"), + decoration: InputDecoration(labelText: t.login.username), ), ValueListenableBuilder( valueListenable: _name, builder: (context, value, child) { return BasicButton.text( - "Login", + t.button.login, disabled: _loading || value.text.isEmpty, onTap: () { setState(() { diff --git a/lib/pages/profile.dart b/lib/pages/profile.dart index 58a5c08..a33d310 100644 --- a/lib/pages/profile.dart +++ b/lib/pages/profile.dart @@ -1,6 +1,7 @@ import 'package:flutter/widgets.dart'; import 'package:go_router/go_router.dart'; import 'package:ndk/ndk.dart'; +import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/imgproxy.dart'; import 'package:zap_stream_flutter/main.dart'; import 'package:zap_stream_flutter/rx_filter.dart'; @@ -74,7 +75,7 @@ class ProfilePage extends StatelessWidget { spacing: 8, children: [ BasicButton.text( - "Logout", + t.button.logout, onTap: () { loginData.logout(); ndk.accounts.logout(); @@ -82,7 +83,7 @@ class ProfilePage extends StatelessWidget { }, ), BasicButton.text( - "Edit Profile", + t.button.edit_profile, onTap: () { context.push("/settings/profile"); }, @@ -91,7 +92,7 @@ class ProfilePage extends StatelessWidget { ), if (!isMe) FollowButton(pubkey: hexPubkey), Text( - "Past Streams", + t.profile.past_streams, style: TextStyle(fontSize: 20, fontWeight: FontWeight.w600), ), diff --git a/lib/pages/settings_profile.dart b/lib/pages/settings_profile.dart index 776eb2a..1322dd1 100644 --- a/lib/pages/settings_profile.dart +++ b/lib/pages/settings_profile.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:ndk/ndk.dart'; +import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/main.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/widgets/avatar_upload.dart'; @@ -19,7 +20,7 @@ class SettingsProfilePage extends StatelessWidget { @override Widget build(BuildContext context) { final pubkey = ndk.accounts.getPublicKey(); - if (pubkey == null) return Text("Cant edit profile when logged out"); + if (pubkey == null) return Text(t.profile.edit.error.logged_out); return FutureBuilder( future: ndk.metadata.loadMetadata(pubkey), @@ -51,7 +52,7 @@ class SettingsProfilePage extends StatelessWidget { controller: _name, readOnly: v, decoration: InputDecoration( - labelText: "Display Name", + labelText: t.profile.edit.display_name, fillColor: LAYER_1, filled: true, ), @@ -60,7 +61,7 @@ class SettingsProfilePage extends StatelessWidget { controller: _about, readOnly: v, decoration: InputDecoration( - labelText: "About", + labelText: t.profile.edit.about, fillColor: LAYER_1, filled: true, ), @@ -69,7 +70,7 @@ class SettingsProfilePage extends StatelessWidget { controller: _nip5, readOnly: v, decoration: InputDecoration( - labelText: "Nostr Address", + labelText: t.profile.edit.nip05, fillColor: LAYER_1, filled: true, ), @@ -78,13 +79,13 @@ class SettingsProfilePage extends StatelessWidget { controller: _lud16, readOnly: v, decoration: InputDecoration( - labelText: "Lightning Address", + labelText: t.profile.edit.lud16, fillColor: LAYER_1, filled: true, ), ), BasicButton.text( - "Save", + t.button.save, disabled: v, onTap: () async { _loading.value = true; diff --git a/lib/pages/stream.dart b/lib/pages/stream.dart index ce81c01..06e7087 100644 --- a/lib/pages/stream.dart +++ b/lib/pages/stream.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:ndk/ndk.dart'; import 'package:wakelock_plus/wakelock_plus.dart'; +import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/imgproxy.dart'; import 'package:zap_stream_flutter/main.dart'; import 'package:zap_stream_flutter/rx_filter.dart'; @@ -133,7 +134,9 @@ class _StreamPage extends State with RouteAware { children: [ Spacer(), BasicButton( - Row(children: [Icon(Icons.bolt, size: 14), Text("Zap")]), + Row( + children: [Icon(Icons.bolt, size: 14), Text(t.zap.button_zap)], + ), padding: EdgeInsets.symmetric(horizontal: 10, vertical: 2), decoration: BoxDecoration( color: PRIMARY_1, @@ -166,7 +169,7 @@ class _StreamPage extends State with RouteAware { PillWidget( color: LAYER_1, child: Text( - "${stream.info.participants} viewers", + t.viewers(n: stream.info.participants!), style: TextStyle(fontSize: 12, fontWeight: FontWeight.w500), ), ), diff --git a/lib/widgets/stream_info.dart b/lib/widgets/stream_info.dart index 5aa0a32..0701923 100644 --- a/lib/widgets/stream_info.dart +++ b/lib/widgets/stream_info.dart @@ -68,14 +68,9 @@ class StreamInfoWidget extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - RichText( - text: TextSpan( - style: TextStyle(color: LAYER_5, fontSize: 14), - children: [ - TextSpan(text: "Started "), - TextSpan(text: DateFormat().format(startedDate)), - ], - ), + Text( + t.stream.started(timestamp: DateFormat().format(startedDate)), + style: TextStyle(color: LAYER_5, fontSize: 14), ), LiveTimerWidget(started: startedDate), ], diff --git a/lib/widgets/stream_tile.dart b/lib/widgets/stream_tile.dart index e05ebfc..efd3250 100644 --- a/lib/widgets/stream_tile.dart +++ b/lib/widgets/stream_tile.dart @@ -2,6 +2,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:go_router/go_router.dart'; +import 'package:zap_stream_flutter/i18n/strings.g.dart'; import 'package:zap_stream_flutter/imgproxy.dart'; import 'package:zap_stream_flutter/theme.dart'; import 'package:zap_stream_flutter/utils.dart'; @@ -31,7 +32,12 @@ class StreamTileWidget extends StatelessWidget { aspectRatio: 16 / 9, child: Stack( children: [ - Center(child: ProxyImg(url: stream.info.image ?? "", placeholderSize: 100,)), + Center( + child: ProxyImg( + url: stream.info.image ?? "", + placeholderSize: 100, + ), + ), if (stream.info.status != null) Positioned( right: 8, @@ -42,7 +48,11 @@ class StreamTileWidget extends StatelessWidget { _ => LAYER_3, }, child: Text( - stream.info.status!.name.toUpperCase(), + switch (stream.info.status!) { + StreamStatus.live => t.stream.status.live, + StreamStatus.ended => t.stream.status.ended, + StreamStatus.planned => t.stream.status.planned, + }, style: TextStyle( color: Colors.white, fontWeight: FontWeight.w600, @@ -58,7 +68,7 @@ class StreamTileWidget extends StatelessWidget { child: PillWidget( color: LAYER_1.withAlpha(200), child: Text( - "${stream.info.participants} viewers", + t.viewers(n: stream.info.participants!), style: TextStyle( color: Colors.white, fontWeight: FontWeight.w600, diff --git a/pubspec.lock b/pubspec.lock index 4c04861..0138545 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -17,6 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.7.0" + ascii_qr: + dependency: transitive + description: + name: ascii_qr + sha256: "2046e400a0fa4ea0de5df44c87b992cdd1f76403bb15e64513b89263598750ae" + url: "https://pub.dev" + source: hosted + version: "1.0.1" async: dependency: transitive description: @@ -617,27 +625,27 @@ packages: dependency: "direct main" description: path: "packages/ndk" - ref: "919f35866f4b9d84565f7f08ebbbcd5fd0ef0b6a" - resolved-ref: "919f35866f4b9d84565f7f08ebbbcd5fd0ef0b6a" - url: "https://github.com/relaystr/ndk" + ref: f8766edbf95246d4e398a0e0cf570f70f4263b34 + resolved-ref: f8766edbf95246d4e398a0e0cf570f70f4263b34 + url: "https://github.com/v0l/ndk" source: git version: "0.3.2" ndk_amber: dependency: "direct main" description: path: "packages/amber" - ref: "919f35866f4b9d84565f7f08ebbbcd5fd0ef0b6a" - resolved-ref: "919f35866f4b9d84565f7f08ebbbcd5fd0ef0b6a" - url: "https://github.com/relaystr/ndk" + ref: f8766edbf95246d4e398a0e0cf570f70f4263b34 + resolved-ref: f8766edbf95246d4e398a0e0cf570f70f4263b34 + url: "https://github.com/v0l/ndk" source: git version: "0.3.0" ndk_objectbox: dependency: "direct main" description: path: "packages/objectbox" - ref: "919f35866f4b9d84565f7f08ebbbcd5fd0ef0b6a" - resolved-ref: "919f35866f4b9d84565f7f08ebbbcd5fd0ef0b6a" - url: "https://github.com/relaystr/ndk" + ref: f8766edbf95246d4e398a0e0cf570f70f4263b34 + resolved-ref: f8766edbf95246d4e398a0e0cf570f70f4263b34 + url: "https://github.com/v0l/ndk" source: git version: "0.2.3" ndk_rust_verifier: @@ -913,8 +921,8 @@ packages: dependency: "direct main" description: path: slang - ref: f6dbb7ec212b135074e6b5eb5bef9ddf6afb75d1 - resolved-ref: f6dbb7ec212b135074e6b5eb5bef9ddf6afb75d1 + ref: "08c71daf08caf14990ea6381401d31ab4101fc03" + resolved-ref: "08c71daf08caf14990ea6381401d31ab4101fc03" url: "https://github.com/nostrlabs-io/slang" source: git version: "4.7.1" @@ -922,8 +930,8 @@ packages: dependency: "direct main" description: path: slang_flutter - ref: f6dbb7ec212b135074e6b5eb5bef9ddf6afb75d1 - resolved-ref: f6dbb7ec212b135074e6b5eb5bef9ddf6afb75d1 + ref: "08c71daf08caf14990ea6381401d31ab4101fc03" + resolved-ref: "08c71daf08caf14990ea6381401d31ab4101fc03" url: "https://github.com/nostrlabs-io/slang" source: git version: "4.7.0" diff --git a/pubspec.yaml b/pubspec.yaml index 5440b8b..2feb0e8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -43,29 +43,29 @@ dependencies: dependency_overrides: ndk: git: - url: https://github.com/relaystr/ndk + url: https://github.com/v0l/ndk path: packages/ndk - ref: 919f35866f4b9d84565f7f08ebbbcd5fd0ef0b6a + ref: f8766edbf95246d4e398a0e0cf570f70f4263b34 ndk_objectbox: git: - url: https://github.com/relaystr/ndk + url: https://github.com/v0l/ndk path: packages/objectbox - ref: 919f35866f4b9d84565f7f08ebbbcd5fd0ef0b6a + ref: f8766edbf95246d4e398a0e0cf570f70f4263b34 ndk_amber: git: - url: https://github.com/relaystr/ndk + url: https://github.com/v0l/ndk path: packages/amber - ref: 919f35866f4b9d84565f7f08ebbbcd5fd0ef0b6a + ref: f8766edbf95246d4e398a0e0cf570f70f4263b34 slang: git: url: https://github.com/nostrlabs-io/slang path: slang - ref: f6dbb7ec212b135074e6b5eb5bef9ddf6afb75d1 + ref: 08c71daf08caf14990ea6381401d31ab4101fc03 slang_flutter: git: url: https://github.com/nostrlabs-io/slang path: slang_flutter - ref: f6dbb7ec212b135074e6b5eb5bef9ddf6afb75d1 + ref: 08c71daf08caf14990ea6381401d31ab4101fc03 dev_dependencies: flutter_test: diff --git a/slang.yaml b/slang.yaml new file mode 100644 index 0000000..228118e --- /dev/null +++ b/slang.yaml @@ -0,0 +1,4 @@ +base_locale: en +input_directory: lib/i18n +input_file_pattern: .i18n.yaml +output_directory: lib/i18n \ No newline at end of file