diff --git a/assets/videos/intro_1_ar.mp4 b/assets/videos/intro_1_ar.mp4 index 6eaa64c..f2d0fda 100644 Binary files a/assets/videos/intro_1_ar.mp4 and b/assets/videos/intro_1_ar.mp4 differ diff --git a/assets/videos/intro_2_ar.mp4 b/assets/videos/intro_2_ar.mp4 index 9dc15a9..b899e83 100644 Binary files a/assets/videos/intro_2_ar.mp4 and b/assets/videos/intro_2_ar.mp4 differ diff --git a/assets/videos/intro_3_ar.mp4 b/assets/videos/intro_3_ar.mp4 index 9f0fa93..e23057a 100644 Binary files a/assets/videos/intro_3_ar.mp4 and b/assets/videos/intro_3_ar.mp4 differ diff --git a/assets/videos/intro_4_ar.mp4 b/assets/videos/intro_4_ar.mp4 index c88e2d4..ae4b79f 100644 Binary files a/assets/videos/intro_4_ar.mp4 and b/assets/videos/intro_4_ar.mp4 differ diff --git a/assets/videos/intro_5_ar.mp4 b/assets/videos/intro_5_ar.mp4 index d8b3f1e..f83d632 100644 Binary files a/assets/videos/intro_5_ar.mp4 and b/assets/videos/intro_5_ar.mp4 differ diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 0000000..fa0b357 --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/lib/core/constants/my_api.dart b/lib/core/constants/my_api.dart index 8f92993..b71f673 100644 --- a/lib/core/constants/my_api.dart +++ b/lib/core/constants/my_api.dart @@ -3,7 +3,7 @@ class MyApi { const MyApi._internal(); factory MyApi() => _i; - static const Duration timeOut = Duration(seconds: 30); + static const Duration timeOut = Duration(seconds: 25); static const String contentType = 'application/json'; static const String defaultError = 'An unexpected error has occurred.'; static const String noInternetError = 'Please check your internet connection.'; diff --git a/lib/core/constants/my_constants.dart b/lib/core/constants/my_constants.dart index a8813e7..a37adc9 100644 --- a/lib/core/constants/my_constants.dart +++ b/lib/core/constants/my_constants.dart @@ -30,8 +30,12 @@ class MyConstants { static const double effectAudioVolume = 0.2; static const String defaultLanguage = 'en'; static const List languages = [ - LanguageEntity(displayName: 'English (English)', code: 'en', title: ''), - LanguageEntity(displayName: 'German (Germany)', code: 'de', title: ''), - LanguageEntity(displayName: 'Arabic (العربية)', code: 'ar', title: ''), + LanguageEntity(displayName: '', code: 'en', title: ''), + LanguageEntity(displayName: '', code: 'de', title: ''), + LanguageEntity(displayName: '', code: 'ar', title: ''), + + LanguageEntity(displayName: '', code: 'az', title: ''), + LanguageEntity(displayName: '', code: 'es', title: ''), + LanguageEntity(displayName: '', code: 'fa', title: ''), ]; } diff --git a/lib/core/widgets/button/my_yellow_button.dart b/lib/core/widgets/button/my_yellow_button.dart index d9d746c..7a5090e 100644 --- a/lib/core/widgets/button/my_yellow_button.dart +++ b/lib/core/widgets/button/my_yellow_button.dart @@ -7,6 +7,8 @@ import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; +import '../../utils/my_device.dart'; + class MyYellowButton extends StatelessWidget { const MyYellowButton({ super.key, @@ -38,11 +40,18 @@ class MyYellowButton extends StatelessWidget { ), PositionedDirectional( top: top ?? setSize(context: context, mobile: MySpaces.s6, tablet: MySpaces.s22), - child: Text( - title ?? '', - style: MYTextStyle.button1.copyWith( - color: const Color(0XFFD93D16), - fontSize: setSize(context: context, tablet: 60), + child: SizedBox( + width: MyDevice.isMobile(context) ? 170 : 240, + height: MyDevice.isMobile(context) ? 65 : 88, + child: FittedBox( + child: Text( + title ?? '', + style: MYTextStyle.button1.copyWith( + color: const Color(0XFFD93D16), + height: 1.75, + fontSize: setSize(context: context, tablet: 60), + ), + ), ), ), ), diff --git a/lib/core/widgets/dialog/exit_dialog.dart b/lib/core/widgets/dialog/exit_dialog.dart index b4a9c6a..3c9bd0f 100644 --- a/lib/core/widgets/dialog/exit_dialog.dart +++ b/lib/core/widgets/dialog/exit_dialog.dart @@ -48,10 +48,19 @@ class ExitDialog extends StatelessWidget { child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - context.translate.want_to_exit, - style: MYTextStyle.titr0.copyWith( - color: const Color(0XFF322386), + SizedBox( + width: double.infinity, + height: 45, + child: FittedBox( + alignment: AlignmentGeometry.center, + fit: BoxFit.contain, + child: Text( + context.translate.want_to_exit, + maxLines: 1, + style: MYTextStyle.titr0.copyWith( + color: const Color(0XFF322386), + ), + ), ), ), Text( @@ -71,15 +80,22 @@ class ExitDialog extends StatelessWidget { }, height: 72, color: const Color(0XFFC0BDD3), - child: Text( - context.translate.cancel, - style: MYTextStyle.button2.copyWith( - shadows: [ - const BoxShadow( - color: Color(0XFF9895AE), - offset: Offset(0, 3.32), + child: SizedBox( + width: 120, + height: 46, + + child: FittedBox( + child: Text( + context.translate.cancel, + style: MYTextStyle.button2.copyWith( + shadows: [ + const BoxShadow( + color: Color(0XFF9895AE), + offset: Offset(0, 3.32), + ), + ], ), - ], + ), ), ), ), @@ -97,15 +113,22 @@ class ExitDialog extends StatelessWidget { }, height: 72, color: const Color(0XFFD42427), - child: Text( - context.translate.exit, - style: MYTextStyle.button2.copyWith( - shadows: [ - const BoxShadow( - color: Color(0XFFC82020), - offset: Offset(0, 3.32), + child: SizedBox( + width: 120, + height: 46, + child: FittedBox( + child: Text( + context.translate.exit, + maxLines: 1, + style: MYTextStyle.button2.copyWith( + shadows: [ + const BoxShadow( + color: Color(0XFFC82020), + offset: Offset(0, 3.32), + ), + ], ), - ], + ), ), ), ), diff --git a/lib/core/widgets/dialog/hadith_dialog.dart b/lib/core/widgets/dialog/hadith_dialog.dart index 8742165..6be10d6 100644 --- a/lib/core/widgets/dialog/hadith_dialog.dart +++ b/lib/core/widgets/dialog/hadith_dialog.dart @@ -6,6 +6,8 @@ import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; import 'package:hadi_hoda_flutter/core/widgets/dialog/styles/dialog_background.dart'; @@ -21,6 +23,7 @@ Future showHadithDialog({ builder: (context) => HadithDialog(hadith: hadith), barrierColor: MyColors.purple.withValues(alpha: 0.82), useSafeArea: false, + useRootNavigator: true, ); } @@ -31,6 +34,7 @@ class HadithDialog extends StatelessWidget { @override Widget build(BuildContext context) { + final isArabic = (LocalStorage.readData(key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage) == 'ar'; return Scaffold( backgroundColor: MyColors.transparent, body: BackdropFilter( @@ -69,42 +73,50 @@ class HadithDialog extends StatelessWidget { '${hadith[index].narratorName ?? ''}:\n', style: MYTextStyle.titr1.copyWith( color: const Color(0XFF494178), + height: isArabic ? 1.8 : 1, fontFamily: MYTextStyle.notoSansArabic, ), children: [ - TextSpan( + if(isArabic)TextSpan( text: hadith[index].hadithText, style: MYTextStyle.matn1.copyWith( color: const Color(0XFF494178), - fontFamily: MYTextStyle.notoSansArabic, + height: 1.6, + fontFamily: + MYTextStyle.notoSansArabic, fontWeight: FontWeight.w600, - fontSize: 16 + fontSize: 16, ), ), ], ), ), - if(hadith[index].translation?.isNotEmpty == true) ...[ - const SizedBox(height: 6), + if (hadith[index].translation?.isNotEmpty == + true) ...[ + if(isArabic)const SizedBox(height: 6), Text( - hadith[index].translation!, + hadith[index].translation!, style: MYTextStyle.matn1.copyWith( - color: const Color(0XFF494178), - fontWeight: FontWeight.w600, - fontSize: 16 + color: const Color(0XFF494178), + fontWeight: FontWeight.w600, + fontSize: 16, ), ), - ], if(hadith[index].sourceName?.isNotEmpty == true) ...[ + ], + if (hadith[index].sourceName?.isNotEmpty == + true) ...[ const SizedBox(height: 6), Text( - hadith[index].sourceName!, + hadith[index].sourceName!, style: MYTextStyle.matn1.copyWith( - color: const Color(0XFF494178).withValues(alpha: .5), - fontWeight: FontWeight.w600, - fontSize: 12 + color: const Color( + 0XFF494178, + ).withValues(alpha: .5), + fontWeight: FontWeight.w600, + fontSize: 12, ), ), - ] + ], ], ), ), diff --git a/lib/features/level/data/model/node_model.dart b/lib/features/level/data/model/node_model.dart index d476f17..bf468f4 100644 --- a/lib/features/level/data/model/node_model.dart +++ b/lib/features/level/data/model/node_model.dart @@ -12,7 +12,7 @@ class NodeModel extends NodeEntity { : NodeType.fromJson[json['node_type']], level: json['node_type'] == null ? null - : json['node_type'] == 'level' + : json['node_type'] != 'prize' ? LevelModel.fromJson(json['data']) : null, prize: json['node_type'] == null diff --git a/lib/features/level/presentation/bloc/level_bloc.dart b/lib/features/level/presentation/bloc/level_bloc.dart index b1ae07a..ed4172f 100644 --- a/lib/features/level/presentation/bloc/level_bloc.dart +++ b/lib/features/level/presentation/bloc/level_bloc.dart @@ -56,138 +56,279 @@ class LevelBloc extends Bloc { final GetLastDownloadedLevel _getLastDownloadedLevel; /// ------------Variables------------ - List locationList = [ + final List locationListShort = [ LevelLocation( bottom: setSize(context: MyContext.get, mobile: -0.03.h, tablet: -0.03.h), left: setSize(context: MyContext.get, mobile: 0.1.w, tablet: 0.2.w), - index: 0, ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.03.h, tablet: 0.1.h), + bottom: setSize(context: MyContext.get, mobile: 0.03.h, tablet: 0.075.h), left: setSize(context: MyContext.get, mobile: 0.28.w, tablet: 0.38.w), - index: 1, ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.1.h, tablet: 0.21.h), - left: setSize(context: MyContext.get, mobile: 0.14.w, tablet: 0.2.w), - index: 2, + bottom: setSize(context: MyContext.get, mobile: 0.09.h, tablet: 0.14.h), + left: setSize(context: MyContext.get, mobile: 0.14.w, tablet: 0.18.w), ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.2.h, tablet: 0.33.h), - left: setSize(context: MyContext.get, mobile: 0.3.w, tablet: 0.3.w), - index: 3, + bottom: setSize(context: MyContext.get, mobile: 0.17.h, tablet: 0.24.h), + left: setSize(context: MyContext.get, mobile: 0.18.w, tablet: 0.225.w), ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.24.h, tablet: 0.4.h), - left: setSize(context: MyContext.get, mobile: 0.5.w, tablet: 0.55.w), - index: 4, + bottom: setSize(context: MyContext.get, mobile: 0.22.h, tablet: 0.33.h), + left: setSize(context: MyContext.get, mobile: 0.36.w, tablet: 0.3.w), ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.33.h, tablet: 0.55.h), - left: setSize(context: MyContext.get, mobile: 0.659.w, tablet: 0.77.w), - index: 5, + bottom: setSize(context: MyContext.get, mobile: 0.245.h, tablet: 0.4.h), + left: setSize(context: MyContext.get, mobile: 0.54.w, tablet: 0.55.w), ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.45.h, tablet: 0.8.h), - left: setSize(context: MyContext.get, mobile: 0.59.w, tablet: 0.68.w), - index: 6, + bottom: setSize(context: MyContext.get, mobile: 0.305.h, tablet: 0.45.h), + left: setSize(context: MyContext.get, mobile: 0.64.w, tablet: 0.75.w), ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.55.h, tablet: .951.h), - left: setSize(context: MyContext.get, mobile: 0.584.w, tablet: 0.64.w), - index: 7, + bottom: setSize(context: MyContext.get, mobile: 0.38.h, tablet: 0.68.h), + left: setSize(context: MyContext.get, mobile: 0.61.w, tablet: 0.735.w), ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.61.h, tablet: 1.03.h), - left: setSize(context: MyContext.get, mobile: 0.4.w, tablet: 0.18.w), - index: 8, + bottom: setSize(context: MyContext.get, mobile: 0.455.h, tablet: 0.8.h), + left: setSize(context: MyContext.get, mobile: 0.575.w, tablet: 0.68.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.53.h, tablet: .951.h), + left: setSize(context: MyContext.get, mobile: 0.575.w, tablet: 0.64.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.61.h, tablet: 1.01.h), + left: setSize(context: MyContext.get, mobile: 0.33.w, tablet: 0.27.w), ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.64.h, tablet: 1.19.h), - left: setSize(context: MyContext.get, mobile: 0.2.w, tablet: 0.22.w), - index: 9, + bottom: setSize(context: MyContext.get, mobile: 0.593.h, tablet: 1.05.h), + left: setSize(context: MyContext.get, mobile: 0.5.w, tablet: 0.08.w), ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.7.h, tablet: 1.25.h), + bottom: setSize(context: MyContext.get, mobile: 0.64.h, tablet: 1.17.h), + left: setSize(context: MyContext.get, mobile: 0.143.w, tablet: 0.09.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.64.h, tablet: 1.22.h), + left: setSize(context: MyContext.get, mobile: 0.143.w, tablet: 0.34.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.686.h, tablet: 1.25.h), left: setSize(context: MyContext.get, mobile: 0, tablet: 0.53.w), - index: 10, ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.75.h, tablet: 1.37.h), - left: setSize(context: MyContext.get, mobile: 0.15.w, tablet: 0.635.w), - index: 11, + bottom: setSize(context: MyContext.get, mobile: 0.74.h, tablet: 1.37.h), + left: setSize(context: MyContext.get, mobile: 0.13.w, tablet: 0.635.w), ), - ////// + ////// LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.78.h, tablet: 1.43.h), - left: setSize(context: MyContext.get, mobile: 0.4.w, tablet: 0.545.w), - index: 12, + bottom: setSize(context: MyContext.get, mobile: 0.768.h, tablet: 1.43.h), + left: setSize(context: MyContext.get, mobile: 0.31.w, tablet: 0.545.w), ), - ///// - LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.78.h, tablet: 1.52.h), - left: setSize(context: MyContext.get, mobile: 0.35.w, tablet: 0.55.w), - index: 13, - ), + ///// LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.85.h, tablet: 1.62.h), - left: setSize(context: MyContext.get, mobile: 0.5.w, tablet: 0.46.w), - index: 14, + bottom: setSize(context: MyContext.get, mobile: 0.8.h, tablet: 1.52.h), + left: setSize(context: MyContext.get, mobile: 0.475.w, tablet: 0.55.w), ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 0.94.h, tablet: 1.636.h), - left: setSize(context: MyContext.get, mobile: 0.45.w, tablet: 0.3.w), - index: 15, + bottom: setSize(context: MyContext.get, mobile: 0.885.h, tablet: 1.62.h), + left: setSize(context: MyContext.get, mobile: 0.465.w, tablet: 0.46.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.95.h, tablet: 1.636.h), + left: setSize(context: MyContext.get, mobile: 0.47.w, tablet: 0.3.w), ), LevelLocation( bottom: setSize(context: MyContext.get, mobile: 1.02.h, tablet: 1.62.h), left: setSize(context: MyContext.get, mobile: 0.45.w, tablet: 0.11.w), - index: 16, ), LevelLocation( bottom: setSize(context: MyContext.get, mobile: 1.02.h, tablet: 1.7.h), left: setSize(context: MyContext.get, mobile: 0.2.w, tablet: 0.0.w), - index: 17, ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 1.02.h, tablet: 1.825.h), + bottom: setSize(context: MyContext.get, mobile: 1.1.h, tablet: 1.858.h), left: setSize(context: MyContext.get, mobile: 0, tablet: 0.0.w), - index: 18, ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 1.1.h, tablet: 1.88.h), - left: setSize(context: MyContext.get, mobile: 0, tablet: 0.125.w), - index: 19, + bottom: setSize(context: MyContext.get, mobile: 1.19.h, tablet: 1.89.h), + left: setSize(context: MyContext.get, mobile: 0.05.w, tablet: 0.19.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.23.h, tablet: 1.98.h), + left: setSize(context: MyContext.get, mobile: 0.23.w, tablet: 0.3.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.31.h, tablet: 2.08.h), + left: setSize(context: MyContext.get, mobile: 0.2.w, tablet: 0.215.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.36.h, tablet: 2.15.h), + left: setSize(context: MyContext.get, mobile: 0.09.w, tablet: 0.11.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.425.h, tablet: 2.23.h), + left: setSize(context: MyContext.get, mobile: 0.09.w, tablet: 0.1.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.48.h, tablet: 2.29.h), + left: setSize(context: MyContext.get, mobile: 0.184.w, tablet: 0.17.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.535.h, tablet: 2.36.h), + left: setSize(context: MyContext.get, mobile: 0.22.w, tablet: 0.225.w), + ), + + ]; + + final List locationListLong = [ + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: -0.03.h, tablet: -0.03.h), + left: setSize(context: MyContext.get, mobile: 0.1.w, tablet: 0.2.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.013.h, tablet: 0.075.h), + left: setSize(context: MyContext.get, mobile: 0.23.w, tablet: 0.38.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.08.h, tablet: 0.14.h), + left: setSize(context: MyContext.get, mobile: 0.19.w, tablet: 0.18.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.145.h, tablet: 0.24.h), + left: setSize(context: MyContext.get, mobile: 0.15.w, tablet: 0.225.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.2.h, tablet: 0.33.h), + left: setSize(context: MyContext.get, mobile: 0.255.w, tablet: 0.3.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.237.h, tablet: 0.4.h), + left: setSize(context: MyContext.get, mobile: 0.4.w, tablet: 0.55.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.258.h, tablet: 0.45.h), + left: setSize(context: MyContext.get, mobile: 0.56.w, tablet: 0.75.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.31.h, tablet: 0.55.h), + left: setSize(context: MyContext.get, mobile: 0.66.w, tablet: 0.799.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.38.h, tablet: 0.65.h), + left: setSize(context: MyContext.get, mobile: 0.659.w, tablet: 0.733.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.45.h, tablet: 0.78.h), + left: setSize(context: MyContext.get, mobile: 0.59.w, tablet: 0.69.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.52.h, tablet: 0.89.h), + left: setSize(context: MyContext.get, mobile: 0.59.w, tablet: 0.7.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.592.h, tablet: .987.h), + left: setSize(context: MyContext.get, mobile: 0.56.w, tablet: 0.5.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.61.h, tablet: 1.03.h), + left: setSize(context: MyContext.get, mobile: 0.4.w, tablet: 0.18.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.63.h, tablet: 1.19.h), + left: setSize(context: MyContext.get, mobile: 0.24.w, tablet: 0.22.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.655.h, tablet: 1.19.h), + left: setSize(context: MyContext.get, mobile: 0.10.w, tablet: 0.22.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.71.h, tablet: 1.25.h), + left: setSize(context: MyContext.get, mobile: 0.009.w, tablet: 0.53.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.75.h, tablet: 1.33.h), + left: setSize(context: MyContext.get, mobile: 0.15.w, tablet: 0.62.w), + ), + ////// + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.77.h, tablet: 1.43.h), + left: setSize(context: MyContext.get, mobile: 0.31.w, tablet: 0.545.w), + ), + ///// + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.792.h, tablet: 1.52.h), + left: setSize(context: MyContext.get, mobile: 0.46.w, tablet: 0.55.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.905.h, tablet: 1.62.h), + left: setSize(context: MyContext.get, mobile: 0.465.w, tablet: 0.46.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.85.h, tablet: 1.62.h), + left: setSize(context: MyContext.get, mobile: 0.525.w, tablet: 0.46.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 0.975.h, tablet: 1.636.h), + left: setSize(context: MyContext.get, mobile: 0.48.w, tablet: 0.3.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.02.h, tablet: 1.62.h), + left: setSize(context: MyContext.get, mobile: 0.4.w, tablet: 0.11.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.02.h, tablet: 1.7.h), + left: setSize(context: MyContext.get, mobile: 0.25.w, tablet: 0.0.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.02.h, tablet: 1.7.h), + left: setSize(context: MyContext.get, mobile: 0.105.w, tablet: 0.0.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.03.h, tablet: 1.825.h), + left: setSize(context: MyContext.get, mobile: -0.05.w, tablet: 0.0.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.087.h, tablet: 1.88.h), + left: setSize(context: MyContext.get, mobile: 0.01.w, tablet: 0.125.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.15.h, tablet: 1.88.h), + left: setSize(context: MyContext.get, mobile: -0.03.w, tablet: 0.125.w), ), LevelLocation( bottom: setSize(context: MyContext.get, mobile: 1.19.h, tablet: 1.97.h), - left: setSize(context: MyContext.get, mobile: 0.05.w, tablet: 0.289.w), - index: 20, + left: setSize(context: MyContext.get, mobile: 0.1.w, tablet: 0.289.w), ), LevelLocation( bottom: setSize(context: MyContext.get, mobile: 1.23.h, tablet: 2.10.h), left: setSize(context: MyContext.get, mobile: 0.23.w, tablet: 0.21.w), - index: 21, ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 1.31.h, tablet: 2.169.h), + bottom: setSize(context: MyContext.get, mobile: 1.3.h, tablet: 2.169.h), left: setSize(context: MyContext.get, mobile: 0.2.w, tablet: 0.1.w), - index: 22, ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 1.37.h, tablet: 2.25.h), + bottom: setSize(context: MyContext.get, mobile: 1.355.h, tablet: 2.25.h), left: setSize(context: MyContext.get, mobile: 0.1.w, tablet: 0.1.w), - index: 23, ), LevelLocation( - bottom: setSize(context: MyContext.get, mobile: 1.45.h, tablet: 2.34.h), - left: setSize(context: MyContext.get, mobile: 0.12.w, tablet: 0.225.w), - index: 24, + bottom: setSize(context: MyContext.get, mobile: 1.424.h, tablet: 2.34.h), + left: setSize(context: MyContext.get, mobile: 0.077.w, tablet: 0.225.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.47.h, tablet: 2.34.h), + left: setSize(context: MyContext.get, mobile: 0.18.w, tablet: 0.225.w), + ), + LevelLocation( + bottom: setSize(context: MyContext.get, mobile: 1.533.h, tablet: 2.34.h), + left: setSize(context: MyContext.get, mobile: 0.225.w, tablet: 0.225.w), ), // LevelLocation( // bottom: setSize(context: MyContext.get, mobile: 1.5.h, tablet: 2.8.h), // left: setSize(context: MyContext.get, mobile: 0.2.w, tablet: 0.15.w), - // index: 24, + // // ), ]; @@ -320,7 +461,9 @@ class LevelBloc extends Bloc { }, (error) {}); if (nodeList.isNotEmpty && nodeList.last.nodeType == NodeType.comingSoon) { - final remoteResult = await _getLeveslUseCase(LevelParams(forceRemote: true)); + final remoteResult = await _getLeveslUseCase( + LevelParams(forceRemote: true), + ); remoteResult.fold((data) { nodeList ..clear() diff --git a/lib/features/level/presentation/ui/level_page.dart b/lib/features/level/presentation/ui/level_page.dart index 1c5c920..623d528 100644 --- a/lib/features/level/presentation/ui/level_page.dart +++ b/lib/features/level/presentation/ui/level_page.dart @@ -28,6 +28,7 @@ import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_p import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/node_widget.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/play_button.dart'; +import '../../../../core/utils/my_context.dart'; import '../../domain/entity/level_location.dart'; class LevelPage extends StatefulWidget { @@ -51,9 +52,9 @@ class _LevelPageState extends State { if (!mounted) return; final maxLevelCount = int.tryParse( - LocalStorage.readData(key: MyConstants.maxLevelCount) ?? '20', + LocalStorage.readData(key: MyConstants.maxLevelCount) ?? '24', ) ?? - 20; + 24; context.read().add( StartDownloadEvent(toLevel: maxLevelCount), ); @@ -206,7 +207,7 @@ class _LevelPageState extends State { ), ), Positioned( - bottom: setSize(context: context, mobile: 1.63.h, tablet: 2.9.h), + bottom: setSize(context: context, mobile: 1.71.h, tablet: 2.37.h), left: setSize(context: context, mobile: 80, tablet: 0.2.w), child: MyImage( image: MyAssets.planetFinal, @@ -221,12 +222,14 @@ class _LevelPageState extends State { Widget _path(BuildContext context) { return BlocBuilder( builder: (context, state) { - final locationList = context.read().locationList; final nodeList = context.read().nodeList; - final comingSoon = locationList.firstWhereIndexedOrNull(( - index, - location, - ) { + + final locationShortList = context.read().locationListShort; + final locationLongList = context.read().locationListLong; + final locationList = nodeList.length > locationShortList.length + ? locationLongList + : locationShortList; + final comingSoon = locationList.firstWhereIndexedOrNull((index, location) { final node = nodeList.elementAtOrNull(index); return node?.nodeType == NodeType.comingSoon; }); @@ -282,38 +285,35 @@ class _LevelPageState extends State { return Stack( clipBehavior: Clip.none, children: [ - ...List.generate(locationList.length, (index) { + ...List.generate(nodeList.length, (index) { final node = nodeList.elementAtOrNull(index); final location = locationList[index]; - if (node?.nodeType == NodeType.comingSoon) - return const SizedBox(); return Positioned( top: location.top, bottom: location.bottom, right: location.right, left: location.left, child: BlocBuilder( - buildWhen: (previous, current) => - previous.chooseLevel?.id != current.chooseLevel?.id, - builder: (context, state) => NodeWidget( - chooseLevel: state.chooseLevel, - levelIndex: location.index, - node: node, - type: context.read().getLevelType, - getReward: context.read().getReward, - onRewardPressed: (prize) { - context.read().showReward( - context: context, - prize: prize, - ); - }, - onTap: (LevelEntity level, LevelType type) { - context.read().add( - ChooseLevelEvent(level, type), - ); - }, - ), - ), + buildWhen: (previous, current) => + previous.chooseLevel?.id != current.chooseLevel?.id, + builder: (context, state) => NodeWidget( + chooseLevel: state.chooseLevel, + node: node, + type: context.read().getLevelType, + getReward: context.read().getReward, + onRewardPressed: (prize) { + context.read().showReward( + context: context, + prize: prize, + ); + }, + onTap: (LevelEntity level, LevelType type) { + context.read().add( + ChooseLevelEvent(level, type), + ); + }, + ), + ), ); }), ], diff --git a/lib/features/level/presentation/ui/widgets/level_path.dart b/lib/features/level/presentation/ui/widgets/level_path.dart index a90f9fe..963b498 100644 --- a/lib/features/level/presentation/ui/widgets/level_path.dart +++ b/lib/features/level/presentation/ui/widgets/level_path.dart @@ -109,14 +109,18 @@ class CurvedPathPainter extends CustomPainter { // Second path (top curve) final path2 = Path(); - path2.moveTo(140.464 * scaleX, 1.50636 * scaleY); + const double offsetY = -80; + path2.moveTo( + 140.464 * scaleX, + (1.50636 + offsetY) * scaleY, + ); path2.cubicTo( 140.464 * scaleX, - 1.50636 * scaleY, - 139.141 * scaleX, - -0.0589981 * scaleY, + (-60) * scaleY, // strong upward push + 130 * scaleX, + (-20) * scaleY, 114.441 * scaleX, - 45.9425 * scaleY, + 30 * scaleY, ); path2.cubicTo( 91.5014 * scaleX, diff --git a/lib/features/level/presentation/ui/widgets/node_widget.dart b/lib/features/level/presentation/ui/widgets/node_widget.dart index 6061094..dc9108c 100644 --- a/lib/features/level/presentation/ui/widgets/node_widget.dart +++ b/lib/features/level/presentation/ui/widgets/node_widget.dart @@ -9,8 +9,6 @@ import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart import 'package:hadi_hoda_flutter/features/level/domain/entity/node_entity.dart'; import 'package:hadi_hoda_flutter/features/level/domain/entity/prize_entity.dart'; -import 'coming_soon_level.dart'; - enum LevelType { unFinished, finished, @@ -42,7 +40,6 @@ class NodeWidget extends StatelessWidget { required this.getReward, required this.type, required this.chooseLevel, - required this.levelIndex, this.onTap, this.onRewardPressed, }); @@ -50,14 +47,13 @@ class NodeWidget extends StatelessWidget { final LevelType Function(int index) type; final bool Function(int index) getReward; final NodeEntity? node; - final int? levelIndex; final LevelEntity? chooseLevel; final Function(LevelEntity level, LevelType type)? onTap; final void Function(PrizeEntity prize)? onRewardPressed; @override Widget build(BuildContext context) { - final levelIsInComingSoon = node == null || node?.nodeType == NodeType.comingSoon; + final levelIsInComingSoon = node?.nodeType == NodeType.comingSoon; return AbsorbPointer( absorbing: levelIsInComingSoon, child: Opacity( @@ -89,7 +85,7 @@ class NodeWidget extends StatelessWidget { child: InkWell( onTap: () => onTap?.call( node?.level ?? LevelEntity(), - type(node?.level?.order ?? levelIndex ?? 1), + type(node?.level?.order ?? 1), ), child: Container( color: Colors.transparent, @@ -100,7 +96,7 @@ class NodeWidget extends StatelessWidget { children: [ MyImage( image: - LevelType.image[type(node?.level?.order ?? levelIndex ?? 1)] ?? + LevelType.image[type(node?.level?.order ?? 1)] ?? MyAssets.level, fit: BoxFit.cover, size: setSize(context: context, tablet: 70, mobile: 44), @@ -112,12 +108,12 @@ class NodeWidget extends StatelessWidget { end: Alignment.bottomCenter, colors: [ const Color(0XFFFFFFFF), - LevelType.textColor[type(node?.level?.order ?? levelIndex ?? 1)] ?? + LevelType.textColor[type(node?.level?.order ?? 1)] ?? MyColors.white, ], ).createShader(bounds), child: Text( - '${node?.level?.order ?? levelIndex ?? 0}', + '${node?.level?.order ?? 0}', maxLines: 1, style: MYTextStyle.button1.copyWith( fontSize: setSize( @@ -129,7 +125,7 @@ class NodeWidget extends StatelessWidget { BoxShadow( color: LevelType.textShadowColor[type( - node?.level?.order ?? levelIndex ?? 1, + node?.level?.order ?? 1, )] ?? MyColors.white, offset: const Offset(0, 2.97), @@ -154,7 +150,7 @@ class NodeWidget extends StatelessWidget { ), ), ), - if (type(node?.level?.order ?? levelIndex ?? 1) == LevelType.finished) + if (type(node?.level?.order ?? 1) == LevelType.finished) Positioned( bottom: 0, child: Container( diff --git a/lib/features/question/presentation/bloc/question_bloc.dart b/lib/features/question/presentation/bloc/question_bloc.dart index 1210916..57633a7 100644 --- a/lib/features/question/presentation/bloc/question_bloc.dart +++ b/lib/features/question/presentation/bloc/question_bloc.dart @@ -85,6 +85,7 @@ class QuestionBloc extends Bloc { }; Stream? volumeStream; bool showAnswerSequence = true; + bool isHadithDialogOpen = false; /// ------------Controllers------------ final AudioService _mainAudioService; @@ -105,11 +106,13 @@ class QuestionBloc extends Bloc { // ); // } - void showHadith({required BuildContext context}) { - showHadithDialog( + void showHadith({required BuildContext context}) async { + isHadithDialogOpen = true; + await showHadithDialog( context: context, hadith: state.currentQuestion?.hadiths ?? [], ); + isHadithDialogOpen = false; } void goToHomePage({required BuildContext context}) { @@ -199,6 +202,7 @@ class QuestionBloc extends Bloc { bool showConfetti = false, bool autoClose = true, }) async { + if (isHadithDialogOpen) return; if (showConfetti == false) { changeGlobeState(key: MyAnimations.globeStateSpeaking); } diff --git a/lib/features/question/presentation/ui/screens/question_screen.dart b/lib/features/question/presentation/ui/screens/question_screen.dart index 21c76a1..3c38ae5 100644 --- a/lib/features/question/presentation/ui/screens/question_screen.dart +++ b/lib/features/question/presentation/ui/screens/question_screen.dart @@ -53,8 +53,8 @@ class _QuestionScreenState extends State context.read().imageAnimationController = AnimationController( vsync: this, - duration: const Duration(milliseconds: 200), - reverseDuration: const Duration(milliseconds: 200), + duration: const Duration(milliseconds: 50), + reverseDuration: const Duration(milliseconds: 50), ); if (LocalStorage.readData(key: MyConstants.firstShowcase) == 'true') { context.read().imageAnimationController?.forward(); @@ -315,49 +315,46 @@ class _QuestionScreenState extends State null) { return const SizedBox.shrink(); } else { - return AspectRatio( - aspectRatio: boxRation, - child: Container( - alignment: isTablet ? Alignment.center : null, - width: isTablet ? 320 : 180, - height: isTablet ? 300 : 250, - child: SlideAnim( - controller: context - .read() - .answerAnimationController!, - index: 2, - child: AnswerBox( - index: - state - .currentQuestion - ?.answers?[2] - .order ?? - 1, - answer: - state.currentQuestion?.answers?[2] ?? - AnswerEntity(), - correctAnswer: - state - .currentQuestion - ?.correctAnswer ?? - 0, - onNotifTap: (AnswerEntity answer) { - context - .read() - .showAnswerDialog( - context: context, - answerEntity: answer, - ); - }, - onTap: (isCorrect, correctAnswer) => - context.read().add( - ChooseAnswerEvent( - isCorrect, - correctAnswer, - context, - ), + return Container( + alignment: isTablet ? Alignment.center : null, + width: isTablet ? 320 : 180, + height: isTablet ? 300 : 250, + child: SlideAnim( + controller: context + .read() + .answerAnimationController!, + index: 2, + child: AnswerBox( + index: + state + .currentQuestion + ?.answers?[2] + .order ?? + 1, + answer: + state.currentQuestion?.answers?[2] ?? + AnswerEntity(), + correctAnswer: + state + .currentQuestion + ?.correctAnswer ?? + 0, + onNotifTap: (AnswerEntity answer) { + context + .read() + .showAnswerDialog( + context: context, + answerEntity: answer, + ); + }, + onTap: (isCorrect, correctAnswer) => + context.read().add( + ChooseAnswerEvent( + isCorrect, + correctAnswer, + context, ), - ), + ), ), ), ); diff --git a/lib/l10n/app_az.arb b/lib/l10n/app_az.arb index ebc30c1..45fec25 100644 --- a/lib/l10n/app_az.arb +++ b/lib/l10n/app_az.arb @@ -1,42 +1,42 @@ { - "@@locale": "en", - "about_us": "About us", - "about_us_desc" : "Rive combines an interactive design tool, a new stateful graphics format, a lightweight multi-platform runtime, and a blazing-fast vector renderer. \nThis end-to-end pipeline brings interfaces to life with motion. It gives designers and devs the tools to build.", - "select_language": "Select language", - "select": "Select", - "please_wait": "wait a few moments...", - "downloading_data": "Downloading initial data", - "lost_connection": "Lost connection!", - "retry": "Retry", - "connected_to_internet": "You must be connected to the internet to download the initial game data.", - "start": "Start", - "step": "Step", - "question": "Question", - "be_cureful": "Be more\ncareful.", - "wrong_answer": "Your answer\nwas not correct.", - "you_got_diamond": "You got the diamond", - "map": "Map", - "next": "Next", - "you_win": "You Win!", - "skip": "Skip", - "intro_1_1": "Dinner is ready! Come quickly and wash your beautiful hands!", - "intro_1_2": "Mom! Our hands aren't that dirty! We'll just wipe them with a tissue!", - "intro_2": "The purity of faith... \nIt means cleanliness is a sign of faith!", - "intro_3": "These good deeds make our souls strong and beautiful!", - "intro_4": "Do you want to travel to the Promised Garden?", - "intro_5": "Yessss....\nWe are ready!", - "want_to_exit": "Want To Exit?", - "exit_dialog_desc": "Come back, hero!\nThe adventure isn’t over yet", - "cancel": "Cancel", - "exit": "Exit", - "play": "PLAY", - "no_hadith": "There isn't any hadith for this question", - "showcase_answer": "Tap the correct option\nto select.", - "showcase_notif": "The announcer will\nread the answers to\nthe options to you.", - "showcase_stepper": "Here you will see the\nquestions for this\nstage to reach the\ndiamond.", - "showcase_hadith": "View sources and\nhadiths for this\nquestion", - "showcase_guide": "This is a guide that will\nhelp you.", - "reward": "Reward", - "coming_soon": "Next stages will open soon", - "downloading": "Downloading" + "@@locale": "az", + "about_us": "Haqqımızda", + "about_us_desc": "Rive interaktiv dizayn alətini, yeni vəziyyətə əsaslanan qrafika formatını, yüngül çoxplatformalı iş mühitini və çox sürətli vektor render mühərrikini birləşdirir. \nBu uçdan-uca sistem interfeyslərə hərəkət qataraq onları canlandırır. O, dizaynerlərə və tərtibatçılara yaratmaq üçün alətlər verir.", + "select_language": "Dil seçin", + "select": "Seç", + "please_wait": "bir az gözləyin...", + "downloading_data": "İlkin məlumatlar yüklənir", + "lost_connection": "Bağlantı kəsildi!", + "retry": "Yenidən cəhd et", + "connected_to_internet": "İlkin oyun məlumatlarını yükləmək üçün internetə qoşulmalısınız.", + "start": "Başla", + "step": "Addım", + "question": "Sual", + "be_cureful": "Daha diqqətli\nolun.", + "wrong_answer": "Cavabınız\ndoğru deyildi.", + "you_got_diamond": "Siz almaz qazandınız", + "map": "Xəritə", + "next": "Növbəti", + "you_win": "Siz Qalib Gəldiniz!", + "skip": "Keç", + "intro_1_1": "Şam yeməyi hazırdır! Tez gəlin və gözəl əllərinizi yuyun!", + "intro_1_2": "Ana! Əllərimiz o qədər də çirkli deyil! Sadəcə salfetlə siləcəyik!", + "intro_2": "İmanın saflığı... \nBu o deməkdir ki, təmizlik imanın nişanəsidir!", + "intro_3": "Bu yaxşı əməllər ruhumuzu güclü və gözəl edir!", + "intro_4": "Vəd edilmiş Bağçaya səyahət etmək istəyirsinizmi?", + "intro_5": "Bəliiii....\nBiz hazırıq!", + "want_to_exit": "Çıxmaq istəyirsiniz?", + "exit_dialog_desc": "Geri qayıt, qəhrəman!\nMəcarə hələ bitməyib", + "cancel": "Ləğv et", + "exit": "Çıxış", + "play": "OYNA", + "no_hadith": "Bu sual üçün heç bir Hədis yoxdur", + "showcase_answer": "Seçmək üçün doğru\nvariantın üzərinə toxunun.", + "showcase_notif": "Diktor\nvariantların cavablarını\nsizə oxuyacaq.", + "showcase_stepper": "Burada almaza\nçatmaq üçün bu\nmərhələyə aid\nsualları görəcəksiniz.", + "showcase_hadith": "Bu sual üçün\nmənbələrə və Hədislərə\nbaxın", + "showcase_guide": "Bu sizə kömək edəcək\nbir bələdçidir.", + "reward": "Mükafat", + "coming_soon": "Növbəti mərhələlər tezliklə açılacaq", + "downloading": "Yüklənir" } \ No newline at end of file diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 6fa52ec..9ac2bc0 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -19,7 +19,7 @@ "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_1": "Das Abendessen ist fertig! Kommt schnell und wascht eure schönen 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!", @@ -30,12 +30,12 @@ "cancel": "Abbrechen", "exit": "Beenden", "play": "SPIELEN", - "no_hadith": "Für diese Frage gibt es keine Hadith.", + "no_hadith": "Für diese Frage gibt es keinen 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.", - "reward": "belohnen", + "reward": "Belohnung", "downloading": "Wird heruntergeladen" -} +} \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index ebc30c1..59a603f 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -1,42 +1,42 @@ { - "@@locale": "en", - "about_us": "About us", - "about_us_desc" : "Rive combines an interactive design tool, a new stateful graphics format, a lightweight multi-platform runtime, and a blazing-fast vector renderer. \nThis end-to-end pipeline brings interfaces to life with motion. It gives designers and devs the tools to build.", - "select_language": "Select language", - "select": "Select", - "please_wait": "wait a few moments...", - "downloading_data": "Downloading initial data", - "lost_connection": "Lost connection!", - "retry": "Retry", - "connected_to_internet": "You must be connected to the internet to download the initial game data.", - "start": "Start", - "step": "Step", - "question": "Question", - "be_cureful": "Be more\ncareful.", - "wrong_answer": "Your answer\nwas not correct.", - "you_got_diamond": "You got the diamond", - "map": "Map", - "next": "Next", - "you_win": "You Win!", - "skip": "Skip", - "intro_1_1": "Dinner is ready! Come quickly and wash your beautiful hands!", - "intro_1_2": "Mom! Our hands aren't that dirty! We'll just wipe them with a tissue!", - "intro_2": "The purity of faith... \nIt means cleanliness is a sign of faith!", - "intro_3": "These good deeds make our souls strong and beautiful!", - "intro_4": "Do you want to travel to the Promised Garden?", - "intro_5": "Yessss....\nWe are ready!", - "want_to_exit": "Want To Exit?", - "exit_dialog_desc": "Come back, hero!\nThe adventure isn’t over yet", - "cancel": "Cancel", - "exit": "Exit", - "play": "PLAY", - "no_hadith": "There isn't any hadith for this question", - "showcase_answer": "Tap the correct option\nto select.", - "showcase_notif": "The announcer will\nread the answers to\nthe options to you.", - "showcase_stepper": "Here you will see the\nquestions for this\nstage to reach the\ndiamond.", - "showcase_hadith": "View sources and\nhadiths for this\nquestion", - "showcase_guide": "This is a guide that will\nhelp you.", - "reward": "Reward", - "coming_soon": "Next stages will open soon", - "downloading": "Downloading" + "@@locale": "es", + "about_us": "Sobre nosotros", + "about_us_desc": "Rive combina una herramienta de diseño interactivo, un nuevo formato de gráficos con estado, un entorno de ejecución multiplataforma ligero y un motor de renderizado vectorial ultrarrápido.\nEste flujo de trabajo integral da vida a las interfaces con movimiento. Proporciona a diseñadores y desarrolladores las herramientas para crear.", + "select_language": "Seleccionar idioma", + "select": "Seleccionar", + "please_wait": "espere unos momentos...", + "downloading_data": "Descargando datos iniciales", + "lost_connection": "¡Conexión perdida!", + "retry": "Reintentar", + "connected_to_internet": "Debes estar conectado a Internet para descargar los datos iniciales del juego.", + "start": "Comenzar", + "step": "Paso", + "question": "Pregunta", + "be_cureful": "Ten más\ncuidado.", + "wrong_answer": "Tu respuesta\nno fue correcta.", + "you_got_diamond": "Obtuviste el diamante", + "map": "Mapa", + "next": "Siguiente", + "you_win": "¡Has ganado!", + "skip": "Omitir", + "intro_1_1": "¡La cena está lista! ¡Vengan rápido y lávense sus hermosas manos!", + "intro_1_2": "¡Mamá! ¡Nuestras manos no están tan sucias! ¡Solo nos las limpiaremos con un pañuelo!", + "intro_2": "La pureza de la fe...\n¡Significa que la limpieza es una señal de fe!", + "intro_3": "¡Estas buenas acciones hacen que nuestras almas sean fuertes y hermosas!", + "intro_4": "¿Quieren viajar al Jardín Prometido?", + "intro_5": "¡Síiii....\nEstamos listos!", + "want_to_exit": "¿Quieres salir?", + "exit_dialog_desc": "¡Vuelve, héroe!\nLa aventura aún no ha terminado", + "cancel": "Cancelar", + "exit": "Salir", + "play": "JUGAR", + "no_hadith": "No hay ningún Hadith para esta pregunta", + "showcase_answer": "Toca la opción correcta\npara seleccionar.", + "showcase_notif": "El narrador te\nleerá las respuestas de\nlas opciones.", + "showcase_stepper": "Aquí verás las\npreguntas de esta\netapa para alcanzar el\ndiamante.", + "showcase_hadith": "Ver fuentes y\nHadiths para esta\npregunta", + "showcase_guide": "Esta es una guía que te\nayudará.", + "reward": "Recompensa", + "coming_soon": "Las próximas etapas se abrirán pronto", + "downloading": "Descargando" } \ No newline at end of file diff --git a/lib/l10n/app_fa.arb b/lib/l10n/app_fa.arb index ebc30c1..2ecc04b 100644 --- a/lib/l10n/app_fa.arb +++ b/lib/l10n/app_fa.arb @@ -1,42 +1,42 @@ { - "@@locale": "en", - "about_us": "About us", - "about_us_desc" : "Rive combines an interactive design tool, a new stateful graphics format, a lightweight multi-platform runtime, and a blazing-fast vector renderer. \nThis end-to-end pipeline brings interfaces to life with motion. It gives designers and devs the tools to build.", - "select_language": "Select language", - "select": "Select", - "please_wait": "wait a few moments...", - "downloading_data": "Downloading initial data", - "lost_connection": "Lost connection!", - "retry": "Retry", - "connected_to_internet": "You must be connected to the internet to download the initial game data.", - "start": "Start", - "step": "Step", - "question": "Question", - "be_cureful": "Be more\ncareful.", - "wrong_answer": "Your answer\nwas not correct.", - "you_got_diamond": "You got the diamond", - "map": "Map", - "next": "Next", - "you_win": "You Win!", - "skip": "Skip", - "intro_1_1": "Dinner is ready! Come quickly and wash your beautiful hands!", - "intro_1_2": "Mom! Our hands aren't that dirty! We'll just wipe them with a tissue!", - "intro_2": "The purity of faith... \nIt means cleanliness is a sign of faith!", - "intro_3": "These good deeds make our souls strong and beautiful!", - "intro_4": "Do you want to travel to the Promised Garden?", - "intro_5": "Yessss....\nWe are ready!", - "want_to_exit": "Want To Exit?", - "exit_dialog_desc": "Come back, hero!\nThe adventure isn’t over yet", - "cancel": "Cancel", - "exit": "Exit", - "play": "PLAY", - "no_hadith": "There isn't any hadith for this question", - "showcase_answer": "Tap the correct option\nto select.", - "showcase_notif": "The announcer will\nread the answers to\nthe options to you.", - "showcase_stepper": "Here you will see the\nquestions for this\nstage to reach the\ndiamond.", - "showcase_hadith": "View sources and\nhadiths for this\nquestion", - "showcase_guide": "This is a guide that will\nhelp you.", - "reward": "Reward", - "coming_soon": "Next stages will open soon", - "downloading": "Downloading" + "@@locale": "fa", + "about_us": "درباره ما", + "about_us_desc": "Rive ترکیبی از یک ابزار طراحی تعاملی، یک فرمت گرافیکی جدید مبتنی بر وضعیت، یک محیط اجرای سبک چندپلتفرمی و یک موتور رندر برداری فوق‌سریع است. \nاین مسیر یکپارچه، رابط‌های کاربری را با حرکت زنده می‌کند و به طراحان و توسعه‌دهندگان ابزارهای لازم برای ساخت را می‌دهد.", + "select_language": "انتخاب زبان", + "select": "انتخاب", + "please_wait": "لطفاً چند لحظه صبر کنید...", + "downloading_data": "در حال دانلود داده‌های اولیه", + "lost_connection": "ارتباط قطع شد!", + "retry": "تلاش مجدد", + "connected_to_internet": "برای دانلود داده‌های اولیه بازی، باید به اینترنت متصل باشید.", + "start": "شروع", + "step": "مرحله", + "question": "سوال", + "be_cureful": "بیشتر\nدقت کن.", + "wrong_answer": "پاسخ شما\nدرست نبود.", + "you_got_diamond": "شما الماس را گرفتید", + "map": "نقشه", + "next": "بعدی", + "you_win": "برنده شدی!", + "skip": "رد شدن", + "intro_1_1": "شام آماده است! زود بیایید و دست‌های قشنگتون رو بشویید!", + "intro_1_2": "مامان! دست‌های ما اونقدرها هم کثیف نیست! فقط با یه دستمال پاکشون می‌کنیم!", + "intro_2": "پاکی ایمان... \nیعنی نظافت نشانه‌ای از ایمان است!", + "intro_3": "این کارهای خوب، روح ما رو قوی و زیبا می‌کنه!", + "intro_4": "دوست دارید به باغ موعود سفر کنید؟", + "intro_5": "بلههه....\nما آماده‌ایم!", + "want_to_exit": "می‌خواهید خارج شوید؟", + "exit_dialog_desc": "برگرد قهرمان!\nماجراجویی هنوز تمام نشده", + "cancel": "لغو", + "exit": "خروج", + "play": "بازی", + "no_hadith": "هیچ حدیثی برای این سوال وجود ندارد", + "showcase_answer": "برای انتخاب، روی\nگزینه صحیح ضربه بزنید.", + "showcase_notif": "گوینده پاسخ‌های\nمربوط به گزینه‌ها را\nبرای شما می‌خواند.", + "showcase_stepper": "در اینجا سوالات\nمربوط به این مرحله\nرا برای رسیدن به\nالماس می‌بینید.", + "showcase_hadith": "مشاهده منابع و\nاحادیث مربوط به\nاین سوال", + "showcase_guide": "این راهنمایی است که\nبه شما کمک می‌کند.", + "reward": "جایزه", + "coming_soon": "مراحل بعدی به‌زودی باز می‌شوند", + "downloading": "در حال دانلود" } \ No newline at end of file diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb index ebc30c1..e6a81cf 100644 --- a/lib/l10n/app_hi.arb +++ b/lib/l10n/app_hi.arb @@ -1,42 +1,42 @@ { - "@@locale": "en", - "about_us": "About us", - "about_us_desc" : "Rive combines an interactive design tool, a new stateful graphics format, a lightweight multi-platform runtime, and a blazing-fast vector renderer. \nThis end-to-end pipeline brings interfaces to life with motion. It gives designers and devs the tools to build.", - "select_language": "Select language", - "select": "Select", - "please_wait": "wait a few moments...", - "downloading_data": "Downloading initial data", - "lost_connection": "Lost connection!", - "retry": "Retry", - "connected_to_internet": "You must be connected to the internet to download the initial game data.", - "start": "Start", - "step": "Step", - "question": "Question", - "be_cureful": "Be more\ncareful.", - "wrong_answer": "Your answer\nwas not correct.", - "you_got_diamond": "You got the diamond", - "map": "Map", - "next": "Next", - "you_win": "You Win!", - "skip": "Skip", - "intro_1_1": "Dinner is ready! Come quickly and wash your beautiful hands!", - "intro_1_2": "Mom! Our hands aren't that dirty! We'll just wipe them with a tissue!", - "intro_2": "The purity of faith... \nIt means cleanliness is a sign of faith!", - "intro_3": "These good deeds make our souls strong and beautiful!", - "intro_4": "Do you want to travel to the Promised Garden?", - "intro_5": "Yessss....\nWe are ready!", - "want_to_exit": "Want To Exit?", - "exit_dialog_desc": "Come back, hero!\nThe adventure isn’t over yet", - "cancel": "Cancel", - "exit": "Exit", - "play": "PLAY", - "no_hadith": "There isn't any hadith for this question", - "showcase_answer": "Tap the correct option\nto select.", - "showcase_notif": "The announcer will\nread the answers to\nthe options to you.", - "showcase_stepper": "Here you will see the\nquestions for this\nstage to reach the\ndiamond.", - "showcase_hadith": "View sources and\nhadiths for this\nquestion", - "showcase_guide": "This is a guide that will\nhelp you.", - "reward": "Reward", - "coming_soon": "Next stages will open soon", - "downloading": "Downloading" + "@@locale": "hi", + "about_us": "Hamare baare mein", + "about_us_desc": "Rive ek interactive design tool, naye stateful graphics format, lightweight multi-platform runtime, aur behad tez vector renderer ko jodata hai. \nYeh end-to-end pipeline motion ke saath interfaces me jaan daal deti hai. Yeh designers aur devs ko banane ke liye tools deti hai.", + "select_language": "Bhasha chunein", + "select": "Chunein", + "please_wait": "kuch pal intezaar karein...", + "downloading_data": "Shuruati data download ho raha hai", + "lost_connection": "Connection toot gaya!", + "retry": "Dobara koshish karein", + "connected_to_internet": "Initial game data download karne ke liye aapka internet se juda hona zaroori hai.", + "start": "Shuru karein", + "step": "Kadam", + "question": "Sawal", + "be_cureful": "Zyada\nsavdhan rahein.", + "wrong_answer": "Aapka jawab\nsahi nahi tha.", + "you_got_diamond": "Aapko diamond mil gaya", + "map": "Naksha", + "next": "Aage", + "you_win": "Aap jeet gaye!", + "skip": "Chhodein", + "intro_1_1": "Khana tayyar hai! Jaldi aao aur apne pyare haath dho lo!", + "intro_1_2": "Ammi! Hamare haath itne bhi gande nahi hain! Hum bas inhe tissue se poch lenge!", + "intro_2": "Imaan ki paakeezgi... \nIska matlab hai safai Imaan ki alamat hai!", + "intro_3": "Yeh nek aamal hamari rooh ko mazboot aur khoobsurat banate hain!", + "intro_4": "Kya aap Wada Kiye Gaye Baagh ka safar karna chahte hain?", + "intro_5": "Haaan....\nHum tayyar hain!", + "want_to_exit": "Kya aap bahar jana chahte hain?", + "exit_dialog_desc": "Wapas aana, hero!\nSafar abhi khatam nahi hua hai", + "cancel": "Radd karein", + "exit": "Bahar niklein", + "play": "KHELEIN", + "no_hadith": "Is sawal ke liye koi Hadith nahi hai", + "showcase_answer": "Chunne ke liye sahi\noption par tap karein.", + "showcase_notif": "Announcer aapko\noptions ke jawab\npadh kar sunayenge.", + "showcase_stepper": "Yahan aapko diamond\ntak pahunchne ke liye\nis stage ke\nsawal dikhenge.", + "showcase_hadith": "Is sawal ke liye\njaraye aur Hadith\ndekhein", + "showcase_guide": "Yeh ek guide hai jo\naapki madad karegi.", + "reward": "Inaam", + "coming_soon": "Agle stages jaldi khulenge", + "downloading": "Download ho raha hai" } \ No newline at end of file diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index ebc30c1..5e0c2b3 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -1,42 +1,42 @@ { - "@@locale": "en", - "about_us": "About us", - "about_us_desc" : "Rive combines an interactive design tool, a new stateful graphics format, a lightweight multi-platform runtime, and a blazing-fast vector renderer. \nThis end-to-end pipeline brings interfaces to life with motion. It gives designers and devs the tools to build.", - "select_language": "Select language", - "select": "Select", - "please_wait": "wait a few moments...", - "downloading_data": "Downloading initial data", - "lost_connection": "Lost connection!", - "retry": "Retry", - "connected_to_internet": "You must be connected to the internet to download the initial game data.", - "start": "Start", - "step": "Step", - "question": "Question", - "be_cureful": "Be more\ncareful.", - "wrong_answer": "Your answer\nwas not correct.", - "you_got_diamond": "You got the diamond", - "map": "Map", - "next": "Next", - "you_win": "You Win!", - "skip": "Skip", - "intro_1_1": "Dinner is ready! Come quickly and wash your beautiful hands!", - "intro_1_2": "Mom! Our hands aren't that dirty! We'll just wipe them with a tissue!", - "intro_2": "The purity of faith... \nIt means cleanliness is a sign of faith!", - "intro_3": "These good deeds make our souls strong and beautiful!", - "intro_4": "Do you want to travel to the Promised Garden?", - "intro_5": "Yessss....\nWe are ready!", - "want_to_exit": "Want To Exit?", - "exit_dialog_desc": "Come back, hero!\nThe adventure isn’t over yet", - "cancel": "Cancel", - "exit": "Exit", - "play": "PLAY", - "no_hadith": "There isn't any hadith for this question", - "showcase_answer": "Tap the correct option\nto select.", - "showcase_notif": "The announcer will\nread the answers to\nthe options to you.", - "showcase_stepper": "Here you will see the\nquestions for this\nstage to reach the\ndiamond.", - "showcase_hadith": "View sources and\nhadiths for this\nquestion", - "showcase_guide": "This is a guide that will\nhelp you.", - "reward": "Reward", - "coming_soon": "Next stages will open soon", - "downloading": "Downloading" + "@@locale": "id", + "about_us": "Tentang kami", + "about_us_desc": "Rive menggabungkan alat desain interaktif, format grafis berstatus baru, runtime multi-platform yang ringan, dan perender vektor yang sangat cepat. \nAlur menyeluruh ini menghidupkan antarmuka dengan gerakan. Ini memberikan alat untuk membangun kepada desainer dan pengembang.", + "select_language": "Pilih bahasa", + "select": "Pilih", + "please_wait": "tunggu sebentar...", + "downloading_data": "Mengunduh data awal", + "lost_connection": "Koneksi terputus!", + "retry": "Coba lagi", + "connected_to_internet": "Anda harus terhubung ke internet untuk mengunduh data awal permainan.", + "start": "Mulai", + "step": "Langkah", + "question": "Pertanyaan", + "be_cureful": "Lebih\nberhati-hatilah.", + "wrong_answer": "Jawaban Anda\ntidak tepat.", + "you_got_diamond": "Anda mendapatkan berlian", + "map": "Peta", + "next": "Selanjutnya", + "you_win": "Anda Menang!", + "skip": "Lewati", + "intro_1_1": "Makan malam sudah siap! Ayo cepat datang dan cuci tangan kalian yang indah!", + "intro_1_2": "Ibu! Tangan kami tidak begitu kotor! Kami hanya akan mengusapnya dengan tisu!", + "intro_2": "Kesucian iman... \nArtinya kebersihan adalah tanda dari iman!", + "intro_3": "Perbuatan baik ini membuat jiwa kita kuat dan indah!", + "intro_4": "Apakah kalian ingin bepergian ke Taman yang Dijanjikan?", + "intro_5": "Yaaaa....\nKami siap!", + "want_to_exit": "Ingin Keluar?", + "exit_dialog_desc": "Kembalilah, pahlawan!\nPetualangan ini belum berakhir", + "cancel": "Batal", + "exit": "Keluar", + "play": "MAIN", + "no_hadith": "Tidak ada Hadith untuk pertanyaan ini", + "showcase_answer": "Ketuk opsi yang benar\nuntuk memilih.", + "showcase_notif": "Narator akan\nmembacakan jawaban dari\nopsi-opsi tersebut kepada Anda.", + "showcase_stepper": "Di sini Anda akan melihat\npertanyaan-pertanyaan untuk\ntahap ini demi mencapai\nberlian tersebut.", + "showcase_hadith": "Lihat sumber dan\nHadith untuk\npertanyaan ini", + "showcase_guide": "Ini adalah panduan yang akan\nmembantu Anda.", + "reward": "Hadiah", + "coming_soon": "Tahap selanjutnya akan segera dibuka", + "downloading": "Mengunduh" } \ No newline at end of file diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 6f69286..970b0e9 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -6,11 +6,18 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:intl/intl.dart' as intl; import 'app_localizations_ar.dart'; +import 'app_localizations_az.dart'; import 'app_localizations_de.dart'; import 'app_localizations_en.dart'; +import 'app_localizations_es.dart'; +import 'app_localizations_fa.dart'; import 'app_localizations_fr.dart'; +import 'app_localizations_hi.dart'; +import 'app_localizations_id.dart'; +import 'app_localizations_pt.dart'; import 'app_localizations_ru.dart'; import 'app_localizations_tr.dart'; +import 'app_localizations_ur.dart'; // ignore_for_file: type=lint @@ -99,11 +106,18 @@ abstract class AppLocalizations { /// A list of this localizations delegate's supported locales. static const List supportedLocales = [ Locale('ar'), + Locale('az'), Locale('de'), Locale('en'), + Locale('es'), + Locale('fa'), Locale('fr'), + Locale('hi'), + Locale('id'), + Locale('pt'), Locale('ru'), Locale('tr'), + Locale('ur'), ]; /// No description provided for @about_us. @@ -353,11 +367,18 @@ class _AppLocalizationsDelegate @override bool isSupported(Locale locale) => [ 'ar', + 'az', 'de', 'en', + 'es', + 'fa', 'fr', + 'hi', + 'id', + 'pt', 'ru', 'tr', + 'ur', ].contains(locale.languageCode); @override @@ -369,16 +390,30 @@ AppLocalizations lookupAppLocalizations(Locale locale) { switch (locale.languageCode) { case 'ar': return AppLocalizationsAr(); + case 'az': + return AppLocalizationsAz(); case 'de': return AppLocalizationsDe(); case 'en': return AppLocalizationsEn(); + case 'es': + return AppLocalizationsEs(); + case 'fa': + return AppLocalizationsFa(); case 'fr': return AppLocalizationsFr(); + case 'hi': + return AppLocalizationsHi(); + case 'id': + return AppLocalizationsId(); + case 'pt': + return AppLocalizationsPt(); case 'ru': return AppLocalizationsRu(); case 'tr': return AppLocalizationsTr(); + case 'ur': + return AppLocalizationsUr(); } throw FlutterError( diff --git a/lib/l10n/app_localizations_az.dart b/lib/l10n/app_localizations_az.dart new file mode 100644 index 0000000..9e5ec33 --- /dev/null +++ b/lib/l10n/app_localizations_az.dart @@ -0,0 +1,134 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Azerbaijani (`az`). +class AppLocalizationsAz extends AppLocalizations { + AppLocalizationsAz([String locale = 'az']) : super(locale); + + @override + String get about_us => 'Haqqımızda'; + + @override + String get about_us_desc => + 'Rive interaktiv dizayn alətini, yeni vəziyyətə əsaslanan qrafika formatını, yüngül çoxplatformalı iş mühitini və çox sürətli vektor render mühərrikini birləşdirir. \nBu uçdan-uca sistem interfeyslərə hərəkət qataraq onları canlandırır. O, dizaynerlərə və tərtibatçılara yaratmaq üçün alətlər verir.'; + + @override + String get select_language => 'Dil seçin'; + + @override + String get select => 'Seç'; + + @override + String get please_wait => 'bir az gözləyin...'; + + @override + String get downloading_data => 'İlkin məlumatlar yüklənir'; + + @override + String get lost_connection => 'Bağlantı kəsildi!'; + + @override + String get retry => 'Yenidən cəhd et'; + + @override + String get connected_to_internet => + 'İlkin oyun məlumatlarını yükləmək üçün internetə qoşulmalısınız.'; + + @override + String get start => 'Başla'; + + @override + String get step => 'Addım'; + + @override + String get question => 'Sual'; + + @override + String get be_cureful => 'Daha diqqətli\nolun.'; + + @override + String get wrong_answer => 'Cavabınız\ndoğru deyildi.'; + + @override + String get you_got_diamond => 'Siz almaz qazandınız'; + + @override + String get map => 'Xəritə'; + + @override + String get next => 'Növbəti'; + + @override + String get you_win => 'Siz Qalib Gəldiniz!'; + + @override + String get skip => 'Keç'; + + @override + String get intro_1_1 => + 'Şam yeməyi hazırdır! Tez gəlin və gözəl əllərinizi yuyun!'; + + @override + String get intro_1_2 => + 'Ana! Əllərimiz o qədər də çirkli deyil! Sadəcə salfetlə siləcəyik!'; + + @override + String get intro_2 => + 'İmanın saflığı... \nBu o deməkdir ki, təmizlik imanın nişanəsidir!'; + + @override + String get intro_3 => 'Bu yaxşı əməllər ruhumuzu güclü və gözəl edir!'; + + @override + String get intro_4 => 'Vəd edilmiş Bağçaya səyahət etmək istəyirsinizmi?'; + + @override + String get intro_5 => 'Bəliiii....\nBiz hazırıq!'; + + @override + String get want_to_exit => 'Çıxmaq istəyirsiniz?'; + + @override + String get exit_dialog_desc => 'Geri qayıt, qəhrəman!\nMəcarə hələ bitməyib'; + + @override + String get cancel => 'Ləğv et'; + + @override + String get exit => 'Çıxış'; + + @override + String get play => 'OYNA'; + + @override + String get no_hadith => 'Bu sual üçün heç bir Hədis yoxdur'; + + @override + String get showcase_answer => 'Seçmək üçün doğru\nvariantın üzərinə toxunun.'; + + @override + String get showcase_notif => + 'Diktor\nvariantların cavablarını\nsizə oxuyacaq.'; + + @override + String get showcase_stepper => + 'Burada almaza\nçatmaq üçün bu\nmərhələyə aid\nsualları görəcəksiniz.'; + + @override + String get showcase_hadith => 'Bu sual üçün\nmənbələrə və Hədislərə\nbaxın'; + + @override + String get showcase_guide => 'Bu sizə kömək edəcək\nbir bələdçidir.'; + + @override + String get reward => 'Mükafat'; + + @override + String get coming_soon => 'Növbəti mərhələlər tezliklə açılacaq'; + + @override + String get downloading => 'Yüklənir'; +} diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index b70c80c..fcc4cf1 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -69,7 +69,7 @@ class AppLocalizationsDe extends AppLocalizations { @override String get intro_1_1 => - 'Das Abendessen ist fertig! Komm schnell und wasch dir schön die Hände!'; + 'Das Abendessen ist fertig! Kommt schnell und wascht eure schönen Hände!'; @override String get intro_1_2 => @@ -106,7 +106,7 @@ class AppLocalizationsDe extends AppLocalizations { String get play => 'SPIELEN'; @override - String get no_hadith => 'Für diese Frage gibt es keine Hadith.'; + String get no_hadith => 'Für diese Frage gibt es keinen Hadith.'; @override String get showcase_answer => @@ -128,7 +128,7 @@ class AppLocalizationsDe extends AppLocalizations { String get showcase_guide => 'Dies ist eine Anleitung,\ndie dir hilft.'; @override - String get reward => 'belohnen'; + String get reward => 'Belohnung'; @override String get coming_soon => 'Next stages will open soon'; diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart new file mode 100644 index 0000000..f8277c8 --- /dev/null +++ b/lib/l10n/app_localizations_es.dart @@ -0,0 +1,136 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Spanish Castilian (`es`). +class AppLocalizationsEs extends AppLocalizations { + AppLocalizationsEs([String locale = 'es']) : super(locale); + + @override + String get about_us => 'Sobre nosotros'; + + @override + String get about_us_desc => + 'Rive combina una herramienta de diseño interactivo, un nuevo formato de gráficos con estado, un entorno de ejecución multiplataforma ligero y un motor de renderizado vectorial ultrarrápido.\nEste flujo de trabajo integral da vida a las interfaces con movimiento. Proporciona a diseñadores y desarrolladores las herramientas para crear.'; + + @override + String get select_language => 'Seleccionar idioma'; + + @override + String get select => 'Seleccionar'; + + @override + String get please_wait => 'espere unos momentos...'; + + @override + String get downloading_data => 'Descargando datos iniciales'; + + @override + String get lost_connection => '¡Conexión perdida!'; + + @override + String get retry => 'Reintentar'; + + @override + String get connected_to_internet => + 'Debes estar conectado a Internet para descargar los datos iniciales del juego.'; + + @override + String get start => 'Comenzar'; + + @override + String get step => 'Paso'; + + @override + String get question => 'Pregunta'; + + @override + String get be_cureful => 'Ten más\ncuidado.'; + + @override + String get wrong_answer => 'Tu respuesta\nno fue correcta.'; + + @override + String get you_got_diamond => 'Obtuviste el diamante'; + + @override + String get map => 'Mapa'; + + @override + String get next => 'Siguiente'; + + @override + String get you_win => '¡Has ganado!'; + + @override + String get skip => 'Omitir'; + + @override + String get intro_1_1 => + '¡La cena está lista! ¡Vengan rápido y lávense sus hermosas manos!'; + + @override + String get intro_1_2 => + '¡Mamá! ¡Nuestras manos no están tan sucias! ¡Solo nos las limpiaremos con un pañuelo!'; + + @override + String get intro_2 => + 'La pureza de la fe...\n¡Significa que la limpieza es una señal de fe!'; + + @override + String get intro_3 => + '¡Estas buenas acciones hacen que nuestras almas sean fuertes y hermosas!'; + + @override + String get intro_4 => '¿Quieren viajar al Jardín Prometido?'; + + @override + String get intro_5 => '¡Síiii....\nEstamos listos!'; + + @override + String get want_to_exit => '¿Quieres salir?'; + + @override + String get exit_dialog_desc => + '¡Vuelve, héroe!\nLa aventura aún no ha terminado'; + + @override + String get cancel => 'Cancelar'; + + @override + String get exit => 'Salir'; + + @override + String get play => 'JUGAR'; + + @override + String get no_hadith => 'No hay ningún Hadith para esta pregunta'; + + @override + String get showcase_answer => 'Toca la opción correcta\npara seleccionar.'; + + @override + String get showcase_notif => + 'El narrador te\nleerá las respuestas de\nlas opciones.'; + + @override + String get showcase_stepper => + 'Aquí verás las\npreguntas de esta\netapa para alcanzar el\ndiamante.'; + + @override + String get showcase_hadith => 'Ver fuentes y\nHadiths para esta\npregunta'; + + @override + String get showcase_guide => 'Esta es una guía que te\nayudará.'; + + @override + String get reward => 'Recompensa'; + + @override + String get coming_soon => 'Las próximas etapas se abrirán pronto'; + + @override + String get downloading => 'Descargando'; +} diff --git a/lib/l10n/app_localizations_fa.dart b/lib/l10n/app_localizations_fa.dart new file mode 100644 index 0000000..6b0ce5e --- /dev/null +++ b/lib/l10n/app_localizations_fa.dart @@ -0,0 +1,133 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Persian (`fa`). +class AppLocalizationsFa extends AppLocalizations { + AppLocalizationsFa([String locale = 'fa']) : super(locale); + + @override + String get about_us => 'درباره ما'; + + @override + String get about_us_desc => + 'Rive ترکیبی از یک ابزار طراحی تعاملی، یک فرمت گرافیکی جدید مبتنی بر وضعیت، یک محیط اجرای سبک چندپلتفرمی و یک موتور رندر برداری فوق‌سریع است. \nاین مسیر یکپارچه، رابط‌های کاربری را با حرکت زنده می‌کند و به طراحان و توسعه‌دهندگان ابزارهای لازم برای ساخت را می‌دهد.'; + + @override + String get select_language => 'انتخاب زبان'; + + @override + String get select => 'انتخاب'; + + @override + String get please_wait => 'لطفاً چند لحظه صبر کنید...'; + + @override + String get downloading_data => 'در حال دانلود داده‌های اولیه'; + + @override + String get lost_connection => 'ارتباط قطع شد!'; + + @override + String get retry => 'تلاش مجدد'; + + @override + String get connected_to_internet => + 'برای دانلود داده‌های اولیه بازی، باید به اینترنت متصل باشید.'; + + @override + String get start => 'شروع'; + + @override + String get step => 'مرحله'; + + @override + String get question => 'سوال'; + + @override + String get be_cureful => 'بیشتر\nدقت کن.'; + + @override + String get wrong_answer => 'پاسخ شما\nدرست نبود.'; + + @override + String get you_got_diamond => 'شما الماس را گرفتید'; + + @override + String get map => 'نقشه'; + + @override + String get next => 'بعدی'; + + @override + String get you_win => 'برنده شدی!'; + + @override + String get skip => 'رد شدن'; + + @override + String get intro_1_1 => + 'شام آماده است! زود بیایید و دست‌های قشنگتون رو بشویید!'; + + @override + String get intro_1_2 => + 'مامان! دست‌های ما اونقدرها هم کثیف نیست! فقط با یه دستمال پاکشون می‌کنیم!'; + + @override + String get intro_2 => 'پاکی ایمان... \nیعنی نظافت نشانه‌ای از ایمان است!'; + + @override + String get intro_3 => 'این کارهای خوب، روح ما رو قوی و زیبا می‌کنه!'; + + @override + String get intro_4 => 'دوست دارید به باغ موعود سفر کنید؟'; + + @override + String get intro_5 => 'بلههه....\nما آماده‌ایم!'; + + @override + String get want_to_exit => 'می‌خواهید خارج شوید؟'; + + @override + String get exit_dialog_desc => 'برگرد قهرمان!\nماجراجویی هنوز تمام نشده'; + + @override + String get cancel => 'لغو'; + + @override + String get exit => 'خروج'; + + @override + String get play => 'بازی'; + + @override + String get no_hadith => 'هیچ حدیثی برای این سوال وجود ندارد'; + + @override + String get showcase_answer => 'برای انتخاب، روی\nگزینه صحیح ضربه بزنید.'; + + @override + String get showcase_notif => + 'گوینده پاسخ‌های\nمربوط به گزینه‌ها را\nبرای شما می‌خواند.'; + + @override + String get showcase_stepper => + 'در اینجا سوالات\nمربوط به این مرحله\nرا برای رسیدن به\nالماس می‌بینید.'; + + @override + String get showcase_hadith => 'مشاهده منابع و\nاحادیث مربوط به\nاین سوال'; + + @override + String get showcase_guide => 'این راهنمایی است که\nبه شما کمک می‌کند.'; + + @override + String get reward => 'جایزه'; + + @override + String get coming_soon => 'مراحل بعدی به‌زودی باز می‌شوند'; + + @override + String get downloading => 'در حال دانلود'; +} diff --git a/lib/l10n/app_localizations_hi.dart b/lib/l10n/app_localizations_hi.dart new file mode 100644 index 0000000..370d87f --- /dev/null +++ b/lib/l10n/app_localizations_hi.dart @@ -0,0 +1,137 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Hindi (`hi`). +class AppLocalizationsHi extends AppLocalizations { + AppLocalizationsHi([String locale = 'hi']) : super(locale); + + @override + String get about_us => 'Hamare baare mein'; + + @override + String get about_us_desc => + 'Rive ek interactive design tool, naye stateful graphics format, lightweight multi-platform runtime, aur behad tez vector renderer ko jodata hai. \nYeh end-to-end pipeline motion ke saath interfaces me jaan daal deti hai. Yeh designers aur devs ko banane ke liye tools deti hai.'; + + @override + String get select_language => 'Bhasha chunein'; + + @override + String get select => 'Chunein'; + + @override + String get please_wait => 'kuch pal intezaar karein...'; + + @override + String get downloading_data => 'Shuruati data download ho raha hai'; + + @override + String get lost_connection => 'Connection toot gaya!'; + + @override + String get retry => 'Dobara koshish karein'; + + @override + String get connected_to_internet => + 'Initial game data download karne ke liye aapka internet se juda hona zaroori hai.'; + + @override + String get start => 'Shuru karein'; + + @override + String get step => 'Kadam'; + + @override + String get question => 'Sawal'; + + @override + String get be_cureful => 'Zyada\nsavdhan rahein.'; + + @override + String get wrong_answer => 'Aapka jawab\nsahi nahi tha.'; + + @override + String get you_got_diamond => 'Aapko diamond mil gaya'; + + @override + String get map => 'Naksha'; + + @override + String get next => 'Aage'; + + @override + String get you_win => 'Aap jeet gaye!'; + + @override + String get skip => 'Chhodein'; + + @override + String get intro_1_1 => + 'Khana tayyar hai! Jaldi aao aur apne pyare haath dho lo!'; + + @override + String get intro_1_2 => + 'Ammi! Hamare haath itne bhi gande nahi hain! Hum bas inhe tissue se poch lenge!'; + + @override + String get intro_2 => + 'Imaan ki paakeezgi... \nIska matlab hai safai Imaan ki alamat hai!'; + + @override + String get intro_3 => + 'Yeh nek aamal hamari rooh ko mazboot aur khoobsurat banate hain!'; + + @override + String get intro_4 => + 'Kya aap Wada Kiye Gaye Baagh ka safar karna chahte hain?'; + + @override + String get intro_5 => 'Haaan....\nHum tayyar hain!'; + + @override + String get want_to_exit => 'Kya aap bahar jana chahte hain?'; + + @override + String get exit_dialog_desc => + 'Wapas aana, hero!\nSafar abhi khatam nahi hua hai'; + + @override + String get cancel => 'Radd karein'; + + @override + String get exit => 'Bahar niklein'; + + @override + String get play => 'KHELEIN'; + + @override + String get no_hadith => 'Is sawal ke liye koi Hadith nahi hai'; + + @override + String get showcase_answer => 'Chunne ke liye sahi\noption par tap karein.'; + + @override + String get showcase_notif => + 'Announcer aapko\noptions ke jawab\npadh kar sunayenge.'; + + @override + String get showcase_stepper => + 'Yahan aapko diamond\ntak pahunchne ke liye\nis stage ke\nsawal dikhenge.'; + + @override + String get showcase_hadith => 'Is sawal ke liye\njaraye aur Hadith\ndekhein'; + + @override + String get showcase_guide => 'Yeh ek guide hai jo\naapki madad karegi.'; + + @override + String get reward => 'Inaam'; + + @override + String get coming_soon => 'Agle stages jaldi khulenge'; + + @override + String get downloading => 'Download ho raha hai'; +} diff --git a/lib/l10n/app_localizations_id.dart b/lib/l10n/app_localizations_id.dart new file mode 100644 index 0000000..2d667ad --- /dev/null +++ b/lib/l10n/app_localizations_id.dart @@ -0,0 +1,137 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Indonesian (`id`). +class AppLocalizationsId extends AppLocalizations { + AppLocalizationsId([String locale = 'id']) : super(locale); + + @override + String get about_us => 'Tentang kami'; + + @override + String get about_us_desc => + 'Rive menggabungkan alat desain interaktif, format grafis berstatus baru, runtime multi-platform yang ringan, dan perender vektor yang sangat cepat. \nAlur menyeluruh ini menghidupkan antarmuka dengan gerakan. Ini memberikan alat untuk membangun kepada desainer dan pengembang.'; + + @override + String get select_language => 'Pilih bahasa'; + + @override + String get select => 'Pilih'; + + @override + String get please_wait => 'tunggu sebentar...'; + + @override + String get downloading_data => 'Mengunduh data awal'; + + @override + String get lost_connection => 'Koneksi terputus!'; + + @override + String get retry => 'Coba lagi'; + + @override + String get connected_to_internet => + 'Anda harus terhubung ke internet untuk mengunduh data awal permainan.'; + + @override + String get start => 'Mulai'; + + @override + String get step => 'Langkah'; + + @override + String get question => 'Pertanyaan'; + + @override + String get be_cureful => 'Lebih\nberhati-hatilah.'; + + @override + String get wrong_answer => 'Jawaban Anda\ntidak tepat.'; + + @override + String get you_got_diamond => 'Anda mendapatkan berlian'; + + @override + String get map => 'Peta'; + + @override + String get next => 'Selanjutnya'; + + @override + String get you_win => 'Anda Menang!'; + + @override + String get skip => 'Lewati'; + + @override + String get intro_1_1 => + 'Makan malam sudah siap! Ayo cepat datang dan cuci tangan kalian yang indah!'; + + @override + String get intro_1_2 => + 'Ibu! Tangan kami tidak begitu kotor! Kami hanya akan mengusapnya dengan tisu!'; + + @override + String get intro_2 => + 'Kesucian iman... \nArtinya kebersihan adalah tanda dari iman!'; + + @override + String get intro_3 => 'Perbuatan baik ini membuat jiwa kita kuat dan indah!'; + + @override + String get intro_4 => + 'Apakah kalian ingin bepergian ke Taman yang Dijanjikan?'; + + @override + String get intro_5 => 'Yaaaa....\nKami siap!'; + + @override + String get want_to_exit => 'Ingin Keluar?'; + + @override + String get exit_dialog_desc => + 'Kembalilah, pahlawan!\nPetualangan ini belum berakhir'; + + @override + String get cancel => 'Batal'; + + @override + String get exit => 'Keluar'; + + @override + String get play => 'MAIN'; + + @override + String get no_hadith => 'Tidak ada Hadith untuk pertanyaan ini'; + + @override + String get showcase_answer => 'Ketuk opsi yang benar\nuntuk memilih.'; + + @override + String get showcase_notif => + 'Narator akan\nmembacakan jawaban dari\nopsi-opsi tersebut kepada Anda.'; + + @override + String get showcase_stepper => + 'Di sini Anda akan melihat\npertanyaan-pertanyaan untuk\ntahap ini demi mencapai\nberlian tersebut.'; + + @override + String get showcase_hadith => + 'Lihat sumber dan\nHadith untuk\npertanyaan ini'; + + @override + String get showcase_guide => 'Ini adalah panduan yang akan\nmembantu Anda.'; + + @override + String get reward => 'Hadiah'; + + @override + String get coming_soon => 'Tahap selanjutnya akan segera dibuka'; + + @override + String get downloading => 'Mengunduh'; +} diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart new file mode 100644 index 0000000..329c944 --- /dev/null +++ b/lib/l10n/app_localizations_pt.dart @@ -0,0 +1,136 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Portuguese (`pt`). +class AppLocalizationsPt extends AppLocalizations { + AppLocalizationsPt([String locale = 'pt']) : super(locale); + + @override + String get about_us => 'Sobre nós'; + + @override + String get about_us_desc => + 'O Rive combina uma ferramenta de design interativa, um novo formato gráfico com estado, um ambiente de execução multiplataforma leve e um renderizador vetorial ultrarrápido.\nEsta pipeline de ponta a ponta dá vida às interfaces com movimento. Oferece aos designers e desenvolvedores as ferramentas para criar.'; + + @override + String get select_language => 'Selecionar idioma'; + + @override + String get select => 'Selecionar'; + + @override + String get please_wait => 'Aguarde um momento...'; + + @override + String get downloading_data => 'Baixando dados iniciais'; + + @override + String get lost_connection => 'Conexão perdida!'; + + @override + String get retry => 'Tentar novamente'; + + @override + String get connected_to_internet => + 'Você precisa estar conectado à internet para baixar os dados iniciais do jogo.'; + + @override + String get start => 'Iniciar'; + + @override + String get step => 'Etapa'; + + @override + String get question => 'Pergunta'; + + @override + String get be_cureful => 'Tenha mais\ncuidado.'; + + @override + String get wrong_answer => 'Resposta\nincorreta.'; + + @override + String get you_got_diamond => 'Você conseguiu o diamante!'; + + @override + String get map => 'Mapa'; + + @override + String get next => 'Próximo'; + + @override + String get you_win => 'Você venceu!'; + + @override + String get skip => 'Pular'; + + @override + String get intro_1_1 => + 'O jantar está pronto! Venham rápido lavar bem as mãos!'; + + @override + String get intro_1_2 => + 'Mãe! Nossas mãos não estão tão sujas! Vamos só limpar com um lenço!'; + + @override + String get intro_2 => + 'A pureza faz parte da fé...\nIsso significa que a limpeza é um sinal de fé!'; + + @override + String get intro_3 => 'Essas boas ações tornam nossas almas fortes e belas!'; + + @override + String get intro_4 => 'Você quer viajar para o Jardim Prometido?'; + + @override + String get intro_5 => 'Siiiim...\nEstamos prontos!'; + + @override + String get want_to_exit => 'Deseja sair?'; + + @override + String get exit_dialog_desc => + 'Volte logo, herói!\nA aventura ainda não acabou!'; + + @override + String get cancel => 'Cancelar'; + + @override + String get exit => 'Sair'; + + @override + String get play => 'JOGAR'; + + @override + String get no_hadith => 'Não há nenhum Hadith para esta pergunta.'; + + @override + String get showcase_answer => 'Toque na opção\ncorreta para selecionar.'; + + @override + String get showcase_notif => + 'O narrador vai\nler as opções de\nresposta para você.'; + + @override + String get showcase_stepper => + 'Aqui você verá as\nperguntas desta\netapa para alcançar\no diamante.'; + + @override + String get showcase_hadith => + 'Veja as fontes e\nHadiths para esta\npergunta.'; + + @override + String get showcase_guide => 'Este é um guia\npara te ajudar.'; + + @override + String get reward => 'Recompensa'; + + @override + String get coming_soon => 'As próximas etapas abrirão em breve'; + + @override + String get downloading => 'Baixando...'; +} diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart index 076a49d..c0b0486 100644 --- a/lib/l10n/app_localizations_ru.dart +++ b/lib/l10n/app_localizations_ru.dart @@ -13,19 +13,19 @@ class AppLocalizationsRu extends AppLocalizations { @override String get about_us_desc => - 'Rive объединяет интерактивный инструмент для дизайна, новый формат графики с состоянием, легковесную многоплатформенную среду выполнения и сверхбыстрый векторный рендер. \nЭта сквозная система оживляет интерфейсы с помощью анимации и дает дизайнерам и разработчикам необходимые инструменты для создания.'; + 'Rive объединяет интерактивный инструмент для дизайна, новый формат графики с состоянием, легковесную многоплатформенную среду выполнения и сверхбыстрый векторный рендер. \nЭта сквозная система оживляет интерфейсы с помощью анимации и дает дизайнерам и разработчикам необходимые инструменты для творчества.'; @override - String get select_language => 'Выберите язык'; + String get select_language => 'Выбрать язык'; @override String get select => 'Выбрать'; @override - String get please_wait => 'Подождите несколько секунд...'; + String get please_wait => 'Пожалуйста, подождите...'; @override - String get downloading_data => 'Загрузка исходных данных'; + String get downloading_data => 'Загрузка начальных данных'; @override String get lost_connection => 'Соединение потеряно!'; @@ -35,7 +35,7 @@ class AppLocalizationsRu extends AppLocalizations { @override String get connected_to_internet => - 'Для загрузки исходных данных игры необходимо подключение к интернету.'; + 'Для загрузки начальных данных игры необходимо подключение к интернету.'; @override String get start => 'Начать'; @@ -50,10 +50,10 @@ class AppLocalizationsRu extends AppLocalizations { String get be_cureful => 'Будь\nвнимательнее.'; @override - String get wrong_answer => 'Твой ответ\nневерен.'; + String get wrong_answer => 'Неверный\nответ.'; @override - String get you_got_diamond => 'Ты получил алмаз'; + String get you_got_diamond => 'Ты получил алмаз!'; @override String get map => 'Карта'; @@ -68,20 +68,19 @@ class AppLocalizationsRu extends AppLocalizations { String get skip => 'Пропустить'; @override - String get intro_1_1 => - 'Ужин готов! Скорее приходите и помойте свои красивые руки!'; + String get intro_1_1 => 'Ужин готов! Скорее идите мыть руки!'; @override String get intro_1_2 => - 'Мама! Наши руки не такие грязные! Мы просто вытрем их салфеткой!'; + 'Мама! Наши руки не такие уж грязные! Мы просто вытрем их салфеткой!'; @override String get intro_2 => - 'Чистота веры...\nОна означает, что чистота — это признак веры!'; + 'Чистота — это половина веры...\nЭто значит, что быть опрятным — признак верующего!'; @override String get intro_3 => - 'Эти добрые дела делают нашу душу сильной и прекрасной!'; + 'Эти добрые дела делают наши души сильными и прекрасными!'; @override String get intro_4 => 'Хочешь отправиться в Обетованный Сад?'; @@ -100,19 +99,20 @@ class AppLocalizationsRu extends AppLocalizations { String get cancel => 'Отмена'; @override - String get exit => 'Выход'; + String get exit => 'Выйти'; @override String get play => 'ИГРАТЬ'; @override - String get no_hadith => 'Для этого вопроса нет хадиса'; + String get no_hadith => 'Для этого вопроса нет хадиса.'; @override - String get showcase_answer => 'Нажми на правильный\nвариант, чтобы выбрать.'; + String get showcase_answer => + 'Нажми на правильный\nответ, чтобы выбрать его.'; @override - String get showcase_notif => 'Диктор прочитает\nтебе все варианты\nответов.'; + String get showcase_notif => 'Диктор прочитает\nтебе варианты\nответов.'; @override String get showcase_stepper => @@ -120,17 +120,17 @@ class AppLocalizationsRu extends AppLocalizations { @override String get showcase_hadith => - 'Просмотри источники и\nхадисы по этому вопросу'; + 'Посмотри источники\nи хадисы к этому\nвопросу.'; @override - String get showcase_guide => 'Это руководство,\nкоторое поможет тебе.'; + String get showcase_guide => 'Это руководство\nпоможет тебе.'; @override - String get reward => 'награда'; + String get reward => 'Награда'; @override String get coming_soon => 'Next stages will open soon'; @override - String get downloading => 'Загрузка'; + String get downloading => 'Загрузка...'; } diff --git a/lib/l10n/app_localizations_tr.dart b/lib/l10n/app_localizations_tr.dart index 967e94f..cc5f797 100644 --- a/lib/l10n/app_localizations_tr.dart +++ b/lib/l10n/app_localizations_tr.dart @@ -13,16 +13,16 @@ class AppLocalizationsTr extends AppLocalizations { @override String get about_us_desc => - 'Rive, etkileşimli bir tasarım aracı, yeni bir durumsal grafik formatı, hafif çok platformlu bir çalışma zamanı ve son derece hızlı bir vektör oluşturucu sunar.\nBu uçtan uca süreç, arayüzleri hareketle canlandırır. Tasarımcılara ve geliştiricilere inşa etme gücü verir.'; + 'Rive, etkileşimli bir tasarım aracı, yeni bir durumsal grafik formatı, hafif çok platformlu bir çalışma zamanı ve son derece hızlı bir vektör oluşturucu sunar.\nBu uçtan uca süreç, arayüzleri hareketle canlandırır. Tasarımcılara ve geliştiricilere inşa etme araçları sunar.'; @override - String get select_language => 'Dili seçin'; + String get select_language => 'Dil Seç'; @override String get select => 'Seç'; @override - String get please_wait => 'Lütfen birkaç saniye bekleyin...'; + String get please_wait => 'Lütfen bekleyin...'; @override String get downloading_data => 'Başlangıç verileri indiriliyor'; @@ -31,11 +31,11 @@ class AppLocalizationsTr extends AppLocalizations { String get lost_connection => 'Bağlantı kesildi!'; @override - String get retry => 'Yeniden dene'; + String get retry => 'Tekrar Dene'; @override String get connected_to_internet => - 'Başlangıç oyun verilerini indirmek için internete bağlı olmalısınız.'; + 'Oyunun başlangıç verilerini indirmek için internete bağlı olmalısınız.'; @override String get start => 'Başla'; @@ -47,40 +47,41 @@ class AppLocalizationsTr extends AppLocalizations { String get question => 'Soru'; @override - String get be_cureful => 'Daha dikkatli\nol.'; + String get be_cureful => 'Biraz daha\ndikkatli ol.'; @override - String get wrong_answer => 'Cevabın\nyanlıştı.'; + String get wrong_answer => 'Yanlış\ncevap.'; @override - String get you_got_diamond => 'Elması kazandın'; + String get you_got_diamond => 'Elması kazandın!'; @override String get map => 'Harita'; @override - String get next => 'Sonraki'; + String get next => 'İleri'; @override String get you_win => 'Kazandın!'; @override - String get skip => 'Geç'; + String get skip => 'Atla'; @override String get intro_1_1 => - 'Yemek hazır! Hadi hemen gelin ve güzel ellerinizi yıkayın!'; + 'Yemek hazır! Hadi hemen gelin ve ellerinizi güzelce yıkayın!'; @override String get intro_1_2 => - 'Anne! Ellerimiz o kadar kirli değil! Peçeteyle sileriz!'; + 'Anne! Ellerimiz o kadar kirli değil! Peçeteyle silebiliriz!'; @override String get intro_2 => - 'İman saflığı...\nTemizliğin imanın bir parçası olduğunu gösterir!'; + 'Temizlik imandandır...\nBu, temiz olmanın imanın bir işareti olduğu anlamına gelir!'; @override - String get intro_3 => 'Bu güzel davranışlar ruhumuzu güçlü ve güzel yapar!'; + String get intro_3 => + 'Bu güzel davranışlar ruhlarımızı güçlü ve güzel yapar!'; @override String get intro_4 => 'Vadedilen Bahçe\'ye yolculuk etmek ister misin?'; @@ -101,17 +102,16 @@ class AppLocalizationsTr extends AppLocalizations { String get exit => 'Çıkış'; @override - String get play => 'OYNAT'; + String get play => 'OYNA'; @override - String get no_hadith => 'Bu soru için hadis bulunamadı'; + String get no_hadith => 'Bu soru için bir Hadis bulunmuyor.'; @override - String get showcase_answer => 'Doğru seçeneğe\ndokunarak seç.'; + String get showcase_answer => 'Seçmek için\ndoğru cevaba dokun.'; @override - String get showcase_notif => - 'Anlatıcı, seçeneklerin\ncevaplarını sana\nokuyacak.'; + String get showcase_notif => 'Anlatıcı, cevap\nseçeneklerini sana\nokuyacak.'; @override String get showcase_stepper => @@ -119,17 +119,17 @@ class AppLocalizationsTr extends AppLocalizations { @override String get showcase_hadith => - 'Bu soruya ait\nkaynakları ve hadisleri\nincele'; + 'Bu soruya ait\nkaynakları ve Hadisleri\nincele.'; @override - String get showcase_guide => 'Bu, sana yardımcı olacak\nbir rehberdir.'; + String get showcase_guide => 'Bu, sana yardımcı\nolacak bir rehberdir.'; @override - String get reward => 'ödül'; + String get reward => 'Ödül'; @override String get coming_soon => 'Next stages will open soon'; @override - String get downloading => 'İndiriliyor'; + String get downloading => 'İndiriliyor...'; } diff --git a/lib/l10n/app_localizations_ur.dart b/lib/l10n/app_localizations_ur.dart new file mode 100644 index 0000000..aed3d7d --- /dev/null +++ b/lib/l10n/app_localizations_ur.dart @@ -0,0 +1,133 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Urdu (`ur`). +class AppLocalizationsUr extends AppLocalizations { + AppLocalizationsUr([String locale = 'ur']) : super(locale); + + @override + String get about_us => 'ہمارے بارے میں'; + + @override + String get about_us_desc => + 'Rive ایک انٹرایکٹو ڈیزائن ٹول، ایک نیا اسٹیٹ فل گرافکس فارمیٹ، ایک ہلکا ملٹی پلیٹ فارم رن ٹائم، اور ایک انتہائی تیز ویکٹر رینڈرر کو یکجا کرتا ہے۔\nیہ اینڈ ٹو اینڈ پائپ لائن انٹرفیسز کو حرکت کے ساتھ زندگی بخشتی ہے۔ یہ ڈیزائنرز اور ڈیولپرز کو تخلیق کرنے کے ٹولز فراہم کرتی ہے۔'; + + @override + String get select_language => 'زبان منتخب کریں'; + + @override + String get select => 'منتخب کریں'; + + @override + String get please_wait => 'براہ کرم انتظار کریں...'; + + @override + String get downloading_data => 'ابتدائی ڈیٹا ڈاؤن لوڈ ہو رہا ہے'; + + @override + String get lost_connection => 'کنکشن ٹوٹ گیا!'; + + @override + String get retry => 'دوبارہ کوشش کریں'; + + @override + String get connected_to_internet => + 'گیم کا ابتدائی ڈیٹا ڈاؤن لوڈ کرنے کے لیے آپ کا انٹرنیٹ سے منسلک ہونا ضروری ہے۔'; + + @override + String get start => 'شروع کریں'; + + @override + String get step => 'مرحلہ'; + + @override + String get question => 'سوال'; + + @override + String get be_cureful => 'مزید احتیاط\nکریں۔'; + + @override + String get wrong_answer => 'غلط\nجواب۔'; + + @override + String get you_got_diamond => 'آپ نے ہیرا حاصل کر لیا!'; + + @override + String get map => 'نقشہ'; + + @override + String get next => 'اگلا'; + + @override + String get you_win => 'آپ جیت گئے!'; + + @override + String get skip => 'چھوڑیں'; + + @override + String get intro_1_1 => 'کھانا تیار ہے! جلدی آئیں اور اچھی طرح ہاتھ دھو لیں!'; + + @override + String get intro_1_2 => + 'امی! ہمارے ہاتھ اتنے گندے نہیں ہیں! ہم بس ٹشو سے صاف کر لیں گے!'; + + @override + String get intro_2 => + 'ایمان کی پاکیزگی...\nاس کا مطلب ہے کہ صفائی نصف ایمان ہے!'; + + @override + String get intro_3 => + 'یہ نیک اعمال ہماری روحوں کو مضبوط اور خوبصورت بناتے ہیں!'; + + @override + String get intro_4 => 'کیا آپ باغِ بہشت کا سفر کرنا چاہتے ہیں؟'; + + @override + String get intro_5 => 'ہاںاںاں...\nہم تیار ہیں!'; + + @override + String get want_to_exit => 'کیا آپ باہر نکلنا چاہتے ہیں؟'; + + @override + String get exit_dialog_desc => 'واپس آئیں، ہیرو!\nسفر ابھی ختم نہیں ہوا!'; + + @override + String get cancel => 'منسوخ کریں'; + + @override + String get exit => 'باہر نکلیں'; + + @override + String get play => 'کھیلیں'; + + @override + String get no_hadith => 'اس سوال کے لیے کوئی حدیث موجود نہیں ہے۔'; + + @override + String get showcase_answer => 'منتخب کرنے کے لیے\nدرست آپشن پر ٹیپ کریں۔'; + + @override + String get showcase_notif => 'راوی آپ کو\nآپشنز کے جوابات\nپڑھ کر سنائے گا۔'; + + @override + String get showcase_stepper => + 'یہاں آپ ہیرے تک\nپہنچنے کے لیے\nاس مرحلے کے\nسوالات دیکھیں گے۔'; + + @override + String get showcase_hadith => 'اس سوال کے\nحوالہ جات اور احادیث\nدیکھیں۔'; + + @override + String get showcase_guide => 'یہ ایک گائیڈ ہے\nجو آپ کی مدد کرے گی۔'; + + @override + String get reward => 'انعام'; + + @override + String get coming_soon => 'اگلے مراحل جلد کھلیں گے'; + + @override + String get downloading => 'ڈاؤن لوڈ ہو رہا ہے...'; +} diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index ebc30c1..8e5da59 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -1,42 +1,42 @@ { - "@@locale": "en", - "about_us": "About us", - "about_us_desc" : "Rive combines an interactive design tool, a new stateful graphics format, a lightweight multi-platform runtime, and a blazing-fast vector renderer. \nThis end-to-end pipeline brings interfaces to life with motion. It gives designers and devs the tools to build.", - "select_language": "Select language", - "select": "Select", - "please_wait": "wait a few moments...", - "downloading_data": "Downloading initial data", - "lost_connection": "Lost connection!", - "retry": "Retry", - "connected_to_internet": "You must be connected to the internet to download the initial game data.", - "start": "Start", - "step": "Step", - "question": "Question", - "be_cureful": "Be more\ncareful.", - "wrong_answer": "Your answer\nwas not correct.", - "you_got_diamond": "You got the diamond", - "map": "Map", - "next": "Next", - "you_win": "You Win!", - "skip": "Skip", - "intro_1_1": "Dinner is ready! Come quickly and wash your beautiful hands!", - "intro_1_2": "Mom! Our hands aren't that dirty! We'll just wipe them with a tissue!", - "intro_2": "The purity of faith... \nIt means cleanliness is a sign of faith!", - "intro_3": "These good deeds make our souls strong and beautiful!", - "intro_4": "Do you want to travel to the Promised Garden?", - "intro_5": "Yessss....\nWe are ready!", - "want_to_exit": "Want To Exit?", - "exit_dialog_desc": "Come back, hero!\nThe adventure isn’t over yet", - "cancel": "Cancel", - "exit": "Exit", - "play": "PLAY", - "no_hadith": "There isn't any hadith for this question", - "showcase_answer": "Tap the correct option\nto select.", - "showcase_notif": "The announcer will\nread the answers to\nthe options to you.", - "showcase_stepper": "Here you will see the\nquestions for this\nstage to reach the\ndiamond.", - "showcase_hadith": "View sources and\nhadiths for this\nquestion", - "showcase_guide": "This is a guide that will\nhelp you.", - "reward": "Reward", - "coming_soon": "Next stages will open soon", - "downloading": "Downloading" + "@@locale": "pt", + "about_us": "Sobre nós", + "about_us_desc": "O Rive combina uma ferramenta de design interativa, um novo formato gráfico com estado, um ambiente de execução multiplataforma leve e um renderizador vetorial ultrarrápido.\nEsta pipeline de ponta a ponta dá vida às interfaces com movimento. Oferece aos designers e desenvolvedores as ferramentas para criar.", + "select_language": "Selecionar idioma", + "select": "Selecionar", + "please_wait": "Aguarde um momento...", + "downloading_data": "Baixando dados iniciais", + "lost_connection": "Conexão perdida!", + "retry": "Tentar novamente", + "connected_to_internet": "Você precisa estar conectado à internet para baixar os dados iniciais do jogo.", + "start": "Iniciar", + "step": "Etapa", + "question": "Pergunta", + "be_cureful": "Tenha mais\ncuidado.", + "wrong_answer": "Resposta\nincorreta.", + "you_got_diamond": "Você conseguiu o diamante!", + "map": "Mapa", + "next": "Próximo", + "you_win": "Você venceu!", + "skip": "Pular", + "intro_1_1": "O jantar está pronto! Venham rápido lavar bem as mãos!", + "intro_1_2": "Mãe! Nossas mãos não estão tão sujas! Vamos só limpar com um lenço!", + "intro_2": "A pureza faz parte da fé...\nIsso significa que a limpeza é um sinal de fé!", + "intro_3": "Essas boas ações tornam nossas almas fortes e belas!", + "intro_4": "Você quer viajar para o Jardim Prometido?", + "intro_5": "Siiiim...\nEstamos prontos!", + "want_to_exit": "Deseja sair?", + "exit_dialog_desc": "Volte logo, herói!\nA aventura ainda não acabou!", + "cancel": "Cancelar", + "exit": "Sair", + "play": "JOGAR", + "no_hadith": "Não há nenhum Hadith para esta pergunta.", + "showcase_answer": "Toque na opção\ncorreta para selecionar.", + "showcase_notif": "O narrador vai\nler as opções de\nresposta para você.", + "showcase_stepper": "Aqui você verá as\nperguntas desta\netapa para alcançar\no diamante.", + "showcase_hadith": "Veja as fontes e\nHadiths para esta\npergunta.", + "showcase_guide": "Este é um guia\npara te ajudar.", + "reward": "Recompensa", + "coming_soon": "As próximas etapas abrirão em breve", + "downloading": "Baixando..." } \ No newline at end of file diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index e546b20..ab6c66d 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -1,41 +1,41 @@ { "@@locale": "ru", "about_us": "О нас", - "about_us_desc": "Rive объединяет интерактивный инструмент для дизайна, новый формат графики с состоянием, легковесную многоплатформенную среду выполнения и сверхбыстрый векторный рендер. \nЭта сквозная система оживляет интерфейсы с помощью анимации и дает дизайнерам и разработчикам необходимые инструменты для создания.", - "select_language": "Выберите язык", + "about_us_desc": "Rive объединяет интерактивный инструмент для дизайна, новый формат графики с состоянием, легковесную многоплатформенную среду выполнения и сверхбыстрый векторный рендер. \nЭта сквозная система оживляет интерфейсы с помощью анимации и дает дизайнерам и разработчикам необходимые инструменты для творчества.", + "select_language": "Выбрать язык", "select": "Выбрать", - "please_wait": "Подождите несколько секунд...", - "downloading_data": "Загрузка исходных данных", + "please_wait": "Пожалуйста, подождите...", + "downloading_data": "Загрузка начальных данных", "lost_connection": "Соединение потеряно!", "retry": "Повторить", - "connected_to_internet": "Для загрузки исходных данных игры необходимо подключение к интернету.", + "connected_to_internet": "Для загрузки начальных данных игры необходимо подключение к интернету.", "start": "Начать", "step": "Шаг", "question": "Вопрос", "be_cureful": "Будь\nвнимательнее.", - "wrong_answer": "Твой ответ\nневерен.", - "you_got_diamond": "Ты получил алмаз", + "wrong_answer": "Неверный\nответ.", + "you_got_diamond": "Ты получил алмаз!", "map": "Карта", "next": "Далее", "you_win": "Ты победил!", "skip": "Пропустить", - "intro_1_1": "Ужин готов! Скорее приходите и помойте свои красивые руки!", - "intro_1_2": "Мама! Наши руки не такие грязные! Мы просто вытрем их салфеткой!", - "intro_2": "Чистота веры...\nОна означает, что чистота — это признак веры!", - "intro_3": "Эти добрые дела делают нашу душу сильной и прекрасной!", + "intro_1_1": "Ужин готов! Скорее идите мыть руки!", + "intro_1_2": "Мама! Наши руки не такие уж грязные! Мы просто вытрем их салфеткой!", + "intro_2": "Чистота — это половина веры...\nЭто значит, что быть опрятным — признак верующего!", + "intro_3": "Эти добрые дела делают наши души сильными и прекрасными!", "intro_4": "Хочешь отправиться в Обетованный Сад?", "intro_5": "Дааа...\nМы готовы!", "want_to_exit": "Хочешь выйти?", "exit_dialog_desc": "Возвращайся, герой!\nПриключение еще не закончено!", "cancel": "Отмена", - "exit": "Выход", + "exit": "Выйти", "play": "ИГРАТЬ", - "no_hadith": "Для этого вопроса нет хадиса", - "showcase_answer": "Нажми на правильный\nвариант, чтобы выбрать.", - "showcase_notif": "Диктор прочитает\nтебе все варианты\nответов.", + "no_hadith": "Для этого вопроса нет хадиса.", + "showcase_answer": "Нажми на правильный\nответ, чтобы выбрать его.", + "showcase_notif": "Диктор прочитает\nтебе варианты\nответов.", "showcase_stepper": "Здесь ты увидишь\nвопросы этого этапа,\nчтобы получить\nалмаз.", - "showcase_hadith": "Просмотри источники и\nхадисы по этому вопросу", - "showcase_guide": "Это руководство,\nкоторое поможет тебе.", - "reward": "награда", - "downloading": "Загрузка" -} + "showcase_hadith": "Посмотри источники\nи хадисы к этому\nвопросу.", + "showcase_guide": "Это руководство\nпоможет тебе.", + "reward": "Награда", + "downloading": "Загрузка..." +} \ No newline at end of file diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index 2cc995b..070d95e 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -1,41 +1,41 @@ { "@@locale": "tr", "about_us": "Hakkımızda", - "about_us_desc": "Rive, etkileşimli bir tasarım aracı, yeni bir durumsal grafik formatı, hafif çok platformlu bir çalışma zamanı ve son derece hızlı bir vektör oluşturucu sunar.\nBu uçtan uca süreç, arayüzleri hareketle canlandırır. Tasarımcılara ve geliştiricilere inşa etme gücü verir.", - "select_language": "Dili seçin", + "about_us_desc": "Rive, etkileşimli bir tasarım aracı, yeni bir durumsal grafik formatı, hafif çok platformlu bir çalışma zamanı ve son derece hızlı bir vektör oluşturucu sunar.\nBu uçtan uca süreç, arayüzleri hareketle canlandırır. Tasarımcılara ve geliştiricilere inşa etme araçları sunar.", + "select_language": "Dil Seç", "select": "Seç", - "please_wait": "Lütfen birkaç saniye bekleyin...", + "please_wait": "Lütfen bekleyin...", "downloading_data": "Başlangıç verileri indiriliyor", "lost_connection": "Bağlantı kesildi!", - "retry": "Yeniden dene", - "connected_to_internet": "Başlangıç oyun verilerini indirmek için internete bağlı olmalısınız.", + "retry": "Tekrar Dene", + "connected_to_internet": "Oyunun başlangıç verilerini indirmek için internete bağlı olmalısınız.", "start": "Başla", "step": "Adım", "question": "Soru", - "be_cureful": "Daha dikkatli\nol.", - "wrong_answer": "Cevabın\nyanlıştı.", - "you_got_diamond": "Elması kazandın", + "be_cureful": "Biraz daha\ndikkatli ol.", + "wrong_answer": "Yanlış\ncevap.", + "you_got_diamond": "Elması kazandın!", "map": "Harita", - "next": "Sonraki", + "next": "İleri", "you_win": "Kazandın!", - "skip": "Geç", - "intro_1_1": "Yemek hazır! Hadi hemen gelin ve güzel ellerinizi yıkayın!", - "intro_1_2": "Anne! Ellerimiz o kadar kirli değil! Peçeteyle sileriz!", - "intro_2": "İman saflığı...\nTemizliğin imanın bir parçası olduğunu gösterir!", - "intro_3": "Bu güzel davranışlar ruhumuzu güçlü ve güzel yapar!", + "skip": "Atla", + "intro_1_1": "Yemek hazır! Hadi hemen gelin ve ellerinizi güzelce yıkayın!", + "intro_1_2": "Anne! Ellerimiz o kadar kirli değil! Peçeteyle silebiliriz!", + "intro_2": "Temizlik imandandır...\nBu, temiz olmanın imanın bir işareti olduğu anlamına gelir!", + "intro_3": "Bu güzel davranışlar ruhlarımızı güçlü ve güzel yapar!", "intro_4": "Vadedilen Bahçe'ye yolculuk etmek ister misin?", "intro_5": "Eveeeet...\nHazırız!", "want_to_exit": "Çıkmak istiyor musun?", "exit_dialog_desc": "Geri dön, kahraman!\nMacera henüz bitmedi!", "cancel": "İptal", "exit": "Çıkış", - "play": "OYNAT", - "no_hadith": "Bu soru için hadis bulunamadı", - "showcase_answer": "Doğru seçeneğe\ndokunarak seç.", - "showcase_notif": "Anlatıcı, seçeneklerin\ncevaplarını sana\nokuyacak.", + "play": "OYNA", + "no_hadith": "Bu soru için bir Hadis bulunmuyor.", + "showcase_answer": "Seçmek için\ndoğru cevaba dokun.", + "showcase_notif": "Anlatıcı, cevap\nseçeneklerini sana\nokuyacak.", "showcase_stepper": "Burada, elmasa ulaşmak\niçin bu aşamadaki\nsoruları göreceksin.", - "showcase_hadith": "Bu soruya ait\nkaynakları ve hadisleri\nincele", - "showcase_guide": "Bu, sana yardımcı olacak\nbir rehberdir.", - "reward": "ödül", - "downloading": "İndiriliyor" -} + "showcase_hadith": "Bu soruya ait\nkaynakları ve Hadisleri\nincele.", + "showcase_guide": "Bu, sana yardımcı\nolacak bir rehberdir.", + "reward": "Ödül", + "downloading": "İndiriliyor..." +} \ No newline at end of file diff --git a/lib/l10n/app_ur.arb b/lib/l10n/app_ur.arb index ebc30c1..38ae013 100644 --- a/lib/l10n/app_ur.arb +++ b/lib/l10n/app_ur.arb @@ -1,42 +1,42 @@ { - "@@locale": "en", - "about_us": "About us", - "about_us_desc" : "Rive combines an interactive design tool, a new stateful graphics format, a lightweight multi-platform runtime, and a blazing-fast vector renderer. \nThis end-to-end pipeline brings interfaces to life with motion. It gives designers and devs the tools to build.", - "select_language": "Select language", - "select": "Select", - "please_wait": "wait a few moments...", - "downloading_data": "Downloading initial data", - "lost_connection": "Lost connection!", - "retry": "Retry", - "connected_to_internet": "You must be connected to the internet to download the initial game data.", - "start": "Start", - "step": "Step", - "question": "Question", - "be_cureful": "Be more\ncareful.", - "wrong_answer": "Your answer\nwas not correct.", - "you_got_diamond": "You got the diamond", - "map": "Map", - "next": "Next", - "you_win": "You Win!", - "skip": "Skip", - "intro_1_1": "Dinner is ready! Come quickly and wash your beautiful hands!", - "intro_1_2": "Mom! Our hands aren't that dirty! We'll just wipe them with a tissue!", - "intro_2": "The purity of faith... \nIt means cleanliness is a sign of faith!", - "intro_3": "These good deeds make our souls strong and beautiful!", - "intro_4": "Do you want to travel to the Promised Garden?", - "intro_5": "Yessss....\nWe are ready!", - "want_to_exit": "Want To Exit?", - "exit_dialog_desc": "Come back, hero!\nThe adventure isn’t over yet", - "cancel": "Cancel", - "exit": "Exit", - "play": "PLAY", - "no_hadith": "There isn't any hadith for this question", - "showcase_answer": "Tap the correct option\nto select.", - "showcase_notif": "The announcer will\nread the answers to\nthe options to you.", - "showcase_stepper": "Here you will see the\nquestions for this\nstage to reach the\ndiamond.", - "showcase_hadith": "View sources and\nhadiths for this\nquestion", - "showcase_guide": "This is a guide that will\nhelp you.", - "reward": "Reward", - "coming_soon": "Next stages will open soon", - "downloading": "Downloading" + "@@locale": "ur", + "about_us": "ہمارے بارے میں", + "about_us_desc": "Rive ایک انٹرایکٹو ڈیزائن ٹول، ایک نیا اسٹیٹ فل گرافکس فارمیٹ، ایک ہلکا ملٹی پلیٹ فارم رن ٹائم، اور ایک انتہائی تیز ویکٹر رینڈرر کو یکجا کرتا ہے۔\nیہ اینڈ ٹو اینڈ پائپ لائن انٹرفیسز کو حرکت کے ساتھ زندگی بخشتی ہے۔ یہ ڈیزائنرز اور ڈیولپرز کو تخلیق کرنے کے ٹولز فراہم کرتی ہے۔", + "select_language": "زبان منتخب کریں", + "select": "منتخب کریں", + "please_wait": "براہ کرم انتظار کریں...", + "downloading_data": "ابتدائی ڈیٹا ڈاؤن لوڈ ہو رہا ہے", + "lost_connection": "کنکشن ٹوٹ گیا!", + "retry": "دوبارہ کوشش کریں", + "connected_to_internet": "گیم کا ابتدائی ڈیٹا ڈاؤن لوڈ کرنے کے لیے آپ کا انٹرنیٹ سے منسلک ہونا ضروری ہے۔", + "start": "شروع کریں", + "step": "مرحلہ", + "question": "سوال", + "be_cureful": "مزید احتیاط\nکریں۔", + "wrong_answer": "غلط\nجواب۔", + "you_got_diamond": "آپ نے ہیرا حاصل کر لیا!", + "map": "نقشہ", + "next": "اگلا", + "you_win": "آپ جیت گئے!", + "skip": "چھوڑیں", + "intro_1_1": "کھانا تیار ہے! جلدی آئیں اور اچھی طرح ہاتھ دھو لیں!", + "intro_1_2": "امی! ہمارے ہاتھ اتنے گندے نہیں ہیں! ہم بس ٹشو سے صاف کر لیں گے!", + "intro_2": "ایمان کی پاکیزگی...\nاس کا مطلب ہے کہ صفائی نصف ایمان ہے!", + "intro_3": "یہ نیک اعمال ہماری روحوں کو مضبوط اور خوبصورت بناتے ہیں!", + "intro_4": "کیا آپ باغِ بہشت کا سفر کرنا چاہتے ہیں؟", + "intro_5": "ہاںاںاں...\nہم تیار ہیں!", + "want_to_exit": "کیا آپ باہر نکلنا چاہتے ہیں؟", + "exit_dialog_desc": "واپس آئیں، ہیرو!\nسفر ابھی ختم نہیں ہوا!", + "cancel": "منسوخ کریں", + "exit": "باہر نکلیں", + "play": "کھیلیں", + "no_hadith": "اس سوال کے لیے کوئی حدیث موجود نہیں ہے۔", + "showcase_answer": "منتخب کرنے کے لیے\nدرست آپشن پر ٹیپ کریں۔", + "showcase_notif": "راوی آپ کو\nآپشنز کے جوابات\nپڑھ کر سنائے گا۔", + "showcase_stepper": "یہاں آپ ہیرے تک\nپہنچنے کے لیے\nاس مرحلے کے\nسوالات دیکھیں گے۔", + "showcase_hadith": "اس سوال کے\nحوالہ جات اور احادیث\nدیکھیں۔", + "showcase_guide": "یہ ایک گائیڈ ہے\nجو آپ کی مدد کرے گی۔", + "reward": "انعام", + "coming_soon": "اگلے مراحل جلد کھلیں گے", + "downloading": "ڈاؤن لوڈ ہو رہا ہے..." } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 804ecae..7e1b02d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -57,9 +57,7 @@ class MainApp extends StatelessWidget { darkTheme: MyTheme.dark, themeMode: ThemeService.getTheme(), locale: state.locale, - supportedLocales: MyConstants.languages.map( - (e) => e.locale ?? const Locale('en', 'US'), - ), + supportedLocales: AppLocalizations.supportedLocales, routerConfig: appPages, localizationsDelegates: const [ AppLocalizations.delegate,