diff --git a/lib/core/widgets/dialog/about_us_dialog.dart b/lib/core/widgets/dialog/about_us_dialog.dart index 4992978..75d8241 100644 --- a/lib/core/widgets/dialog/about_us_dialog.dart +++ b/lib/core/widgets/dialog/about_us_dialog.dart @@ -1,5 +1,6 @@ import 'dart:ui'; +import 'package:auto_size_text/auto_size_text.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; @@ -51,10 +52,14 @@ class AboutUsDialog extends StatelessWidget { color: Color(0XFF322386), ), ), - Text( - context.translate.about_us_desc, - style: MYTextStyle.matn1.copyWith( - color: Color(0XFF494178), + Expanded( + child: AutoSizeText( + context.translate.about_us_desc, + minFontSize: 12, + maxFontSize: 20, + style: MYTextStyle.matn1.copyWith( + color: Color(0XFF494178), + ), ), ), MyImage( diff --git a/lib/features/intro/presentation/bloc/intro_bloc.dart b/lib/features/intro/presentation/bloc/intro_bloc.dart index 986da04..dbc5205 100644 --- a/lib/features/intro/presentation/bloc/intro_bloc.dart +++ b/lib/features/intro/presentation/bloc/intro_bloc.dart @@ -35,10 +35,10 @@ class IntroBloc extends Bloc { /// ------------Controllers------------ /// ------------Functions------------ - Future goToLevelPage() async { + Future goToHomePage() async { await LocalStorage.saveData(key: MyConstants.firstIntro, value: 'true'); if (MyContext.get.mounted) { - MyContext.get.goNamed(Routes.levelPage); + MyContext.get.goNamed(Routes.homePage); } } @@ -47,7 +47,7 @@ class IntroBloc extends Bloc { if (state.currentIntro < intros.length - 1) { emit(state.copyWith(currentIntro: state.currentIntro + 1)); } else { - goToLevelPage(); + goToHomePage(); } } } diff --git a/lib/features/intro/presentation/ui/intro_page.dart b/lib/features/intro/presentation/ui/intro_page.dart index 2c20d18..87aa98e 100644 --- a/lib/features/intro/presentation/ui/intro_page.dart +++ b/lib/features/intro/presentation/ui/intro_page.dart @@ -47,7 +47,7 @@ class IntroPage extends StatelessWidget { start: MySpaces.s30, bottom: MySpaces.s16, child: TextButton( - onPressed: () => context.read().goToLevelPage(), + onPressed: () => context.read().goToHomePage(), style: TextButton.styleFrom( foregroundColor: MyColors.white.withValues(alpha: 0.7), ), diff --git a/lib/features/language/presentation/ui/language_page.dart b/lib/features/language/presentation/ui/language_page.dart index 9165123..bdaeba2 100644 --- a/lib/features/language/presentation/ui/language_page.dart +++ b/lib/features/language/presentation/ui/language_page.dart @@ -1,3 +1,4 @@ +import 'package:auto_size_text/auto_size_text.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; @@ -61,9 +62,15 @@ class LanguagePage extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ MyImage(image: MyAssets.lang, size: 28), - Text( - context.translate.select_language, - style: MYTextStyle.titr0.copyWith(color: Color(0XFF847AC4)), + Expanded( + child: AutoSizeText( + context.translate.select_language, + minFontSize: 12, + maxFontSize: 20, + maxLines: 1, + textAlign: TextAlign.center, + style: MYTextStyle.titr0.copyWith(color: Color(0XFF847AC4)), + ), ), ], ); diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb new file mode 100644 index 0000000..5e2cf47 --- /dev/null +++ b/lib/l10n/app_de.arb @@ -0,0 +1,39 @@ +{ + "@@locale": "de", + "about_us": "Über uns", + "about_us_desc": "Rive kombiniert ein interaktives Design-Tool, ein neues zustandsbasiertes Grafikformat, eine leichte plattformübergreifende Laufzeitumgebung und einen blitzschnellen Vektoren-Renderer. \nDiese durchgängige Pipeline erweckt Benutzeroberflächen durch Bewegung zum Leben. Sie bietet Designern und Entwicklern die Werkzeuge, um zu gestalten und zu bauen.", + "select_language": "Sprache auswählen", + "select": "Auswählen", + "please_wait": "Bitte einen Moment warten...", + "downloading_data": "Initiale Daten werden heruntergeladen", + "lost_connection": "Verbindung verloren!", + "retry": "Erneut versuchen", + "connected_to_internet": "Du musst mit dem Internet verbunden sein, um die Anfangsdaten des Spiels herunterzuladen.", + "start": "Start", + "step": "Schritt", + "question": "Frage", + "be_cureful": "Sei etwas\nvorsichtiger.", + "wrong_answer": "Deine Antwort\nwar nicht korrekt.", + "you_got_diamond": "Du hast den Diamanten erhalten", + "map": "Karte", + "next": "Weiter", + "you_win": "Du hast gewonnen!", + "skip": "Überspringen", + "intro_1_1": "Das Abendessen ist fertig! Komm schnell und wasch dir schön die Hände!", + "intro_1_2": "Mama! Unsere Hände sind gar nicht so schmutzig! Wir wischen sie einfach mit einem Taschentuch ab!", + "intro_2": "Die Reinheit des Glaubens...\nSie bedeutet, dass Sauberkeit ein Zeichen des Glaubens ist!", + "intro_3": "Diese guten Taten machen unsere Seelen stark und schön!", + "intro_4": "Möchtest du in den Verheißenen Garten reisen?", + "intro_5": "Jaaaa...\nWir sind bereit!", + "want_to_exit": "Möchtest du beenden?", + "exit_dialog_desc": "Komm zurück, Held!\nDas Abenteuer ist noch nicht vorbei.", + "cancel": "Abbrechen", + "exit": "Beenden", + "play": "SPIELEN", + "no_hadith": "Für diese Frage gibt es keine Hadith.", + "showcase_answer": "Tippe auf die richtige Option,\num sie auszuwählen.", + "showcase_notif": "Der Sprecher wird\ndir die Antwortmöglichkeiten\nvorlesen.", + "showcase_stepper": "Hier siehst du die\nFragen für diese\nStufe, um den\nDiamanten zu erreichen.", + "showcase_hadith": "Quellen und\nHadithe zu dieser\nFrage ansehen.", + "showcase_guide": "Dies ist eine Anleitung,\ndie dir hilft." +} diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 6b4956f..dce9f70 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -6,6 +6,7 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:intl/intl.dart' as intl; import 'app_localizations_ar.dart'; +import 'app_localizations_de.dart'; import 'app_localizations_en.dart'; import 'app_localizations_fr.dart'; import 'app_localizations_ru.dart'; @@ -98,6 +99,7 @@ abstract class AppLocalizations { /// A list of this localizations delegate's supported locales. static const List supportedLocales = [ Locale('ar'), + Locale('de'), Locale('en'), Locale('fr'), Locale('ru'), @@ -331,8 +333,14 @@ class _AppLocalizationsDelegate } @override - bool isSupported(Locale locale) => - ['ar', 'en', 'fr', 'ru', 'tr'].contains(locale.languageCode); + bool isSupported(Locale locale) => [ + 'ar', + 'de', + 'en', + 'fr', + 'ru', + 'tr', + ].contains(locale.languageCode); @override bool shouldReload(_AppLocalizationsDelegate old) => false; @@ -343,6 +351,8 @@ AppLocalizations lookupAppLocalizations(Locale locale) { switch (locale.languageCode) { case 'ar': return AppLocalizationsAr(); + case 'de': + return AppLocalizationsDe(); case 'en': return AppLocalizationsEn(); case 'fr': diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart new file mode 100644 index 0000000..bc7873b --- /dev/null +++ b/lib/l10n/app_localizations_de.dart @@ -0,0 +1,129 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for German (`de`). +class AppLocalizationsDe extends AppLocalizations { + AppLocalizationsDe([String locale = 'de']) : super(locale); + + @override + String get about_us => 'Über uns'; + + @override + String get about_us_desc => + 'Rive kombiniert ein interaktives Design-Tool, ein neues zustandsbasiertes Grafikformat, eine leichte plattformübergreifende Laufzeitumgebung und einen blitzschnellen Vektoren-Renderer. \nDiese durchgängige Pipeline erweckt Benutzeroberflächen durch Bewegung zum Leben. Sie bietet Designern und Entwicklern die Werkzeuge, um zu gestalten und zu bauen.'; + + @override + String get select_language => 'Sprache auswählen'; + + @override + String get select => 'Auswählen'; + + @override + String get please_wait => 'Bitte einen Moment warten...'; + + @override + String get downloading_data => 'Initiale Daten werden heruntergeladen'; + + @override + String get lost_connection => 'Verbindung verloren!'; + + @override + String get retry => 'Erneut versuchen'; + + @override + String get connected_to_internet => + 'Du musst mit dem Internet verbunden sein, um die Anfangsdaten des Spiels herunterzuladen.'; + + @override + String get start => 'Start'; + + @override + String get step => 'Schritt'; + + @override + String get question => 'Frage'; + + @override + String get be_cureful => 'Sei etwas\nvorsichtiger.'; + + @override + String get wrong_answer => 'Deine Antwort\nwar nicht korrekt.'; + + @override + String get you_got_diamond => 'Du hast den Diamanten erhalten'; + + @override + String get map => 'Karte'; + + @override + String get next => 'Weiter'; + + @override + String get you_win => 'Du hast gewonnen!'; + + @override + String get skip => 'Überspringen'; + + @override + String get intro_1_1 => + 'Das Abendessen ist fertig! Komm schnell und wasch dir schön die Hände!'; + + @override + String get intro_1_2 => + 'Mama! Unsere Hände sind gar nicht so schmutzig! Wir wischen sie einfach mit einem Taschentuch ab!'; + + @override + String get intro_2 => + 'Die Reinheit des Glaubens...\nSie bedeutet, dass Sauberkeit ein Zeichen des Glaubens ist!'; + + @override + String get intro_3 => + 'Diese guten Taten machen unsere Seelen stark und schön!'; + + @override + String get intro_4 => 'Möchtest du in den Verheißenen Garten reisen?'; + + @override + String get intro_5 => 'Jaaaa...\nWir sind bereit!'; + + @override + String get want_to_exit => 'Möchtest du beenden?'; + + @override + String get exit_dialog_desc => + 'Komm zurück, Held!\nDas Abenteuer ist noch nicht vorbei.'; + + @override + String get cancel => 'Abbrechen'; + + @override + String get exit => 'Beenden'; + + @override + String get play => 'SPIELEN'; + + @override + String get no_hadith => 'Für diese Frage gibt es keine Hadith.'; + + @override + String get showcase_answer => + 'Tippe auf die richtige Option,\num sie auszuwählen.'; + + @override + String get showcase_notif => + 'Der Sprecher wird\ndir die Antwortmöglichkeiten\nvorlesen.'; + + @override + String get showcase_stepper => + 'Hier siehst du die\nFragen für diese\nStufe, um den\nDiamanten zu erreichen.'; + + @override + String get showcase_hadith => + 'Quellen und\nHadithe zu dieser\nFrage ansehen.'; + + @override + String get showcase_guide => 'Dies ist eine Anleitung,\ndie dir hilft.'; +}