Browse Source

fix: languages and translate

pull/46/head
AmirrezaChegini 5 days ago
parent
commit
151f5e78e0
  1. 13
      lib/core/widgets/dialog/about_us_dialog.dart
  2. 6
      lib/features/intro/presentation/bloc/intro_bloc.dart
  3. 2
      lib/features/intro/presentation/ui/intro_page.dart
  4. 13
      lib/features/language/presentation/ui/language_page.dart
  5. 39
      lib/l10n/app_de.arb
  6. 14
      lib/l10n/app_localizations.dart
  7. 129
      lib/l10n/app_localizations_de.dart

13
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(

6
lib/features/intro/presentation/bloc/intro_bloc.dart

@ -35,10 +35,10 @@ class IntroBloc extends Bloc<IntroEvent, IntroState> {
/// ------------Controllers------------
/// ------------Functions------------
Future<void> goToLevelPage() async {
Future<void> 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<IntroEvent, IntroState> {
if (state.currentIntro < intros.length - 1) {
emit(state.copyWith(currentIntro: state.currentIntro + 1));
} else {
goToLevelPage();
goToHomePage();
}
}
}

2
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<IntroBloc>().goToLevelPage(),
onPressed: () => context.read<IntroBloc>().goToHomePage(),
style: TextButton.styleFrom(
foregroundColor: MyColors.white.withValues(alpha: 0.7),
),

13
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)),
),
),
],
);

39
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."
}

14
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<Locale> supportedLocales = <Locale>[
Locale('ar'),
Locale('de'),
Locale('en'),
Locale('fr'),
Locale('ru'),
@ -331,8 +333,14 @@ class _AppLocalizationsDelegate
}
@override
bool isSupported(Locale locale) =>
<String>['ar', 'en', 'fr', 'ru', 'tr'].contains(locale.languageCode);
bool isSupported(Locale locale) => <String>[
'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':

129
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.';
}
Loading…
Cancel
Save