Browse Source

update localization and levels

develop
sina 3 weeks ago
parent
commit
3dc6bfafd0
  1. BIN
      assets/videos/intro_1_ar.mp4
  2. BIN
      assets/videos/intro_2_ar.mp4
  3. BIN
      assets/videos/intro_3_ar.mp4
  4. BIN
      assets/videos/intro_4_ar.mp4
  5. BIN
      assets/videos/intro_5_ar.mp4
  6. 3
      devtools_options.yaml
  7. 2
      lib/core/constants/my_api.dart
  8. 10
      lib/core/constants/my_constants.dart
  9. 19
      lib/core/widgets/button/my_yellow_button.dart
  10. 63
      lib/core/widgets/dialog/exit_dialog.dart
  11. 42
      lib/core/widgets/dialog/hadith_dialog.dart
  12. 2
      lib/features/level/data/model/node_model.dart
  13. 279
      lib/features/level/presentation/bloc/level_bloc.dart
  14. 64
      lib/features/level/presentation/ui/level_page.dart
  15. 14
      lib/features/level/presentation/ui/widgets/level_path.dart
  16. 18
      lib/features/level/presentation/ui/widgets/node_widget.dart
  17. 8
      lib/features/question/presentation/bloc/question_bloc.dart
  18. 85
      lib/features/question/presentation/ui/screens/question_screen.dart
  19. 80
      lib/l10n/app_az.arb
  20. 8
      lib/l10n/app_de.arb
  21. 80
      lib/l10n/app_es.arb
  22. 80
      lib/l10n/app_fa.arb
  23. 80
      lib/l10n/app_hi.arb
  24. 80
      lib/l10n/app_id.arb
  25. 35
      lib/l10n/app_localizations.dart
  26. 134
      lib/l10n/app_localizations_az.dart
  27. 6
      lib/l10n/app_localizations_de.dart
  28. 136
      lib/l10n/app_localizations_es.dart
  29. 133
      lib/l10n/app_localizations_fa.dart
  30. 137
      lib/l10n/app_localizations_hi.dart
  31. 137
      lib/l10n/app_localizations_id.dart
  32. 136
      lib/l10n/app_localizations_pt.dart
  33. 40
      lib/l10n/app_localizations_ru.dart
  34. 46
      lib/l10n/app_localizations_tr.dart
  35. 133
      lib/l10n/app_localizations_ur.dart
  36. 80
      lib/l10n/app_pt.arb
  37. 40
      lib/l10n/app_ru.arb
  38. 46
      lib/l10n/app_tr.arb
  39. 80
      lib/l10n/app_ur.arb
  40. 4
      lib/main.dart

BIN
assets/videos/intro_1_ar.mp4

BIN
assets/videos/intro_2_ar.mp4

BIN
assets/videos/intro_3_ar.mp4

BIN
assets/videos/intro_4_ar.mp4

BIN
assets/videos/intro_5_ar.mp4

3
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:

2
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.';

10
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<LanguageEntity> 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: ''),
];
}

19
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),
),
),
),
),
),

63
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),
),
],
),
],
),
),
),
),

42
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<void> 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,
),
),
]
],
],
),
),

2
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

279
lib/features/level/presentation/bloc/level_bloc.dart

@ -56,138 +56,279 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
final GetLastDownloadedLevel _getLastDownloadedLevel;
/// ------------Variables------------
List<LevelLocation> locationList = [
final List<LevelLocation> 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<LevelLocation> 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<LevelEvent, LevelState> {
}, (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()

64
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<LevelPage> {
if (!mounted) return;
final maxLevelCount =
int.tryParse(
LocalStorage.readData(key: MyConstants.maxLevelCount) ?? '20',
LocalStorage.readData(key: MyConstants.maxLevelCount) ?? '24',
) ??
20;
24;
context.read<DownloadBloc>().add(
StartDownloadEvent(toLevel: maxLevelCount),
);
@ -206,7 +207,7 @@ class _LevelPageState extends State<LevelPage> {
),
),
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<LevelPage> {
Widget _path(BuildContext context) {
return BlocBuilder<LevelBloc, LevelState>(
builder: (context, state) {
final locationList = context.read<LevelBloc>().locationList;
final nodeList = context.read<LevelBloc>().nodeList;
final comingSoon = locationList.firstWhereIndexedOrNull((
index,
location,
) {
final locationShortList = context.read<LevelBloc>().locationListShort;
final locationLongList = context.read<LevelBloc>().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<LevelPage> {
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<LevelBloc, LevelState>(
buildWhen: (previous, current) =>
previous.chooseLevel?.id != current.chooseLevel?.id,
builder: (context, state) => NodeWidget(
chooseLevel: state.chooseLevel,
levelIndex: location.index,
node: node,
type: context.read<LevelBloc>().getLevelType,
getReward: context.read<LevelBloc>().getReward,
onRewardPressed: (prize) {
context.read<LevelBloc>().showReward(
context: context,
prize: prize,
);
},
onTap: (LevelEntity level, LevelType type) {
context.read<LevelBloc>().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<LevelBloc>().getLevelType,
getReward: context.read<LevelBloc>().getReward,
onRewardPressed: (prize) {
context.read<LevelBloc>().showReward(
context: context,
prize: prize,
);
},
onTap: (LevelEntity level, LevelType type) {
context.read<LevelBloc>().add(
ChooseLevelEvent(level, type),
);
},
),
),
);
}),
],

14
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,

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

8
lib/features/question/presentation/bloc/question_bloc.dart

@ -85,6 +85,7 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
};
Stream<double>? volumeStream;
bool showAnswerSequence = true;
bool isHadithDialogOpen = false;
/// ------------Controllers------------
final AudioService _mainAudioService;
@ -105,11 +106,13 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
// );
// }
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<QuestionEvent, QuestionState> {
bool showConfetti = false,
bool autoClose = true,
}) async {
if (isHadithDialogOpen) return;
if (showConfetti == false) {
changeGlobeState(key: MyAnimations.globeStateSpeaking);
}

85
lib/features/question/presentation/ui/screens/question_screen.dart

@ -53,8 +53,8 @@ class _QuestionScreenState extends State<QuestionScreen>
context.read<QuestionBloc>().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<QuestionBloc>().imageAnimationController?.forward();
@ -315,49 +315,46 @@ class _QuestionScreenState extends State<QuestionScreen>
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<QuestionBloc>()
.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<QuestionBloc>()
.showAnswerDialog(
context: context,
answerEntity: answer,
);
},
onTap: (isCorrect, correctAnswer) =>
context.read<QuestionBloc>().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<QuestionBloc>()
.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<QuestionBloc>()
.showAnswerDialog(
context: context,
answerEntity: answer,
);
},
onTap: (isCorrect, correctAnswer) =>
context.read<QuestionBloc>().add(
ChooseAnswerEvent(
isCorrect,
correctAnswer,
context,
),
),
),
),
),
);

80
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"
}

8
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"
}
}

80
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"
}

80
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": "در حال دانلود"
}

80
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"
}

80
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"
}

35
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<Locale> supportedLocales = <Locale>[
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) => <String>[
'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(

134
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';
}

6
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';

136
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';
}

133
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 => 'در حال دانلود';
}

137
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';
}

137
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';
}

136
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...';
}

40
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 => 'Загрузка...';
}

46
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...';
}

133
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 => 'ڈاؤن لوڈ ہو رہا ہے...';
}

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

40
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": "Загрузка..."
}

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

80
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": "ڈاؤن لوڈ ہو رہا ہے..."
}

4
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,

Loading…
Cancel
Save